@tamagui/select 2.7.7 → 3.0.0-beta.643.1

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