@cdx-ui/primitives 0.0.1-beta.141 → 0.0.1-beta.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/checkbox/CheckboxRoot.web.js +91 -28
- package/lib/commonjs/checkbox/CheckboxRoot.web.js.map +1 -1
- package/lib/commonjs/checkbox/useCheckboxRoot.js +33 -19
- package/lib/commonjs/checkbox/useCheckboxRoot.js.map +1 -1
- package/lib/commonjs/radio/RadioGroup.js +65 -16
- package/lib/commonjs/radio/RadioGroup.js.map +1 -1
- package/lib/commonjs/radio/RadioRoot.web.js +114 -26
- package/lib/commonjs/radio/RadioRoot.web.js.map +1 -1
- package/lib/commonjs/radio/context.js.map +1 -1
- package/lib/commonjs/radio/useRadioGroupNavigation.js +79 -0
- package/lib/commonjs/radio/useRadioGroupNavigation.js.map +1 -0
- package/lib/commonjs/radio/useRadioRoot.js +14 -13
- package/lib/commonjs/radio/useRadioRoot.js.map +1 -1
- package/lib/module/checkbox/CheckboxRoot.web.js +92 -29
- package/lib/module/checkbox/CheckboxRoot.web.js.map +1 -1
- package/lib/module/checkbox/useCheckboxRoot.js +34 -20
- package/lib/module/checkbox/useCheckboxRoot.js.map +1 -1
- package/lib/module/radio/RadioGroup.js +68 -19
- package/lib/module/radio/RadioGroup.js.map +1 -1
- package/lib/module/radio/RadioRoot.web.js +117 -29
- package/lib/module/radio/RadioRoot.web.js.map +1 -1
- package/lib/module/radio/context.js.map +1 -1
- package/lib/module/radio/useRadioGroupNavigation.js +74 -0
- package/lib/module/radio/useRadioGroupNavigation.js.map +1 -0
- package/lib/module/radio/useRadioRoot.js +14 -13
- package/lib/module/radio/useRadioRoot.js.map +1 -1
- package/lib/typescript/checkbox/CheckboxRoot.web.d.ts +8 -0
- package/lib/typescript/checkbox/CheckboxRoot.web.d.ts.map +1 -1
- package/lib/typescript/checkbox/useCheckboxRoot.d.ts +7 -18
- package/lib/typescript/checkbox/useCheckboxRoot.d.ts.map +1 -1
- package/lib/typescript/radio/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/radio/RadioRoot.web.d.ts +8 -0
- package/lib/typescript/radio/RadioRoot.web.d.ts.map +1 -1
- package/lib/typescript/radio/context.d.ts +6 -1
- package/lib/typescript/radio/context.d.ts.map +1 -1
- package/lib/typescript/radio/types.d.ts +7 -0
- package/lib/typescript/radio/types.d.ts.map +1 -1
- package/lib/typescript/radio/useRadioGroupNavigation.d.ts +17 -0
- package/lib/typescript/radio/useRadioGroupNavigation.d.ts.map +1 -0
- package/lib/typescript/radio/useRadioRoot.d.ts +4 -18
- package/lib/typescript/radio/useRadioRoot.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/checkbox/CheckboxRoot.web.tsx +105 -29
- package/src/checkbox/useCheckboxRoot.ts +37 -15
- package/src/radio/RadioGroup.tsx +84 -20
- package/src/radio/RadioRoot.web.tsx +136 -31
- package/src/radio/context.tsx +6 -1
- package/src/radio/types.ts +6 -0
- package/src/radio/useRadioGroupNavigation.ts +104 -0
- package/src/radio/useRadioRoot.ts +18 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_visuallyHidden","_utils","_focus","_slot","_dataAttributes","_context","_useRadioRoot","_jsxRuntime","RadioRoot","exports","forwardRef","asChild","children","props","ref","isHovered","isHoveredProp","isFocusVisible","isFocusVisibleProp","isDisabled","isDisabledProp","isInvalid","isInvalidProp","isReadOnly","isReadOnlyProp","isFocused","isPressed","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_visuallyHidden","_utils","_focus","_slot","_dataAttributes","_context","_useRadioRoot","_useRadioGroupNavigation","_jsxRuntime","RadioRoot","exports","forwardRef","asChild","children","props","ref","isHovered","isHoveredProp","isFocusVisible","isFocusVisibleProp","isDisabled","isDisabledProp","isInvalid","isInvalidProp","isReadOnly","isReadOnlyProp","isFocused","isPressed","radioGroupContext","useContext","RadioGroupContext","combinedProps","inputProps","isChecked","mergedRef","inputRef","useRadioRoot","useInputRefForAria","focusProps","useFocusRing","nodeRef","useRef","setRefs","mergeRefs","onPress","_onPress","onChange","_onChange","role","_role","tabIndex","_tabIndex","disabled","_disabled","checked","_checked","value","_value","type","_type","name","_name","form","_form","required","_required","inputAriaProps","resolvedDisabled","resolvedReadOnly","selectThis","radioGroupState","setSelectedValue","selectedValue","focusedValue","registerRadio","unregisterRadio","getRadios","groupName","useEffect","node","current","isRovingTabStop","useMemo","enabledRadios","filter","entry","rovingValue","getRovingFocusValue","handleKeyDown","event","key","preventDefault","contextValue","Comp","Slot","Pressable","jsx","RadioProvider","jsxs","Fragment","VisuallyHidden","readOnly","style","pointerEvents","undefined","accessibilityRole","accessibilityState","onClick","onKeyDown","composeEventHandlers","mergeDataAttributes","dataAttributes","hover","invalid","readonly","active","focus","focusVisible","displayName"],"sourceRoot":"../../../src","sources":["radio/RadioRoot.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_utils","e","__esModule","default","RadioProvider","useRadioContext","createContext","exports","RadioGroupContext","React"],"sourceRoot":"../../../src","sources":["radio/context.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAA8C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIvC,MAAM,CAACG,aAAa,EAAEC,eAAe,CAAC,GAAG,IAAAC,oBAAa,EAAqB,cAAc,CAAC;AAACC,OAAA,CAAAF,eAAA,GAAAA,eAAA;AAAAE,OAAA,CAAAH,aAAA,GAAAA,aAAA;AAW3F,MAAMI,iBAAiB,GAAAD,OAAA,CAAAC,iBAAA,gBAAGC,cAAK,CAACH,aAAa,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_utils","e","__esModule","default","RadioProvider","useRadioContext","createContext","exports","RadioGroupContext","React"],"sourceRoot":"../../../src","sources":["radio/context.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAA8C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIvC,MAAM,CAACG,aAAa,EAAEC,eAAe,CAAC,GAAG,IAAAC,oBAAa,EAAqB,cAAc,CAAC;AAACC,OAAA,CAAAF,eAAA,GAAAA,eAAA;AAAAE,OAAA,CAAAH,aAAA,GAAAA,aAAA;AAW3F,MAAMI,iBAAiB,GAAAD,OAAA,CAAAC,iBAAA,gBAAGC,cAAK,CAACH,aAAa,CAS1C,IAAI,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getRovingFocusValue = getRovingFocusValue;
|
|
7
|
+
exports.useRadioGroupNavigation = useRadioGroupNavigation;
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
// Web-only — native platforms rely on OS-managed sequential focus (VoiceOver/TalkBack).
|
|
10
|
+
|
|
11
|
+
function isEnabledRadioValue(value, enabledRadios) {
|
|
12
|
+
return value != null && enabledRadios.some(([radioValue]) => radioValue === value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** Resolves which radio value should hold the roving tab stop / keyboard focus anchor. */
|
|
16
|
+
function getRovingFocusValue(focusedValue, selectedValue, enabledRadios) {
|
|
17
|
+
const defaultFocusValue = isEnabledRadioValue(selectedValue, enabledRadios) ? selectedValue : enabledRadios[0]?.[0];
|
|
18
|
+
const resolvedFocusedValue = isEnabledRadioValue(focusedValue, enabledRadios) ? focusedValue : undefined;
|
|
19
|
+
return resolvedFocusedValue ?? defaultFocusValue;
|
|
20
|
+
}
|
|
21
|
+
function useRadioGroupNavigation({
|
|
22
|
+
getRadios,
|
|
23
|
+
focusedValue,
|
|
24
|
+
setFocusedValue,
|
|
25
|
+
selectedValue,
|
|
26
|
+
selectValue
|
|
27
|
+
}) {
|
|
28
|
+
const selectValueRef = (0, _react.useRef)(selectValue);
|
|
29
|
+
selectValueRef.current = selectValue;
|
|
30
|
+
const getEnabledRadios = (0, _react.useCallback)(() => getRadios().filter(([, entry]) => !entry.disabled), [getRadios]);
|
|
31
|
+
const moveFocus = (0, _react.useCallback)(([targetValue, targetEntry]) => {
|
|
32
|
+
setFocusedValue(targetValue);
|
|
33
|
+
targetEntry.node?.focus?.();
|
|
34
|
+
selectValueRef.current(targetValue);
|
|
35
|
+
}, [setFocusedValue]);
|
|
36
|
+
const handleKeyDown = (0, _react.useCallback)(e => {
|
|
37
|
+
const enabledRadios = getEnabledRadios();
|
|
38
|
+
if (enabledRadios.length === 0) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const currentValue = getRovingFocusValue(focusedValue, selectedValue, enabledRadios);
|
|
42
|
+
const idx = enabledRadios.findIndex(([value]) => value === currentValue);
|
|
43
|
+
switch (e.key) {
|
|
44
|
+
case 'ArrowDown':
|
|
45
|
+
case 'ArrowRight':
|
|
46
|
+
{
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
moveFocus(enabledRadios[idx < enabledRadios.length - 1 ? idx + 1 : 0]);
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'ArrowUp':
|
|
52
|
+
case 'ArrowLeft':
|
|
53
|
+
{
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
moveFocus(enabledRadios[idx > 0 ? idx - 1 : enabledRadios.length - 1]);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'Home':
|
|
59
|
+
{
|
|
60
|
+
e.preventDefault();
|
|
61
|
+
moveFocus(enabledRadios[0]);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'End':
|
|
65
|
+
{
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
const last = enabledRadios.at(-1);
|
|
68
|
+
if (last) {
|
|
69
|
+
moveFocus(last);
|
|
70
|
+
}
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}, [focusedValue, selectedValue, getEnabledRadios, moveFocus]);
|
|
75
|
+
return {
|
|
76
|
+
handleKeyDown
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=useRadioGroupNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","isEnabledRadioValue","value","enabledRadios","some","radioValue","getRovingFocusValue","focusedValue","selectedValue","defaultFocusValue","resolvedFocusedValue","undefined","useRadioGroupNavigation","getRadios","setFocusedValue","selectValue","selectValueRef","useRef","current","getEnabledRadios","useCallback","filter","entry","disabled","moveFocus","targetValue","targetEntry","node","focus","handleKeyDown","e","length","currentValue","idx","findIndex","key","preventDefault","last","at"],"sourceRoot":"../../../src","sources":["radio/useRadioGroupNavigation.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,27 +13,28 @@ function useRadioRoot(props, ref, {
|
|
|
13
13
|
useInputRefForAria = false
|
|
14
14
|
} = {}) {
|
|
15
15
|
const formControlContext = (0, _utils.useFormControlContext)();
|
|
16
|
-
const {
|
|
17
|
-
isInvalid,
|
|
18
|
-
isReadOnly,
|
|
19
|
-
...combinedProps
|
|
20
|
-
} = {
|
|
21
|
-
...formControlContext,
|
|
22
|
-
...props
|
|
23
|
-
};
|
|
24
16
|
const radioGroupContext = (0, _react.useContext)(_context.RadioGroupContext);
|
|
25
17
|
if (!radioGroupContext) {
|
|
26
18
|
throw new Error('Radio must be rendered inside a Radio.Group. Standalone Radio is not supported.');
|
|
27
19
|
}
|
|
20
|
+
const isInvalid = props.isInvalid ?? formControlContext.isInvalid;
|
|
21
|
+
const isReadOnly = props.isReadOnly ?? formControlContext.isReadOnly ?? radioGroupContext.state.isReadOnly;
|
|
22
|
+
const isDisabled = props.isDisabled ?? formControlContext.isDisabled ?? radioGroupContext.state.isDisabled;
|
|
23
|
+
const combinedProps = {
|
|
24
|
+
...props,
|
|
25
|
+
isInvalid,
|
|
26
|
+
isReadOnly,
|
|
27
|
+
isDisabled
|
|
28
|
+
};
|
|
28
29
|
const rootRef = (0, _react.useRef)(null);
|
|
29
30
|
const inputRef = (0, _react.useRef)(null);
|
|
30
31
|
const mergedRootRef = (0, _utils.mergeRefs)(ref, rootRef);
|
|
31
|
-
const ariaLabel =
|
|
32
|
+
const ariaLabel = props['aria-label'] || props.value || 'Radio';
|
|
32
33
|
const radio = (0, _radio.useRadio)({
|
|
33
34
|
...combinedProps,
|
|
34
35
|
'aria-label': ariaLabel,
|
|
35
|
-
isReadOnly
|
|
36
|
-
isDisabled
|
|
36
|
+
isReadOnly,
|
|
37
|
+
isDisabled
|
|
37
38
|
}, radioGroupContext.radioGroupState, useInputRefForAria ? inputRef : rootRef);
|
|
38
39
|
const {
|
|
39
40
|
inputProps,
|
|
@@ -41,7 +42,7 @@ function useRadioRoot(props, ref, {
|
|
|
41
42
|
} = radio;
|
|
42
43
|
const {
|
|
43
44
|
checked: isChecked,
|
|
44
|
-
disabled:
|
|
45
|
+
disabled: isDisabledFromInput
|
|
45
46
|
} = inputProps;
|
|
46
47
|
const {
|
|
47
48
|
hoverProps,
|
|
@@ -54,7 +55,7 @@ function useRadioRoot(props, ref, {
|
|
|
54
55
|
inputProps,
|
|
55
56
|
labelProps: labelProps ?? {},
|
|
56
57
|
isChecked,
|
|
57
|
-
isDisabled,
|
|
58
|
+
isDisabled: isDisabledFromInput,
|
|
58
59
|
isHovered,
|
|
59
60
|
hoverProps,
|
|
60
61
|
mergedRef: mergedRootRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_utils","_radio","_interactions","_context","useRadioRoot","props","ref","useInputRefForAria","formControlContext","useFormControlContext","
|
|
1
|
+
{"version":3,"names":["_react","require","_utils","_radio","_interactions","_context","useRadioRoot","props","ref","useInputRefForAria","formControlContext","useFormControlContext","radioGroupContext","useContext","RadioGroupContext","Error","isInvalid","isReadOnly","state","isDisabled","combinedProps","rootRef","useRef","inputRef","mergedRootRef","mergeRefs","ariaLabel","value","radio","useRadio","radioGroupState","inputProps","labelProps","checked","isChecked","disabled","isDisabledFromInput","hoverProps","isHovered","useHover","mergedRef"],"sourceRoot":"../../../src","sources":["radio/useRadioRoot.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAOO,SAASK,YAAYA,CAC1BC,KAAkB,EAClBC,GAAwB,EACxB;EAAEC,kBAAkB,GAAG;AAA2B,CAAC,GAAG,CAAC,CAAC,EACxD;EACA,MAAMC,kBAAkB,GAAG,IAAAC,4BAAqB,EAAC,CAAC;EAClD,MAAMC,iBAAiB,GAAG,IAAAC,iBAAU,EAACC,0BAAiB,CAAC;EAEvD,IAAI,CAACF,iBAAiB,EAAE;IACtB,MAAM,IAAIG,KAAK,CACb,iFACF,CAAC;EACH;EAEA,MAAMC,SAAS,GAAGT,KAAK,CAACS,SAAS,IAAIN,kBAAkB,CAACM,SAAS;EACjE,MAAMC,UAAU,GACdV,KAAK,CAACU,UAAU,IAAIP,kBAAkB,CAACO,UAAU,IAAIL,iBAAiB,CAACM,KAAK,CAACD,UAAU;EACzF,MAAME,UAAU,GACdZ,KAAK,CAACY,UAAU,IAAIT,kBAAkB,CAACS,UAAU,IAAIP,iBAAiB,CAACM,KAAK,CAACC,UAAU;EAEzF,MAAMC,aAAa,GAAG;IACpB,GAAGb,KAAK;IACRS,SAAS;IACTC,UAAU;IACVE;EACF,CAAC;EAED,MAAME,OAAO,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EAC5B,MAAMC,QAAQ,GAAG,IAAAD,aAAM,EAA0B,IAAI,CAAC;EACtD,MAAME,aAAa,GAAG,IAAAC,gBAAS,EAACjB,GAAG,EAASa,OAAc,CAAC;EAC3D,MAAMK,SAAS,GAAGnB,KAAK,CAAC,YAAY,CAAC,IAAIA,KAAK,CAACoB,KAAK,IAAI,OAAO;EAE/D,MAAMC,KAAK,GAAG,IAAAC,eAAQ,EACpB;IACE,GAAGT,aAAa;IAChB,YAAY,EAAEM,SAAS;IACvBT,UAAU;IACVE;EACF,CAAC,EACDP,iBAAiB,CAACkB,eAAe,EAChCrB,kBAAkB,GAAGc,QAAQ,GAAGF,OACnC,CAAC;EAED,MAAM;IAAEU,UAAU;IAAEC;EAAW,CAAC,GAAGJ,KAElC;EAED,MAAM;IAAEK,OAAO,EAAEC,SAAS;IAAEC,QAAQ,EAAEC;EAAoB,CAAC,GAAGL,UAAU;EAExE,MAAM;IAAEM,UAAU;IAAEC;EAAU,CAAC,GAAG,IAAAC,sBAAQ,EAAC,CAAC,CAAC,EAAElB,OAAO,CAAC;EAEvD,OAAO;IACLD,aAAa;IACbJ,SAAS,EAAEA,SAAS,IAAIJ,iBAAiB,CAACM,KAAK,CAACF,SAAS;IACzDC,UAAU,EAAEA,UAAU,IAAIL,iBAAiB,CAACM,KAAK,CAACD,UAAU;IAC5Dc,UAAU;IACVC,UAAU,EAAEA,UAAU,IAAI,CAAC,CAAC;IAC5BE,SAAS;IACTf,UAAU,EAAEiB,mBAAmB;IAC/BE,SAAS;IACTD,UAAU;IACVG,SAAS,EAAEhB,aAAa;IACxBD;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -3,12 +3,21 @@
|
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import { Pressable } from 'react-native';
|
|
5
5
|
import { VisuallyHidden } from '@react-aria/visually-hidden';
|
|
6
|
+
import { composeEventHandlers } from '@cdx-ui/utils';
|
|
6
7
|
import { useFocusRing } from '@react-native-aria/focus';
|
|
7
8
|
import { Slot } from '../slot';
|
|
8
9
|
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
9
10
|
import { CheckboxProvider } from './context';
|
|
10
11
|
import { useCheckboxRoot } from './useCheckboxRoot';
|
|
11
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
/**
|
|
14
|
+
* Web Checkbox root.
|
|
15
|
+
*
|
|
16
|
+
* On web, `@react-native-aria/checkbox` re-exports `@react-aria/checkbox`'s
|
|
17
|
+
* `useCheckbox`, whose `inputProps` target a native `<input type="checkbox">`
|
|
18
|
+
* (selection via `onChange`). Toggle must be applied explicitly on the Pressable —
|
|
19
|
+
* `inputProps.onPress` does **not** call `toggleState.toggle()`.
|
|
20
|
+
*/
|
|
12
21
|
export const CheckboxRoot = /*#__PURE__*/forwardRef(({
|
|
13
22
|
asChild,
|
|
14
23
|
children,
|
|
@@ -35,7 +44,8 @@ export const CheckboxRoot = /*#__PURE__*/forwardRef(({
|
|
|
35
44
|
isDisabled,
|
|
36
45
|
isHovered,
|
|
37
46
|
mergedRef,
|
|
38
|
-
inputRef
|
|
47
|
+
inputRef,
|
|
48
|
+
toggle
|
|
39
49
|
} = useCheckboxRoot(props, ref, {
|
|
40
50
|
useInputRefForAria: true
|
|
41
51
|
});
|
|
@@ -43,46 +53,99 @@ export const CheckboxRoot = /*#__PURE__*/forwardRef(({
|
|
|
43
53
|
focusProps,
|
|
44
54
|
isFocusVisible
|
|
45
55
|
} = useFocusRing();
|
|
56
|
+
|
|
57
|
+
// Strip native-input / internal props — they must not land on Pressable.
|
|
58
|
+
const {
|
|
59
|
+
onPress: _onPress,
|
|
60
|
+
onChange: _onChange,
|
|
61
|
+
role: _role,
|
|
62
|
+
tabIndex: _tabIndex,
|
|
63
|
+
disabled: _disabled,
|
|
64
|
+
checked: _checked,
|
|
65
|
+
value: _value,
|
|
66
|
+
type: _type,
|
|
67
|
+
name: _name,
|
|
68
|
+
form: _form,
|
|
69
|
+
required: _required,
|
|
70
|
+
...inputAriaProps
|
|
71
|
+
} = groupItemInputProps;
|
|
72
|
+
const resolvedChecked = !!(isChecked || isCheckedProp);
|
|
73
|
+
const resolvedIndeterminate = !!(isIndeterminate || isIndeterminateProp);
|
|
74
|
+
const resolvedDisabled = !!(isDisabled || isDisabledProp);
|
|
75
|
+
const resolvedReadOnly = !!(isReadOnly || isReadOnlyProp);
|
|
76
|
+
const ariaChecked = resolvedIndeterminate ? 'mixed' : resolvedChecked;
|
|
77
|
+
const handleToggle = () => {
|
|
78
|
+
if (resolvedDisabled || resolvedReadOnly) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
toggle();
|
|
82
|
+
};
|
|
83
|
+
const handleKeyDown = event => {
|
|
84
|
+
if (event.key === ' ' || event.key === 'Spacebar') {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
handleToggle();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
46
89
|
const contextValue = {
|
|
47
|
-
isChecked:
|
|
48
|
-
isDisabled:
|
|
90
|
+
isChecked: resolvedChecked,
|
|
91
|
+
isDisabled: resolvedDisabled,
|
|
49
92
|
isFocusVisible: isFocusVisible || isFocusVisibleProp,
|
|
50
93
|
isHovered: isHovered || isHoveredProp,
|
|
51
94
|
isInvalid: isInvalid || isInvalidProp,
|
|
52
|
-
isReadOnly:
|
|
53
|
-
isIndeterminate:
|
|
95
|
+
isReadOnly: resolvedReadOnly,
|
|
96
|
+
isIndeterminate: resolvedIndeterminate,
|
|
54
97
|
isPressed,
|
|
55
98
|
isFocused
|
|
56
99
|
};
|
|
57
100
|
const Comp = asChild ? Slot : Pressable;
|
|
58
101
|
return /*#__PURE__*/_jsx(CheckboxProvider, {
|
|
59
102
|
value: contextValue,
|
|
60
|
-
children: /*#__PURE__*/_jsxs(
|
|
61
|
-
...combinedProps,
|
|
62
|
-
ref: mergedRef,
|
|
63
|
-
tabIndex: -1,
|
|
64
|
-
role: "label"
|
|
65
|
-
// eslint-disable-next-line react-native-a11y/has-valid-accessibility-role
|
|
66
|
-
,
|
|
67
|
-
accessibilityRole: "label",
|
|
68
|
-
...mergeDataAttributes(props, dataAttributes({
|
|
69
|
-
checked: isChecked || isCheckedProp,
|
|
70
|
-
disabled: isDisabled || isDisabledProp,
|
|
71
|
-
hover: isHovered || isHoveredProp,
|
|
72
|
-
invalid: isInvalid || isInvalidProp,
|
|
73
|
-
readonly: isReadOnly || isReadOnlyProp,
|
|
74
|
-
active: isPressed,
|
|
75
|
-
focus: isFocused,
|
|
76
|
-
indeterminate: isIndeterminate || isIndeterminateProp,
|
|
77
|
-
focusVisible: isFocusVisible
|
|
78
|
-
})),
|
|
103
|
+
children: /*#__PURE__*/_jsxs(_Fragment, {
|
|
79
104
|
children: [/*#__PURE__*/_jsx(VisuallyHidden, {
|
|
80
105
|
children: /*#__PURE__*/_jsx("input", {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
106
|
+
ref: inputRef,
|
|
107
|
+
type: "checkbox",
|
|
108
|
+
value: combinedProps.value,
|
|
109
|
+
checked: resolvedChecked,
|
|
110
|
+
disabled: resolvedDisabled,
|
|
111
|
+
tabIndex: -1,
|
|
112
|
+
"aria-hidden": true,
|
|
113
|
+
readOnly: true,
|
|
114
|
+
style: {
|
|
115
|
+
pointerEvents: 'none'
|
|
116
|
+
}
|
|
84
117
|
})
|
|
85
|
-
}),
|
|
118
|
+
}), /*#__PURE__*/_jsx(Comp, {
|
|
119
|
+
...combinedProps,
|
|
120
|
+
...inputAriaProps,
|
|
121
|
+
ref: mergedRef,
|
|
122
|
+
role: "checkbox",
|
|
123
|
+
"aria-checked": ariaChecked,
|
|
124
|
+
"aria-disabled": resolvedDisabled || undefined,
|
|
125
|
+
accessibilityRole: "checkbox",
|
|
126
|
+
accessibilityState: {
|
|
127
|
+
checked: resolvedIndeterminate ? 'mixed' : resolvedChecked,
|
|
128
|
+
disabled: resolvedDisabled
|
|
129
|
+
},
|
|
130
|
+
tabIndex: resolvedDisabled ? -1 : 0,
|
|
131
|
+
disabled: resolvedDisabled,
|
|
132
|
+
...focusProps,
|
|
133
|
+
onPress: handleToggle,
|
|
134
|
+
onClick: handleToggle,
|
|
135
|
+
onKeyDown: composeEventHandlers(combinedProps.onKeyDown, handleKeyDown),
|
|
136
|
+
...mergeDataAttributes(props, dataAttributes({
|
|
137
|
+
checked: resolvedChecked,
|
|
138
|
+
disabled: resolvedDisabled,
|
|
139
|
+
hover: isHovered || isHoveredProp,
|
|
140
|
+
invalid: isInvalid || isInvalidProp,
|
|
141
|
+
readonly: resolvedReadOnly,
|
|
142
|
+
active: isPressed,
|
|
143
|
+
focus: isFocused,
|
|
144
|
+
indeterminate: resolvedIndeterminate,
|
|
145
|
+
focusVisible: isFocusVisible || isFocusVisibleProp
|
|
146
|
+
})),
|
|
147
|
+
children: children
|
|
148
|
+
})]
|
|
86
149
|
})
|
|
87
150
|
});
|
|
88
151
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","Pressable","VisuallyHidden","useFocusRing","Slot","dataAttributes","mergeDataAttributes","CheckboxProvider","useCheckboxRoot","jsx","_jsx","jsxs","_jsxs","CheckboxRoot","asChild","children","props","ref","isHovered","isHoveredProp","isFocusVisible","isFocusVisibleProp","isChecked","isCheckedProp","isDisabled","isDisabledProp","isInvalid","isInvalidProp","isReadOnly","isReadOnlyProp","isIndeterminate","isIndeterminateProp","isFocused","isPressed","combinedProps","groupItemInputProps","mergedRef","inputRef","useInputRefForAria","focusProps","contextValue","Comp","
|
|
1
|
+
{"version":3,"names":["forwardRef","Pressable","VisuallyHidden","composeEventHandlers","useFocusRing","Slot","dataAttributes","mergeDataAttributes","CheckboxProvider","useCheckboxRoot","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CheckboxRoot","asChild","children","props","ref","isHovered","isHoveredProp","isFocusVisible","isFocusVisibleProp","isChecked","isCheckedProp","isDisabled","isDisabledProp","isInvalid","isInvalidProp","isReadOnly","isReadOnlyProp","isIndeterminate","isIndeterminateProp","isFocused","isPressed","combinedProps","groupItemInputProps","mergedRef","inputRef","toggle","useInputRefForAria","focusProps","onPress","_onPress","onChange","_onChange","role","_role","tabIndex","_tabIndex","disabled","_disabled","checked","_checked","value","_value","type","_type","name","_name","form","_form","required","_required","inputAriaProps","resolvedChecked","resolvedIndeterminate","resolvedDisabled","resolvedReadOnly","ariaChecked","handleToggle","handleKeyDown","event","key","preventDefault","contextValue","Comp","readOnly","style","pointerEvents","undefined","accessibilityRole","accessibilityState","onClick","onKeyDown","hover","invalid","readonly","active","focus","indeterminate","focusVisible","displayName"],"sourceRoot":"../../../src","sources":["checkbox/CheckboxRoot.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useContext, useRef } from 'react';
|
|
3
|
+
import { useCallback, useContext, useRef } from 'react';
|
|
4
4
|
import { mergeRefs, useFormControlContext } from '@cdx-ui/utils';
|
|
5
5
|
import { useCheckbox } from '@react-native-aria/checkbox';
|
|
6
6
|
import { useHover } from '@react-native-aria/interactions';
|
|
@@ -10,27 +10,35 @@ export function useCheckboxRoot(props, ref, {
|
|
|
10
10
|
useInputRefForAria = false
|
|
11
11
|
} = {}) {
|
|
12
12
|
const formControlContext = useFormControlContext();
|
|
13
|
-
const
|
|
13
|
+
const checkboxGroupContext = useContext(CheckboxGroupContext);
|
|
14
|
+
|
|
15
|
+
// Only pull field-state flags from FormControl — never spread the whole context
|
|
16
|
+
// (ids, setters, htmlProps) onto the host element.
|
|
17
|
+
const isInvalid = props.isInvalid ?? formControlContext.isInvalid;
|
|
18
|
+
const isReadOnly = props.isReadOnly ?? formControlContext.isReadOnly ?? checkboxGroupContext?.state.isReadOnly;
|
|
19
|
+
const isDisabled = props.isDisabled ?? formControlContext.isDisabled ?? checkboxGroupContext?.state.isDisabled;
|
|
20
|
+
const isIndeterminate = props.isIndeterminate;
|
|
21
|
+
const combinedProps = {
|
|
22
|
+
...props,
|
|
14
23
|
isInvalid,
|
|
15
24
|
isReadOnly,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} = {
|
|
19
|
-
...formControlContext,
|
|
20
|
-
...props
|
|
25
|
+
isDisabled,
|
|
26
|
+
isIndeterminate
|
|
21
27
|
};
|
|
22
|
-
const checkboxGroupContext = useContext(CheckboxGroupContext);
|
|
23
28
|
const state = useToggleState({
|
|
24
|
-
...combinedProps,
|
|
25
29
|
defaultSelected: props.defaultIsChecked,
|
|
26
|
-
isSelected: props.isChecked
|
|
30
|
+
isSelected: props.isChecked,
|
|
31
|
+
onChange: props.onChange,
|
|
32
|
+
isReadOnly,
|
|
33
|
+
isDisabled
|
|
27
34
|
});
|
|
28
35
|
const rootRef = useRef(null);
|
|
29
36
|
const inputRef = useRef(null);
|
|
30
37
|
const mergedRootRef = mergeRefs(ref, rootRef);
|
|
31
|
-
const ariaLabel =
|
|
38
|
+
const ariaLabel = props['aria-label'] || props.value || 'Checkbox';
|
|
32
39
|
const groupToggleState = useToggleState(checkboxGroupContext ? {
|
|
33
|
-
isReadOnly: isReadOnly
|
|
40
|
+
isReadOnly: !!isReadOnly,
|
|
41
|
+
isDisabled: !!isDisabled,
|
|
34
42
|
isSelected: checkboxGroupContext.state.isSelected(combinedProps.value),
|
|
35
43
|
onChange(isSelected) {
|
|
36
44
|
if (isSelected) {
|
|
@@ -43,24 +51,29 @@ export function useCheckboxRoot(props, ref, {
|
|
|
43
51
|
} : {
|
|
44
52
|
isSelected: false
|
|
45
53
|
});
|
|
54
|
+
const toggleState = checkboxGroupContext ? groupToggleState : state;
|
|
46
55
|
const {
|
|
47
56
|
inputProps: groupItemInputProps
|
|
48
57
|
} = useCheckbox({
|
|
49
58
|
...combinedProps,
|
|
50
59
|
'aria-label': ariaLabel,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
})
|
|
55
|
-
}, checkboxGroupContext ? groupToggleState : state, useInputRefForAria ? inputRef : rootRef);
|
|
60
|
+
isReadOnly: !!isReadOnly,
|
|
61
|
+
isDisabled: !!isDisabled
|
|
62
|
+
}, toggleState, useInputRefForAria ? inputRef : rootRef);
|
|
56
63
|
const {
|
|
57
64
|
checked: isChecked,
|
|
58
|
-
disabled:
|
|
65
|
+
disabled: isDisabledFromInput
|
|
59
66
|
} = groupItemInputProps;
|
|
60
67
|
const {
|
|
61
68
|
hoverProps,
|
|
62
69
|
isHovered
|
|
63
70
|
} = useHover({}, rootRef);
|
|
71
|
+
const toggle = useCallback(() => {
|
|
72
|
+
if (isDisabled || isReadOnly) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
toggleState.toggle();
|
|
76
|
+
}, [isDisabled, isReadOnly, toggleState]);
|
|
64
77
|
return {
|
|
65
78
|
combinedProps,
|
|
66
79
|
isInvalid,
|
|
@@ -68,11 +81,12 @@ export function useCheckboxRoot(props, ref, {
|
|
|
68
81
|
isIndeterminate,
|
|
69
82
|
groupItemInputProps,
|
|
70
83
|
isChecked,
|
|
71
|
-
isDisabled,
|
|
84
|
+
isDisabled: isDisabledFromInput,
|
|
72
85
|
isHovered,
|
|
73
86
|
hoverProps,
|
|
74
87
|
mergedRef: mergedRootRef,
|
|
75
|
-
inputRef
|
|
88
|
+
inputRef,
|
|
89
|
+
toggle
|
|
76
90
|
};
|
|
77
91
|
}
|
|
78
92
|
//# sourceMappingURL=useCheckboxRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useContext","useRef","mergeRefs","useFormControlContext","useCheckbox","useHover","useToggleState","CheckboxGroupContext","useCheckboxRoot","props","ref","useInputRefForAria","formControlContext","isInvalid","isReadOnly","
|
|
1
|
+
{"version":3,"names":["useCallback","useContext","useRef","mergeRefs","useFormControlContext","useCheckbox","useHover","useToggleState","CheckboxGroupContext","useCheckboxRoot","props","ref","useInputRefForAria","formControlContext","checkboxGroupContext","isInvalid","isReadOnly","state","isDisabled","isIndeterminate","combinedProps","defaultSelected","defaultIsChecked","isSelected","isChecked","onChange","rootRef","inputRef","mergedRootRef","ariaLabel","value","groupToggleState","addValue","removeValue","toggleState","inputProps","groupItemInputProps","checked","disabled","isDisabledFromInput","hoverProps","isHovered","toggle","mergedRef"],"sourceRoot":"../../../src","sources":["checkbox/useCheckboxRoot.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { forwardRef } from 'react';
|
|
4
|
-
import { View } from 'react-native';
|
|
5
|
-
import {
|
|
3
|
+
import { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { Platform, View } from 'react-native';
|
|
5
|
+
import { composeEventHandlers, useFormControl } from '@cdx-ui/utils';
|
|
6
6
|
import { useRadioGroup } from '@react-native-aria/radio';
|
|
7
7
|
import { useRadioGroupState } from '@react-stately/radio';
|
|
8
8
|
import { Slot } from '../slot';
|
|
9
9
|
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
10
10
|
import { RadioGroupContext } from './context';
|
|
11
|
+
import { useRadioGroupNavigation } from './useRadioGroupNavigation';
|
|
11
12
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
13
|
export const RadioGroup = /*#__PURE__*/forwardRef(({
|
|
13
14
|
asChild,
|
|
@@ -16,25 +17,66 @@ export const RadioGroup = /*#__PURE__*/forwardRef(({
|
|
|
16
17
|
style,
|
|
17
18
|
...props
|
|
18
19
|
}, ref) => {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const formControlProps = useFormControl({
|
|
21
|
+
isDisabled: props.isDisabled,
|
|
22
|
+
isRequired: props.isRequired,
|
|
23
|
+
isInvalid: props.isInvalid,
|
|
24
|
+
isReadOnly: props.isReadOnly
|
|
25
|
+
});
|
|
26
|
+
const isDisabled = props.isDisabled ?? Boolean(formControlProps.disabled);
|
|
27
|
+
const isInvalid = props.isInvalid ?? Boolean(formControlProps['aria-invalid']);
|
|
28
|
+
const isRequired = props.isRequired ?? Boolean(formControlProps.required);
|
|
29
|
+
const isReadOnly = props.isReadOnly ?? Boolean(formControlProps.readOnly);
|
|
30
|
+
const name = props.name ?? formControlProps.name;
|
|
31
|
+
const ariaLabel = props['aria-label'];
|
|
32
|
+
const ariaLabelledBy = props['aria-labelledby'] ?? formControlProps['aria-labelledby'];
|
|
33
|
+
const ariaDescribedBy = formControlProps['aria-describedby'];
|
|
24
34
|
const radioGroupState = useRadioGroupState({
|
|
25
|
-
|
|
26
|
-
|
|
35
|
+
name,
|
|
36
|
+
value: props.value,
|
|
37
|
+
defaultValue: props.defaultValue,
|
|
38
|
+
onChange: props.onChange,
|
|
39
|
+
isDisabled,
|
|
40
|
+
isInvalid,
|
|
41
|
+
isRequired,
|
|
42
|
+
isReadOnly,
|
|
43
|
+
validationState: isInvalid ? 'invalid' : 'valid'
|
|
27
44
|
});
|
|
28
45
|
const {
|
|
29
46
|
radioGroupProps
|
|
30
47
|
} = useRadioGroup({
|
|
31
|
-
|
|
32
|
-
'aria-
|
|
48
|
+
'aria-label': ariaLabel,
|
|
49
|
+
'aria-labelledby': ariaLabelledBy,
|
|
50
|
+
isDisabled
|
|
33
51
|
}, radioGroupState);
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
const
|
|
52
|
+
const [focusedValue, setFocusedValue] = useState(undefined);
|
|
53
|
+
// Identity of getRadios depends on this so roving tabIndex recomputes after register/unregister.
|
|
54
|
+
const [registrationEpoch, setRegistrationEpoch] = useState(0);
|
|
55
|
+
const radiosRef = useRef(new Map());
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
setFocusedValue(prev => prev !== undefined && prev !== radioGroupState.selectedValue ? undefined : prev);
|
|
58
|
+
}, [radioGroupState.selectedValue]);
|
|
59
|
+
const registerRadio = useCallback((value, entry) => {
|
|
60
|
+
radiosRef.current.set(value, entry);
|
|
61
|
+
setRegistrationEpoch(epoch => epoch + 1);
|
|
62
|
+
}, []);
|
|
63
|
+
const unregisterRadio = useCallback(value => {
|
|
64
|
+
radiosRef.current.delete(value);
|
|
65
|
+
setRegistrationEpoch(epoch => epoch + 1);
|
|
66
|
+
}, []);
|
|
67
|
+
const getRadios = useCallback(() => Array.from(radiosRef.current.entries()), [registrationEpoch]);
|
|
68
|
+
const {
|
|
69
|
+
handleKeyDown
|
|
70
|
+
} = useRadioGroupNavigation({
|
|
71
|
+
getRadios,
|
|
72
|
+
focusedValue,
|
|
73
|
+
setFocusedValue,
|
|
74
|
+
selectedValue: radioGroupState.selectedValue,
|
|
75
|
+
selectValue: value => radioGroupState.setSelectedValue(value)
|
|
76
|
+
});
|
|
77
|
+
const webProps = Platform.OS === 'web' ? {
|
|
78
|
+
onKeyDown: composeEventHandlers(props.onKeyDown, handleKeyDown)
|
|
79
|
+
} : {};
|
|
38
80
|
const Comp = asChild ? Slot : View;
|
|
39
81
|
return /*#__PURE__*/_jsx(RadioGroupContext.Provider, {
|
|
40
82
|
value: {
|
|
@@ -47,17 +89,24 @@ export const RadioGroup = /*#__PURE__*/forwardRef(({
|
|
|
47
89
|
selectValue: value => radioGroupState.setSelectedValue(value)
|
|
48
90
|
},
|
|
49
91
|
radioGroupState,
|
|
50
|
-
name
|
|
92
|
+
name,
|
|
93
|
+
focusedValue,
|
|
94
|
+
setFocusedValue,
|
|
95
|
+
registerRadio,
|
|
96
|
+
unregisterRadio,
|
|
97
|
+
getRadios
|
|
51
98
|
},
|
|
52
99
|
children: /*#__PURE__*/_jsx(Comp, {
|
|
53
100
|
...radioGroupProps,
|
|
54
|
-
"aria-label":
|
|
55
|
-
"aria-labelledby":
|
|
101
|
+
"aria-label": ariaLabel,
|
|
102
|
+
"aria-labelledby": ariaLabelledBy,
|
|
103
|
+
"aria-describedby": ariaDescribedBy,
|
|
56
104
|
"aria-required": isRequired || undefined,
|
|
57
105
|
"aria-readonly": isReadOnly || undefined,
|
|
58
106
|
className: className,
|
|
59
107
|
style: style,
|
|
60
108
|
ref: ref,
|
|
109
|
+
...webProps,
|
|
61
110
|
...mergeDataAttributes(props, dataAttributes({
|
|
62
111
|
disabled: isDisabled,
|
|
63
112
|
invalid: isInvalid
|