UNPKG

@patreon/studio

Version:

Patreon Studio Design System

32 lines 1.33 kB
'use client'; import cx from 'classnames'; import React, { useCallback } from 'react'; import { IconCheckmark } from '~/components/Icon'; import { LoadingSpinner } from '~/components/LoadingSpinner'; import { filterForAriaProps } from '~/utilities/accessibility'; import styles from './Toggle.module.css'; export function Toggle({ disabled, id, onClick, isLoading, isOn, ...props }) { const handleClick = useCallback((e) => { if (!disabled) { onClick?.(e); } }, [disabled, onClick]); const handleKeyPress = useCallback((e) => { if (['Space', 'Enter'].includes(e.key)) { handleClick(e); } }, [handleClick]); return (<button className={cx(styles.container, { [styles.isOn]: isOn, [styles.disabled]: disabled, [styles.isLoading]: isLoading, })} aria-checked={isOn} aria-live="polite" aria-readonly={disabled} disabled={disabled} id={id} onClick={handleClick} onKeyPress={handleKeyPress} role="switch" type="button" {...filterForAriaProps(props)}> <div className={styles.handle}> <IconCheckmark color="inherit"/> </div> <div className={styles.loadingSpinnerWrapper}> <LoadingSpinner color="actionBase" size="xs"/> </div> </button>); } //# sourceMappingURL=index.jsx.map