@epic-web/workshop-app 4.6.6 → 4.7.0

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 (809) hide show
  1. package/build/client/assets/{_-COWH0sBh.js → _-Bd2gNcck.js} +2 -2
  2. package/build/client/assets/{_-COWH0sBh.js.map → _-Bd2gNcck.js.map} +1 -1
  3. package/build/client/assets/{_exerciseNumber-wyz3vbhs.js → _exerciseNumber-CFOo2dQj.js} +2 -2
  4. package/build/client/assets/{_exerciseNumber-wyz3vbhs.js.map → _exerciseNumber-CFOo2dQj.js.map} +1 -1
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js → _exerciseNumber_._stepNumber-DCbWNWpZ.js} +2 -2
  6. package/build/client/assets/{_exerciseNumber_._stepNumber-C37pli7_.js.map → _exerciseNumber_._stepNumber-DCbWNWpZ.js.map} +1 -1
  7. package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js +2 -0
  8. package/build/client/assets/_exerciseNumber_.finished-P7xMAtl1.js.map +1 -0
  9. package/build/client/assets/_layout-Bdd3mpVx.js +2 -0
  10. package/build/client/assets/_layout-Bdd3mpVx.js.map +1 -0
  11. package/build/client/assets/_layout-DHBLG7Ti.js +6 -0
  12. package/build/client/assets/_layout-DHBLG7Ti.js.map +1 -0
  13. package/build/client/assets/_layout-DaZNLfOL.js +2 -0
  14. package/build/client/assets/{_layout-BR-Qyofe.js.map → _layout-DaZNLfOL.js.map} +1 -1
  15. package/build/client/assets/{_layout-D0zbQZjf.js → _layout-rEQoj43V.js} +2 -2
  16. package/build/client/assets/{_layout-D0zbQZjf.js.map → _layout-rEQoj43V.js.map} +1 -1
  17. package/build/client/assets/{account-DesvwOeg.js → account-CnLkZd_O.js} +2 -2
  18. package/build/client/assets/{account-DesvwOeg.js.map → account-CnLkZd_O.js.map} +1 -1
  19. package/build/client/assets/{button-BfWwrI9B.js → button-CyZl24U2.js} +2 -2
  20. package/build/client/assets/{button-BfWwrI9B.js.map → button-CyZl24U2.js.map} +1 -1
  21. package/build/client/assets/{client-hints-BKxdo5Js.js → client-hints-BE5mB4r0.js} +2 -2
  22. package/build/client/assets/{client-hints-BKxdo5Js.js.map → client-hints-BE5mB4r0.js.map} +1 -1
  23. package/build/client/assets/components-BMzmvxYw.js +166 -0
  24. package/build/client/assets/components-BMzmvxYw.js.map +1 -0
  25. package/build/client/assets/diff-P5f7-8E4.js +2 -0
  26. package/build/client/assets/diff-P5f7-8E4.js.map +1 -0
  27. package/build/client/assets/diff-PfwTHr6-.js +2 -0
  28. package/build/client/assets/{diff-KDzcgGYL.js.map → diff-PfwTHr6-.js.map} +1 -1
  29. package/build/client/assets/{discord-0kv66Q6F.js → discord-COPE8EOZ.js} +2 -2
  30. package/build/client/assets/{discord-0kv66Q6F.js.map → discord-COPE8EOZ.js.map} +1 -1
  31. package/build/client/assets/discord-DIog7bBO.js +2 -0
  32. package/build/client/assets/discord-DIog7bBO.js.map +1 -0
  33. package/build/client/assets/entry.client-B0vV2fsa.js +43 -0
  34. package/build/client/assets/entry.client-B0vV2fsa.js.map +1 -0
  35. package/build/client/assets/{epic-video-BwtXsHGU.js → epic-video-CYnG2ziQ.js} +128 -128
  36. package/build/client/assets/epic-video-CYnG2ziQ.js.map +1 -0
  37. package/build/client/assets/{error-boundary-Bcric_4t.js → error-boundary-DxfVshQ5.js} +2 -2
  38. package/build/client/assets/{error-boundary-Bcric_4t.js.map → error-boundary-DxfVshQ5.js.map} +1 -1
  39. package/build/client/assets/finished-DP5ynR5u.js +2 -0
  40. package/build/client/assets/finished-DP5ynR5u.js.map +1 -0
  41. package/build/client/assets/index-4E9_Sx3m.js +42 -0
  42. package/build/client/assets/index-4E9_Sx3m.js.map +1 -0
  43. package/build/client/assets/{index-Bg9MMnnf.js → index-90bzTYUX.js} +2 -2
  44. package/build/client/assets/index-90bzTYUX.js.map +1 -0
  45. package/build/client/assets/{index-BQRtqn3g.js → index-BXefr1BB.js} +2 -2
  46. package/build/client/assets/{index-BQRtqn3g.js.map → index-BXefr1BB.js.map} +1 -1
  47. package/build/client/assets/index-Czg1ruVn.js +37 -0
  48. package/build/client/assets/index-Czg1ruVn.js.map +1 -0
  49. package/build/client/assets/{index-9nNr0Zqr.js → index-D6ukHE4T.js} +2 -2
  50. package/build/client/assets/{index-9nNr0Zqr.js.map → index-D6ukHE4T.js.map} +1 -1
  51. package/build/client/assets/index-Doi37489.js +3 -0
  52. package/build/client/assets/index-Doi37489.js.map +1 -0
  53. package/build/client/assets/{loading-C9f_vBoM.js → loading-CNWJVymJ.js} +2 -2
  54. package/build/client/assets/{loading-C9f_vBoM.js.map → loading-CNWJVymJ.js.map} +1 -1
  55. package/build/client/assets/{login-D8zyjBAb.js → login-DxG854vQ.js} +2 -2
  56. package/build/client/assets/{login-D8zyjBAb.js.map → login-DxG854vQ.js.map} +1 -1
  57. package/build/client/assets/manifest-a1fde59b.js +1 -0
  58. package/build/client/assets/mdx-CR7Me1v_.js +2 -0
  59. package/build/client/assets/{mdx-BYvGbvEr.js.map → mdx-CR7Me1v_.js.map} +1 -1
  60. package/build/client/assets/misc-CypjEQkt.js +2 -0
  61. package/build/client/assets/misc-CypjEQkt.js.map +1 -0
  62. package/build/client/assets/{nav-chevrons-DOYtx9XE.js → nav-chevrons-BYKwyIgG.js} +2 -2
  63. package/build/client/assets/{nav-chevrons-DOYtx9XE.js.map → nav-chevrons-BYKwyIgG.js.map} +1 -1
  64. package/build/client/assets/{onboarding-euWyXpCL.js → onboarding-b9lcdh4n.js} +2 -2
  65. package/build/client/assets/{onboarding-euWyXpCL.js.map → onboarding-b9lcdh4n.js.map} +1 -1
  66. package/build/client/assets/{presence-BJPzwbUy.js → presence-DXXVJbaH.js} +2 -2
  67. package/build/client/assets/{presence-BJPzwbUy.js.map → presence-DXXVJbaH.js.map} +1 -1
  68. package/build/client/assets/progress-B_mReZVE.js +2 -0
  69. package/build/client/assets/progress-B_mReZVE.js.map +1 -0
  70. package/build/client/assets/{progress-bar-7LK87ZMh.js → progress-bar-DCrt7X4t.js} +2 -2
  71. package/build/client/assets/{progress-bar-7LK87ZMh.js.map → progress-bar-DCrt7X4t.js.map} +1 -1
  72. package/build/client/assets/{request-info-Dyls4H67.js → request-info-CUT0ULYN.js} +2 -2
  73. package/build/client/assets/{request-info-Dyls4H67.js.map → request-info-CUT0ULYN.js.map} +1 -1
  74. package/build/client/assets/{root-BQ7V6fP4.js → root-bgHbi7rA.js} +4 -4
  75. package/build/client/assets/root-bgHbi7rA.js.map +1 -0
  76. package/build/client/assets/{support-DUAHYT3r.js → support-DrY-qRGh.js} +2 -2
  77. package/build/client/assets/{support-DUAHYT3r.js.map → support-DrY-qRGh.js.map} +1 -1
  78. package/build/client/assets/tailwind-D2vjZZFL.css +1 -0
  79. package/build/client/assets/tooltip-CfmIzAYi.js +2 -0
  80. package/build/client/assets/tooltip-CfmIzAYi.js.map +1 -0
  81. package/build/client/assets/{use-event-source-aW6X9lN1.js → use-event-source-ySol3hbz.js} +2 -2
  82. package/build/client/assets/{use-event-source-aW6X9lN1.js.map → use-event-source-ySol3hbz.js.map} +1 -1
  83. package/build/client/assets/{user-73ocDYRe.js → user-C4QTtQw5.js} +2 -2
  84. package/build/client/assets/{user-73ocDYRe.js.map → user-C4QTtQw5.js.map} +1 -1
  85. package/build/server/index.js +841 -607
  86. package/build/server/index.js.map +1 -1
  87. package/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +65 -3
  88. package/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +65 -3
  89. package/node_modules/@babel/runtime/package.json +1 -28
  90. package/node_modules/@conform-to/dom/dom.d.ts +17 -5
  91. package/node_modules/@conform-to/dom/form.d.ts +221 -122
  92. package/node_modules/@conform-to/dom/index.d.ts +24 -2
  93. package/node_modules/@conform-to/dom/intent.d.ts +92 -60
  94. package/node_modules/@conform-to/dom/package.json +1 -1
  95. package/node_modules/@conform-to/dom/parse.d.ts +47 -27
  96. package/node_modules/@conform-to/dom/types.d.ts +17 -14
  97. package/node_modules/@conform-to/dom/util.d.ts +4 -1
  98. package/node_modules/@conform-to/react/context.d.ts +187 -59
  99. package/node_modules/@conform-to/react/context.js +3 -5
  100. package/node_modules/@conform-to/react/context.mjs +4 -6
  101. package/node_modules/@conform-to/react/experimental.d.ts +0 -0
  102. package/node_modules/@conform-to/react/hooks.d.ts +53 -24
  103. package/node_modules/@conform-to/react/index.d.ts +28 -4
  104. package/node_modules/@conform-to/react/integrations.js +14 -1
  105. package/node_modules/@conform-to/react/integrations.mjs +14 -1
  106. package/node_modules/@conform-to/react/package.json +2 -2
  107. package/node_modules/@conform-to/zod/coercion.d.ts +14 -4
  108. package/node_modules/@conform-to/zod/constraint.d.ts +3 -1
  109. package/node_modules/@conform-to/zod/package.json +2 -2
  110. package/node_modules/@conform-to/zod/parse.d.ts +43 -25
  111. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs +1 -1
  112. package/node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs +14 -3
  113. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts +51 -51
  114. package/node_modules/@floating-ui/core/dist/floating-ui.core.d.ts +51 -51
  115. package/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js +14 -3
  116. package/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +14 -3
  117. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.js +14 -3
  118. package/node_modules/@floating-ui/core/dist/floating-ui.core.umd.min.js +1 -1
  119. package/node_modules/@floating-ui/core/package.json +2 -2
  120. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.min.mjs +1 -1
  121. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs +12 -11
  122. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts +11 -8
  123. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.ts +11 -8
  124. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +1 -12
  125. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +1 -12
  126. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.js +12 -11
  127. package/node_modules/@floating-ui/dom/dist/floating-ui.dom.umd.min.js +1 -1
  128. package/node_modules/@floating-ui/dom/package.json +2 -2
  129. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts +12 -4
  130. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.ts +12 -4
  131. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js +1 -0
  132. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs +1 -0
  133. package/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.umd.js +1 -0
  134. package/node_modules/@floating-ui/react-dom/package.json +1 -1
  135. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts +11 -6
  136. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.ts +11 -6
  137. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts +2 -0
  138. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.ts +2 -0
  139. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.esm.js +13 -1
  140. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +13 -1
  141. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.js +13 -0
  142. package/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.umd.min.js +1 -1
  143. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.d.ts +2 -0
  144. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.esm.js +13 -1
  145. package/node_modules/@floating-ui/utils/dom/floating-ui.utils.dom.umd.js +13 -0
  146. package/node_modules/@floating-ui/utils/package.json +1 -1
  147. package/node_modules/@radix-ui/number/dist/index.d.mts +2 -2
  148. package/node_modules/@radix-ui/number/dist/index.d.ts +2 -2
  149. package/node_modules/@radix-ui/number/dist/index.js +28 -10
  150. package/node_modules/@radix-ui/number/dist/index.js.map +7 -1
  151. package/node_modules/@radix-ui/number/dist/index.mjs +6 -7
  152. package/node_modules/@radix-ui/number/dist/index.mjs.map +7 -1
  153. package/node_modules/@radix-ui/number/package.json +1 -4
  154. package/node_modules/@radix-ui/primitive/dist/index.d.mts +2 -2
  155. package/node_modules/@radix-ui/primitive/dist/index.d.ts +2 -2
  156. package/node_modules/@radix-ui/primitive/dist/index.js +33 -13
  157. package/node_modules/@radix-ui/primitive/dist/index.js.map +7 -1
  158. package/node_modules/@radix-ui/primitive/dist/index.mjs +11 -10
  159. package/node_modules/@radix-ui/primitive/dist/index.mjs.map +7 -1
  160. package/node_modules/@radix-ui/primitive/package.json +1 -4
  161. package/node_modules/@radix-ui/react-accordion/dist/index.d.mts +40 -28
  162. package/node_modules/@radix-ui/react-accordion/dist/index.d.ts +40 -28
  163. package/node_modules/@radix-ui/react-accordion/dist/index.js +324 -316
  164. package/node_modules/@radix-ui/react-accordion/dist/index.js.map +7 -1
  165. package/node_modules/@radix-ui/react-accordion/dist/index.mjs +293 -300
  166. package/node_modules/@radix-ui/react-accordion/dist/index.mjs.map +7 -1
  167. package/node_modules/@radix-ui/react-accordion/package.json +12 -13
  168. package/node_modules/@radix-ui/react-arrow/dist/index.d.mts +8 -8
  169. package/node_modules/@radix-ui/react-arrow/dist/index.d.ts +8 -8
  170. package/node_modules/@radix-ui/react-arrow/dist/index.js +57 -37
  171. package/node_modules/@radix-ui/react-arrow/dist/index.js.map +7 -1
  172. package/node_modules/@radix-ui/react-arrow/dist/index.mjs +25 -30
  173. package/node_modules/@radix-ui/react-arrow/dist/index.mjs.map +7 -1
  174. package/node_modules/@radix-ui/react-arrow/package.json +4 -5
  175. package/node_modules/@radix-ui/react-collapsible/dist/index.d.mts +27 -16
  176. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts +27 -16
  177. package/node_modules/@radix-ui/react-collapsible/dist/index.js +176 -167
  178. package/node_modules/@radix-ui/react-collapsible/dist/index.js.map +7 -1
  179. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs +143 -153
  180. package/node_modules/@radix-ui/react-collapsible/dist/index.mjs.map +7 -1
  181. package/node_modules/@radix-ui/react-collapsible/package.json +11 -12
  182. package/node_modules/@radix-ui/react-collection/dist/index.d.mts +27 -15
  183. package/node_modules/@radix-ui/react-collection/dist/index.d.ts +27 -15
  184. package/node_modules/@radix-ui/react-collection/dist/index.js +99 -112
  185. package/node_modules/@radix-ui/react-collection/dist/index.js.map +7 -1
  186. package/node_modules/@radix-ui/react-collection/dist/index.mjs +68 -106
  187. package/node_modules/@radix-ui/react-collection/dist/index.mjs.map +7 -1
  188. package/node_modules/@radix-ui/react-collection/package.json +7 -8
  189. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.mts +5 -4
  190. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts +5 -4
  191. package/node_modules/@radix-ui/react-compose-refs/dist/index.js +47 -30
  192. package/node_modules/@radix-ui/react-compose-refs/dist/index.js.map +7 -1
  193. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs +16 -27
  194. package/node_modules/@radix-ui/react-compose-refs/dist/index.mjs.map +7 -1
  195. package/node_modules/@radix-ui/react-compose-refs/package.json +2 -5
  196. package/node_modules/@radix-ui/react-context/dist/index.d.mts +10 -8
  197. package/node_modules/@radix-ui/react-context/dist/index.d.ts +10 -8
  198. package/node_modules/@radix-ui/react-context/dist/index.js +104 -123
  199. package/node_modules/@radix-ui/react-context/dist/index.js.map +7 -1
  200. package/node_modules/@radix-ui/react-context/dist/index.mjs +73 -120
  201. package/node_modules/@radix-ui/react-context/dist/index.mjs.map +7 -1
  202. package/node_modules/@radix-ui/react-context/package.json +2 -5
  203. package/node_modules/@radix-ui/react-direction/dist/index.d.mts +6 -5
  204. package/node_modules/@radix-ui/react-direction/dist/index.d.ts +6 -5
  205. package/node_modules/@radix-ui/react-direction/dist/index.js +47 -24
  206. package/node_modules/@radix-ui/react-direction/dist/index.js.map +7 -1
  207. package/node_modules/@radix-ui/react-direction/dist/index.mjs +16 -20
  208. package/node_modules/@radix-ui/react-direction/dist/index.mjs.map +7 -1
  209. package/node_modules/@radix-ui/react-direction/package.json +2 -5
  210. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts +10 -10
  211. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts +10 -10
  212. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +230 -270
  213. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.js.map +7 -1
  214. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs +199 -261
  215. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs.map +7 -1
  216. package/node_modules/@radix-ui/react-dismissable-layer/package.json +9 -10
  217. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.mts +4 -4
  218. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts +4 -4
  219. package/node_modules/@radix-ui/react-focus-guards/dist/index.js +63 -39
  220. package/node_modules/@radix-ui/react-focus-guards/dist/index.js.map +7 -1
  221. package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs +32 -34
  222. package/node_modules/@radix-ui/react-focus-guards/dist/index.mjs.map +7 -1
  223. package/node_modules/@radix-ui/react-focus-guards/package.json +2 -5
  224. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.mts +8 -8
  225. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts +8 -8
  226. package/node_modules/@radix-ui/react-focus-scope/dist/index.js +228 -282
  227. package/node_modules/@radix-ui/react-focus-scope/dist/index.js.map +7 -1
  228. package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs +197 -275
  229. package/node_modules/@radix-ui/react-focus-scope/dist/index.mjs.map +7 -1
  230. package/node_modules/@radix-ui/react-focus-scope/package.json +6 -7
  231. package/node_modules/@radix-ui/react-id/dist/index.d.mts +2 -2
  232. package/node_modules/@radix-ui/react-id/dist/index.d.ts +2 -2
  233. package/node_modules/@radix-ui/react-id/dist/index.js +47 -26
  234. package/node_modules/@radix-ui/react-id/dist/index.js.map +7 -1
  235. package/node_modules/@radix-ui/react-id/dist/index.mjs +14 -22
  236. package/node_modules/@radix-ui/react-id/dist/index.mjs.map +7 -1
  237. package/node_modules/@radix-ui/react-id/package.json +3 -4
  238. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +48 -37
  239. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +48 -37
  240. package/node_modules/@radix-ui/react-popover/dist/index.js +319 -311
  241. package/node_modules/@radix-ui/react-popover/dist/index.js.map +7 -1
  242. package/node_modules/@radix-ui/react-popover/dist/index.mjs +288 -291
  243. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +7 -1
  244. package/node_modules/@radix-ui/react-popover/package.json +17 -18
  245. package/node_modules/@radix-ui/react-popper/dist/index.d.mts +36 -25
  246. package/node_modules/@radix-ui/react-popper/dist/index.d.ts +36 -25
  247. package/node_modules/@radix-ui/react-popper/dist/index.js +305 -321
  248. package/node_modules/@radix-ui/react-popper/dist/index.js.map +7 -1
  249. package/node_modules/@radix-ui/react-popper/dist/index.mjs +284 -305
  250. package/node_modules/@radix-ui/react-popper/dist/index.mjs.map +7 -1
  251. package/node_modules/@radix-ui/react-popper/package.json +12 -13
  252. package/node_modules/@radix-ui/react-portal/dist/index.d.mts +9 -9
  253. package/node_modules/@radix-ui/react-portal/dist/index.d.ts +9 -9
  254. package/node_modules/@radix-ui/react-portal/dist/index.js +52 -34
  255. package/node_modules/@radix-ui/react-portal/dist/index.js.map +7 -1
  256. package/node_modules/@radix-ui/react-portal/dist/index.mjs +21 -27
  257. package/node_modules/@radix-ui/react-portal/dist/index.mjs.map +7 -1
  258. package/node_modules/@radix-ui/react-portal/package.json +5 -5
  259. package/node_modules/@radix-ui/react-presence/dist/index.d.mts +5 -4
  260. package/node_modules/@radix-ui/react-presence/dist/index.d.ts +5 -4
  261. package/node_modules/@radix-ui/react-presence/dist/index.js +147 -132
  262. package/node_modules/@radix-ui/react-presence/dist/index.js.map +7 -1
  263. package/node_modules/@radix-ui/react-presence/dist/index.mjs +116 -129
  264. package/node_modules/@radix-ui/react-presence/dist/index.mjs.map +7 -1
  265. package/node_modules/@radix-ui/react-presence/package.json +5 -6
  266. package/node_modules/@radix-ui/react-primitive/dist/index.d.mts +8 -9
  267. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts +8 -9
  268. package/node_modules/@radix-ui/react-primitive/dist/index.js +73 -100
  269. package/node_modules/@radix-ui/react-primitive/dist/index.js.map +7 -1
  270. package/node_modules/@radix-ui/react-primitive/dist/index.mjs +42 -93
  271. package/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +7 -1
  272. package/node_modules/@radix-ui/react-primitive/package.json +4 -5
  273. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.mts +25 -13
  274. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts +25 -13
  275. package/node_modules/@radix-ui/react-roving-focus/dist/index.js +239 -247
  276. package/node_modules/@radix-ui/react-roving-focus/dist/index.js.map +7 -1
  277. package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs +209 -238
  278. package/node_modules/@radix-ui/react-roving-focus/dist/index.mjs.map +7 -1
  279. package/node_modules/@radix-ui/react-roving-focus/package.json +12 -13
  280. package/node_modules/@radix-ui/react-select/dist/index.d.mts +77 -65
  281. package/node_modules/@radix-ui/react-select/dist/index.d.ts +77 -65
  282. package/node_modules/@radix-ui/react-select/dist/index.js +1107 -1235
  283. package/node_modules/@radix-ui/react-select/dist/index.js.map +7 -1
  284. package/node_modules/@radix-ui/react-select/dist/index.mjs +1076 -1197
  285. package/node_modules/@radix-ui/react-select/dist/index.mjs.map +7 -1
  286. package/node_modules/@radix-ui/react-select/package.json +23 -24
  287. package/node_modules/@radix-ui/react-slot/dist/index.d.mts +9 -7
  288. package/node_modules/@radix-ui/react-slot/dist/index.d.ts +9 -7
  289. package/node_modules/@radix-ui/react-slot/dist/index.js +107 -87
  290. package/node_modules/@radix-ui/react-slot/dist/index.js.map +7 -1
  291. package/node_modules/@radix-ui/react-slot/dist/index.mjs +76 -80
  292. package/node_modules/@radix-ui/react-slot/dist/index.mjs.map +7 -1
  293. package/node_modules/@radix-ui/react-slot/package.json +3 -4
  294. package/node_modules/@radix-ui/react-tabs/dist/index.d.mts +32 -21
  295. package/node_modules/@radix-ui/react-tabs/dist/index.d.ts +32 -21
  296. package/node_modules/@radix-ui/react-tabs/dist/index.js +217 -184
  297. package/node_modules/@radix-ui/react-tabs/dist/index.js.map +7 -1
  298. package/node_modules/@radix-ui/react-tabs/dist/index.mjs +185 -169
  299. package/node_modules/@radix-ui/react-tabs/dist/index.mjs.map +7 -1
  300. package/node_modules/@radix-ui/react-tabs/package.json +11 -12
  301. package/node_modules/@radix-ui/react-toast/dist/index.d.mts +43 -32
  302. package/node_modules/@radix-ui/react-toast/dist/index.d.ts +43 -32
  303. package/node_modules/@radix-ui/react-toast/dist/index.js +645 -715
  304. package/node_modules/@radix-ui/react-toast/dist/index.js.map +7 -1
  305. package/node_modules/@radix-ui/react-toast/dist/index.mjs +614 -695
  306. package/node_modules/@radix-ui/react-toast/dist/index.mjs.map +7 -1
  307. package/node_modules/@radix-ui/react-toast/package.json +15 -16
  308. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.mts +2 -2
  309. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts +2 -2
  310. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +42 -23
  311. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.js.map +7 -1
  312. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs +11 -21
  313. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs.map +7 -1
  314. package/node_modules/@radix-ui/react-use-callback-ref/package.json +2 -5
  315. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.mts +4 -3
  316. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts +4 -3
  317. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +75 -52
  318. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.js.map +7 -1
  319. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs +44 -50
  320. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs.map +7 -1
  321. package/node_modules/@radix-ui/react-use-controllable-state/package.json +3 -4
  322. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.mts +2 -2
  323. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts +2 -2
  324. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +50 -29
  325. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js.map +7 -1
  326. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs +17 -25
  327. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs.map +7 -1
  328. package/node_modules/@radix-ui/react-use-escape-keydown/package.json +3 -4
  329. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.mts +4 -3
  330. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts +4 -3
  331. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +38 -17
  332. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.js.map +7 -1
  333. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs +7 -15
  334. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs.map +7 -1
  335. package/node_modules/@radix-ui/react-use-layout-effect/package.json +2 -5
  336. package/node_modules/@radix-ui/react-use-previous/dist/index.d.mts +2 -2
  337. package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts +2 -2
  338. package/node_modules/@radix-ui/react-use-previous/dist/index.js +45 -26
  339. package/node_modules/@radix-ui/react-use-previous/dist/index.js.map +7 -1
  340. package/node_modules/@radix-ui/react-use-previous/dist/index.mjs +14 -24
  341. package/node_modules/@radix-ui/react-use-previous/dist/index.mjs.map +7 -1
  342. package/node_modules/@radix-ui/react-use-previous/package.json +2 -5
  343. package/node_modules/@radix-ui/react-use-rect/dist/index.d.mts +4 -3
  344. package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts +4 -3
  345. package/node_modules/@radix-ui/react-use-rect/dist/index.js +52 -32
  346. package/node_modules/@radix-ui/react-use-rect/dist/index.js.map +7 -1
  347. package/node_modules/@radix-ui/react-use-rect/dist/index.mjs +19 -28
  348. package/node_modules/@radix-ui/react-use-rect/dist/index.mjs.map +7 -1
  349. package/node_modules/@radix-ui/react-use-rect/package.json +3 -4
  350. package/node_modules/@radix-ui/react-use-size/dist/index.d.mts +2 -2
  351. package/node_modules/@radix-ui/react-use-size/dist/index.d.ts +2 -2
  352. package/node_modules/@radix-ui/react-use-size/dist/index.js +70 -57
  353. package/node_modules/@radix-ui/react-use-size/dist/index.js.map +7 -1
  354. package/node_modules/@radix-ui/react-use-size/dist/index.mjs +39 -55
  355. package/node_modules/@radix-ui/react-use-size/dist/index.mjs.map +7 -1
  356. package/node_modules/@radix-ui/react-use-size/package.json +3 -4
  357. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts +8 -8
  358. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts +8 -8
  359. package/node_modules/@radix-ui/react-visually-hidden/dist/index.js +64 -41
  360. package/node_modules/@radix-ui/react-visually-hidden/dist/index.js.map +7 -1
  361. package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs +33 -35
  362. package/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs.map +7 -1
  363. package/node_modules/@radix-ui/react-visually-hidden/package.json +4 -5
  364. package/node_modules/@radix-ui/rect/dist/index.d.mts +3 -3
  365. package/node_modules/@radix-ui/rect/dist/index.d.ts +3 -3
  366. package/node_modules/@radix-ui/rect/dist/index.js +69 -66
  367. package/node_modules/@radix-ui/rect/dist/index.js.map +7 -1
  368. package/node_modules/@radix-ui/rect/dist/index.mjs +47 -63
  369. package/node_modules/@radix-ui/rect/dist/index.mjs.map +7 -1
  370. package/node_modules/@radix-ui/rect/package.json +1 -4
  371. package/node_modules/@remix-run/react/CHANGELOG.md +18 -0
  372. package/node_modules/@remix-run/react/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  373. package/node_modules/@remix-run/react/dist/browser.js +14 -3
  374. package/node_modules/@remix-run/react/dist/components.d.ts +9 -0
  375. package/node_modules/@remix-run/react/dist/components.js +23 -19
  376. package/node_modules/@remix-run/react/dist/data.js +1 -1
  377. package/node_modules/@remix-run/react/dist/entry.d.ts +1 -0
  378. package/node_modules/@remix-run/react/dist/errorBoundaries.d.ts +5 -2
  379. package/node_modules/@remix-run/react/dist/errorBoundaries.js +26 -5
  380. package/node_modules/@remix-run/react/dist/errors.js +1 -1
  381. package/node_modules/@remix-run/react/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -1
  382. package/node_modules/@remix-run/react/dist/esm/browser.js +14 -3
  383. package/node_modules/@remix-run/react/dist/esm/components.js +24 -20
  384. package/node_modules/@remix-run/react/dist/esm/data.js +1 -1
  385. package/node_modules/@remix-run/react/dist/esm/errorBoundaries.js +26 -5
  386. package/node_modules/@remix-run/react/dist/esm/errors.js +1 -1
  387. package/node_modules/@remix-run/react/dist/esm/fallback.js +1 -1
  388. package/node_modules/@remix-run/react/dist/esm/fog-of-war.js +226 -0
  389. package/node_modules/@remix-run/react/dist/esm/index.js +1 -1
  390. package/node_modules/@remix-run/react/dist/esm/invariant.js +1 -1
  391. package/node_modules/@remix-run/react/dist/esm/links.js +2 -2
  392. package/node_modules/@remix-run/react/dist/esm/markup.js +1 -1
  393. package/node_modules/@remix-run/react/dist/esm/routeModules.js +1 -1
  394. package/node_modules/@remix-run/react/dist/esm/routes.js +1 -1
  395. package/node_modules/@remix-run/react/dist/esm/scroll-restoration.js +1 -1
  396. package/node_modules/@remix-run/react/dist/esm/server.js +1 -1
  397. package/node_modules/@remix-run/react/dist/esm/single-fetch.js +1 -1
  398. package/node_modules/@remix-run/react/dist/fallback.js +1 -1
  399. package/node_modules/@remix-run/react/dist/fog-of-war.d.ts +37 -0
  400. package/node_modules/@remix-run/react/dist/fog-of-war.js +254 -0
  401. package/node_modules/@remix-run/react/dist/index.js +1 -1
  402. package/node_modules/@remix-run/react/dist/invariant.js +1 -1
  403. package/node_modules/@remix-run/react/dist/links.js +2 -2
  404. package/node_modules/@remix-run/react/dist/markup.js +1 -1
  405. package/node_modules/@remix-run/react/dist/routeModules.js +1 -1
  406. package/node_modules/@remix-run/react/dist/routes.d.ts +1 -1
  407. package/node_modules/@remix-run/react/dist/routes.js +1 -1
  408. package/node_modules/@remix-run/react/dist/scroll-restoration.js +1 -1
  409. package/node_modules/@remix-run/react/dist/server.js +1 -1
  410. package/node_modules/@remix-run/react/dist/single-fetch.js +1 -1
  411. package/node_modules/@remix-run/react/package.json +8 -8
  412. package/node_modules/@remix-run/router/CHANGELOG.md +9 -0
  413. package/node_modules/@remix-run/router/dist/index.d.ts +1 -1
  414. package/node_modules/@remix-run/router/dist/router.cjs.js +467 -80
  415. package/node_modules/@remix-run/router/dist/router.cjs.js.map +1 -1
  416. package/node_modules/@remix-run/router/dist/router.d.ts +11 -1
  417. package/node_modules/@remix-run/router/dist/router.js +457 -76
  418. package/node_modules/@remix-run/router/dist/router.js.map +1 -1
  419. package/node_modules/@remix-run/router/dist/router.umd.js +467 -80
  420. package/node_modules/@remix-run/router/dist/router.umd.js.map +1 -1
  421. package/node_modules/@remix-run/router/dist/router.umd.min.js +2 -2
  422. package/node_modules/@remix-run/router/dist/router.umd.min.js.map +1 -1
  423. package/node_modules/@remix-run/router/dist/utils.d.ts +9 -1
  424. package/node_modules/@remix-run/router/index.ts +1 -0
  425. package/node_modules/@remix-run/router/package.json +1 -1
  426. package/node_modules/@remix-run/router/router.ts +586 -73
  427. package/node_modules/@remix-run/router/utils.ts +51 -8
  428. package/node_modules/@remix-run/server-runtime/CHANGELOG.md +17 -0
  429. package/node_modules/@remix-run/server-runtime/dist/cookies.js +1 -1
  430. package/node_modules/@remix-run/server-runtime/dist/data.js +1 -1
  431. package/node_modules/@remix-run/server-runtime/dist/deprecations.js +1 -1
  432. package/node_modules/@remix-run/server-runtime/dist/dev.js +1 -1
  433. package/node_modules/@remix-run/server-runtime/dist/entry.d.ts +1 -0
  434. package/node_modules/@remix-run/server-runtime/dist/entry.js +1 -1
  435. package/node_modules/@remix-run/server-runtime/dist/errors.js +1 -1
  436. package/node_modules/@remix-run/server-runtime/dist/esm/cookies.js +1 -1
  437. package/node_modules/@remix-run/server-runtime/dist/esm/data.js +1 -1
  438. package/node_modules/@remix-run/server-runtime/dist/esm/deprecations.js +1 -1
  439. package/node_modules/@remix-run/server-runtime/dist/esm/dev.js +1 -1
  440. package/node_modules/@remix-run/server-runtime/dist/esm/entry.js +1 -1
  441. package/node_modules/@remix-run/server-runtime/dist/esm/errors.js +1 -1
  442. package/node_modules/@remix-run/server-runtime/dist/esm/formData.js +1 -1
  443. package/node_modules/@remix-run/server-runtime/dist/esm/headers.js +1 -1
  444. package/node_modules/@remix-run/server-runtime/dist/esm/index.js +1 -1
  445. package/node_modules/@remix-run/server-runtime/dist/esm/invariant.js +1 -1
  446. package/node_modules/@remix-run/server-runtime/dist/esm/markup.js +1 -1
  447. package/node_modules/@remix-run/server-runtime/dist/esm/mode.js +1 -1
  448. package/node_modules/@remix-run/server-runtime/dist/esm/responses.js +1 -1
  449. package/node_modules/@remix-run/server-runtime/dist/esm/routeMatching.js +1 -1
  450. package/node_modules/@remix-run/server-runtime/dist/esm/routes.js +1 -1
  451. package/node_modules/@remix-run/server-runtime/dist/esm/server.js +76 -11
  452. package/node_modules/@remix-run/server-runtime/dist/esm/serverHandoff.js +1 -1
  453. package/node_modules/@remix-run/server-runtime/dist/esm/sessions/cookieStorage.js +1 -1
  454. package/node_modules/@remix-run/server-runtime/dist/esm/sessions/memoryStorage.js +1 -1
  455. package/node_modules/@remix-run/server-runtime/dist/esm/sessions.js +1 -1
  456. package/node_modules/@remix-run/server-runtime/dist/esm/single-fetch.js +17 -8
  457. package/node_modules/@remix-run/server-runtime/dist/esm/upload/errors.js +1 -1
  458. package/node_modules/@remix-run/server-runtime/dist/esm/upload/memoryUploadHandler.js +1 -1
  459. package/node_modules/@remix-run/server-runtime/dist/esm/warnings.js +1 -1
  460. package/node_modules/@remix-run/server-runtime/dist/formData.js +1 -1
  461. package/node_modules/@remix-run/server-runtime/dist/headers.js +1 -1
  462. package/node_modules/@remix-run/server-runtime/dist/index.js +1 -1
  463. package/node_modules/@remix-run/server-runtime/dist/invariant.js +1 -1
  464. package/node_modules/@remix-run/server-runtime/dist/markup.js +1 -1
  465. package/node_modules/@remix-run/server-runtime/dist/mode.js +1 -1
  466. package/node_modules/@remix-run/server-runtime/dist/responses.js +1 -1
  467. package/node_modules/@remix-run/server-runtime/dist/routeMatching.js +1 -1
  468. package/node_modules/@remix-run/server-runtime/dist/routes.js +1 -1
  469. package/node_modules/@remix-run/server-runtime/dist/server.js +70 -5
  470. package/node_modules/@remix-run/server-runtime/dist/serverHandoff.js +1 -1
  471. package/node_modules/@remix-run/server-runtime/dist/sessions/cookieStorage.js +1 -1
  472. package/node_modules/@remix-run/server-runtime/dist/sessions/memoryStorage.js +1 -1
  473. package/node_modules/@remix-run/server-runtime/dist/sessions.js +1 -1
  474. package/node_modules/@remix-run/server-runtime/dist/single-fetch.d.ts +3 -0
  475. package/node_modules/@remix-run/server-runtime/dist/single-fetch.js +18 -7
  476. package/node_modules/@remix-run/server-runtime/dist/upload/errors.js +1 -1
  477. package/node_modules/@remix-run/server-runtime/dist/upload/memoryUploadHandler.js +1 -1
  478. package/node_modules/@remix-run/server-runtime/dist/warnings.js +1 -1
  479. package/node_modules/@remix-run/server-runtime/package.json +3 -3
  480. package/node_modules/deep-eql/index.js +10 -5
  481. package/node_modules/deep-eql/package.json +1 -1
  482. package/node_modules/framer-motion/dist/cjs/{dom-entry-DSxBucW4.js → dom-entry-GDJJhIpT.js} +59 -106
  483. package/node_modules/framer-motion/dist/cjs/dom-entry.js +1 -1
  484. package/node_modules/framer-motion/dist/cjs/index.js +123 -36
  485. package/node_modules/framer-motion/dist/dom.js +1 -1
  486. package/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +3 -3
  487. package/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs +6 -3
  488. package/node_modules/framer-motion/dist/es/motion/index.mjs +33 -13
  489. package/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +6 -3
  490. package/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs +54 -3
  491. package/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs +5 -2
  492. package/node_modules/framer-motion/dist/es/projection-entry.mjs +11 -0
  493. package/node_modules/framer-motion/dist/es/render/VisualElement.mjs +30 -78
  494. package/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs +5 -1
  495. package/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs +1 -1
  496. package/node_modules/framer-motion/dist/es/utils/mix/color.mjs +8 -2
  497. package/node_modules/framer-motion/dist/es/utils/mix/complex.mjs +1 -3
  498. package/node_modules/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
  499. package/node_modules/framer-motion/dist/es/value/index.mjs +1 -1
  500. package/node_modules/framer-motion/dist/es/value/types/color/rgba.mjs +1 -1
  501. package/node_modules/framer-motion/dist/framer-motion.dev.js +175 -134
  502. package/node_modules/framer-motion/dist/framer-motion.js +1 -1
  503. package/node_modules/framer-motion/dist/index.d.ts +78 -78
  504. package/node_modules/framer-motion/dist/three-entry.d.ts +59 -72
  505. package/node_modules/framer-motion/package.json +14 -28
  506. package/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +15 -4
  507. package/node_modules/react-remove-scroll/dist/es2015/UI.js +2 -2
  508. package/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +12 -4
  509. package/node_modules/react-remove-scroll/dist/es2015/types.d.ts +10 -2
  510. package/node_modules/react-remove-scroll/dist/es2019/SideEffect.js +15 -4
  511. package/node_modules/react-remove-scroll/dist/es2019/UI.js +2 -2
  512. package/node_modules/react-remove-scroll/dist/es2019/handleScroll.js +12 -4
  513. package/node_modules/react-remove-scroll/dist/es2019/types.d.ts +10 -2
  514. package/node_modules/react-remove-scroll/dist/es5/SideEffect.js +15 -4
  515. package/node_modules/react-remove-scroll/dist/es5/UI.js +2 -2
  516. package/node_modules/react-remove-scroll/dist/es5/handleScroll.js +12 -4
  517. package/node_modules/react-remove-scroll/dist/es5/types.d.ts +10 -2
  518. package/node_modules/react-remove-scroll/dist/index.js +93 -0
  519. package/node_modules/react-remove-scroll/package.json +4 -3
  520. package/node_modules/react-router/CHANGELOG.md +14 -0
  521. package/node_modules/react-router/dist/index.d.ts +4 -1
  522. package/node_modules/react-router/dist/index.js +3 -2
  523. package/node_modules/react-router/dist/index.js.map +1 -1
  524. package/node_modules/react-router/dist/main.js +1 -1
  525. package/node_modules/react-router/dist/react-router.development.js +3 -2
  526. package/node_modules/react-router/dist/react-router.development.js.map +1 -1
  527. package/node_modules/react-router/dist/react-router.production.min.js +2 -2
  528. package/node_modules/react-router/dist/react-router.production.min.js.map +1 -1
  529. package/node_modules/react-router/dist/umd/react-router.development.js +3 -2
  530. package/node_modules/react-router/dist/umd/react-router.development.js.map +1 -1
  531. package/node_modules/react-router/dist/umd/react-router.production.min.js +2 -2
  532. package/node_modules/react-router/dist/umd/react-router.production.min.js.map +1 -1
  533. package/node_modules/react-router/package.json +3 -3
  534. package/node_modules/react-router-dom/CHANGELOG.md +17 -0
  535. package/node_modules/react-router-dom/dist/dom.d.ts +29 -16
  536. package/node_modules/react-router-dom/dist/index.d.ts +18 -6
  537. package/node_modules/react-router-dom/dist/index.js +3 -1
  538. package/node_modules/react-router-dom/dist/index.js.map +1 -1
  539. package/node_modules/react-router-dom/dist/main.js +1 -1
  540. package/node_modules/react-router-dom/dist/react-router-dom.development.js +29 -1
  541. package/node_modules/react-router-dom/dist/react-router-dom.development.js.map +1 -1
  542. package/node_modules/react-router-dom/dist/react-router-dom.production.min.js +2 -2
  543. package/node_modules/react-router-dom/dist/react-router-dom.production.min.js.map +1 -1
  544. package/node_modules/react-router-dom/dist/server.js +4 -1
  545. package/node_modules/react-router-dom/dist/server.mjs +4 -1
  546. package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js +29 -1
  547. package/node_modules/react-router-dom/dist/umd/react-router-dom.development.js.map +1 -1
  548. package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js +2 -2
  549. package/node_modules/react-router-dom/dist/umd/react-router-dom.production.min.js.map +1 -1
  550. package/node_modules/react-router-dom/package.json +3 -3
  551. package/node_modules/react-router-dom/server.js +4 -1
  552. package/node_modules/react-router-dom/server.mjs +4 -1
  553. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/README.md +32 -112
  554. package/node_modules/source-map/dist/source-map.debug.js +3234 -0
  555. package/node_modules/source-map/dist/source-map.js +3233 -0
  556. package/node_modules/source-map/dist/source-map.min.js +2 -0
  557. package/node_modules/source-map/dist/source-map.min.js.map +1 -0
  558. package/node_modules/source-map/lib/array-set.js +121 -0
  559. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/base64-vlq.js +40 -11
  560. package/node_modules/source-map/lib/base64.js +67 -0
  561. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/binary-search.js +19 -15
  562. package/node_modules/source-map/lib/mapping-list.js +79 -0
  563. package/node_modules/source-map/lib/quick-sort.js +114 -0
  564. package/node_modules/source-map/lib/source-map-consumer.js +1145 -0
  565. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/source-map-generator.js +169 -157
  566. package/node_modules/source-map/lib/source-node.js +413 -0
  567. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/util.js +51 -109
  568. package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/package.json +9 -27
  569. package/node_modules/source-map/source-map.d.ts +98 -0
  570. package/node_modules/source-map/source-map.js +8 -0
  571. package/node_modules/turbo-stream/dist/flatten.d.ts +1 -1
  572. package/node_modules/turbo-stream/dist/flatten.js +44 -9
  573. package/node_modules/turbo-stream/dist/turbo-stream.js +11 -2
  574. package/node_modules/turbo-stream/dist/turbo-stream.mjs +58 -7
  575. package/node_modules/turbo-stream/dist/unflatten.js +2 -0
  576. package/node_modules/turbo-stream/dist/utils.d.ts +1 -0
  577. package/node_modules/turbo-stream/dist/utils.js +2 -1
  578. package/node_modules/turbo-stream/package.json +1 -1
  579. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/index.d.ts +1 -0
  580. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/package.json +2 -1
  581. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/readme.md +1 -0
  582. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-literal.d.ts +6 -4
  583. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-deep.d.ts +8 -9
  584. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-deep.d.ts +3 -3
  585. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/paths.d.ts +14 -8
  586. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/schema.d.ts +12 -12
  587. package/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  588. package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/simplify.d.ts +1 -1
  589. package/package.json +4 -4
  590. package/build/client/assets/_exerciseNumber_.finished-DNtyBHjg.js +0 -2
  591. package/build/client/assets/_exerciseNumber_.finished-DNtyBHjg.js.map +0 -1
  592. package/build/client/assets/_layout-BR-Qyofe.js +0 -2
  593. package/build/client/assets/_layout-CNgYirUN.js +0 -2
  594. package/build/client/assets/_layout-CNgYirUN.js.map +0 -1
  595. package/build/client/assets/_layout-xu6a9He_.js +0 -2
  596. package/build/client/assets/_layout-xu6a9He_.js.map +0 -1
  597. package/build/client/assets/components-C5xBZAiL.js +0 -119
  598. package/build/client/assets/components-C5xBZAiL.js.map +0 -1
  599. package/build/client/assets/diff-BKsbFB6w.js +0 -42
  600. package/build/client/assets/diff-BKsbFB6w.js.map +0 -1
  601. package/build/client/assets/diff-KDzcgGYL.js +0 -2
  602. package/build/client/assets/discord-Xp0X4-Fl.js +0 -2
  603. package/build/client/assets/discord-Xp0X4-Fl.js.map +0 -1
  604. package/build/client/assets/entry.client-0j1eoieD.js +0 -80
  605. package/build/client/assets/entry.client-0j1eoieD.js.map +0 -1
  606. package/build/client/assets/epic-video-BwtXsHGU.js.map +0 -1
  607. package/build/client/assets/finished-Cu9PZd5Q.js +0 -2
  608. package/build/client/assets/finished-Cu9PZd5Q.js.map +0 -1
  609. package/build/client/assets/index-Bg9MMnnf.js.map +0 -1
  610. package/build/client/assets/index-D6ygCrVn.js +0 -37
  611. package/build/client/assets/index-D6ygCrVn.js.map +0 -1
  612. package/build/client/assets/index-r90CY6Wk.js +0 -8
  613. package/build/client/assets/index-r90CY6Wk.js.map +0 -1
  614. package/build/client/assets/manifest-b31ba37c.js +0 -1
  615. package/build/client/assets/mdx-BYvGbvEr.js +0 -2
  616. package/build/client/assets/misc-DNgC2Frq.js +0 -2
  617. package/build/client/assets/misc-DNgC2Frq.js.map +0 -1
  618. package/build/client/assets/progress-CF9Xwfxf.js +0 -2
  619. package/build/client/assets/progress-CF9Xwfxf.js.map +0 -1
  620. package/build/client/assets/root-BQ7V6fP4.js.map +0 -1
  621. package/build/client/assets/tailwind-Ck4g-nq0.css +0 -1
  622. package/build/client/assets/tooltip-Kw0lYWBI.js +0 -2
  623. package/build/client/assets/tooltip-Kw0lYWBI.js.map +0 -1
  624. package/node_modules/@babel/runtime/helpers/AsyncGenerator.js +0 -64
  625. package/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +0 -64
  626. package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +0 -10
  627. package/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +0 -8
  628. package/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose.js +0 -10
  629. package/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +0 -8
  630. package/node_modules/@conform-to/dom/rollup.config.js +0 -100
  631. package/node_modules/@conform-to/react/rollup.config.js +0 -102
  632. package/node_modules/@conform-to/zod/rollup.config.js +0 -100
  633. package/node_modules/@radix-ui/number/dist/index.d.ts.map +0 -1
  634. package/node_modules/@radix-ui/primitive/dist/index.d.ts.map +0 -1
  635. package/node_modules/@radix-ui/react-accordion/dist/index.d.ts.map +0 -1
  636. package/node_modules/@radix-ui/react-arrow/dist/index.d.ts.map +0 -1
  637. package/node_modules/@radix-ui/react-collapsible/dist/index.d.ts.map +0 -1
  638. package/node_modules/@radix-ui/react-collection/dist/index.d.ts.map +0 -1
  639. package/node_modules/@radix-ui/react-compose-refs/dist/index.d.ts.map +0 -1
  640. package/node_modules/@radix-ui/react-context/dist/index.d.ts.map +0 -1
  641. package/node_modules/@radix-ui/react-direction/dist/index.d.ts.map +0 -1
  642. package/node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts.map +0 -1
  643. package/node_modules/@radix-ui/react-focus-guards/dist/index.d.ts.map +0 -1
  644. package/node_modules/@radix-ui/react-focus-scope/dist/index.d.ts.map +0 -1
  645. package/node_modules/@radix-ui/react-id/dist/index.d.ts.map +0 -1
  646. package/node_modules/@radix-ui/react-popover/dist/index.d.ts.map +0 -1
  647. package/node_modules/@radix-ui/react-popper/dist/index.d.ts.map +0 -1
  648. package/node_modules/@radix-ui/react-portal/dist/index.d.ts.map +0 -1
  649. package/node_modules/@radix-ui/react-presence/dist/index.d.ts.map +0 -1
  650. package/node_modules/@radix-ui/react-primitive/dist/index.d.ts.map +0 -1
  651. package/node_modules/@radix-ui/react-roving-focus/dist/index.d.ts.map +0 -1
  652. package/node_modules/@radix-ui/react-select/dist/index.d.ts.map +0 -1
  653. package/node_modules/@radix-ui/react-slot/dist/index.d.ts.map +0 -1
  654. package/node_modules/@radix-ui/react-tabs/dist/index.d.ts.map +0 -1
  655. package/node_modules/@radix-ui/react-toast/dist/index.d.ts.map +0 -1
  656. package/node_modules/@radix-ui/react-use-callback-ref/dist/index.d.ts.map +0 -1
  657. package/node_modules/@radix-ui/react-use-controllable-state/dist/index.d.ts.map +0 -1
  658. package/node_modules/@radix-ui/react-use-escape-keydown/dist/index.d.ts.map +0 -1
  659. package/node_modules/@radix-ui/react-use-layout-effect/dist/index.d.ts.map +0 -1
  660. package/node_modules/@radix-ui/react-use-previous/dist/index.d.ts.map +0 -1
  661. package/node_modules/@radix-ui/react-use-rect/dist/index.d.ts.map +0 -1
  662. package/node_modules/@radix-ui/react-use-size/dist/index.d.ts.map +0 -1
  663. package/node_modules/@radix-ui/react-visually-hidden/dist/index.d.ts.map +0 -1
  664. package/node_modules/@radix-ui/rect/dist/index.d.ts.map +0 -1
  665. package/node_modules/@remix-run/server-runtime/node_modules/source-map/dist/source-map.js +0 -1
  666. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/array-set.js +0 -100
  667. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/base64.js +0 -18
  668. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/mapping-list.js +0 -80
  669. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-map-consumer.js +0 -1237
  670. package/node_modules/@remix-run/server-runtime/node_modules/source-map/lib/source-node.js +0 -404
  671. package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.d.ts +0 -369
  672. package/node_modules/@remix-run/server-runtime/node_modules/source-map/source-map.js +0 -8
  673. package/node_modules/framer-motion/dist/projection.dev.js +0 -6659
  674. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/LICENSE +0 -0
  675. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/mappings.wasm +0 -0
  676. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/read-wasm.js +0 -0
  677. /package/node_modules/{@remix-run/server-runtime/node_modules/source-map → source-map}/lib/wasm.js +0 -0
  678. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/and.d.ts +0 -0
  679. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-indices.d.ts +0 -0
  680. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-slice.d.ts +0 -0
  681. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-splice.d.ts +0 -0
  682. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/array-values.d.ts +0 -0
  683. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/async-return-type.d.ts +0 -0
  684. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/asyncify.d.ts +0 -0
  685. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/basic.d.ts +0 -0
  686. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-case.d.ts +0 -0
  687. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties-deep.d.ts +0 -0
  688. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/camel-cased-properties.d.ts +0 -0
  689. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-except.d.ts +0 -0
  690. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-keys.d.ts +0 -0
  691. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick-deep.d.ts +0 -0
  692. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-pick.d.ts +0 -0
  693. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/conditional-simplify.d.ts +0 -0
  694. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-case.d.ts +0 -0
  695. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties-deep.d.ts +0 -0
  696. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/delimiter-cased-properties.d.ts +0 -0
  697. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-omit.d.ts +0 -0
  698. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/distributed-pick.d.ts +0 -0
  699. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/empty-object.d.ts +0 -0
  700. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/enforce-optional.d.ts +0 -0
  701. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entries.d.ts +0 -0
  702. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/entry.d.ts +0 -0
  703. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/exact.d.ts +0 -0
  704. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/except.d.ts +0 -0
  705. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/fixed-length-array.d.ts +0 -0
  706. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/get.d.ts +0 -0
  707. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/global-this.d.ts +0 -0
  708. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than-or-equal.d.ts +0 -0
  709. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/greater-than.d.ts +0 -0
  710. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-optional-keys.d.ts +0 -0
  711. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-readonly-keys.d.ts +0 -0
  712. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-required-keys.d.ts +0 -0
  713. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/has-writable-keys.d.ts +0 -0
  714. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-any.d.ts +0 -0
  715. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-empty-object.d.ts +0 -0
  716. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-never.d.ts +0 -0
  717. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-null.d.ts +0 -0
  718. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/if-unknown.d.ts +0 -0
  719. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/includes.d.ts +0 -0
  720. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/int-range.d.ts +0 -0
  721. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/internal.d.ts +0 -0
  722. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/invariant-of.d.ts +0 -0
  723. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-any.d.ts +0 -0
  724. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-equal.d.ts +0 -0
  725. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-float.d.ts +0 -0
  726. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-integer.d.ts +0 -0
  727. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-never.d.ts +0 -0
  728. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-null.d.ts +0 -0
  729. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/is-unknown.d.ts +0 -0
  730. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/iterable-element.d.ts +0 -0
  731. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/join.d.ts +0 -0
  732. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonifiable.d.ts +0 -0
  733. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/jsonify.d.ts +0 -0
  734. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-case.d.ts +0 -0
  735. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties-deep.d.ts +0 -0
  736. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/kebab-cased-properties.d.ts +0 -0
  737. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/keys-of-union.d.ts +0 -0
  738. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/last-array-element.d.ts +0 -0
  739. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than-or-equal.d.ts +0 -0
  740. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/less-than.d.ts +0 -0
  741. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive-deep.d.ts +0 -0
  742. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-to-primitive.d.ts +0 -0
  743. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/literal-union.d.ts +0 -0
  744. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge-exclusive.d.ts +0 -0
  745. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/merge.d.ts +0 -0
  746. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-array.d.ts +0 -0
  747. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/multidimensional-readonly-array.d.ts +0 -0
  748. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/non-empty-object.d.ts +0 -0
  749. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/numeric.d.ts +0 -0
  750. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/observable-like.d.ts +0 -0
  751. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/omit-index-signature.d.ts +0 -0
  752. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/opaque.d.ts +0 -0
  753. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/optional-keys-of.d.ts +0 -0
  754. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/or.d.ts +0 -0
  755. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/override-properties.d.ts +0 -0
  756. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/package-json.d.ts +0 -0
  757. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-deep.d.ts +0 -0
  758. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/partial-on-undefined-deep.d.ts +0 -0
  759. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-case.d.ts +0 -0
  760. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties-deep.d.ts +0 -0
  761. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pascal-cased-properties.d.ts +0 -0
  762. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-deep.d.ts +0 -0
  763. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/pick-index-signature.d.ts +0 -0
  764. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/primitive.d.ts +0 -0
  765. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/promisable.d.ts +0 -0
  766. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-deep.d.ts +0 -0
  767. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-keys-of.d.ts +0 -0
  768. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/readonly-tuple.d.ts +0 -0
  769. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/replace.d.ts +0 -0
  770. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-all-or-none.d.ts +0 -0
  771. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-at-least-one.d.ts +0 -0
  772. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-exactly-one.d.ts +0 -0
  773. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/require-one-or-none.d.ts +0 -0
  774. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-deep.d.ts +0 -0
  775. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/required-keys-of.d.ts +0 -0
  776. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/screaming-snake-case.d.ts +0 -0
  777. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-field-type.d.ts +0 -0
  778. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-non-nullable.d.ts +0 -0
  779. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-optional.d.ts +0 -0
  780. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-parameter-type.d.ts +0 -0
  781. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-readonly.d.ts +0 -0
  782. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-required.d.ts +0 -0
  783. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/set-return-type.d.ts +0 -0
  784. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/shared-union-fields-deep.d.ts +0 -0
  785. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/single-key-object.d.ts +0 -0
  786. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-case.d.ts +0 -0
  787. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties-deep.d.ts +0 -0
  788. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/snake-cased-properties.d.ts +0 -0
  789. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split-words.d.ts +0 -0
  790. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/split.d.ts +0 -0
  791. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/spread.d.ts +0 -0
  792. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-key-of.d.ts +0 -0
  793. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/string-slice.d.ts +0 -0
  794. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/stringified.d.ts +0 -0
  795. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/subtract.d.ts +0 -0
  796. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/sum.d.ts +0 -0
  797. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tagged-union.d.ts +0 -0
  798. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/trim.d.ts +0 -0
  799. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tsconfig-json.d.ts +0 -0
  800. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/tuple-to-union.d.ts +0 -0
  801. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/typed-array.d.ts +0 -0
  802. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/undefined-on-partial-deep.d.ts +0 -0
  803. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/union-to-intersection.d.ts +0 -0
  804. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-array.d.ts +0 -0
  805. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/unknown-record.d.ts +0 -0
  806. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/value-of.d.ts +0 -0
  807. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-deep.d.ts +0 -0
  808. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable-keys-of.d.ts +0 -0
  809. /package/node_modules/{remix-utils/node_modules/type-fest → type-fest}/source/writable.d.ts +0 -0
