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