From 954bfab572dbf94041e58126d65d1f5793905e6b Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Fri, 3 Apr 2026 17:38:34 -0700 Subject: [PATCH 1/6] feat: Support help text in Checkbox, Radio, and Switch --- .../react-spectrum/src/checkbox/Checkbox.tsx | 3 +- .../@adobe/react-spectrum/src/radio/Radio.tsx | 3 +- .../react-spectrum/src/switch/Switch.tsx | 3 +- packages/@react-spectrum/s2/src/Checkbox.tsx | 118 ++++++---- .../@react-spectrum/s2/src/RadioGroup.tsx | 4 +- packages/@react-spectrum/s2/src/Switch.tsx | 5 +- packages/@react-spectrum/s2/src/useDOMRef.ts | 15 +- packages/@react-types/shared/src/refs.d.ts | 2 +- .../dev/s2-docs/pages/react-aria/Checkbox.mdx | 36 ++-- .../pages/react-aria/CheckboxGroup.mdx | 44 +++- .../s2-docs/pages/react-aria/RadioGroup.mdx | 61 ++++-- .../dev/s2-docs/pages/react-aria/Switch.mdx | 38 ++-- packages/dev/s2-docs/pages/s2/Checkbox.mdx | 5 +- .../react-aria-components/exports/Checkbox.ts | 11 +- .../exports/RadioGroup.ts | 4 +- .../react-aria-components/exports/Switch.ts | 11 +- .../react-aria-components/exports/index.ts | 12 +- .../react-aria-components/src/Checkbox.tsx | 203 +++++++++++++++--- .../react-aria-components/src/GridList.tsx | 8 +- .../react-aria-components/src/RadioGroup.tsx | 149 ++++++++++++- packages/react-aria-components/src/Switch.tsx | 199 ++++++++++++++++- packages/react-aria-components/src/Table.tsx | 13 +- packages/react-aria-components/src/Tree.tsx | 7 +- .../test/Checkbox.test.js | 105 ++++++--- .../test/RadioGroup.test.js | 111 ++++++---- .../react-aria-components/test/Switch.test.js | 113 ++++++++-- .../react-aria/src/checkbox/useCheckbox.ts | 49 ++--- packages/react-aria/src/radio/useRadio.ts | 14 +- packages/react-aria/src/switch/useSwitch.ts | 45 ++-- packages/react-aria/src/toggle/useToggle.ts | 96 +++++++-- starters/docs/src/Checkbox.css | 13 +- starters/docs/src/Checkbox.tsx | 30 +-- starters/docs/src/CheckboxGroup.css | 3 +- starters/docs/src/RadioGroup.css | 15 +- starters/docs/src/RadioGroup.tsx | 22 +- starters/docs/src/Switch.css | 18 +- starters/docs/src/Switch.tsx | 32 +-- starters/tailwind/src/Checkbox.tsx | 43 ++-- starters/tailwind/src/Field.tsx | 4 +- starters/tailwind/src/RadioGroup.tsx | 26 ++- starters/tailwind/src/Switch.tsx | 33 +-- 41 files changed, 1310 insertions(+), 416 deletions(-) diff --git a/packages/@adobe/react-spectrum/src/checkbox/Checkbox.tsx b/packages/@adobe/react-spectrum/src/checkbox/Checkbox.tsx index 65d0d4e82fc..34c2a3bab66 100644 --- a/packages/@adobe/react-spectrum/src/checkbox/Checkbox.tsx +++ b/packages/@adobe/react-spectrum/src/checkbox/Checkbox.tsx @@ -68,7 +68,7 @@ export const Checkbox = forwardRef(function Checkbox(props: SpectrumCheckboxProp // This is a bit unorthodox. Typically, hooks cannot be called in a conditional, // but since the checkbox won't move in and out of a group, it should be safe. let groupState = useContext(CheckboxGroupContext); - let {inputProps, isInvalid, isDisabled} = groupState + let {labelProps, inputProps, isInvalid, isDisabled} = groupState // eslint-disable-next-line react-hooks/rules-of-hooks ? useCheckboxGroupItem({ ...props, @@ -104,6 +104,7 @@ export const Checkbox = forwardRef(function Checkbox(props: SpectrumCheckboxProp return (