@@ -1,218 +1,230 @@
1
- var $cg2C9$babelruntimehelpersextends = require("@babel/runtime/helpers/extends");
2
- var $cg2C9$react = require("react");
3
- var $cg2C9$reactdom = require("react-dom");
4
- var $cg2C9$radixuinumber = require("@radix-ui/number");
5
- var $cg2C9$radixuiprimitive = require("@radix-ui/primitive");
6
- var $cg2C9$radixuireactcollection = require("@radix-ui/react-collection");
7
- var $cg2C9$radixuireactcomposerefs = require("@radix-ui/react-compose-refs");
8
- var $cg2C9$radixuireactcontext = require("@radix-ui/react-context");
9
- var $cg2C9$radixuireactdirection = require("@radix-ui/react-direction");
10
- var $cg2C9$radixuireactdismissablelayer = require("@radix-ui/react-dismissable-layer");
11
- var $cg2C9$radixuireactfocusguards = require("@radix-ui/react-focus-guards");
12
- var $cg2C9$radixuireactfocusscope = require("@radix-ui/react-focus-scope");
13
- var $cg2C9$radixuireactid = require("@radix-ui/react-id");
14
- var $cg2C9$radixuireactpopper = require("@radix-ui/react-popper");
15
- var $cg2C9$radixuireactportal = require("@radix-ui/react-portal");
16
- var $cg2C9$radixuireactprimitive = require("@radix-ui/react-primitive");
17
- var $cg2C9$radixuireactslot = require("@radix-ui/react-slot");
18
- var $cg2C9$radixuireactusecallbackref = require("@radix-ui/react-use-callback-ref");
19
- var $cg2C9$radixuireactusecontrollablestate = require("@radix-ui/react-use-controllable-state");
20
- var $cg2C9$radixuireactuselayouteffect = require("@radix-ui/react-use-layout-effect");
21
- var $cg2C9$radixuireactuseprevious = require("@radix-ui/react-use-previous");
22
- var $cg2C9$radixuireactvisuallyhidden = require("@radix-ui/react-visually-hidden");
23
- var $cg2C9$ariahidden = require("aria-hidden");
24
- var $cg2C9$reactremovescroll = require("react-remove-scroll");
25
-
26
- function $parcel$export(e, n, v, s) {
27
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
28
- }
29
- function $parcel$interopDefault(a) {
30
- return a && a.__esModule ? a.default : a;
31
- }
32
-
33
- $parcel$export(module.exports, "createSelectScope", () => $1345bda09ffc1bc6$export$286727a75dc039bd);
34
- $parcel$export(module.exports, "Select", () => $1345bda09ffc1bc6$export$ef9b1a59e592288f);
35
- $parcel$export(module.exports, "SelectTrigger", () => $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1);
36
- $parcel$export(module.exports, "SelectValue", () => $1345bda09ffc1bc6$export$e288731fd71264f0);
37
- $parcel$export(module.exports, "SelectIcon", () => $1345bda09ffc1bc6$export$99b400cabb58c515);
38
- $parcel$export(module.exports, "SelectPortal", () => $1345bda09ffc1bc6$export$b2af6c9944296213);
39
- $parcel$export(module.exports, "SelectContent", () => $1345bda09ffc1bc6$export$c973a4b3cb86a03d);
40
- $parcel$export(module.exports, "SelectViewport", () => $1345bda09ffc1bc6$export$9ed6e7b40248d36d);
41
- $parcel$export(module.exports, "SelectGroup", () => $1345bda09ffc1bc6$export$ee25a334c55de1f4);
42
- $parcel$export(module.exports, "SelectLabel", () => $1345bda09ffc1bc6$export$f67338d29bd972f8);
43
- $parcel$export(module.exports, "SelectItem", () => $1345bda09ffc1bc6$export$13ef48a934230896);
44
- $parcel$export(module.exports, "SelectItemText", () => $1345bda09ffc1bc6$export$3572fb0fb821ff49);
45
- $parcel$export(module.exports, "SelectItemIndicator", () => $1345bda09ffc1bc6$export$6b9198de19accfe6);
46
- $parcel$export(module.exports, "SelectScrollUpButton", () => $1345bda09ffc1bc6$export$d8117927658af6d7);
47
- $parcel$export(module.exports, "SelectScrollDownButton", () => $1345bda09ffc1bc6$export$ff951e476c12189);
48
- $parcel$export(module.exports, "SelectSeparator", () => $1345bda09ffc1bc6$export$eba4b1df07cb1d3);
49
- $parcel$export(module.exports, "SelectArrow", () => $1345bda09ffc1bc6$export$314f4cb8f8099628);
50
- $parcel$export(module.exports, "Root", () => $1345bda09ffc1bc6$export$be92b6f5f03c0fe9);
51
- $parcel$export(module.exports, "Trigger", () => $1345bda09ffc1bc6$export$41fb9f06171c75f4);
52
- $parcel$export(module.exports, "Value", () => $1345bda09ffc1bc6$export$4c8d1a57a761ef94);
53
- $parcel$export(module.exports, "Icon", () => $1345bda09ffc1bc6$export$f04a61298a47a40f);
54
- $parcel$export(module.exports, "Portal", () => $1345bda09ffc1bc6$export$602eac185826482c);
55
- $parcel$export(module.exports, "Content", () => $1345bda09ffc1bc6$export$7c6e2c02157bb7d2);
56
- $parcel$export(module.exports, "Viewport", () => $1345bda09ffc1bc6$export$d5c6c08dc2d3ca7);
57
- $parcel$export(module.exports, "Group", () => $1345bda09ffc1bc6$export$eb2fcfdbd7ba97d4);
58
- $parcel$export(module.exports, "Label", () => $1345bda09ffc1bc6$export$b04be29aa201d4f5);
59
- $parcel$export(module.exports, "Item", () => $1345bda09ffc1bc6$export$6d08773d2e66f8f2);
60
- $parcel$export(module.exports, "ItemText", () => $1345bda09ffc1bc6$export$d6e5bf9c43ea9319);
61
- $parcel$export(module.exports, "ItemIndicator", () => $1345bda09ffc1bc6$export$c3468e2714d175fa);
62
- $parcel$export(module.exports, "ScrollUpButton", () => $1345bda09ffc1bc6$export$2f60d3ec9ad468f2);
63
- $parcel$export(module.exports, "ScrollDownButton", () => $1345bda09ffc1bc6$export$bf1aedc3039c8d63);
64
- $parcel$export(module.exports, "Separator", () => $1345bda09ffc1bc6$export$1ff3c3f08ae963c0);
65
- $parcel$export(module.exports, "Arrow", () => $1345bda09ffc1bc6$export$21b07c8f274aebd5);
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
89
30
 
