@cdx-ui/primitives 0.0.1-beta.121 → 0.0.1-beta.123

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.
Files changed (64) hide show
  1. package/lib/commonjs/index.js +12 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/tabs/Tab.js +122 -0
  4. package/lib/commonjs/tabs/Tab.js.map +1 -0
  5. package/lib/commonjs/tabs/TabPanel.js +53 -0
  6. package/lib/commonjs/tabs/TabPanel.js.map +1 -0
  7. package/lib/commonjs/tabs/TabsList.js +58 -0
  8. package/lib/commonjs/tabs/TabsList.js.map +1 -0
  9. package/lib/commonjs/tabs/TabsRoot.js +79 -0
  10. package/lib/commonjs/tabs/TabsRoot.js.map +1 -0
  11. package/lib/commonjs/tabs/context.js +19 -0
  12. package/lib/commonjs/tabs/context.js.map +1 -0
  13. package/lib/commonjs/tabs/index.js +47 -0
  14. package/lib/commonjs/tabs/index.js.map +1 -0
  15. package/lib/commonjs/tabs/types.js +6 -0
  16. package/lib/commonjs/tabs/types.js.map +1 -0
  17. package/lib/commonjs/tabs/useTabsNavigation.js +84 -0
  18. package/lib/commonjs/tabs/useTabsNavigation.js.map +1 -0
  19. package/lib/module/index.js +1 -0
  20. package/lib/module/index.js.map +1 -1
  21. package/lib/module/tabs/Tab.js +118 -0
  22. package/lib/module/tabs/Tab.js.map +1 -0
  23. package/lib/module/tabs/TabPanel.js +49 -0
  24. package/lib/module/tabs/TabPanel.js.map +1 -0
  25. package/lib/module/tabs/TabsList.js +54 -0
  26. package/lib/module/tabs/TabsList.js.map +1 -0
  27. package/lib/module/tabs/TabsRoot.js +75 -0
  28. package/lib/module/tabs/TabsRoot.js.map +1 -0
  29. package/lib/module/tabs/context.js +11 -0
  30. package/lib/module/tabs/context.js.map +1 -0
  31. package/lib/module/tabs/index.js +8 -0
  32. package/lib/module/tabs/index.js.map +1 -0
  33. package/lib/module/tabs/types.js +4 -0
  34. package/lib/module/tabs/types.js.map +1 -0
  35. package/lib/module/tabs/useTabsNavigation.js +81 -0
  36. package/lib/module/tabs/useTabsNavigation.js.map +1 -0
  37. package/lib/typescript/index.d.ts +1 -0
  38. package/lib/typescript/index.d.ts.map +1 -1
  39. package/lib/typescript/tabs/Tab.d.ts +8 -0
  40. package/lib/typescript/tabs/Tab.d.ts.map +1 -0
  41. package/lib/typescript/tabs/TabPanel.d.ts +9 -0
  42. package/lib/typescript/tabs/TabPanel.d.ts.map +1 -0
  43. package/lib/typescript/tabs/TabsList.d.ts +8 -0
  44. package/lib/typescript/tabs/TabsList.d.ts.map +1 -0
  45. package/lib/typescript/tabs/TabsRoot.d.ts +8 -0
  46. package/lib/typescript/tabs/TabsRoot.d.ts.map +1 -0
  47. package/lib/typescript/tabs/context.d.ts +14 -0
  48. package/lib/typescript/tabs/context.d.ts.map +1 -0
  49. package/lib/typescript/tabs/index.d.ts +7 -0
  50. package/lib/typescript/tabs/index.d.ts.map +1 -0
  51. package/lib/typescript/tabs/types.d.ts +68 -0
  52. package/lib/typescript/tabs/types.d.ts.map +1 -0
  53. package/lib/typescript/tabs/useTabsNavigation.d.ts +14 -0
  54. package/lib/typescript/tabs/useTabsNavigation.d.ts.map +1 -0
  55. package/package.json +2 -2
  56. package/src/index.ts +1 -0
  57. package/src/tabs/Tab.tsx +158 -0
  58. package/src/tabs/TabPanel.tsx +52 -0
  59. package/src/tabs/TabsList.tsx +64 -0
  60. package/src/tabs/TabsRoot.tsx +115 -0
  61. package/src/tabs/context.tsx +10 -0
  62. package/src/tabs/index.ts +17 -0
  63. package/src/tabs/types.ts +73 -0
  64. package/src/tabs/useTabsNavigation.ts +97 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ import { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react';
4
+ import { Platform, Pressable } from 'react-native';
5
+ import { composeEventHandlers, mergeRefs } from '@cdx-ui/utils';
6
+ import { useFocus, useFocusRing } from '@react-native-aria/focus';
7
+ import { useHover, usePress } from '@react-native-aria/interactions';
8
+ import { Slot } from '../slot';
9
+ import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
10
+ import { TabProvider, useTabsContext } from './context';
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ export const Tab = /*#__PURE__*/forwardRef(({
13
+ asChild,
14
+ children,
15
+ value: tabValue,
16
+ disabled: disabledProp = false,
17
+ isHovered: isHoveredProp,
18
+ isActive: isActiveProp,
19
+ isFocused: isFocusedProp,
20
+ isFocusVisible: isFocusVisibleProp,
21
+ isDisabled: isDisabledProp,
22
+ ...props
23
+ }, ref) => {
24
+ const {
25
+ value: selectedValue,
26
+ onValueChange,
27
+ disabled: contextDisabled,
28
+ listId,
29
+ registerTab,
30
+ unregisterTab,
31
+ focusedValue,
32
+ setFocusedValue
33
+ } = useTabsContext();
34
+ const disabled = contextDisabled || !!disabledProp || !!isDisabledProp;
35
+ const selected = selectedValue === tabValue;
36
+ const nodeRef = useRef(null);
37
+ const mergedRef = mergeRefs(ref, nodeRef);
38
+ useEffect(() => {
39
+ registerTab(tabValue, {
40
+ disabled,
41
+ node: nodeRef.current
42
+ });
43
+ return () => unregisterTab(tabValue);
44
+ }, [tabValue, disabled, registerTab, unregisterTab]);
45
+ const {
46
+ isFocusVisible,
47
+ focusProps: focusRingProps
48
+ } = useFocusRing();
49
+ const {
50
+ pressProps,
51
+ isPressed: isActive
52
+ } = usePress({
53
+ isDisabled: disabled
54
+ });
55
+ const {
56
+ isFocused,
57
+ focusProps
58
+ } = useFocus();
59
+ const {
60
+ isHovered,
61
+ hoverProps
62
+ } = useHover();
63
+ const handlePress = useCallback(() => {
64
+ if (!disabled) {
65
+ setFocusedValue(tabValue);
66
+ onValueChange(tabValue);
67
+ }
68
+ }, [disabled, tabValue, onValueChange, setFocusedValue]);
69
+ const interactionState = useMemo(() => ({
70
+ hover: !!(isHoveredProp || isHovered),
71
+ focus: !!(isFocusedProp || isFocused),
72
+ active: !!(isActiveProp || isActive),
73
+ disabled: !!disabled,
74
+ focusVisible: !!(isFocusVisibleProp || isFocusVisible),
75
+ selected
76
+ }), [isHoveredProp, isHovered, isFocusedProp, isFocused, isActiveProp, isActive, disabled, isFocusVisibleProp, isFocusVisible, selected]);
77
+ const isRovingTabStop = (focusedValue ?? selectedValue) === tabValue;
78
+ const webProps = Platform.OS === 'web' ? {
79
+ tabIndex: isRovingTabStop ? 0 : -1
80
+ } : {};
81
+ const Comp = asChild ? Slot : Pressable;
82
+ return /*#__PURE__*/_jsx(TabProvider, {
83
+ value: interactionState,
84
+ children: /*#__PURE__*/_jsx(Comp, {
85
+ ref: mergedRef,
86
+ role: "tab",
87
+ id: `${listId}-tab-${tabValue}`,
88
+ "aria-selected": selected,
89
+ "aria-controls": `${listId}-panel-${tabValue}`,
90
+ "aria-disabled": disabled,
91
+ disabled: disabled,
92
+ accessibilityState: {
93
+ selected,
94
+ disabled
95
+ },
96
+ ...webProps,
97
+ ...props,
98
+ ...mergeDataAttributes(props, dataAttributes({
99
+ hover: interactionState.hover,
100
+ focus: interactionState.focus,
101
+ active: interactionState.active,
102
+ disabled: interactionState.disabled,
103
+ focusVisible: interactionState.focusVisible,
104
+ state: selected ? 'active' : 'inactive'
105
+ })),
106
+ onPress: composeEventHandlers(props?.onPress, handlePress),
107
+ onPressIn: composeEventHandlers(props?.onPressIn, pressProps.onPressIn),
108
+ onPressOut: composeEventHandlers(props?.onPressOut, pressProps.onPressOut),
109
+ onHoverIn: composeEventHandlers(props?.onHoverIn, hoverProps.onHoverIn),
110
+ onHoverOut: composeEventHandlers(props?.onHoverOut, hoverProps.onHoverOut),
111
+ onFocus: composeEventHandlers(props?.onFocus, focusProps.onFocus, focusRingProps.onFocus),
112
+ onBlur: composeEventHandlers(props?.onBlur, focusProps.onBlur, focusRingProps.onBlur),
113
+ children: children
114
+ })
115
+ });
116
+ });
117
+ Tab.displayName = 'Tab';
118
+ //# sourceMappingURL=Tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","useCallback","useEffect","useMemo","useRef","Platform","Pressable","composeEventHandlers","mergeRefs","useFocus","useFocusRing","useHover","usePress","Slot","dataAttributes","mergeDataAttributes","TabProvider","useTabsContext","jsx","_jsx","Tab","asChild","children","value","tabValue","disabled","disabledProp","isHovered","isHoveredProp","isActive","isActiveProp","isFocused","isFocusedProp","isFocusVisible","isFocusVisibleProp","isDisabled","isDisabledProp","props","ref","selectedValue","onValueChange","contextDisabled","listId","registerTab","unregisterTab","focusedValue","setFocusedValue","selected","nodeRef","mergedRef","node","current","focusProps","focusRingProps","pressProps","isPressed","hoverProps","handlePress","interactionState","hover","focus","active","focusVisible","isRovingTabStop","webProps","OS","tabIndex","Comp","role","id","accessibilityState","state","onPress","onPressIn","onPressOut","onHoverIn","onHoverOut","onFocus","onBlur","displayName"],"sourceRoot":"../../../src","sources":["tabs/Tab.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import { forwardRef } from 'react';
4
+ import { View } from 'react-native';
5
+ import { Slot } from '../slot';
6
+ import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
7
+ import { useTabsContext } from './context';
8
+ import { jsx as _jsx } from "react/jsx-runtime";
9
+ export const TabPanel = /*#__PURE__*/forwardRef(({
10
+ asChild,
11
+ children,
12
+ value: panelValue,
13
+ unmountWhenInactive = false,
14
+ style,
15
+ ...props
16
+ }, ref) => {
17
+ const {
18
+ value: selectedValue,
19
+ listId
20
+ } = useTabsContext();
21
+ const selected = selectedValue === panelValue;
22
+ if (!selected && unmountWhenInactive) {
23
+ return null;
24
+ }
25
+ const Comp = asChild ? Slot : View;
26
+ const hideFromAccessibility = selected ? null : {
27
+ accessibilityElementsHidden: true,
28
+ importantForAccessibility: 'no-hide-descendants',
29
+ 'aria-hidden': true
30
+ };
31
+ return /*#__PURE__*/_jsx(Comp, {
32
+ ref: ref,
33
+ role: "tabpanel",
34
+ id: `${listId}-panel-${panelValue}`,
35
+ "aria-labelledby": `${listId}-tab-${panelValue}`,
36
+ style: [!selected ? {
37
+ display: 'none'
38
+ } : null, style],
39
+ ...props,
40
+ ...hideFromAccessibility,
41
+ ...mergeDataAttributes(props, dataAttributes({
42
+ slot: 'tabs-panel',
43
+ state: selected ? 'active' : 'inactive'
44
+ })),
45
+ children: children
46
+ });
47
+ });
48
+ TabPanel.displayName = 'TabPanel';
49
+ //# sourceMappingURL=TabPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","View","Slot","dataAttributes","mergeDataAttributes","useTabsContext","jsx","_jsx","TabPanel","asChild","children","value","panelValue","unmountWhenInactive","style","props","ref","selectedValue","listId","selected","Comp","hideFromAccessibility","accessibilityElementsHidden","importantForAccessibility","role","id","display","slot","state","displayName"],"sourceRoot":"../../../src","sources":["tabs/TabPanel.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAA2C,OAAO;AACrE,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,yBAAyB;AAC7E,SAASC,cAAc,QAAQ,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ3C,OAAO,MAAMC,QAAQ,gBAAGR,UAAU,CAChC,CAAC;EAAES,OAAO;EAAEC,QAAQ;EAAEC,KAAK,EAAEC,UAAU;EAAEC,mBAAmB,GAAG,KAAK;EAAEC,KAAK;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EAC/F,MAAM;IAAEL,KAAK,EAAEM,aAAa;IAAEC;EAAO,CAAC,GAAGb,cAAc,CAAC,CAAC;EACzD,MAAMc,QAAQ,GAAGF,aAAa,KAAKL,UAAU;EAE7C,IAAI,CAACO,QAAQ,IAAIN,mBAAmB,EAAE;IACpC,OAAO,IAAI;EACb;EAEA,MAAMO,IAAI,GAAGX,OAAO,GAAGP,IAAI,GAAGD,IAAI;EAElC,MAAMoB,qBAAqB,GAAGF,QAAQ,GAClC,IAAI,GACJ;IACEG,2BAA2B,EAAE,IAAa;IAC1CC,yBAAyB,EAAE,qBAA8B;IACzD,aAAa,EAAE;EACjB,CAAC;EAEL,oBACEhB,IAAA,CAACa,IAAI;IACHJ,GAAG,EAAEA,GAAI;IACTQ,IAAI,EAAC,UAAU;IACfC,EAAE,EAAE,GAAGP,MAAM,UAAUN,UAAU,EAAG;IACpC,mBAAiB,GAAGM,MAAM,QAAQN,UAAU,EAAG;IAC/CE,KAAK,EAAE,CAAC,CAACK,QAAQ,GAAG;MAAEO,OAAO,EAAE;IAAO,CAAC,GAAG,IAAI,EAAEZ,KAAK,CAAE;IAAA,GACnDC,KAAK;IAAA,GACLM,qBAAqB;IAAA,GACrBjB,mBAAmB,CACrBW,KAAK,EACLZ,cAAc,CAAC;MAAEwB,IAAI,EAAE,YAAY;MAAEC,KAAK,EAAET,QAAQ,GAAG,QAAQ,GAAG;IAAW,CAAC,CAChF,CAAC;IAAAT,QAAA,EAEAA;EAAQ,CACL,CAAC;AAEX,CACF,CAAC;AAEDF,QAAQ,CAACqB,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ import { forwardRef } from 'react';
4
+ import { Platform, 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 { useTabsContext } from './context';
9
+ import { useTabsNavigation } from './useTabsNavigation';
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ export const TabsList = /*#__PURE__*/forwardRef(({
12
+ asChild,
13
+ children,
14
+ ...props
15
+ }, ref) => {
16
+ const {
17
+ value,
18
+ onValueChange,
19
+ activationMode,
20
+ orientation,
21
+ getTabs,
22
+ focusedValue,
23
+ setFocusedValue
24
+ } = useTabsContext();
25
+ const {
26
+ handleKeyDown
27
+ } = useTabsNavigation({
28
+ getTabs,
29
+ focusedValue,
30
+ setFocusedValue,
31
+ value,
32
+ onValueChange,
33
+ activationMode,
34
+ orientation
35
+ });
36
+ const webProps = Platform.OS === 'web' ? {
37
+ onKeyDown: composeEventHandlers(props.onKeyDown, handleKeyDown)
38
+ } : {};
39
+ const Comp = asChild ? Slot : View;
40
+ return /*#__PURE__*/_jsx(Comp, {
41
+ ref: ref,
42
+ role: "tablist",
43
+ "aria-orientation": orientation,
44
+ ...props,
45
+ ...webProps,
46
+ ...mergeDataAttributes(props, dataAttributes({
47
+ slot: 'tabs-list',
48
+ orientation
49
+ })),
50
+ children: children
51
+ });
52
+ });
53
+ TabsList.displayName = 'TabsList';
54
+ //# sourceMappingURL=TabsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","Platform","View","composeEventHandlers","Slot","dataAttributes","mergeDataAttributes","useTabsContext","useTabsNavigation","jsx","_jsx","TabsList","asChild","children","props","ref","value","onValueChange","activationMode","orientation","getTabs","focusedValue","setFocusedValue","handleKeyDown","webProps","OS","onKeyDown","Comp","role","slot","displayName"],"sourceRoot":"../../../src","sources":["tabs/TabsList.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAA2B,OAAO;AACrD,SAASC,QAAQ,EAAEC,IAAI,QAAQ,cAAc;AAC7C,SAASC,oBAAoB,QAAQ,eAAe;AACpD,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,yBAAyB;AAC7E,SAASC,cAAc,QAAQ,WAAW;AAE1C,SAASC,iBAAiB,QAAQ,qBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOxD,OAAO,MAAMC,QAAQ,gBAAGX,UAAU,CAChC,CAAC;EAAEY,OAAO;EAAEC,QAAQ;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACxC,MAAM;IACJC,KAAK;IACLC,aAAa;IACbC,cAAc;IACdC,WAAW;IACXC,OAAO;IACPC,YAAY;IACZC;EACF,CAAC,GAAGf,cAAc,CAAC,CAAC;EAEpB,MAAM;IAAEgB;EAAc,CAAC,GAAGf,iBAAiB,CAAC;IAC1CY,OAAO;IACPC,YAAY;IACZC,eAAe;IACfN,KAAK;IACLC,aAAa;IACbC,cAAc;IACdC;EACF,CAAC,CAAC;EAEF,MAAMK,QAAQ,GACZvB,QAAQ,CAACwB,EAAE,KAAK,KAAK,GACjB;IACEC,SAAS,EAAEvB,oBAAoB,CAC5BW,KAAK,CAAgDY,SAAS,EAC/DH,aACF;EACF,CAAC,GACD,CAAC,CAAC;EAER,MAAMI,IAAI,GAAGf,OAAO,GAAGR,IAAI,GAAGF,IAAI;EAElC,oBACEQ,IAAA,CAACiB,IAAI;IACHZ,GAAG,EAAEA,GAAI;IACTa,IAAI,EAAC,SAAS;IACd,oBAAkBT,WAAY;IAAA,GAC1BL,KAAK;IAAA,GACLU,QAAQ;IAAA,GACRlB,mBAAmB,CAACQ,KAAK,EAAET,cAAc,CAAC;MAAEwB,IAAI,EAAE,WAAW;MAAEV;IAAY,CAAC,CAAC,CAAC;IAAAN,QAAA,EAEjFA;EAAQ,CACL,CAAC;AAEX,CACF,CAAC;AAEDF,QAAQ,CAACmB,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
4
+ import { View } from 'react-native';
5
+ import { useControllableState } from '@cdx-ui/utils';
6
+ import { Slot } from '../slot';
7
+ import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
8
+ import { TabsProvider } from './context';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ export const TabsRoot = /*#__PURE__*/forwardRef(({
11
+ asChild,
12
+ children,
13
+ value: valueProp,
14
+ defaultValue,
15
+ onValueChange,
16
+ activationMode = 'automatic',
17
+ orientation = 'horizontal',
18
+ disabled = false,
19
+ ...props
20
+ }, ref) => {
21
+ const [value, setValue] = useControllableState({
22
+ prop: valueProp,
23
+ defaultProp: defaultValue,
24
+ onChange: newValue => {
25
+ if (newValue !== undefined) {
26
+ onValueChange?.(newValue);
27
+ }
28
+ }
29
+ });
30
+ const [focusedValue, setFocusedValue] = useState(undefined);
31
+
32
+ // When the parent updates the controlled selection, drop stale roving-focus state so
33
+ // tabIndex and arrow-key navigation follow `value` instead of a previously focused tab.
34
+ useEffect(() => {
35
+ setFocusedValue(prev => prev !== undefined && prev !== value ? undefined : prev);
36
+ }, [value]);
37
+ const tabsRef = useRef(new Map());
38
+ const registerTab = useCallback((tabValue, entry) => {
39
+ tabsRef.current.set(tabValue, entry);
40
+ }, []);
41
+ const unregisterTab = useCallback(tabValue => {
42
+ tabsRef.current.delete(tabValue);
43
+ }, []);
44
+ const getTabs = useCallback(() => Array.from(tabsRef.current.entries()), []);
45
+ const reactId = useId();
46
+ const listId = `tabs-${reactId}`;
47
+ const contextValue = useMemo(() => ({
48
+ value,
49
+ onValueChange: setValue,
50
+ disabled,
51
+ activationMode,
52
+ orientation,
53
+ listId,
54
+ registerTab,
55
+ unregisterTab,
56
+ getTabs,
57
+ focusedValue,
58
+ setFocusedValue
59
+ }), [value, setValue, disabled, activationMode, orientation, listId, registerTab, unregisterTab, getTabs, focusedValue]);
60
+ const Comp = asChild ? Slot : View;
61
+ return /*#__PURE__*/_jsx(TabsProvider, {
62
+ value: contextValue,
63
+ children: /*#__PURE__*/_jsx(Comp, {
64
+ ref: ref,
65
+ ...props,
66
+ ...mergeDataAttributes(props, dataAttributes({
67
+ disabled,
68
+ orientation
69
+ })),
70
+ children: children
71
+ })
72
+ });
73
+ });
74
+ TabsRoot.displayName = 'TabsRoot';
75
+ //# sourceMappingURL=TabsRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["forwardRef","useCallback","useEffect","useId","useMemo","useRef","useState","View","useControllableState","Slot","dataAttributes","mergeDataAttributes","TabsProvider","jsx","_jsx","TabsRoot","asChild","children","value","valueProp","defaultValue","onValueChange","activationMode","orientation","disabled","props","ref","setValue","prop","defaultProp","onChange","newValue","undefined","focusedValue","setFocusedValue","prev","tabsRef","Map","registerTab","tabValue","entry","current","set","unregisterTab","delete","getTabs","Array","from","entries","reactId","listId","contextValue","Comp","displayName"],"sourceRoot":"../../../src","sources":["tabs/TabsRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ import { createContext } from '@cdx-ui/utils';
4
+ export const [TabsProvider, useTabsContext] = createContext('TabsContext');
5
+
6
+ /**
7
+ * Propagates a tab's interaction and selection state (hover, focus, active, selected, etc.)
8
+ * to child slots like a styled `Tabs.Tab`'s label/icon.
9
+ */
10
+ export const [TabProvider, useTabContext] = createContext('TabContext');
11
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","TabsProvider","useTabsContext","TabProvider","useTabContext"],"sourceRoot":"../../../src","sources":["tabs/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,eAAe;AAG7C,OAAO,MAAM,CAACC,YAAY,EAAEC,cAAc,CAAC,GAAGF,aAAa,CAAmB,aAAa,CAAC;;AAE5F;AACA;AACA;AACA;AACA,OAAO,MAAM,CAACG,WAAW,EAAEC,aAAa,CAAC,GAAGJ,aAAa,CAAsB,YAAY,CAAC","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ export { useTabContext, useTabsContext } from './context';
4
+ export { TabsRoot } from './TabsRoot';
5
+ export { TabsList } from './TabsList';
6
+ export { Tab } from './Tab';
7
+ export { TabPanel } from './TabPanel';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useTabContext","useTabsContext","TabsRoot","TabsList","Tab","TabPanel"],"sourceRoot":"../../../src","sources":["tabs/index.ts"],"mappings":";;AAYA,SAASA,aAAa,EAAEC,cAAc,QAAQ,WAAW;AACzD,SAASC,QAAQ,QAA4B,YAAY;AACzD,SAASC,QAAQ,QAA4B,YAAY;AACzD,SAASC,GAAG,QAAuB,OAAO;AAC1C,SAASC,QAAQ,QAA4B,YAAY","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["tabs/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useRef } from 'react';
4
+
5
+ // Web-only — native platforms rely on OS-managed sequential focus (VoiceOver/TalkBack),
6
+ // same restriction documented on `useListboxNavigation` in `../select/`.
7
+
8
+ export function useTabsNavigation({
9
+ getTabs,
10
+ focusedValue,
11
+ setFocusedValue,
12
+ value,
13
+ onValueChange,
14
+ activationMode,
15
+ orientation
16
+ }) {
17
+ const onValueChangeRef = useRef(onValueChange);
18
+ onValueChangeRef.current = onValueChange;
19
+ const getEnabledTabs = useCallback(() => getTabs().filter(([, entry]) => !entry.disabled), [getTabs]);
20
+ const moveFocus = useCallback(([targetValue, targetEntry]) => {
21
+ setFocusedValue(targetValue);
22
+ targetEntry.node?.focus?.();
23
+ if (activationMode === 'automatic') {
24
+ onValueChangeRef.current(targetValue);
25
+ }
26
+ }, [setFocusedValue, activationMode]);
27
+ const handleKeyDown = useCallback(e => {
28
+ const enabledTabs = getEnabledTabs();
29
+ if (enabledTabs.length === 0) {
30
+ return;
31
+ }
32
+ const currentValue = focusedValue ?? value;
33
+ const idx = enabledTabs.findIndex(([tabValue]) => tabValue === currentValue);
34
+
35
+ // ARIA APG tabs pattern: horizontal lists respond to Left/Right, vertical lists to Up/Down.
36
+ const nextKey = orientation === 'vertical' ? 'ArrowDown' : 'ArrowRight';
37
+ const prevKey = orientation === 'vertical' ? 'ArrowUp' : 'ArrowLeft';
38
+ switch (e.key) {
39
+ case nextKey:
40
+ {
41
+ e.preventDefault();
42
+ moveFocus(enabledTabs[idx < enabledTabs.length - 1 ? idx + 1 : 0]);
43
+ break;
44
+ }
45
+ case prevKey:
46
+ {
47
+ e.preventDefault();
48
+ moveFocus(enabledTabs[idx > 0 ? idx - 1 : enabledTabs.length - 1]);
49
+ break;
50
+ }
51
+ case 'Home':
52
+ {
53
+ e.preventDefault();
54
+ moveFocus(enabledTabs[0]);
55
+ break;
56
+ }
57
+ case 'End':
58
+ {
59
+ e.preventDefault();
60
+ const last = enabledTabs.at(-1);
61
+ if (last) {
62
+ moveFocus(last);
63
+ }
64
+ break;
65
+ }
66
+ case 'Enter':
67
+ case ' ':
68
+ {
69
+ if (activationMode === 'manual' && focusedValue) {
70
+ e.preventDefault();
71
+ onValueChangeRef.current(focusedValue);
72
+ }
73
+ break;
74
+ }
75
+ }
76
+ }, [focusedValue, value, getEnabledTabs, moveFocus, activationMode, orientation]);
77
+ return {
78
+ handleKeyDown
79
+ };
80
+ }
81
+ //# sourceMappingURL=useTabsNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useRef","useTabsNavigation","getTabs","focusedValue","setFocusedValue","value","onValueChange","activationMode","orientation","onValueChangeRef","current","getEnabledTabs","filter","entry","disabled","moveFocus","targetValue","targetEntry","node","focus","handleKeyDown","e","enabledTabs","length","currentValue","idx","findIndex","tabValue","nextKey","prevKey","key","preventDefault","last","at"],"sourceRoot":"../../../src","sources":["tabs/useTabsNavigation.ts"],"mappings":"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","ignoreList":[]}
@@ -14,6 +14,7 @@ export { type EdgeInsets, OverlayInsetsProvider } from './overlay';
14
14
  export { useAnchorPosition, type AnchorLayout } from './overlay';
15
15
  export * from './select';
16
16
  export * from './switch';
17
+ export * from './tabs';
17
18
  export * from './tile';
18
19
  export * from './toast';
19
20
  export * from './portal';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ITabProps } from './types';
3
+ export interface TabProps extends Omit<ITabProps, 'children'> {
4
+ asChild?: boolean;
5
+ children?: ReactNode;
6
+ }
7
+ export declare const Tab: import("react").ForwardRefExoticComponent<TabProps & import("react").RefAttributes<import("react-native").View>>;
8
+ //# sourceMappingURL=Tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/tabs/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,GAAG,kHAoIf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ import { View } from 'react-native';
3
+ import type { ITabPanelProps } from './types';
4
+ export interface TabPanelProps extends Omit<ITabPanelProps, 'children'> {
5
+ asChild?: boolean;
6
+ children?: ReactNode;
7
+ }
8
+ export declare const TabPanel: import("react").ForwardRefExoticComponent<TabPanelProps & import("react").RefAttributes<View>>;
9
+ //# sourceMappingURL=TabPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabPanel.d.ts","sourceRoot":"","sources":["../../../src/tabs/TabPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,gGAqCpB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { View } from 'react-native';
2
+ import type { ITabsListProps } from './types';
3
+ export interface TabsListProps extends ITabsListProps {
4
+ asChild?: boolean;
5
+ className?: string;
6
+ }
7
+ export declare const TabsList: import("react").ForwardRefExoticComponent<TabsListProps & import("react").RefAttributes<View>>;
8
+ //# sourceMappingURL=TabsList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsList.d.ts","sourceRoot":"","sources":["../../../src/tabs/TabsList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,IAAI,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,gGA+CpB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { View, type ViewProps } from 'react-native';
2
+ import type { ITabsProps } from './types';
3
+ export interface TabsRootProps extends ITabsProps, Omit<ViewProps, 'children'> {
4
+ asChild?: boolean;
5
+ className?: string;
6
+ }
7
+ export declare const TabsRoot: import("react").ForwardRefExoticComponent<TabsRootProps & import("react").RefAttributes<View>>;
8
+ //# sourceMappingURL=TabsRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabsRoot.d.ts","sourceRoot":"","sources":["../../../src/tabs/TabsRoot.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAKpD,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAEzD,MAAM,WAAW,aAAc,SAAQ,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,gGA0FpB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { TabInteractionState, TabsContextValue } from './types';
2
+ export declare const TabsProvider: import("react").FunctionComponent<{
3
+ children: import("react").ReactNode;
4
+ value: TabsContextValue;
5
+ }>, useTabsContext: () => TabsContextValue;
6
+ /**
7
+ * Propagates a tab's interaction and selection state (hover, focus, active, selected, etc.)
8
+ * to child slots like a styled `Tabs.Tab`'s label/icon.
9
+ */
10
+ export declare const TabProvider: import("react").FunctionComponent<{
11
+ children: import("react").ReactNode;
12
+ value: TabInteractionState;
13
+ }>, useTabContext: () => TabInteractionState;
14
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/tabs/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErE,eAAO,MAAO,YAAY;;;IAAE,cAAc,wBAAkD,CAAC;AAE7F;;;GAGG;AACH,eAAO,MAAO,WAAW;;;IAAE,aAAa,2BAAoD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export type { ITabPanelProps, ITabProps, ITabsListProps, ITabsProps, RegisteredTab, TabInteractionState, TabsActivationMode, TabsContextValue, TabsOrientation, } from './types';
2
+ export { useTabContext, useTabsContext } from './context';
3
+ export { TabsRoot, type TabsRootProps } from './TabsRoot';
4
+ export { TabsList, type TabsListProps } from './TabsList';
5
+ export { Tab, type TabProps } from './Tab';
6
+ export { TabPanel, type TabPanelProps } from './TabPanel';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tabs/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { PressableProps, ViewProps } from 'react-native';
3
+ import type { InteractionState } from '../types';
4
+ export type TabsActivationMode = 'automatic' | 'manual';
5
+ export type TabsOrientation = 'horizontal' | 'vertical';
6
+ export interface ITabsProps {
7
+ /** Controlled selected tab value. */
8
+ value?: string;
9
+ /** Default selected tab value for uncontrolled usage. */
10
+ defaultValue?: string;
11
+ onValueChange?: (value: string) => void;
12
+ /**
13
+ * `automatic` (default) selects a tab as soon as it receives focus via arrow keys.
14
+ * `manual` only moves focus on arrow keys — the consumer must press Enter/Space to select.
15
+ */
16
+ activationMode?: TabsActivationMode;
17
+ /**
18
+ * Layout axis and roving-focus key set. `horizontal` (default) uses ArrowLeft/ArrowRight;
19
+ * `vertical` uses ArrowUp/ArrowDown, per the ARIA APG tabs pattern.
20
+ */
21
+ orientation?: TabsOrientation;
22
+ disabled?: boolean;
23
+ children?: ReactNode;
24
+ }
25
+ export interface ITabsListProps extends ViewProps {
26
+ children?: ReactNode;
27
+ }
28
+ export interface ITabProps extends PressableProps {
29
+ /** Required — correlates this tab with its `Tabs.Panel` counterpart. */
30
+ value: string;
31
+ disabled?: boolean;
32
+ isHovered?: boolean;
33
+ isActive?: boolean;
34
+ isFocused?: boolean;
35
+ isFocusVisible?: boolean;
36
+ isDisabled?: boolean;
37
+ }
38
+ export interface ITabPanelProps extends ViewProps {
39
+ /** Required — correlates this panel with its `Tabs.Tab` counterpart. */
40
+ value: string;
41
+ /** Unmount when inactive instead of keeping the panel hidden in the DOM. */
42
+ unmountWhenInactive?: boolean;
43
+ children?: ReactNode;
44
+ }
45
+ export interface TabInteractionState extends InteractionState {
46
+ selected: boolean;
47
+ }
48
+ export interface RegisteredTab {
49
+ disabled: boolean;
50
+ node: {
51
+ focus?: () => void;
52
+ } | null;
53
+ }
54
+ export interface TabsContextValue {
55
+ value: string | undefined;
56
+ onValueChange: (value: string) => void;
57
+ disabled: boolean;
58
+ activationMode: TabsActivationMode;
59
+ orientation: TabsOrientation;
60
+ listId: string;
61
+ registerTab: (value: string, entry: RegisteredTab) => void;
62
+ unregisterTab: (value: string) => void;
63
+ getTabs: () => [string, RegisteredTab][];
64
+ /** Currently roving-focused tab value (keyboard navigation), distinct from committed `value`. */
65
+ focusedValue: string | undefined;
66
+ setFocusedValue: (value: string | undefined) => void;
67
+ }
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tabs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,kBAAkB,CAAC;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;IACzC,iGAAiG;IACjG,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD"}