@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
@@ -2,34 +2,26 @@ import { createStyledContext } from "@tamagui/core";
2
2
  import { getPortal } from "@tamagui/native";
3
3
  import { createContext } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
+
5
6
  const SelectZIndexContext = createContext(void 0);
6
- const {
7
- Provider: SelectProvider,
8
- useStyledContext: useSelectContext
9
- } = createStyledContext(null, "Select");
10
- const {
11
- Provider: SelectItemParentProvider,
12
- useStyledContext: useSelectItemParentContext
13
- } = createStyledContext(null, "SelectItem");
14
- const ForwardSelectContext = ({
15
- context,
16
- itemContext,
17
- children
18
- }) => {
19
- const portalState = getPortal().state;
20
- if (portalState.type === "teleport") {
21
- return children;
22
- }
23
- return /* @__PURE__ */jsx(SelectProvider, {
24
- isInSheet: true,
25
- scope: context.scopeName,
26
- ...context,
27
- children: /* @__PURE__ */jsx(SelectItemParentProvider, {
28
- scope: context.scopeName,
29
- ...itemContext,
30
- children
31
- })
32
- });
7
+ const SelectNativeComponentContext = createContext(null);
8
+ const { Provider: SelectProvider, useStyledContext: useSelectContext } = createStyledContext(null, "Select");
9
+ const { Provider: SelectItemParentProvider, useStyledContext: useSelectItemParentContext } = createStyledContext(null, "SelectItem");
10
+ const ForwardSelectContext = ({ context, itemContext, children }) => {
11
+ const portalState = getPortal().state;
12
+ if (portalState.type === "teleport") {
13
+ return children;
14
+ }
15
+ return /* @__PURE__ */ jsx(SelectProvider, {
16
+ scope: context.scopeName,
17
+ ...context,
18
+ children: /* @__PURE__ */ jsx(SelectItemParentProvider, {
19
+ scope: context.scopeName,
20
+ ...itemContext,
21
+ children
22
+ })
23
+ });
33
24
  };
34
- export { ForwardSelectContext, SelectItemParentProvider, SelectProvider, SelectZIndexContext, useSelectContext, useSelectItemParentContext };
25
+
26
+ export { ForwardSelectContext, SelectItemParentProvider, SelectNativeComponentContext, SelectProvider, SelectZIndexContext, useSelectContext, useSelectItemParentContext };
35
27
  //# sourceMappingURL=context.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["createStyledContext","getPortal","createContext","jsx","SelectZIndexContext","Provider","SelectProvider","useStyledContext","useSelectContext","SelectItemParentProvider","useSelectItemParentContext","ForwardSelectContext","context","itemContext","children","portalState","state","type","isInSheet","scope","scopeName"],"sources":["../../src/context.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,mBAAA,QAA2B;AACpC,SAASC,SAAA,QAAiB;AAC1B,SAASC,aAAA,QAAqB;AAmCxB,SAAAC,GAAA;AA/BC,MAAMC,mBAAA,GAAsBF,aAAA,CAAkC,MAAS;AAEvE,MAAM;EAAEG,QAAA,EAAUC,cAAA;EAAgBC,gBAAA,EAAkBC;AAAiB,IAC1ER,mBAAA,CAAwC,MAAa,QAAQ;AAIxD,MAAM;EACXK,QAAA,EAAUI,wBAAA;EACVF,gBAAA,EAAkBG;AACpB,IAAIV,mBAAA,CAAkD,MAAa,YAAY;AAExE,MAAMW,oBAAA,GAAuBA,CAAC;EACnCC,OAAA;EACAC,WAAA;EACAC;AACF,MAIM;EAGJ,MAAMC,WAAA,GAAcd,SAAA,CAAU,EAAEe,KAAA;EAChC,IAAID,WAAA,CAAYE,IAAA,KAAS,YAAY;IACnC,OAAOH,QAAA;EACT;EAGA,OACE,eAAAX,GAAA,CAACG,cAAA;IAAeY,SAAA,EAAS;IAACC,KAAA,EAAOP,OAAA,CAAQQ,SAAA;IAAY,GAAGR,OAAA;IACtDE,QAAA,iBAAAX,GAAA,CAACM,wBAAA;MAAyBU,KAAA,EAAOP,OAAA,CAAQQ,SAAA;MAAY,GAAGP,WAAA;MACrDC;IAAA,CACH;EAAA,CACF;AAEJ","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":[],"sources":["esm/context.js"],"sourcesContent":["import { createStyledContext } from \"@tamagui/core\";\nimport { getPortal } from \"@tamagui/native\";\nimport { createContext } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nconst SelectZIndexContext = createContext(void 0);\nconst SelectNativeComponentContext = createContext(null);\nconst { Provider: SelectProvider, useStyledContext: useSelectContext } = createStyledContext(null, \"Select\");\nconst {\n Provider: SelectItemParentProvider,\n useStyledContext: useSelectItemParentContext\n} = createStyledContext(null, \"SelectItem\");\nconst ForwardSelectContext = ({\n context,\n itemContext,\n children\n}) => {\n const portalState = getPortal().state;\n if (portalState.type === \"teleport\") {\n return children;\n }\n return /* @__PURE__ */ jsx(SelectProvider, { scope: context.scopeName, ...context, children: /* @__PURE__ */ jsx(SelectItemParentProvider, { scope: context.scopeName, ...itemContext, children }) });\n};\nexport {\n ForwardSelectContext,\n SelectItemParentProvider,\n SelectNativeComponentContext,\n SelectProvider,\n SelectZIndexContext,\n useSelectContext,\n useSelectItemParentContext\n};\n//# sourceMappingURL=context.js.map\n"],"mappings":";;;;;;AAIA,MAAM,sBAAsB,cAAc,KAAK,CAAC;AAChD,MAAM,+BAA+B,cAAc,IAAI;AACvD,MAAM,EAAE,UAAU,gBAAgB,kBAAkB,qBAAqB,oBAAoB,MAAM,QAAQ;AAC3G,MAAM,EACJ,UAAU,0BACV,kBAAkB,+BAChB,oBAAoB,MAAM,YAAY;AAC1C,MAAM,wBAAwB,EAC5B,SACA,aACA,eACI;CACJ,MAAM,cAAc,UAAU,CAAC,CAAC;CAChC,IAAI,YAAY,SAAS,YAAY;EACnC,OAAO;CACT;CACA,OAAuB,oBAAI,gBAAgB;EAAE,OAAO,QAAQ;EAAW,GAAG;EAAS,UAA0B,oBAAI,0BAA0B;GAAE,OAAO,QAAQ;GAAW,GAAG;GAAa;EAAS,CAAC;CAAE,CAAC;AACtM"}
@@ -1,36 +1,28 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx } from "react/jsx-runtime";
2
2
  import { createStyledContext } from "@tamagui/core";