31
+ // packages/react/select/src/index.ts
32
+ var src_exports = {};
33
+ __export(src_exports, {
34
+ Arrow: () => Arrow2,
35
+ Content: () => Content2,
36
+ Group: () => Group,
37
+ Icon: () => Icon,
38
+ Item: () => Item,
39
+ ItemIndicator: () => ItemIndicator,
40
+ ItemText: () => ItemText,
41
+ Label: () => Label,
42
+ Portal: () => Portal,
43
+ Root: () => Root2,
44
+ ScrollDownButton: () => ScrollDownButton,
45
+ ScrollUpButton: () => ScrollUpButton,
46
+ Select: () => Select,
47
+ SelectArrow: () => SelectArrow,
48
+ SelectContent: () => SelectContent,
49
+ SelectGroup: () => SelectGroup,
50
+ SelectIcon: () => SelectIcon,
51
+ SelectItem: () => SelectItem,
52
+ SelectItemIndicator: () => SelectItemIndicator,
53
+ SelectItemText: () => SelectItemText,
54
+ SelectLabel: () => SelectLabel,
55
+ SelectPortal: () => SelectPortal,
56
+ SelectScrollDownButton: () => SelectScrollDownButton,
57
+ SelectScrollUpButton: () => SelectScrollUpButton,
58
+ SelectSeparator: () => SelectSeparator,
59
+ SelectTrigger: () => SelectTrigger,
60
+ SelectValue: () => SelectValue,
61
+ SelectViewport: () => SelectViewport,
62
+ Separator: () => Separator,
63
+ Trigger: () => Trigger,
64
+ Value: () => Value,
65
+ Viewport: () => Viewport,
66
+ createSelectScope: () => createSelectScope
67
+ });
68
+ module.exports = __toCommonJS(src_exports);
90
69
 
