UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

183 lines (180 loc) 4.51 kB
import { c } from 'react-compiler-runtime'; import { clsx } from 'clsx'; import React, { useContext, useEffect } from 'react'; import useIsomorphicLayoutEffect from '../utils/useIsomorphicLayoutEffect.js'; import { CheckboxGroupContext } from '../CheckboxGroup/CheckboxGroupContext.js'; import classes from './Checkbox.module.css.js'; import sharedClasses from './shared.module.css.js'; import { jsx } from 'react/jsx-runtime'; import { useProvidedRefOrCreate } from '../hooks/useProvidedRefOrCreate.js'; /** * An accessible, native checkbox component */ const Checkbox = /*#__PURE__*/React.forwardRef((t0, ref) => { const $ = c(40); let checked; let className; let defaultChecked; let disabled; let indeterminate; let onChange; let required; let rest; let validationStatus; let value; if ($[0] !== t0) { ({ checked, className, defaultChecked, indeterminate, disabled, onChange, required, validationStatus, value, ...rest } = t0); $[0] = t0; $[1] = checked; $[2] = className; $[3] = defaultChecked; $[4] = disabled; $[5] = indeterminate; $[6] = onChange; $[7] = required; $[8] = rest; $[9] = validationStatus; $[10] = value; } else { checked = $[1]; className = $[2]; defaultChecked = $[3]; disabled = $[4]; indeterminate = $[5]; onChange = $[6]; required = $[7]; rest = $[8]; validationStatus = $[9]; value = $[10]; } const checkboxRef = useProvidedRefOrCreate(ref); const checkboxGroupContext = useContext(CheckboxGroupContext); let t1; if ($[11] !== checkboxGroupContext || $[12] !== onChange) { t1 = e => { checkboxGroupContext.onChange && checkboxGroupContext.onChange(e); onChange && onChange(e); }; $[11] = checkboxGroupContext; $[12] = onChange; $[13] = t1; } else { t1 = $[13]; } const handleOnChange = t1; const t2 = indeterminate ? false : checked; const t3 = required ? "true" : "false"; const t4 = validationStatus === "error" ? "true" : "false"; let t5; if ($[14] !== checkboxRef || $[15] !== defaultChecked || $[16] !== disabled || $[17] !== handleOnChange || $[18] !== required || $[19] !== rest || $[20] !== t2 || $[21] !== t3 || $[22] !== t4 || $[23] !== value) { t5 = { type: "checkbox", disabled, ref: checkboxRef, checked: t2, defaultChecked, required, "aria-required": t3, "aria-invalid": t4, onChange: handleOnChange, value, name: value, ...rest }; $[14] = checkboxRef; $[15] = defaultChecked; $[16] = disabled; $[17] = handleOnChange; $[18] = required; $[19] = rest; $[20] = t2; $[21] = t3; $[22] = t4; $[23] = value; $[24] = t5; } else { t5 = $[24]; } const inputProps = t5; let t6; if ($[25] !== checkboxRef || $[26] !== indeterminate) { t6 = () => { if (checkboxRef.current) { checkboxRef.current.indeterminate = indeterminate || false; } }; $[25] = checkboxRef; $[26] = indeterminate; $[27] = t6; } else { t6 = $[27]; } let t7; if ($[28] !== checkboxRef || $[29] !== checked || $[30] !== indeterminate) { t7 = [indeterminate, checked, checkboxRef]; $[28] = checkboxRef; $[29] = checked; $[30] = indeterminate; $[31] = t7; } else { t7 = $[31]; } useIsomorphicLayoutEffect(t6, t7); let t8; if ($[32] !== checkboxRef || $[33] !== indeterminate) { t8 = () => { const { current: checkbox } = checkboxRef; if (!checkbox) { return; } if (indeterminate) { checkbox.setAttribute("aria-checked", "mixed"); } else { checkbox.setAttribute("aria-checked", checkbox.checked ? "true" : "false"); } }; $[32] = checkboxRef; $[33] = indeterminate; $[34] = t8; } else { t8 = $[34]; } useEffect(t8); let t9; if ($[35] !== className) { t9 = clsx(className, sharedClasses.Input, classes.Checkbox); $[35] = className; $[36] = t9; } else { t9 = $[36]; } let t10; if ($[37] !== inputProps || $[38] !== t9) { t10 = /*#__PURE__*/jsx("input", { ...inputProps, className: t9 }); $[37] = inputProps; $[38] = t9; $[39] = t10; } else { t10 = $[39]; } return t10; }); Checkbox.displayName = 'Checkbox'; Checkbox.__SLOT__ = Symbol('Checkbox'); export { Checkbox as default };