react-aria
Version:
Spectrum UI components in React
1 lines • 6.16 kB
Source Map (JSON)
{"mappings":";;;;;;AAAA;;;;;;;;;;CAUC;;;;;AA6BM,SAAS,0CACd,KAAiC,EACjC,KAAyB,EACzB,QAA4C;IAE5C,MAAM,cAAc,CAAA,GAAA,qBAAa,EAAE;QACjC,YAAY,MAAM,UAAU,IAAI,MAAM,UAAU;QAChD,YAAY,MAAM,UAAU,CAAC,MAAM,KAAK;QACxC,iBAAiB,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,KAAK;QACxD,UAAS,UAAU;YACjB,IAAI,YACF,MAAM,QAAQ,CAAC,MAAM,KAAK;iBAE1B,MAAM,WAAW,CAAC,MAAM,KAAK;YAG/B,IAAI,MAAM,QAAQ,EAChB,MAAM,QAAQ,CAAC;QAEnB;IACF;IAEA,IAAI,QAAC,IAAI,QAAE,IAAI,iBAAE,aAAa,kBAAE,cAAc,sBAAE,kBAAkB,EAAC,GACjE,CAAA,GAAA,yCAAgB,EAAE,GAAG,CAAC;IACxB,qBAAqB,MAAM,kBAAkB,IAAI;IAEjD,sCAAsC;IACtC,IAAI,sBAAC,kBAAkB,EAAC,GAAG,CAAA,GAAA,6BAAqB,EAAE;QAChD,GAAG,KAAK;QACR,OAAO,YAAY,UAAU;QAC7B,mDAAmD;QACnD,MAAM;QACN,oBAAoB;IACtB;IAEA,oEAAoE;IACpE,IAAI,mBAAmB,CAAA,GAAA,aAAK,EAAE,CAAA,GAAA,gCAAwB;IACtD,IAAI,mBAAmB;QACrB,MAAM,UAAU,CACd,MAAM,KAAK,EACX,mBAAmB,SAAS,GAAG,qBAAqB,iBAAiB,OAAO;IAEhF;IAEA,CAAA,GAAA,gBAAQ,EAAE;IAEV,+CAA+C;IAC/C,IAAI,6BAA6B,MAAM,kBAAkB,CAAC,SAAS,GAC/D,MAAM,kBAAkB,GACxB;IACJ,IAAI,oBACF,uBAAuB,WAAW,MAAM,iBAAiB,GAAG;IAE9D,IAAI,MAAM,CAAA,GAAA,yCAAU,EAClB;QACE,GAAG,KAAK;QACR,YAAY,MAAM,UAAU,IAAI,MAAM,UAAU;QAChD,YAAY,MAAM,UAAU,IAAI,MAAM,UAAU;QAChD,MAAM,MAAM,IAAI,IAAI;QACpB,MAAM,MAAM,IAAI,IAAI;QACpB,YAAY,MAAM,UAAU,IAAI,MAAM,UAAU;4BAChD;QACA,CAAC,CAAA,GAAA,iCAAyB,EAAE,EAAE;YAC5B,oBAAoB;+BACpB;YACA,iBAAiB,MAAM,eAAe;YACtC,kBAAkB,MAAM,gBAAgB;YACxC,kBAAiB,CAAmB;gBAClC,iBAAiB,OAAO,GAAG;gBAC3B;YACF;QACF;IACF,GACA,aACA;IAGF,OAAO;QACL,GAAG,GAAG;QACN,YAAY;YACV,GAAG,IAAI,UAAU;YACjB,oBACE;gBAAC,IAAI,UAAU,CAAC,mBAAmB;gBAAE,MAAM,SAAS,GAAG,iBAAiB;gBAAM;aAAc,CACzF,MAAM,CAAC,SACP,IAAI,CAAC,QAAQ;QACpB;IACF;AACF","sources":["packages/react-aria/src/checkbox/useCheckboxGroupItem.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaCheckboxProps, CheckboxAria, useCheckbox} from './useCheckbox';\nimport {checkboxGroupData} from './utils';\nimport {CheckboxGroupState} from 'react-stately/useCheckboxGroupState';\nimport {\n DEFAULT_VALIDATION_RESULT,\n privateValidationStateProp,\n useFormValidationState\n} from 'react-stately/private/form/useFormValidationState';\nimport {RefObject, ValidationResult} from '@react-types/shared';\nimport {useEffect, useRef} from 'react';\nimport {useToggleState} from 'react-stately/useToggleState';\n\nexport interface AriaCheckboxGroupItemProps extends Omit<\n AriaCheckboxProps,\n 'isSelected' | 'defaultSelected'\n> {\n value: string;\n}\n\n/**\n * Provides the behavior and accessibility implementation for a checkbox component contained within\n * a checkbox group. Checkbox groups allow users to select multiple items from a list of options.\n *\n * @param props - Props for the checkbox.\n * @param state - State for the checkbox, as returned by `useCheckboxGroupState`.\n * @param inputRef - A ref for the HTML input element.\n */\nexport function useCheckboxGroupItem(\n props: AriaCheckboxGroupItemProps,\n state: CheckboxGroupState,\n inputRef: RefObject<HTMLInputElement | null>\n): CheckboxAria {\n const toggleState = useToggleState({\n isReadOnly: props.isReadOnly || state.isReadOnly,\n isSelected: state.isSelected(props.value),\n defaultSelected: state.defaultValue.includes(props.value),\n onChange(isSelected) {\n if (isSelected) {\n state.addValue(props.value);\n } else {\n state.removeValue(props.value);\n }\n\n if (props.onChange) {\n props.onChange(isSelected);\n }\n }\n });\n\n let {name, form, descriptionId, errorMessageId, validationBehavior} =\n checkboxGroupData.get(state)!;\n validationBehavior = props.validationBehavior ?? validationBehavior;\n\n // Local validation for this checkbox.\n let {realtimeValidation} = useFormValidationState({\n ...props,\n value: toggleState.isSelected,\n // Server validation is handled at the group level.\n name: undefined,\n validationBehavior: 'aria'\n });\n\n // Update the checkbox group state when realtime validation changes.\n let nativeValidation = useRef(DEFAULT_VALIDATION_RESULT);\n let updateValidation = () => {\n state.setInvalid(\n props.value,\n realtimeValidation.isInvalid ? realtimeValidation : nativeValidation.current\n );\n };\n\n useEffect(updateValidation);\n\n // Combine group and checkbox level validation.\n let combinedRealtimeValidation = state.realtimeValidation.isInvalid\n ? state.realtimeValidation\n : realtimeValidation;\n let displayValidation =\n validationBehavior === 'native' ? state.displayValidation : combinedRealtimeValidation;\n\n let res = useCheckbox(\n {\n ...props,\n isReadOnly: props.isReadOnly || state.isReadOnly,\n isDisabled: props.isDisabled || state.isDisabled,\n name: props.name || name,\n form: props.form || form,\n isRequired: props.isRequired ?? state.isRequired,\n validationBehavior,\n [privateValidationStateProp]: {\n realtimeValidation: combinedRealtimeValidation,\n displayValidation,\n resetValidation: state.resetValidation,\n commitValidation: state.commitValidation,\n updateValidation(v: ValidationResult) {\n nativeValidation.current = v;\n updateValidation();\n }\n }\n },\n toggleState,\n inputRef\n );\n\n return {\n ...res,\n inputProps: {\n ...res.inputProps,\n 'aria-describedby':\n [res.inputProps['aria-describedby'], state.isInvalid ? errorMessageId : null, descriptionId]\n .filter(Boolean)\n .join(' ') || undefined\n }\n };\n}\n"],"names":[],"version":3,"file":"useCheckboxGroupItem.mjs.map"}