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