91
- const $1345bda09ffc1bc6$var$OPEN_KEYS = [
92
- ' ',
93
- 'Enter',
94
- 'ArrowUp',
95
- 'ArrowDown'
96
- ];
97
- const $1345bda09ffc1bc6$var$SELECTION_KEYS = [
98
- ' ',
99
- 'Enter'
100
- ];
101
- /* -------------------------------------------------------------------------------------------------
102
- * Select
103
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SELECT_NAME = 'Select';
104
- const [$1345bda09ffc1bc6$var$Collection, $1345bda09ffc1bc6$var$useCollection, $1345bda09ffc1bc6$var$createCollectionScope] = $cg2C9$radixuireactcollection.createCollection($1345bda09ffc1bc6$var$SELECT_NAME);
105
- const [$1345bda09ffc1bc6$var$createSelectContext, $1345bda09ffc1bc6$export$286727a75dc039bd] = $cg2C9$radixuireactcontext.createContextScope($1345bda09ffc1bc6$var$SELECT_NAME, [
106
- $1345bda09ffc1bc6$var$createCollectionScope,
107
- $cg2C9$radixuireactpopper.createPopperScope
70
+ // packages/react/select/src/Select.tsx
71
+ var React = __toESM(require("react"));
72
+ var ReactDOM = __toESM(require("react-dom"));
73
+ var import_number = require("@radix-ui/number");
74
+ var import_primitive = require("@radix-ui/primitive");
75
+ var import_react_collection = require("@radix-ui/react-collection");
76
+ var import_react_compose_refs = require("@radix-ui/react-compose-refs");
77
+ var import_react_context = require("@radix-ui/react-context");
78
+ var import_react_direction = require("@radix-ui/react-direction");
79
+ var import_react_dismissable_layer = require("@radix-ui/react-dismissable-layer");
80
+ var import_react_focus_guards = require("@radix-ui/react-focus-guards");
81
+ var import_react_focus_scope = require("@radix-ui/react-focus-scope");
82
+ var import_react_id = require("@radix-ui/react-id");
83
+ var PopperPrimitive = __toESM(require("@radix-ui/react-popper"));
84
+ var import_react_popper = require("@radix-ui/react-popper");
85
+ var import_react_portal = require("@radix-ui/react-portal");
86
+ var import_react_primitive = require("@radix-ui/react-primitive");
87
+ var import_react_slot = require("@radix-ui/react-slot");
88
+ var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
89
+ var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
90
+ var import_react_use_layout_effect = require("@radix-ui/react-use-layout-effect");
91
+ var import_react_use_previous = require("@radix-ui/react-use-previous");
92
+ var import_react_visually_hidden = require("@radix-ui/react-visually-hidden");
93
+ var import_aria_hidden = require("aria-hidden");
94
+ var import_react_remove_scroll = require("react-remove-scroll");
95
+ var import_jsx_runtime = require("react/jsx-runtime");
96
+ var OPEN_KEYS = [" ", "Enter", "ArrowUp", "ArrowDown"];
97
+ var SELECTION_KEYS = [" ", "Enter"];
98
+ var SELECT_NAME = "Select";
99
+ var [Collection, useCollection, createCollectionScope] = (0, import_react_collection.createCollection)(SELECT_NAME);
100
+ var [createSelectContext, createSelectScope] = (0, import_react_context.createContextScope)(SELECT_NAME, [
101
+ createCollectionScope,
102
+ import_react_popper.createPopperScope
108
103
  ]);
109
- const $1345bda09ffc1bc6$var$usePopperScope = $cg2C9$radixuireactpopper.createPopperScope();
110
- const [$1345bda09ffc1bc6$var$SelectProvider, $1345bda09ffc1bc6$var$useSelectContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$SELECT_NAME);
111
- const [$1345bda09ffc1bc6$var$SelectNativeOptionsProvider, $1345bda09ffc1bc6$var$useSelectNativeOptionsContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$SELECT_NAME);
112
- const $1345bda09ffc1bc6$export$ef9b1a59e592288f = (props)=>{
113
- const { __scopeSelect: __scopeSelect , children: children , open: openProp , defaultOpen: defaultOpen , onOpenChange: onOpenChange , value: valueProp , defaultValue: defaultValue , onValueChange: onValueChange , dir: dir , name: name , autoComplete: autoComplete , disabled: disabled , required: required } = props;
114
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
115
- const [trigger, setTrigger] = $cg2C9$react.useState(null);
116
- const [valueNode, setValueNode] = $cg2C9$react.useState(null);
117
- const [valueNodeHasChildren, setValueNodeHasChildren] = $cg2C9$react.useState(false);
118
- const direction = $cg2C9$radixuireactdirection.useDirection(dir);
119
- const [open = false, setOpen] = $cg2C9$radixuireactusecontrollablestate.useControllableState({
120
- prop: openProp,
121
- defaultProp: defaultOpen,
122
- onChange: onOpenChange
123
- });
124
- const [value, setValue] = $cg2C9$radixuireactusecontrollablestate.useControllableState({
125
- prop: valueProp,
126
- defaultProp: defaultValue,
127
- onChange: onValueChange
128
- });
129
- const triggerPointerDownPosRef = $cg2C9$react.useRef(null); // We set this to true by default so that events bubble to forms without JS (SSR)
130
- const isFormControl = trigger ? Boolean(trigger.closest('form')) : true;
131
- const [nativeOptionsSet, setNativeOptionsSet] = $cg2C9$react.useState(new Set()); // The native `select` only associates the correct default value if the corresponding
132
- // `option` is rendered as a child **at the same time** as itself.
133
- // Because it might take a few renders for our items to gather the information to build
134
- // the native `option`(s), we generate a key on the `select` to make sure React re-builds it
135
- // each time the options change.
136
- const nativeSelectKey = Array.from(nativeOptionsSet).map((option)=>option.props.value
137
- ).join(';');
138
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Root, popperScope, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectProvider, {
139
- required: required,
140
- scope: __scopeSelect,
141
- trigger: trigger,
142
- onTriggerChange: setTrigger,
143
- valueNode: valueNode,
144
- onValueNodeChange: setValueNode,
145
- valueNodeHasChildren: valueNodeHasChildren,
146
- onValueNodeHasChildrenChange: setValueNodeHasChildren,
147
- contentId: $cg2C9$radixuireactid.useId(),
148
- value: value,
149
- onValueChange: setValue,
150
- open: open,
151
- onOpenChange: setOpen,
152
- dir: direction,
153
- triggerPointerDownPosRef: triggerPointerDownPosRef,
154
- disabled: disabled
155
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Provider, {
156
- scope: __scopeSelect
157
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectNativeOptionsProvider, {
158
- scope: props.__scopeSelect,
159
- onNativeOptionAdd: $cg2C9$react.useCallback((option)=>{
160
- setNativeOptionsSet((prev)=>new Set(prev).add(option)
161
- );
162
- }, []),
163
- onNativeOptionRemove: $cg2C9$react.useCallback((option)=>{
164
- setNativeOptionsSet((prev)=>{
104
+ var usePopperScope = (0, import_react_popper.createPopperScope)();
105
+ var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
106
+ var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);
107
+ var Select = (props) => {
108
+ const {
109
+ __scopeSelect,
110
+ children,
111
+ open: openProp,
112
+ defaultOpen,
113
+ onOpenChange,
114
+ value: valueProp,
115
+ defaultValue,
116
+ onValueChange,
117
+ dir,
118
+ name,
119
+ autoComplete,
120
+ disabled,
121
+ required
122
+ } = props;
123
+ const popperScope = usePopperScope(__scopeSelect);
124
+ const [trigger, setTrigger] = React.useState(null);
125
+ const [valueNode, setValueNode] = React.useState(null);
126
+ const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);
127
+ const direction = (0, import_react_direction.useDirection)(dir);
128
+ const [open = false, setOpen] = (0, import_react_use_controllable_state.useControllableState)({
129
+ prop: openProp,
130
+ defaultProp: defaultOpen,
131
+ onChange: onOpenChange
132
+ });
133
+ const [value, setValue] = (0, import_react_use_controllable_state.useControllableState)({
134
+ prop: valueProp,
135
+ defaultProp: defaultValue,
136
+ onChange: onValueChange
137
+ });
138
+ const triggerPointerDownPosRef = React.useRef(null);
139
+ const isFormControl = trigger ? Boolean(trigger.closest("form")) : true;
140
+ const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());
141
+ const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
142
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
143
+ SelectProvider,
144
+ {
145
+ required,
146
+ scope: __scopeSelect,
147
+ trigger,
148
+ onTriggerChange: setTrigger,
149
+ valueNode,
150
+ onValueNodeChange: setValueNode,
151
+ valueNodeHasChildren,
152
+ onValueNodeHasChildrenChange: setValueNodeHasChildren,
153
+ contentId: (0, import_react_id.useId)(),
154
+ value,
155
+ onValueChange: setValue,
156
+ open,
157
+ onOpenChange: setOpen,
158
+ dir: direction,
159
+ triggerPointerDownPosRef,
160
+ disabled,
161
+ children: [
162
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
163
+ SelectNativeOptionsProvider,
164
+ {
165
+ scope: props.__scopeSelect,
166
+ onNativeOptionAdd: React.useCallback((option) => {
167
+ setNativeOptionsSet((prev) => new Set(prev).add(option));
168
+ }, []),
169
+ onNativeOptionRemove: React.useCallback((option) => {
170
+ setNativeOptionsSet((prev) => {
165
171
  const optionsSet = new Set(prev);
166
172
  optionsSet.delete(option);
167
173
  return optionsSet;
168
- });
169
- }, [])
170
- }, children)), isFormControl ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$BubbleSelect, {
171
- key: nativeSelectKey,
172
- "aria-hidden": true,
173
- required: required,
174
- tabIndex: -1,
175
- name: name,
176
- autoComplete: autoComplete,
177
- value: value // enable form autofill
178
- ,
179
- onChange: (event)=>setValue(event.target.value)
180
- ,
181
- disabled: disabled
182
- }, value === undefined ? /*#__PURE__*/ $cg2C9$react.createElement("option", {
183
- value: ""
184
- }) : null, Array.from(nativeOptionsSet)) : null));
174
+ });
175
+ }, []),
176
+ children
177
+ }
178
+ ) }),
179
+ isFormControl ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
180
+ BubbleSelect,
181
+ {
182
+ "aria-hidden": true,
183
+ required,
184
+ tabIndex: -1,
185
+ name,
186
+ autoComplete,
187
+ value,
188
+ onChange: (event) => setValue(event.target.value),
189
+ disabled,
190
+ children: [
191
+ value === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: "" }) : null,
192
+ Array.from(nativeOptionsSet)
193
+ ]
194
+ },
195
+ nativeSelectKey
196
+ ) : null
197
+ ]
198
+ }
199
+ ) });
185
200
  };
186
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ef9b1a59e592288f, {
187
- displayName: $1345bda09ffc1bc6$var$SELECT_NAME
188
- });
189
- /* -------------------------------------------------------------------------------------------------
190
- * SelectTrigger
191
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$TRIGGER_NAME = 'SelectTrigger';
192
- const $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
193
- const { __scopeSelect: __scopeSelect , disabled: disabled = false , ...triggerProps } = props;
194
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
195
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$TRIGGER_NAME, __scopeSelect);
201
+ Select.displayName = SELECT_NAME;
202
+ var TRIGGER_NAME = "SelectTrigger";
203
+ var SelectTrigger = React.forwardRef(
204
+ (props, forwardedRef) => {
205
+ const { __scopeSelect, disabled = false, ...triggerProps } = props;
206
+ const popperScope = usePopperScope(__scopeSelect);
207
+ const context = useSelectContext(TRIGGER_NAME, __scopeSelect);
196
208
  const isDisabled = context.disabled || disabled;
197
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.onTriggerChange);
198
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
199
- const [searchRef, handleTypeaheadSearch, resetTypeahead] = $1345bda09ffc1bc6$var$useTypeaheadSearch((search)=>{
200
- const enabledItems = getItems().filter((item)=>!item.disabled
201
- );
202
- const currentItem = enabledItems.find((item)=>item.value === context.value
203
- );
204
- const nextItem = $1345bda09ffc1bc6$var$findNextItem(enabledItems, search, currentItem);
205
- if (nextItem !== undefined) context.onValueChange(nextItem.value);
209
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, context.onTriggerChange);
210
+ const getItems = useCollection(__scopeSelect);
211
+ const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {
212
+ const enabledItems = getItems().filter((item) => !item.disabled);
213
+ const currentItem = enabledItems.find((item) => item.value === context.value);
214
+ const nextItem = findNextItem(enabledItems, search, currentItem);
215
+ if (nextItem !== void 0) {
216
+ context.onValueChange(nextItem.value);
217
+ }
206
218
  });
207
- const handleOpen = ()=>{
208
- if (!isDisabled) {
209
- context.onOpenChange(true); // reset typeahead when we open
210
- resetTypeahead();
211
- }
219
+ const handleOpen = () => {
220
+ if (!isDisabled) {
221
+ context.onOpenChange(true);
222
+ resetTypeahead();
223
+ }
212
224
  };
213
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Anchor, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
214
- asChild: true
215
- }, popperScope), /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.button, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
225
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
226
+ import_react_primitive.Primitive.button,
227
+ {
216
228
  type: "button",
217
229
  role: "combobox",
218
230
  "aria-controls": context.contentId,
@@ -220,1091 +232,951 @@ const $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1 = /*#__PURE__*/ $cg2C9$react.forw
220
232
  "aria-required": context.required,
221
233
  "aria-autocomplete": "none",
222
234
  dir: context.dir,
223
- "data-state": context.open ? 'open' : 'closed',
235
+ "data-state": context.open ? "open" : "closed",
224
236
  disabled: isDisabled,
225
- "data-disabled": isDisabled ? '' : undefined,
226
- "data-placeholder": $1345bda09ffc1bc6$var$shouldShowPlaceholder(context.value) ? '' : undefined
227
- }, triggerProps, {
228
- ref: composedRefs // Enable compatibility with native label or custom `Label` "click" for Safari:
229
- ,
230
- onClick: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onClick, (event)=>{
231
- // Whilst browsers generally have no issue focusing the trigger when clicking
232
- // on a label, Safari seems to struggle with the fact that there's no `onClick`.
233
- // We force `focus` in this case. Note: this doesn't create any other side-effect
234
- // because we are preventing default in `onPointerDown` so effectively
235
- // this only runs for a label "click"
236
- event.currentTarget.focus();
237
+ "data-disabled": isDisabled ? "" : void 0,
238
+ "data-placeholder": shouldShowPlaceholder(context.value) ? "" : void 0,
239
+ ...triggerProps,
240
+ ref: composedRefs,
241
+ onClick: (0, import_primitive.composeEventHandlers)(triggerProps.onClick, (event) => {
242
+ event.currentTarget.focus();
237
243
  }),
238
- onPointerDown: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onPointerDown, (event)=>{
239
- // prevent implicit pointer capture
240
- // https://www.w3.org/TR/pointerevents3/#implicit-pointer-capture
241
- const target = event.target;
242
- if (target.hasPointerCapture(event.pointerId)) target.releasePointerCapture(event.pointerId);
243
- // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)
244
- // but not when the control key is pressed (avoiding MacOS right click)
245
- if (event.button === 0 && event.ctrlKey === false) {
246
- handleOpen();
247
- context.triggerPointerDownPosRef.current = {
248
- x: Math.round(event.pageX),
249
- y: Math.round(event.pageY)
250
- }; // prevent trigger from stealing focus from the active item after opening.
251
- event.preventDefault();
252
- }
244
+ onPointerDown: (0, import_primitive.composeEventHandlers)(triggerProps.onPointerDown, (event) => {
245
+ const target = event.target;
246
+ if (target.hasPointerCapture(event.pointerId)) {
247
+ target.releasePointerCapture(event.pointerId);
248
+ }
249
+ if (event.button === 0 && event.ctrlKey === false) {
250
+ handleOpen();
251
+ context.triggerPointerDownPosRef.current = {
252
+ x: Math.round(event.pageX),
253
+ y: Math.round(event.pageY)
254
+ };
255
+ event.preventDefault();
256
+ }
253
257
  }),
254
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(triggerProps.onKeyDown, (event)=>{
255
- const isTypingAhead = searchRef.current !== '';
256
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
257
- if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
258
- if (isTypingAhead && event.key === ' ') return;
259
- if ($1345bda09ffc1bc6$var$OPEN_KEYS.includes(event.key)) {
260
- handleOpen();
261
- event.preventDefault();
262
- }
258
+ onKeyDown: (0, import_primitive.composeEventHandlers)(triggerProps.onKeyDown, (event) => {
259
+ const isTypingAhead = searchRef.current !== "";
260
+ const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
261
+ if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
262
+ if (isTypingAhead && event.key === " ") return;
263
+ if (OPEN_KEYS.includes(event.key)) {
264
+ handleOpen();
265
+ event.preventDefault();
266
+ }
263
267
  })
264
- })));
265
- });
266
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$3ac1e88a1c0b9f1, {
267
- displayName: $1345bda09ffc1bc6$var$TRIGGER_NAME
268
- });
269
- /* -------------------------------------------------------------------------------------------------
270
- * SelectValue
271
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$VALUE_NAME = 'SelectValue';
272
- const $1345bda09ffc1bc6$export$e288731fd71264f0 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
273
- // We ignore `className` and `style` as this part shouldn't be styled.
274
- const { __scopeSelect: __scopeSelect , className: className , style: style , children: children , placeholder: placeholder = '' , ...valueProps } = props;
275
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$VALUE_NAME, __scopeSelect);
276
- const { onValueNodeHasChildrenChange: onValueNodeHasChildrenChange } = context;
277
- const hasChildren = children !== undefined;
278
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, context.onValueNodeChange);
279
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
280
- onValueNodeHasChildrenChange(hasChildren);
281
- }, [
282
- onValueNodeHasChildrenChange,
283
- hasChildren
284
- ]);
285
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, valueProps, {
286
- ref: composedRefs // we don't want events from the portalled `SelectValue` children to bubble
287
- ,
288
- style: {
289
- pointerEvents: 'none'
290
- }
291
- }), $1345bda09ffc1bc6$var$shouldShowPlaceholder(context.value) ? /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$react.Fragment, null, placeholder) : children);
292
- });
293
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$e288731fd71264f0, {
294
- displayName: $1345bda09ffc1bc6$var$VALUE_NAME
295
- });
296
- /* -------------------------------------------------------------------------------------------------
297
- * SelectIcon
298
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ICON_NAME = 'SelectIcon';
299
- const $1345bda09ffc1bc6$export$99b400cabb58c515 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
300
- const { __scopeSelect: __scopeSelect , children: children , ...iconProps } = props;
301
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
302
- "aria-hidden": true
303
- }, iconProps, {
304
- ref: forwardedRef
305
- }), children || '▼');
306
- });
307
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$99b400cabb58c515, {
308
- displayName: $1345bda09ffc1bc6$var$ICON_NAME
309
- });
310
- /* -------------------------------------------------------------------------------------------------
311
- * SelectPortal
312
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$PORTAL_NAME = 'SelectPortal';
313
- const $1345bda09ffc1bc6$export$b2af6c9944296213 = (props)=>{
314
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactportal.Portal, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
315
- asChild: true
316
- }, props));
268
+ }
269
+ ) });
270
+ }
271
+ );
272
+ SelectTrigger.displayName = TRIGGER_NAME;
273
+ var VALUE_NAME = "SelectValue";
274
+ var SelectValue = React.forwardRef(
275
+ (props, forwardedRef) => {
276
+ const { __scopeSelect, className, style, children, placeholder = "", ...valueProps } = props;
277
+ const context = useSelectContext(VALUE_NAME, __scopeSelect);
278
+ const { onValueNodeHasChildrenChange } = context;
279
+ const hasChildren = children !== void 0;
280
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, context.onValueNodeChange);
281
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
282
+ onValueNodeHasChildrenChange(hasChildren);
283
+ }, [onValueNodeHasChildrenChange, hasChildren]);
284
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
285
+ import_react_primitive.Primitive.span,
286
+ {
287
+ ...valueProps,
288
+ ref: composedRefs,
289
+ style: { pointerEvents: "none" },
290
+ children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: placeholder }) : children
291
+ }
292
+ );
293
+ }
294
+ );
295
+ SelectValue.displayName = VALUE_NAME;
296
+ var ICON_NAME = "SelectIcon";
297
+ var SelectIcon = React.forwardRef(
298
+ (props, forwardedRef) => {
299
+ const { __scopeSelect, children, ...iconProps } = props;
300
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.span, { "aria-hidden": true, ...iconProps, ref: forwardedRef, children: children || "\u25BC" });
301
+ }
302
+ );
303
+ SelectIcon.displayName = ICON_NAME;
304
+ var PORTAL_NAME = "SelectPortal";
305
+ var SelectPortal = (props) => {
306
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_portal.Portal, { asChild: true, ...props });
317
307
  };
318
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$b2af6c9944296213, {
319
- displayName: $1345bda09ffc1bc6$var$PORTAL_NAME
320
- });
321
- /* -------------------------------------------------------------------------------------------------
322
- * SelectContent
323
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$CONTENT_NAME = 'SelectContent';
324
- const $1345bda09ffc1bc6$export$c973a4b3cb86a03d = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
325
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, props.__scopeSelect);
326
- const [fragment, setFragment] = $cg2C9$react.useState(); // setting the fragment in `useLayoutEffect` as `DocumentFragment` doesn't exist on the server
327
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
328
- setFragment(new DocumentFragment());
308
+ SelectPortal.displayName = PORTAL_NAME;
309
+ var CONTENT_NAME = "SelectContent";
310
+ var SelectContent = React.forwardRef(
311
+ (props, forwardedRef) => {
312
+ const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);
313
+ const [fragment, setFragment] = React.useState();
314
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
315
+ setFragment(new DocumentFragment());
329
316
  }, []);
330
317
  if (!context.open) {
331
- const frag = fragment;
332
- return frag ? /*#__PURE__*/ $cg2C9$reactdom.createPortal(/*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentProvider, {
333
- scope: props.__scopeSelect
334
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Slot, {
335
- scope: props.__scopeSelect
336
- }, /*#__PURE__*/ $cg2C9$react.createElement("div", null, props.children))), frag) : null;
318
+ const frag = fragment;
319
+ return frag ? ReactDOM.createPortal(
320
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: props.children }) }) }),
321
+ frag
322
+ ) : null;
337
323
  }
