@cdx-ui/primitives 0.3.2 → 0.3.4
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/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/insight/InsightRoot.js +159 -0
- package/lib/commonjs/insight/InsightRoot.js.map +1 -0
- package/lib/commonjs/insight/context.js +11 -0
- package/lib/commonjs/insight/context.js.map +1 -0
- package/lib/commonjs/insight/index.js +26 -0
- package/lib/commonjs/insight/index.js.map +1 -0
- package/lib/commonjs/insight/types.js +6 -0
- package/lib/commonjs/insight/types.js.map +1 -0
- package/lib/commonjs/list-item/ListItemRoot.js +2 -18
- package/lib/commonjs/list-item/ListItemRoot.js.map +1 -1
- package/lib/commonjs/select/SelectContent.js +89 -45
- package/lib/commonjs/select/SelectContent.js.map +1 -1
- package/lib/commonjs/select/SelectDismissButton.js +14 -0
- package/lib/commonjs/select/SelectDismissButton.js.map +1 -0
- package/lib/commonjs/select/SelectDismissButton.web.js +28 -0
- package/lib/commonjs/select/SelectDismissButton.web.js.map +1 -0
- package/lib/commonjs/select/SelectEmpty.js +53 -0
- package/lib/commonjs/select/SelectEmpty.js.map +1 -0
- package/lib/commonjs/select/SelectItem.js +30 -9
- package/lib/commonjs/select/SelectItem.js.map +1 -1
- package/lib/commonjs/select/SelectListbox.js +47 -0
- package/lib/commonjs/select/SelectListbox.js.map +1 -0
- package/lib/commonjs/select/SelectRoot.js +110 -21
- package/lib/commonjs/select/SelectRoot.js.map +1 -1
- package/lib/commonjs/select/SelectSearch.js +81 -0
- package/lib/commonjs/select/SelectSearch.js.map +1 -0
- package/lib/commonjs/select/SelectSearchStatus.js +14 -0
- package/lib/commonjs/select/SelectSearchStatus.js.map +1 -0
- package/lib/commonjs/select/SelectSearchStatus.web.js +24 -0
- package/lib/commonjs/select/SelectSearchStatus.web.js.map +1 -0
- package/lib/commonjs/select/SelectSheetContent.js +67 -0
- package/lib/commonjs/select/SelectSheetContent.js.map +1 -0
- package/lib/commonjs/select/context.js +5 -1
- package/lib/commonjs/select/context.js.map +1 -1
- package/lib/commonjs/select/filter.js +16 -0
- package/lib/commonjs/select/filter.js.map +1 -0
- package/lib/commonjs/select/index.js +34 -0
- package/lib/commonjs/select/index.js.map +1 -1
- package/lib/commonjs/select/popupRole.js +27 -0
- package/lib/commonjs/select/popupRole.js.map +1 -0
- package/lib/commonjs/select/useContentFocus.js +10 -21
- package/lib/commonjs/select/useContentFocus.js.map +1 -1
- package/lib/commonjs/select/useListboxNavigation.js +21 -8
- package/lib/commonjs/select/useListboxNavigation.js.map +1 -1
- package/lib/commonjs/select/useQueryHighlight.js +50 -0
- package/lib/commonjs/select/useQueryHighlight.js.map +1 -0
- package/lib/commonjs/select/useSelectTrigger.js +4 -1
- package/lib/commonjs/select/useSelectTrigger.js.map +1 -1
- package/lib/commonjs/select/useSelectTrigger.web.js +4 -1
- package/lib/commonjs/select/useSelectTrigger.web.js.map +1 -1
- package/lib/commonjs/utils/splitContainerProps.js +26 -0
- package/lib/commonjs/utils/splitContainerProps.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/insight/InsightRoot.js +154 -0
- package/lib/module/insight/InsightRoot.js.map +1 -0
- package/lib/module/insight/context.js +5 -0
- package/lib/module/insight/context.js.map +1 -0
- package/lib/module/insight/index.js +5 -0
- package/lib/module/insight/index.js.map +1 -0
- package/lib/module/insight/types.js +4 -0
- package/lib/module/insight/types.js.map +1 -0
- package/lib/module/list-item/ListItemRoot.js +1 -17
- package/lib/module/list-item/ListItemRoot.js.map +1 -1
- package/lib/module/select/SelectContent.js +94 -48
- package/lib/module/select/SelectContent.js.map +1 -1
- package/lib/module/select/SelectDismissButton.js +10 -0
- package/lib/module/select/SelectDismissButton.js.map +1 -0
- package/lib/module/select/SelectDismissButton.web.js +24 -0
- package/lib/module/select/SelectDismissButton.web.js.map +1 -0
- package/lib/module/select/SelectEmpty.js +49 -0
- package/lib/module/select/SelectEmpty.js.map +1 -0
- package/lib/module/select/SelectItem.js +32 -11
- package/lib/module/select/SelectItem.js.map +1 -1
- package/lib/module/select/SelectListbox.js +43 -0
- package/lib/module/select/SelectListbox.js.map +1 -0
- package/lib/module/select/SelectRoot.js +111 -22
- package/lib/module/select/SelectRoot.js.map +1 -1
- package/lib/module/select/SelectSearch.js +77 -0
- package/lib/module/select/SelectSearch.js.map +1 -0
- package/lib/module/select/SelectSearchStatus.js +10 -0
- package/lib/module/select/SelectSearchStatus.js.map +1 -0
- package/lib/module/select/SelectSearchStatus.web.js +20 -0
- package/lib/module/select/SelectSearchStatus.web.js.map +1 -0
- package/lib/module/select/SelectSheetContent.js +63 -0
- package/lib/module/select/SelectSheetContent.js.map +1 -0
- package/lib/module/select/context.js +2 -0
- package/lib/module/select/context.js.map +1 -1
- package/lib/module/select/filter.js +11 -0
- package/lib/module/select/filter.js.map +1 -0
- package/lib/module/select/index.js +5 -1
- package/lib/module/select/index.js.map +1 -1
- package/lib/module/select/popupRole.js +23 -0
- package/lib/module/select/popupRole.js.map +1 -0
- package/lib/module/select/useContentFocus.js +11 -22
- package/lib/module/select/useContentFocus.js.map +1 -1
- package/lib/module/select/useListboxNavigation.js +21 -8
- package/lib/module/select/useListboxNavigation.js.map +1 -1
- package/lib/module/select/useQueryHighlight.js +46 -0
- package/lib/module/select/useQueryHighlight.js.map +1 -0
- package/lib/module/select/useSelectTrigger.js +4 -1
- package/lib/module/select/useSelectTrigger.js.map +1 -1
- package/lib/module/select/useSelectTrigger.web.js +4 -1
- package/lib/module/select/useSelectTrigger.web.js.map +1 -1
- package/lib/module/utils/splitContainerProps.js +22 -0
- package/lib/module/utils/splitContainerProps.js.map +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/insight/InsightRoot.d.ts +6 -0
- package/lib/typescript/insight/InsightRoot.d.ts.map +1 -0
- package/lib/typescript/insight/context.d.ts +6 -0
- package/lib/typescript/insight/context.d.ts.map +1 -0
- package/lib/typescript/insight/index.d.ts +4 -0
- package/lib/typescript/insight/index.d.ts.map +1 -0
- package/lib/typescript/insight/types.d.ts +44 -0
- package/lib/typescript/insight/types.d.ts.map +1 -0
- package/lib/typescript/list-item/ListItemRoot.d.ts.map +1 -1
- package/lib/typescript/select/SelectContent.d.ts.map +1 -1
- package/lib/typescript/select/SelectDismissButton.d.ts +10 -0
- package/lib/typescript/select/SelectDismissButton.d.ts.map +1 -0
- package/lib/typescript/select/SelectDismissButton.web.d.ts +9 -0
- package/lib/typescript/select/SelectDismissButton.web.d.ts.map +1 -0
- package/lib/typescript/select/SelectEmpty.d.ts +12 -0
- package/lib/typescript/select/SelectEmpty.d.ts.map +1 -0
- package/lib/typescript/select/SelectItem.d.ts.map +1 -1
- package/lib/typescript/select/SelectListbox.d.ts +12 -0
- package/lib/typescript/select/SelectListbox.d.ts.map +1 -0
- package/lib/typescript/select/SelectRoot.d.ts +2 -2
- package/lib/typescript/select/SelectRoot.d.ts.map +1 -1
- package/lib/typescript/select/SelectSearch.d.ts +18 -0
- package/lib/typescript/select/SelectSearch.d.ts.map +1 -0
- package/lib/typescript/select/SelectSearchStatus.d.ts +9 -0
- package/lib/typescript/select/SelectSearchStatus.d.ts.map +1 -0
- package/lib/typescript/select/SelectSearchStatus.web.d.ts +8 -0
- package/lib/typescript/select/SelectSearchStatus.web.d.ts.map +1 -0
- package/lib/typescript/select/SelectSheetContent.d.ts +14 -0
- package/lib/typescript/select/SelectSheetContent.d.ts.map +1 -0
- package/lib/typescript/select/context.d.ts +9 -0
- package/lib/typescript/select/context.d.ts.map +1 -1
- package/lib/typescript/select/filter.d.ts +4 -0
- package/lib/typescript/select/filter.d.ts.map +1 -0
- package/lib/typescript/select/index.d.ts +6 -2
- package/lib/typescript/select/index.d.ts.map +1 -1
- package/lib/typescript/select/popupRole.d.ts +18 -0
- package/lib/typescript/select/popupRole.d.ts.map +1 -0
- package/lib/typescript/select/types.d.ts +129 -8
- package/lib/typescript/select/types.d.ts.map +1 -1
- package/lib/typescript/select/useContentFocus.d.ts +4 -7
- package/lib/typescript/select/useContentFocus.d.ts.map +1 -1
- package/lib/typescript/select/useListboxNavigation.d.ts +16 -3
- package/lib/typescript/select/useListboxNavigation.d.ts.map +1 -1
- package/lib/typescript/select/useQueryHighlight.d.ts +21 -0
- package/lib/typescript/select/useQueryHighlight.d.ts.map +1 -0
- package/lib/typescript/select/useSelectTrigger.d.ts.map +1 -1
- package/lib/typescript/select/useSelectTrigger.web.d.ts.map +1 -1
- package/lib/typescript/utils/splitContainerProps.d.ts +9 -0
- package/lib/typescript/utils/splitContainerProps.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/insight/InsightRoot.tsx +162 -0
- package/src/insight/context.tsx +5 -0
- package/src/insight/index.ts +11 -0
- package/src/insight/types.ts +51 -0
- package/src/list-item/ListItemRoot.tsx +1 -14
- package/src/select/SelectContent.tsx +89 -54
- package/src/select/SelectDismissButton.tsx +14 -0
- package/src/select/SelectDismissButton.web.tsx +26 -0
- package/src/select/SelectEmpty.tsx +61 -0
- package/src/select/SelectItem.tsx +42 -10
- package/src/select/SelectListbox.tsx +43 -0
- package/src/select/SelectRoot.tsx +184 -12
- package/src/select/SelectSearch.tsx +98 -0
- package/src/select/SelectSearchStatus.tsx +11 -0
- package/src/select/SelectSearchStatus.web.tsx +18 -0
- package/src/select/SelectSheetContent.tsx +54 -0
- package/src/select/context.tsx +9 -0
- package/src/select/filter.ts +12 -0
- package/src/select/index.ts +14 -1
- package/src/select/popupRole.ts +26 -0
- package/src/select/types.ts +142 -9
- package/src/select/useContentFocus.ts +12 -31
- package/src/select/useListboxNavigation.ts +41 -9
- package/src/select/useQueryHighlight.ts +61 -0
- package/src/select/useSelectTrigger.ts +5 -1
- package/src/select/useSelectTrigger.web.ts +5 -1
- package/src/utils/splitContainerProps.ts +16 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { forwardRef, useCallback, useMemo } from 'react';
|
|
4
|
-
import { Pressable } from 'react-native';
|
|
3
|
+
import { forwardRef, useCallback, useLayoutEffect, useMemo } from 'react';
|
|
4
|
+
import { Platform, Pressable } from 'react-native';
|
|
5
5
|
import { composeEventHandlers } from '@cdx-ui/utils';
|
|
6
6
|
import { useFocus, useFocusRing } from '@react-native-aria/focus';
|
|
7
7
|
import { useHover, usePress } from '@react-native-aria/interactions';
|
|
@@ -9,6 +9,13 @@ import { Slot } from '../slot';
|
|
|
9
9
|
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
10
10
|
import { SelectItemProvider, useSelectContext } from './context';
|
|
11
11
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
/**
|
|
13
|
+
* Options are reached through the highlight (`aria-activedescendant`), not the Tab order, so
|
|
14
|
+
* popup autofocus lands on the search input or the listbox rather than the first option.
|
|
15
|
+
*/
|
|
16
|
+
const WEB_OPTION_PROPS = Platform.OS === 'web' ? {
|
|
17
|
+
tabIndex: -1
|
|
18
|
+
} : {};
|
|
12
19
|
export const SelectItem = /*#__PURE__*/forwardRef(({
|
|
13
20
|
asChild,
|
|
14
21
|
children,
|
|
@@ -22,16 +29,26 @@ export const SelectItem = /*#__PURE__*/forwardRef(({
|
|
|
22
29
|
...props
|
|
23
30
|
}, ref) => {
|
|
24
31
|
const {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
setOpen,
|
|
32
|
+
isSelected,
|
|
33
|
+
commitValue,
|
|
28
34
|
activeValue,
|
|
35
|
+
setActiveValue,
|
|
29
36
|
contentId,
|
|
30
|
-
|
|
37
|
+
items,
|
|
38
|
+
disabled: contextDisabled,
|
|
39
|
+
registerDisabledItem,
|
|
40
|
+
isItemVisible
|
|
31
41
|
} = useSelectContext();
|
|
32
|
-
const
|
|
33
|
-
const
|
|
42
|
+
const isDisabledByItem = !!disabledProp || !!isDisabledProp;
|
|
43
|
+
const disabled = contextDisabled || isDisabledByItem || items.some(item => item.value === itemValue && !!item.disabled);
|
|
44
|
+
const checked = isSelected(itemValue);
|
|
34
45
|
const highlighted = activeValue === itemValue;
|
|
46
|
+
useLayoutEffect(() => {
|
|
47
|
+
if (isDisabledByItem) {
|
|
48
|
+
return registerDisabledItem(itemValue);
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}, [isDisabledByItem, itemValue, registerDisabledItem]);
|
|
35
52
|
const {
|
|
36
53
|
isFocusVisible,
|
|
37
54
|
focusProps: focusRingProps
|
|
@@ -52,10 +69,10 @@ export const SelectItem = /*#__PURE__*/forwardRef(({
|
|
|
52
69
|
} = useHover();
|
|
53
70
|
const handlePress = useCallback(() => {
|
|
54
71
|
if (!disabled) {
|
|
55
|
-
|
|
56
|
-
|
|
72
|
+
setActiveValue(itemValue);
|
|
73
|
+
commitValue(itemValue);
|
|
57
74
|
}
|
|
58
|
-
}, [disabled, itemValue,
|
|
75
|
+
}, [disabled, itemValue, commitValue, setActiveValue]);
|
|
59
76
|
const interactionState = useMemo(() => ({
|
|
60
77
|
hover: !!(isHoveredProp || isHovered),
|
|
61
78
|
focus: !!(isFocusedProp || isFocused),
|
|
@@ -65,6 +82,9 @@ export const SelectItem = /*#__PURE__*/forwardRef(({
|
|
|
65
82
|
highlighted,
|
|
66
83
|
checked
|
|
67
84
|
}), [isHoveredProp, isHovered, isFocusedProp, isFocused, isActiveProp, isActive, disabled, isFocusVisibleProp, isFocusVisible, highlighted, checked]);
|
|
85
|
+
if (!isItemVisible(itemValue)) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
68
88
|
const Comp = asChild ? Slot : Pressable;
|
|
69
89
|
return /*#__PURE__*/_jsx(SelectItemProvider, {
|
|
70
90
|
value: interactionState,
|
|
@@ -75,6 +95,7 @@ export const SelectItem = /*#__PURE__*/forwardRef(({
|
|
|
75
95
|
"aria-selected": checked,
|
|
76
96
|
"aria-disabled": disabled,
|
|
77
97
|
disabled: disabled,
|
|
98
|
+
...WEB_OPTION_PROPS,
|
|
78
99
|
...props,
|
|
79
100
|
...mergeDataAttributes(props, dataAttributes({
|
|
80
101
|
hover: interactionState.hover,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useCallback","useMemo","Pressable","composeEventHandlers","useFocus","useFocusRing","useHover","usePress","Slot","dataAttributes","mergeDataAttributes","SelectItemProvider","useSelectContext","jsx","_jsx","SelectItem","asChild","children","value","itemValue","disabled","disabledProp","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","isDisabled","isDisabledProp","props","ref","
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","useLayoutEffect","useMemo","Platform","Pressable","composeEventHandlers","useFocus","useFocusRing","useHover","usePress","Slot","dataAttributes","mergeDataAttributes","SelectItemProvider","useSelectContext","jsx","_jsx","WEB_OPTION_PROPS","OS","tabIndex","SelectItem","asChild","children","value","itemValue","disabled","disabledProp","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","isDisabled","isDisabledProp","props","ref","isSelected","commitValue","activeValue","setActiveValue","contentId","items","contextDisabled","registerDisabledItem","isItemVisible","isDisabledByItem","some","item","checked","highlighted","undefined","focusProps","focusRingProps","pressProps","isPressed","hoverProps","handlePress","interactionState","hover","focus","active","focusVisible","Comp","role","id","state","onPress","onPressIn","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["select/SelectItem.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { Platform, View } from 'react-native';
|
|
5
|
+
import { Slot } from '../slot';
|
|
6
|
+
import { useSelectContext } from './context';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
/**
|
|
9
|
+
* Wraps the options. With `Select.Search` mounted it is the `role="listbox"` inside the dialog
|
|
10
|
+
* popup; without it the popup itself is the listbox and this renders a plain container.
|
|
11
|
+
*/
|
|
12
|
+
export const SelectListbox = /*#__PURE__*/forwardRef(({
|
|
13
|
+
asChild,
|
|
14
|
+
children,
|
|
15
|
+
...props
|
|
16
|
+
}, ref) => {
|
|
17
|
+
const {
|
|
18
|
+
hasSearch,
|
|
19
|
+
listboxId,
|
|
20
|
+
labelId,
|
|
21
|
+
triggerId,
|
|
22
|
+
accessibilityLabel,
|
|
23
|
+
type
|
|
24
|
+
} = useSelectContext();
|
|
25
|
+
const listboxProps = hasSearch ? {
|
|
26
|
+
role: 'listbox',
|
|
27
|
+
id: listboxId,
|
|
28
|
+
'aria-labelledby': labelId ?? (accessibilityLabel ? undefined : triggerId),
|
|
29
|
+
'aria-label': labelId ? undefined : accessibilityLabel,
|
|
30
|
+
...(Platform.OS === 'web' ? {
|
|
31
|
+
'aria-multiselectable': type === 'multiple' || undefined
|
|
32
|
+
} : {})
|
|
33
|
+
} : {};
|
|
34
|
+
const Comp = asChild ? Slot : View;
|
|
35
|
+
return /*#__PURE__*/_jsx(Comp, {
|
|
36
|
+
ref: ref,
|
|
37
|
+
...listboxProps,
|
|
38
|
+
...props,
|
|
39
|
+
children: children
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
SelectListbox.displayName = 'SelectListbox';
|
|
43
|
+
//# sourceMappingURL=SelectListbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","Platform","View","Slot","useSelectContext","jsx","_jsx","SelectListbox","asChild","children","props","ref","hasSearch","listboxId","labelId","triggerId","accessibilityLabel","type","listboxProps","role","id","undefined","OS","Comp","displayName"],"sourceRoot":"../../../src","sources":["select/SelectListbox.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAA2B,OAAO;AACrD,SAASC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAC7C,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,gBAAgB,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ7C;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,gBAAGP,UAAU,CACrC,CAAC;EAAEQ,OAAO;EAAEC,QAAQ;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACxC,MAAM;IAAEC,SAAS;IAAEC,SAAS;IAAEC,OAAO;IAAEC,SAAS;IAAEC,kBAAkB;IAAEC;EAAK,CAAC,GAC1Eb,gBAAgB,CAAC,CAAC;EAEpB,MAAMc,YAAY,GAAGN,SAAS,GAC1B;IACEO,IAAI,EAAE,SAAkB;IACxBC,EAAE,EAAEP,SAAS;IACb,iBAAiB,EAAEC,OAAO,KAAKE,kBAAkB,GAAGK,SAAS,GAAGN,SAAS,CAAC;IAC1E,YAAY,EAAED,OAAO,GAAGO,SAAS,GAAGL,kBAAkB;IACtD,IAAIf,QAAQ,CAACqB,EAAE,KAAK,KAAK,GACrB;MAAE,sBAAsB,EAAEL,IAAI,KAAK,UAAU,IAAII;IAAU,CAAC,GAC5D,CAAC,CAAC;EACR,CAAC,GACD,CAAC,CAAC;EAEN,MAAME,IAAI,GAAGf,OAAO,GAAGL,IAAI,GAAGD,IAAI;EAElC,oBACEI,IAAA,CAACiB,IAAI;IAACZ,GAAG,EAAEA,GAAI;IAAA,GAAKO,YAAY;IAAA,GAAMR,KAAK;IAAAD,QAAA,EACxCA;EAAQ,CACL,CAAC;AAEX,CACF,CAAC;AAEDF,aAAa,CAACiB,WAAW,GAAG,eAAe","ignoreList":[]}
|
|
@@ -1,30 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { forwardRef, useCallback, useId, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { View } from 'react-native';
|
|
5
5
|
import { useControllableState, useFormControl } from '@cdx-ui/utils';
|
|
6
6
|
import { Slot } from '../slot';
|
|
7
7
|
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
8
8
|
import { SelectProvider } from './context';
|
|
9
|
+
import { defaultSelectFilter } from './filter';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal widening of the public discriminated union: the runtime accepts either value
|
|
13
|
+
* shape and reads `type` to decide branch behavior. The public API stays narrow.
|
|
14
|
+
*/
|
|
9
15
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
const EMPTY_VALUES = [];
|
|
17
|
+
export const SelectRoot = /*#__PURE__*/forwardRef((rootProps, ref) => {
|
|
18
|
+
const {
|
|
19
|
+
asChild,
|
|
20
|
+
children,
|
|
21
|
+
items,
|
|
22
|
+
type = 'single',
|
|
23
|
+
value: valueProp,
|
|
24
|
+
defaultValue,
|
|
25
|
+
onValueChange,
|
|
26
|
+
isOpen: openProp,
|
|
27
|
+
defaultOpen = false,
|
|
28
|
+
onOpenChange,
|
|
29
|
+
disabled = false,
|
|
30
|
+
isRequired,
|
|
31
|
+
isInvalid,
|
|
32
|
+
isReadOnly,
|
|
33
|
+
native = false,
|
|
34
|
+
accessibilityLabel,
|
|
35
|
+
inputValue: inputValueProp,
|
|
36
|
+
defaultInputValue = '',
|
|
37
|
+
onInputChange,
|
|
38
|
+
filter = defaultSelectFilter,
|
|
39
|
+
...props
|
|
40
|
+
} = rootProps;
|
|
28
41
|
const formControlProps = useFormControl({
|
|
29
42
|
isDisabled: disabled,
|
|
30
43
|
isRequired,
|
|
@@ -35,15 +48,23 @@ export const SelectRoot = /*#__PURE__*/forwardRef(({
|
|
|
35
48
|
const isEffectivelyRequired = !!formControlProps.required;
|
|
36
49
|
const isEffectivelyInvalid = !!formControlProps['aria-invalid'];
|
|
37
50
|
const isEffectivelyReadOnly = !!formControlProps.readOnly;
|
|
51
|
+
const isMultiple = type === 'multiple';
|
|
38
52
|
const [value, setValue] = useControllableState({
|
|
39
53
|
prop: valueProp,
|
|
40
|
-
defaultProp: defaultValue,
|
|
54
|
+
defaultProp: defaultValue ?? (isMultiple ? EMPTY_VALUES : undefined),
|
|
41
55
|
onChange: newValue => {
|
|
42
56
|
if (newValue !== undefined) {
|
|
43
57
|
onValueChange?.(newValue);
|
|
44
58
|
}
|
|
45
59
|
}
|
|
46
60
|
});
|
|
61
|
+
const selectedValues = useMemo(() => {
|
|
62
|
+
if (isMultiple) {
|
|
63
|
+
return Array.isArray(value) ? value : EMPTY_VALUES;
|
|
64
|
+
}
|
|
65
|
+
return typeof value === 'string' ? [value] : EMPTY_VALUES;
|
|
66
|
+
}, [isMultiple, value]);
|
|
67
|
+
const isSelected = useCallback(itemValue => selectedValues.includes(itemValue), [selectedValues]);
|
|
47
68
|
const [open, setOpenState] = useControllableState({
|
|
48
69
|
prop: openProp,
|
|
49
70
|
defaultProp: defaultOpen,
|
|
@@ -56,18 +77,76 @@ export const SelectRoot = /*#__PURE__*/forwardRef(({
|
|
|
56
77
|
setOpenState(newOpen);
|
|
57
78
|
}, [isEffectivelyDisabled, isEffectivelyReadOnly, setOpenState]);
|
|
58
79
|
const [activeValue, setActiveValue] = useState(undefined);
|
|
80
|
+
const [inputValueState, setInputValueState] = useControllableState({
|
|
81
|
+
prop: inputValueProp,
|
|
82
|
+
defaultProp: defaultInputValue,
|
|
83
|
+
onChange: onInputChange
|
|
84
|
+
});
|
|
85
|
+
const inputValue = inputValueState ?? '';
|
|
86
|
+
const setInputValue = useCallback(next => setInputValueState(next), [setInputValueState]);
|
|
87
|
+
const wasOpenRef = useRef(!!open);
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
const wasOpen = wasOpenRef.current;
|
|
90
|
+
wasOpenRef.current = !!open;
|
|
91
|
+
if (wasOpen && !open) {
|
|
92
|
+
setInputValueState('');
|
|
93
|
+
}
|
|
94
|
+
}, [open, setInputValueState]);
|
|
95
|
+
const visibleItems = useMemo(() => inputValue === '' ? items : items.filter(item => filter(item.label, inputValue)), [items, inputValue, filter]);
|
|
96
|
+
const visibleValues = useMemo(() => new Set(visibleItems.map(item => item.value)), [visibleItems]);
|
|
97
|
+
const isItemVisible = useCallback(itemValue => inputValue === '' || visibleValues.has(itemValue), [inputValue, visibleValues]);
|
|
98
|
+
const [searchCount, setSearchCount] = useState(0);
|
|
99
|
+
const registerSearch = useCallback(() => {
|
|
100
|
+
setSearchCount(count => count + 1);
|
|
101
|
+
return () => setSearchCount(count => count - 1);
|
|
102
|
+
}, []);
|
|
103
|
+
const [emptyText, setEmptyText] = useState(undefined);
|
|
104
|
+
const toggleValue = useCallback(itemValue => {
|
|
105
|
+
setValue(prev => {
|
|
106
|
+
const current = Array.isArray(prev) ? prev : EMPTY_VALUES;
|
|
107
|
+
return current.includes(itemValue) ? current.filter(v => v !== itemValue) : [...current, itemValue];
|
|
108
|
+
});
|
|
109
|
+
}, [setValue]);
|
|
110
|
+
const selectValueAndClose = useCallback(itemValue => {
|
|
111
|
+
setValue(itemValue);
|
|
112
|
+
setOpen(false);
|
|
113
|
+
}, [setValue, setOpen]);
|
|
114
|
+
const commitValue = isMultiple ? toggleValue : selectValueAndClose;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* `Select.Item disabled` lives on the rendered child, not in `items`, so mounted items
|
|
118
|
+
* register here for keyboard navigation. A ref keeps registration from re-rendering the root.
|
|
119
|
+
*/
|
|
120
|
+
const disabledItemsRef = useRef(new Set());
|
|
121
|
+
const registerDisabledItem = useCallback(itemValue => {
|
|
122
|
+
disabledItemsRef.current.add(itemValue);
|
|
123
|
+
return () => {
|
|
124
|
+
disabledItemsRef.current.delete(itemValue);
|
|
125
|
+
};
|
|
126
|
+
}, []);
|
|
127
|
+
const isItemDisabled = useCallback(itemValue => isEffectivelyDisabled || disabledItemsRef.current.has(itemValue) || items.some(item => item.value === itemValue && !!item.disabled), [isEffectivelyDisabled, items]);
|
|
59
128
|
const triggerRef = useRef(null);
|
|
60
129
|
const reactId = useId();
|
|
61
130
|
/** Align with `useFormControl` default id (`${field.id}-input`) when inside `Form.Field`. */
|
|
62
131
|
const triggerId = formControlProps.id ?? `select-trigger-${reactId}`;
|
|
63
132
|
const contentId = `select-content-${reactId}`;
|
|
133
|
+
const listboxId = `${contentId}-listbox`;
|
|
64
134
|
const ariaDescribedBy = formControlProps['aria-describedby'];
|
|
135
|
+
const labelId = formControlProps['aria-labelledby'];
|
|
136
|
+
const hasSearch = searchCount > 0;
|
|
65
137
|
const contextValue = useMemo(() => ({
|
|
66
138
|
open: open ?? false,
|
|
67
139
|
items,
|
|
68
140
|
setOpen,
|
|
141
|
+
type,
|
|
69
142
|
value,
|
|
70
|
-
|
|
143
|
+
selectedValues,
|
|
144
|
+
isSelected,
|
|
145
|
+
toggleValue,
|
|
146
|
+
selectValueAndClose,
|
|
147
|
+
commitValue,
|
|
148
|
+
isItemDisabled,
|
|
149
|
+
registerDisabledItem,
|
|
71
150
|
disabled: isEffectivelyDisabled,
|
|
72
151
|
required: isEffectivelyRequired,
|
|
73
152
|
invalid: isEffectivelyInvalid,
|
|
@@ -76,11 +155,21 @@ export const SelectRoot = /*#__PURE__*/forwardRef(({
|
|
|
76
155
|
triggerRef,
|
|
77
156
|
contentId,
|
|
78
157
|
triggerId,
|
|
158
|
+
inputValue,
|
|
159
|
+
setInputValue,
|
|
160
|
+
visibleItems,
|
|
161
|
+
isItemVisible,
|
|
162
|
+
hasSearch,
|
|
163
|
+
registerSearch,
|
|
164
|
+
emptyText,
|
|
165
|
+
setEmptyText,
|
|
166
|
+
listboxId,
|
|
167
|
+
labelId,
|
|
79
168
|
activeValue,
|
|
80
169
|
setActiveValue,
|
|
81
170
|
accessibilityLabel,
|
|
82
171
|
ariaDescribedBy
|
|
83
|
-
}), [open, items, setOpen, value,
|
|
172
|
+
}), [open, items, setOpen, type, value, selectedValues, isSelected, toggleValue, selectValueAndClose, commitValue, isItemDisabled, registerDisabledItem, isEffectivelyDisabled, isEffectivelyRequired, isEffectivelyInvalid, isEffectivelyReadOnly, native, contentId, triggerId, inputValue, setInputValue, visibleItems, isItemVisible, hasSearch, registerSearch, emptyText, listboxId, labelId, activeValue, accessibilityLabel, ariaDescribedBy]);
|
|
84
173
|
const Comp = asChild ? Slot : View;
|
|
85
174
|
return /*#__PURE__*/_jsx(SelectProvider, {
|
|
86
175
|
value: contextValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useCallback","useId","useMemo","useRef","useState","View","useControllableState","useFormControl","Slot","dataAttributes","mergeDataAttributes","SelectProvider","jsx","_jsx","SelectRoot","asChild","children","items","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","disabled","isRequired","isInvalid","isReadOnly","native","accessibilityLabel","
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","useEffect","useId","useMemo","useRef","useState","View","useControllableState","useFormControl","Slot","dataAttributes","mergeDataAttributes","SelectProvider","defaultSelectFilter","jsx","_jsx","EMPTY_VALUES","SelectRoot","rootProps","ref","asChild","children","items","type","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","disabled","isRequired","isInvalid","isReadOnly","native","accessibilityLabel","inputValue","inputValueProp","defaultInputValue","onInputChange","filter","props","formControlProps","isDisabled","isEffectivelyDisabled","isEffectivelyRequired","required","isEffectivelyInvalid","isEffectivelyReadOnly","readOnly","isMultiple","setValue","prop","defaultProp","undefined","onChange","newValue","selectedValues","Array","isArray","isSelected","itemValue","includes","open","setOpenState","setOpen","newOpen","activeValue","setActiveValue","inputValueState","setInputValueState","setInputValue","next","wasOpenRef","wasOpen","current","visibleItems","item","label","visibleValues","Set","map","isItemVisible","has","searchCount","setSearchCount","registerSearch","count","emptyText","setEmptyText","toggleValue","prev","v","selectValueAndClose","commitValue","disabledItemsRef","registerDisabledItem","add","delete","isItemDisabled","some","triggerRef","reactId","triggerId","id","contentId","listboxId","ariaDescribedBy","labelId","hasSearch","contextValue","invalid","Comp","readonly","displayName"],"sourceRoot":"../../../src","sources":["select/SelectRoot.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useLayoutEffect } from 'react';
|
|
4
|
+
import { Platform, TextInput } from 'react-native';
|
|
5
|
+
import { composeEventHandlers } from '@cdx-ui/utils';
|
|
6
|
+
import { Slot } from '../slot';
|
|
7
|
+
import { useSelectContentContext, useSelectContext } from './context';
|
|
8
|
+
import { SelectSearchStatus } from './SelectSearchStatus';
|
|
9
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
const defaultResultCountLabel = count => count === 1 ? '1 result' : `${String(count)} results`;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Search input for `Select.Content`. Its query filters the options through the root `filter`.
|
|
14
|
+
* Mounting it turns the popup into a dialog that contains this searchbox and the listbox.
|
|
15
|
+
*
|
|
16
|
+
* Web uses virtual focus: DOM focus stays here, arrow keys move the highlight, and
|
|
17
|
+
* `aria-activedescendant` points at it. Native renders the input without virtual focus.
|
|
18
|
+
*/
|
|
19
|
+
export const SelectSearch = /*#__PURE__*/forwardRef(({
|
|
20
|
+
asChild,
|
|
21
|
+
children,
|
|
22
|
+
accessibilityLabel,
|
|
23
|
+
getResultCountLabel = defaultResultCountLabel,
|
|
24
|
+
onKeyPress,
|
|
25
|
+
...props
|
|
26
|
+
}, ref) => {
|
|
27
|
+
const {
|
|
28
|
+
inputValue,
|
|
29
|
+
setInputValue,
|
|
30
|
+
registerSearch,
|
|
31
|
+
listboxId,
|
|
32
|
+
contentId,
|
|
33
|
+
activeValue,
|
|
34
|
+
isItemVisible,
|
|
35
|
+
visibleItems,
|
|
36
|
+
emptyText
|
|
37
|
+
} = useSelectContext();
|
|
38
|
+
const {
|
|
39
|
+
handleKeyDown
|
|
40
|
+
} = useSelectContentContext();
|
|
41
|
+
useLayoutEffect(() => registerSearch(), [registerSearch]);
|
|
42
|
+
const activeDescendant = activeValue !== undefined && isItemVisible(activeValue) ? `${contentId}-option-${activeValue}` : undefined;
|
|
43
|
+
|
|
44
|
+
// RNW's TextInput stops keydown propagation, so the listbox keys are handled here.
|
|
45
|
+
const platformProps = Platform.OS === 'web' ? {
|
|
46
|
+
'aria-controls': listboxId,
|
|
47
|
+
'aria-autocomplete': 'list',
|
|
48
|
+
'aria-activedescendant': activeDescendant,
|
|
49
|
+
onKeyPress: composeEventHandlers(onKeyPress, handleKeyDown)
|
|
50
|
+
} : {
|
|
51
|
+
onKeyPress
|
|
52
|
+
};
|
|
53
|
+
const count = visibleItems.length;
|
|
54
|
+
const statusMessage = count === 0 && emptyText ? emptyText : getResultCountLabel(count);
|
|
55
|
+
const Comp = asChild ? Slot : TextInput;
|
|
56
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
57
|
+
children: [/*#__PURE__*/_jsx(Comp, {
|
|
58
|
+
ref: ref,
|
|
59
|
+
role: "searchbox",
|
|
60
|
+
value: inputValue,
|
|
61
|
+
onChangeText: setInputValue,
|
|
62
|
+
autoCapitalize: "none",
|
|
63
|
+
autoComplete: "off",
|
|
64
|
+
autoCorrect: false,
|
|
65
|
+
spellCheck: false,
|
|
66
|
+
accessibilityLabel: accessibilityLabel,
|
|
67
|
+
"aria-label": accessibilityLabel,
|
|
68
|
+
...platformProps,
|
|
69
|
+
...props,
|
|
70
|
+
children: children
|
|
71
|
+
}), /*#__PURE__*/_jsx(SelectSearchStatus, {
|
|
72
|
+
message: statusMessage
|
|
73
|
+
})]
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
SelectSearch.displayName = 'SelectSearch';
|
|
77
|
+
//# sourceMappingURL=SelectSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useLayoutEffect","Platform","TextInput","composeEventHandlers","Slot","useSelectContentContext","useSelectContext","SelectSearchStatus","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","defaultResultCountLabel","count","String","SelectSearch","asChild","children","accessibilityLabel","getResultCountLabel","onKeyPress","props","ref","inputValue","setInputValue","registerSearch","listboxId","contentId","activeValue","isItemVisible","visibleItems","emptyText","handleKeyDown","activeDescendant","undefined","platformProps","OS","length","statusMessage","Comp","role","value","onChangeText","autoCapitalize","autoComplete","autoCorrect","spellCheck","message","displayName"],"sourceRoot":"../../../src","sources":["select/SelectSearch.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,eAAe,QAAwB,OAAO;AACnE,SAASC,QAAQ,EAAEC,SAAS,QAAQ,cAAc;AAClD,SAASC,oBAAoB,QAAQ,eAAe;AACpD,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,uBAAuB,EAAEC,gBAAgB,QAAQ,WAAW;AACrE,SAASC,kBAAkB,QAAQ,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAU1D,MAAMC,uBAAuB,GAAIC,KAAa,IAC5CA,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,GAAGC,MAAM,CAACD,KAAK,CAAC,UAAU;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,YAAY,gBAAGlB,UAAU,CACpC,CACE;EACEmB,OAAO;EACPC,QAAQ;EACRC,kBAAkB;EAClBC,mBAAmB,GAAGP,uBAAuB;EAC7CQ,UAAU;EACV,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAM;IACJC,UAAU;IACVC,aAAa;IACbC,cAAc;IACdC,SAAS;IACTC,SAAS;IACTC,WAAW;IACXC,aAAa;IACbC,YAAY;IACZC;EACF,CAAC,GAAG3B,gBAAgB,CAAC,CAAC;EACtB,MAAM;IAAE4B;EAAc,CAAC,GAAG7B,uBAAuB,CAAC,CAAC;EAEnDL,eAAe,CAAC,MAAM2B,cAAc,CAAC,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEzD,MAAMQ,gBAAgB,GACpBL,WAAW,KAAKM,SAAS,IAAIL,aAAa,CAACD,WAAW,CAAC,GACnD,GAAGD,SAAS,WAAWC,WAAW,EAAE,GACpCM,SAAS;;EAEf;EACA,MAAMC,aAAa,GACjBpC,QAAQ,CAACqC,EAAE,KAAK,KAAK,GACjB;IACE,eAAe,EAAEV,SAAS;IAC1B,mBAAmB,EAAE,MAAe;IACpC,uBAAuB,EAAEO,gBAAgB;IACzCb,UAAU,EAAEnB,oBAAoB,CAACmB,UAAU,EAAEY,aAAa;EAC5D,CAAC,GACD;IAAEZ;EAAW,CAAC;EAEpB,MAAMP,KAAK,GAAGiB,YAAY,CAACO,MAAM;EACjC,MAAMC,aAAa,GAAGzB,KAAK,KAAK,CAAC,IAAIkB,SAAS,GAAGA,SAAS,GAAGZ,mBAAmB,CAACN,KAAK,CAAC;EAEvF,MAAM0B,IAAI,GAAGvB,OAAO,GAAGd,IAAI,GAAGF,SAAS;EAEvC,oBACEW,KAAA,CAAAF,SAAA;IAAAQ,QAAA,gBACEV,IAAA,CAACgC,IAAI;MACHjB,GAAG,EAAEA,GAAI;MACTkB,IAAI,EAAC,WAAW;MAChBC,KAAK,EAAElB,UAAW;MAClBmB,YAAY,EAAElB,aAAc;MAC5BmB,cAAc,EAAC,MAAM;MACrBC,YAAY,EAAC,KAAK;MAClBC,WAAW,EAAE,KAAM;MACnBC,UAAU,EAAE,KAAM;MAClB5B,kBAAkB,EAAEA,kBAAmB;MACvC,cAAYA,kBAAmB;MAAA,GAC3BiB,aAAa;MAAA,GACbd,KAAK;MAAAJ,QAAA,EAERA;IAAQ,CACL,CAAC,eACPV,IAAA,CAACF,kBAAkB;MAAC0C,OAAO,EAAET;IAAc,CAAE,CAAC;EAAA,CAC9C,CAAC;AAEP,CACF,CAAC;AAEDvB,YAAY,CAACiC,WAAW,GAAG,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Web-only. On native, screen readers move through the rows directly, in the anchored popover
|
|
5
|
+
* or in `Select.BottomSheet`, instead of following an input-driven live region.
|
|
6
|
+
*/
|
|
7
|
+
export function SelectSearchStatus(_props) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=SelectSearchStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SelectSearchStatus","_props"],"sourceRoot":"../../../src","sources":["select/SelectSearchStatus.tsx"],"mappings":";;AAIA;AACA;AACA;AACA;AACA,OAAO,SAASA,kBAAkBA,CAACC,MAA+B,EAAE;EAClE,OAAO,IAAI;AACb","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { VisuallyHidden } from '@react-aria/visually-hidden';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
/**
|
|
6
|
+
* Polite live region for the search results. It stays mounted while the search is, so each
|
|
7
|
+
* change to the count (or to the empty-state text) is announced.
|
|
8
|
+
*/
|
|
9
|
+
export function SelectSearchStatus({
|
|
10
|
+
message
|
|
11
|
+
}) {
|
|
12
|
+
return /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
13
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
14
|
+
role: "status",
|
|
15
|
+
"aria-live": "polite",
|
|
16
|
+
children: message
|
|
17
|
+
})
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=SelectSearchStatus.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VisuallyHidden","jsx","_jsx","SelectSearchStatus","message","children","role"],"sourceRoot":"../../../src","sources":["select/SelectSearchStatus.web.tsx"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,6BAA6B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAK7D;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAC;EAAEC;AAAiC,CAAC,EAAE;EACvE,oBACEF,IAAA,CAACF,cAAc;IAAAK,QAAA,eACbH,IAAA;MAAKI,IAAI,EAAC,QAAQ;MAAC,aAAU,QAAQ;MAAAD,QAAA,EAClCD;IAAO,CACL;EAAC,CACQ,CAAC;AAErB","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useCallback } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { composeEventHandlers } from '@cdx-ui/utils';
|
|
6
|
+
import { Slot } from '../slot';
|
|
7
|
+
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
8
|
+
import { SelectContentProvider, useSelectContext } from './context';
|
|
9
|
+
import { getPopupRoleProps } from './popupRole';
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
/**
|
|
12
|
+
* Native rows take screen-reader focus directly, so the sheet has no listbox keyboard model
|
|
13
|
+
* for `Select.Search` to drive.
|
|
14
|
+
*/
|
|
15
|
+
const SHEET_CONTENT_CONTEXT = {
|
|
16
|
+
handleKeyDown: () => undefined
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Body of a native sheet surface that presents the options in place of `SelectContent`. The
|
|
21
|
+
* styled layer owns presentation (open, swipe, backdrop, back) and renders this inside it.
|
|
22
|
+
* It carries the popup role and name, and closes on the VoiceOver escape gesture without
|
|
23
|
+
* changing the value.
|
|
24
|
+
*/
|
|
25
|
+
export const SelectSheetContent = /*#__PURE__*/forwardRef(({
|
|
26
|
+
asChild,
|
|
27
|
+
children,
|
|
28
|
+
onAccessibilityEscape,
|
|
29
|
+
...props
|
|
30
|
+
}, ref) => {
|
|
31
|
+
const {
|
|
32
|
+
setOpen,
|
|
33
|
+
hasSearch,
|
|
34
|
+
labelId,
|
|
35
|
+
accessibilityLabel,
|
|
36
|
+
triggerId,
|
|
37
|
+
contentId
|
|
38
|
+
} = useSelectContext();
|
|
39
|
+
const dismiss = useCallback(() => setOpen(false), [setOpen]);
|
|
40
|
+
const roleProps = getPopupRoleProps({
|
|
41
|
+
hasSearch,
|
|
42
|
+
labelId,
|
|
43
|
+
accessibilityLabel,
|
|
44
|
+
triggerId
|
|
45
|
+
});
|
|
46
|
+
const Comp = asChild ? Slot : View;
|
|
47
|
+
return /*#__PURE__*/_jsx(SelectContentProvider, {
|
|
48
|
+
value: SHEET_CONTENT_CONTEXT,
|
|
49
|
+
children: /*#__PURE__*/_jsx(Comp, {
|
|
50
|
+
ref: ref,
|
|
51
|
+
id: contentId,
|
|
52
|
+
...roleProps,
|
|
53
|
+
...props,
|
|
54
|
+
...mergeDataAttributes(props, dataAttributes({
|
|
55
|
+
state: 'open'
|
|
56
|
+
})),
|
|
57
|
+
onAccessibilityEscape: composeEventHandlers(onAccessibilityEscape, dismiss),
|
|
58
|
+
children: children
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
SelectSheetContent.displayName = 'SelectSheetContent';
|
|
63
|
+
//# sourceMappingURL=SelectSheetContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useCallback","View","composeEventHandlers","Slot","dataAttributes","mergeDataAttributes","SelectContentProvider","useSelectContext","getPopupRoleProps","jsx","_jsx","SHEET_CONTENT_CONTEXT","handleKeyDown","undefined","SelectSheetContent","asChild","children","onAccessibilityEscape","props","ref","setOpen","hasSearch","labelId","accessibilityLabel","triggerId","contentId","dismiss","roleProps","Comp","value","id","state","displayName"],"sourceRoot":"../../../src","sources":["select/SelectSheetContent.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,WAAW,QAA2B,OAAO;AAClE,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,oBAAoB,QAAQ,eAAe;AACpD,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,yBAAyB;AAC7E,SAASC,qBAAqB,EAAEC,gBAAgB,QAAwC,WAAW;AACnG,SAASC,iBAAiB,QAAQ,aAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQhD;AACA;AACA;AACA;AACA,MAAMC,qBAAgD,GAAG;EAAEC,aAAa,EAAEA,CAAA,KAAMC;AAAU,CAAC;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,kBAAkB,gBAAGf,UAAU,CAC1C,CAAC;EAAEgB,OAAO;EAAEC,QAAQ;EAAEC,qBAAqB;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EAC/D,MAAM;IAAEC,OAAO;IAAEC,SAAS;IAAEC,OAAO;IAAEC,kBAAkB;IAAEC,SAAS;IAAEC;EAAU,CAAC,GAC7ElB,gBAAgB,CAAC,CAAC;EAEpB,MAAMmB,OAAO,GAAG1B,WAAW,CAAC,MAAMoB,OAAO,CAAC,KAAK,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAC5D,MAAMO,SAAS,GAAGnB,iBAAiB,CAAC;IAAEa,SAAS;IAAEC,OAAO;IAAEC,kBAAkB;IAAEC;EAAU,CAAC,CAAC;EAE1F,MAAMI,IAAI,GAAGb,OAAO,GAAGZ,IAAI,GAAGF,IAAI;EAElC,oBACES,IAAA,CAACJ,qBAAqB;IAACuB,KAAK,EAAElB,qBAAsB;IAAAK,QAAA,eAClDN,IAAA,CAACkB,IAAI;MACHT,GAAG,EAAEA,GAAI;MACTW,EAAE,EAAEL,SAAU;MAAA,GACVE,SAAS;MAAA,GACTT,KAAK;MAAA,GACLb,mBAAmB,CAACa,KAAK,EAAEd,cAAc,CAAC;QAAE2B,KAAK,EAAE;MAAO,CAAC,CAAC,CAAC;MACjEd,qBAAqB,EAAEf,oBAAoB,CAACe,qBAAqB,EAAES,OAAO,CAAE;MAAAV,QAAA,EAE3EA;IAAQ,CACL;EAAC,CACc,CAAC;AAE5B,CACF,CAAC;AAEDF,kBAAkB,CAACkB,WAAW,GAAG,oBAAoB","ignoreList":[]}
|
|
@@ -8,4 +8,6 @@ export const [SelectProvider, useSelectContext] = createContext('SelectContext')
|
|
|
8
8
|
* highlighted, checked, etc.) to child slots like `Select.ItemLabel`.
|
|
9
9
|
*/
|
|
10
10
|
export const [SelectItemProvider, useSelectItemContext] = createContext('SelectItemContext');
|
|
11
|
+
/** Internal: lets `Select.Search` drive the listbox from its input. */
|
|
12
|
+
export const [SelectContentProvider, useSelectContentContext] = createContext('SelectContentContext');
|
|
11
13
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","SelectProvider","useSelectContext","SelectItemProvider","useSelectItemContext"],"sourceRoot":"../../../src","sources":["select/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,eAAe;AAG7C,OAAO,MAAM,CAACC,cAAc,EAAEC,gBAAgB,CAAC,GAC7CF,aAAa,CAAqB,eAAe,CAAC;;AAEpD;AACA;AACA;AACA;AACA,OAAO,MAAM,CAACG,kBAAkB,EAAEC,oBAAoB,CAAC,GACrDJ,aAAa,CAA6B,mBAAmB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createContext","SelectProvider","useSelectContext","SelectItemProvider","useSelectItemContext","SelectContentProvider","useSelectContentContext"],"sourceRoot":"../../../src","sources":["select/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,eAAe;AAG7C,OAAO,MAAM,CAACC,cAAc,EAAEC,gBAAgB,CAAC,GAC7CF,aAAa,CAAqB,eAAe,CAAC;;AAEpD;AACA;AACA;AACA;AACA,OAAO,MAAM,CAACG,kBAAkB,EAAEC,oBAAoB,CAAC,GACrDJ,aAAa,CAA6B,mBAAmB,CAAC;AAOhE;AACA,OAAO,MAAM,CAACK,qBAAqB,EAAEC,uBAAuB,CAAC,GAC3DN,aAAa,CAA4B,sBAAsB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const COMBINING_MARKS = /[̀-ͯ]/g;
|
|
4
|
+
function normalize(text) {
|
|
5
|
+
const decomposed = typeof text.normalize === 'function' ? text.normalize('NFD') : text;
|
|
6
|
+
return decomposed.replace(COMBINING_MARKS, '').toLocaleLowerCase();
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** Case- and accent-insensitive `contains`: "cafe" matches "Café". */
|
|
10
|
+
export const defaultSelectFilter = (textValue, inputValue) => normalize(textValue).includes(normalize(inputValue));
|
|
11
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["COMBINING_MARKS","normalize","text","decomposed","replace","toLocaleLowerCase","defaultSelectFilter","textValue","inputValue","includes"],"sourceRoot":"../../../src","sources":["select/filter.ts"],"mappings":";;AAEA,MAAMA,eAAe,GAAG,QAAQ;AAEhC,SAASC,SAASA,CAACC,IAAY,EAAU;EACvC,MAAMC,UAAU,GAAG,OAAOD,IAAI,CAACD,SAAS,KAAK,UAAU,GAAGC,IAAI,CAACD,SAAS,CAAC,KAAK,CAAC,GAAGC,IAAI;EACtF,OAAOC,UAAU,CAACC,OAAO,CAACJ,eAAe,EAAE,EAAE,CAAC,CAACK,iBAAiB,CAAC,CAAC;AACpE;;AAEA;AACA,OAAO,MAAMC,mBAAiC,GAAGA,CAACC,SAAS,EAAEC,UAAU,KACrEP,SAAS,CAACM,SAAS,CAAC,CAACE,QAAQ,CAACR,SAAS,CAACO,UAAU,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export { useSelectContext, useSelectItemContext } from './context';
|
|
3
|
+
export { SelectProvider, useSelectContext, useSelectItemContext } from './context';
|
|
4
4
|
export { SelectRoot } from './SelectRoot';
|
|
5
5
|
export { SelectTrigger } from './SelectTrigger';
|
|
6
6
|
export { SelectContent } from './SelectContent';
|
|
7
|
+
export { SelectSheetContent } from './SelectSheetContent';
|
|
8
|
+
export { SelectSearch } from './SelectSearch';
|
|
9
|
+
export { SelectListbox } from './SelectListbox';
|
|
10
|
+
export { SelectEmpty } from './SelectEmpty';
|
|
7
11
|
export { SelectItem } from './SelectItem';
|
|
8
12
|
//# sourceMappingURL=index.js.map
|