@yahoo/uds-mobile 2.21.2 → 2.23.0

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 (112) hide show
  1. package/README.md +2 -0
  2. package/dist/bin/automated-config/dist/generated/generatedConfigs.mjs +3127 -452
  3. package/dist/bin/uds-mobile.mjs +7 -7
  4. package/dist/components/IconButton.cjs +24 -21
  5. package/dist/components/IconButton.js +25 -22
  6. package/dist/components/IconButton.js.map +1 -1
  7. package/dist/components/Select/Select.cjs +194 -0
  8. package/dist/components/Select/Select.d.cts +47 -0
  9. package/dist/components/Select/Select.d.cts.map +1 -0
  10. package/dist/components/Select/Select.d.ts +47 -0
  11. package/dist/components/Select/Select.d.ts.map +1 -0
  12. package/dist/components/Select/Select.js +194 -0
  13. package/dist/components/Select/Select.js.map +1 -0
  14. package/dist/components/Select/SelectContent.cjs +148 -0
  15. package/dist/components/Select/SelectContent.d.cts +31 -0
  16. package/dist/components/Select/SelectContent.d.cts.map +1 -0
  17. package/dist/components/Select/SelectContent.d.ts +31 -0
  18. package/dist/components/Select/SelectContent.d.ts.map +1 -0
  19. package/dist/components/Select/SelectContent.js +147 -0
  20. package/dist/components/Select/SelectContent.js.map +1 -0
  21. package/dist/components/Select/SelectItem.cjs +138 -0
  22. package/dist/components/Select/SelectItem.d.cts +24 -0
  23. package/dist/components/Select/SelectItem.d.cts.map +1 -0
  24. package/dist/components/Select/SelectItem.d.ts +24 -0
  25. package/dist/components/Select/SelectItem.d.ts.map +1 -0
  26. package/dist/components/Select/SelectItem.js +137 -0
  27. package/dist/components/Select/SelectItem.js.map +1 -0
  28. package/dist/components/Select/SelectTrigger.cjs +140 -0
  29. package/dist/components/Select/SelectTrigger.d.cts +13 -0
  30. package/dist/components/Select/SelectTrigger.d.cts.map +1 -0
  31. package/dist/components/Select/SelectTrigger.d.ts +13 -0
  32. package/dist/components/Select/SelectTrigger.d.ts.map +1 -0
  33. package/dist/components/Select/SelectTrigger.js +139 -0
  34. package/dist/components/Select/SelectTrigger.js.map +1 -0
  35. package/dist/components/Select/index.cjs +8 -0
  36. package/dist/components/Select/index.d.cts +5 -0
  37. package/dist/components/Select/index.d.ts +5 -0
  38. package/dist/components/Select/index.js +5 -0
  39. package/dist/components/Select/selectContext.cjs +22 -0
  40. package/dist/components/Select/selectContext.d.cts +12 -0
  41. package/dist/components/Select/selectContext.d.cts.map +1 -0
  42. package/dist/components/Select/selectContext.d.ts +12 -0
  43. package/dist/components/Select/selectContext.d.ts.map +1 -0
  44. package/dist/components/Select/selectContext.js +19 -0
  45. package/dist/components/Select/selectContext.js.map +1 -0
  46. package/dist/components/Select/selectItemTheme.cjs +39 -0
  47. package/dist/components/Select/selectItemTheme.d.cts +19 -0
  48. package/dist/components/Select/selectItemTheme.d.cts.map +1 -0
  49. package/dist/components/Select/selectItemTheme.d.ts +19 -0
  50. package/dist/components/Select/selectItemTheme.d.ts.map +1 -0
  51. package/dist/components/Select/selectItemTheme.js +39 -0
  52. package/dist/components/Select/selectItemTheme.js.map +1 -0
  53. package/dist/components/Select/types.cjs +1 -0
  54. package/dist/components/Select/types.d.cts +43 -0
  55. package/dist/components/Select/types.d.cts.map +1 -0
  56. package/dist/components/Select/types.d.ts +43 -0
  57. package/dist/components/Select/types.d.ts.map +1 -0
  58. package/dist/components/Select/types.js +1 -0
  59. package/dist/components/Switch.cjs +34 -12
  60. package/dist/components/Switch.d.cts.map +1 -1
  61. package/dist/components/Switch.d.ts.map +1 -1
  62. package/dist/components/Switch.js +36 -14
  63. package/dist/components/Switch.js.map +1 -1
  64. package/dist/components/UDSGestureProvider.cjs +4 -0
  65. package/dist/components/UDSGestureProvider.d.cts +3 -0
  66. package/dist/components/UDSGestureProvider.d.ts +3 -0
  67. package/dist/components/UDSGestureProvider.js +3 -0
  68. package/dist/components/UDSProvider.cjs +10 -5
  69. package/dist/components/UDSProvider.d.cts +15 -7
  70. package/dist/components/UDSProvider.d.cts.map +1 -1
  71. package/dist/components/UDSProvider.d.ts +15 -7
  72. package/dist/components/UDSProvider.d.ts.map +1 -1
  73. package/dist/components/UDSProvider.js +10 -6
  74. package/dist/components/UDSProvider.js.map +1 -1
  75. package/dist/components/internal/Overlay/OverlayPortal.js.map +1 -1
  76. package/dist/components/internal/Overlay/index.cjs +2 -0
  77. package/dist/components/internal/Overlay/index.d.cts +2 -1
  78. package/dist/components/internal/Overlay/index.d.ts +2 -1
  79. package/dist/components/internal/Overlay/index.js +2 -1
  80. package/dist/components/internal/Overlay/measureTrigger.cjs +35 -0
  81. package/dist/components/internal/Overlay/measureTrigger.d.cts +9 -0
  82. package/dist/components/internal/Overlay/measureTrigger.d.cts.map +1 -0
  83. package/dist/components/internal/Overlay/measureTrigger.d.ts +9 -0
  84. package/dist/components/internal/Overlay/measureTrigger.d.ts.map +1 -0
  85. package/dist/components/internal/Overlay/measureTrigger.js +36 -0
  86. package/dist/components/internal/Overlay/measureTrigger.js.map +1 -0
  87. package/dist/jest/mocks/styles.cjs +68 -10
  88. package/dist/jest/mocks/styles.d.cts +5 -2
  89. package/dist/jest/mocks/styles.d.cts.map +1 -1
  90. package/dist/jest/mocks/styles.d.ts +5 -2
  91. package/dist/jest/mocks/styles.d.ts.map +1 -1
  92. package/dist/jest/mocks/styles.js +66 -11
  93. package/dist/jest/mocks/styles.js.map +1 -1
  94. package/dist/jest/mocks/unistyles.cjs +16 -1
  95. package/dist/jest/mocks/unistyles.d.cts +56 -2
  96. package/dist/jest/mocks/unistyles.d.cts.map +1 -1
  97. package/dist/jest/mocks/unistyles.d.ts +56 -2
  98. package/dist/jest/mocks/unistyles.d.ts.map +1 -1
  99. package/dist/jest/mocks/unistyles.js +16 -1
  100. package/dist/jest/mocks/unistyles.js.map +1 -1
  101. package/dist/portal.cjs +1 -1
  102. package/dist/portal.js +1 -1
  103. package/dist/portal.js.map +1 -1
  104. package/dist/types/dist/index.d.cts +28 -1
  105. package/dist/types/dist/index.d.cts.map +1 -1
  106. package/dist/types/dist/index.d.ts +28 -1
  107. package/dist/types/dist/index.d.ts.map +1 -1
  108. package/generated/styles.cjs +125 -0
  109. package/generated/styles.d.ts +39 -0
  110. package/generated/styles.mjs +125 -0
  111. package/generated/unistyles.d.ts +108 -8
  112. package/package.json +21 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectTrigger.js","names":["RNPressable","RNView","RNText"],"sources":["../../../src/components/Select/SelectTrigger.tsx"],"sourcesContent":["import { memo, useCallback, useMemo } from 'react';\nimport type { View } from 'react-native';\nimport { Pressable as RNPressable, Text as RNText, View as RNView } from 'react-native';\nimport Animated, {\n Easing,\n useAnimatedStyle,\n useDerivedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { inputStyles } from '../../../generated/styles';\nimport type { IconSlotType } from '../IconSlot';\nimport { IconSlot } from '../IconSlot';\nimport { measureTrigger } from '../internal/Overlay';\nimport { useSelectContext, useSelectFieldContext } from './selectContext';\n\ninterface SelectTriggerProps {\n startIcon?: IconSlotType;\n endIcon?: IconSlotType;\n}\n\nconst SelectTrigger = memo(function SelectTrigger({ startIcon, endIcon }: SelectTriggerProps) {\n const {\n value,\n open,\n setOpen,\n triggerRef,\n triggerRect,\n setTriggerRect,\n getItemLabel,\n setHighlightedValue,\n reduceMotion,\n } = useSelectContext();\n const { size, disabled, readOnly, hasError, placeholder, uid, width } = useSelectFieldContext();\n\n const hasValue = value.length > 0;\n const valueState = hasValue ? 'filled' : 'empty';\n const isInteractive = !readOnly && !disabled;\n const useAnimatedChevron = endIcon === undefined;\n const displayText = hasValue ? (getItemLabel(value) ?? value) : (placeholder ?? '');\n\n inputStyles.useVariants({\n size,\n value: valueState,\n pressed: open,\n readonly: readOnly,\n invalid: hasError,\n });\n\n const inputWrapperStyle = useMemo(\n () => [\n inputStyles.inputWrapper,\n inputStyles.inputWrapperStatic,\n inputStyles.inputWrapperDynamic,\n {\n flexDirection: 'row' as const,\n alignItems: 'center' as const,\n width,\n alignSelf: 'stretch' as const,\n },\n ],\n [\n inputStyles.inputWrapper,\n inputStyles.inputWrapperDynamic,\n inputStyles.inputWrapperStatic,\n width,\n ],\n );\n\n const textContainerStyle = useMemo(\n () => [\n {\n flex: 1,\n justifyContent: 'center' as const,\n },\n typeof inputStyles.input.height === 'number' ? { minHeight: inputStyles.input.height } : null,\n ],\n [inputStyles.input],\n );\n\n const textInputStyle = useMemo(\n () => [\n {\n fontFamily: inputStyles.inputWrapperStatic.fontFamily,\n fontSize: inputStyles.inputWrapperStatic.fontSize,\n letterSpacing: inputStyles.inputWrapperStatic.letterSpacing,\n // Match TextInput vertical centering: wrapper lineHeight is for layout, not single-line text.\n lineHeight: inputStyles.inputWrapperStatic.fontSize,\n paddingVertical: 0,\n },\n inputStyles.input,\n { height: undefined },\n !hasValue ? inputStyles.inputPlaceholder : null,\n ],\n [hasValue, inputStyles.input, inputStyles.inputPlaceholder, inputStyles.inputWrapperStatic],\n );\n\n const chevronProgress = useDerivedValue(\n () =>\n withTiming(open ? 1 : 0, {\n duration: reduceMotion ? 0 : 200,\n easing: Easing.out(Easing.ease),\n }),\n [open, reduceMotion],\n );\n\n const chevronAnimatedStyle = useAnimatedStyle(() => ({\n transform: [{ rotate: `${chevronProgress.value * 180}deg` }],\n }));\n\n const handleRef = useCallback(\n (node: View | null) => {\n triggerRef.current = node;\n },\n [triggerRef],\n );\n\n const handlePress = useCallback(() => {\n if (!isInteractive) {\n return;\n }\n\n if (open) {\n setOpen(false);\n setHighlightedValue(null);\n return;\n }\n\n measureTrigger(triggerRef.current, triggerRect, setTriggerRect);\n setHighlightedValue(null);\n setOpen(true);\n }, [isInteractive, open, setHighlightedValue, setOpen, setTriggerRect, triggerRect, triggerRef]);\n\n return (\n <RNPressable\n ref={handleRef}\n testID=\"select-trigger\"\n onPress={handlePress}\n disabled={!isInteractive}\n style={{ width, alignSelf: 'stretch' }}\n accessibilityRole=\"button\"\n accessibilityLabel={displayText || uid}\n accessibilityState={{\n disabled: !isInteractive,\n expanded: open,\n selected: hasValue,\n }}\n >\n <RNView style={inputWrapperStyle} pointerEvents=\"none\">\n {startIcon ? (\n <IconSlot icon={startIcon} variant=\"outline\" style={inputStyles.startIcon} />\n ) : null}\n\n <RNView style={textContainerStyle}>\n <RNText numberOfLines={1} style={textInputStyle}>\n {displayText}\n </RNText>\n </RNView>\n\n {useAnimatedChevron || endIcon ? (\n <Animated.View\n style={useAnimatedChevron ? chevronAnimatedStyle : undefined}\n testID=\"select-chevron\"\n >\n <IconSlot\n icon={useAnimatedChevron ? 'ChevronDown' : endIcon!}\n size=\"sm\"\n variant=\"outline\"\n style={inputStyles.endIcon}\n />\n </Animated.View>\n ) : null}\n </RNView>\n </RNPressable>\n );\n});\n\nSelectTrigger.displayName = 'SelectTrigger';\n\nexport { SelectTrigger, type SelectTriggerProps };\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_components_Select_Select = require("./Select.cjs");
4
+ const require_components_Select_SelectContent = require("./SelectContent.cjs");
5
+ const require_components_Select_SelectItem = require("./SelectItem.cjs");
6
+ exports.Select = require_components_Select_Select.Select;
7
+ exports.SelectContent = require_components_Select_SelectContent.SelectContent;
8
+ exports.SelectItem = require_components_Select_SelectItem.SelectItem;
@@ -0,0 +1,5 @@
1
+
2
+ import { Select, SelectProps } from "./Select.cjs";
3
+ import { SelectContent, SelectContentProps } from "./SelectContent.cjs";
4
+ import { SelectItem, SelectItemProps } from "./SelectItem.cjs";
5
+ export { Select, SelectContent, type SelectContentProps, SelectItem, type SelectItemProps, type SelectProps };
@@ -0,0 +1,5 @@
1
+
2
+ import { Select, SelectProps } from "./Select.js";
3
+ import { SelectContent, SelectContentProps } from "./SelectContent.js";
4
+ import { SelectItem, SelectItemProps } from "./SelectItem.js";
5
+ export { Select, SelectContent, type SelectContentProps, SelectItem, type SelectItemProps, type SelectProps };
@@ -0,0 +1,5 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { Select } from "./Select.js";
3
+ import { SelectContent } from "./SelectContent.js";
4
+ import { SelectItem } from "./SelectItem.js";
5
+ export { Select, SelectContent, SelectItem };
@@ -0,0 +1,22 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ require("../../_virtual/_rolldown/runtime.cjs");
4
+ let react = require("react");
5
+ //#region src/components/Select/selectContext.tsx
6
+ const SelectContext = (0, react.createContext)(null);
7
+ const SelectFieldContext = (0, react.createContext)(null);
8
+ function useSelectContext() {
9
+ const context = (0, react.useContext)(SelectContext);
10
+ if (!context) throw new Error("Select compound components must be used within Select");
11
+ return context;
12
+ }
13
+ function useSelectFieldContext() {
14
+ const context = (0, react.useContext)(SelectFieldContext);
15
+ if (!context) throw new Error("Select field components must be used within Select");
16
+ return context;
17
+ }
18
+ //#endregion
19
+ exports.SelectContext = SelectContext;
20
+ exports.SelectFieldContext = SelectFieldContext;
21
+ exports.useSelectContext = useSelectContext;
22
+ exports.useSelectFieldContext = useSelectFieldContext;
@@ -0,0 +1,12 @@
1
+
2
+ import { SelectContextValue, SelectFieldContextValue } from "./types.cjs";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Select/selectContext.d.ts
6
+ declare const SelectContext: _$react.Context<SelectContextValue | null>;
7
+ declare const SelectFieldContext: _$react.Context<SelectFieldContextValue | null>;
8
+ declare function useSelectContext(): SelectContextValue;
9
+ declare function useSelectFieldContext(): SelectFieldContextValue;
10
+ //#endregion
11
+ export { SelectContext, SelectFieldContext, useSelectContext, useSelectFieldContext };
12
+ //# sourceMappingURL=selectContext.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectContext.d.cts","names":[],"sources":["../../../src/components/Select/selectContext.tsx"],"mappings":";;;;;cAIa,aAAA,EAAa,OAAA,CAAA,OAAA,CAAA,kBAAA;AAAA,cACb,kBAAA,EAAkB,OAAA,CAAA,OAAA,CAAA,uBAAA;AAAA,iBAEf,gBAAA,CAAA,GAAoB,kBAAA;AAAA,iBASpB,qBAAA,CAAA,GAAyB,uBAAA"}
@@ -0,0 +1,12 @@
1
+
2
+ import { SelectContextValue, SelectFieldContextValue } from "./types.js";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Select/selectContext.d.ts
6
+ declare const SelectContext: _$react.Context<SelectContextValue | null>;
7
+ declare const SelectFieldContext: _$react.Context<SelectFieldContextValue | null>;
8
+ declare function useSelectContext(): SelectContextValue;
9
+ declare function useSelectFieldContext(): SelectFieldContextValue;
10
+ //#endregion
11
+ export { SelectContext, SelectFieldContext, useSelectContext, useSelectFieldContext };
12
+ //# sourceMappingURL=selectContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectContext.d.ts","names":[],"sources":["../../../src/components/Select/selectContext.tsx"],"mappings":";;;;;cAIa,aAAA,EAAa,OAAA,CAAA,OAAA,CAAA,kBAAA;AAAA,cACb,kBAAA,EAAkB,OAAA,CAAA,OAAA,CAAA,uBAAA;AAAA,iBAEf,gBAAA,CAAA,GAAoB,kBAAA;AAAA,iBASpB,qBAAA,CAAA,GAAyB,uBAAA"}
@@ -0,0 +1,19 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { createContext, useContext } from "react";
3
+ //#region src/components/Select/selectContext.tsx
4
+ const SelectContext = createContext(null);
5
+ const SelectFieldContext = createContext(null);
6
+ function useSelectContext() {
7
+ const context = useContext(SelectContext);
8
+ if (!context) throw new Error("Select compound components must be used within Select");
9
+ return context;
10
+ }
11
+ function useSelectFieldContext() {
12
+ const context = useContext(SelectFieldContext);
13
+ if (!context) throw new Error("Select field components must be used within Select");
14
+ return context;
15
+ }
16
+ //#endregion
17
+ export { SelectContext, SelectFieldContext, useSelectContext, useSelectFieldContext };
18
+
19
+ //# sourceMappingURL=selectContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectContext.js","names":[],"sources":["../../../src/components/Select/selectContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { SelectContextValue, SelectFieldContextValue } from './types';\n\nexport const SelectContext = createContext<SelectContextValue | null>(null);\nexport const SelectFieldContext = createContext<SelectFieldContextValue | null>(null);\n\nexport function useSelectContext(): SelectContextValue {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error('Select compound components must be used within Select');\n }\n\n return context;\n}\n\nexport function useSelectFieldContext(): SelectFieldContextValue {\n const context = useContext(SelectFieldContext);\n if (!context) {\n throw new Error('Select field components must be used within Select');\n }\n\n return context;\n}\n"],"mappings":";;;AAIA,MAAa,gBAAgB,cAAyC,KAAK;AAC3E,MAAa,qBAAqB,cAA8C,KAAK;AAErF,SAAgB,mBAAuC;CACrD,MAAM,UAAU,WAAW,cAAc;CACzC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,wDAAwD;CAG1E,OAAO;;AAGT,SAAgB,wBAAiD;CAC/D,MAAM,UAAU,WAAW,mBAAmB;CAC9C,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,qDAAqD;CAGvE,OAAO"}
@@ -0,0 +1,39 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ //#region src/components/Select/selectItemTheme.ts
4
+ function getSelectItemLayerPath(layer, active, state) {
5
+ return `selectItem/item/variant/default/active/${active}/${layer}/${state}`;
6
+ }
7
+ function getSelectItemSizeLayerPath(layer) {
8
+ return `selectItem/size/default/${layer}/rest`;
9
+ }
10
+ function mapInteractionToMobileState(state) {
11
+ if (state === "pressed" || state === "focused") return "pressed";
12
+ return "rest";
13
+ }
14
+ function getSelectItemLayerStyle(theme, layer, active, state) {
15
+ const style = theme.components[getSelectItemLayerPath(layer, active, state)];
16
+ return style && typeof style === "object" ? style : {};
17
+ }
18
+ function getSelectItemSizeLayerStyle(theme, layer) {
19
+ const style = theme.components[getSelectItemSizeLayerPath(layer)];
20
+ return style && typeof style === "object" ? style : {};
21
+ }
22
+ function resolveSelectItemInteractionState({ isPressed, isHighlighted }) {
23
+ if (isPressed) return "pressed";
24
+ if (isHighlighted) return "focused";
25
+ return "rest";
26
+ }
27
+ function getMergedSelectItemLayerStyle(theme, layer, interaction, isSelected) {
28
+ if (layer === "endIcon" && !isSelected) return {};
29
+ const active = isSelected ? "on" : "off";
30
+ const mobileState = mapInteractionToMobileState(interaction);
31
+ return {
32
+ ...layer === "root" ? getSelectItemSizeLayerStyle(theme, "root") : {},
33
+ ...layer === "text" ? getSelectItemSizeLayerStyle(theme, "text") : {},
34
+ ...getSelectItemLayerStyle(theme, layer, active, mobileState)
35
+ };
36
+ }
37
+ //#endregion
38
+ exports.getMergedSelectItemLayerStyle = getMergedSelectItemLayerStyle;
39
+ exports.resolveSelectItemInteractionState = resolveSelectItemInteractionState;
@@ -0,0 +1,19 @@
1
+
2
+ import { SelectItemInteractionState, SelectItemLayer } from "./types.cjs";
3
+ import { TextStyle, ViewStyle } from "react-native";
4
+
5
+ //#region src/components/Select/selectItemTheme.d.ts
6
+ type SelectItemTheme = {
7
+ components: Record<string, any>;
8
+ };
9
+ declare function resolveSelectItemInteractionState({
10
+ isPressed,
11
+ isHighlighted
12
+ }: {
13
+ isPressed: boolean;
14
+ isHighlighted: boolean;
15
+ }): SelectItemInteractionState;
16
+ declare function getMergedSelectItemLayerStyle(theme: SelectItemTheme, layer: SelectItemLayer, interaction: SelectItemInteractionState, isSelected: boolean): ViewStyle | TextStyle;
17
+ //#endregion
18
+ export { getMergedSelectItemLayerStyle, resolveSelectItemInteractionState };
19
+ //# sourceMappingURL=selectItemTheme.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectItemTheme.d.cts","names":[],"sources":["../../../src/components/Select/selectItemTheme.ts"],"mappings":";;;;;KAIK,eAAA;EAEH,UAAA,EAAY,MAAA;AAAA;AAAA,iBAyCL,iCAAA,CAAA;EACP,SAAA;EACA;AAAA;EAEA,SAAA;EACA,aAAA;AAAA,IACE,0BAAA;AAAA,iBAYK,6BAAA,CACP,KAAA,EAAO,eAAA,EACP,KAAA,EAAO,eAAA,EACP,WAAA,EAAa,0BAAA,EACb,UAAA,YACC,SAAA,GAAY,SAAA"}
@@ -0,0 +1,19 @@
1
+
2
+ import { SelectItemInteractionState, SelectItemLayer } from "./types.js";
3
+ import { TextStyle, ViewStyle } from "react-native";
4
+
5
+ //#region src/components/Select/selectItemTheme.d.ts
6
+ type SelectItemTheme = {
7
+ components: Record<string, any>;
8
+ };
9
+ declare function resolveSelectItemInteractionState({
10
+ isPressed,
11
+ isHighlighted
12
+ }: {
13
+ isPressed: boolean;
14
+ isHighlighted: boolean;
15
+ }): SelectItemInteractionState;
16
+ declare function getMergedSelectItemLayerStyle(theme: SelectItemTheme, layer: SelectItemLayer, interaction: SelectItemInteractionState, isSelected: boolean): ViewStyle | TextStyle;
17
+ //#endregion
18
+ export { getMergedSelectItemLayerStyle, resolveSelectItemInteractionState };
19
+ //# sourceMappingURL=selectItemTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectItemTheme.d.ts","names":[],"sources":["../../../src/components/Select/selectItemTheme.ts"],"mappings":";;;;;KAIK,eAAA;EAEH,UAAA,EAAY,MAAA;AAAA;AAAA,iBAyCL,iCAAA,CAAA;EACP,SAAA;EACA;AAAA;EAEA,SAAA;EACA,aAAA;AAAA,IACE,0BAAA;AAAA,iBAYK,6BAAA,CACP,KAAA,EAAO,eAAA,EACP,KAAA,EAAO,eAAA,EACP,WAAA,EAAa,0BAAA,EACb,UAAA,YACC,SAAA,GAAY,SAAA"}
@@ -0,0 +1,39 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ //#region src/components/Select/selectItemTheme.ts
3
+ function getSelectItemLayerPath(layer, active, state) {
4
+ return `selectItem/item/variant/default/active/${active}/${layer}/${state}`;
5
+ }
6
+ function getSelectItemSizeLayerPath(layer) {
7
+ return `selectItem/size/default/${layer}/rest`;
8
+ }
9
+ function mapInteractionToMobileState(state) {
10
+ if (state === "pressed" || state === "focused") return "pressed";
11
+ return "rest";
12
+ }
13
+ function getSelectItemLayerStyle(theme, layer, active, state) {
14
+ const style = theme.components[getSelectItemLayerPath(layer, active, state)];
15
+ return style && typeof style === "object" ? style : {};
16
+ }
17
+ function getSelectItemSizeLayerStyle(theme, layer) {
18
+ const style = theme.components[getSelectItemSizeLayerPath(layer)];
19
+ return style && typeof style === "object" ? style : {};
20
+ }
21
+ function resolveSelectItemInteractionState({ isPressed, isHighlighted }) {
22
+ if (isPressed) return "pressed";
23
+ if (isHighlighted) return "focused";
24
+ return "rest";
25
+ }
26
+ function getMergedSelectItemLayerStyle(theme, layer, interaction, isSelected) {
27
+ if (layer === "endIcon" && !isSelected) return {};
28
+ const active = isSelected ? "on" : "off";
29
+ const mobileState = mapInteractionToMobileState(interaction);
30
+ return {
31
+ ...layer === "root" ? getSelectItemSizeLayerStyle(theme, "root") : {},
32
+ ...layer === "text" ? getSelectItemSizeLayerStyle(theme, "text") : {},
33
+ ...getSelectItemLayerStyle(theme, layer, active, mobileState)
34
+ };
35
+ }
36
+ //#endregion
37
+ export { getMergedSelectItemLayerStyle, resolveSelectItemInteractionState };
38
+
39
+ //# sourceMappingURL=selectItemTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectItemTheme.js","names":[],"sources":["../../../src/components/Select/selectItemTheme.ts"],"sourcesContent":["import type { TextStyle, ViewStyle } from 'react-native';\n\nimport type { SelectItemInteractionState, SelectItemLayer } from './types';\n\ntype SelectItemTheme = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n components: Record<string, any>;\n};\n\nfunction getSelectItemLayerPath(\n layer: SelectItemLayer,\n active: 'on' | 'off',\n state: 'rest' | 'pressed',\n): string {\n return `selectItem/item/variant/default/active/${active}/${layer}/${state}`;\n}\n\nfunction getSelectItemSizeLayerPath(layer: 'root' | 'text'): string {\n return `selectItem/size/default/${layer}/rest`;\n}\n\nfunction mapInteractionToMobileState(state: SelectItemInteractionState): 'rest' | 'pressed' {\n if (state === 'pressed' || state === 'focused') {\n return 'pressed';\n }\n\n return 'rest';\n}\n\nfunction getSelectItemLayerStyle(\n theme: SelectItemTheme,\n layer: SelectItemLayer,\n active: 'on' | 'off',\n state: 'rest' | 'pressed',\n): ViewStyle | TextStyle {\n const style = theme.components[getSelectItemLayerPath(layer, active, state)];\n return style && typeof style === 'object' ? style : {};\n}\n\nfunction getSelectItemSizeLayerStyle(\n theme: SelectItemTheme,\n layer: 'root' | 'text',\n): ViewStyle | TextStyle {\n const style = theme.components[getSelectItemSizeLayerPath(layer)];\n return style && typeof style === 'object' ? style : {};\n}\n\nfunction resolveSelectItemInteractionState({\n isPressed,\n isHighlighted,\n}: {\n isPressed: boolean;\n isHighlighted: boolean;\n}): SelectItemInteractionState {\n if (isPressed) {\n return 'pressed';\n }\n\n if (isHighlighted) {\n return 'focused';\n }\n\n return 'rest';\n}\n\nfunction getMergedSelectItemLayerStyle(\n theme: SelectItemTheme,\n layer: SelectItemLayer,\n interaction: SelectItemInteractionState,\n isSelected: boolean,\n): ViewStyle | TextStyle {\n if (layer === 'endIcon' && !isSelected) {\n return {};\n }\n\n const active = isSelected ? 'on' : 'off';\n const mobileState = mapInteractionToMobileState(interaction);\n\n return {\n ...(layer === 'root' ? (getSelectItemSizeLayerStyle(theme, 'root') as object) : {}),\n ...(layer === 'text' ? (getSelectItemSizeLayerStyle(theme, 'text') as object) : {}),\n ...(getSelectItemLayerStyle(theme, layer, active, mobileState) as object),\n } as ViewStyle | TextStyle;\n}\n\nexport { getMergedSelectItemLayerStyle, resolveSelectItemInteractionState };\n"],"mappings":";;AASA,SAAS,uBACP,OACA,QACA,OACQ;CACR,OAAO,0CAA0C,OAAO,GAAG,MAAM,GAAG;;AAGtE,SAAS,2BAA2B,OAAgC;CAClE,OAAO,2BAA2B,MAAM;;AAG1C,SAAS,4BAA4B,OAAuD;CAC1F,IAAI,UAAU,aAAa,UAAU,WACnC,OAAO;CAGT,OAAO;;AAGT,SAAS,wBACP,OACA,OACA,QACA,OACuB;CACvB,MAAM,QAAQ,MAAM,WAAW,uBAAuB,OAAO,QAAQ,MAAM;CAC3E,OAAO,SAAS,OAAO,UAAU,WAAW,QAAQ,EAAE;;AAGxD,SAAS,4BACP,OACA,OACuB;CACvB,MAAM,QAAQ,MAAM,WAAW,2BAA2B,MAAM;CAChE,OAAO,SAAS,OAAO,UAAU,WAAW,QAAQ,EAAE;;AAGxD,SAAS,kCAAkC,EACzC,WACA,iBAI6B;CAC7B,IAAI,WACF,OAAO;CAGT,IAAI,eACF,OAAO;CAGT,OAAO;;AAGT,SAAS,8BACP,OACA,OACA,aACA,YACuB;CACvB,IAAI,UAAU,aAAa,CAAC,YAC1B,OAAO,EAAE;CAGX,MAAM,SAAS,aAAa,OAAO;CACnC,MAAM,cAAc,4BAA4B,YAAY;CAE5D,OAAO;EACL,GAAI,UAAU,SAAU,4BAA4B,OAAO,OAAO,GAAc,EAAE;EAClF,GAAI,UAAU,SAAU,4BAA4B,OAAO,OAAO,GAAc,EAAE;EAClF,GAAI,wBAAwB,OAAO,OAAO,QAAQ,YAAY;EAC/D"}
@@ -0,0 +1 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
@@ -0,0 +1,43 @@
1
+
2
+ import { InputSize } from "../../types/dist/index.cjs";
3
+ import { AnchoredRect } from "../internal/Overlay/types.cjs";
4
+ import { RefObject } from "react";
5
+ import { View } from "react-native";
6
+
7
+ //#region src/components/Select/types.d.ts
8
+ type SelectContentSize = 'default';
9
+ type SelectContentVariant = 'default';
10
+ type SelectItemSize = 'default';
11
+ type SelectItemVariant = 'default';
12
+ interface SelectFieldContextValue {
13
+ size: InputSize;
14
+ disabled?: boolean;
15
+ readOnly?: boolean;
16
+ required?: boolean;
17
+ hasError?: boolean;
18
+ width: number | `${number}%` | '100%';
19
+ reduceMotion?: boolean;
20
+ placeholder?: string;
21
+ uid: string;
22
+ }
23
+ interface SelectContextValue {
24
+ value: string;
25
+ setValue: (value: string) => void;
26
+ open: boolean;
27
+ setOpen: (open: boolean) => void;
28
+ triggerRef: RefObject<View | null>;
29
+ triggerRect: AnchoredRect | null;
30
+ setTriggerRect: (rect: AnchoredRect | null) => void;
31
+ registerItem: (value: string, label: string) => void;
32
+ unregisterItem: (value: string) => void;
33
+ getItemLabel: (value: string) => string | undefined;
34
+ highlightedValue: string | null;
35
+ setHighlightedValue: (value: string | null) => void;
36
+ field: SelectFieldContextValue;
37
+ reduceMotion: boolean;
38
+ }
39
+ type SelectItemInteractionState = 'rest' | 'pressed' | 'focused';
40
+ type SelectItemLayer = 'root' | 'text' | 'endIcon';
41
+ //#endregion
42
+ export { SelectContentSize, SelectContentVariant, SelectContextValue, SelectFieldContextValue, SelectItemInteractionState, SelectItemLayer, SelectItemSize, SelectItemVariant };
43
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/components/Select/types.ts"],"mappings":";;;;;;;KAMY,iBAAA;AAAA,KACA,oBAAA;AAAA,KACA,cAAA;AAAA,KACA,iBAAA;AAAA,UAEK,uBAAA;EACf,IAAA,EAAM,SAAA;EACN,QAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,KAAA;EACA,YAAA;EACA,WAAA;EACA,GAAA;AAAA;AAAA,UAGe,kBAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,IAAA;EACA,OAAA,GAAU,IAAA;EACV,UAAA,EAAY,SAAA,CAAU,IAAA;EACtB,WAAA,EAAa,YAAA;EACb,cAAA,GAAiB,IAAA,EAAM,YAAA;EACvB,YAAA,GAAe,KAAA,UAAe,KAAA;EAC9B,cAAA,GAAiB,KAAA;EACjB,YAAA,GAAe,KAAA;EACf,gBAAA;EACA,mBAAA,GAAsB,KAAA;EACtB,KAAA,EAAO,uBAAA;EACP,YAAA;AAAA;AAAA,KAGU,0BAAA;AAAA,KAEA,eAAA"}
@@ -0,0 +1,43 @@
1
+
2
+ import { InputSize } from "../../types/dist/index.js";
3
+ import { AnchoredRect } from "../internal/Overlay/types.js";
4
+ import { RefObject } from "react";
5
+ import { View } from "react-native";
6
+
7
+ //#region src/components/Select/types.d.ts
8
+ type SelectContentSize = 'default';
9
+ type SelectContentVariant = 'default';
10
+ type SelectItemSize = 'default';
11
+ type SelectItemVariant = 'default';
12
+ interface SelectFieldContextValue {
13
+ size: InputSize;
14
+ disabled?: boolean;
15
+ readOnly?: boolean;
16
+ required?: boolean;
17
+ hasError?: boolean;
18
+ width: number | `${number}%` | '100%';
19
+ reduceMotion?: boolean;
20
+ placeholder?: string;
21
+ uid: string;
22
+ }
23
+ interface SelectContextValue {
24
+ value: string;
25
+ setValue: (value: string) => void;
26
+ open: boolean;
27
+ setOpen: (open: boolean) => void;
28
+ triggerRef: RefObject<View | null>;
29
+ triggerRect: AnchoredRect | null;
30
+ setTriggerRect: (rect: AnchoredRect | null) => void;
31
+ registerItem: (value: string, label: string) => void;
32
+ unregisterItem: (value: string) => void;
33
+ getItemLabel: (value: string) => string | undefined;
34
+ highlightedValue: string | null;
35
+ setHighlightedValue: (value: string | null) => void;
36
+ field: SelectFieldContextValue;
37
+ reduceMotion: boolean;
38
+ }
39
+ type SelectItemInteractionState = 'rest' | 'pressed' | 'focused';
40
+ type SelectItemLayer = 'root' | 'text' | 'endIcon';
41
+ //#endregion
42
+ export { SelectContentSize, SelectContentVariant, SelectContextValue, SelectFieldContextValue, SelectItemInteractionState, SelectItemLayer, SelectItemSize, SelectItemVariant };
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/components/Select/types.ts"],"mappings":";;;;;;;KAMY,iBAAA;AAAA,KACA,oBAAA;AAAA,KACA,cAAA;AAAA,KACA,iBAAA;AAAA,UAEK,uBAAA;EACf,IAAA,EAAM,SAAA;EACN,QAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,KAAA;EACA,YAAA;EACA,WAAA;EACA,GAAA;AAAA;AAAA,UAGe,kBAAA;EACf,KAAA;EACA,QAAA,GAAW,KAAA;EACX,IAAA;EACA,OAAA,GAAU,IAAA;EACV,UAAA,EAAY,SAAA,CAAU,IAAA;EACtB,WAAA,EAAa,YAAA;EACb,cAAA,GAAiB,IAAA,EAAM,YAAA;EACvB,YAAA,GAAe,KAAA,UAAe,KAAA;EAC9B,cAAA,GAAiB,KAAA;EACjB,YAAA,GAAe,KAAA;EACf,gBAAA;EACA,mBAAA,GAAsB,KAAA;EACtB,KAAA,EAAO,uBAAA;EACP,YAAA;AAAA;AAAA,KAGU,0BAAA;AAAA,KAEA,eAAA"}
@@ -0,0 +1 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
@@ -55,6 +55,8 @@ const Switch = (0, react.memo)(function Switch({ isOn: isOnProp, defaultIsOn = f
55
55
  const [internalIsOn, setInternalIsOn] = (0, react.useState)(defaultIsOn);
56
56
  const [prefersReducedMotion, setPrefersReducedMotion] = (0, react.useState)(false);
57
57
  const isOn = isControlled ? isOnProp : internalIsOn;
58
+ const activeVariant = isOn ? "on" : "off";
59
+ const { theme } = (0, react_native_unistyles.useUnistyles)();
58
60
  (0, react.useEffect)(() => {
59
61
  const checkReducedMotion = async () => {
60
62
  setPrefersReducedMotion(await react_native.AccessibilityInfo.isReduceMotionEnabled());
@@ -77,11 +79,21 @@ const Switch = (0, react.memo)(function Switch({ isOn: isOnProp, defaultIsOn = f
77
79
  isControlled,
78
80
  onChange
79
81
  ]);
80
- generated_styles.switchStyles.useVariants({
82
+ const resolvedSwitchStyles = generated_styles.switchStyles.useVariants({
81
83
  size,
82
- variant: isOn ? "on" : "off"
83
- });
84
- const trackBackgroundColor = (0, react_native_unistyles_reanimated.useAnimatedVariantColor)(generated_styles.switchStyles.switch, "backgroundColor");
84
+ variant: activeVariant
85
+ }) ?? generated_styles.switchStyles;
86
+ const variantLayerStyles = (0, react.useMemo)(() => {
87
+ const components = theme.components;
88
+ const getLayerStyle = (layer) => components[`switch/variant/default/active/${activeVariant}/${layer}/rest`];
89
+ return {
90
+ handle: getLayerStyle("handle"),
91
+ handleIcon: getLayerStyle("handleIcon"),
92
+ switch: getLayerStyle("switch"),
93
+ text: getLayerStyle("rootText")
94
+ };
95
+ }, [activeVariant, theme]);
96
+ const trackBackgroundColor = (0, react_native_unistyles_reanimated.useAnimatedVariantColor)(resolvedSwitchStyles.switch, "backgroundColor");
85
97
  const animatedTrackStyle = (0, react_native_reanimated.useAnimatedStyle)(() => {
86
98
  "worklet";
87
99
  return { backgroundColor: (0, react_native_reanimated.withTiming)(trackBackgroundColor.value, { duration: animationDuration }) };
@@ -90,17 +102,27 @@ const Switch = (0, react.memo)(function Switch({ isOn: isOnProp, defaultIsOn = f
90
102
  "worklet";
91
103
  return { transform: [{ translateX: progress.value * travelDistance }] };
92
104
  });
93
- const rootStyle = (0, react.useMemo)(() => [generated_styles.switchStyles.root, switchStaticStyles.root({ disabled })], [generated_styles.switchStyles.root, disabled]);
105
+ const rootStyle = (0, react.useMemo)(() => [resolvedSwitchStyles.root, switchStaticStyles.root({ disabled })], [resolvedSwitchStyles.root, disabled]);
94
106
  const trackStyle = (0, react.useMemo)(() => [
95
- generated_styles.switchStyles.switch,
107
+ resolvedSwitchStyles.switch,
96
108
  switchStaticStyles.track,
109
+ variantLayerStyles.switch,
110
+ react_native.Platform.OS !== "web" && animatedTrackStyle
111
+ ], [
112
+ resolvedSwitchStyles.switch,
113
+ variantLayerStyles.switch,
97
114
  animatedTrackStyle
98
- ], [generated_styles.switchStyles.switch, animatedTrackStyle]);
115
+ ]);
99
116
  const handleStyle = (0, react.useMemo)(() => [
100
- generated_styles.switchStyles.handle,
117
+ resolvedSwitchStyles.handle,
101
118
  switchStaticStyles.handle,
119
+ variantLayerStyles.handle,
102
120
  animatedHandleStyle
103
- ], [generated_styles.switchStyles.handle, animatedHandleStyle]);
121
+ ], [
122
+ resolvedSwitchStyles.handle,
123
+ variantLayerStyles.handle,
124
+ animatedHandleStyle
125
+ ]);
104
126
  const accessibilityLabel = typeof label === "string" ? label : void 0;
105
127
  const resolvedAccessibilityHint = accessibilityHint ?? "Double tap to toggle";
106
128
  const labelContent = label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_FormLabel.FormLabel, {
@@ -109,7 +131,7 @@ const Switch = (0, react.memo)(function Switch({ isOn: isOnProp, defaultIsOn = f
109
131
  label,
110
132
  required,
111
133
  showRequiredAsterisk: required,
112
- style: generated_styles.switchStyles.text
134
+ style: [resolvedSwitchStyles.text, variantLayerStyles.text]
113
135
  });
114
136
  const a11yValue = (0, react.useMemo)(() => ({ text: isOn ? "On" : "Off" }), [isOn]);
115
137
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.Pressable, {
@@ -139,14 +161,14 @@ const Switch = (0, react.memo)(function Switch({ isOn: isOnProp, defaultIsOn = f
139
161
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
140
162
  icon: onIcon,
141
163
  variant: "fill",
142
- style: generated_styles.switchStyles.handleIcon
164
+ style: [resolvedSwitchStyles.handleIcon, variantLayerStyles.handleIcon]
143
165
  })
144
166
  }), offIcon && !isOn && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native_reanimated.default.View, {
145
167
  style: switchStaticStyles.iconContainer,
146
168
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
147
169
  icon: offIcon,
148
170
  variant: "fill",
149
- style: generated_styles.switchStyles.handleIcon
171
+ style: [resolvedSwitchStyles.handleIcon, variantLayerStyles.handleIcon]
150
172
  })
151
173
  })]
152
174
  })
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.cts","names":[],"sources":["../../src/components/Switch.tsx"],"mappings":";;;;;;;;UAcU,WAAA,SAAoB,IAAA,CAAK,SAAA,YAAqB,oBAAA,CAAqB,YAAA;;EAE3E,GAAA,GAAM,GAAA,CAAI,IAAA;EAFF;EAIR,QAAA,IAAY,KAAA;;EAEZ,QAAA;EAN2E;EAQ3E,QAAA;EANM;EAQN,iBAAA,GAAoB,kBAAA;AAAA;;;;;;;;;;;;;;;;;;;AAAkB;;;;;;;;;;;;;;;cA2ClC,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
1
+ {"version":3,"file":"Switch.d.cts","names":[],"sources":["../../src/components/Switch.tsx"],"mappings":";;;;;;;;UAsBU,WAAA,SAAoB,IAAA,CAAK,SAAA,YAAqB,oBAAA,CAAqB,YAAA;;EAE3E,GAAA,GAAM,GAAA,CAAI,IAAA;EAFF;EAIR,QAAA,IAAY,KAAA;;EAEZ,QAAA;EAN2E;EAQ3E,QAAA;EANM;EAQN,iBAAA,GAAoB,kBAAA;AAAA;;;;;;;;;;;;;;;;;;;AAAkB;;;;;;;;;;;;;;;cA2ClC,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.d.ts","names":[],"sources":["../../src/components/Switch.tsx"],"mappings":";;;;;;;;UAcU,WAAA,SAAoB,IAAA,CAAK,SAAA,YAAqB,oBAAA,CAAqB,YAAA;;EAE3E,GAAA,GAAM,GAAA,CAAI,IAAA;EAFF;EAIR,QAAA,IAAY,KAAA;;EAEZ,QAAA;EAN2E;EAQ3E,QAAA;EANM;EAQN,iBAAA,GAAoB,kBAAA;AAAA;;;;;;;;;;;;;;;;;;;AAAkB;;;;;;;;;;;;;;;cA2ClC,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
1
+ {"version":3,"file":"Switch.d.ts","names":[],"sources":["../../src/components/Switch.tsx"],"mappings":";;;;;;;;UAsBU,WAAA,SAAoB,IAAA,CAAK,SAAA,YAAqB,oBAAA,CAAqB,YAAA;;EAE3E,GAAA,GAAM,GAAA,CAAI,IAAA;EAFF;EAIR,QAAA,IAAY,KAAA;;EAEZ,QAAA;EAN2E;EAQ3E,QAAA;EANM;EAQN,iBAAA,GAAoB,kBAAA;AAAA;;;;;;;;;;;;;;;;;;;AAAkB;;;;;;;;;;;;;;;cA2ClC,MAAA,EAAM,OAAA,CAAA,oBAAA,CAAA,WAAA"}
@@ -2,10 +2,10 @@
2
2
  import { IconSlot } from "./IconSlot.js";
3
3
  import { FormLabel } from "./FormLabel.js";
4
4
  import { memo, useCallback, useEffect, useMemo, useState } from "react";
5
- import { AccessibilityInfo, Pressable } from "react-native";
5
+ import { AccessibilityInfo, Platform, Pressable } from "react-native";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { switchStyles } from "../../generated/styles";
8
- import { StyleSheet as StyleSheet$1 } from "react-native-unistyles";
8
+ import { StyleSheet as StyleSheet$1, useUnistyles } from "react-native-unistyles";
9
9
  import Animated, { useAnimatedStyle, useDerivedValue, withTiming } from "react-native-reanimated";
10
10
  import { useAnimatedVariantColor } from "react-native-unistyles/reanimated";
11
11
  //#region src/components/Switch.tsx
@@ -52,6 +52,8 @@ const Switch = memo(function Switch({ isOn: isOnProp, defaultIsOn = false, onCha
52
52
  const [internalIsOn, setInternalIsOn] = useState(defaultIsOn);
53
53
  const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);
54
54
  const isOn = isControlled ? isOnProp : internalIsOn;
55
+ const activeVariant = isOn ? "on" : "off";
56
+ const { theme } = useUnistyles();
55
57
  useEffect(() => {
56
58
  const checkReducedMotion = async () => {
57
59
  setPrefersReducedMotion(await AccessibilityInfo.isReduceMotionEnabled());
@@ -74,11 +76,21 @@ const Switch = memo(function Switch({ isOn: isOnProp, defaultIsOn = false, onCha
74
76
  isControlled,
75
77
  onChange
76
78
  ]);
77
- switchStyles.useVariants({
79
+ const resolvedSwitchStyles = switchStyles.useVariants({
78
80
  size,
79
- variant: isOn ? "on" : "off"
80
- });
81
- const trackBackgroundColor = useAnimatedVariantColor(switchStyles.switch, "backgroundColor");
81
+ variant: activeVariant
82
+ }) ?? switchStyles;
83
+ const variantLayerStyles = useMemo(() => {
84
+ const components = theme.components;
85
+ const getLayerStyle = (layer) => components[`switch/variant/default/active/${activeVariant}/${layer}/rest`];
86
+ return {
87
+ handle: getLayerStyle("handle"),
88
+ handleIcon: getLayerStyle("handleIcon"),
89
+ switch: getLayerStyle("switch"),
90
+ text: getLayerStyle("rootText")
91
+ };
92
+ }, [activeVariant, theme]);
93
+ const trackBackgroundColor = useAnimatedVariantColor(resolvedSwitchStyles.switch, "backgroundColor");
82
94
  const animatedTrackStyle = useAnimatedStyle(() => {
83
95
  "worklet";
84
96
  return { backgroundColor: withTiming(trackBackgroundColor.value, { duration: animationDuration }) };
@@ -87,17 +99,27 @@ const Switch = memo(function Switch({ isOn: isOnProp, defaultIsOn = false, onCha
87
99
  "worklet";
88
100
  return { transform: [{ translateX: progress.value * travelDistance }] };
89
101
  });
90
- const rootStyle = useMemo(() => [switchStyles.root, switchStaticStyles.root({ disabled })], [switchStyles.root, disabled]);
102
+ const rootStyle = useMemo(() => [resolvedSwitchStyles.root, switchStaticStyles.root({ disabled })], [resolvedSwitchStyles.root, disabled]);
91
103
  const trackStyle = useMemo(() => [
92
- switchStyles.switch,
104
+ resolvedSwitchStyles.switch,
93
105
  switchStaticStyles.track,
106
+ variantLayerStyles.switch,
107
+ Platform.OS !== "web" && animatedTrackStyle
108
+ ], [
109
+ resolvedSwitchStyles.switch,
110
+ variantLayerStyles.switch,
94
111
  animatedTrackStyle
95
- ], [switchStyles.switch, animatedTrackStyle]);
112
+ ]);
96
113
  const handleStyle = useMemo(() => [
97
- switchStyles.handle,
114
+ resolvedSwitchStyles.handle,
98
115
  switchStaticStyles.handle,
116
+ variantLayerStyles.handle,
99
117
  animatedHandleStyle
100
- ], [switchStyles.handle, animatedHandleStyle]);
118
+ ], [
119
+ resolvedSwitchStyles.handle,
120
+ variantLayerStyles.handle,
121
+ animatedHandleStyle
122
+ ]);
101
123
  const accessibilityLabel = typeof label === "string" ? label : void 0;
102
124
  const resolvedAccessibilityHint = accessibilityHint ?? "Double tap to toggle";
103
125
  const labelContent = label && /* @__PURE__ */ jsx(FormLabel, {
@@ -106,7 +128,7 @@ const Switch = memo(function Switch({ isOn: isOnProp, defaultIsOn = false, onCha
106
128
  label,
107
129
  required,
108
130
  showRequiredAsterisk: required,
109
- style: switchStyles.text
131
+ style: [resolvedSwitchStyles.text, variantLayerStyles.text]
110
132
  });
111
133
  const a11yValue = useMemo(() => ({ text: isOn ? "On" : "Off" }), [isOn]);
112
134
  return /* @__PURE__ */ jsxs(Pressable, {
@@ -136,14 +158,14 @@ const Switch = memo(function Switch({ isOn: isOnProp, defaultIsOn = false, onCha
136
158
  children: /* @__PURE__ */ jsx(IconSlot, {
137
159
  icon: onIcon,
138
160
  variant: "fill",
139
- style: switchStyles.handleIcon
161
+ style: [resolvedSwitchStyles.handleIcon, variantLayerStyles.handleIcon]
140
162
  })
141
163
  }), offIcon && !isOn && /* @__PURE__ */ jsx(Animated.View, {
142
164
  style: switchStaticStyles.iconContainer,
143
165
  children: /* @__PURE__ */ jsx(IconSlot, {
144
166
  icon: offIcon,
145
167
  variant: "fill",
146
- style: switchStyles.handleIcon
168
+ style: [resolvedSwitchStyles.handleIcon, variantLayerStyles.handleIcon]
147
169
  })
148
170
  })]
149
171
  })