@tamagui/select 2.7.7 → 3.0.0-beta.1093.1

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 (248) hide show
  1. package/dist/cjs/Select.cjs +406 -467
  2. package/dist/cjs/Select.native.cjs +495 -0
  3. package/dist/cjs/Select.native.js +445 -492
  4. package/dist/cjs/Select.native.js.map +1 -1
  5. package/dist/cjs/SelectContent.cjs +79 -79
  6. package/dist/cjs/SelectContent.native.cjs +29 -0
  7. package/dist/cjs/SelectContent.native.js +17 -22
  8. package/dist/cjs/SelectContent.native.js.map +1 -1
  9. package/dist/cjs/SelectImpl.cjs +305 -320
  10. package/dist/cjs/SelectImpl.native.cjs +29 -0
  11. package/dist/cjs/SelectImpl.native.js +16 -24
  12. package/dist/cjs/SelectImpl.native.js.map +1 -1
  13. package/dist/cjs/SelectItem.cjs +256 -205
  14. package/dist/cjs/SelectItem.native.cjs +288 -0
  15. package/dist/cjs/SelectItem.native.js +264 -213
  16. package/dist/cjs/SelectItem.native.js.map +1 -1
  17. package/dist/cjs/SelectItemText.cjs +48 -79
  18. package/dist/cjs/SelectItemText.native.cjs +73 -0
  19. package/dist/cjs/SelectItemText.native.js +49 -79
  20. package/dist/cjs/SelectItemText.native.js.map +1 -1
  21. package/dist/cjs/SelectScrollButton.cjs +110 -130
  22. package/dist/cjs/SelectScrollButton.native.cjs +37 -0
  23. package/dist/cjs/SelectScrollButton.native.js +24 -22
  24. package/dist/cjs/SelectScrollButton.native.js.map +1 -1
  25. package/dist/cjs/SelectTrigger.cjs +68 -84
  26. package/dist/cjs/SelectTrigger.native.cjs +90 -0
  27. package/dist/cjs/SelectTrigger.native.js +70 -66
  28. package/dist/cjs/SelectTrigger.native.js.map +1 -1
  29. package/dist/cjs/SelectViewport.cjs +121 -142
  30. package/dist/cjs/SelectViewport.native.cjs +72 -0
  31. package/dist/cjs/SelectViewport.native.js +53 -50
  32. package/dist/cjs/SelectViewport.native.js.map +1 -1
  33. package/dist/cjs/constants.cjs +20 -22
  34. package/dist/cjs/constants.native.cjs +40 -0
  35. package/dist/cjs/constants.native.js +20 -21
  36. package/dist/cjs/constants.native.js.map +1 -1
  37. package/dist/cjs/context.cjs +37 -48
  38. package/dist/cjs/context.native.cjs +57 -0
  39. package/dist/cjs/context.native.js +39 -49
  40. package/dist/cjs/context.native.js.map +1 -1
  41. package/dist/cjs/index.cjs +14 -11
  42. package/dist/cjs/index.native.cjs +26 -0
  43. package/dist/cjs/index.native.js +14 -10
  44. package/dist/cjs/index.native.js.map +1 -1
  45. package/dist/cjs/selectionController.cjs +343 -0
  46. package/dist/cjs/selectionController.native.cjs +407 -0
  47. package/dist/cjs/selectionController.native.js +409 -0
  48. package/dist/cjs/selectionController.native.js.map +1 -0
  49. package/dist/cjs/types.cjs +9 -11
  50. package/dist/cjs/types.native.cjs +18 -0
  51. package/dist/cjs/types.native.js +9 -10
  52. package/dist/cjs/types.native.js.map +1 -1
  53. package/dist/esm/Select.mjs +381 -443
  54. package/dist/esm/Select.mjs.map +1 -1
  55. package/dist/esm/Select.native.js +420 -469
  56. package/dist/esm/Select.native.js.map +1 -1
  57. package/dist/esm/SelectContent.mjs +67 -61
  58. package/dist/esm/SelectContent.mjs.map +1 -1
  59. package/dist/esm/SelectContent.native.js +4 -5
  60. package/dist/esm/SelectContent.native.js.map +1 -1
  61. package/dist/esm/SelectImpl.mjs +291 -295
  62. package/dist/esm/SelectImpl.mjs.map +1 -1
  63. package/dist/esm/SelectImpl.native.js +5 -8
  64. package/dist/esm/SelectImpl.native.js.map +1 -1
  65. package/dist/esm/SelectItem.mjs +240 -181
  66. package/dist/esm/SelectItem.mjs.map +1 -1
  67. package/dist/esm/SelectItem.native.js +249 -191
  68. package/dist/esm/SelectItem.native.js.map +1 -1
  69. package/dist/esm/SelectItemText.mjs +33 -55
  70. package/dist/esm/SelectItemText.mjs.map +1 -1
  71. package/dist/esm/SelectItemText.native.js +34 -56
  72. package/dist/esm/SelectItemText.native.js.map +1 -1
  73. package/dist/esm/SelectScrollButton.mjs +95 -107
  74. package/dist/esm/SelectScrollButton.mjs.map +1 -1
  75. package/dist/esm/SelectScrollButton.native.js +11 -7
  76. package/dist/esm/SelectScrollButton.native.js.map +1 -1
  77. package/dist/esm/SelectTrigger.mjs +56 -58
  78. package/dist/esm/SelectTrigger.mjs.map +1 -1
  79. package/dist/esm/SelectTrigger.native.js +54 -44
  80. package/dist/esm/SelectTrigger.native.js.map +1 -1
  81. package/dist/esm/SelectViewport.mjs +107 -119
  82. package/dist/esm/SelectViewport.mjs.map +1 -1
  83. package/dist/esm/SelectViewport.native.js +44 -39
  84. package/dist/esm/SelectViewport.native.js.map +1 -1
  85. package/dist/esm/constants.mjs +1 -0
  86. package/dist/esm/constants.mjs.map +1 -1
  87. package/dist/esm/constants.native.js +1 -0
  88. package/dist/esm/constants.native.js.map +1 -1
  89. package/dist/esm/context.mjs +20 -28
  90. package/dist/esm/context.mjs.map +1 -1
  91. package/dist/esm/context.native.js +23 -31
  92. package/dist/esm/context.native.js.map +1 -1
  93. package/dist/esm/index.js +13 -3
  94. package/dist/esm/index.mjs +13 -3
  95. package/dist/esm/index.native.js +13 -3
  96. package/dist/esm/selectionController.mjs +315 -0
  97. package/dist/esm/selectionController.mjs.map +1 -0
  98. package/dist/esm/selectionController.native.js +377 -0
  99. package/dist/esm/selectionController.native.js.map +1 -0
  100. package/dist/esm/types.mjs +0 -2
  101. package/dist/esm/types.native.js +0 -2
  102. package/dist/jsx/Select.mjs +381 -443
  103. package/dist/jsx/Select.mjs.map +1 -1
  104. package/dist/jsx/Select.native.cjs +495 -0
  105. package/dist/jsx/Select.native.js +445 -492
  106. package/dist/jsx/Select.native.js.map +1 -1
  107. package/dist/jsx/SelectContent.mjs +67 -61
  108. package/dist/jsx/SelectContent.mjs.map +1 -1
  109. package/dist/jsx/SelectContent.native.cjs +29 -0
  110. package/dist/jsx/SelectContent.native.js +17 -22
  111. package/dist/jsx/SelectContent.native.js.map +1 -1
  112. package/dist/jsx/SelectImpl.mjs +291 -295
  113. package/dist/jsx/SelectImpl.mjs.map +1 -1
  114. package/dist/jsx/SelectImpl.native.cjs +29 -0
  115. package/dist/jsx/SelectImpl.native.js +16 -24
  116. package/dist/jsx/SelectImpl.native.js.map +1 -1
  117. package/dist/jsx/SelectItem.mjs +240 -181
  118. package/dist/jsx/SelectItem.mjs.map +1 -1
  119. package/dist/jsx/SelectItem.native.cjs +288 -0
  120. package/dist/jsx/SelectItem.native.js +264 -213
  121. package/dist/jsx/SelectItem.native.js.map +1 -1
  122. package/dist/jsx/SelectItemText.mjs +33 -55
  123. package/dist/jsx/SelectItemText.mjs.map +1 -1
  124. package/dist/jsx/SelectItemText.native.cjs +73 -0
  125. package/dist/jsx/SelectItemText.native.js +49 -79
  126. package/dist/jsx/SelectItemText.native.js.map +1 -1
  127. package/dist/jsx/SelectScrollButton.mjs +95 -107
  128. package/dist/jsx/SelectScrollButton.mjs.map +1 -1
  129. package/dist/jsx/SelectScrollButton.native.cjs +37 -0
  130. package/dist/jsx/SelectScrollButton.native.js +24 -22
  131. package/dist/jsx/SelectScrollButton.native.js.map +1 -1
  132. package/dist/jsx/SelectTrigger.mjs +56 -58
  133. package/dist/jsx/SelectTrigger.mjs.map +1 -1
  134. package/dist/jsx/SelectTrigger.native.cjs +90 -0
  135. package/dist/jsx/SelectTrigger.native.js +70 -66
  136. package/dist/jsx/SelectTrigger.native.js.map +1 -1
  137. package/dist/jsx/SelectViewport.mjs +107 -119
  138. package/dist/jsx/SelectViewport.mjs.map +1 -1
  139. package/dist/jsx/SelectViewport.native.cjs +72 -0
  140. package/dist/jsx/SelectViewport.native.js +53 -50
  141. package/dist/jsx/SelectViewport.native.js.map +1 -1
  142. package/dist/jsx/constants.mjs +1 -0
  143. package/dist/jsx/constants.mjs.map +1 -1
  144. package/dist/jsx/constants.native.cjs +40 -0
  145. package/dist/jsx/constants.native.js +20 -21
  146. package/dist/jsx/constants.native.js.map +1 -1
  147. package/dist/jsx/context.mjs +20 -28
  148. package/dist/jsx/context.mjs.map +1 -1
  149. package/dist/jsx/context.native.cjs +57 -0
  150. package/dist/jsx/context.native.js +39 -49
  151. package/dist/jsx/context.native.js.map +1 -1
  152. package/dist/jsx/index.js +13 -3
  153. package/dist/jsx/index.mjs +13 -3
  154. package/dist/jsx/index.native.cjs +26 -0
  155. package/dist/jsx/index.native.js +14 -10
  156. package/dist/jsx/index.native.js.map +1 -1
  157. package/dist/jsx/selectionController.mjs +315 -0
  158. package/dist/jsx/selectionController.mjs.map +1 -0
  159. package/dist/jsx/selectionController.native.cjs +407 -0
  160. package/dist/jsx/selectionController.native.js +409 -0
  161. package/dist/jsx/selectionController.native.js.map +1 -0
  162. package/dist/jsx/types.mjs +0 -2
  163. package/dist/jsx/types.native.cjs +18 -0
  164. package/dist/jsx/types.native.js +9 -10
  165. package/dist/jsx/types.native.js.map +1 -1
  166. package/package.json +31 -30
  167. package/src/Select.tsx +478 -378
  168. package/src/SelectContent.tsx +46 -16
  169. package/src/SelectImpl.native.tsx +0 -8
  170. package/src/SelectImpl.tsx +149 -160
  171. package/src/SelectItem.tsx +280 -159
  172. package/src/SelectItemText.tsx +16 -33
  173. package/src/SelectScrollButton.native.tsx +13 -4
  174. package/src/SelectScrollButton.tsx +57 -42
  175. package/src/SelectTrigger.tsx +77 -53
  176. package/src/SelectViewport.native.tsx +42 -25
  177. package/src/SelectViewport.tsx +60 -60
  178. package/src/context.tsx +6 -2
  179. package/src/index.tsx +5 -2
  180. package/src/selectionController.ts +404 -0
  181. package/src/types.tsx +105 -59
  182. package/types/Select.d.ts +139 -201
  183. package/types/Select.d.ts.map +1 -1
  184. package/types/SelectContent.d.ts +1 -1
  185. package/types/SelectContent.d.ts.map +1 -1
  186. package/types/SelectContent.native.d.ts.map +1 -1
  187. package/types/SelectImpl.d.ts +2 -1
  188. package/types/SelectImpl.d.ts.map +1 -1
  189. package/types/SelectImpl.native.d.ts +1 -5
  190. package/types/SelectImpl.native.d.ts.map +1 -1
  191. package/types/SelectItem.d.ts +13 -16
  192. package/types/SelectItem.d.ts.map +1 -1
  193. package/types/SelectItemText.d.ts +9 -13
  194. package/types/SelectItemText.d.ts.map +1 -1
  195. package/types/SelectScrollButton.d.ts +15 -2
  196. package/types/SelectScrollButton.d.ts.map +1 -1
  197. package/types/SelectScrollButton.native.d.ts +16 -3
  198. package/types/SelectScrollButton.native.d.ts.map +1 -1
  199. package/types/SelectTrigger.d.ts +11 -23
  200. package/types/SelectTrigger.d.ts.map +1 -1
  201. package/types/SelectViewport.d.ts +11 -38
  202. package/types/SelectViewport.d.ts.map +1 -1
  203. package/types/SelectViewport.native.d.ts +15 -4
  204. package/types/SelectViewport.native.d.ts.map +1 -1
  205. package/types/context.d.ts +2 -0
  206. package/types/context.d.ts.map +1 -1
  207. package/types/index.d.ts +5 -2
  208. package/types/index.d.ts.map +1 -1
  209. package/types/selectionController.d.ts +90 -0
  210. package/types/selectionController.d.ts.map +1 -0
  211. package/types/types.d.ts +66 -50
  212. package/types/types.d.ts.map +1 -1
  213. package/dist/cjs/BubbleSelect.cjs +0 -50
  214. package/dist/cjs/BubbleSelect.native.js +0 -30
  215. package/dist/cjs/BubbleSelect.native.js.map +0 -1
  216. package/dist/cjs/useSelectBreakpointActive.cjs +0 -32
  217. package/dist/cjs/useSelectBreakpointActive.native.js +0 -35
  218. package/dist/cjs/useSelectBreakpointActive.native.js.map +0 -1
  219. package/dist/esm/BubbleSelect.mjs +0 -27
  220. package/dist/esm/BubbleSelect.mjs.map +0 -1
  221. package/dist/esm/BubbleSelect.native.js +0 -4
  222. package/dist/esm/BubbleSelect.native.js.map +0 -1
  223. package/dist/esm/index.js.map +0 -1
  224. package/dist/esm/index.mjs.map +0 -1
  225. package/dist/esm/index.native.js.map +0 -1
  226. package/dist/esm/types.mjs.map +0 -1
  227. package/dist/esm/types.native.js.map +0 -1
  228. package/dist/esm/useSelectBreakpointActive.mjs +0 -7
  229. package/dist/esm/useSelectBreakpointActive.mjs.map +0 -1
  230. package/dist/esm/useSelectBreakpointActive.native.js +0 -7
  231. package/dist/esm/useSelectBreakpointActive.native.js.map +0 -1
  232. package/dist/jsx/BubbleSelect.mjs +0 -27
  233. package/dist/jsx/BubbleSelect.mjs.map +0 -1
  234. package/dist/jsx/BubbleSelect.native.js +0 -30
  235. package/dist/jsx/BubbleSelect.native.js.map +0 -1
  236. package/dist/jsx/index.js.map +0 -1
  237. package/dist/jsx/index.mjs.map +0 -1
  238. package/dist/jsx/types.mjs.map +0 -1
  239. package/dist/jsx/useSelectBreakpointActive.mjs +0 -7
  240. package/dist/jsx/useSelectBreakpointActive.mjs.map +0 -1
  241. package/dist/jsx/useSelectBreakpointActive.native.js +0 -35
  242. package/dist/jsx/useSelectBreakpointActive.native.js.map +0 -1
  243. package/src/BubbleSelect.tsx +0 -50
  244. package/src/useSelectBreakpointActive.tsx +0 -7
  245. package/types/BubbleSelect.d.ts +0 -2
  246. package/types/BubbleSelect.d.ts.map +0 -1
  247. package/types/useSelectBreakpointActive.d.ts +0 -3
  248. package/types/useSelectBreakpointActive.d.ts.map +0 -1
