@patreon/studio
Version:
Patreon Studio Design System
34 lines (33 loc) • 1.99 kB
JSX
'use client';
import React, { useEffect, useRef } from 'react';
import { BodyText } from '../BodyText';
import { CheckMark, Indeterminate } from './Icons';
import { StyledCheckbox, StyledCheckboxContainer, StyledLabel, StyledSynthethicCheckbox, TextContainer, } from './styled-components';
export const Checkbox = React.forwardRef(function Checkbox({ autoFocus, checked, 'data-tag': dataTag, disabled, hideLabel, id, indeterminate = false, label, labelPosition = 'right', name, onBlur, onChange, onFocus, role = 'checkbox', size = 'md', type = 'checkbox', value, }, givenRef) {
const localRef = useRef(null);
const ref = givenRef ?? localRef;
const isChecked = checked || false;
useEffect(() => {
if (ref.current) {
ref.current.indeterminate = indeterminate;
}
});
return (<StyledLabel disabled={disabled} labelPosition={labelPosition}>
<StyledCheckboxContainer labelPosition={labelPosition} sizeValue={size}>
<StyledCheckbox aria-checked={indeterminate ? 'mixed' : isChecked} aria-label={hideLabel && typeof label === 'string' ? label : undefined}
// TODO (legacied jsx-a11y/no-autofocus)
// This failure is legacied in and should be updated. DO NOT COPY.
// eslint-disable-next-line jsx-a11y/no-autofocus
autoFocus={autoFocus} checked={isChecked} data-tag={dataTag} disabled={disabled} id={id} name={name} onBlur={onBlur} onChange={onChange} onFocus={onFocus} ref={ref} role={role} sizeValue={size} type={type} value={value}/>
<StyledSynthethicCheckbox sizeValue={size} data-tag="synthetic-container">
{indeterminate ? <Indeterminate size={size}/> : isChecked ? <CheckMark size={size}/> : null}
</StyledSynthethicCheckbox>
</StyledCheckboxContainer>
{!hideLabel && (<TextContainer>
<BodyText as="span" size={size} data-tag="label">
{label}
</BodyText>
</TextContainer>)}
</StyledLabel>);
});
//# sourceMappingURL=index.jsx.map