338
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
339
- ref: forwardedRef
340
- }));
341
- });
342
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$c973a4b3cb86a03d, {
343
- displayName: $1345bda09ffc1bc6$var$CONTENT_NAME
344
- });
345
- /* -------------------------------------------------------------------------------------------------
346
- * SelectContentImpl
347
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$CONTENT_MARGIN = 10;
348
- const [$1345bda09ffc1bc6$var$SelectContentProvider, $1345bda09ffc1bc6$var$useSelectContentContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME);
349
- const $1345bda09ffc1bc6$var$CONTENT_IMPL_NAME = 'SelectContentImpl';
350
- const $1345bda09ffc1bc6$var$SelectContentImpl = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
351
- const { __scopeSelect: __scopeSelect , position: position = 'item-aligned' , onCloseAutoFocus: onCloseAutoFocus , onEscapeKeyDown: onEscapeKeyDown , onPointerDownOutside: onPointerDownOutside , side: //
352
- // PopperContent props
353
- side , sideOffset: sideOffset , align: align , alignOffset: alignOffset , arrowPadding: arrowPadding , collisionBoundary: collisionBoundary , collisionPadding: collisionPadding , sticky: sticky , hideWhenDetached: hideWhenDetached , avoidCollisions: avoidCollisions , //
354
- ...contentProps } = props;
355
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
356
- const [content, setContent] = $cg2C9$react.useState(null);
357
- const [viewport, setViewport] = $cg2C9$react.useState(null);
358
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setContent(node)
324
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectContentImpl, { ...props, ref: forwardedRef });
325
+ }
326
+ );
327
+ SelectContent.displayName = CONTENT_NAME;
328
+ var CONTENT_MARGIN = 10;
329
+ var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);
330
+ var CONTENT_IMPL_NAME = "SelectContentImpl";
331
+ var SelectContentImpl = React.forwardRef(
332
+ (props, forwardedRef) => {
333
+ const {
334
+ __scopeSelect,
335
+ position = "item-aligned",
336
+ onCloseAutoFocus,
337
+ onEscapeKeyDown,
338
+ onPointerDownOutside,
339
+ //
340
+ // PopperContent props
341
+ side,
342
+ sideOffset,
343
+ align,
344
+ alignOffset,
345
+ arrowPadding,
346
+ collisionBoundary,
347
+ collisionPadding,
348
+ sticky,
349
+ hideWhenDetached,
350
+ avoidCollisions,
351
+ //
352
+ ...contentProps
353
+ } = props;
354
+ const context = useSelectContext(CONTENT_NAME, __scopeSelect);
355
+ const [content, setContent] = React.useState(null);
356
+ const [viewport, setViewport] = React.useState(null);
357
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, (node) => setContent(node));
358
+ const [selectedItem, setSelectedItem] = React.useState(null);
359
+ const [selectedItemText, setSelectedItemText] = React.useState(
360
+ null
359
361
  );
360
- const [selectedItem, setSelectedItem] = $cg2C9$react.useState(null);
361
- const [selectedItemText, setSelectedItemText] = $cg2C9$react.useState(null);
362
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
363
- const [isPositioned, setIsPositioned] = $cg2C9$react.useState(false);
364
- const firstValidItemFoundRef = $cg2C9$react.useRef(false); // aria-hide everything except the content (better supported equivalent to setting aria-modal)
365
- $cg2C9$react.useEffect(()=>{
366
- if (content) return $cg2C9$ariahidden.hideOthers(content);
367
- }, [
368
- content
369
- ]); // Make sure the whole tree has focus guards as our `Select` may be
370
- // the last element in the DOM (because of the `Portal`)
371
- $cg2C9$radixuireactfocusguards.useFocusGuards();
372
- const focusFirst = $cg2C9$react.useCallback((candidates)=>{
373
- const [firstItem, ...restItems] = getItems().map((item)=>item.ref.current
374
- );
362
+ const getItems = useCollection(__scopeSelect);
363
+ const [isPositioned, setIsPositioned] = React.useState(false);
364
+ const firstValidItemFoundRef = React.useRef(false);
365
+ React.useEffect(() => {
366
+ if (content) return (0, import_aria_hidden.hideOthers)(content);
367
+ }, [content]);
368
+ (0, import_react_focus_guards.useFocusGuards)();
369
+ const focusFirst = React.useCallback(
370
+ (candidates) => {
371
+ const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);
375
372
  const [lastItem] = restItems.slice(-1);
376
373
  const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
377
- for (const candidate of candidates){
378
- // if focus is already where we want to go, we don't want to keep going through the candidates
379
- if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
380
- candidate === null || candidate === void 0 || candidate.scrollIntoView({
381
- block: 'nearest'
382
- }); // viewport might have padding so scroll to its edges when focusing first/last items.
383
- if (candidate === firstItem && viewport) viewport.scrollTop = 0;
384
- if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;
385
- candidate === null || candidate === void 0 || candidate.focus();
386
- if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
374
+ for (const candidate of candidates) {
375
+ if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
376
+ candidate?.scrollIntoView({ block: "nearest" });
377
+ if (candidate === firstItem && viewport) viewport.scrollTop = 0;
378
+ if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;
379
+ candidate?.focus();
380
+ if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
387
381
  }
388
- }, [
389
- getItems,
390
- viewport
391
- ]);
392
- const focusSelectedItem = $cg2C9$react.useCallback(()=>focusFirst([
393
- selectedItem,
394
- content
395
- ])
396
- , [
397
- focusFirst,
398
- selectedItem,
399
- content
400
- ]); // Since this is not dependent on layout, we want to ensure this runs at the same time as
401
- // other effects across components. Hence why we don't call `focusSelectedItem` inside `position`.
402
- $cg2C9$react.useEffect(()=>{
403
- if (isPositioned) focusSelectedItem();
404
- }, [
405
- isPositioned,
406
- focusSelectedItem
407
- ]); // prevent selecting items on `pointerup` in some cases after opening from `pointerdown`
408
- // and close on `pointerup` outside.
409
- const { onOpenChange: onOpenChange , triggerPointerDownPosRef: triggerPointerDownPosRef } = context;
410
- $cg2C9$react.useEffect(()=>{
411
- if (content) {
412
- let pointerMoveDelta = {
413
- x: 0,
414
- y: 0
415
- };
416
- const handlePointerMove = (event)=>{
417
- var _triggerPointerDownPo, _triggerPointerDownPo2, _triggerPointerDownPo3, _triggerPointerDownPo4;
418
- pointerMoveDelta = {
419
- x: Math.abs(Math.round(event.pageX) - ((_triggerPointerDownPo = (_triggerPointerDownPo2 = triggerPointerDownPosRef.current) === null || _triggerPointerDownPo2 === void 0 ? void 0 : _triggerPointerDownPo2.x) !== null && _triggerPointerDownPo !== void 0 ? _triggerPointerDownPo : 0)),
420
- y: Math.abs(Math.round(event.pageY) - ((_triggerPointerDownPo3 = (_triggerPointerDownPo4 = triggerPointerDownPosRef.current) === null || _triggerPointerDownPo4 === void 0 ? void 0 : _triggerPointerDownPo4.y) !== null && _triggerPointerDownPo3 !== void 0 ? _triggerPointerDownPo3 : 0))
421
- };
422
- };
423
- const handlePointerUp = (event)=>{
424
- // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.
425
- if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) event.preventDefault();
426
- else // otherwise, if the event was outside the content, close.
427
- if (!content.contains(event.target)) onOpenChange(false);
428
- document.removeEventListener('pointermove', handlePointerMove);
429
- triggerPointerDownPosRef.current = null;
430
- };
431
- if (triggerPointerDownPosRef.current !== null) {
432
- document.addEventListener('pointermove', handlePointerMove);
433
- document.addEventListener('pointerup', handlePointerUp, {
434
- capture: true,
435
- once: true
436
- });
382
+ },
383
+ [getItems, viewport]
384
+ );
385
+ const focusSelectedItem = React.useCallback(
386
+ () => focusFirst([selectedItem, content]),
387
+ [focusFirst, selectedItem, content]
388
+ );
389
+ React.useEffect(() => {
390
+ if (isPositioned) {
391
+ focusSelectedItem();
392
+ }
393
+ }, [isPositioned, focusSelectedItem]);
394
+ const { onOpenChange, triggerPointerDownPosRef } = context;
395
+ React.useEffect(() => {
396
+ if (content) {
397
+ let pointerMoveDelta = { x: 0, y: 0 };
398
+ const handlePointerMove = (event) => {
399
+ pointerMoveDelta = {
400
+ x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),
401
+ y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))
402
+ };
403
+ };
404
+ const handlePointerUp = (event) => {
405
+ if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {
406
+ event.preventDefault();
407
+ } else {
408
+ if (!content.contains(event.target)) {
409
+ onOpenChange(false);
437
410
  }
438
- return ()=>{
439
- document.removeEventListener('pointermove', handlePointerMove);
440
- document.removeEventListener('pointerup', handlePointerUp, {
441
- capture: true
442
- });
443
- };
411
+ }
412
+ document.removeEventListener("pointermove", handlePointerMove);
413
+ triggerPointerDownPosRef.current = null;
414
+ };
415
+ if (triggerPointerDownPosRef.current !== null) {
416
+ document.addEventListener("pointermove", handlePointerMove);
417
+ document.addEventListener("pointerup", handlePointerUp, { capture: true, once: true });
444
418
  }
445
- }, [
446
- content,
447
- onOpenChange,
448
- triggerPointerDownPosRef
449
- ]);
450
- $cg2C9$react.useEffect(()=>{
451
- const close = ()=>onOpenChange(false)
452
- ;
453
- window.addEventListener('blur', close);
454
- window.addEventListener('resize', close);
455
- return ()=>{
456
- window.removeEventListener('blur', close);
457
- window.removeEventListener('resize', close);
419
+ return () => {
420
+ document.removeEventListener("pointermove", handlePointerMove);
421
+ document.removeEventListener("pointerup", handlePointerUp, { capture: true });
458
422
  };
459
- }, [
460
- onOpenChange
461
- ]);
462
- const [searchRef, handleTypeaheadSearch] = $1345bda09ffc1bc6$var$useTypeaheadSearch((search)=>{
463
- const enabledItems = getItems().filter((item)=>!item.disabled
464
- );
465
- const currentItem = enabledItems.find((item)=>item.ref.current === document.activeElement
466
- );
467
- const nextItem = $1345bda09ffc1bc6$var$findNextItem(enabledItems, search, currentItem);
468
- if (nextItem) /**
469
- * Imperative focus during keydown is risky so we prevent React's batching updates
470
- * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
471
- */ setTimeout(()=>nextItem.ref.current.focus()
472
- );
423
+ }
424
+ }, [content, onOpenChange, triggerPointerDownPosRef]);
425
+ React.useEffect(() => {
426
+ const close = () => onOpenChange(false);
427
+ window.addEventListener("blur", close);
428
+ window.addEventListener("resize", close);
429
+ return () => {
430
+ window.removeEventListener("blur", close);
431
+ window.removeEventListener("resize", close);
432
+ };
433
+ }, [onOpenChange]);
434
+ const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {
435
+ const enabledItems = getItems().filter((item) => !item.disabled);
436
+ const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);
437
+ const nextItem = findNextItem(enabledItems, search, currentItem);
438
+ if (nextItem) {
439
+ setTimeout(() => nextItem.ref.current.focus());
440
+ }
473
441
  });