@@ -0,0 +1,495 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
25
+ value: mod,
26
+ enumerable: true
27
+ }) : target, mod));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var Select_exports = {};
30
+ __export(Select_exports, {
31
+ Select: () => Select,
32
+ SelectGroup: () => SelectGroup,
33
+ SelectGroupFrame: () => SelectGroupFrame,
34
+ SelectIcon: () => SelectIcon,
35
+ SelectIndicator: () => SelectIndicator,
36
+ SelectIndicatorFrame: () => SelectIndicatorFrame,
37
+ SelectItemIndicator: () => SelectItemIndicator,
38
+ SelectItemIndicatorFrame: () => SelectItemIndicatorFrame,
39
+ SelectLabel: () => SelectLabel,
40
+ SelectLabelFrame: () => SelectLabelFrame,
41
+ SelectRoot: () => SelectRoot,
42
+ SelectSeparator: () => SelectSeparator,
43
+ SelectValue: () => SelectValue,
44
+ SelectValueFrame: () => SelectValueFrame
45
+ });
46
+ module.exports = __toCommonJS(Select_exports);
47
+ var import_jsx_runtime = require("react/jsx-runtime");
48
+ var import_adapt = require("@tamagui/adapt");
49
+ var import_compose_refs = require("@tamagui/compose-refs");
50
+ var import_constants = require("@tamagui/constants");
51
+ var import_core = require("@tamagui/core");
52
+ var import_focus_scope = require("@tamagui/focus-scope");
53
+ var import_focusable = require("@tamagui/focusable");
54
+ var import_helpers = require("@tamagui/helpers");
55
+ var import_use_controllable_state = require("@tamagui/use-controllable-state");
56
+ var React = __toESM(require("react"), 1);
57
+ var import_context = require("./context.native.js");
58
+ var import_SelectContent = require("./SelectContent.native.js");
59
+ var import_SelectImpl = require("./SelectImpl.native.js");
60
+ var import_SelectItem = require("./SelectItem.native.js");
61
+ var import_SelectItemText = require("./SelectItemText.native.js");
62
+ var import_SelectScrollButton = require("./SelectScrollButton.native.js");
63
+ var import_SelectTrigger = require("./SelectTrigger.native.js");
64
+ var import_SelectViewport = require("./SelectViewport.native.js");
65
+ var import_selectionController = require("./selectionController.native.js");
66
+ var SelectValueFrame = (0, import_core.styled)(import_core.Text, { displayName: "SelectValue" });
67
+ var SelectValue = (0, import_core.createStyledHOC)(SelectValueFrame, function SelectValue2(param, forwardedRef) {
68
+ var { scope, children: childrenProp, placeholder, ...props } = param;
69
+ var _itemParentContext_registry_getItem;
70
+ var context = (0, import_context.useSelectContext)(scope);
71
+ var itemParentContext = (0, import_context.useSelectItemParentContext)(scope);
72
+ var composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, context.onValueNodeChange);
73
+ var isEmptyValue = context.selectedValues.length === 0;
74
+ var [, rerender] = React.useReducer(function(version) {
75
+ return version + 1;
76
+ }, 0);
77
+ (0, import_constants.useIsomorphicLayoutEffect)(function() {
78
+ return itemParentContext.registry.subscribe(rerender);
79
+ }, [itemParentContext.registry]);
80
+ var _itemParentContext_registry_getItem_label;
81
+ var registeredValue = context.mode === "multiple" ? context.selectedValues.map(function(value, index) {
82
+ var _itemParentContext_registry_getItem2;
83
+ var _itemParentContext_registry_getItem_label2;
84
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(React.Fragment, { children: [index > 0 ? ", " : null, (_itemParentContext_registry_getItem_label2 = (_itemParentContext_registry_getItem2 = itemParentContext.registry.getItem(value)) === null || _itemParentContext_registry_getItem2 === void 0 ? void 0 : _itemParentContext_registry_getItem2.label) !== null && _itemParentContext_registry_getItem_label2 !== void 0 ? _itemParentContext_registry_getItem_label2 : value] }, value);
85
+ }) : (_itemParentContext_registry_getItem_label = (_itemParentContext_registry_getItem = itemParentContext.registry.getItem(context.selectedValues[0])) === null || _itemParentContext_registry_getItem === void 0 ? void 0 : _itemParentContext_registry_getItem.label) !== null && _itemParentContext_registry_getItem_label !== void 0 ? _itemParentContext_registry_getItem_label : context.value;
86
+ var children = childrenProp !== void 0 ? childrenProp : context.renderValue ? context.renderValue(context.value) : registeredValue;
87
+ var selectValueChildren = isEmptyValue ? placeholder !== null && placeholder !== void 0 ? placeholder : children : children;
88
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectValueFrame, {
89
+ pointerEvents: "none",
90
+ ref: composedRefs,
91
+ ...props,
92
+ children: selectValueChildren
93
+ });
94
+ });
95
+ var SelectIcon = (0, import_core.styled)(import_core.View, {
96
+ displayName: "SelectIcon",
97
+ "aria-hidden": true
98
+ });
99
+ var SelectItemIndicatorFrame = (0, import_core.styled)(import_core.View, { displayName: "SelectItemIndicator" });
100
+ var SelectItemIndicator = (0, import_core.createStyledHOC)(SelectItemIndicatorFrame, function SelectItemIndicator2(props, forwardedRef) {
101
+ var { scope, ...itemIndicatorProps } = props;
102
+ var context = (0, import_context.useSelectItemParentContext)(scope);
103
+ var itemContext = (0, import_SelectItem.useSelectItemContext)(scope);
104
+ if (context.shouldRenderWebNative) return null;
105
+ return itemContext.isSelected ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectItemIndicatorFrame, {
106
+ "aria-hidden": true,
107
+ ...itemIndicatorProps,
108
+ ref: forwardedRef
109
+ }) : null;
110
+ });
111
+ var SelectIndicatorFrame = (0, import_core.styled)(import_core.View, {
112
+ displayName: "SelectIndicator",
113
+ position: "absolute",
114
+ top: 0,
115
+ left: 0,
116
+ pointerEvents: "none",
117
+ zIndex: 10
118
+ });
119
+ var SelectIndicator = (0, import_core.createStyledHOC)(SelectIndicatorFrame, function SelectIndicator2(param, forwardedRef) {
120
+ var { scope, ...props } = param;
121
+ var itemContext = (0, import_context.useSelectItemParentContext)(scope);
122
+ var context = (0, import_context.useSelectContext)(scope);
123
+ var [layout, setLayout] = React.useState(null);
124
+ var rafRef = React.useRef(0);
125
+ (0, import_constants.useIsomorphicLayoutEffect)(function() {
126
+ var update = function(index) {
127
+ if (typeof index !== "number") return;
128
+ cancelAnimationFrame(rafRef.current);
129
+ rafRef.current = requestAnimationFrame(function() {
130
+ var _itemContext_listRef_current, _itemContext_listRef;
131
+ var node = (_itemContext_listRef = itemContext.listRef) === null || _itemContext_listRef === void 0 ? void 0 : (_itemContext_listRef_current = _itemContext_listRef.current) === null || _itemContext_listRef_current === void 0 ? void 0 : _itemContext_listRef_current[index];
132
+ if (node) setLayout({
133
+ width: Math.round(node.offsetWidth),
134
+ height: Math.round(node.offsetHeight),
135
+ x: Math.round(node.offsetLeft),
136
+ y: Math.round(node.offsetTop)
137
+ });
138
+ });
139
+ };
140
+ if (context.open && context.activeIndexRef.current !== null) update(context.activeIndexRef.current);
141
+ return itemContext.activeIndexSubscribe(update);
142
+ }, [context.open, itemContext.listRef]);
143
+ if (!layout) return null;
144
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectIndicatorFrame, {
145
+ ref: forwardedRef,
146
+ ...props,
147
+ width: layout.width,
148
+ height: layout.height,
149
+ x: layout.x,
150
+ y: layout.y
151
+ });
152
+ });
153
+ var GROUP_NAME = "SelectGroup";
154
+ var { Provider: SelectGroupContextProvider, useStyledContext: useSelectGroupContext } = (0, import_core.createStyledContext)({ id: "" }, "SelectGroup");
155
+ var SelectGroupFrame = (0, import_core.styled)(import_core.View, { displayName: GROUP_NAME });
156
+ var NativeSelect = (0, import_core.styled)(import_core.Text, {
157
+ displayName: "NativeSelect",
158
+ render: "select"
159
+ });
160
+ var SelectGroup = (0, import_core.createStyledHOC)(SelectGroupFrame, function(props, forwardedRef) {
161
+ var { scope, ...groupProps } = props;
162
+ var groupId = React.useId();
163
+ var context = (0, import_context.useSelectContext)(scope);
164
+ var itemParentContext = (0, import_context.useSelectItemParentContext)(scope);
165
+ var StyledNativeSelect = React.useContext(import_context.SelectNativeComponentContext);
166
+ var nativeSelectRef = React.useRef(null);
167
+ var content = (function() {
168
+ if (itemParentContext.shouldRenderWebNative) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NativeSelect, {
169
+ ...StyledNativeSelect && {
170
+ render: StyledNativeSelect,
171
+ size: itemParentContext.size,
172
+ style: { appearance: "none" }
173
+ },
174
+ ...groupProps,
175
+ value: context.value,
176
+ multiple: context.mode === "multiple",
177
+ name: itemParentContext.name,
178
+ form: itemParentContext.form,
179
+ id: itemParentContext.id,
180
+ onChange: function(event) {
181
+ var value = context.mode === "multiple" ? Array.from(event.currentTarget.selectedOptions, function(option) {
182
+ return option.value;
183
+ }) : event.currentTarget.value;
184
+ itemParentContext.changeNativeValue(value, event.nativeEvent);
185
+ },
186
+ ref: nativeSelectRef,
187
+ children: props.children
188
+ });
189
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectGroupFrame, {
190
+ role: "group",
191
+ "aria-labelledby": groupId,
192
+ ...groupProps,
193
+ ref: forwardedRef
194
+ });
195
+ })();
196
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectGroupContextProvider, {
197
+ scope,
198
+ id: groupId || "",
199
+ children: content
200
+ });
201
+ });
202
+ SelectGroup.displayName = GROUP_NAME;
203
+ var SelectLabelFrame = (0, import_core.styled)(import_core.Text, { displayName: "SelectLabel" });
204
+ var SelectLabel = (0, import_core.createStyledHOC)(SelectLabelFrame, function(props, forwardedRef) {
205
+ var { scope, ...labelProps } = props;
206
+ var context = (0, import_context.useSelectItemParentContext)(scope);
207
+ var groupContext = useSelectGroupContext(scope);
208
+ if (context.shouldRenderWebNative) return null;
209
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectLabelFrame, {
210
+ render: "div",
211
+ id: groupContext.id,
212
+ ...labelProps,
213
+ ref: forwardedRef
214
+ });
215
+ });
216
+ var SelectSeparator = (0, import_core.styled)(import_core.View, { displayName: "SelectSeparator" });
217
+ var SelectSheetImpl = function(props) {
218
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: props.children });
219
+ };
220
+ function SelectRoot(props) {
221
+ var adaptScope = `AdaptSelect${props.scope || ""}`;
222
+ var [open, requestOpenChange] = (0, import_use_controllable_state.useControllableState)({
223
+ prop: props.open,
224
+ defaultProp: props.defaultOpen || false,
225
+ onChange: props.onOpenChange
226
+ });
227
+ var handleAdaptOpenChange = React.useCallback(function(nextOpen) {
228
+ requestOpenChange(nextOpen, (0, import_core.createChangeEventDetails)(nextOpen ? "trigger-press" : "outside-press"));
229
+ }, [requestOpenChange]);
230
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_adapt.AdaptParent, {
231
+ scope: adaptScope,
232
+ adaptChildren: props.children,
233
+ open,
234
+ onOpenChange: handleAdaptOpenChange,
235
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectInner, {
236
+ ...props,
237
+ scope: props.scope,
238
+ adaptScope,
239
+ open,
240
+ requestOpenChange
241
+ })
242
+ });
243
+ }
244
+ var Select = (0, import_helpers.withStaticProperties)(SelectRoot, {
245
+ Root: SelectRoot,
246
+ Adapt: import_adapt.Adapt,
247
+ Content: import_SelectContent.SelectContent,
248
+ Group: SelectGroup,
249
+ Icon: SelectIcon,
250
+ Item: import_SelectItem.SelectItem,
251
+ ItemIndicator: SelectItemIndicator,
252
+ ItemText: import_SelectItemText.SelectItemText,
253
+ Label: SelectLabel,
254
+ ScrollDownButton: import_SelectScrollButton.SelectScrollDownButton,
255
+ ScrollUpButton: import_SelectScrollButton.SelectScrollUpButton,
256
+ Separator: SelectSeparator,
257
+ Trigger: import_SelectTrigger.SelectTrigger,
258
+ Value: SelectValue,
259
+ Viewport: import_SelectViewport.SelectViewport,
260
+ Indicator: SelectIndicator,
261
+ FocusScope: import_focus_scope.FocusScopeController
262
+ });
263
+ function useEmitter() {
264
+ var listenersRef = React.useRef(/* @__PURE__ */ new Set());
265
+ return [React.useCallback(function(value) {
266
+ listenersRef.current.forEach(function(l) {
267
+ return l(value);
268
+ });
269
+ }, []), React.useCallback(function(listener) {
270
+ listenersRef.current.add(listener);
271
+ return function() {
272
+ listenersRef.current.delete(listener);
273
+ };
274
+ }, [])];
275
+ }
276
+ function SelectInner(props) {
277
+ var { scope = "", adaptScope, native, children, open, requestOpenChange, defaultOpen: _defaultOpen, onOpenChange: _onOpenChange, value: valueProp, defaultValue, onValueChange, multiple = false, name, form, disablePreventBodyScroll, size: sizeProp = true, onActiveChange, dir, id, renderValue, lazyMount, zIndex } = props;
278
+ var SelectImpl = (0, import_adapt.useAdaptIsActive)(adaptScope) ? SelectSheetImpl : import_SelectImpl.SelectInlineImpl;
279
+ var mode = multiple ? "multiple" : "single";
280
+ var [valueState, requestValueChange] = (0, import_use_controllable_state.useControllableState)({
281
+ prop: valueProp,
282
+ defaultProp: defaultValue !== null && defaultValue !== void 0 ? defaultValue : mode === "multiple" ? [] : "",
283
+ onChange: onValueChange,
284
+ transition: true
285
+ });
286
+ var value = React.useMemo(function() {
287
+ return mode === "multiple" ? (0, import_selectionController.selectedValuesFromSelection)(mode, valueState) : typeof valueState === "string" ? valueState : "";
288
+ }, [mode, valueState]);
289
+ var selectedValues = React.useMemo(function() {
290
+ return (0, import_selectionController.selectedValuesFromSelection)(mode, value);
291
+ }, [mode, value]);
292
+ var [, rerenderRegistry] = React.useReducer(function(version) {
293
+ return version + 1;
294
+ }, 0);
295
+ var registryRef = React.useRef(null);
296
+ if (!registryRef.current) registryRef.current = (0, import_selectionController.createSelectItemRegistry)(rerenderRegistry);
297
+ var registry = registryRef.current;
298
+ var controllerRef = React.useRef(null);
299
+ if (!controllerRef.current) controllerRef.current = (0, import_selectionController.createSelectSelectionController)({
300
+ mode,
301
+ value,
302
+ registry
303
+ });
304
+ var controller = controllerRef.current;
305
+ controller.setMode(mode);
306
+ controller.setValue(value);
307
+ React.useEffect(function() {
308
+ if (!props.id) return;
309
+ return (0, import_focusable.registerFocusable)(props.id, {
310
+ focusAndSelect: function() {
311
+ requestOpenChange(function(current) {
312
+ return !current;
313
+ }, (0, import_core.createChangeEventDetails)("trigger-press"));
314
+ },
315
+ focus: function() {}
316
+ });
317
+ }, [props.id, requestOpenChange]);
318
+ var activeIndexRef = React.useRef(null);
319
+ var [emitActiveIndex, activeIndexSubscribe] = useEmitter();
320
+ var selectedIndexRef = React.useRef(null);
321
+ var lastPointerRef = React.useRef({
322
+ x: -1,
323
+ y: -1
324
+ });
325
+ var listContentRef = React.useRef([]);
326
+ var listRef = React.useRef([]);
327
+ var [valueNode, setValueNode] = React.useState(null);
328
+ var selectedIndex = Math.max(0, controller.selectionAnchorIndex());
329
+ listContentRef.current = registry.getTypeaheadLabels();
330
+ var itemNodes = registry.getNodes();
331
+ listRef.current.length = itemNodes.length;
332
+ for (var i = 0; i < itemNodes.length; i++) listRef.current[i] = itemNodes[i];
333
+ (0, import_constants.useIsomorphicLayoutEffect)(function() {
334
+ selectedIndexRef.current = selectedIndex;
335
+ });
336
+ var shouldRenderWebNative = import_constants.isWeb && (native === true || native === "web" || Array.isArray(native) && native.includes("web"));
337
+ var setActiveIndex = React.useCallback(function(index, details) {
338
+ if (activeIndexRef.current === index) return;
339
+ activeIndexRef.current = index;
340
+ controller.setActiveIndex(index);
341
+ emitActiveIndex(index);
342
+ if (typeof index === "number") {
343
+ var item = registry.getItems()[index];
344
+ if (item && details) onActiveChange === null || onActiveChange === void 0 || onActiveChange(item.value, details);
345
+ }
346
+ }, [
347
+ controller,
348
+ emitActiveIndex,
349
+ onActiveChange,
350
+ registry
351
+ ]);
352
+ var activeDetails = React.useCallback(function(reason, index, event) {
353
+ return {
354
+ reason,
355
+ event,
356
+ trigger: void 0,
357
+ index
358
+ };
359
+ }, []);
360
+ var moveActive = React.useCallback(function(direction, event) {
361
+ var nextIndex = registry.nextEnabledIndex(activeIndexRef.current, direction);
362
+ if (nextIndex >= 0) setActiveIndex(nextIndex, activeDetails("keyboard", nextIndex, event));
363
+ }, [
364
+ activeDetails,
365
+ registry,
366
+ setActiveIndex
367
+ ]);
368
+ var typeaheadRef = React.useRef({
369
+ text: "",
370
+ timeout: null
371
+ });
372
+ var search = React.useCallback(function(text, event) {
373
+ clearTimeout(typeaheadRef.current.timeout);
374
+ typeaheadRef.current.text += text;
375
+ var nextIndex = registry.findTypeaheadIndex(typeaheadRef.current.text, activeIndexRef.current);
376
+ if (nextIndex < 0 && typeaheadRef.current.text.length > 1) {
377
+ typeaheadRef.current.text = text;
378
+ nextIndex = registry.findTypeaheadIndex(text, activeIndexRef.current);
379
+ }
380
+ typeaheadRef.current.timeout = setTimeout(function() {
381
+ typeaheadRef.current.text = "";
382
+ }, 750);
383
+ if (nextIndex >= 0) setActiveIndex(nextIndex, activeDetails("keyboard", nextIndex, event));
384
+ }, [
385
+ activeDetails,
386
+ registry,
387
+ setActiveIndex
388
+ ]);
389
+ React.useEffect(function() {
390
+ return function() {
391
+ return clearTimeout(typeaheadRef.current.timeout);
392
+ };
393
+ }, []);
394
+ React.useEffect(function() {
395
+ if (open) {
396
+ var nextIndex = controller.initialActiveIndex();
397
+ if (nextIndex >= 0) setActiveIndex(nextIndex, activeDetails("list-navigation", nextIndex));
398
+ } else setActiveIndex(null);
399
+ }, [
400
+ open,
401
+ selectedIndex,
402
+ registry.getItems().length
403
+ ]);
404
+ var selectValue = React.useCallback(function(nextItemValue, details) {
405
+ var item = registry.getItem(nextItemValue);
406
+ if (!item || item.disabled) return;
407
+ controller.setMode(mode);
408
+ controller.setValue(value);
409
+ var previousValue = controller.value;
410
+ requestValueChange(controller.toggle(nextItemValue), details);
411
+ if (details.isCanceled) {
412
+ controller.setValue(previousValue);
413
+ return;
414
+ }
415
+ if (controller.shouldCloseOnSelect) requestOpenChange(false, (0, import_core.createChangeEventDetails)(details.reason === "keyboard" ? "keyboard" : "item-press", details.event, details.trigger));
416
+ }, [
417
+ controller,
418
+ mode,
419
+ registry,
420
+ requestOpenChange,
421
+ requestValueChange,
422
+ value
423
+ ]);
424
+ var changeNativeValue = React.useCallback(function(nextValue, event) {
425
+ var details = (0, import_core.createChangeEventDetails)("native-change", event);
426
+ requestValueChange(nextValue, details);
427
+ if (!details.isCanceled) controller.setValue(nextValue);
428
+ }, [controller, requestValueChange]);
429
+ var content = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_context.SelectItemParentProvider, {
430
+ scopeName: scope,
431
+ scope,
432
+ adaptScope,
433
+ mode,
434
+ selectedValues,
435
+ registry,
436
+ size: sizeProp,
437
+ activeIndexSubscribe,
438
+ activeIndexRef,
439
+ requestOpenChange,
440
+ id,
441
+ name,
442
+ form,
443
+ selectValue,
444
+ changeNativeValue,
445
+ shouldRenderWebNative,
446
+ setActiveIndex,
447
+ selectedIndex,
448
+ lastPointerRef,
449
+ listRef,
450
+ moveActive,
451
+ search,
452
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_context.SelectProvider, {
453
+ scope,
454
+ scopeName: scope,
455
+ adaptScope,
456
+ disablePreventBodyScroll,
457
+ dir,
458
+ blockSelection: false,
459
+ fallback: false,
460
+ valueNode,
461
+ onValueNodeChange: setValueNode,
462
+ activeIndexRef,
463
+ selectedIndex,
464
+ setActiveIndex,
465
+ value,
466
+ mode,
467
+ selectedValues,
468
+ open,
469
+ native,
470
+ renderValue,
471
+ lazyMount,
472
+ children: shouldRenderWebNative ? children : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectImpl, {
473
+ activeIndexRef,
474
+ listContentRef,
475
+ selectedIndexRef,
476
+ ...props,
477
+ open,
478
+ value,
479
+ children
480
+ })
481
+ }), import_constants.isWeb && !shouldRenderWebNative && name ? (mode === "multiple" ? selectedValues : [value]).map(function(inputValue) {
482
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
483
+ type: "hidden",
484
+ name,
485
+ form,
486
+ value: inputValue
487
+ }, inputValue);
488
+ }) : null]
489
+ });
490
+ if (zIndex !== void 0) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_context.SelectZIndexContext.Provider, {
491
+ value: zIndex,
492
+ children: content
493
+ });
494
+ return content;
495
+ }