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