474
- const itemRefCallback = $cg2C9$react.useCallback((node, value, disabled)=>{
442
+ const itemRefCallback = React.useCallback(
443
+ (node, value, disabled) => {
475
444
  const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
476
- const isSelectedItem = context.value !== undefined && context.value === value;
445
+ const isSelectedItem = context.value !== void 0 && context.value === value;
477
446
  if (isSelectedItem || isFirstValidItem) {
478
- setSelectedItem(node);
479
- if (isFirstValidItem) firstValidItemFoundRef.current = true;
447
+ setSelectedItem(node);
448
+ if (isFirstValidItem) firstValidItemFoundRef.current = true;
480
449
  }
481
- }, [
482
- context.value
483
- ]);
484
- const handleItemLeave = $cg2C9$react.useCallback(()=>content === null || content === void 0 ? void 0 : content.focus()
485
- , [
486
- content
487
- ]);
488
- const itemTextRefCallback = $cg2C9$react.useCallback((node, value, disabled)=>{
450
+ },
451
+ [context.value]
452
+ );
453
+ const handleItemLeave = React.useCallback(() => content?.focus(), [content]);
454
+ const itemTextRefCallback = React.useCallback(
455
+ (node, value, disabled) => {
489
456
  const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
490
- const isSelectedItem = context.value !== undefined && context.value === value;
491
- if (isSelectedItem || isFirstValidItem) setSelectedItemText(node);
492
- }, [
493
- context.value
494
- ]);
495
- const SelectPosition = position === 'popper' ? $1345bda09ffc1bc6$var$SelectPopperPosition : $1345bda09ffc1bc6$var$SelectItemAlignedPosition; // Silently ignore props that are not supported by `SelectItemAlignedPosition`
496
- const popperContentProps = SelectPosition === $1345bda09ffc1bc6$var$SelectPopperPosition ? {
497
- side: side,
498
- sideOffset: sideOffset,
499
- align: align,
500
- alignOffset: alignOffset,
501
- arrowPadding: arrowPadding,
502
- collisionBoundary: collisionBoundary,
503
- collisionPadding: collisionPadding,
504
- sticky: sticky,
505
- hideWhenDetached: hideWhenDetached,
506
- avoidCollisions: avoidCollisions
457
+ const isSelectedItem = context.value !== void 0 && context.value === value;
458
+ if (isSelectedItem || isFirstValidItem) {
459
+ setSelectedItemText(node);
460
+ }
461
+ },
462
+ [context.value]
463
+ );
464
+ const SelectPosition = position === "popper" ? SelectPopperPosition : SelectItemAlignedPosition;
465
+ const popperContentProps = SelectPosition === SelectPopperPosition ? {
466
+ side,
467
+ sideOffset,
468
+ align,
469
+ alignOffset,
470
+ arrowPadding,
471
+ collisionBoundary,
472
+ collisionPadding,
473
+ sticky,
474
+ hideWhenDetached,
475
+ avoidCollisions
507
476
  } : {};
508
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectContentProvider, {
477
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
478
+ SelectContentProvider,
479
+ {
509
480
  scope: __scopeSelect,
510
- content: content,
511
- viewport: viewport,
512
- onViewportChange: setViewport,
513
- itemRefCallback: itemRefCallback,
514
- selectedItem: selectedItem,
515
- onItemLeave: handleItemLeave,
516
- itemTextRefCallback: itemTextRefCallback,
517
- focusSelectedItem: focusSelectedItem,
518
- selectedItemText: selectedItemText,
519
- position: position,
520
- isPositioned: isPositioned,
521
- searchRef: searchRef
522
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$reactremovescroll.RemoveScroll, {
523
- as: $cg2C9$radixuireactslot.Slot,
524
- allowPinchZoom: true
525
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactfocusscope.FocusScope, {
526
- asChild: true // we make sure we're not trapping once it's been closed
527
- ,
528
- trapped: context.open,
529
- onMountAutoFocus: (event)=>{
530
- // we prevent open autofocus because we manually focus the selected item
531
- event.preventDefault();
532
- },
533
- onUnmountAutoFocus: $cg2C9$radixuiprimitive.composeEventHandlers(onCloseAutoFocus, (event)=>{
534
- var _context$trigger;
535
- (_context$trigger = context.trigger) === null || _context$trigger === void 0 || _context$trigger.focus({
536
- preventScroll: true
537
- });
538
- event.preventDefault();
539
- })
540
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactdismissablelayer.DismissableLayer, {
541
- asChild: true,
542
- disableOutsidePointerEvents: true,
543
- onEscapeKeyDown: onEscapeKeyDown,
544
- onPointerDownOutside: onPointerDownOutside // When focus is trapped, a focusout event may still happen.
545
- ,
546
- onFocusOutside: (event)=>event.preventDefault()
547
- ,
548
- onDismiss: ()=>context.onOpenChange(false)
549
- }, /*#__PURE__*/ $cg2C9$react.createElement(SelectPosition, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
550
- role: "listbox",
551
- id: context.contentId,
552
- "data-state": context.open ? 'open' : 'closed',
553
- dir: context.dir,
554
- onContextMenu: (event)=>event.preventDefault()
555
- }, contentProps, popperContentProps, {
556
- onPlaced: ()=>setIsPositioned(true)
557
- ,
558
- ref: composedRefs,
559
- style: {
560
- // flex layout so we can place the scroll buttons properly
561
- display: 'flex',
562
- flexDirection: 'column',
563
- // reset the outline by default as the content MAY get focused
564
- outline: 'none',
565
- ...contentProps.style
566
- },
567
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(contentProps.onKeyDown, (event)=>{
568
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey; // select should not be navigated using tab key so we prevent it
569
- if (event.key === 'Tab') event.preventDefault();
570
- if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
571
- if ([
572
- 'ArrowUp',
573
- 'ArrowDown',
574
- 'Home',
575
- 'End'
576
- ].includes(event.key)) {
577
- const items = getItems().filter((item)=>!item.disabled
578
- );
579
- let candidateNodes = items.map((item)=>item.ref.current
580
- );
581
- if ([
582
- 'ArrowUp',
583
- 'End'
584
- ].includes(event.key)) candidateNodes = candidateNodes.slice().reverse();
585
- if ([
586
- 'ArrowUp',
587
- 'ArrowDown'
588
- ].includes(event.key)) {
589
- const currentElement = event.target;
590
- const currentIndex = candidateNodes.indexOf(currentElement);
591
- candidateNodes = candidateNodes.slice(currentIndex + 1);
592
- }
593
- /**
594
- * Imperative focus during keydown is risky so we prevent React's batching updates
595
- * to avoid potential bugs. See: https://github.com/facebook/react/issues/20332
596
- */ setTimeout(()=>focusFirst(candidateNodes)
597
- );
598
- event.preventDefault();
599
- }
600
- })
601
- }))))));
602
- });
603
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectContentImpl, {
604
- displayName: $1345bda09ffc1bc6$var$CONTENT_IMPL_NAME
605
- });
606
- /* -------------------------------------------------------------------------------------------------
607
- * SelectItemAlignedPosition
608
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_ALIGNED_POSITION_NAME = 'SelectItemAlignedPosition';
609
- const $1345bda09ffc1bc6$var$SelectItemAlignedPosition = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
610
- const { __scopeSelect: __scopeSelect , onPlaced: onPlaced , ...popperProps } = props;
611
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
612
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$CONTENT_NAME, __scopeSelect);
613
- const [contentWrapper, setContentWrapper] = $cg2C9$react.useState(null);
614
- const [content, setContent] = $cg2C9$react.useState(null);
615
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setContent(node)
616
- );
617
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
618
- const shouldExpandOnScrollRef = $cg2C9$react.useRef(false);
619
- const shouldRepositionRef = $cg2C9$react.useRef(true);
620
- const { viewport: viewport , selectedItem: selectedItem , selectedItemText: selectedItemText , focusSelectedItem: focusSelectedItem } = contentContext;
621
- const position = $cg2C9$react.useCallback(()=>{
622
- if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {
623
- const triggerRect = context.trigger.getBoundingClientRect(); // -----------------------------------------------------------------------------------------
624
- // Horizontal positioning
625
- // -----------------------------------------------------------------------------------------
626
- const contentRect = content.getBoundingClientRect();
627
- const valueNodeRect = context.valueNode.getBoundingClientRect();
628
- const itemTextRect = selectedItemText.getBoundingClientRect();
629
- if (context.dir !== 'rtl') {
630
- const itemTextOffset = itemTextRect.left - contentRect.left;
631
- const left = valueNodeRect.left - itemTextOffset;
632
- const leftDelta = triggerRect.left - left;
633
- const minContentWidth = triggerRect.width + leftDelta;
634
- const contentWidth = Math.max(minContentWidth, contentRect.width);
635
- const rightEdge = window.innerWidth - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
636
- const clampedLeft = $cg2C9$radixuinumber.clamp(left, [
637
- $1345bda09ffc1bc6$var$CONTENT_MARGIN,
638
- rightEdge - contentWidth
639
- ]);
640
- contentWrapper.style.minWidth = minContentWidth + 'px';
641
- contentWrapper.style.left = clampedLeft + 'px';
642
- } else {
643
- const itemTextOffset = contentRect.right - itemTextRect.right;
644
- const right = window.innerWidth - valueNodeRect.right - itemTextOffset;
645
- const rightDelta = window.innerWidth - triggerRect.right - right;
646
- const minContentWidth = triggerRect.width + rightDelta;
647
- const contentWidth = Math.max(minContentWidth, contentRect.width);
648
- const leftEdge = window.innerWidth - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
649
- const clampedRight = $cg2C9$radixuinumber.clamp(right, [
650
- $1345bda09ffc1bc6$var$CONTENT_MARGIN,
651
- leftEdge - contentWidth
652
- ]);
653
- contentWrapper.style.minWidth = minContentWidth + 'px';
654
- contentWrapper.style.right = clampedRight + 'px';
655
- } // -----------------------------------------------------------------------------------------
656
- // Vertical positioning
657
- // -----------------------------------------------------------------------------------------
658
- const items = getItems();
659
- const availableHeight = window.innerHeight - $1345bda09ffc1bc6$var$CONTENT_MARGIN * 2;
660
- const itemsHeight = viewport.scrollHeight;
661
- const contentStyles = window.getComputedStyle(content);
662
- const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);
663
- const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
664
- const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);
665
- const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);
666
- const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth; // prettier-ignore
667
- const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);
668
- const viewportStyles = window.getComputedStyle(viewport);
669
- const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);
670
- const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);
671
- const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - $1345bda09ffc1bc6$var$CONTENT_MARGIN;
672
- const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;
673
- const selectedItemHalfHeight = selectedItem.offsetHeight / 2;
674
- const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;
675
- const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;
676
- const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;
677
- const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;
678
- if (willAlignWithoutTopOverflow) {
679
- const isLastItem = selectedItem === items[items.length - 1].ref.current;
680
- contentWrapper.style.bottom = "0px";
681
- const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;
682
- const clampedTriggerMiddleToBottomEdge = Math.max(triggerMiddleToBottomEdge, selectedItemHalfHeight + (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth);
683
- const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;
684
- contentWrapper.style.height = height + 'px';
685
- } else {
686
- const isFirstItem = selectedItem === items[0].ref.current;
687
- contentWrapper.style.top = "0px";
688
- const clampedTopEdgeToTriggerMiddle = Math.max(topEdgeToTriggerMiddle, contentBorderTopWidth + viewport.offsetTop + (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight);
689
- const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;
690
- contentWrapper.style.height = height + 'px';
691
- viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;
692
- }
693
- contentWrapper.style.margin = `${$1345bda09ffc1bc6$var$CONTENT_MARGIN}px 0`;
694
- contentWrapper.style.minHeight = minContentHeight + 'px';
695
- contentWrapper.style.maxHeight = availableHeight + 'px'; // -----------------------------------------------------------------------------------------
696
- onPlaced === null || onPlaced === void 0 || onPlaced(); // we don't want the initial scroll position adjustment to trigger "expand on scroll"
697
- // so we explicitly turn it on only after they've registered.
698
- requestAnimationFrame(()=>shouldExpandOnScrollRef.current = true
699
- );
700
- }
701
- }, [
702
- getItems,
703
- context.trigger,
704
- context.valueNode,
705
- contentWrapper,
706
481
  content,
707
482
  viewport,
483
+ onViewportChange: setViewport,
484
+ itemRefCallback,
708
485
  selectedItem,
486
+ onItemLeave: handleItemLeave,
487
+ itemTextRefCallback,
488
+ focusSelectedItem,
709
489
  selectedItemText,
710
- context.dir,
711
- onPlaced
712
- ]);
713
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>position()
714
- , [
715
- position
716
- ]); // copy z-index from content to wrapper
717
- const [contentZIndex, setContentZIndex] = $cg2C9$react.useState();
718
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
719
- if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
720
- }, [
721
- content
722
- ]); // When the viewport becomes scrollable at the top, the scroll up button will mount.
723
- // Because it is part of the normal flow, it will push down the viewport, thus throwing our
724
- // trigger => selectedItem alignment off by the amount the viewport was pushed down.
725
- // We wait for this to happen and then re-run the positining logic one more time to account for it.
726
- const handleScrollButtonChange = $cg2C9$react.useCallback((node)=>{
727
- if (node && shouldRepositionRef.current === true) {
728
- position();
729
- focusSelectedItem === null || focusSelectedItem === void 0 || focusSelectedItem();
730
- shouldRepositionRef.current = false;
731
- }
732
- }, [
733
490
  position,
734
- focusSelectedItem
735
- ]);
736
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectViewportProvider, {
737
- scope: __scopeSelect,
738
- contentWrapper: contentWrapper,
739
- shouldExpandOnScrollRef: shouldExpandOnScrollRef,
740
- onScrollButtonChange: handleScrollButtonChange
741
- }, /*#__PURE__*/ $cg2C9$react.createElement("div", {
742
- ref: setContentWrapper,
743
- style: {
744
- display: 'flex',
745
- flexDirection: 'column',
746
- position: 'fixed',
491
+ isPositioned,
492
+ searchRef,
493
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_remove_scroll.RemoveScroll, { as: import_react_slot.Slot, allowPinchZoom: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
494
+ import_react_focus_scope.FocusScope,
495
+ {
496
+ asChild: true,
497
+ trapped: context.open,
498
+ onMountAutoFocus: (event) => {
499
+ event.preventDefault();
500
+ },
501
+ onUnmountAutoFocus: (0, import_primitive.composeEventHandlers)(onCloseAutoFocus, (event) => {
502
+ context.trigger?.focus({ preventScroll: true });
503
+ event.preventDefault();
504
+ }),
505
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
506
+ import_react_dismissable_layer.DismissableLayer,
507
+ {
508
+ asChild: true,
509
+ disableOutsidePointerEvents: true,
510
+ onEscapeKeyDown,
511
+ onPointerDownOutside,
512
+ onFocusOutside: (event) => event.preventDefault(),
513
+ onDismiss: () => context.onOpenChange(false),
514
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
515
+ SelectPosition,
516
+ {
517
+ role: "listbox",
518
+ id: context.contentId,
519
+ "data-state": context.open ? "open" : "closed",
520
+ dir: context.dir,
521
+ onContextMenu: (event) => event.preventDefault(),
522
+ ...contentProps,
523
+ ...popperContentProps,
524
+ onPlaced: () => setIsPositioned(true),
525
+ ref: composedRefs,
526
+ style: {
527
+ // flex layout so we can place the scroll buttons properly
528
+ display: "flex",
529
+ flexDirection: "column",
530
+ // reset the outline by default as the content MAY get focused
531
+ outline: "none",
532
+ ...contentProps.style
533
+ },
534
+ onKeyDown: (0, import_primitive.composeEventHandlers)(contentProps.onKeyDown, (event) => {
535
+ const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
536
+ if (event.key === "Tab") event.preventDefault();
537
+ if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
538
+ if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) {
539
+ const items = getItems().filter((item) => !item.disabled);
540
+ let candidateNodes = items.map((item) => item.ref.current);
541
+ if (["ArrowUp", "End"].includes(event.key)) {
542
+ candidateNodes = candidateNodes.slice().reverse();
543
+ }
544
+ if (["ArrowUp", "ArrowDown"].includes(event.key)) {
545
+ const currentElement = event.target;
546
+ const currentIndex = candidateNodes.indexOf(currentElement);
547
+ candidateNodes = candidateNodes.slice(currentIndex + 1);
548
+ }
549
+ setTimeout(() => focusFirst(candidateNodes));
550
+ event.preventDefault();
551
+ }
552
+ })
553
+ }
554
+ )
555
+ }
556
+ )
557
+ }
558
+ ) })
559
+ }
560
+ );
561
+ }
562
+ );
563
+ SelectContentImpl.displayName = CONTENT_IMPL_NAME;
564
+ var ITEM_ALIGNED_POSITION_NAME = "SelectItemAlignedPosition";
565
+ var SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {
566
+ const { __scopeSelect, onPlaced, ...popperProps } = props;
567
+ const context = useSelectContext(CONTENT_NAME, __scopeSelect);
568
+ const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);
569
+ const [contentWrapper, setContentWrapper] = React.useState(null);
570
+ const [content, setContent] = React.useState(null);
571
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, (node) => setContent(node));
572
+ const getItems = useCollection(__scopeSelect);
573
+ const shouldExpandOnScrollRef = React.useRef(false);
574
+ const shouldRepositionRef = React.useRef(true);
575
+ const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;
576
+ const position = React.useCallback(() => {
577
+ if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {
578
+ const triggerRect = context.trigger.getBoundingClientRect();
579
+ const contentRect = content.getBoundingClientRect();
580
+ const valueNodeRect = context.valueNode.getBoundingClientRect();
581
+ const itemTextRect = selectedItemText.getBoundingClientRect();
582
+ if (context.dir !== "rtl") {
583
+ const itemTextOffset = itemTextRect.left - contentRect.left;
584
+ const left = valueNodeRect.left - itemTextOffset;
585
+ const leftDelta = triggerRect.left - left;
586
+ const minContentWidth = triggerRect.width + leftDelta;
587
+ const contentWidth = Math.max(minContentWidth, contentRect.width);
588
+ const rightEdge = window.innerWidth - CONTENT_MARGIN;
589
+ const clampedLeft = (0, import_number.clamp)(left, [CONTENT_MARGIN, rightEdge - contentWidth]);
590
+ contentWrapper.style.minWidth = minContentWidth + "px";
591
+ contentWrapper.style.left = clampedLeft + "px";
592
+ } else {
593
+ const itemTextOffset = contentRect.right - itemTextRect.right;
594
+ const right = window.innerWidth - valueNodeRect.right - itemTextOffset;
595
+ const rightDelta = window.innerWidth - triggerRect.right - right;
596
+ const minContentWidth = triggerRect.width + rightDelta;
597
+ const contentWidth = Math.max(minContentWidth, contentRect.width);
598
+ const leftEdge = window.innerWidth - CONTENT_MARGIN;
599
+ const clampedRight = (0, import_number.clamp)(right, [CONTENT_MARGIN, leftEdge - contentWidth]);
600
+ contentWrapper.style.minWidth = minContentWidth + "px";
601
+ contentWrapper.style.right = clampedRight + "px";
602
+ }
603
+ const items = getItems();
604
+ const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
605
+ const itemsHeight = viewport.scrollHeight;
606
+ const contentStyles = window.getComputedStyle(content);
607
+ const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);
608
+ const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
609
+ const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);
610
+ const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);
611
+ const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;
612
+ const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);
613
+ const viewportStyles = window.getComputedStyle(viewport);
614
+ const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);
615
+ const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);
616
+ const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;
617
+ const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;
618
+ const selectedItemHalfHeight = selectedItem.offsetHeight / 2;
619
+ const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;
620
+ const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;
621
+ const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;
622
+ const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;
623
+ if (willAlignWithoutTopOverflow) {
624
+ const isLastItem = selectedItem === items[items.length - 1].ref.current;
625
+ contentWrapper.style.bottom = "0px";
626
+ const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;
627
+ const clampedTriggerMiddleToBottomEdge = Math.max(
628
+ triggerMiddleToBottomEdge,
629
+ selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport
630
+ (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth
631
+ );
632
+ const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;
633
+ contentWrapper.style.height = height + "px";
634
+ } else {
635
+ const isFirstItem = selectedItem === items[0].ref.current;
636
+ contentWrapper.style.top = "0px";
637
+ const clampedTopEdgeToTriggerMiddle = Math.max(
638
+ topEdgeToTriggerMiddle,
639
+ contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport
640
+ (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight
641
+ );
642
+ const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;
643
+ contentWrapper.style.height = height + "px";
644
+ viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;
645
+ }
646
+ contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;
647
+ contentWrapper.style.minHeight = minContentHeight + "px";
648
+ contentWrapper.style.maxHeight = availableHeight + "px";
649
+ onPlaced?.();
650
+ requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);
651
+ }
652
+ }, [
653
+ getItems,
654
+ context.trigger,
655
+ context.valueNode,
656
+ contentWrapper,
657
+ content,
658
+ viewport,
659
+ selectedItem,
660
+ selectedItemText,
661
+ context.dir,
662
+ onPlaced
663
+ ]);
664
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => position(), [position]);
665
+ const [contentZIndex, setContentZIndex] = React.useState();
666
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
667
+ if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
668
+ }, [content]);
669
+ const handleScrollButtonChange = React.useCallback(
670
+ (node) => {
671
+ if (node && shouldRepositionRef.current === true) {
672
+ position();
673
+ focusSelectedItem?.();
674
+ shouldRepositionRef.current = false;
675
+ }
676
+ },
677
+ [position, focusSelectedItem]
678
+ );
679
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
680
+ SelectViewportProvider,
681
+ {
682
+ scope: __scopeSelect,
683
+ contentWrapper,
684
+ shouldExpandOnScrollRef,
685
+ onScrollButtonChange: handleScrollButtonChange,
686
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
687
+ "div",
688
+ {
689
+ ref: setContentWrapper,
690
+ style: {
691
+ display: "flex",
692
+ flexDirection: "column",
693
+ position: "fixed",
747
694
  zIndex: contentZIndex
695
+ },
696
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
697
+ import_react_primitive.Primitive.div,
698
+ {
699
+ ...popperProps,
700
+ ref: composedRefs,
701
+ style: {
702
+ // When we get the height of the content, it includes borders. If we were to set
703
+ // the height without having `boxSizing: 'border-box'` it would be too big.
704
+ boxSizing: "border-box",
705
+ // We need to ensure the content doesn't get taller than the wrapper
706
+ maxHeight: "100%",
707
+ ...popperProps.style
708
+ }
709
+ }
710
+ )
748
711
  }
749
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperProps, {
750
- ref: composedRefs,
751
- style: {
752
- // When we get the height of the content, it includes borders. If we were to set
753
- // the height without having `boxSizing: 'border-box'` it would be too big.
754
- boxSizing: 'border-box',
755
- // We need to ensure the content doesn't get taller than the wrapper
756
- maxHeight: '100%',
757
- ...popperProps.style
758
- }
759
- }))));
760
- });
761
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectItemAlignedPosition, {
762
- displayName: $1345bda09ffc1bc6$var$ITEM_ALIGNED_POSITION_NAME
712
+ )
713
+ }
714
+ );
763
715
  });