3
3
  import { getPortal } from "@tamagui/native";
4
4
  import { createContext } from "react";
5
- var SelectZIndexContext = /* @__PURE__ */createContext(void 0);
6
- var {
7
- Provider: SelectProvider,
8
- useStyledContext: useSelectContext
9
- } = createStyledContext(null, "Select");
10
- var {
11
- Provider: SelectItemParentProvider,
12
- useStyledContext: useSelectItemParentContext
13
- } = createStyledContext(null, "SelectItem");
14
- var ForwardSelectContext = function (param) {
15
- var {
16
- context,
17
- itemContext,
18
- children
19
- } = param;
20
- var portalState = getPortal().state;
21
- if (portalState.type === "teleport") {
22
- return children;
23
- }
24
- return /* @__PURE__ */_jsx(SelectProvider, {
25
- isInSheet: true,
26
- scope: context.scopeName,
27
- ...context,
28
- children: /* @__PURE__ */_jsx(SelectItemParentProvider, {
29
- scope: context.scopeName,
30
- ...itemContext,
31
- children
32
- })
33
- });
5
+
6
+ var SelectZIndexContext = /* @__PURE__ */ createContext(void 0);
7
+ var SelectNativeComponentContext = /* @__PURE__ */ createContext(null);
8
+ var { Provider: SelectProvider, useStyledContext: useSelectContext } = createStyledContext(null, "Select");
9
+ var { Provider: SelectItemParentProvider, useStyledContext: useSelectItemParentContext } = createStyledContext(null, "SelectItem");
10
+ var ForwardSelectContext = function(param) {
11
+ var { context, itemContext, children } = param;
12
+ var portalState = getPortal().state;
13
+ if (portalState.type === "teleport") {
14
+ return children;
15
+ }
16
+ return /* @__PURE__ */ jsx(SelectProvider, {
17
+ scope: context.scopeName,
18
+ ...context,
19
+ children: /* @__PURE__ */ jsx(SelectItemParentProvider, {
20
+ scope: context.scopeName,
21
+ ...itemContext,
22
+ children
23
+ })
24
+ });
34
25
  };
35
- export { ForwardSelectContext, SelectItemParentProvider, SelectProvider, SelectZIndexContext, useSelectContext, useSelectItemParentContext };
26
+
27
+ export { ForwardSelectContext, SelectItemParentProvider, SelectNativeComponentContext, SelectProvider, SelectZIndexContext, useSelectContext, useSelectItemParentContext };
36
28
  //# sourceMappingURL=context.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsx","_jsx","createStyledContext","getPortal","createContext","SelectZIndexContext","Provider","SelectProvider","useStyledContext","useSelectContext","SelectItemParentProvider","useSelectItemParentContext","ForwardSelectContext","param","context","itemContext","children","portalState","state","type","isInSheet","scope","scopeName"],"sources":["../../src/context.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAA,IAAAC,IAAA,2BAA2B;AACpC,SAASC,mBAAiB;AAC1B,SAASC,SAAA,yBAAqB;AAmCxB,SAAAC,aAAA;AA/BC,IAAAC,mBAAM,kBAAwDD,aAAS;AAEvE;EAAME,QAAE,EAAAC,cAAU;EAAAC,gBAAgB,EAAAC;AAAkB,IAAiBP,mBAC1E,KAAwC,UAAa;AAIhD;EAAMI,QAAA,EAAAI,wBAAA;EAAAF,gBAAA,EAAAG;AAAA,IAAAT,mBAAA;AAAA,IACXU,oBAAU,YAAAA,CAAAC,KAAA;EACV;IAAAC,OAAA;IAAAC,WAAkB;IAAAC;EAAA,IAAAH,KAAA;EACpB,IAAII,WAAA,GAAAd,SAAkD,CAAa,EAAAe,KAAA;EAE5D,IAAMD,WAAA,CAAAE,IAAA,eAAwB;IACnC,OAAAH,QAAA;EACA;EACA,sBAAAf,IAAA,CAAAM,cAAA;IACFa,SAIM;IAGJC,KAAM,EAAAP,OAAA,CAAAQ,SAAc;IACpB,GAAIR,OAAA;IACFE,QAAO,iBAAAf,IAAA,CAAAS,wBAAA;MACTW,KAAA,EAAAP,OAAA,CAAAQ,SAAA;MAGA,GACEP,WAAA;MAMJC","ignoreList":[]}
1
+ {"version":3,"file":"context.native.js","names":[],"sources":["esm/context.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createStyledContext } from \"@tamagui/core\";\nimport { getPortal } from \"@tamagui/native\";\nimport { createContext } from \"react\";\nvar SelectZIndexContext = /* @__PURE__ */ createContext(void 0);\nvar SelectNativeComponentContext = /* @__PURE__ */ createContext(null);\nvar { Provider: SelectProvider, useStyledContext: useSelectContext } = createStyledContext(null, \"Select\");\nvar { Provider: SelectItemParentProvider, useStyledContext: useSelectItemParentContext } = createStyledContext(null, \"SelectItem\");\nvar ForwardSelectContext = function(param) {\n var { context, itemContext, children } = param;\n var portalState = getPortal().state;\n if (portalState.type === \"teleport\") {\n return children;\n }\n return /* @__PURE__ */ _jsx(SelectProvider, {\n scope: context.scopeName,\n ...context,\n children: /* @__PURE__ */ _jsx(SelectItemParentProvider, {\n scope: context.scopeName,\n ...itemContext,\n children\n })\n });\n};\nexport {\n ForwardSelectContext,\n SelectItemParentProvider,\n SelectNativeComponentContext,\n SelectProvider,\n SelectZIndexContext,\n useSelectContext,\n useSelectItemParentContext\n};\n//# sourceMappingURL=context.js.map\n"],"mappings":";;;;;;AAIA,IAAI,sBAAsC,8BAAc,KAAK,CAAC;AAC9D,IAAI,+BAA+C,8BAAc,IAAI;AACrE,IAAI,EAAE,UAAU,gBAAgB,kBAAkB,qBAAqB,oBAAoB,MAAM,QAAQ;AACzG,IAAI,EAAE,UAAU,0BAA0B,kBAAkB,+BAA+B,oBAAoB,MAAM,YAAY;AACjI,IAAI,uBAAuB,SAAS,OAAO;CACzC,IAAI,EAAE,SAAS,aAAa,aAAa;CACzC,IAAI,cAAc,UAAU,CAAC,CAAC;CAC9B,IAAI,YAAY,SAAS,YAAY;EACnC,OAAO;CACT;CACA,OAAuB,oBAAK,gBAAgB;EAC1C,OAAO,QAAQ;EACf,GAAG;EACH,UAA0B,oBAAK,0BAA0B;GACvD,OAAO,QAAQ;GACf,GAAG;GACH;EACF,CAAC;CACH,CAAC;AACH"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,13 @@
1
- export * from "./Select.mjs";
2
- export * from "./context.mjs";
3
- //# sourceMappingURL=index.js.map
1
+ export * from "./Select.mjs"
2
+
3
+ export * from "./SelectItem.mjs"
4
+
5
+ export * from "./SelectItemText.mjs"
6
+
7
+ export * from "./SelectScrollButton.mjs"
8
+
9
+ export * from "./SelectTrigger.mjs"
10
+
11
+ export * from "./SelectViewport.mjs"
12
+
13
+ export * from "./context.mjs"
@@ -1,3 +1,13 @@
1
- export * from "./Select.mjs";
2
- export * from "./context.mjs";
3
- //# sourceMappingURL=index.mjs.map
1
+ export * from "./Select.mjs"
2
+
3
+ export * from "./SelectItem.mjs"
4
+
5
+ export * from "./SelectItemText.mjs"
6
+
7
+ export * from "./SelectScrollButton.mjs"
8
+
9
+ export * from "./SelectTrigger.mjs"
10
+
11
+ export * from "./SelectViewport.mjs"
12
+
13
+ export * from "./context.mjs"
@@ -1,3 +1,13 @@
1
- export * from "./Select.native.js";
2
- export * from "./context.native.js";
3
- //# sourceMappingURL=index.native.js.map
1
+ export * from "./Select.native.js"
2
+
3
+ export * from "./SelectItem.native.js"
4
+
5
+ export * from "./SelectItemText.native.js"
6
+
7
+ export * from "./SelectScrollButton.native.js"
8
+
9
+ export * from "./SelectTrigger.native.js"
10
+
11
+ export * from "./SelectViewport.native.js"
12
+
13
+ export * from "./context.native.js"
@@ -0,0 +1,315 @@
1
+ function getSelectLabelText(label) {
2
+ if (typeof label === "string" || typeof label === "number") {
3
+ return String(label);
4
+ }
5
+ if (Array.isArray(label)) {
6
+ return label.map(getSelectLabelText).join("");
7
+ }
8
+ if (label && typeof label === "object" && "props" in label) {
9
+ return getSelectLabelText(label.props?.children);
10
+ }
11
+ return "";
12
+ }
13
+ function createSelectItemRegistry(onChange) {
14
+ const items = [];
15
+ const labelRegistrations = /* @__PURE__ */ new Map();
16
+ const explicitTextValues = /* @__PURE__ */ new Map();
17
+ const itemNodes = /* @__PURE__ */ new Map();
18
+ const listeners = /* @__PURE__ */ new Set();
19
+ let indexByValue = null;
20
+ const notify = () => {
21
+ indexByValue = null;
22
+ onChange?.();
23
+ listeners.forEach((listener) => listener());
24
+ };
25
+ const getItems = () => items;
26
+ const getItem = (value) => items.find((item) => item.value === value);
27
+ const getIndex = (value) => {
28
+ if (!indexByValue) {
29
+ indexByValue = /* @__PURE__ */ new Map();
30
+ items.forEach((item, index) => {
31
+ if (!indexByValue.has(item.value)) indexByValue.set(item.value, index);
32
+ });
33
+ }
34
+ return indexByValue.get(value) ?? -1;
35
+ };
36
+ const getNodes = () => items.map((item) => itemNodes.get(item.id) ?? null);
37
+ const getRegisteredLabel = (value) => {
38
+ const registrations = labelRegistrations.get(value);
39
+ if (!registrations?.size) return void 0;
40
+ const values = Array.from(registrations.values());
41
+ return values[values.length - 1];
42
+ };
43
+ const applyRegisteredLabel = (value) => {
44
+ const registeredLabel = getRegisteredLabel(value);
45
+ let changed = false;
46
+ for (const item of items) {
47
+ if (item.value !== value) continue;
48
+ const nextLabel = registeredLabel?.label;
49
+ const nextTextValue = explicitTextValues.get(item.id) || registeredLabel?.textValue;
50
+ if (item.label !== nextLabel || item.textValue !== nextTextValue) {
51
+ item.label = nextLabel;
52
+ item.textValue = nextTextValue;
53
+ changed = true;
54
+ }
55
+ }
56
+ if (changed) notify();
57
+ };
58
+ const syncNodeOrder = () => {
59
+ items.sort((a, b) => {
60
+ const aNode = itemNodes.get(a.id);
61
+ const bNode = itemNodes.get(b.id);
62
+ if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== "function") {
63
+ return 0;
64
+ }
65
+ const position = aNode.compareDocumentPosition(bNode);
66
+ if (position & 4) return -1;
67
+ if (position & 2) return 1;
68
+ return 0;
69
+ });
70
+ };
71
+ const registerItem = (item) => {
72
+ const id = Symbol(item.value);
73
+ const registeredLabel = getRegisteredLabel(item.value);
74
+ const registeredItem = {
75
+ ...item,
76
+ ...registeredLabel,
77
+ textValue: item.textValue ?? registeredLabel?.textValue,
78
+ id
79
+ };
80
+ explicitTextValues.set(id, item.textValue);
81
+ items.push(registeredItem);
82
+ notify();
83
+ return {
84
+ id,
85
+ update(next) {
86
+ const index = items.findIndex((current2) => current2.id === id);
87
+ if (index < 0) return;
88
+ const current = items[index];
89
+ if ("textValue" in next) {
90
+ explicitTextValues.set(id, next.textValue);
91
+ }
92
+ const nextItem = {
93
+ ...current,
94
+ ...next
95
+ };
96
+ if (next.value !== void 0 && next.value !== current.value) {
97
+ const nextLabel = getRegisteredLabel(next.value);
98
+ nextItem.label = nextLabel?.label;
99
+ }
100
+ const explicitTextValue = explicitTextValues.get(id);
101
+ nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);
102
+ const changed = Object.entries(next).some(([key, value]) => current[key] !== value);
103
+ const textValueChanged = current.textValue !== nextItem.textValue;
104
+ if (!changed && !textValueChanged) return;
105
+ items[index] = nextItem;
106
+ notify();
107
+ },
108
+ setNode(node) {
109
+ if ((itemNodes.get(id) ?? null) === (node ?? null)) return;
110
+ if (node) {
111
+ itemNodes.set(id, node);
112
+ syncNodeOrder();
113
+ } else {
114
+ itemNodes.delete(id);
115
+ }
116
+ notify();
117
+ },
118
+ unregister() {
119
+ const index = items.findIndex((current) => current.id === id);
120
+ if (index < 0) return;
121
+ items.splice(index, 1);
122
+ explicitTextValues.delete(id);
123
+ itemNodes.delete(id);
124
+ notify();
125
+ }
126
+ };
127
+ };
128
+ const registerLabel = (value, label, textValue) => {
129
+ const id = Symbol(value);
130
+ const normalizedTextValue = textValue || getSelectLabelText(label) || value;
131
+ const registrations = labelRegistrations.get(value) ?? (() => {
132
+ const next = /* @__PURE__ */ new Map();
133
+ labelRegistrations.set(value, next);
134
+ return next;
135
+ })();
136
+ registrations.set(id, {
137
+ label,
138
+ textValue: normalizedTextValue
139
+ });
140
+ applyRegisteredLabel(value);
141
+ return () => {
142
+ registrations.delete(id);
143
+ if (!registrations.size) {
144
+ labelRegistrations.delete(value);
145
+ }
146
+ applyRegisteredLabel(value);
147
+ };
148
+ };
149
+ const firstEnabledIndex = () => items.findIndex((item) => !item.disabled);
150
+ const nextEnabledIndex = (fromIndex, direction) => {
151
+ if (!items.length) return -1;
152
+ if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {
153
+ if (direction === 1) return firstEnabledIndex();
154
+ for (let index = items.length - 1; index >= 0; index--) {
155
+ if (!items[index].disabled) return index;
156
+ }
157
+ return -1;
158
+ }
159
+ for (let offset = 1; offset <= items.length; offset++) {
160
+ const index = (fromIndex + direction * offset + items.length) % items.length;
161
+ if (!items[index]?.disabled) return index;
162
+ }
163
+ return -1;
164
+ };
165
+ const findTypeaheadIndex = (search, fromIndex) => {
166
+ const normalizedSearch = search.trim().toLocaleLowerCase();
167
+ if (!normalizedSearch) return -1;
168
+ const start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;
169
+ for (let offset = 1; offset <= items.length; offset++) {
170
+ const index = (start + offset) % items.length;
171
+ const item = items[index];
172
+ const label = item.textValue || getSelectLabelText(item.label) || item.value;
173
+ if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {
174
+ return index;
175
+ }
176
+ }
177
+ return -1;
178
+ };
179
+ return {
180
+ subscribe(listener) {
181
+ listeners.add(listener);
182
+ return () => {
183
+ listeners.delete(listener);
184
+ };
185
+ },
186
+ registerItem,
187
+ registerLabel,
188
+ getItems,
189
+ getItem,
190
+ getIndex,
191
+ getNodes,
192
+ firstEnabledIndex,
193
+ nextEnabledIndex,
194
+ findTypeaheadIndex,
195
+ getDisabledIndices: () => items.flatMap((item, index) => item.disabled ? [index] : []),
196
+ getTypeaheadLabels: () => items.map((item) => item.textValue || getSelectLabelText(item.label) || item.value)
197
+ };
198
+ }
199
+ function normalizeSelectSelection(mode, value) {
200
+ if (mode === "single") {
201
+ return typeof value === "string" ? value : "";
202
+ }
203
+ const values = Array.isArray(value) ? value : [];
204
+ return [...new Set(values)];
205
+ }
206
+ function selectedValuesFromSelection(mode, value) {
207
+ const normalized = normalizeSelectSelection(mode, value);
208
+ return mode === "multiple" ? normalized : normalized ? [normalized] : [];
209
+ }
210
+ function createSelectSelectionController({ mode: initialMode, value: initialValue, registry }) {
211
+ let mode = initialMode;
212
+ let value = normalizeSelectSelection(mode, initialValue);
213
+ let activeIndex = null;
214
+ const selectedValues = () => selectedValuesFromSelection(mode, value);
215
+ const setMode = (nextMode) => {
216
+ if (mode === nextMode) return value;
217
+ mode = nextMode;
218
+ value = normalizeSelectSelection(mode, value);
219
+ return value;
220
+ };
221
+ const setValue = (nextValue) => {
222
+ value = normalizeSelectSelection(mode, nextValue);
223
+ return value;
224
+ };
225
+ const isSelected = (itemValue) => selectedValues().includes(itemValue);
226
+ const toggle = (itemValue) => {
227
+ const item = registry.getItem(itemValue);
228
+ if (!item || item.disabled) return value;
229
+ if (mode === "single") {
230
+ value = itemValue;
231
+ return value;
232
+ }
233
+ const current = selectedValues();
234
+ value = current.includes(itemValue) ? current.filter((currentValue) => currentValue !== itemValue) : [...current, itemValue];
235
+ return value;
236
+ };
237
+ const selectionAnchor = () => {
238
+ const values = selectedValues();
239
+ for (let index = values.length - 1; index >= 0; index--) {
240
+ const item = registry.getItem(values[index]);
241
+ if (item) return item;
242
+ }
243
+ const firstEnabledIndex = registry.firstEnabledIndex();
244
+ return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];
245
+ };
246
+ const selectionAnchorIndex = () => {
247
+ const anchor = selectionAnchor();
248
+ return anchor ? registry.getIndex(anchor.value) : -1;
249
+ };
250
+ const initialActiveIndex = () => {
251
+ const anchorIndex = selectionAnchorIndex();
252
+ const anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];
253
+ return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();
254
+ };
255
+ const moveActive = (direction) => {
256
+ const nextIndex = registry.nextEnabledIndex(activeIndex, direction);
257
+ activeIndex = nextIndex < 0 ? null : nextIndex;
258
+ return activeIndex == null ? void 0 : registry.getItems()[activeIndex];
259
+ };
260
+ return {
261
+ registry,
262
+ get mode() {
263
+ return mode;
264
+ },
265
+ get value() {
266
+ return value;
267
+ },
268
+ get activeIndex() {
269
+ return activeIndex;
270
+ },
271
+ get activeItem() {
272
+ return activeIndex == null ? void 0 : registry.getItems()[activeIndex];
273
+ },
274
+ get shouldCloseOnSelect() {
275
+ return mode === "single";
276
+ },
277
+ setMode,
278
+ setValue,
279
+ isSelected,
280
+ toggle,
281
+ selectionAnchor,
282
+ selectionAnchorIndex,
283
+ initialActiveIndex,
284
+ setActiveIndex(index) {
285
+ activeIndex = index;
286
+ },
287
+ moveActive
288
+ };
289
+ }
290
+ function getSelectListboxProps(mode) {
291
+ return {
292
+ role: "listbox",
293
+ "aria-multiselectable": mode === "multiple" ? true : void 0
294
+ };
295
+ }
296
+ function getSelectOptionProps(mode, selected, disabled, platform) {
297
+ if (platform === "native") {
298
+ return {
299
+ accessibilityRole: mode === "multiple" ? "checkbox" : "button",
300
+ accessibilityState: {
301
+ selected: mode === "single" ? selected : void 0,
302
+ checked: mode === "multiple" ? selected : void 0,
303
+ disabled
304
+ }
305
+ };
306
+ }
307
+ return {
308
+ role: "option",
309
+ "aria-selected": selected,
310
+ "aria-disabled": disabled || void 0
311
+ };
312
+ }
313
+
314
+ export { createSelectItemRegistry, createSelectSelectionController, getSelectLabelText, getSelectListboxProps, getSelectOptionProps, normalizeSelectSelection, selectedValuesFromSelection };
315
+ //# sourceMappingURL=selectionController.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionController.js","names":[],"sources":["esm/selectionController.js"],"sourcesContent":["function getSelectLabelText(label) {\n if (typeof label === \"string\" || typeof label === \"number\") {\n return String(label);\n }\n if (Array.isArray(label)) {\n return label.map(getSelectLabelText).join(\"\");\n }\n if (label && typeof label === \"object\" && \"props\" in label) {\n return getSelectLabelText(label.props?.children);\n }\n return \"\";\n}\nfunction createSelectItemRegistry(onChange) {\n const items = [];\n const labelRegistrations = /* @__PURE__ */ new Map();\n const explicitTextValues = /* @__PURE__ */ new Map();\n const itemNodes = /* @__PURE__ */ new Map();\n const listeners = /* @__PURE__ */ new Set();\n let indexByValue = null;\n const notify = () => {\n indexByValue = null;\n onChange?.();\n listeners.forEach((listener) => listener());\n };\n const getItems = () => items;\n const getItem = (value) => items.find((item) => item.value === value);\n const getIndex = (value) => {\n if (!indexByValue) {\n indexByValue = /* @__PURE__ */ new Map();\n items.forEach((item, index) => {\n if (!indexByValue.has(item.value)) indexByValue.set(item.value, index);\n });\n }\n return indexByValue.get(value) ?? -1;\n };\n const getNodes = () => items.map((item) => itemNodes.get(item.id) ?? null);\n const getRegisteredLabel = (value) => {\n const registrations = labelRegistrations.get(value);\n if (!registrations?.size) return void 0;\n const values = Array.from(registrations.values());\n return values[values.length - 1];\n };\n const applyRegisteredLabel = (value) => {\n const registeredLabel = getRegisteredLabel(value);\n let changed = false;\n for (const item of items) {\n if (item.value !== value) continue;\n const nextLabel = registeredLabel?.label;\n const nextTextValue = explicitTextValues.get(item.id) || registeredLabel?.textValue;\n if (item.label !== nextLabel || item.textValue !== nextTextValue) {\n item.label = nextLabel;\n item.textValue = nextTextValue;\n changed = true;\n }\n }\n if (changed) notify();\n };\n const syncNodeOrder = () => {\n items.sort((a, b) => {\n const aNode = itemNodes.get(a.id);\n const bNode = itemNodes.get(b.id);\n if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== \"function\") {\n return 0;\n }\n const position = aNode.compareDocumentPosition(bNode);\n if (position & 4) return -1;\n if (position & 2) return 1;\n return 0;\n });\n };\n const registerItem = (item) => {\n const id = Symbol(item.value);\n const registeredLabel = getRegisteredLabel(item.value);\n const registeredItem = {\n ...item,\n ...registeredLabel,\n textValue: item.textValue ?? registeredLabel?.textValue,\n id\n };\n explicitTextValues.set(id, item.textValue);\n items.push(registeredItem);\n notify();\n return {\n id,\n update(next) {\n const index = items.findIndex((current2) => current2.id === id);\n if (index < 0) return;\n const current = items[index];\n if (\"textValue\" in next) {\n explicitTextValues.set(id, next.textValue);\n }\n const nextItem = { ...current, ...next };\n if (next.value !== void 0 && next.value !== current.value) {\n const nextLabel = getRegisteredLabel(next.value);\n nextItem.label = nextLabel?.label;\n }\n const explicitTextValue = explicitTextValues.get(id);\n nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);\n const changed = Object.entries(next).some(\n ([key, value]) => current[key] !== value\n );\n const textValueChanged = current.textValue !== nextItem.textValue;\n if (!changed && !textValueChanged) return;\n items[index] = nextItem;\n notify();\n },\n setNode(node) {\n if ((itemNodes.get(id) ?? null) === (node ?? null)) return;\n if (node) {\n itemNodes.set(id, node);\n syncNodeOrder();\n } else {\n itemNodes.delete(id);\n }\n notify();\n },\n unregister() {\n const index = items.findIndex((current) => current.id === id);\n if (index < 0) return;\n items.splice(index, 1);\n explicitTextValues.delete(id);\n itemNodes.delete(id);\n notify();\n }\n };\n };\n const registerLabel = (value, label, textValue) => {\n const id = Symbol(value);\n const normalizedTextValue = textValue || getSelectLabelText(label) || value;\n const registrations = labelRegistrations.get(value) ?? (() => {\n const next = /* @__PURE__ */ new Map();\n labelRegistrations.set(value, next);\n return next;\n })();\n registrations.set(id, { label, textValue: normalizedTextValue });\n applyRegisteredLabel(value);\n return () => {\n registrations.delete(id);\n if (!registrations.size) {\n labelRegistrations.delete(value);\n }\n applyRegisteredLabel(value);\n };\n };\n const firstEnabledIndex = () => items.findIndex((item) => !item.disabled);\n const nextEnabledIndex = (fromIndex, direction) => {\n if (!items.length) return -1;\n if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {\n if (direction === 1) return firstEnabledIndex();\n for (let index = items.length - 1; index >= 0; index--) {\n if (!items[index].disabled) return index;\n }\n return -1;\n }\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (fromIndex + direction * offset + items.length) % items.length;\n if (!items[index]?.disabled) return index;\n }\n return -1;\n };\n const findTypeaheadIndex = (search, fromIndex) => {\n const normalizedSearch = search.trim().toLocaleLowerCase();\n if (!normalizedSearch) return -1;\n const start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (start + offset) % items.length;\n const item = items[index];\n const label = item.textValue || getSelectLabelText(item.label) || item.value;\n if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {\n return index;\n }\n }\n return -1;\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n registerItem,\n registerLabel,\n getItems,\n getItem,\n getIndex,\n getNodes,\n firstEnabledIndex,\n nextEnabledIndex,\n findTypeaheadIndex,\n getDisabledIndices: () => items.flatMap((item, index) => item.disabled ? [index] : []),\n getTypeaheadLabels: () => items.map((item) => item.textValue || getSelectLabelText(item.label) || item.value)\n };\n}\nfunction normalizeSelectSelection(mode, value) {\n if (mode === \"single\") {\n return typeof value === \"string\" ? value : \"\";\n }\n const values = Array.isArray(value) ? value : [];\n return [...new Set(values)];\n}\nfunction selectedValuesFromSelection(mode, value) {\n const normalized = normalizeSelectSelection(mode, value);\n return mode === \"multiple\" ? normalized : normalized ? [normalized] : [];\n}\nfunction createSelectSelectionController({\n mode: initialMode,\n value: initialValue,\n registry\n}) {\n let mode = initialMode;\n let value = normalizeSelectSelection(mode, initialValue);\n let activeIndex = null;\n const selectedValues = () => selectedValuesFromSelection(mode, value);\n const setMode = (nextMode) => {\n if (mode === nextMode) return value;\n mode = nextMode;\n value = normalizeSelectSelection(mode, value);\n return value;\n };\n const setValue = (nextValue) => {\n value = normalizeSelectSelection(mode, nextValue);\n return value;\n };\n const isSelected = (itemValue) => selectedValues().includes(itemValue);\n const toggle = (itemValue) => {\n const item = registry.getItem(itemValue);\n if (!item || item.disabled) return value;\n if (mode === \"single\") {\n value = itemValue;\n return value;\n }\n const current = selectedValues();\n value = current.includes(itemValue) ? current.filter((currentValue) => currentValue !== itemValue) : [...current, itemValue];\n return value;\n };\n const selectionAnchor = () => {\n const values = selectedValues();\n for (let index = values.length - 1; index >= 0; index--) {\n const item = registry.getItem(values[index]);\n if (item) return item;\n }\n const firstEnabledIndex = registry.firstEnabledIndex();\n return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];\n };\n const selectionAnchorIndex = () => {\n const anchor = selectionAnchor();\n return anchor ? registry.getIndex(anchor.value) : -1;\n };\n const initialActiveIndex = () => {\n const anchorIndex = selectionAnchorIndex();\n const anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];\n return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();\n };\n const moveActive = (direction) => {\n const nextIndex = registry.nextEnabledIndex(activeIndex, direction);\n activeIndex = nextIndex < 0 ? null : nextIndex;\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n };\n return {\n registry,\n get mode() {\n return mode;\n },\n get value() {\n return value;\n },\n get activeIndex() {\n return activeIndex;\n },\n get activeItem() {\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n },\n get shouldCloseOnSelect() {\n return mode === \"single\";\n },\n setMode,\n setValue,\n isSelected,\n toggle,\n selectionAnchor,\n selectionAnchorIndex,\n initialActiveIndex,\n setActiveIndex(index) {\n activeIndex = index;\n },\n moveActive\n };\n}\nfunction getSelectListboxProps(mode) {\n return {\n role: \"listbox\",\n \"aria-multiselectable\": mode === \"multiple\" ? true : void 0\n };\n}\nfunction getSelectOptionProps(mode, selected, disabled, platform) {\n if (platform === \"native\") {\n return {\n accessibilityRole: mode === \"multiple\" ? \"checkbox\" : \"button\",\n accessibilityState: {\n selected: mode === \"single\" ? selected : void 0,\n checked: mode === \"multiple\" ? selected : void 0,\n disabled\n }\n };\n }\n return {\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || void 0\n };\n}\nexport {\n createSelectItemRegistry,\n createSelectSelectionController,\n getSelectLabelText,\n getSelectListboxProps,\n getSelectOptionProps,\n normalizeSelectSelection,\n selectedValuesFromSelection\n};\n//# sourceMappingURL=selectionController.js.map\n"],"mappings":";AAAA,SAAS,mBAAmB,OAAO;CACjC,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;EAC1D,OAAO,OAAO,KAAK;CACrB;CACA,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,OAAO,MAAM,IAAI,kBAAkB,CAAC,CAAC,KAAK,EAAE;CAC9C;CACA,IAAI,SAAS,OAAO,UAAU,YAAY,WAAW,OAAO;EAC1D,OAAO,mBAAmB,MAAM,OAAO,QAAQ;CACjD;CACA,OAAO;AACT;AACA,SAAS,yBAAyB,UAAU;CAC1C,MAAM,QAAQ,CAAC;CACf,MAAM,qCAAqC,IAAI,IAAI;CACnD,MAAM,qCAAqC,IAAI,IAAI;CACnD,MAAM,4BAA4B,IAAI,IAAI;CAC1C,MAAM,4BAA4B,IAAI,IAAI;CAC1C,IAAI,eAAe;CACnB,MAAM,eAAe;EACnB,eAAe;EACf,WAAW;EACX,UAAU,SAAS,aAAa,SAAS,CAAC;CAC5C;CACA,MAAM,iBAAiB;CACvB,MAAM,WAAW,UAAU,MAAM,MAAM,SAAS,KAAK,UAAU,KAAK;CACpE,MAAM,YAAY,UAAU;EAC1B,IAAI,CAAC,cAAc;GACjB,+BAA+B,IAAI,IAAI;GACvC,MAAM,SAAS,MAAM,UAAU;IAC7B,IAAI,CAAC,aAAa,IAAI,KAAK,KAAK,GAAG,aAAa,IAAI,KAAK,OAAO,KAAK;GACvE,CAAC;EACH;EACA,OAAO,aAAa,IAAI,KAAK,KAAK,CAAC;CACrC;CACA,MAAM,iBAAiB,MAAM,KAAK,SAAS,UAAU,IAAI,KAAK,EAAE,KAAK,IAAI;CACzE,MAAM,sBAAsB,UAAU;EACpC,MAAM,gBAAgB,mBAAmB,IAAI,KAAK;EAClD,IAAI,CAAC,eAAe,MAAM,OAAO,KAAK;EACtC,MAAM,SAAS,MAAM,KAAK,cAAc,OAAO,CAAC;EAChD,OAAO,OAAO,OAAO,SAAS;CAChC;CACA,MAAM,wBAAwB,UAAU;EACtC,MAAM,kBAAkB,mBAAmB,KAAK;EAChD,IAAI,UAAU;EACd,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI,KAAK,UAAU,OAAO;GAC1B,MAAM,YAAY,iBAAiB;GACnC,MAAM,gBAAgB,mBAAmB,IAAI,KAAK,EAAE,KAAK,iBAAiB;GAC1E,IAAI,KAAK,UAAU,aAAa,KAAK,cAAc,eAAe;IAChE,KAAK,QAAQ;IACb,KAAK,YAAY;IACjB,UAAU;GACZ;EACF;EACA,IAAI,SAAS,OAAO;CACtB;CACA,MAAM,sBAAsB;EAC1B,MAAM,MAAM,GAAG,MAAM;GACnB,MAAM,QAAQ,UAAU,IAAI,EAAE,EAAE;GAChC,MAAM,QAAQ,UAAU,IAAI,EAAE,EAAE;GAChC,IAAI,CAAC,SAAS,CAAC,SAAS,OAAO,MAAM,4BAA4B,YAAY;IAC3E,OAAO;GACT;GACA,MAAM,WAAW,MAAM,wBAAwB,KAAK;GACpD,IAAI,WAAW,GAAG,OAAO,CAAC;GAC1B,IAAI,WAAW,GAAG,OAAO;GACzB,OAAO;EACT,CAAC;CACH;CACA,MAAM,gBAAgB,SAAS;EAC7B,MAAM,KAAK,OAAO,KAAK,KAAK;EAC5B,MAAM,kBAAkB,mBAAmB,KAAK,KAAK;EACrD,MAAM,iBAAiB;GACrB,GAAG;GACH,GAAG;GACH,WAAW,KAAK,aAAa,iBAAiB;GAC9C;EACF;EACA,mBAAmB,IAAI,IAAI,KAAK,SAAS;EACzC,MAAM,KAAK,cAAc;EACzB,OAAO;EACP,OAAO;GACL;GACA,OAAO,MAAM;IACX,MAAM,QAAQ,MAAM,WAAW,aAAa,SAAS,OAAO,EAAE;IAC9D,IAAI,QAAQ,GAAG;IACf,MAAM,UAAU,MAAM;IACtB,IAAI,eAAe,MAAM;KACvB,mBAAmB,IAAI,IAAI,KAAK,SAAS;IAC3C;IACA,MAAM,WAAW;KAAE,GAAG;KAAS,GAAG;IAAK;IACvC,IAAI,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,QAAQ,OAAO;KACzD,MAAM,YAAY,mBAAmB,KAAK,KAAK;KAC/C,SAAS,QAAQ,WAAW;IAC9B;IACA,MAAM,oBAAoB,mBAAmB,IAAI,EAAE;IACnD,SAAS,YAAY,qBAAqB,mBAAmB,SAAS,KAAK,MAAM,SAAS,QAAQ,SAAS,QAAQ,KAAK;IACxH,MAAM,UAAU,OAAO,QAAQ,IAAI,CAAC,CAAC,MAClC,CAAC,KAAK,WAAW,QAAQ,SAAS,KACrC;IACA,MAAM,mBAAmB,QAAQ,cAAc,SAAS;IACxD,IAAI,CAAC,WAAW,CAAC,kBAAkB;IACnC,MAAM,SAAS;IACf,OAAO;GACT;GACA,QAAQ,MAAM;IACZ,KAAK,UAAU,IAAI,EAAE,KAAK,WAAW,QAAQ,OAAO;IACpD,IAAI,MAAM;KACR,UAAU,IAAI,IAAI,IAAI;KACtB,cAAc;IAChB,OAAO;KACL,UAAU,OAAO,EAAE;IACrB;IACA,OAAO;GACT;GACA,aAAa;IACX,MAAM,QAAQ,MAAM,WAAW,YAAY,QAAQ,OAAO,EAAE;IAC5D,IAAI,QAAQ,GAAG;IACf,MAAM,OAAO,OAAO,CAAC;IACrB,mBAAmB,OAAO,EAAE;IAC5B,UAAU,OAAO,EAAE;IACnB,OAAO;GACT;EACF;CACF;CACA,MAAM,iBAAiB,OAAO,OAAO,cAAc;EACjD,MAAM,KAAK,OAAO,KAAK;EACvB,MAAM,sBAAsB,aAAa,mBAAmB,KAAK,KAAK;EACtE,MAAM,gBAAgB,mBAAmB,IAAI,KAAK,YAAY;GAC5D,MAAM,uBAAuB,IAAI,IAAI;GACrC,mBAAmB,IAAI,OAAO,IAAI;GAClC,OAAO;EACT,EAAC,CAAE;EACH,cAAc,IAAI,IAAI;GAAE;GAAO,WAAW;EAAoB,CAAC;EAC/D,qBAAqB,KAAK;EAC1B,aAAa;GACX,cAAc,OAAO,EAAE;GACvB,IAAI,CAAC,cAAc,MAAM;IACvB,mBAAmB,OAAO,KAAK;GACjC;GACA,qBAAqB,KAAK;EAC5B;CACF;CACA,MAAM,0BAA0B,MAAM,WAAW,SAAS,CAAC,KAAK,QAAQ;CACxE,MAAM,oBAAoB,WAAW,cAAc;EACjD,IAAI,CAAC,MAAM,QAAQ,OAAO,CAAC;EAC3B,IAAI,aAAa,QAAQ,YAAY,KAAK,aAAa,MAAM,QAAQ;GACnE,IAAI,cAAc,GAAG,OAAO,kBAAkB;GAC9C,KAAK,IAAI,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS;IACtD,IAAI,CAAC,MAAM,MAAM,CAAC,UAAU,OAAO;GACrC;GACA,OAAO,CAAC;EACV;EACA,KAAK,IAAI,SAAS,GAAG,UAAU,MAAM,QAAQ,UAAU;GACrD,MAAM,SAAS,YAAY,YAAY,SAAS,MAAM,UAAU,MAAM;GACtE,IAAI,CAAC,MAAM,MAAM,EAAE,UAAU,OAAO;EACtC;EACA,OAAO,CAAC;CACV;CACA,MAAM,sBAAsB,QAAQ,cAAc;EAChD,MAAM,mBAAmB,OAAO,KAAK,CAAC,CAAC,kBAAkB;EACzD,IAAI,CAAC,kBAAkB,OAAO,CAAC;EAC/B,MAAM,QAAQ,aAAa,QAAQ,YAAY,IAAI,CAAC,IAAI;EACxD,KAAK,IAAI,SAAS,GAAG,UAAU,MAAM,QAAQ,UAAU;GACrD,MAAM,SAAS,QAAQ,UAAU,MAAM;GACvC,MAAM,OAAO,MAAM;GACnB,MAAM,QAAQ,KAAK,aAAa,mBAAmB,KAAK,KAAK,KAAK,KAAK;GACvE,IAAI,CAAC,KAAK,YAAY,MAAM,kBAAkB,CAAC,CAAC,WAAW,gBAAgB,GAAG;IAC5E,OAAO;GACT;EACF;EACA,OAAO,CAAC;CACV;CACA,OAAO;EACL,UAAU,UAAU;GAClB,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,0BAA0B,MAAM,SAAS,MAAM,UAAU,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;EACrF,0BAA0B,MAAM,KAAK,SAAS,KAAK,aAAa,mBAAmB,KAAK,KAAK,KAAK,KAAK,KAAK;CAC9G;AACF;AACA,SAAS,yBAAyB,MAAM,OAAO;CAC7C,IAAI,SAAS,UAAU;EACrB,OAAO,OAAO,UAAU,WAAW,QAAQ;CAC7C;CACA,MAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;CAC/C,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAC5B;AACA,SAAS,4BAA4B,MAAM,OAAO;CAChD,MAAM,aAAa,yBAAyB,MAAM,KAAK;CACvD,OAAO,SAAS,aAAa,aAAa,aAAa,CAAC,UAAU,IAAI,CAAC;AACzE;AACA,SAAS,gCAAgC,EACvC,MAAM,aACN,OAAO,cACP,YACC;CACD,IAAI,OAAO;CACX,IAAI,QAAQ,yBAAyB,MAAM,YAAY;CACvD,IAAI,cAAc;CAClB,MAAM,uBAAuB,4BAA4B,MAAM,KAAK;CACpE,MAAM,WAAW,aAAa;EAC5B,IAAI,SAAS,UAAU,OAAO;EAC9B,OAAO;EACP,QAAQ,yBAAyB,MAAM,KAAK;EAC5C,OAAO;CACT;CACA,MAAM,YAAY,cAAc;EAC9B,QAAQ,yBAAyB,MAAM,SAAS;EAChD,OAAO;CACT;CACA,MAAM,cAAc,cAAc,eAAe,CAAC,CAAC,SAAS,SAAS;CACrE,MAAM,UAAU,cAAc;EAC5B,MAAM,OAAO,SAAS,QAAQ,SAAS;EACvC,IAAI,CAAC,QAAQ,KAAK,UAAU,OAAO;EACnC,IAAI,SAAS,UAAU;GACrB,QAAQ;GACR,OAAO;EACT;EACA,MAAM,UAAU,eAAe;EAC/B,QAAQ,QAAQ,SAAS,SAAS,IAAI,QAAQ,QAAQ,iBAAiB,iBAAiB,SAAS,IAAI,CAAC,GAAG,SAAS,SAAS;EAC3H,OAAO;CACT;CACA,MAAM,wBAAwB;EAC5B,MAAM,SAAS,eAAe;EAC9B,KAAK,IAAI,QAAQ,OAAO,SAAS,GAAG,SAAS,GAAG,SAAS;GACvD,MAAM,OAAO,SAAS,QAAQ,OAAO,MAAM;GAC3C,IAAI,MAAM,OAAO;EACnB;EACA,MAAM,oBAAoB,SAAS,kBAAkB;EACrD,OAAO,oBAAoB,IAAI,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC;CAC9D;CACA,MAAM,6BAA6B;EACjC,MAAM,SAAS,gBAAgB;EAC/B,OAAO,SAAS,SAAS,SAAS,OAAO,KAAK,IAAI,CAAC;CACrD;CACA,MAAM,2BAA2B;EAC/B,MAAM,cAAc,qBAAqB;EACzC,MAAM,SAAS,cAAc,IAAI,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC;EAC9D,OAAO,UAAU,CAAC,OAAO,WAAW,cAAc,SAAS,kBAAkB;CAC/E;CACA,MAAM,cAAc,cAAc;EAChC,MAAM,YAAY,SAAS,iBAAiB,aAAa,SAAS;EAClE,cAAc,YAAY,IAAI,OAAO;EACrC,OAAO,eAAe,OAAO,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC;CAC5D;CACA,OAAO;EACL;EACA,IAAI,OAAO;GACT,OAAO;EACT;EACA,IAAI,QAAQ;GACV,OAAO;EACT;EACA,IAAI,cAAc;GAChB,OAAO;EACT;EACA,IAAI,aAAa;GACf,OAAO,eAAe,OAAO,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC;EAC5D;EACA,IAAI,sBAAsB;GACxB,OAAO,SAAS;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,eAAe,OAAO;GACpB,cAAc;EAChB;EACA;CACF;AACF;AACA,SAAS,sBAAsB,MAAM;CACnC,OAAO;EACL,MAAM;EACN,wBAAwB,SAAS,aAAa,OAAO,KAAK;CAC5D;AACF;AACA,SAAS,qBAAqB,MAAM,UAAU,UAAU,UAAU;CAChE,IAAI,aAAa,UAAU;EACzB,OAAO;GACL,mBAAmB,SAAS,aAAa,aAAa;GACtD,oBAAoB;IAClB,UAAU,SAAS,WAAW,WAAW,KAAK;IAC9C,SAAS,SAAS,aAAa,WAAW,KAAK;IAC/C;GACF;EACF;CACF;CACA,OAAO;EACL,MAAM;EACN,iBAAiB;EACjB,iBAAiB,YAAY,KAAK;CACpC;AACF"}