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