764
- /* -------------------------------------------------------------------------------------------------
765
- * SelectPopperPosition
766
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$POPPER_POSITION_NAME = 'SelectPopperPosition';
767
- const $1345bda09ffc1bc6$var$SelectPopperPosition = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
768
- const { __scopeSelect: __scopeSelect , align: align = 'start' , collisionPadding: collisionPadding = $1345bda09ffc1bc6$var$CONTENT_MARGIN , ...popperProps } = props;
769
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
770
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Content, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperScope, popperProps, {
771
- ref: forwardedRef,
772
- align: align,
773
- collisionPadding: collisionPadding,
774
- style: {
775
- // Ensure border-box for floating-ui calculations
776
- boxSizing: 'border-box',
777
- ...popperProps.style,
778
- '--radix-select-content-transform-origin': 'var(--radix-popper-transform-origin)',
779
- '--radix-select-content-available-width': 'var(--radix-popper-available-width)',
780
- '--radix-select-content-available-height': 'var(--radix-popper-available-height)',
781
- '--radix-select-trigger-width': 'var(--radix-popper-anchor-width)',
782
- '--radix-select-trigger-height': 'var(--radix-popper-anchor-height)'
716
+ SelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;
717
+ var POPPER_POSITION_NAME = "SelectPopperPosition";
718
+ var SelectPopperPosition = React.forwardRef((props, forwardedRef) => {
719
+ const {
720
+ __scopeSelect,
721
+ align = "start",
722
+ collisionPadding = CONTENT_MARGIN,
723
+ ...popperProps
724
+ } = props;
725
+ const popperScope = usePopperScope(__scopeSelect);
726
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
727
+ PopperPrimitive.Content,
728
+ {
729
+ ...popperScope,
730
+ ...popperProps,
731
+ ref: forwardedRef,
732
+ align,
733
+ collisionPadding,
734
+ style: {
735
+ // Ensure border-box for floating-ui calculations
736
+ boxSizing: "border-box",
737
+ ...popperProps.style,
738
+ // re-namespace exposed content custom properties
739
+ ...{
740
+ "--radix-select-content-transform-origin": "var(--radix-popper-transform-origin)",
741
+ "--radix-select-content-available-width": "var(--radix-popper-available-width)",
742
+ "--radix-select-content-available-height": "var(--radix-popper-available-height)",
743
+ "--radix-select-trigger-width": "var(--radix-popper-anchor-width)",
744
+ "--radix-select-trigger-height": "var(--radix-popper-anchor-height)"
783
745
  }
784
- }));
785
- });
786
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$var$SelectPopperPosition, {
787
- displayName: $1345bda09ffc1bc6$var$POPPER_POSITION_NAME
746
+ }
747
+ }
748
+ );
788
749
  });
789
- /* -------------------------------------------------------------------------------------------------
790
- * SelectViewport
791
- * -----------------------------------------------------------------------------------------------*/ const [$1345bda09ffc1bc6$var$SelectViewportProvider, $1345bda09ffc1bc6$var$useSelectViewportContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$CONTENT_NAME, {});
792
- const $1345bda09ffc1bc6$var$VIEWPORT_NAME = 'SelectViewport';
793
- const $1345bda09ffc1bc6$export$9ed6e7b40248d36d = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
794
- const { __scopeSelect: __scopeSelect , ...viewportProps } = props;
795
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$VIEWPORT_NAME, __scopeSelect);
796
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$VIEWPORT_NAME, __scopeSelect);
797
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, contentContext.onViewportChange);
798
- const prevScrollTopRef = $cg2C9$react.useRef(0);
799
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$react.Fragment, null, /*#__PURE__*/ $cg2C9$react.createElement("style", {
800
- dangerouslySetInnerHTML: {
750
+ SelectPopperPosition.displayName = POPPER_POSITION_NAME;
751
+ var [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});
752
+ var VIEWPORT_NAME = "SelectViewport";
753
+ var SelectViewport = React.forwardRef(
754
+ (props, forwardedRef) => {
755
+ const { __scopeSelect, nonce, ...viewportProps } = props;
756
+ const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);
757
+ const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
758
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, contentContext.onViewportChange);
759
+ const prevScrollTopRef = React.useRef(0);
760
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
761
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
762
+ "style",
763
+ {
764
+ dangerouslySetInnerHTML: {
801
765
  __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
766
+ },
767
+ nonce
802
768
  }
803
- }), /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.Slot, {
804
- scope: __scopeSelect
805
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
806
- "data-radix-select-viewport": "",
807
- role: "presentation"
808
- }, viewportProps, {
809
- ref: composedRefs,
810
- style: {
769
+ ),
770
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
771
+ import_react_primitive.Primitive.div,
772
+ {
773
+ "data-radix-select-viewport": "",
774
+ role: "presentation",
775
+ ...viewportProps,
776
+ ref: composedRefs,
777
+ style: {
811
778
  // we use position: 'relative' here on the `viewport` so that when we call
812
779
  // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport
813
780
  // (independent of the scrollUpButton).
814
- position: 'relative',
781
+ position: "relative",
815
782
  flex: 1,
816
- overflow: 'auto',
783
+ overflow: "auto",
817
784
  ...viewportProps.style
818
- },
819
- onScroll: $cg2C9$radixuiprimitive.composeEventHandlers(viewportProps.onScroll, (event)=>{
785
+ },
786
+ onScroll: (0, import_primitive.composeEventHandlers)(viewportProps.onScroll, (event) => {
820
787
  const viewport = event.currentTarget;
821
- const { contentWrapper: contentWrapper , shouldExpandOnScrollRef: shouldExpandOnScrollRef } = viewportContext;
822
- if (shouldExpandOnScrollRef !== null && shouldExpandOnScrollRef !== void 0 && shouldExpandOnScrollRef.current && contentWrapper) {
823
- const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);
824
- if (scrolledBy > 0) {
825
- const availableHeight = window.innerHeight - $1345bda09ffc1bc6$var$CONTENT_MARGIN * 2;
826
- const cssMinHeight = parseFloat(contentWrapper.style.minHeight);
827
- const cssHeight = parseFloat(contentWrapper.style.height);
828
- const prevHeight = Math.max(cssMinHeight, cssHeight);
829
- if (prevHeight < availableHeight) {
830
- const nextHeight = prevHeight + scrolledBy;
831
- const clampedNextHeight = Math.min(availableHeight, nextHeight);
832
- const heightDiff = nextHeight - clampedNextHeight;
833
- contentWrapper.style.height = clampedNextHeight + 'px';
834
- if (contentWrapper.style.bottom === '0px') {
835
- viewport.scrollTop = heightDiff > 0 ? heightDiff : 0; // ensure the content stays pinned to the bottom
836
- contentWrapper.style.justifyContent = 'flex-end';
837
- }
838
- }
788
+ const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;
789
+ if (shouldExpandOnScrollRef?.current && contentWrapper) {
790
+ const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);
791
+ if (scrolledBy > 0) {
792
+ const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
793
+ const cssMinHeight = parseFloat(contentWrapper.style.minHeight);
794
+ const cssHeight = parseFloat(contentWrapper.style.height);
795
+ const prevHeight = Math.max(cssMinHeight, cssHeight);
796
+ if (prevHeight < availableHeight) {
797
+ const nextHeight = prevHeight + scrolledBy;
798
+ const clampedNextHeight = Math.min(availableHeight, nextHeight);
799
+ const heightDiff = nextHeight - clampedNextHeight;
800
+ contentWrapper.style.height = clampedNextHeight + "px";
801
+ if (contentWrapper.style.bottom === "0px") {
802
+ viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;
803
+ contentWrapper.style.justifyContent = "flex-end";
804
+ }
839
805
  }
806
+ }
840
807
  }
841
808
  prevScrollTopRef.current = viewport.scrollTop;
842
- })
843
- }))));
844
- });
845
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$9ed6e7b40248d36d, {
846
- displayName: $1345bda09ffc1bc6$var$VIEWPORT_NAME
847
- });
848
- /* -------------------------------------------------------------------------------------------------
849
- * SelectGroup
850
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$GROUP_NAME = 'SelectGroup';
851
- const [$1345bda09ffc1bc6$var$SelectGroupContextProvider, $1345bda09ffc1bc6$var$useSelectGroupContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$GROUP_NAME);
852
- const $1345bda09ffc1bc6$export$ee25a334c55de1f4 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
853
- const { __scopeSelect: __scopeSelect , ...groupProps } = props;
854
- const groupId = $cg2C9$radixuireactid.useId();
855
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectGroupContextProvider, {
856
- scope: __scopeSelect,
857
- id: groupId
858
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
859
- role: "group",
860
- "aria-labelledby": groupId
861
- }, groupProps, {
862
- ref: forwardedRef
863
- })));
864
- });
865
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ee25a334c55de1f4, {
866
- displayName: $1345bda09ffc1bc6$var$GROUP_NAME
867
- });
868
- /* -------------------------------------------------------------------------------------------------
869
- * SelectLabel
870
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$LABEL_NAME = 'SelectLabel';
871
- const $1345bda09ffc1bc6$export$f67338d29bd972f8 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
872
- const { __scopeSelect: __scopeSelect , ...labelProps } = props;
873
- const groupContext = $1345bda09ffc1bc6$var$useSelectGroupContext($1345bda09ffc1bc6$var$LABEL_NAME, __scopeSelect);
874
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
875
- id: groupContext.id
876
- }, labelProps, {
877
- ref: forwardedRef
878
- }));
879
- });
880
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$f67338d29bd972f8, {
881
- displayName: $1345bda09ffc1bc6$var$LABEL_NAME
882
- });
883
- /* -------------------------------------------------------------------------------------------------
884
- * SelectItem
885
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_NAME = 'SelectItem';
886
- const [$1345bda09ffc1bc6$var$SelectItemContextProvider, $1345bda09ffc1bc6$var$useSelectItemContext] = $1345bda09ffc1bc6$var$createSelectContext($1345bda09ffc1bc6$var$ITEM_NAME);
887
- const $1345bda09ffc1bc6$export$13ef48a934230896 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
888
- const { __scopeSelect: __scopeSelect , value: value , disabled: disabled = false , textValue: textValueProp , ...itemProps } = props;
889
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ITEM_NAME, __scopeSelect);
890
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ITEM_NAME, __scopeSelect);
891
- const isSelected = context.value === value;
892
- const [textValue, setTextValue] = $cg2C9$react.useState(textValueProp !== null && textValueProp !== void 0 ? textValueProp : '');
893
- const [isFocused, setIsFocused] = $cg2C9$react.useState(false);
894
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>{
895
- var _contentContext$itemR;
896
- return (_contentContext$itemR = contentContext.itemRefCallback) === null || _contentContext$itemR === void 0 ? void 0 : _contentContext$itemR.call(contentContext, node, value, disabled);
897
- });
898
- const textId = $cg2C9$radixuireactid.useId();
899
- const handleSelect = ()=>{
900
- if (!disabled) {
901
- context.onValueChange(value);
902
- context.onOpenChange(false);
809
+ })
903
810
  }
811
+ ) })
812
+ ] });
813
+ }
814
+ );
815
+ SelectViewport.displayName = VIEWPORT_NAME;
816
+ var GROUP_NAME = "SelectGroup";
817
+ var [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);
818
+ var SelectGroup = React.forwardRef(
819
+ (props, forwardedRef) => {
820
+ const { __scopeSelect, ...groupProps } = props;
821
+ const groupId = (0, import_react_id.useId)();
822
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.div, { role: "group", "aria-labelledby": groupId, ...groupProps, ref: forwardedRef }) });
823
+ }
824
+ );
825
+ SelectGroup.displayName = GROUP_NAME;
826
+ var LABEL_NAME = "SelectLabel";
827
+ var SelectLabel = React.forwardRef(
828
+ (props, forwardedRef) => {
829
+ const { __scopeSelect, ...labelProps } = props;
830
+ const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);
831
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });
832
+ }
833
+ );
834
+ SelectLabel.displayName = LABEL_NAME;
835
+ var ITEM_NAME = "SelectItem";
836
+ var [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);
837
+ var SelectItem = React.forwardRef(
838
+ (props, forwardedRef) => {
839
+ const {
840
+ __scopeSelect,
841
+ value,
842
+ disabled = false,
843
+ textValue: textValueProp,
844
+ ...itemProps
845
+ } = props;
846
+ const context = useSelectContext(ITEM_NAME, __scopeSelect);
847
+ const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);
848
+ const isSelected = context.value === value;
849
+ const [textValue, setTextValue] = React.useState(textValueProp ?? "");
850
+ const [isFocused, setIsFocused] = React.useState(false);
851
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(
852
+ forwardedRef,
853
+ (node) => contentContext.itemRefCallback?.(node, value, disabled)
854
+ );
855
+ const textId = (0, import_react_id.useId)();
856
+ const handleSelect = () => {
857
+ if (!disabled) {
858
+ context.onValueChange(value);
859
+ context.onOpenChange(false);
860
+ }
904
861
  };
905
- if (value === '') throw new Error('A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.');
906
- return /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectItemContextProvider, {
907
- scope: __scopeSelect,
908
- value: value,
909
- disabled: disabled,
910
- textId: textId,
911
- isSelected: isSelected,
912
- onItemTextChange: $cg2C9$react.useCallback((node)=>{
913
- setTextValue((prevTextValue)=>{
914
- var _node$textContent;
915
- return prevTextValue || ((_node$textContent = node === null || node === void 0 ? void 0 : node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '').trim();
916
- });
917
- }, [])
918
- }, /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$Collection.ItemSlot, {
862
+ if (value === "") {
863
+ throw new Error(
864
+ "A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder."
865
+ );
866
+ }
867
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
868
+ SelectItemContextProvider,
869
+ {
919
870
  scope: __scopeSelect,
920
- value: value,
921
- disabled: disabled,
922
- textValue: textValue
923
- }, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
924
- role: "option",
925
- "aria-labelledby": textId,
926
- "data-highlighted": isFocused ? '' : undefined // `isFocused` caveat fixes stuttering in VoiceOver
927
- ,
928
- "aria-selected": isSelected && isFocused,
929
- "data-state": isSelected ? 'checked' : 'unchecked',
930
- "aria-disabled": disabled || undefined,
931
- "data-disabled": disabled ? '' : undefined,
932
- tabIndex: disabled ? undefined : -1
933
- }, itemProps, {
934
- ref: composedRefs,
935
- onFocus: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onFocus, ()=>setIsFocused(true)
936
- ),
937
- onBlur: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onBlur, ()=>setIsFocused(false)
938
- ),
939
- onPointerUp: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerUp, handleSelect),
940
- onPointerMove: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerMove, (event)=>{
941
- if (disabled) {
942
- var _contentContext$onIte;
943
- (_contentContext$onIte = contentContext.onItemLeave) === null || _contentContext$onIte === void 0 || _contentContext$onIte.call(contentContext);
944
- } else // even though safari doesn't support this option, it's acceptable
945
- // as it only means it might scroll a few pixels when using the pointer.
946
- event.currentTarget.focus({
947
- preventScroll: true
948
- });
949
- }),
950
- onPointerLeave: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onPointerLeave, (event)=>{
951
- if (event.currentTarget === document.activeElement) {
952
- var _contentContext$onIte2;
953
- (_contentContext$onIte2 = contentContext.onItemLeave) === null || _contentContext$onIte2 === void 0 || _contentContext$onIte2.call(contentContext);
954
- }
955
- }),
956
- onKeyDown: $cg2C9$radixuiprimitive.composeEventHandlers(itemProps.onKeyDown, (event)=>{
957
- var _contentContext$searc;
958
- const isTypingAhead = ((_contentContext$searc = contentContext.searchRef) === null || _contentContext$searc === void 0 ? void 0 : _contentContext$searc.current) !== '';
959
- if (isTypingAhead && event.key === ' ') return;
960
- if ($1345bda09ffc1bc6$var$SELECTION_KEYS.includes(event.key)) handleSelect(); // prevent page scroll if using the space key to select an item
961
- if (event.key === ' ') event.preventDefault();
962
- })
963
- }))));
964
- });
965
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$13ef48a934230896, {
966
- displayName: $1345bda09ffc1bc6$var$ITEM_NAME
967
- });
968
- /* -------------------------------------------------------------------------------------------------
969
- * SelectItemText
970
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_TEXT_NAME = 'SelectItemText';
971
- const $1345bda09ffc1bc6$export$3572fb0fb821ff49 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
972
- // We ignore `className` and `style` as this part shouldn't be styled.
973
- const { __scopeSelect: __scopeSelect , className: className , style: style , ...itemTextProps } = props;
974
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
975
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
976
- const itemContext = $1345bda09ffc1bc6$var$useSelectItemContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
977
- const nativeOptionsContext = $1345bda09ffc1bc6$var$useSelectNativeOptionsContext($1345bda09ffc1bc6$var$ITEM_TEXT_NAME, __scopeSelect);
978
- const [itemTextNode, setItemTextNode] = $cg2C9$react.useState(null);
979
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, (node)=>setItemTextNode(node)
980
- , itemContext.onItemTextChange, (node)=>{
981
- var _contentContext$itemT;
982
- return (_contentContext$itemT = contentContext.itemTextRefCallback) === null || _contentContext$itemT === void 0 ? void 0 : _contentContext$itemT.call(contentContext, node, itemContext.value, itemContext.disabled);
983
- });
984
- const textContent = itemTextNode === null || itemTextNode === void 0 ? void 0 : itemTextNode.textContent;
985
- const nativeOption = $cg2C9$react.useMemo(()=>/*#__PURE__*/ $cg2C9$react.createElement("option", {
986
- key: itemContext.value,
987
- value: itemContext.value,
988
- disabled: itemContext.disabled
989
- }, textContent)
990
- , [
991
- itemContext.disabled,
992
- itemContext.value,
993
- textContent
994
- ]);
995
- const { onNativeOptionAdd: onNativeOptionAdd , onNativeOptionRemove: onNativeOptionRemove } = nativeOptionsContext;
996
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
997
- onNativeOptionAdd(nativeOption);
998
- return ()=>onNativeOptionRemove(nativeOption)
999
- ;
1000
- }, [
1001
- onNativeOptionAdd,
1002
- onNativeOptionRemove,
1003
- nativeOption
1004
- ]);
1005
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$react.Fragment, null, /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
1006
- id: itemContext.textId
1007
- }, itemTextProps, {
1008
- ref: composedRefs
1009
- })), itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? /*#__PURE__*/ $cg2C9$reactdom.createPortal(itemTextProps.children, context.valueNode) : null);
1010
- });
1011
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$3572fb0fb821ff49, {
1012
- displayName: $1345bda09ffc1bc6$var$ITEM_TEXT_NAME
1013
- });
1014
- /* -------------------------------------------------------------------------------------------------
1015
- * SelectItemIndicator
1016
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME = 'SelectItemIndicator';
1017
- const $1345bda09ffc1bc6$export$6b9198de19accfe6 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1018
- const { __scopeSelect: __scopeSelect , ...itemIndicatorProps } = props;
1019
- const itemContext = $1345bda09ffc1bc6$var$useSelectItemContext($1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME, __scopeSelect);
1020
- return itemContext.isSelected ? /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.span, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
1021
- "aria-hidden": true
1022
- }, itemIndicatorProps, {
1023
- ref: forwardedRef
1024
- })) : null;
1025
- });
1026
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$6b9198de19accfe6, {
1027
- displayName: $1345bda09ffc1bc6$var$ITEM_INDICATOR_NAME
1028
- });
1029
- /* -------------------------------------------------------------------------------------------------
1030
- * SelectScrollUpButton
1031
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton';
1032
- const $1345bda09ffc1bc6$export$d8117927658af6d7 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1033
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
1034
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
1035
- const [canScrollUp1, setCanScrollUp] = $cg2C9$react.useState(false);
1036
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
1037
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
1038
- if (contentContext.viewport && contentContext.isPositioned) {
1039
- const viewport = contentContext.viewport;
1040
- function handleScroll() {
1041
- const canScrollUp = viewport.scrollTop > 0;
1042
- setCanScrollUp(canScrollUp);
1043
- }
1044
- handleScroll();
1045
- viewport.addEventListener('scroll', handleScroll);
1046
- return ()=>viewport.removeEventListener('scroll', handleScroll)
1047
- ;
1048
- }
1049
- }, [
1050
- contentContext.viewport,
1051
- contentContext.isPositioned
1052
- ]);
1053
- return canScrollUp1 ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectScrollButtonImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
1054
- ref: composedRefs,
1055
- onAutoScroll: ()=>{
1056
- const { viewport: viewport , selectedItem: selectedItem } = contentContext;
1057
- if (viewport && selectedItem) viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;
871
+ value,
872
+ disabled,
873
+ textId,
874
+ isSelected,
875
+ onItemTextChange: React.useCallback((node) => {
876
+ setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());
877
+ }, []),
878
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
879
+ Collection.ItemSlot,
880
+ {
881
+ scope: __scopeSelect,
882
+ value,
883
+ disabled,
884
+ textValue,
885
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
886
+ import_react_primitive.Primitive.div,
887
+ {
888
+ role: "option",
889
+ "aria-labelledby": textId,
890
+ "data-highlighted": isFocused ? "" : void 0,
891
+ "aria-selected": isSelected && isFocused,
892
+ "data-state": isSelected ? "checked" : "unchecked",
893
+ "aria-disabled": disabled || void 0,
894
+ "data-disabled": disabled ? "" : void 0,
895
+ tabIndex: disabled ? void 0 : -1,
896
+ ...itemProps,
897
+ ref: composedRefs,
898
+ onFocus: (0, import_primitive.composeEventHandlers)(itemProps.onFocus, () => setIsFocused(true)),
899
+ onBlur: (0, import_primitive.composeEventHandlers)(itemProps.onBlur, () => setIsFocused(false)),
900
+ onPointerUp: (0, import_primitive.composeEventHandlers)(itemProps.onPointerUp, handleSelect),
901
+ onPointerMove: (0, import_primitive.composeEventHandlers)(itemProps.onPointerMove, (event) => {
902
+ if (disabled) {
903
+ contentContext.onItemLeave?.();
904
+ } else {
905
+ event.currentTarget.focus({ preventScroll: true });
906
+ }
907
+ }),
908
+ onPointerLeave: (0, import_primitive.composeEventHandlers)(itemProps.onPointerLeave, (event) => {
909
+ if (event.currentTarget === document.activeElement) {
910
+ contentContext.onItemLeave?.();
911
+ }
912
+ }),
913
+ onKeyDown: (0, import_primitive.composeEventHandlers)(itemProps.onKeyDown, (event) => {
914
+ const isTypingAhead = contentContext.searchRef?.current !== "";
915
+ if (isTypingAhead && event.key === " ") return;
916
+ if (SELECTION_KEYS.includes(event.key)) handleSelect();
917
+ if (event.key === " ") event.preventDefault();
918
+ })
919
+ }
920
+ )
921
+ }
922
+ )
923
+ }
924
+ );
925
+ }
926
+ );
927
+ SelectItem.displayName = ITEM_NAME;
928
+ var ITEM_TEXT_NAME = "SelectItemText";
929
+ var SelectItemText = React.forwardRef(
930
+ (props, forwardedRef) => {
931
+ const { __scopeSelect, className, style, ...itemTextProps } = props;
932
+ const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);
933
+ const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);
934
+ const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
935
+ const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
936
+ const [itemTextNode, setItemTextNode] = React.useState(null);
937
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(
938
+ forwardedRef,
939
+ (node) => setItemTextNode(node),
940
+ itemContext.onItemTextChange,
941
+ (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
942
+ );
943
+ const textContent = itemTextNode?.textContent;
944
+ const nativeOption = React.useMemo(
945
+ () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("option", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),
946
+ [itemContext.disabled, itemContext.value, textContent]
947
+ );
948
+ const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;
949
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
950
+ onNativeOptionAdd(nativeOption);
951
+ return () => onNativeOptionRemove(nativeOption);
952
+ }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
953
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
954
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
955
+ itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null
956
+ ] });
957
+ }
958
+ );
959
+ SelectItemText.displayName = ITEM_TEXT_NAME;
960
+ var ITEM_INDICATOR_NAME = "SelectItemIndicator";
961
+ var SelectItemIndicator = React.forwardRef(
962
+ (props, forwardedRef) => {
963
+ const { __scopeSelect, ...itemIndicatorProps } = props;
964
+ const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);
965
+ return itemContext.isSelected ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.span, { "aria-hidden": true, ...itemIndicatorProps, ref: forwardedRef }) : null;
966
+ }
967
+ );
968
+ SelectItemIndicator.displayName = ITEM_INDICATOR_NAME;
969
+ var SCROLL_UP_BUTTON_NAME = "SelectScrollUpButton";
970
+ var SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {
971
+ const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
972
+ const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
973
+ const [canScrollUp, setCanScrollUp] = React.useState(false);
974
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, viewportContext.onScrollButtonChange);
975
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
976
+ if (contentContext.viewport && contentContext.isPositioned) {
977
+ let handleScroll2 = function() {
978
+ const canScrollUp2 = viewport.scrollTop > 0;
979
+ setCanScrollUp(canScrollUp2);
980
+ };
981
+ var handleScroll = handleScroll2;
982
+ const viewport = contentContext.viewport;
983
+ handleScroll2();
984
+ viewport.addEventListener("scroll", handleScroll2);
985
+ return () => viewport.removeEventListener("scroll", handleScroll2);
986
+ }
987
+ }, [contentContext.viewport, contentContext.isPositioned]);
988
+ return canScrollUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
989
+ SelectScrollButtonImpl,
990
+ {
991
+ ...props,
992
+ ref: composedRefs,
993
+ onAutoScroll: () => {
994
+ const { viewport, selectedItem } = contentContext;
995
+ if (viewport && selectedItem) {
996
+ viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;
1058
997
  }
1059
- })) : null;
1060
- });
1061
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$d8117927658af6d7, {
1062
- displayName: $1345bda09ffc1bc6$var$SCROLL_UP_BUTTON_NAME
998
+ }
999
+ }
1000
+ ) : null;
1063
1001
  });
1064
- /* -------------------------------------------------------------------------------------------------
1065
- * SelectScrollDownButton
1066
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton';
1067
- const $1345bda09ffc1bc6$export$ff951e476c12189 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1068
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
1069
- const viewportContext = $1345bda09ffc1bc6$var$useSelectViewportContext($1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
1070
- const [canScrollDown1, setCanScrollDown] = $cg2C9$react.useState(false);
1071
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
1072
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
1073
- if (contentContext.viewport && contentContext.isPositioned) {
1074
- const viewport = contentContext.viewport;
1075
- function handleScroll() {
1076
- const maxScroll = viewport.scrollHeight - viewport.clientHeight; // we use Math.ceil here because if the UI is zoomed-in
1077
- // `scrollTop` is not always reported as an integer
1078
- const canScrollDown = Math.ceil(viewport.scrollTop) < maxScroll;
1079
- setCanScrollDown(canScrollDown);
1080
- }
1081
- handleScroll();
1082
- viewport.addEventListener('scroll', handleScroll);
1083
- return ()=>viewport.removeEventListener('scroll', handleScroll)
1084
- ;
1085
- }
1086
- }, [
1087
- contentContext.viewport,
1088
- contentContext.isPositioned
1089
- ]);
1090
- return canScrollDown1 ? /*#__PURE__*/ $cg2C9$react.createElement($1345bda09ffc1bc6$var$SelectScrollButtonImpl, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, props, {
1091
- ref: composedRefs,
1092
- onAutoScroll: ()=>{
1093
- const { viewport: viewport , selectedItem: selectedItem } = contentContext;
1094
- if (viewport && selectedItem) viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;
1002
+ SelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;
1003
+ var SCROLL_DOWN_BUTTON_NAME = "SelectScrollDownButton";
1004
+ var SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {
1005
+ const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
1006
+ const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
1007
+ const [canScrollDown, setCanScrollDown] = React.useState(false);
1008
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, viewportContext.onScrollButtonChange);
1009
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
1010
+ if (contentContext.viewport && contentContext.isPositioned) {
1011
+ let handleScroll2 = function() {
1012
+ const maxScroll = viewport.scrollHeight - viewport.clientHeight;
1013
+ const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;
1014
+ setCanScrollDown(canScrollDown2);
1015
+ };
1016
+ var handleScroll = handleScroll2;
1017
+ const viewport = contentContext.viewport;
1018
+ handleScroll2();
1019
+ viewport.addEventListener("scroll", handleScroll2);
1020
+ return () => viewport.removeEventListener("scroll", handleScroll2);
1021
+ }
1022
+ }, [contentContext.viewport, contentContext.isPositioned]);
1023
+ return canScrollDown ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1024
+ SelectScrollButtonImpl,
1025
+ {
1026
+ ...props,
1027
+ ref: composedRefs,
1028
+ onAutoScroll: () => {
1029
+ const { viewport, selectedItem } = contentContext;
1030
+ if (viewport && selectedItem) {
1031
+ viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;
1095
1032
  }
1096
- })) : null;
1097
- });
1098
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$ff951e476c12189, {
1099
- displayName: $1345bda09ffc1bc6$var$SCROLL_DOWN_BUTTON_NAME
1033
+ }
1034
+ }
1035
+ ) : null;
1100
1036
  });
1101
- const $1345bda09ffc1bc6$var$SelectScrollButtonImpl = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1102
- const { __scopeSelect: __scopeSelect , onAutoScroll: onAutoScroll , ...scrollIndicatorProps } = props;
1103
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext('SelectScrollButton', __scopeSelect);
1104
- const autoScrollTimerRef = $cg2C9$react.useRef(null);
1105
- const getItems = $1345bda09ffc1bc6$var$useCollection(__scopeSelect);
1106
- const clearAutoScrollTimer = $cg2C9$react.useCallback(()=>{
1107
- if (autoScrollTimerRef.current !== null) {
1108
- window.clearInterval(autoScrollTimerRef.current);
1109
- autoScrollTimerRef.current = null;
1037
+ SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
1038
+ var SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {
1039
+ const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;
1040
+ const contentContext = useSelectContentContext("SelectScrollButton", __scopeSelect);
1041
+ const autoScrollTimerRef = React.useRef(null);
1042
+ const getItems = useCollection(__scopeSelect);
1043
+ const clearAutoScrollTimer = React.useCallback(() => {
1044
+ if (autoScrollTimerRef.current !== null) {
1045
+ window.clearInterval(autoScrollTimerRef.current);
1046
+ autoScrollTimerRef.current = null;
1047
+ }
1048
+ }, []);
1049
+ React.useEffect(() => {
1050
+ return () => clearAutoScrollTimer();
1051
+ }, [clearAutoScrollTimer]);
1052
+ (0, import_react_use_layout_effect.useLayoutEffect)(() => {
1053
+ const activeItem = getItems().find((item) => item.ref.current === document.activeElement);
1054
+ activeItem?.ref.current?.scrollIntoView({ block: "nearest" });
1055
+ }, [getItems]);
1056
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
1057
+ import_react_primitive.Primitive.div,
1058
+ {
1059
+ "aria-hidden": true,
1060
+ ...scrollIndicatorProps,
1061
+ ref: forwardedRef,
1062
+ style: { flexShrink: 0, ...scrollIndicatorProps.style },
1063
+ onPointerDown: (0, import_primitive.composeEventHandlers)(scrollIndicatorProps.onPointerDown, () => {
1064
+ if (autoScrollTimerRef.current === null) {
1065
+ autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1110
1066
  }
1111
- }, []);
1112
- $cg2C9$react.useEffect(()=>{
1113
- return ()=>clearAutoScrollTimer()
1114
- ;
1115
- }, [
1116
- clearAutoScrollTimer
1117
- ]); // When the viewport becomes scrollable on either side, the relevant scroll button will mount.
1118
- // Because it is part of the normal flow, it will push down (top button) or shrink (bottom button)
1119
- // the viewport, potentially causing the active item to now be partially out of view.
1120
- // We re-run the `scrollIntoView` logic to make sure it stays within the viewport.
1121
- $cg2C9$radixuireactuselayouteffect.useLayoutEffect(()=>{
1122
- var _activeItem$ref$curre;
1123
- const activeItem = getItems().find((item)=>item.ref.current === document.activeElement
1124
- );
1125
- activeItem === null || activeItem === void 0 || (_activeItem$ref$curre = activeItem.ref.current) === null || _activeItem$ref$curre === void 0 || _activeItem$ref$curre.scrollIntoView({
1126
- block: 'nearest'
1127
- });
1128
- }, [
1129
- getItems
1130
- ]);
1131
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
1132
- "aria-hidden": true
1133
- }, scrollIndicatorProps, {
1134
- ref: forwardedRef,
1135
- style: {
1136
- flexShrink: 0,
1137
- ...scrollIndicatorProps.style
1138
- },
1139
- onPointerDown: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerDown, ()=>{
1140
- if (autoScrollTimerRef.current === null) autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1141
- }),
1142
- onPointerMove: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerMove, ()=>{
1143
- var _contentContext$onIte3;
1144
- (_contentContext$onIte3 = contentContext.onItemLeave) === null || _contentContext$onIte3 === void 0 || _contentContext$onIte3.call(contentContext);
1145
- if (autoScrollTimerRef.current === null) autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1146
- }),
1147
- onPointerLeave: $cg2C9$radixuiprimitive.composeEventHandlers(scrollIndicatorProps.onPointerLeave, ()=>{
1148
- clearAutoScrollTimer();
1149
- })
1150
- }));
1151
- });
1152
- /* -------------------------------------------------------------------------------------------------
1153
- * SelectSeparator
1154
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$SEPARATOR_NAME = 'SelectSeparator';
1155
- const $1345bda09ffc1bc6$export$eba4b1df07cb1d3 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1156
- const { __scopeSelect: __scopeSelect , ...separatorProps } = props;
1157
- return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactprimitive.Primitive.div, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({
1158
- "aria-hidden": true
1159
- }, separatorProps, {
1160
- ref: forwardedRef
1161
- }));
1162
- });
1163
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$eba4b1df07cb1d3, {
1164
- displayName: $1345bda09ffc1bc6$var$SEPARATOR_NAME
1165
- });
1166
- /* -------------------------------------------------------------------------------------------------
1167
- * SelectArrow
1168
- * -----------------------------------------------------------------------------------------------*/ const $1345bda09ffc1bc6$var$ARROW_NAME = 'SelectArrow';
1169
- const $1345bda09ffc1bc6$export$314f4cb8f8099628 = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1170
- const { __scopeSelect: __scopeSelect , ...arrowProps } = props;
1171
- const popperScope = $1345bda09ffc1bc6$var$usePopperScope(__scopeSelect);
1172
- const context = $1345bda09ffc1bc6$var$useSelectContext($1345bda09ffc1bc6$var$ARROW_NAME, __scopeSelect);
1173
- const contentContext = $1345bda09ffc1bc6$var$useSelectContentContext($1345bda09ffc1bc6$var$ARROW_NAME, __scopeSelect);
1174
- return context.open && contentContext.position === 'popper' ? /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactpopper.Arrow, ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, popperScope, arrowProps, {
1175
- ref: forwardedRef
1176
- })) : null;
1177
- });
1178
- /*#__PURE__*/ Object.assign($1345bda09ffc1bc6$export$314f4cb8f8099628, {
1179
- displayName: $1345bda09ffc1bc6$var$ARROW_NAME
1180
- });
1181
- /* -----------------------------------------------------------------------------------------------*/ function $1345bda09ffc1bc6$var$shouldShowPlaceholder(value) {
1182
- return value === '' || value === undefined;
1183
- }
1184
- const $1345bda09ffc1bc6$var$BubbleSelect = /*#__PURE__*/ $cg2C9$react.forwardRef((props, forwardedRef)=>{
1185
- const { value: value , ...selectProps } = props;
1186
- const ref = $cg2C9$react.useRef(null);
1187
- const composedRefs = $cg2C9$radixuireactcomposerefs.useComposedRefs(forwardedRef, ref);
1188
- const prevValue = $cg2C9$radixuireactuseprevious.usePrevious(value); // Bubble value change to parents (e.g form change event)
1189
- $cg2C9$react.useEffect(()=>{
1190
- const select = ref.current;
1191
- const selectProto = window.HTMLSelectElement.prototype;
1192
- const descriptor = Object.getOwnPropertyDescriptor(selectProto, 'value');
1193
- const setValue = descriptor.set;
1194
- if (prevValue !== value && setValue) {
1195
- const event = new Event('change', {
1196
- bubbles: true
1197
- });
1198
- setValue.call(select, value);
1199
- select.dispatchEvent(event);
1067
+ }),
1068
+ onPointerMove: (0, import_primitive.composeEventHandlers)(scrollIndicatorProps.onPointerMove, () => {
1069
+ contentContext.onItemLeave?.();
1070
+ if (autoScrollTimerRef.current === null) {
1071
+ autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1200
1072
  }
1201
- }, [
1202
- prevValue,
1203
- value
1204
- ]);
1205
- /**
1206
- * We purposefully use a `select` here to support form autofill as much
1207
- * as possible.
1208
- *
1209
- * We purposefully do not add the `value` attribute here to allow the value
1210
- * to be set programatically and bubble to any parent form `onChange` event.
1211
- * Adding the `value` will cause React to consider the programatic
1212
- * dispatch a duplicate and it will get swallowed.
1213
- *
1214
- * We use `VisuallyHidden` rather than `display: "none"` because Safari autofill
1215
- * won't work otherwise.
1216
- */ return /*#__PURE__*/ $cg2C9$react.createElement($cg2C9$radixuireactvisuallyhidden.VisuallyHidden, {
1217
- asChild: true
1218
- }, /*#__PURE__*/ $cg2C9$react.createElement("select", ($parcel$interopDefault($cg2C9$babelruntimehelpersextends))({}, selectProps, {
1219
- ref: composedRefs,
1220
- defaultValue: value
1221
- })));
1073
+ }),
1074
+ onPointerLeave: (0, import_primitive.composeEventHandlers)(scrollIndicatorProps.onPointerLeave, () => {
1075
+ clearAutoScrollTimer();
1076
+ })
1077
+ }
1078
+ );
1222
1079
  });
1223
- $1345bda09ffc1bc6$var$BubbleSelect.displayName = 'BubbleSelect';
1224
- function $1345bda09ffc1bc6$var$useTypeaheadSearch(onSearchChange) {
1225
- const handleSearchChange = $cg2C9$radixuireactusecallbackref.useCallbackRef(onSearchChange);
1226
- const searchRef = $cg2C9$react.useRef('');
1227
- const timerRef = $cg2C9$react.useRef(0);
1228
- const handleTypeaheadSearch = $cg2C9$react.useCallback((key)=>{
1229
- const search = searchRef.current + key;
1230
- handleSearchChange(search);
1231
- (function updateSearch(value) {
1232
- searchRef.current = value;
1233
- window.clearTimeout(timerRef.current); // Reset `searchRef` 1 second after it was last updated
1234
- if (value !== '') timerRef.current = window.setTimeout(()=>updateSearch('')
1235
- , 1000);
1236
- })(search);
1237
- }, [
1238
- handleSearchChange
1239
- ]);
1240
- const resetTypeahead = $cg2C9$react.useCallback(()=>{
1241
- searchRef.current = '';
1080
+ var SEPARATOR_NAME = "SelectSeparator";
1081
+ var SelectSeparator = React.forwardRef(
1082
+ (props, forwardedRef) => {
1083
+ const { __scopeSelect, ...separatorProps } = props;
1084
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.div, { "aria-hidden": true, ...separatorProps, ref: forwardedRef });
1085
+ }
1086
+ );
1087
+ SelectSeparator.displayName = SEPARATOR_NAME;
1088
+ var ARROW_NAME = "SelectArrow";
1089
+ var SelectArrow = React.forwardRef(
1090
+ (props, forwardedRef) => {
1091
+ const { __scopeSelect, ...arrowProps } = props;
1092
+ const popperScope = usePopperScope(__scopeSelect);
1093
+ const context = useSelectContext(ARROW_NAME, __scopeSelect);
1094
+ const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);
1095
+ return context.open && contentContext.position === "popper" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
1096
+ }
1097
+ );
1098
+ SelectArrow.displayName = ARROW_NAME;
1099
+ function shouldShowPlaceholder(value) {
1100
+ return value === "" || value === void 0;
1101
+ }
1102
+ var BubbleSelect = React.forwardRef(
1103
+ (props, forwardedRef) => {
1104
+ const { value, ...selectProps } = props;
1105
+ const ref = React.useRef(null);
1106
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, ref);
1107
+ const prevValue = (0, import_react_use_previous.usePrevious)(value);
1108
+ React.useEffect(() => {
1109
+ const select = ref.current;
1110
+ const selectProto = window.HTMLSelectElement.prototype;
1111
+ const descriptor = Object.getOwnPropertyDescriptor(
1112
+ selectProto,
1113
+ "value"
1114
+ );
1115
+ const setValue = descriptor.set;
1116
+ if (prevValue !== value && setValue) {
1117
+ const event = new Event("change", { bubbles: true });
1118
+ setValue.call(select, value);
1119
+ select.dispatchEvent(event);
1120
+ }
1121
+ }, [prevValue, value]);
1122
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_visually_hidden.VisuallyHidden, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("select", { ...selectProps, ref: composedRefs, defaultValue: value }) });
1123
+ }
1124
+ );
1125
+ BubbleSelect.displayName = "BubbleSelect";
1126
+ function useTypeaheadSearch(onSearchChange) {
1127
+ const handleSearchChange = (0, import_react_use_callback_ref.useCallbackRef)(onSearchChange);
1128
+ const searchRef = React.useRef("");
1129
+ const timerRef = React.useRef(0);
1130
+ const handleTypeaheadSearch = React.useCallback(
1131
+ (key) => {
1132
+ const search = searchRef.current + key;
1133
+ handleSearchChange(search);
1134
+ (function updateSearch(value) {
1135
+ searchRef.current = value;
1242
1136
  window.clearTimeout(timerRef.current);
1243
- }, []);
1244
- $cg2C9$react.useEffect(()=>{
1245
- return ()=>window.clearTimeout(timerRef.current)
1246
- ;
1247
- }, []);
1248
- return [
1249
- searchRef,
1250
- handleTypeaheadSearch,
1251
- resetTypeahead
1252
- ];
1137
+ if (value !== "") timerRef.current = window.setTimeout(() => updateSearch(""), 1e3);
1138
+ })(search);
1139
+ },
1140
+ [handleSearchChange]
1141
+ );
1142
+ const resetTypeahead = React.useCallback(() => {
1143
+ searchRef.current = "";
1144
+ window.clearTimeout(timerRef.current);
1145
+ }, []);
1146
+ React.useEffect(() => {
1147
+ return () => window.clearTimeout(timerRef.current);
1148
+ }, []);
1149
+ return [searchRef, handleTypeaheadSearch, resetTypeahead];
1253
1150
  }
1254
- /**
1255
- * This is the "meat" of the typeahead matching logic. It takes in a list of items,
1256
- * the search and the current item, and returns the next item (or `undefined`).
1257
- *
1258
- * We normalize the search because if a user has repeatedly pressed a character,
1259
- * we want the exact same behavior as if we only had that one character
1260
- * (ie. cycle through items starting with that character)
1261
- *
1262
- * We also reorder the items by wrapping the array around the current item.
1263
- * This is so we always look forward from the current item, and picking the first
1264
- * item will always be the correct one.
1265
- *
1266
- * Finally, if the normalized search is exactly one character, we exclude the
1267
- * current item from the values because otherwise it would be the first to match always
1268
- * and focus would never move. This is as opposed to the regular case, where we
1269
- * don't want focus to move if the current item still matches.
1270
- */ function $1345bda09ffc1bc6$var$findNextItem(items, search, currentItem) {
1271
- const isRepeated = search.length > 1 && Array.from(search).every((char)=>char === search[0]
1272
- );
1273
- const normalizedSearch = isRepeated ? search[0] : search;
1274
- const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;
1275
- let wrappedItems = $1345bda09ffc1bc6$var$wrapArray(items, Math.max(currentItemIndex, 0));
1276
- const excludeCurrentItem = normalizedSearch.length === 1;
1277
- if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v)=>v !== currentItem
1278
- );
1279
- const nextItem = wrappedItems.find((item)=>item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())
1280
- );
1281
- return nextItem !== currentItem ? nextItem : undefined;
1151
+ function findNextItem(items, search, currentItem) {
1152
+ const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
1153
+ const normalizedSearch = isRepeated ? search[0] : search;
1154
+ const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;
1155
+ let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));
1156
+ const excludeCurrentItem = normalizedSearch.length === 1;
1157
+ if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);
1158
+ const nextItem = wrappedItems.find(
1159
+ (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())
1160
+ );
1161
+ return nextItem !== currentItem ? nextItem : void 0;
1282
1162
  }
1283
- /**
1284
- * Wraps an array around itself at a given start index
1285
- * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`
1286
- */ function $1345bda09ffc1bc6$var$wrapArray(array, startIndex) {
1287
- return array.map((_, index)=>array[(startIndex + index) % array.length]
1288
- );
1163
+ function wrapArray(array, startIndex) {
1164
+ return array.map((_, index) => array[(startIndex + index) % array.length]);
1289
1165
  }
1290
- const $1345bda09ffc1bc6$export$be92b6f5f03c0fe9 = $1345bda09ffc1bc6$export$ef9b1a59e592288f;
1291
- const $1345bda09ffc1bc6$export$41fb9f06171c75f4 = $1345bda09ffc1bc6$export$3ac1e88a1c0b9f1;
1292
- const $1345bda09ffc1bc6$export$4c8d1a57a761ef94 = $1345bda09ffc1bc6$export$e288731fd71264f0;
1293
- const $1345bda09ffc1bc6$export$f04a61298a47a40f = $1345bda09ffc1bc6$export$99b400cabb58c515;
1294
- const $1345bda09ffc1bc6$export$602eac185826482c = $1345bda09ffc1bc6$export$b2af6c9944296213;
1295
- const $1345bda09ffc1bc6$export$7c6e2c02157bb7d2 = $1345bda09ffc1bc6$export$c973a4b3cb86a03d;
1296
- const $1345bda09ffc1bc6$export$d5c6c08dc2d3ca7 = $1345bda09ffc1bc6$export$9ed6e7b40248d36d;
1297
- const $1345bda09ffc1bc6$export$eb2fcfdbd7ba97d4 = $1345bda09ffc1bc6$export$ee25a334c55de1f4;
1298
- const $1345bda09ffc1bc6$export$b04be29aa201d4f5 = $1345bda09ffc1bc6$export$f67338d29bd972f8;
1299
- const $1345bda09ffc1bc6$export$6d08773d2e66f8f2 = $1345bda09ffc1bc6$export$13ef48a934230896;
1300
- const $1345bda09ffc1bc6$export$d6e5bf9c43ea9319 = $1345bda09ffc1bc6$export$3572fb0fb821ff49;
1301
- const $1345bda09ffc1bc6$export$c3468e2714d175fa = $1345bda09ffc1bc6$export$6b9198de19accfe6;
1302
- const $1345bda09ffc1bc6$export$2f60d3ec9ad468f2 = $1345bda09ffc1bc6$export$d8117927658af6d7;
1303
- const $1345bda09ffc1bc6$export$bf1aedc3039c8d63 = $1345bda09ffc1bc6$export$ff951e476c12189;
1304
- const $1345bda09ffc1bc6$export$1ff3c3f08ae963c0 = $1345bda09ffc1bc6$export$eba4b1df07cb1d3;
1305
- const $1345bda09ffc1bc6$export$21b07c8f274aebd5 = $1345bda09ffc1bc6$export$314f4cb8f8099628;
1306
-
1307
-
1308
-
1309
-
1166
+ var Root2 = Select;
1167
+ var Trigger = SelectTrigger;
1168
+ var Value = SelectValue;
1169
+ var Icon = SelectIcon;
1170
+ var Portal = SelectPortal;
1171
+ var Content2 = SelectContent;
1172
+ var Viewport = SelectViewport;
1173
+ var Group = SelectGroup;
1174
+ var Label = SelectLabel;
1175
+ var Item = SelectItem;
1176
+ var ItemText = SelectItemText;
1177
+ var ItemIndicator = SelectItemIndicator;
1178
+ var ScrollUpButton = SelectScrollUpButton;
1179
+ var ScrollDownButton = SelectScrollDownButton;
1180
+ var Separator = SelectSeparator;
1181
+ var Arrow2 = SelectArrow;
1310
1182
  //# sourceMappingURL=index.js.map