premium-ds 0.1.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 (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/alert.d.ts +31 -0
  4. package/dist/alert.js +6 -0
  5. package/dist/alert.js.map +1 -0
  6. package/dist/avatar-group.d.ts +13 -0
  7. package/dist/avatar-group.js +3 -0
  8. package/dist/avatar-group.js.map +1 -0
  9. package/dist/avatar.d.ts +25 -0
  10. package/dist/avatar.js +3 -0
  11. package/dist/avatar.js.map +1 -0
  12. package/dist/badge.d.ts +23 -0
  13. package/dist/badge.js +3 -0
  14. package/dist/badge.js.map +1 -0
  15. package/dist/button.d.ts +20 -0
  16. package/dist/button.js +3 -0
  17. package/dist/button.js.map +1 -0
  18. package/dist/checkbox.d.ts +25 -0
  19. package/dist/checkbox.js +3 -0
  20. package/dist/checkbox.js.map +1 -0
  21. package/dist/chunk-2OWHZ4JT.js +36 -0
  22. package/dist/chunk-2OWHZ4JT.js.map +1 -0
  23. package/dist/chunk-34SIXSYL.js +64 -0
  24. package/dist/chunk-34SIXSYL.js.map +1 -0
  25. package/dist/chunk-37O2ZXD6.js +55 -0
  26. package/dist/chunk-37O2ZXD6.js.map +1 -0
  27. package/dist/chunk-4AZL76UJ.js +89 -0
  28. package/dist/chunk-4AZL76UJ.js.map +1 -0
  29. package/dist/chunk-4HSCN5TZ.js +86 -0
  30. package/dist/chunk-4HSCN5TZ.js.map +1 -0
  31. package/dist/chunk-5DDOOT33.js +258 -0
  32. package/dist/chunk-5DDOOT33.js.map +1 -0
  33. package/dist/chunk-5FVHWIMY.js +117 -0
  34. package/dist/chunk-5FVHWIMY.js.map +1 -0
  35. package/dist/chunk-5K6KRJGX.js +147 -0
  36. package/dist/chunk-5K6KRJGX.js.map +1 -0
  37. package/dist/chunk-5PQMQBQC.js +74 -0
  38. package/dist/chunk-5PQMQBQC.js.map +1 -0
  39. package/dist/chunk-7OCTVQ7C.js +95 -0
  40. package/dist/chunk-7OCTVQ7C.js.map +1 -0
  41. package/dist/chunk-7OPMOET7.js +39 -0
  42. package/dist/chunk-7OPMOET7.js.map +1 -0
  43. package/dist/chunk-BXXS7YRC.js +270 -0
  44. package/dist/chunk-BXXS7YRC.js.map +1 -0
  45. package/dist/chunk-CV2Q4YXX.js +272 -0
  46. package/dist/chunk-CV2Q4YXX.js.map +1 -0
  47. package/dist/chunk-EIMMDWIW.js +282 -0
  48. package/dist/chunk-EIMMDWIW.js.map +1 -0
  49. package/dist/chunk-EZ2CWTBE.js +230 -0
  50. package/dist/chunk-EZ2CWTBE.js.map +1 -0
  51. package/dist/chunk-FGHDG3Y4.js +89 -0
  52. package/dist/chunk-FGHDG3Y4.js.map +1 -0
  53. package/dist/chunk-FPP2XLKX.js +127 -0
  54. package/dist/chunk-FPP2XLKX.js.map +1 -0
  55. package/dist/chunk-G6OY35DI.js +295 -0
  56. package/dist/chunk-G6OY35DI.js.map +1 -0
  57. package/dist/chunk-H6KWJNOE.js +65 -0
  58. package/dist/chunk-H6KWJNOE.js.map +1 -0
  59. package/dist/chunk-HGILYGY3.js +45 -0
  60. package/dist/chunk-HGILYGY3.js.map +1 -0
  61. package/dist/chunk-I3BCB4Z5.js +88 -0
  62. package/dist/chunk-I3BCB4Z5.js.map +1 -0
  63. package/dist/chunk-KBWNUUWM.js +582 -0
  64. package/dist/chunk-KBWNUUWM.js.map +1 -0
  65. package/dist/chunk-KN7JFAZ6.js +113 -0
  66. package/dist/chunk-KN7JFAZ6.js.map +1 -0
  67. package/dist/chunk-MEF7PI6U.js +16 -0
  68. package/dist/chunk-MEF7PI6U.js.map +1 -0
  69. package/dist/chunk-NKGMQL6I.js +310 -0
  70. package/dist/chunk-NKGMQL6I.js.map +1 -0
  71. package/dist/chunk-NMFQRGLL.js +127 -0
  72. package/dist/chunk-NMFQRGLL.js.map +1 -0
  73. package/dist/chunk-OUBWD6CX.js +433 -0
  74. package/dist/chunk-OUBWD6CX.js.map +1 -0
  75. package/dist/chunk-PFNXVBLU.js +96 -0
  76. package/dist/chunk-PFNXVBLU.js.map +1 -0
  77. package/dist/chunk-PUPZ4HME.js +165 -0
  78. package/dist/chunk-PUPZ4HME.js.map +1 -0
  79. package/dist/chunk-QFS52OK5.js +690 -0
  80. package/dist/chunk-QFS52OK5.js.map +1 -0
  81. package/dist/chunk-QNC6O3PG.js +45 -0
  82. package/dist/chunk-QNC6O3PG.js.map +1 -0
  83. package/dist/chunk-QUHOXWBK.js +82 -0
  84. package/dist/chunk-QUHOXWBK.js.map +1 -0
  85. package/dist/chunk-UIQGSTBJ.js +106 -0
  86. package/dist/chunk-UIQGSTBJ.js.map +1 -0
  87. package/dist/chunk-UJQKVP6V.js +193 -0
  88. package/dist/chunk-UJQKVP6V.js.map +1 -0
  89. package/dist/chunk-VVPGEAC6.js +11 -0
  90. package/dist/chunk-VVPGEAC6.js.map +1 -0
  91. package/dist/chunk-XA3T5KWA.js +58 -0
  92. package/dist/chunk-XA3T5KWA.js.map +1 -0
  93. package/dist/chunk-YSHJHSJM.js +19 -0
  94. package/dist/chunk-YSHJHSJM.js.map +1 -0
  95. package/dist/chunk-YVHOAVSM.js +182 -0
  96. package/dist/chunk-YVHOAVSM.js.map +1 -0
  97. package/dist/collapse.d.ts +16 -0
  98. package/dist/collapse.js +3 -0
  99. package/dist/collapse.js.map +1 -0
  100. package/dist/count-badge.d.ts +11 -0
  101. package/dist/count-badge.js +4 -0
  102. package/dist/count-badge.js.map +1 -0
  103. package/dist/date-field.d.ts +39 -0
  104. package/dist/date-field.js +8 -0
  105. package/dist/date-field.js.map +1 -0
  106. package/dist/date-range-field.d.ts +30 -0
  107. package/dist/date-range-field.js +8 -0
  108. package/dist/date-range-field.js.map +1 -0
  109. package/dist/datetime-field.d.ts +28 -0
  110. package/dist/datetime-field.js +10 -0
  111. package/dist/datetime-field.js.map +1 -0
  112. package/dist/dialog.d.ts +26 -0
  113. package/dist/dialog.js +7 -0
  114. package/dist/dialog.js.map +1 -0
  115. package/dist/index.d.ts +35 -0
  116. package/dist/index.js +40 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/motion-tokens.d.ts +29 -0
  119. package/dist/motion-tokens.js +3 -0
  120. package/dist/motion-tokens.js.map +1 -0
  121. package/dist/multi-select.d.ts +25 -0
  122. package/dist/multi-select.js +7 -0
  123. package/dist/multi-select.js.map +1 -0
  124. package/dist/number-field.d.ts +24 -0
  125. package/dist/number-field.js +4 -0
  126. package/dist/number-field.js.map +1 -0
  127. package/dist/otp-field.d.ts +20 -0
  128. package/dist/otp-field.js +3 -0
  129. package/dist/otp-field.js.map +1 -0
  130. package/dist/overlay.d.ts +31 -0
  131. package/dist/overlay.js +4 -0
  132. package/dist/overlay.js.map +1 -0
  133. package/dist/pagination.d.ts +24 -0
  134. package/dist/pagination.js +5 -0
  135. package/dist/pagination.js.map +1 -0
  136. package/dist/radio-group.d.ts +46 -0
  137. package/dist/radio-group.js +6 -0
  138. package/dist/radio-group.js.map +1 -0
  139. package/dist/select-core-SAyS-8w0.d.ts +16 -0
  140. package/dist/select.d.ts +27 -0
  141. package/dist/select.js +7 -0
  142. package/dist/select.js.map +1 -0
  143. package/dist/status-badge.d.ts +17 -0
  144. package/dist/status-badge.js +5 -0
  145. package/dist/status-badge.js.map +1 -0
  146. package/dist/table.d.ts +65 -0
  147. package/dist/table.js +5 -0
  148. package/dist/table.js.map +1 -0
  149. package/dist/tabs.d.ts +44 -0
  150. package/dist/tabs.js +5 -0
  151. package/dist/tabs.js.map +1 -0
  152. package/dist/tag.d.ts +28 -0
  153. package/dist/tag.js +5 -0
  154. package/dist/tag.js.map +1 -0
  155. package/dist/text-field.d.ts +30 -0
  156. package/dist/text-field.js +6 -0
  157. package/dist/text-field.js.map +1 -0
  158. package/dist/textarea.d.ts +33 -0
  159. package/dist/textarea.js +5 -0
  160. package/dist/textarea.js.map +1 -0
  161. package/dist/time-field.d.ts +27 -0
  162. package/dist/time-field.js +6 -0
  163. package/dist/time-field.js.map +1 -0
  164. package/dist/toast-store.d.ts +75 -0
  165. package/dist/toast-store.js +3 -0
  166. package/dist/toast-store.js.map +1 -0
  167. package/dist/toast.d.ts +3 -0
  168. package/dist/toast.js +6 -0
  169. package/dist/toast.js.map +1 -0
  170. package/dist/toggle-tag.d.ts +24 -0
  171. package/dist/toggle-tag.js +4 -0
  172. package/dist/toggle-tag.js.map +1 -0
  173. package/dist/toggle.d.ts +21 -0
  174. package/dist/toggle.js +3 -0
  175. package/dist/toggle.js.map +1 -0
  176. package/dist/tooltip.d.ts +27 -0
  177. package/dist/tooltip.js +4 -0
  178. package/dist/tooltip.js.map +1 -0
  179. package/llms.txt +165 -0
  180. package/package.json +205 -0
  181. package/src/components/alert/Alert.tsx +118 -0
  182. package/src/components/alert/alert.css +136 -0
  183. package/src/components/avatar/Avatar.tsx +128 -0
  184. package/src/components/avatar/AvatarGroup.tsx +50 -0
  185. package/src/components/avatar/avatar.css +200 -0
  186. package/src/components/badge/Badge.tsx +66 -0
  187. package/src/components/badge/CountBadge.tsx +46 -0
  188. package/src/components/badge/StatusBadge.tsx +132 -0
  189. package/src/components/badge/badge.css +243 -0
  190. package/src/components/button/Button.tsx +68 -0
  191. package/src/components/button/button.css +222 -0
  192. package/src/components/checkbox/Checkbox.tsx +90 -0
  193. package/src/components/checkbox/checkbox.css +179 -0
  194. package/src/components/date-picker/DateField.tsx +362 -0
  195. package/src/components/date-picker/DateRangeField.tsx +533 -0
  196. package/src/components/date-picker/DateTimeField.tsx +177 -0
  197. package/src/components/date-picker/TimeField.tsx +100 -0
  198. package/src/components/date-picker/date-picker.css +591 -0
  199. package/src/components/date-picker/date-utils.ts +55 -0
  200. package/src/components/date-picker/field-shell.tsx +78 -0
  201. package/src/components/date-picker/glide-pill.tsx +81 -0
  202. package/src/components/date-picker/time-core.tsx +305 -0
  203. package/src/components/dialog/Dialog.tsx +181 -0
  204. package/src/components/dialog/dialog.css +170 -0
  205. package/src/components/glass/glass.css +100 -0
  206. package/src/components/icon/Icon.tsx +76 -0
  207. package/src/components/icon/IconSlot.tsx +11 -0
  208. package/src/components/icon/icon.css +33 -0
  209. package/src/components/input/NumberField.tsx +117 -0
  210. package/src/components/input/OtpField.tsx +118 -0
  211. package/src/components/input/TextField.tsx +123 -0
  212. package/src/components/input/input.css +335 -0
  213. package/src/components/motion/Collapse.tsx +33 -0
  214. package/src/components/motion/collapse.css +41 -0
  215. package/src/components/overlay/Overlay.tsx +239 -0
  216. package/src/components/overlay/overlay-core.tsx +565 -0
  217. package/src/components/overlay/overlay.css +119 -0
  218. package/src/components/overlay/sheet-drag.tsx +146 -0
  219. package/src/components/pagination/Pagination.tsx +140 -0
  220. package/src/components/pagination/pagination.css +48 -0
  221. package/src/components/radio-group/RadioGroup.tsx +182 -0
  222. package/src/components/radio-group/radio-group.css +277 -0
  223. package/src/components/select/MultiSelect.tsx +251 -0
  224. package/src/components/select/Select.tsx +235 -0
  225. package/src/components/select/select-core.tsx +417 -0
  226. package/src/components/select/select.css +386 -0
  227. package/src/components/table/Table.tsx +433 -0
  228. package/src/components/table/table.css +348 -0
  229. package/src/components/tabs/Tabs.tsx +371 -0
  230. package/src/components/tabs/tabs.css +228 -0
  231. package/src/components/tag/Tag.tsx +145 -0
  232. package/src/components/tag/ToggleTag.tsx +125 -0
  233. package/src/components/tag/tag.css +248 -0
  234. package/src/components/textarea/Textarea.tsx +197 -0
  235. package/src/components/textarea/textarea.css +219 -0
  236. package/src/components/toast/Toast.tsx +349 -0
  237. package/src/components/toast/toast-store.ts +266 -0
  238. package/src/components/toast/toast.css +233 -0
  239. package/src/components/toggle/Toggle.tsx +94 -0
  240. package/src/components/toggle/toggle.css +152 -0
  241. package/src/components/tooltip/Tooltip.tsx +365 -0
  242. package/src/components/tooltip/tooltip.css +86 -0
  243. package/src/index.ts +42 -0
  244. package/src/styles.css +39 -0
  245. package/src/tokens/avatar.css +20 -0
  246. package/src/tokens/color.css +56 -0
  247. package/src/tokens/elevation.css +20 -0
  248. package/src/tokens/fonts.css +3 -0
  249. package/src/tokens/glass.css +21 -0
  250. package/src/tokens/icons.css +7 -0
  251. package/src/tokens/layers.css +6 -0
  252. package/src/tokens/motion-tokens.ts +72 -0
  253. package/src/tokens/motion.css +49 -0
  254. package/src/tokens/radius.css +11 -0
  255. package/src/tokens/semantic.css +75 -0
  256. package/src/tokens/spacing.css +26 -0
  257. package/src/tokens/typography.css +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/overlay/overlay-core.tsx","../src/components/overlay/sheet-drag.tsx","../src/components/overlay/Overlay.tsx"],"names":["ovMotion","React","jsx","jsxs","React3","OvAnimatePresence"],"mappings":";;;;;;AAQA,IAAM,IAAA,GAAO,QAAA;AACb,IAAM;AAAA,EACJ,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,eAAA,EAAiB,iBAAA;AAAA,EACjB,MAAA,EAAQ;AACV,CAAA,GAAI,KAAA;AAEJ,SAAS,eAAA,CACP,UAAA,EACA,OAAA,EACA,QAAA,EACwB;AACxB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,WAAW,OAAO,CAAA;AAClD,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,eAAe,UAAA,GAAa,QAAA;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAY;AAC5B,IAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,IAAA,IAAI,QAAA,WAAmB,IAAI,CAAA;AAAA,EAC7B,CAAA;AACA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;AAGA,SAAS,SAAS,KAAA,EAAuB;AACvC,EAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,EAAA,MAAM,IAAI,gBAAA,CAAiB,IAAI,EAAE,gBAAA,CAAiB,KAAK,EAAE,IAAA,EAAK;AAC9D,EAAA,MAAM,CAAA,GAAI,WAAW,CAAC,CAAA;AACtB,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAC5B,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,GAAI,CAAA,GAAI,WAAW,gBAAA,CAAiB,IAAI,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA;AAC/E;AAEA,SAAS,iBAAA,CACP,UACA,KAAA,EACiB;AACjB,EAAA,OAAO,OAAO,QAAA,KAAa,UAAA,GAAa,SAAS,EAAE,KAAA,EAAO,CAAA,GAAI,QAAA;AAChE;AAEA,SAAS,eACP,OAAA,EACA;AAAA,EACE,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAO2B;AAC3B,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAA6B;AAC3C,IAAA,IAAI,UAAA,aAAuB,OAAA,GAAU,IAAA;AACrC,IAAA,MAAM,IAAK,OAAA,CAAgB,GAAA;AAC3B,IAAA,IAAI,OAAO,CAAA,KAAM,UAAA,EAAY,CAAA,CAAE,IAAI,CAAA;AAAA,SAAA,IAC1B,CAAA,IAAK,OAAA,GAAU,IAAA;AAAA,EAC1B,CAAA;AACA,EAAA,OAAa,mBAAa,OAAA,EAAoC;AAAA,IAC5D,GAAA,EAAK,MAAA;AAAA,IACL,OAAA,EAAS,CAAC,CAAA,KAAwB;AAChC,MAAA,MAAM,EAAA,GAAM,QAAQ,KAAA,CAAsD,OAAA;AAC1E,MAAA,IAAI,EAAA,KAAO,CAAC,CAAA;AACZ,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAAA,IACA,eAAA,EAAiB,QAAA;AAAA,IACjB,eAAA,EAAiB,IAAA;AAAA,IACjB,eAAA,EAAiB,OAAO,OAAA,GAAU;AAAA,GACnC,CAAA;AACH;AAWA,IAAM,UAA0B,EAAC;AAEjC,SAAS,eAAe,CAAA,EAAkB;AACxC,EAAA,IAAI,EAAE,GAAA,KAAQ,QAAA,IAAY,EAAE,gBAAA,IAAoB,OAAA,CAAQ,WAAW,CAAA,EAAG;AACtE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,CAAI,aAAA,EAAc,EAAG;AAC1B,EAAA,CAAA,CAAE,cAAA,EAAe;AACjB,EAAA,GAAA,CAAI,YAAA,EAAa;AACnB;AAEA,SAAS,QAAQ,KAAA,EAAqB;AACpC,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,KAAM,KAAA;AACzC;AAGA,SAAS,gBAAA,CAAiB,OAAqB,MAAA,EAA4B;AACzE,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAC/B,EAAA,OAAO,CAAA,IAAK,CAAA,IAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACtE;AAGA,SAAS,eAAA,CAAgB;AAAA,EACvB,OAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAIiB;AACf,EAAA,MAAM,GAAA,GAAM,SAAuB,IAAI,CAAA;AACvC,EAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAChB,IAAA,GAAA,CAAI,OAAA,GAAU;AAAA,MACZ,QAAA,EAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,OAAA,CAAQ,WAAW,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,CAAS,CAAC,CAAA;AAAA,MAC/E,aAAA,EAAe,MAAM,GAAA,CAAI,OAAA,CAAQ,YAAA;AAAA,MACjC,YAAA,EAAc,MAAM,GAAA,CAAI,OAAA,CAAQ,MAAA;AAAO,KACzC;AAAA,EACF;AACA,EAAA,GAAA,CAAI,QAAQ,YAAA,GAAe,WAAA;AAC3B,EAAA,GAAA,CAAI,QAAQ,MAAA,GAAS,YAAA;AAErB,EAAA,iBAAA,CAAkB,MAAM;AACtB,IAAA,MAAM,QAAQ,GAAA,CAAI,OAAA;AAClB,IAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,EAAG,QAAA,CAAS,gBAAA,CAAiB,WAAW,cAAc,CAAA;AAC7E,IAAA,OAAA,CAAQ,KAAK,KAAK,CAAA;AAClB,IAAA,IAAI,OAAA,CAAQ,OAAA;AACV,MAAA,OAAA,CAAQ,QAAQ,KAAA,CAAM,MAAA,GAAS,8BAAA,IAAkC,OAAA,CAAQ,SAAS,CAAA,CAAA,GAAK,GAAA;AACzF,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAC/B,MAAA,IAAI,CAAA,IAAK,CAAA,EAAG,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA;AAC/B,MAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,EAAG,QAAA,CAAS,mBAAA,CAAoB,WAAW,cAAc,CAAA;AAAA,IAClF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,GAAA,CAAI,OAAA;AACb;AAGA,SAAS,eAAA,CAAgB;AAAA,EACvB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,MAAA,GAAS,SAAoD,IAAI,CAAA;AACvE,EAAA,MAAA,CAAO,OAAA,GAAU,EAAE,OAAA,EAAS,OAAA,EAAQ;AACpC,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAoB;AAClC,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,CAAQ,OAAA,EAAS;AAC7B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,CAAQ,QAAA,CAAS,CAAS,CAAC,CAAA,EAAG;AAClE,MAAA,IAAI,gBAAA,CAAiB,KAAA,EAAO,CAAC,CAAA,EAAG;AAChC,MAAA,MAAA,CAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAA,EAAe,MAAA,EAAQ,IAAI,CAAA;AACrD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,aAAA,EAAe,QAAQ,IAAI,CAAA;AAAA,EACvE,CAAA,EAAG,EAAE,CAAA;AACP;AAGA,SAAS,eAAe,OAAA,EAAuC;AAC7D,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,MAAM,OAAO,QAAA,CAAS,aAAA;AACtB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,IAAI,QAAA,CAAS,aAAA;AACnB,MAAA,MAAM,QAAA,GACJ,CAAC,CAAA,IAAK,CAAA,KAAM,QAAA,CAAS,IAAA,IAAS,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAA;AAC7E,MAAA,IAAI,YAAY,IAAA,IAAQ,IAAA,CAAK,eAAe,OAAO,IAAA,CAAK,UAAU,UAAA,EAAY;AAC5E,QAAA,cAAA,CAAe,MAAM;AACnB,UAAA,IAAI,KAAK,WAAA,EAAa,IAAA,CAAK,MAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA,QAC1D,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAEA,IAAM,YAAA,GACJ,gKAAA;AAIF,SAAS,YAAA,CAAa;AAAA,EACpB,QAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,IAAA,IAAI,CAAC,OAAO,OAAO,MAAA;AACnB,IAAA,MAAM,UAAA,GAAa,MACjB,KAAA,CAAM,IAAA,CAAK,MAAM,gBAAA,CAA8B,YAAY,CAAC,CAAA,CAAE,MAAA;AAAA,MAC5D,CAAC,EAAA,KAAO,EAAA,CAAG,YAAA,KAAiB,IAAA,IAAQ,OAAO,QAAA,CAAS;AAAA,KACtD;AAEF,IAAA,MAAM,IAAA,GACJ,MAAM,aAAA,CAA2B,+BAA+B,KAAK,UAAA,EAAW,CAAE,CAAC,CAAA,IAAK,KAAA;AAC1F,IAAA,IAAA,CAAK,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAElC,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAqB;AACtC,MAAA,IAAI,CAAA,CAAE,QAAQ,KAAA,EAAO;AACrB,MAAA,MAAM,IAAI,UAAA,EAAW;AACrB,MAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAM,QAAA,CAAS,aAAA;AACrB,MAAA,IAAI,EAAE,QAAA,EAAU;AACd,QAAA,IAAI,GAAA,KAAQ,CAAA,CAAE,CAAC,CAAA,IAAK,QAAQ,KAAA,EAAO;AACjC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,CAAA,CAAE,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,QACxB;AAAA,MACF,WAAW,GAAA,KAAQ,CAAA,CAAE,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,EAAG;AAClC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,CAAA,CAAE,CAAC,EAAE,KAAA,EAAM;AAAA,MACb;AAAA,IACF,CAAA;AACA,IAAA,MAAM,SAAA,GAAY,CAAC,CAAA,KAAkB;AACnC,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,CAAA,CAAE,MAAc,CAAA,EAAG;AACtC,MAAA,IAAI,CAAC,QAAQ,KAAK,CAAA,IAAK,iBAAiB,KAAA,EAAO,CAAA,CAAE,MAAM,CAAA,EAAG;AAC1D,MAAA,CAAC,UAAA,GAAa,CAAC,CAAA,IAAK,OAAO,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAAA,IAC1D,CAAA;AAEA,IAAA,KAAA,CAAM,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC3C,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC9C,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,CAAM,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAC9C,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAAA,IACnD,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAEA,IAAI,OAAA,GAAU,CAAA;AACd,IAAI,eAAA,GAAkB,EAAA;AACtB,IAAI,UAAA,GAAa,EAAA;AACjB,SAAS,aAAA,GAAgB;AACvB,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,IAAI,EAAE,YAAY,CAAA,EAAG;AACnB,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,GAAa,QAAA,CAAS,eAAA,CAAgB,WAAA;AAC5D,MAAA,eAAA,GAAkB,KAAK,KAAA,CAAM,QAAA;AAC7B,MAAA,UAAA,GAAa,KAAK,KAAA,CAAM,YAAA;AACxB,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AACtB,MAAA,IAAI,MAAA,GAAS,CAAA;AACX,QAAA,IAAA,CAAK,KAAA,CAAM,gBACR,UAAA,CAAW,gBAAA,CAAiB,IAAI,CAAA,CAAE,YAAY,CAAA,IAAK,CAAA,IAAK,MAAA,GAAS,IAAA;AAAA,IACxE;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,EAAE,YAAY,CAAA,EAAG;AACnB,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,eAAA;AAC/B,QAAA,QAAA,CAAS,IAAA,CAAK,MAAM,YAAA,GAAe,UAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAGA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAM,SAAA,uBAAgB,GAAA,EAAiB;AACvC,SAAS,eAAA,GAAkB;AACzB,EAAA,WAAA,CAAY,MAAM;AAChB,IAAA,IAAI,EAAE,iBAAiB,CAAA,EAAG;AACxB,MAAA,KAAA,MAAW,MAAM,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA,EAAoB;AACpE,QAAA,IACE,EAAA,CAAG,YAAA,CAAa,mBAAmB,CAAA,IACnC,EAAA,CAAG,YAAY,QAAA,IACf,EAAA,CAAG,OAAA,KAAY,OAAA,IACf,EAAA,CAAG,KAAA;AAEH,UAAA;AACF,QAAA,EAAA,CAAG,KAAA,GAAQ,IAAA;AACX,QAAA,SAAA,CAAU,IAAI,EAAE,CAAA;AAAA,MAClB;AAAA,IACF;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,EAAE,iBAAiB,CAAA,EAAG;AACxB,QAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,EAAA,KAAO;AACxB,UAAA,EAAA,CAAG,KAAA,GAAQ,KAAA;AAAA,QACb,CAAC,CAAA;AACD,QAAA,SAAA,CAAU,KAAA,EAAM;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,iBAAA,CAAkB,MAAM;AACtB,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,MAAM,IAAI,UAAA,CAAW,OAAA;AACrB,MAAA,MAAM,IAAI,QAAA,CAAS,OAAA;AACnB,MAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,MAAA,MAAM,CAAA,GAAI,EAAE,qBAAA,EAAsB;AAClC,MAAA,MAAM,EAAA,GAAK,CAAA,CAAE,WAAA,EACX,EAAA,GAAK,CAAA,CAAE,YAAA;AACT,MAAA,MAAM,IAAA,GAAO,SAAS,WAAW,CAAA;AACjC,MAAA,MAAM,GAAA,GAAM,IAAA,IAAQ,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAA;AAChC,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,EAChB,EAAA,GAAK,MAAA,CAAO,WAAA;AAEd,MAAA,MAAM,IAAA,GAA+B;AAAA,QACnC,KAAK,CAAA,CAAE,GAAA;AAAA,QACP,MAAA,EAAQ,KAAK,CAAA,CAAE,MAAA;AAAA,QACf,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,KAAA,EAAO,KAAK,CAAA,CAAE;AAAA,OAChB;AACA,MAAA,MAAM,QAAA,GAAgE;AAAA,QACpE,GAAA,EAAK,QAAA;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,QAAA;AAC5C,MAAA,IAAI,CAAA,GAAI,IAAA;AACR,MAAA,IAAI,KAAK,CAAC,CAAA,GAAA,CAAK,QAAA,GAAW,EAAA,GAAK,MAAM,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAEvF,MAAA,IAAI,CAAA,EAAG,CAAA;AACP,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,CAAA,GAAI,MAAM,KAAA,GAAQ,CAAA,CAAE,MAAM,EAAA,GAAK,GAAA,GAAM,EAAE,MAAA,GAAS,GAAA;AAChD,QAAA,CAAA,GACE,KAAA,KAAU,OAAA,GAAU,CAAA,CAAE,IAAA,GAAO,KAAA,KAAU,KAAA,GAAQ,CAAA,CAAE,KAAA,GAAQ,EAAA,GAAK,CAAA,CAAE,IAAA,GAAA,CAAQ,CAAA,CAAE,QAAQ,EAAA,IAAM,CAAA;AAC1F,QAAA,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,IAAI,CAAA;AAC9C,QAAA,CAAA,GAAI,IAAA,CAAK,GAAA;AAAA,UACP,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,EAAA,GAAK,KAAK,IAAI,CAAA;AAAA,UAC1B;AAAA,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,CAAE,OAAO,EAAA,GAAK,GAAA,GAAM,EAAE,KAAA,GAAQ,GAAA;AACjD,QAAA,CAAA,GACE,KAAA,KAAU,OAAA,GAAU,CAAA,CAAE,GAAA,GAAM,KAAA,KAAU,KAAA,GAAQ,CAAA,CAAE,MAAA,GAAS,EAAA,GAAK,CAAA,CAAE,GAAA,GAAA,CAAO,CAAA,CAAE,SAAS,EAAA,IAAM,CAAA;AAC1F,QAAA,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,EAAA,GAAK,EAAA,GAAK,IAAI,CAAA;AAC9C,QAAA,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,EAAA,GAAK,EAAA,GAAK,IAAI,CAAA,EAAG,IAAI,CAAA;AAAA,MAChD;AACA,MAAA,CAAA,CAAE,KAAA,CAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC/B,MAAA,CAAA,CAAE,KAAA,CAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC9B,MAAA,CAAA,CAAE,YAAA,CAAa,aAAa,CAAC,CAAA;AAC7B,MAAA,CAAA,CAAE,YAAA,CAAa,cAAc,KAAK,CAAA;AAClC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,QAAA;AACF,UAAA,CAAA,CAAE,KAAA,CAAM,WAAA;AAAA,YACN,mBAAA;AAAA,YACA,KAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,KAAA,GAAQ,IAAI,CAAA,EAAG,EAAE,GAAG,EAAA,GAAK,EAAE,CAAC,CAAA,GAAI;AAAA,WAC1E;AAAA;AAEA,UAAA,CAAA,CAAE,KAAA,CAAM,WAAA;AAAA,YACN,mBAAA;AAAA,YACA,KAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,GAAM,CAAA,CAAE,MAAA,GAAS,IAAI,CAAA,EAAG,EAAE,GAAG,EAAA,GAAK,EAAE,CAAC,CAAA,GAAI;AAAA,WAC1E;AAAA,MACJ;AAAA,IACF,CAAA;AACA,IAAA,KAAA,EAAM;AACN,IAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,KAAA,EAAO,IAAI,CAAA;AAC7C,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,KAAK,CAAA;AACvC,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,KAAK,CAAA;AACnC,IAAA,EAAA,CAAG,OAAA,CAAQ,SAAS,OAAO,CAAA;AAC3B,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,KAAA,EAAO,IAAI,CAAA;AAChD,MAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,KAAK,CAAA;AAC1C,MAAA,EAAA,CAAG,UAAA,EAAW;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,KAAA,EAAO,KAAK,CAAC,CAAA;AACzB;AAGA,SAAS,aAAA,CAAc,EAAE,QAAA,EAAS,EAAkC;AAClE,EAAA,MAAM,OAAA,GAAU,SAAgC,IAAI,CAAA;AAEpD,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,CAAC,QAAQ,OAAA,EAAS;AACvD,IAAA,OAAA,CAAQ,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC9C,IAAA,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,mBAAA,EAAqB,EAAE,CAAA;AAAA,EACtD;AACA,EAAA,iBAAA,CAAkB,MAAM;AACtB,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,EAAE,CAAA;AAC5B,IAAA,OAAO,MAAM,GAAG,MAAA,EAAO;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAS,OAAO,IAAA;AAC7B,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA;AAC/C;AAGA,IAAM,eAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,EAAE,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,UAAS,EAAE;AAAA,EACxF,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,YAAY,EAAE,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,UAAS;AACtF,CAAA;AACA,SAAS,YAAA,CAAa;AAAA,EACpB,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,EAIG;AACD,EAAA,MAAM,IAAA,GAAO,SAAS,KAAK,CAAA;AAC3B,EAAA,uBACE,GAAA;AAAA,IAACA,MAAA,CAAS,GAAA;AAAA,IAAT;AAAA,MACC,SAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAY,MAAA;AAAA,MACX,GAAI,OAAA,GAAU,EAAE,KAAA,EAAO,EAAE,SAAQ,EAAE,GAAI,EAAE,QAAA,EAAU,eAAA,EAAgB;AAAA,MACpE,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,QAAA,IAAA,CAAK,OAAA,GAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA;AAAA,MAChC,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,IAAI,eAAe,IAAA,CAAK,OAAA,IAAW,EAAE,MAAA,KAAW,CAAA,CAAE,eAAe,OAAA,EAAQ;AAAA,MAC3E;AAAA;AAAA,GACD;AAEL;AAGA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAOuB;AACrB,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,KAAA,GAAc,KAAA,CAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,CAAA;AAC1C,IAAA,IAAI,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,EAAU;AAClC,MAAA,MAAM,GAAA,GAAOA,MAAA,CAAiB,KAAA,CAAM,IAAI,CAAA;AACxC,MAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAA6B;AAChD,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA,MAAM,IAAK,KAAA,CAAc,GAAA;AACzB,QAAA,IAAI,OAAO,CAAA,KAAM,UAAA,EAAY,CAAA,CAAE,IAAI,CAAA;AAAA,aAAA,IAC1B,CAAA,IAAK,OAAA,GAAU,IAAA;AAAA,MAC1B,CAAA;AACA,MAAA,uBACE,IAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA,CAAM,KAAA;AAAA,UACT,GAAG,WAAA;AAAA,UACJ,GAAA,EAAK,WAAA;AAAA,UACL,SAAA,EAAW,MAAM,KAAA,CAAM,SAAA,GAAY,YAAY,GAAA,GAAM,KAAA,CAAM,MAAM,SAAA,GAAY,SAAA;AAAA,UAC7E,KAAA,EAAO,EAAE,GAAG,WAAA,CAAY,OAAO,GAAG,KAAA,CAAM,MAAM,KAAA,EAAM;AAAA,UAEnD,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YACA,MAAM,KAAA,CAAM;AAAA;AAAA;AAAA,OACf;AAAA,IAEJ;AACA,IAAA,OAAA,CAAQ,KAAK,4EAA4E,CAAA;AAAA,EAC3F;AACA,EAAA,uBACE,IAAA;AAAA,IAACA,MAAA,CAAS,GAAA;AAAA,IAAT;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,GAAA,EAAK,OAAA;AAAA,MACL,SAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACH;AAEJ;AAGA,SAAS,UAAA,CAAW;AAAA,EAClB,UAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,SAAS,eAAA,GAAkB,IAAA;AAAA,EAC3B,YAAY,EAAC;AAAA,EACb,YAAA,GAAe,IAAA;AAAA,EACf;AACF,CAAA,EAYG;AACD,EAAA,MAAM,QAAA,GAAW,SAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,eAAA,GAAkB,SAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,UAAU,eAAA,IAAmB,eAAA;AACnC,EAAA,MAAM,QAAQ,eAAA,CAAgB,EAAE,SAAS,QAAA,EAAU,WAAA,EAAa,cAAc,CAAA;AAC9E,EAAA,aAAA,EAAc;AACd,EAAA,eAAA,EAAgB;AAChB,EAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,EAAA,YAAA,CAAa,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,CAAA;AACzC,EAAA,uBACE,IAAA;AAAA,IAACA,MAAA,CAAS,GAAA;AAAA,IAAT;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,WAAW,gBAAA,GAAmB,UAAA;AAAA,MAC9B,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAK,QAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAA0B,OAAA,EAAS,YAAA,EAAc,SAAS,YAAA,EAAc,CAAA;AAAA,QACrF,cAAA,CAAe;AAAA,UACd,OAAA;AAAA,UACA,QAAA;AAAA,UACA,OAAA,EAAS,OAAA;AAAA,UACT,WAAW,eAAA,GAAkB,SAAA;AAAA,UAC7B,WAAA,EAAa,EAAE,EAAA,EAAI,OAAA,EAAS,UAAU,EAAA,EAAI,QAAA,EAAU,YAAA,EAAc,GAAG,SAAA;AAAU,SAChF;AAAA;AAAA;AAAA,GACH;AAEJ;AC3hBA,IAAM,IAAA,GAAO,QAAA;AACb,IAAM,EAAE,SAAA,EAAW,WAAA,EAAa,MAAA,EAAQ,UAAS,GAAIC,KAAAA;AAErD,IAAM,aAAA,GAAgB,GAAA;AACtB,IAAM,gBAAA,GAAmB,GAAA;AACzB,IAAM,SAAA,GAAY,CAAA;AAClB,IAAM,WAAA,GAAc,IAAA;AAGpB,SAAS,cAAA,CAAe,MAA0B,IAAA,EAA8C;AAC9F,EAAA,IAAI,EAAA,GAAK,IAAA,YAAgB,OAAA,GAAU,IAAA,GAAO,IAAA;AAC1C,EAAA,OAAO,EAAA,IAAM,OAAO,IAAA,EAAM;AACxB,IAAA,MAAM,CAAA,GAAI,iBAAiB,EAAE,CAAA;AAC7B,IAAA,IACE,eAAA,CAAgB,IAAA,CAAK,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAS,CAAA,KAC7C,EAAA,CAAG,YAAA,GAAe,EAAA,CAAG,YAAA,IAAgB,EAAA,CAAG,cAAc,EAAA,CAAG,WAAA,CAAA;AAE1D,MAAA,OAAO,EAAA;AACT,IAAA,EAAA,GAAK,EAAA,CAAG,aAAA;AAAA,EACV;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CAAa;AAAA,EACpB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,IAAA,GAAO,IAAA,KAAS,QAAA,GAAW,GAAA,GAAM,GAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,eAAgC,MAAM,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,eAAe,CAAC,CAAA;AAChC,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,MAAM,eAAA,GAAkB,SAAwB,IAAI,CAAA;AAGpD,EAAA,SAAS,gBAAA,GAAmB;AAC1B,IAAA,MAAM,GAAA,GAAM,OAAO,YAAA,EAAa;AAChC,IAAA,IAAI,GAAA,MAAS,eAAA,EAAgB;AAC7B,IAAA,eAAA,CAAgB,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,UAAA;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,UAAA,GAAa,MAAA;AAAA,EACnC;AACA,EAAA,SAAS,gBAAA,GAAmB;AAC1B,IAAA,IAAI,eAAA,CAAgB,YAAY,IAAA,EAAM;AACtC,IAAA,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,eAAA,CAAgB,OAAA;AACjD,IAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAAA,EAC5B;AACA,EAAA,WAAA,CAAY,MAAM,gBAAA,EAAkB,EAAE,CAAA;AAEtC,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,MAAA,EAAQ,CAAC,CAAA,KAAM;AAC3C,IAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA,GAAI,GAAA,IAAO,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AACnF,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,IAAA,MAAM,OAAO,EAAA,GAAM,IAAA,KAAS,MAAM,EAAA,CAAG,YAAA,GAAe,GAAG,WAAA,GAAe,QAAA;AACtE,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,IAAA,EAAM,CAAC,GAAG,CAAC,CAAA;AAAA,EAC1C,CAAC,CAAA;AACD,EAAA,MAAM,eAAe,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA,KAAM,IAAI,CAAC,CAAA;AAGxD,EAAA,SAAS,cAAc,CAAA,EAAuB;AAC5C,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AACpB,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,EACf,MAAA,GAAS,CAAA,CAAE,OAAA;AACb,IAAA,MAAM,UAAA,GAAa,cAAA,CAAe,CAAA,CAAE,MAAA,EAAQ,QAAQ,OAAO,CAAA;AAC3D,IAAA,MAAM,MAAA,GAAS,CAAC,EAAA,KAAqB;AACnC,MAAA,MAAM,KAAK,EAAA,CAAG,OAAA,GAAU,MAAA,EACtB,EAAA,GAAK,GAAG,OAAA,GAAU,MAAA;AACpB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,EAAE,CAAC,CAAA,GAAI,SAAA,EAAW;AACtD,MAAA,OAAA,EAAQ;AACR,MAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,GAAA,GAAM,EAAA,GAAK,EAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAA,KAAS,GAAA,GAAM,EAAA,GAAK,EAAA;AAClC,MAAA,IAAI,KAAK,GAAA,CAAI,KAAK,KAAK,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,EAAG;AACxC,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI,QAAQ,CAAA,EAAG;AACf,QAAA,IAAI,SAAS,GAAA,GAAM,UAAA,CAAW,YAAY,CAAA,GAAI,UAAA,CAAW,aAAa,CAAA,EAAG;AAAA,MAC3E;AACA,MAAA,gBAAA,EAAiB;AAEjB,MAAA,MAAA,CAAO,iBAAiB,WAAA,EAAa,gBAAA,EAAkB,EAAE,IAAA,EAAM,MAAM,CAAA;AACrE,MAAA,MAAA,CAAO,iBAAiB,eAAA,EAAiB,gBAAA,EAAkB,EAAE,IAAA,EAAM,MAAM,CAAA;AACzE,MAAA,QAAA,CAAS,MAAM,EAAE,CAAA;AAAA,IACnB,CAAA;AACA,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,MAAM,CAAA;AAChD,MAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,OAAO,CAAA;AAC/C,MAAA,MAAA,CAAO,mBAAA,CAAoB,iBAAiB,OAAO,CAAA;AAAA,IACrD,CAAA;AACA,IAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,MAAM,CAAA;AAC7C,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAC5C,IAAA,MAAA,CAAO,gBAAA,CAAiB,iBAAiB,OAAO,CAAA;AAAA,EAClD;AAGA,EAAA,SAAS,MAAA,CAAO,KAA6C,IAAA,EAAe;AAC1E,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,GAAA,GAAM,EAAA,CAAG,eAAe,EAAA,CAAG,WAAA;AACjD,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA;AAC1B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,EAAM,CAAC,CAAA,GAAI,WAAA,GAAc,CAAC,CAAA;AAAA,EAClE;AAEA,EAAA,SAAS,SAAA,CAAU,KAA6C,IAAA,EAAe;AAC7E,IAAA,gBAAA,EAAiB;AACjB,IAAA,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG,IAAA,CAAK,CAAA,CAAE,MAAM,CAAA;AACjC,IAAA,MAAM,KAAK,OAAA,CAAQ,OAAA;AACnB,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,GAAA,GAAM,EAAA,CAAG,eAAe,EAAA,CAAG,WAAA;AACjD,IAAA,IAAI,IAAA,CAAK,OAAO,IAAI,CAAA,GAAI,OAAO,aAAA,IAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,GAAI,gBAAA;AACpE,MAAA,YAAA,EAAa;AAAA,EACjB;AAEA,EAAA,MAAM,YAAA,GACJ,IAAA,KAAS,GAAA,GAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,CAAA,EAAE,GAAI,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAA,EAAE;AAEjF,EAAA,MAAM,YAAY,OAAA,GACd;AAAA,IACE,IAAA,EAAM,IAAA;AAAA,IACN,YAAA,EAAc,QAAA;AAAA,IACd,YAAA,EAAc,KAAA;AAAA,IACd,YAAA,EAAc,KAAA;AAAA,IACd,eAAA,EAAiB,EAAE,GAAA,EAAK,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAE;AAAA;AAAA,IAExD,WAAA,EAAa,IAAA,KAAS,GAAA,GAAM,EAAE,GAAA,EAAK,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAE,GAAI,EAAE,IAAA,EAAM,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,IACxE,aAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAO,EAAE,CAAC,IAAI,GAAG,MAAA,EAAQ,GAAG,YAAA;AAAa,GAC3C,GACA,EAAE,KAAA,EAAO,EAAE,CAAC,IAAI,GAAG,QAAO,EAAE;AAEhC,EAAA,OAAO,EAAE,WAAW,YAAA,EAAa;AACnC;AC3HA,IAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAIA,KAAAA;AAkC1B,IAAM,eAAA,GAAkB;AAAA,EACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAM,UAAA,EAAY,IAAA,CAAG,CAAA,CAAE,IAAA,EAAK;AAAA,EACzD,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAG,UAAA,EAAY,IAAA,CAAG,CAAA,CAAE,KAAA;AACjD,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,CAAG,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAG,IAAA,CAAK,QAAA;AAAS,GAC9D;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,CAAA,EAAG,CAAA;AAAA,IACH,KAAA,EAAO,CAAA;AAAA,IACP,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,CAAG,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAG,IAAA,CAAK,QAAA;AAAS;AAEhE,CAAA;AAGA,SAAS,cAAc,IAAA,EAA0B;AAC/C,EAAA,MAAM,IAAA,GAAO,IAAA,KAAS,QAAA,GAAW,GAAA,GAAM,GAAA;AACvC,EAAA,OAAO;AAAA,IACL,QAAQ,EAAE,CAAC,IAAI,GAAG,QAAQ,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,CAAG,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAG,IAAA,CAAK,MAAK,EAAE;AAAA,IACpF,MAAM,EAAE,CAAC,IAAI,GAAG,GAAG,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,CAAG,IAAI,IAAA,EAAM,IAAA,EAAM,IAAA,CAAG,IAAA,CAAK,UAAS;AAAE,GACnF;AACF;AAUA,SAAS,YAAA,CAAa;AAAA,EACpB,OAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,QAAA,GAAW,OAAoB,IAAI,CAAA;AACzC,EAAA,MAAM,QAAQ,eAAA,CAAgB,EAAE,SAAS,QAAA,EAAU,WAAA,EAAa,cAAc,CAAA;AAC9E,EAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,EAAA,iBAAA,CAAkB,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,UAAU,CAAA;AAC9D,EAAA,eAAA,CAAgB;AAAA,IACd,KAAA;AAAA,IACA,IAAA,EAAM,CAAC,UAAA,EAAY,QAAQ,CAAA;AAAA,IAC3B,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACV,CAAA;AACD,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,OAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA,EAAS,KAAA,mBACPC,GAAAA,CAAC,MAAA,EAAA,EAAiB,WAAU,wBAAA,EAAyB,aAAA,EAAY,MAAA,EAAA,EAAvD,OAA8D,CAAA,GACtE,IAAA;AAAA,IACJ,OAAA,EAAS,QAAA;AAAA,IACT,SAAA,EAAW,iBAAA;AAAA,IACX,WAAA,EAAa;AAAA,MACX,EAAA,EAAI,OAAA;AAAA,MACJ,QAAA,EAAU,eAAA;AAAA,MACV,OAAA,EAAS,QAAA;AAAA,MACT,OAAA,EAAS,MAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR,GACD,CAAA;AACH;AAGA,SAAS,UAAA,CAAW;AAAA,EAClB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,OAAA,GAAU,OAAoB,IAAI,CAAA;AACxC,EAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAa,GAAI,YAAA,CAAa;AAAA,IAC/C,IAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,IACT;AAAA,GACD,CAAA;AACD,EAAA,uBACEA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAY,uBAAA,GAA0B,IAAA;AAAA,MACtC,WAAW,sBAAA,GAAyB,IAAA;AAAA,MACpC,YAAA,EAAc,cAAc,IAAI,CAAA;AAAA,MAChC,OAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA,GAAO,SAAA;AAAA,EACP,IAAA,EAAM,cAAA;AAAA,EACN,WAAA,GAAc,KAAA;AAAA,EACd,YAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,IAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,KAAA,GAAQ,KAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,OAAA,GAAU,KAAA;AAAA,EACV,EAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,IAAI,eAAA,CAAgB,cAAA,EAAgB,aAAa,YAAY,CAAA;AACjF,EAAA,MAAM,UAAA,GAAa,OAAoB,IAAI,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,EAAA,IAAM,UAAA,GAAa,KAAA,EAAM;AACzC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAK,CAAA;AACjC,EAAA,MAAM,QAAQ,IAAA,KAAS,SAAA;AACvB,EAAA,MAAM,CAAA,GAAI,IAAA,KAAS,IAAA,KAAS,OAAA,GAAU,OAAA,GAAU,QAAA,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,EAAU,KAAK,CAAA;AACjD,EAAA,MAAM,SAAsB,EAAE,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,cAAc,KAAA,EAAM;AAEjF,EAAA,uBACEC,IAAAA,CAAOC,KAAA,CAAA,QAAA,EAAN,EACE,QAAA,EAAA;AAAA,IAAA,cAAA,CAAe,OAAA,EAAS;AAAA,MACvB,IAAA;AAAA,MACA,SAAS,MAAM,OAAA,CAAQ,KAAA,GAAQ,IAAA,GAAO,CAAC,IAAI,CAAA;AAAA,MAC3C,OAAA;AAAA,MACA,QAAA,EAAU,QAAQ,QAAA,GAAW,MAAA;AAAA,MAC7B;AAAA,KACD,CAAA;AAAA,oBACDF,IAAC,aAAA,EAAA,EACC,QAAA,kBAAAA,IAACG,eAAA,EAAA,EACE,QAAA,EAAA,IAAA,KACE,IAAA,KAAS,SAAA,mBACRH,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QAEE,GAAG,MAAA;AAAA,QACJ,IAAA,EAAM,CAAA;AAAA,QACN,KAAA;AAAA,QACA,KAAA;AAAA,QACA,UAAA;AAAA,QAEC,QAAA,EAAA;AAAA,OAAA;AAAA,MAPG;AAAA,KAQN,GACE,IAAA,KAAS,OAAA,mBACXA,GAAAA,CAAC,UAAA,EAAA,EAAwB,GAAG,MAAA,EAAQ,IAAA,EAAM,CAAA,EACvC,QAAA,EAAA,OAAA,EAAA,EADa,OAEhB,oBAEAA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QAEE,GAAG,MAAA;AAAA,QACJ,UAAA,EAAW,uBAAA;AAAA,QACX,SAAA,EAAU,sBAAA;AAAA,QACV,YAAA,EAAc,cAAA;AAAA,QAEb,QAAA,EAAA;AAAA,OAAA;AAAA,MANG;AAAA,QASZ,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"chunk-QFS52OK5.js","sourcesContent":["'use client';\n\n/* overlay-core - the headless mechanics under popover, dialog and sheet. */\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion as ovMotion, AnimatePresence as OvAnimatePresence } from 'motion/react';\nimport { UIMotion } from '../../tokens/motion-tokens';\n\nconst ovSM = UIMotion;\nconst {\n useState: ovUseState,\n useEffect: ovUseEffect,\n useLayoutEffect: ovUseLayoutEffect,\n useRef: ovUseRef,\n} = React;\n\nfunction useControllable<T>(\n controlled: T | undefined,\n initial: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const [internal, setInternal] = ovUseState(initial);\n const isControlled = controlled !== undefined;\n const value = isControlled ? controlled : internal;\n const setValue = (next: T) => {\n if (!isControlled) setInternal(next);\n if (onChange) onChange(next);\n };\n return [value, setValue];\n}\n\n/* Token length - px; parseFloat alone reads \"0.5rem\" as 0.5px, so convert rem. */\nfunction ovReadPx(token: string): number {\n const root = document.documentElement;\n const v = getComputedStyle(root).getPropertyValue(token).trim();\n const n = parseFloat(v);\n if (Number.isNaN(n)) return 0;\n return v.endsWith('rem') ? n * parseFloat(getComputedStyle(root).fontSize) : n;\n}\n\nfunction ovResolveChildren(\n children: React.ReactNode | ((api: { close: () => void }) => React.ReactNode),\n close: () => void,\n): React.ReactNode {\n return typeof children === 'function' ? children({ close }) : children;\n}\n\nfunction ovCloneTrigger(\n trigger: React.ReactElement | null,\n {\n open,\n onPress,\n panelId,\n haspopup,\n triggerRef,\n }: {\n open: boolean;\n onPress: () => void;\n panelId: string;\n haspopup: string;\n triggerRef: React.RefObject<HTMLElement>;\n },\n): React.ReactElement | null {\n if (!trigger) return null;\n const setRef = (node: HTMLElement | null) => {\n if (triggerRef) triggerRef.current = node;\n const r = (trigger as any).ref;\n if (typeof r === 'function') r(node);\n else if (r) r.current = node;\n };\n return React.cloneElement(trigger as React.ReactElement<any>, {\n ref: setRef,\n onClick: (e: React.MouseEvent) => {\n const oc = (trigger.props as { onClick?: (e: React.MouseEvent) => void }).onClick;\n if (oc) oc(e);\n onPress();\n },\n 'aria-haspopup': haspopup,\n 'aria-expanded': open,\n 'aria-controls': open ? panelId : undefined,\n });\n}\n\n/* The overlay stack: one Esc listener closes only the topmost dismissible, and defers to inner handlers that already consumed the key (defaultPrevented). */\ninterface OverlayEntry {\n contains: (t: EventTarget | null) => boolean;\n isDismissible: () => boolean;\n requestClose: () => void;\n _dismissible?: boolean;\n _close?: () => void;\n}\n\nconst ovStack: OverlayEntry[] = [];\n\nfunction ovOnDocKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Escape' || e.defaultPrevented || ovStack.length === 0) return;\n const top = ovStack[ovStack.length - 1];\n if (!top.isDismissible()) return;\n e.preventDefault();\n top.requestClose();\n}\n\nfunction ovIsTop(entry: OverlayEntry) {\n return ovStack[ovStack.length - 1] === entry;\n}\n\n/* true if `target` sits in an overlay opened after `entry` (a nested child owns it). */\nfunction ovInOverlayAbove(entry: OverlayEntry, target: EventTarget | null) {\n const i = ovStack.indexOf(entry);\n return i >= 0 && ovStack.slice(i + 1).some((e) => e.contains(target));\n}\n\n/* Join the stack for the panel's lifetime; set z = --layer-overlay + depth. */\nfunction useOverlayEntry({\n nodeRef,\n dismissible,\n requestClose,\n}: {\n nodeRef: React.RefObject<HTMLElement>;\n dismissible: boolean;\n requestClose: () => void;\n}): OverlayEntry {\n const ref = ovUseRef<OverlayEntry>(null);\n if (!ref.current) {\n ref.current = {\n contains: (t) => Boolean(nodeRef.current && nodeRef.current.contains(t as Node)),\n isDismissible: () => ref.current._dismissible,\n requestClose: () => ref.current._close(),\n };\n }\n ref.current._dismissible = dismissible;\n ref.current._close = requestClose;\n\n ovUseLayoutEffect(() => {\n const entry = ref.current;\n if (ovStack.length === 0) document.addEventListener('keydown', ovOnDocKeyDown);\n ovStack.push(entry);\n if (nodeRef.current)\n nodeRef.current.style.zIndex = 'calc(var(--layer-overlay) + ' + (ovStack.length - 1) + ')';\n return () => {\n const i = ovStack.indexOf(entry);\n if (i >= 0) ovStack.splice(i, 1);\n if (ovStack.length === 0) document.removeEventListener('keydown', ovOnDocKeyDown);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return ref.current;\n}\n\n/* Light dismiss - close on a press outside the panel, trigger, and any overlay above. */\nfunction useOutsidePress({\n entry,\n refs,\n enabled,\n onPress,\n}: {\n entry: OverlayEntry;\n refs: React.RefObject<HTMLElement>[];\n enabled: boolean;\n onPress: () => void;\n}) {\n const latest = ovUseRef<{ enabled: boolean; onPress: () => void }>(null);\n latest.current = { enabled, onPress };\n ovUseEffect(() => {\n const onDown = (e: PointerEvent) => {\n if (!latest.current.enabled) return;\n const t = e.target;\n if (refs.some((r) => r.current && r.current.contains(t as Node))) return;\n if (ovInOverlayAbove(entry, t)) return;\n latest.current.onPress();\n };\n document.addEventListener('pointerdown', onDown, true);\n return () => document.removeEventListener('pointerdown', onDown, true);\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n}\n\n/* Restore focus to the opener on unmount, but only if it would otherwise be lost; a microtask dodges the inert-release ordering race. */\nfunction useReturnFocus(nodeRef: React.RefObject<HTMLElement>) {\n ovUseEffect(() => {\n const prev = document.activeElement as HTMLElement | null;\n return () => {\n const a = document.activeElement;\n const orphaned =\n !a || a === document.body || (nodeRef.current && nodeRef.current.contains(a));\n if (orphaned && prev && prev.isConnected && typeof prev.focus === 'function') {\n queueMicrotask(() => {\n if (prev.isConnected) prev.focus({ preventScroll: true });\n });\n }\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n}\n\nconst OV_FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), ' +\n 'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/* Hard focus trap: seed in, cycle Tab inside, recapture stray focus unless not topmost or it's in an overlay above. */\nfunction useFocusTrap({\n panelRef,\n entry,\n}: {\n panelRef: React.RefObject<HTMLElement>;\n entry: OverlayEntry;\n}) {\n ovUseEffect(() => {\n const panel = panelRef.current;\n if (!panel) return undefined;\n const focusables = () =>\n Array.from(panel.querySelectorAll<HTMLElement>(OV_FOCUSABLE)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement,\n );\n\n const seed =\n panel.querySelector<HTMLElement>('[autofocus], [data-autofocus]') || focusables()[0] || panel;\n seed.focus({ preventScroll: true });\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const f = focusables();\n if (f.length === 0) {\n e.preventDefault();\n return;\n }\n const cur = document.activeElement;\n if (e.shiftKey) {\n if (cur === f[0] || cur === panel) {\n e.preventDefault();\n f[f.length - 1].focus();\n }\n } else if (cur === f[f.length - 1]) {\n e.preventDefault();\n f[0].focus();\n }\n };\n const onFocusIn = (e: FocusEvent) => {\n if (panel.contains(e.target as Node)) return;\n if (!ovIsTop(entry) || ovInOverlayAbove(entry, e.target)) return;\n (focusables()[0] || panel).focus({ preventScroll: true });\n };\n\n panel.addEventListener('keydown', onKeyDown);\n document.addEventListener('focusin', onFocusIn);\n return () => {\n panel.removeEventListener('keydown', onKeyDown);\n document.removeEventListener('focusin', onFocusIn);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n}\n\nlet ovLocks = 0;\nlet ovSavedOverflow = '';\nlet ovSavedPad = '';\nfunction useScrollLock() {\n ovUseEffect(() => {\n if (++ovLocks === 1) {\n const body = document.body;\n const gutter = window.innerWidth - document.documentElement.clientWidth;\n ovSavedOverflow = body.style.overflow;\n ovSavedPad = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (gutter > 0)\n body.style.paddingRight =\n (parseFloat(getComputedStyle(body).paddingRight) || 0) + gutter + 'px';\n }\n return () => {\n if (--ovLocks === 0) {\n document.body.style.overflow = ovSavedOverflow;\n document.body.style.paddingRight = ovSavedPad;\n }\n };\n }, []);\n}\n\n/* `inert` on every non-overlay <body> child (refcounted); content mounted while a modal is already up is not swept. */\nlet ovInertCount = 0;\nconst ovInerted = new Set<HTMLElement>();\nfunction useInertOutside() {\n ovUseEffect(() => {\n if (++ovInertCount === 1) {\n for (const el of Array.from(document.body.children) as HTMLElement[]) {\n if (\n el.hasAttribute('data-overlay-root') ||\n el.tagName === 'SCRIPT' ||\n el.tagName === 'STYLE' ||\n el.inert\n )\n continue;\n el.inert = true;\n ovInerted.add(el);\n }\n }\n return () => {\n if (--ovInertCount === 0) {\n ovInerted.forEach((el) => {\n el.inert = false;\n });\n ovInerted.clear();\n }\n };\n }, []);\n}\n\n/* Anchored placement: measure, place on the side, flip when cramped, clamp the cross axis; writes data-side/-align + arrow vars in a layout effect. */\nfunction useAnchorPosition({\n side,\n align,\n arrow,\n triggerRef,\n panelRef,\n}: {\n side: 'top' | 'bottom' | 'left' | 'right';\n align: 'start' | 'center' | 'end';\n arrow: boolean;\n triggerRef: React.RefObject<HTMLElement>;\n panelRef: React.RefObject<HTMLElement>;\n}) {\n ovUseLayoutEffect(() => {\n const place = () => {\n const t = triggerRef.current;\n const p = panelRef.current;\n if (!t || !p) return;\n const r = t.getBoundingClientRect();\n const pw = p.offsetWidth,\n ph = p.offsetHeight;\n const edge = ovReadPx('--space-2');\n const gap = edge + (arrow ? 3 : 0);\n const vw = window.innerWidth,\n vh = window.innerHeight;\n\n const room: Record<string, number> = {\n top: r.top,\n bottom: vh - r.bottom,\n left: r.left,\n right: vw - r.right,\n };\n const opposite: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n const vertical = side === 'top' || side === 'bottom';\n let s = side;\n if (room[s] < (vertical ? ph : pw) + gap && room[opposite[s]] > room[s]) s = opposite[s];\n\n let x, y;\n if (vertical) {\n y = s === 'top' ? r.top - ph - gap : r.bottom + gap;\n x =\n align === 'start' ? r.left : align === 'end' ? r.right - pw : r.left + (r.width - pw) / 2;\n x = Math.min(Math.max(x, edge), vw - pw - edge);\n y = Math.max(\n Math.min(y, vh - ph - edge),\n edge,\n ); /* main-axis clamp: keep the leading edge on-screen (max last - may cover the trigger) */\n } else {\n x = s === 'left' ? r.left - pw - gap : r.right + gap;\n y =\n align === 'start' ? r.top : align === 'end' ? r.bottom - ph : r.top + (r.height - ph) / 2;\n y = Math.min(Math.max(y, edge), vh - ph - edge);\n x = Math.max(Math.min(x, vw - pw - edge), edge);\n }\n p.style.left = Math.round(x) + 'px';\n p.style.top = Math.round(y) + 'px';\n p.setAttribute('data-side', s);\n p.setAttribute('data-align', align);\n if (arrow) {\n if (vertical)\n p.style.setProperty(\n '--overlay-arrow-x',\n Math.round(Math.min(Math.max(r.left + r.width / 2 - x, 12), pw - 12)) + 'px',\n );\n else\n p.style.setProperty(\n '--overlay-arrow-y',\n Math.round(Math.min(Math.max(r.top + r.height / 2 - y, 12), ph - 12)) + 'px',\n );\n }\n };\n place();\n window.addEventListener('scroll', place, true);\n window.addEventListener('resize', place);\n const ro = new ResizeObserver(place);\n ro.observe(panelRef.current);\n return () => {\n window.removeEventListener('scroll', place, true);\n window.removeEventListener('resize', place);\n ro.disconnect();\n };\n }, [side, align, arrow]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n\n/* Per-instance <body> host (escapes ancestor transforms; skipped by inert); persists across open/close so AnimatePresence can play exits. */\nfunction OverlayPortal({ children }: { children: React.ReactNode }) {\n const hostRef = ovUseRef<HTMLDivElement | null>(null);\n // SSR guard: reached during server render; hooks below stay unconditional.\n if (typeof document !== 'undefined' && !hostRef.current) {\n hostRef.current = document.createElement('div');\n hostRef.current.setAttribute('data-overlay-root', '');\n }\n ovUseLayoutEffect(() => {\n const el = hostRef.current;\n if (!el) return;\n document.body.appendChild(el);\n return () => el.remove();\n }, []);\n if (!hostRef.current) return null;\n return createPortal(children, hostRef.current);\n}\n\n/* Scrim (real motion.div): dialogs fade via variants, sheets via a travel-derived MotionValue; a press must start AND end on it to dismiss. */\nconst ovScrimVariants = {\n closed: { opacity: 0, transition: { duration: ovSM.dur.base, ease: ovSM.ease.standard } },\n open: { opacity: 1, transition: { duration: ovSM.dur.slow, ease: ovSM.ease.entrance } },\n};\nfunction OverlayScrim({\n dismissible,\n onPress,\n opacity = null,\n}: {\n dismissible: boolean;\n onPress: () => void;\n opacity?: any;\n}) {\n const down = ovUseRef(false);\n return (\n <ovMotion.div\n className=\"overlay-scrim\"\n aria-hidden=\"true\"\n {...(opacity ? { style: { opacity } } : { variants: ovScrimVariants })}\n onPointerDown={(e) => {\n down.current = e.target === e.currentTarget;\n }}\n onClick={(e) => {\n if (dismissible && down.current && e.target === e.currentTarget) onPress();\n }}\n ></ovMotion.div>\n );\n}\n\n/* Render the panel: a motion.div wrapper, or with asChild the child's own tag (host element required - component children can't take a ref here). */\nfunction ovPanelElement({\n asChild,\n children,\n prepend = null,\n nodeRef,\n className,\n motionProps,\n}: {\n asChild: boolean;\n children: React.ReactNode;\n prepend?: React.ReactNode;\n nodeRef: React.RefObject<HTMLElement>;\n className: string;\n motionProps: Record<string, any>;\n}): React.ReactElement {\n if (asChild) {\n const child = React.Children.only(children) as React.ReactElement<any>;\n if (typeof child.type === 'string') {\n const Tag = (ovMotion as any)[child.type];\n const composedRef = (node: HTMLElement | null) => {\n nodeRef.current = node;\n const r = (child as any).ref;\n if (typeof r === 'function') r(node);\n else if (r) r.current = node;\n };\n return (\n <Tag\n {...child.props}\n {...motionProps}\n ref={composedRef}\n className={child.props.className ? className + ' ' + child.props.className : className}\n style={{ ...motionProps.style, ...child.props.style }}\n >\n {prepend}\n {child.props.children}\n </Tag>\n );\n }\n console.warn('[Overlay] asChild requires a DOM-element child - falling back to a wrapper');\n }\n return (\n <ovMotion.div\n {...motionProps}\n ref={nodeRef as React.RefObject<HTMLDivElement>}\n className={className}\n >\n {prepend}\n {children}\n </ovMotion.div>\n );\n}\n\n/* Shared modal shell (dialog + sheet): layer > scrim + slot; sets no role/label (the consumer's panel owns semantics); modality hooks live here so they hold until exit. */\nfunction ModalShell({\n layerClass,\n slotClass,\n slotVariants,\n panelId,\n dismissible,\n requestClose,\n asChild = false,\n slotRef: externalSlotRef = null,\n slotProps = {},\n scrimOpacity = null,\n children,\n}: {\n layerClass: string;\n slotClass: string;\n slotVariants: any;\n panelId: string;\n dismissible: boolean;\n requestClose: () => void;\n asChild?: boolean;\n slotRef?: React.RefObject<HTMLElement> | null;\n slotProps?: Record<string, any>;\n scrimOpacity?: any;\n children: React.ReactNode;\n}) {\n const layerRef = ovUseRef<HTMLDivElement>(null);\n const internalSlotRef = ovUseRef<HTMLElement>(null);\n const slotRef = externalSlotRef || internalSlotRef;\n const entry = useOverlayEntry({ nodeRef: layerRef, dismissible, requestClose });\n useScrollLock();\n useInertOutside();\n useReturnFocus(layerRef);\n useFocusTrap({ panelRef: slotRef, entry });\n return (\n <ovMotion.div\n ref={layerRef}\n className={'overlay-layer ' + layerClass}\n initial=\"closed\"\n animate=\"open\"\n exit=\"closed\"\n >\n <OverlayScrim dismissible={dismissible} onPress={requestClose} opacity={scrimOpacity} />\n {ovPanelElement({\n asChild,\n children,\n nodeRef: slotRef,\n className: 'overlay-slot ' + slotClass,\n motionProps: { id: panelId, tabIndex: -1, variants: slotVariants, ...slotProps },\n })}\n </ovMotion.div>\n );\n}\n\nexport {\n ovMotion,\n OvAnimatePresence,\n ovSM,\n useControllable,\n ovResolveChildren,\n ovCloneTrigger,\n useOverlayEntry,\n useOutsidePress,\n useReturnFocus,\n useAnchorPosition,\n OverlayPortal,\n OverlayScrim,\n ovPanelElement,\n ModalShell,\n};\nexport type { OverlayEntry };\n","'use client';\n\n/* sheet-drag - drag-to-dismiss for Overlay's sheet mode (dismiss - scrim - rubber-band - scroll handoff). */\nimport * as React from 'react';\nimport { useMotionValue, useTransform, useDragControls, animate, type PanInfo } from 'motion/react';\nimport { UIMotion } from '../../tokens/motion-tokens';\n\nconst sdSM = UIMotion;\nconst { useEffect: sdUseEffect, useRef: sdUseRef } = React;\n\nconst DISMISS_RATIO = 0.4;\nconst DISMISS_VELOCITY = 500;\nconst INTENT_PX = 4;\nconst STRETCH_MAX = 0.06;\n\n/* nearest scrollable ancestor of `node`, stopping at the slot */\nfunction findScrollable(node: EventTarget | null, stop: HTMLElement | null): HTMLElement | null {\n let el = node instanceof Element ? node : null;\n while (el && el !== stop) {\n const s = getComputedStyle(el);\n if (\n /(auto|scroll)/.test(s.overflowY + s.overflowX) &&\n (el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth)\n )\n return el as HTMLElement;\n el = el.parentElement;\n }\n return null;\n}\n\nfunction useSheetDrag({\n side,\n slotRef,\n enabled,\n requestClose,\n}: {\n side: 'right' | 'bottom';\n slotRef: React.RefObject<HTMLElement>;\n enabled: boolean;\n requestClose: () => void;\n}) {\n const axis = side === 'bottom' ? 'y' : 'x';\n /* matches the `closed` variant so the scrim starts transparent */\n const travel = useMotionValue<string | number>('100%');\n const stretch = useMotionValue(1);\n const controls = useDragControls();\n const savedUserSelect = sdUseRef<string | null>(null);\n\n /* suspend selection only while dragging; restore also covers unmount mid-drag */\n function suspendSelection() {\n const sel = window.getSelection();\n if (sel) sel.removeAllRanges();\n savedUserSelect.current = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n }\n function restoreSelection() {\n if (savedUserSelect.current === null) return;\n document.body.style.userSelect = savedUserSelect.current;\n savedUserSelect.current = null;\n }\n sdUseEffect(() => restoreSelection, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const progress = useTransform(travel, (v) => {\n if (typeof v === 'string') return Math.min(Math.max(parseFloat(v) / 100 || 0, 0), 1);\n const el = slotRef.current;\n const size = el ? (axis === 'y' ? el.offsetHeight : el.offsetWidth) : Infinity;\n return Math.min(Math.max(v / size, 0), 1);\n });\n const scrimOpacity = useTransform(progress, (p) => 1 - p);\n\n /* pointer intent: watch the first few px, then hand off to drag or to scroll/selection */\n function onPointerDown(e: React.PointerEvent) {\n if (e.button !== 0) return;\n const startX = e.clientX,\n startY = e.clientY;\n const scrollable = findScrollable(e.target, slotRef.current);\n const onMove = (ev: PointerEvent) => {\n const dx = ev.clientX - startX,\n dy = ev.clientY - startY;\n if (Math.max(Math.abs(dx), Math.abs(dy)) < INTENT_PX) return;\n cleanup();\n const along = axis === 'y' ? dy : dx;\n const cross = axis === 'y' ? dx : dy;\n if (Math.abs(along) <= Math.abs(cross)) return;\n if (scrollable) {\n if (along < 0) return;\n if (axis === 'y' ? scrollable.scrollTop > 0 : scrollable.scrollLeft > 0) return;\n }\n suspendSelection();\n /* framer may not fire onDragEnd (release exactly at threshold), so restore here too - idempotent with the onDragEnd restore */\n window.addEventListener('pointerup', restoreSelection, { once: true });\n window.addEventListener('pointercancel', restoreSelection, { once: true });\n controls.start(ev);\n };\n const cleanup = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', cleanup);\n window.removeEventListener('pointercancel', cleanup);\n };\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', cleanup);\n window.addEventListener('pointercancel', cleanup);\n }\n\n /* overdrag away from the edge - damped, capped stretch (info.offset is raw; travel is clamped) */\n function onDrag(_ev: PointerEvent | MouseEvent | TouchEvent, info: PanInfo) {\n const el = slotRef.current;\n if (!el) return;\n const size = axis === 'y' ? el.offsetHeight : el.offsetWidth;\n const o = info.offset[axis];\n stretch.set(o < 0 ? 1 + Math.min(-o / size, 1) * STRETCH_MAX : 1);\n }\n\n function onDragEnd(_ev: PointerEvent | MouseEvent | TouchEvent, info: PanInfo) {\n restoreSelection();\n animate(stretch, 1, sdSM.t.settle);\n const el = slotRef.current;\n if (!el) return;\n const size = axis === 'y' ? el.offsetHeight : el.offsetWidth;\n if (info.offset[axis] > size * DISMISS_RATIO || info.velocity[axis] > DISMISS_VELOCITY)\n requestClose();\n }\n\n const stretchStyle =\n axis === 'y' ? { scaleY: stretch, originY: 1 } : { scaleX: stretch, originX: 1 };\n\n const slotProps = enabled\n ? {\n drag: axis,\n dragControls: controls,\n dragListener: false,\n dragMomentum: false,\n dragConstraints: { top: 0, bottom: 0, left: 0, right: 0 },\n /* away from the edge: hard clamp (stretch covers it); toward: free */\n dragElastic: axis === 'y' ? { top: 0, bottom: 1 } : { left: 0, right: 1 },\n onPointerDown,\n onDrag,\n onDragEnd,\n style: { [axis]: travel, ...stretchStyle },\n }\n : { style: { [axis]: travel } }; // scrim coupling still applies\n\n return { slotProps, scrimOpacity };\n}\n\nexport { useSheetDrag };\n","'use client';\n\n/* Overlay - one headless component, three modes: popover - dialog - sheet. */\nimport * as React from 'react';\nimport {\n OvAnimatePresence as AnimatePresence,\n ovSM as SM,\n useControllable,\n ovResolveChildren,\n ovCloneTrigger,\n useOverlayEntry,\n useOutsidePress,\n useReturnFocus,\n useAnchorPosition,\n OverlayPortal,\n ModalShell,\n ovPanelElement,\n} from './overlay-core';\nimport { useSheetDrag } from './sheet-drag';\n\nconst { useRef, useId } = React;\n\nexport interface OverlayProps {\n /** Skin + modality. Default 'popover'. */\n mode?: 'popover' | 'dialog' | 'sheet';\n\n /** Controlled open state. Omit to stay uncontrolled. */\n open?: boolean;\n /** Initial state when uncontrolled. Default false. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n /** Cloned to toggle (popover) / open (modal); required as the popover anchor. */\n trigger?: React.ReactElement | null;\n\n /** Popover side (default 'bottom', flips) / sheet edge (default 'right'). */\n side?: 'top' | 'bottom' | 'left' | 'right';\n /** Popover only - cross-axis alignment. Default 'start'. */\n align?: 'start' | 'center' | 'end';\n /** Popover only - caret tracking the trigger center. */\n arrow?: boolean;\n\n /** Light/scrim + Esc dismissal (sheet adds drag-to-edge). Default true. */\n dismissible?: boolean;\n\n /** Render no wrapper - your DOM-element child becomes the panel. Default false. */\n asChild?: boolean;\n\n id?: string;\n /** The ENTIRE surface - paint AND semantics. Function form receives { close }. */\n children: React.ReactNode | ((api: { close: () => void }) => React.ReactNode);\n}\n\n/* scales open from the anchored edge (transform-origin set in overlay.css) */\nconst popoverVariants = {\n closed: { opacity: 0, scale: 0.96, transition: SM.t.exit },\n open: { opacity: 1, scale: 1, transition: SM.t.enter },\n};\n\nconst dialogVariants = {\n closed: {\n opacity: 0,\n y: 6,\n scale: 0.98,\n transition: { duration: SM.dur.base, ease: SM.ease.standard },\n },\n open: {\n opacity: 1,\n y: 0,\n scale: 1,\n transition: { duration: SM.dur.slow, ease: SM.ease.entrance },\n },\n};\n\n/* entrance curve, not a spring - overshoot would show a gap behind the panel */\nfunction sheetVariants(side: 'right' | 'bottom') {\n const axis = side === 'bottom' ? 'y' : 'x';\n return {\n closed: { [axis]: '100%', transition: { duration: SM.dur.base, ease: SM.ease.exit } },\n open: { [axis]: 0, transition: { duration: SM.dur.slow, ease: SM.ease.entrance } },\n };\n}\n\ninterface PanelShared {\n panelId: string;\n dismissible: boolean;\n asChild: boolean;\n requestClose: () => void;\n}\n\n/* Popover panel - lifecycle hooks live here so dismiss/placement hold until exit ends. */\nfunction PopoverPanel({\n panelId,\n side,\n align,\n arrow,\n dismissible,\n asChild,\n requestClose,\n triggerRef,\n children,\n}: PanelShared & {\n side: 'top' | 'bottom' | 'left' | 'right';\n align: 'start' | 'center' | 'end';\n arrow: boolean;\n triggerRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n}) {\n const panelRef = useRef<HTMLElement>(null);\n const entry = useOverlayEntry({ nodeRef: panelRef, dismissible, requestClose });\n useReturnFocus(panelRef);\n useAnchorPosition({ side, align, arrow, triggerRef, panelRef });\n useOutsidePress({\n entry,\n refs: [triggerRef, panelRef],\n enabled: dismissible,\n onPress: requestClose,\n });\n return ovPanelElement({\n asChild,\n children,\n prepend: arrow ? (\n <span key=\"arrow\" className=\"overlay-popover__arrow\" aria-hidden=\"true\"></span>\n ) : null,\n nodeRef: panelRef,\n className: 'overlay-popover',\n motionProps: {\n id: panelId,\n variants: popoverVariants,\n initial: 'closed',\n animate: 'open',\n exit: 'closed',\n },\n });\n}\n\n/* Sheet shell - owns the drag hook; slotRef must exist before the shell renders. */\nfunction SheetShell({\n side,\n panelId,\n dismissible,\n asChild,\n requestClose,\n children,\n}: PanelShared & {\n side: 'right' | 'bottom';\n children: React.ReactNode;\n}) {\n const slotRef = useRef<HTMLElement>(null);\n const { slotProps, scrimOpacity } = useSheetDrag({\n side,\n slotRef,\n enabled: dismissible,\n requestClose,\n });\n return (\n <ModalShell\n layerClass={'overlay-layer--sheet-' + side}\n slotClass={'overlay-slot--sheet-' + side}\n slotVariants={sheetVariants(side)}\n panelId={panelId}\n dismissible={dismissible}\n requestClose={requestClose}\n asChild={asChild}\n slotRef={slotRef}\n slotProps={slotProps}\n scrimOpacity={scrimOpacity}\n >\n {children}\n </ModalShell>\n );\n}\n\nexport function Overlay({\n mode = 'popover',\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n trigger = null,\n side,\n align = 'start',\n arrow = false,\n dismissible = true,\n asChild = false,\n id,\n children,\n}: OverlayProps) {\n const [open, setOpen] = useControllable(controlledOpen, defaultOpen, onOpenChange);\n const triggerRef = useRef<HTMLElement>(null);\n const panelId = id || 'overlay-' + useId();\n const close = () => setOpen(false);\n const modal = mode !== 'popover';\n const s = side || (mode === 'sheet' ? 'right' : 'bottom');\n const content = ovResolveChildren(children, close);\n const shared: PanelShared = { panelId, dismissible, asChild, requestClose: close };\n\n return (\n <React.Fragment>\n {ovCloneTrigger(trigger, {\n open,\n onPress: () => setOpen(modal ? true : !open),\n panelId,\n haspopup: modal ? 'dialog' : 'true',\n triggerRef,\n })}\n <OverlayPortal>\n <AnimatePresence>\n {open &&\n (mode === 'popover' ? (\n <PopoverPanel\n key=\"panel\"\n {...shared}\n side={s}\n align={align}\n arrow={arrow}\n triggerRef={triggerRef}\n >\n {content}\n </PopoverPanel>\n ) : mode === 'sheet' ? (\n <SheetShell key=\"shell\" {...shared} side={s as 'right' | 'bottom'}>\n {content}\n </SheetShell>\n ) : (\n <ModalShell\n key=\"shell\"\n {...shared}\n layerClass=\"overlay-layer--dialog\"\n slotClass=\"overlay-slot--dialog\"\n slotVariants={dialogVariants}\n >\n {content}\n </ModalShell>\n ))}\n </AnimatePresence>\n </OverlayPortal>\n </React.Fragment>\n );\n}\n"]}
@@ -0,0 +1,45 @@
1
+ 'use client';import { Icon } from './chunk-KBWNUUWM.js';
2
+ import * as React from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var { useState, useCallback } = React;
6
+ function useControllable(value, defaultValue, onChange) {
7
+ const controlled = value !== void 0;
8
+ const [inner, setInner] = useState(defaultValue);
9
+ const val = controlled ? value : inner;
10
+ const commit = useCallback(
11
+ (next) => {
12
+ if (!controlled) setInner(next);
13
+ if (onChange) onChange(next);
14
+ },
15
+ [controlled, onChange]
16
+ );
17
+ return [val, commit];
18
+ }
19
+ function FieldShell({
20
+ variant,
21
+ label,
22
+ required,
23
+ invalid,
24
+ message,
25
+ icon,
26
+ className,
27
+ children
28
+ }) {
29
+ const cls = ["fld", variant, "fld--has-lead", invalid ? "is-error" : "", className || ""].filter(Boolean).join(" ");
30
+ return /* @__PURE__ */ jsxs("div", { className: cls, children: [
31
+ label ? /* @__PURE__ */ jsxs("span", { className: "fld__label", children: [
32
+ label,
33
+ required ? /* @__PURE__ */ jsx("span", { className: "fld__req", "aria-hidden": "true", children: "*" }) : null
34
+ ] }) : null,
35
+ /* @__PURE__ */ jsxs("div", { className: "fld__control", children: [
36
+ children,
37
+ /* @__PURE__ */ jsx("span", { className: "fld__icon fld__icon--lead", "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon, { name: icon, size: "md" }) })
38
+ ] }),
39
+ message ? /* @__PURE__ */ jsx("div", { className: "fld__msg", children: /* @__PURE__ */ jsx("span", { children: message }) }) : null
40
+ ] });
41
+ }
42
+
43
+ export { FieldShell, useControllable };
44
+ //# sourceMappingURL=chunk-QNC6O3PG.js.map
45
+ //# sourceMappingURL=chunk-QNC6O3PG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/date-picker/field-shell.tsx"],"names":[],"mappings":";;;;AAQA,IAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,KAAA;AAE3B,SAAS,eAAA,CACd,KAAA,EACA,YAAA,EACA,QAAA,EACwB;AACxB,EAAA,MAAM,aAAa,KAAA,KAAU,MAAA;AAC7B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAY,YAAY,CAAA;AAClD,EAAA,MAAM,GAAA,GAAM,aAAc,KAAA,GAAc,KAAA;AACxC,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IACb,CAAC,IAAA,KAAY;AACX,MAAA,IAAI,CAAC,UAAA,EAAY,QAAA,CAAS,IAAI,CAAA;AAC9B,MAAA,IAAI,QAAA,WAAmB,IAAI,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,CAAC,YAAY,QAAQ;AAAA,GACvB;AACA,EAAA,OAAO,CAAC,KAAK,MAAM,CAAA;AACrB;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,EAAO,OAAA,EAAS,iBAAiB,OAAA,GAAU,UAAA,GAAa,EAAA,EAAI,SAAA,IAAa,EAAE,CAAA,CACrF,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAA,EACb,QAAA,EAAA;AAAA,IAAA,KAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MACA,QAAA,uBACE,MAAA,EAAA,EAAK,SAAA,EAAU,YAAW,aAAA,EAAY,MAAA,EAAO,eAE9C,CAAA,GACE;AAAA,KAAA,EACN,CAAA,GACE,IAAA;AAAA,oBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,QAAA;AAAA,sBACD,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA4B,aAAA,EAAY,MAAA,EACtD,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK,IAAA,EAAK,CAAA,EAC9B;AAAA,KAAA,EACF,CAAA;AAAA,IACC,OAAA,uBACE,KAAA,EAAA,EAAI,SAAA,EAAU,YACb,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,OAAA,EAAQ,CAAA,EACjB,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ","file":"chunk-QNC6O3PG.js","sourcesContent":["'use client';\n\n/* FieldShell + useControllable - the variant-blind .fld chrome and a controlled/uncontrolled state hook. */\n\nimport * as React from 'react';\nimport type { ReactNode } from 'react';\nimport { Icon, type IconName } from '../icon/Icon';\n\nconst { useState, useCallback } = React;\n\nexport function useControllable<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const controlled = value !== undefined;\n const [inner, setInner] = useState<T>(defaultValue);\n const val = controlled ? (value as T) : inner;\n const commit = useCallback(\n (next: T) => {\n if (!controlled) setInner(next);\n if (onChange) onChange(next);\n },\n [controlled, onChange],\n );\n return [val, commit];\n}\n\nexport interface FieldShellProps {\n variant: string;\n label?: string;\n required?: boolean;\n invalid?: boolean;\n message?: ReactNode;\n icon: IconName;\n className?: string;\n children?: ReactNode;\n}\n\nexport function FieldShell({\n variant,\n label,\n required,\n invalid,\n message,\n icon,\n className,\n children,\n}: FieldShellProps) {\n const cls = ['fld', variant, 'fld--has-lead', invalid ? 'is-error' : '', className || '']\n .filter(Boolean)\n .join(' ');\n return (\n <div className={cls}>\n {label ? (\n <span className=\"fld__label\">\n {label}\n {required ? (\n <span className=\"fld__req\" aria-hidden=\"true\">\n *\n </span>\n ) : null}\n </span>\n ) : null}\n <div className=\"fld__control\">\n {children}\n <span className=\"fld__icon fld__icon--lead\" aria-hidden=\"true\">\n <Icon name={icon} size=\"md\" />\n </span>\n </div>\n {message ? (\n <div className=\"fld__msg\">\n <span>{message}</span>\n </div>\n ) : null}\n </div>\n );\n}\n"]}
@@ -0,0 +1,82 @@
1
+ 'use client';import { IconSlot } from './chunk-VVPGEAC6.js';
2
+ import { Icon } from './chunk-KBWNUUWM.js';
3
+ import { Collapse } from './chunk-YSHJHSJM.js';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ function TextField({
7
+ id,
8
+ label,
9
+ required,
10
+ optional,
11
+ placeholder,
12
+ helper,
13
+ error,
14
+ warning,
15
+ success,
16
+ leadingIcon,
17
+ clearable,
18
+ size,
19
+ value,
20
+ onChange,
21
+ disabled,
22
+ readOnly,
23
+ type = "text",
24
+ className = "",
25
+ ...rest
26
+ }) {
27
+ const state = error ? "is-error" : warning ? "is-warning" : success ? "is-success" : "";
28
+ const msg = error || warning || success || helper;
29
+ const msgIcon = error ? "warning-circle" : warning ? "warning" : success ? "check-circle" : null;
30
+ const showClear = clearable && value;
31
+ const cls = [
32
+ "fld",
33
+ size === "sm" ? "fld--sm" : size === "lg" ? "fld--lg" : "",
34
+ leadingIcon ? "fld--has-lead" : "",
35
+ showClear ? "fld--has-action" : "",
36
+ state,
37
+ className
38
+ ].filter(Boolean).join(" ");
39
+ return /* @__PURE__ */ jsxs("div", { className: cls, children: [
40
+ label && /* @__PURE__ */ jsxs("label", { className: "fld__label", htmlFor: id, children: [
41
+ label,
42
+ required && /* @__PURE__ */ jsx("span", { className: "fld__req", "aria-hidden": "true", children: "*" }),
43
+ optional && /* @__PURE__ */ jsx("span", { className: "fld__optional", children: "(optional)" })
44
+ ] }),
45
+ /* @__PURE__ */ jsxs("div", { className: "fld__control", children: [
46
+ leadingIcon && /* @__PURE__ */ jsx("span", { className: "fld__icon fld__icon--lead", children: /* @__PURE__ */ jsx(IconSlot, { children: leadingIcon }) }),
47
+ /* @__PURE__ */ jsx(
48
+ "input",
49
+ {
50
+ id,
51
+ className: "fld__input",
52
+ type,
53
+ value,
54
+ onChange,
55
+ placeholder,
56
+ disabled,
57
+ readOnly,
58
+ "aria-invalid": error ? true : void 0,
59
+ ...rest
60
+ }
61
+ ),
62
+ showClear && /* @__PURE__ */ jsx(
63
+ "button",
64
+ {
65
+ type: "button",
66
+ className: "fld__action",
67
+ "aria-label": "Clear",
68
+ onClick: () => onChange && onChange({ target: { value: "" } }),
69
+ children: /* @__PURE__ */ jsx(Icon, { name: "close" })
70
+ }
71
+ )
72
+ ] }),
73
+ /* @__PURE__ */ jsx(Collapse, { open: !!msg, className: "fld__msg-wrap", children: /* @__PURE__ */ jsxs("div", { className: "fld__msg", children: [
74
+ msgIcon && /* @__PURE__ */ jsx(Icon, { name: msgIcon, size: "sm", weight: "fill" }),
75
+ msg
76
+ ] }) })
77
+ ] });
78
+ }
79
+
80
+ export { TextField };
81
+ //# sourceMappingURL=chunk-QUHOXWBK.js.map
82
+ //# sourceMappingURL=chunk-QUHOXWBK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/input/TextField.tsx"],"names":[],"mappings":"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","file":"chunk-QUHOXWBK.js","sourcesContent":["'use client';\n\n// TextField.tsx - text input: label - control - message, leading icon, clear action, sizes, validation states.\n\nimport type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react';\nimport { Icon } from '../icon/Icon';\nimport { IconSlot } from '../icon/IconSlot';\nimport { Collapse } from '../motion/Collapse';\n\nexport interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Field id, ties the label to the input. */\n id?: string;\n /** Label text (sentence case). */\n label?: ReactNode;\n /** Show a danger `*` after the label. */\n required?: boolean;\n /** Show a muted \"(optional)\" after the label. */\n optional?: boolean;\n /** Neutral helper text - shown when there's no validation message. */\n helper?: ReactNode;\n /** Error message - sets the error state (red border/ring + icon). Wins over warning/success/helper. */\n error?: ReactNode;\n /** Warning message - amber state. */\n warning?: ReactNode;\n /** Success message - green state. */\n success?: ReactNode;\n /** Leading icon - your own icon node (sized to the control). Decorative. */\n leadingIcon?: ReactNode;\n /** Show a clear button when there's a value. */\n clearable?: boolean;\n /** Control height: sm 28 - md 36 (default) - lg 40. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport function TextField({\n id,\n label,\n required,\n optional,\n placeholder,\n helper,\n error,\n warning,\n success,\n leadingIcon,\n clearable,\n size,\n value,\n onChange,\n disabled,\n readOnly,\n type = 'text',\n className = '',\n ...rest\n}: TextFieldProps) {\n const state = error ? 'is-error' : warning ? 'is-warning' : success ? 'is-success' : '';\n const msg = error || warning || success || helper;\n const msgIcon = error ? 'warning-circle' : warning ? 'warning' : success ? 'check-circle' : null;\n const showClear = clearable && value;\n const cls = [\n 'fld',\n size === 'sm' ? 'fld--sm' : size === 'lg' ? 'fld--lg' : '',\n leadingIcon ? 'fld--has-lead' : '',\n showClear ? 'fld--has-action' : '',\n state,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={cls}>\n {label && (\n <label className=\"fld__label\" htmlFor={id}>\n {label}\n {required && (\n <span className=\"fld__req\" aria-hidden=\"true\">\n *\n </span>\n )}\n {optional && <span className=\"fld__optional\">(optional)</span>}\n </label>\n )}\n <div className=\"fld__control\">\n {leadingIcon && (\n <span className=\"fld__icon fld__icon--lead\">\n <IconSlot>{leadingIcon}</IconSlot>\n </span>\n )}\n <input\n id={id}\n className=\"fld__input\"\n type={type}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={error ? true : undefined}\n {...rest}\n />\n {showClear && (\n <button\n type=\"button\"\n className=\"fld__action\"\n aria-label=\"Clear\"\n onClick={() =>\n onChange && onChange({ target: { value: '' } } as ChangeEvent<HTMLInputElement>)\n }\n >\n <Icon name=\"close\" />\n </button>\n )}\n </div>\n <Collapse open={!!msg} className=\"fld__msg-wrap\">\n <div className=\"fld__msg\">\n {msgIcon && <Icon name={msgIcon} size=\"sm\" weight=\"fill\" />}\n {msg}\n </div>\n </Collapse>\n </div>\n );\n}\n"]}
@@ -0,0 +1,106 @@
1
+ 'use client';import { UIMotion } from './chunk-37O2ZXD6.js';
2
+ import * as React from 'react';
3
+ import { motion } from 'motion/react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var SM = UIMotion;
7
+ var { useRef, useState, useEffect, useCallback } = React;
8
+ function useGlide(containerRef) {
9
+ const [rect, setRect] = useState(null);
10
+ const [active, setActive] = useState(false);
11
+ const enter = useCallback(
12
+ (el) => {
13
+ const c = containerRef.current;
14
+ if (!c || !el) return;
15
+ const cb = c.getBoundingClientRect();
16
+ const tb = el.getBoundingClientRect();
17
+ setRect({ x: tb.left - cb.left, y: tb.top - cb.top, width: tb.width, height: tb.height });
18
+ setActive(true);
19
+ },
20
+ [containerRef]
21
+ );
22
+ const leave = useCallback(() => setActive(false), []);
23
+ return { rect, active, enter, leave };
24
+ }
25
+ function GlidePill({ className, rect, active }) {
26
+ const wasActive = useRef(false);
27
+ useEffect(() => {
28
+ wasActive.current = active;
29
+ });
30
+ const travel = wasActive.current && active ? SM.t.settle : { duration: 0 };
31
+ return /* @__PURE__ */ jsx(
32
+ motion.span,
33
+ {
34
+ className,
35
+ "aria-hidden": "true",
36
+ initial: false,
37
+ animate: {
38
+ x: rect ? rect.x : 0,
39
+ y: rect ? rect.y : 0,
40
+ width: rect ? rect.width : 0,
41
+ height: rect ? rect.height : 0,
42
+ opacity: active && rect ? 1 : 0
43
+ },
44
+ transition: {
45
+ x: travel,
46
+ y: travel,
47
+ width: travel,
48
+ height: travel,
49
+ opacity: { duration: SM.dur.fast, ease: active ? SM.ease.standard : SM.ease.exit }
50
+ }
51
+ }
52
+ );
53
+ }
54
+
55
+ // src/components/date-picker/date-utils.ts
56
+ var MONTHS = [
57
+ "January",
58
+ "February",
59
+ "March",
60
+ "April",
61
+ "May",
62
+ "June",
63
+ "July",
64
+ "August",
65
+ "September",
66
+ "October",
67
+ "November",
68
+ "December"
69
+ ];
70
+ var DOW = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"];
71
+ var pad = (n) => String(n).padStart(2, "0");
72
+ var key = (d) => d.getFullYear() + "-" + pad(d.getMonth() + 1) + "-" + pad(d.getDate());
73
+ function parse(k) {
74
+ const p = k.split("-").map(Number);
75
+ return new Date(p[0], p[1] - 1, p[2]);
76
+ }
77
+ var today = () => key(/* @__PURE__ */ new Date());
78
+ var add = (k, days) => {
79
+ const d = parse(k);
80
+ d.setDate(d.getDate() + days);
81
+ return key(d);
82
+ };
83
+ var col = (d) => (d.getDay() + 6) % 7;
84
+ function grid(y, m) {
85
+ const lead = (new Date(y, m, 1).getDay() + 6) % 7;
86
+ const days = [];
87
+ for (let i = 0; i < 42; i++) days.push(new Date(y, m, 1 - lead + i));
88
+ return days;
89
+ }
90
+ function tzLabel(tz, dateKey) {
91
+ try {
92
+ const at = dateKey ? parse(dateKey) : /* @__PURE__ */ new Date();
93
+ const parts = new Intl.DateTimeFormat("en-US", {
94
+ timeZone: tz,
95
+ timeZoneName: "shortOffset"
96
+ }).formatToParts(at);
97
+ const name = parts.find((p) => p.type === "timeZoneName");
98
+ return tz.replace(/_/g, " ") + (name ? " - " + name.value : "");
99
+ } catch (_e) {
100
+ return tz;
101
+ }
102
+ }
103
+
104
+ export { DOW, GlidePill, MONTHS, add, col, grid, key, pad, parse, today, tzLabel, useGlide };
105
+ //# sourceMappingURL=chunk-UIQGSTBJ.js.map
106
+ //# sourceMappingURL=chunk-UIQGSTBJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/date-picker/glide-pill.tsx","../src/components/date-picker/date-utils.ts"],"names":[],"mappings":"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","file":"chunk-UIQGSTBJ.js","sourcesContent":["'use client';\n\n/* GlidePill + useGlide - one persistent pill that springs between hovered cells, never a per-cell remount. */\n\nimport * as React from 'react';\nimport type { RefObject } from 'react';\nimport { motion } from 'motion/react';\nimport { UIMotion } from '../../tokens/motion-tokens';\n\nconst SM = UIMotion;\nconst { useRef, useState, useEffect, useCallback } = React;\n\nexport interface GlideRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface GlideApi {\n rect: GlideRect | null;\n active: boolean;\n enter: (el: HTMLElement | null) => void;\n leave: () => void;\n}\n\nexport function useGlide<T extends HTMLElement = HTMLElement>(\n containerRef: RefObject<T | null>,\n): GlideApi {\n const [rect, setRect] = useState<GlideRect | null>(null);\n const [active, setActive] = useState(false);\n const enter = useCallback(\n (el: HTMLElement | null) => {\n const c = containerRef.current;\n if (!c || !el) return;\n const cb = c.getBoundingClientRect();\n const tb = el.getBoundingClientRect();\n setRect({ x: tb.left - cb.left, y: tb.top - cb.top, width: tb.width, height: tb.height });\n setActive(true);\n },\n [containerRef],\n );\n const leave = useCallback(() => setActive(false), []);\n return { rect, active, enter, leave };\n}\n\nexport interface GlidePillProps {\n className?: string;\n rect: GlideRect | null;\n active: boolean;\n}\n\nexport function GlidePill({ className, rect, active }: GlidePillProps) {\n /* `wasActive` trails one render: the first appearance lands in place, later moves travel on the spring. */\n const wasActive = useRef(false);\n useEffect(() => {\n wasActive.current = active;\n });\n const travel = wasActive.current && active ? SM.t.settle : { duration: 0 };\n return (\n <motion.span\n className={className}\n aria-hidden=\"true\"\n initial={false}\n animate={{\n x: rect ? rect.x : 0,\n y: rect ? rect.y : 0,\n width: rect ? rect.width : 0,\n height: rect ? rect.height : 0,\n opacity: active && rect ? 1 : 0,\n }}\n transition={{\n x: travel,\n y: travel,\n width: travel,\n height: travel,\n opacity: { duration: SM.dur.fast, ease: active ? SM.ease.standard : SM.ease.exit },\n }}\n ></motion.span>\n );\n}\n","/* date-picker shared pure helpers - 'YYYY-MM-DD' civil-date math, month/weekday constants, tz-offset label. */\n\nexport const MONTHS: string[] = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\nexport const DOW: string[] = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nexport const pad = (n: number): string => String(n).padStart(2, '0');\nexport const key = (d: Date): string =>\n d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate());\nexport function parse(k: string): Date {\n const p = k.split('-').map(Number);\n return new Date(p[0], p[1] - 1, p[2]);\n}\nexport const today = (): string => key(new Date());\nexport const add = (k: string, days: number): string => {\n const d = parse(k);\n d.setDate(d.getDate() + days);\n return key(d);\n};\nexport const col = (d: Date): number => (d.getDay() + 6) % 7; // Monday-first column 0-6\n\n/* 42 cells, Monday-first, covering the month of (y, m) */\nexport function grid(y: number, m: number): Date[] {\n const lead = (new Date(y, m, 1).getDay() + 6) % 7;\n const days: Date[] = [];\n for (let i = 0; i < 42; i++) days.push(new Date(y, m, 1 - lead + i));\n return days;\n}\n\n/* 'Europe/Riga' - 'Europe/Riga - GMT+3'; dateKey gives the DST-correct offset for that date, else now. */\nexport function tzLabel(tz: string, dateKey?: string): string {\n try {\n const at = dateKey ? parse(dateKey) : new Date();\n const parts = new Intl.DateTimeFormat('en-US', {\n timeZone: tz,\n timeZoneName: 'shortOffset',\n }).formatToParts(at);\n const name = parts.find((p) => p.type === 'timeZoneName');\n return tz.replace(/_/g, ' ') + (name ? ' - ' + name.value : '');\n } catch (_e) {\n return tz;\n }\n}\n"]}
@@ -0,0 +1,193 @@
1
+ 'use client';import { useControllable, normalize, matches, useSelectMenu, SelectTrigger, SelectMenu, SearchField, LoadingRows, FilterRow, EmptyRow } from './chunk-G6OY35DI.js';
2
+ import { IconSlot } from './chunk-VVPGEAC6.js';
3
+ import * as React from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ function CheckboxTick({ checked }) {
7
+ return /* @__PURE__ */ jsxs("span", { className: "cbx", "aria-hidden": "true", children: [
8
+ /* @__PURE__ */ jsx("input", { type: "checkbox", className: "cbx__input", tabIndex: -1, checked, readOnly: true }),
9
+ /* @__PURE__ */ jsxs("span", { className: "cbx__box", children: [
10
+ /* @__PURE__ */ jsx("svg", { className: "cbx__mark", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ jsx("path", { className: "cbx__tick", d: "M3.5 8.5 L6.75 11.5 L12.5 4.75" }) }),
11
+ /* @__PURE__ */ jsx("span", { className: "cbx__dash" })
12
+ ] })
13
+ ] });
14
+ }
15
+ function MultiSelect({
16
+ options = [],
17
+ value: controlledValue,
18
+ defaultValue = [],
19
+ onChange,
20
+ placeholder = "Select options",
21
+ size = "default",
22
+ disabled = false,
23
+ invalid = false,
24
+ loading = false,
25
+ searchable = false,
26
+ searchPlaceholder = "Filter options",
27
+ leadingIcon = null,
28
+ id,
29
+ ariaLabel
30
+ }) {
31
+ const { useState, useRef, useEffect, useId } = React;
32
+ const [value, setValue] = useControllable(
33
+ controlledValue,
34
+ defaultValue,
35
+ onChange
36
+ );
37
+ const [open, setOpen] = useState(false);
38
+ const [query, setQuery] = useState("");
39
+ const triggerRef = useRef(null), listRef = useRef(null), searchRef = useRef(null);
40
+ const baseId = id || "mselect-" + useId();
41
+ const menuId = baseId + "-menu";
42
+ const listId = baseId + "-list";
43
+ const { groups, flat } = normalize(options);
44
+ const values = Array.isArray(value) ? value : [];
45
+ const isSelected = (v) => values.indexOf(v) !== -1;
46
+ const selectedOptions = flat.filter((o) => isSelected(o.value));
47
+ const navItems = [];
48
+ groups.forEach(
49
+ (g) => g.options.forEach((o) => {
50
+ if (matches(o, query)) navItems.push(o);
51
+ })
52
+ );
53
+ const show = () => {
54
+ if (!disabled && !loading) setOpen(true);
55
+ };
56
+ const hide = () => setOpen(false);
57
+ const returnFocus = () => triggerRef.current && triggerRef.current.focus();
58
+ function commit(opt) {
59
+ if (!opt || opt.disabled) return;
60
+ const next = isSelected(opt.value) ? values.filter((v) => v !== opt.value) : [...values, opt.value];
61
+ setValue(next, opt);
62
+ }
63
+ useEffect(() => {
64
+ if (!open) setQuery("");
65
+ }, [open]);
66
+ const { activeIdx, setActiveIdx, onMenuKeyDown } = useSelectMenu({
67
+ open,
68
+ close: hide,
69
+ returnFocus,
70
+ triggerRef,
71
+ listRef,
72
+ searchRef,
73
+ menuId,
74
+ navItems,
75
+ isSelected,
76
+ commit,
77
+ searchable
78
+ });
79
+ const isPlaceholder = !loading && selectedOptions.length === 0;
80
+ const adId = open && activeIdx >= 0 ? baseId + "-opt-" + activeIdx : void 0;
81
+ let vIdx = -1;
82
+ return /* @__PURE__ */ jsxs(
83
+ "div",
84
+ {
85
+ className: "select",
86
+ "data-multiple": "true",
87
+ "data-size": size === "default" ? void 0 : size,
88
+ "data-open": open ? "true" : void 0,
89
+ "data-disabled": disabled ? "true" : void 0,
90
+ "data-invalid": invalid ? "true" : void 0,
91
+ "data-loading": loading ? "true" : void 0,
92
+ children: [
93
+ /* @__PURE__ */ jsx(
94
+ SelectTrigger,
95
+ {
96
+ triggerRef,
97
+ baseId,
98
+ open,
99
+ disabled,
100
+ invalid,
101
+ ariaLabel,
102
+ adId,
103
+ show,
104
+ hide,
105
+ leading: leadingIcon || selectedOptions.length === 1 && selectedOptions[0].icon || null,
106
+ text: loading ? "Loading..." : isPlaceholder ? placeholder : selectedOptions[0].label,
107
+ isPlaceholder,
108
+ count: selectedOptions.length - 1
109
+ }
110
+ ),
111
+ /* @__PURE__ */ jsxs(SelectMenu, { open, menuId, children: [
112
+ searchable && !loading && /* @__PURE__ */ jsx(
113
+ SearchField,
114
+ {
115
+ searchRef,
116
+ query,
117
+ onQuery: setQuery,
118
+ onKeyDown: onMenuKeyDown,
119
+ placeholder: searchPlaceholder,
120
+ listId,
121
+ adId
122
+ }
123
+ ),
124
+ /* @__PURE__ */ jsx(
125
+ "div",
126
+ {
127
+ className: "select__list",
128
+ ref: listRef,
129
+ id: listId,
130
+ role: "listbox",
131
+ "aria-multiselectable": "true",
132
+ tabIndex: -1,
133
+ "aria-label": ariaLabel,
134
+ onKeyDown: searchable ? void 0 : onMenuKeyDown,
135
+ children: loading ? /* @__PURE__ */ jsx(LoadingRows, {}) : /* @__PURE__ */ jsxs(React.Fragment, { children: [
136
+ groups.map((g, gi) => /* @__PURE__ */ jsxs(
137
+ "div",
138
+ {
139
+ className: "select__group",
140
+ role: "group",
141
+ "aria-label": g.label || void 0,
142
+ children: [
143
+ g.label && g.options.some((o) => matches(o, query)) && /* @__PURE__ */ jsx("div", { className: "select__group-label", children: g.label }),
144
+ g.options.map((opt) => {
145
+ const visible = matches(opt, query);
146
+ const i = visible ? (vIdx += 1, vIdx) : -1;
147
+ const isSel = isSelected(opt.value);
148
+ const row = /* @__PURE__ */ jsxs(
149
+ "div",
150
+ {
151
+ id: visible ? baseId + "-opt-" + i : void 0,
152
+ "data-idx": visible ? i : void 0,
153
+ className: "select__option",
154
+ role: "option",
155
+ "aria-selected": isSel,
156
+ "aria-hidden": !visible || void 0,
157
+ "aria-disabled": opt.disabled || void 0,
158
+ "data-selected": isSel ? "true" : void 0,
159
+ "data-active": visible && i === activeIdx ? "true" : void 0,
160
+ "data-disabled": opt.disabled ? "true" : void 0,
161
+ onMouseEnter: () => visible && !opt.disabled && setActiveIdx(i),
162
+ onMouseDown: (e) => e.preventDefault(),
163
+ onClick: () => visible && commit(opt),
164
+ children: [
165
+ opt.icon && /* @__PURE__ */ jsx("span", { className: "select__option-icon", children: /* @__PURE__ */ jsx(IconSlot, { size: "sm", children: opt.icon }) }),
166
+ /* @__PURE__ */ jsxs("span", { className: "select__option-text", children: [
167
+ /* @__PURE__ */ jsx("span", { className: "select__option-label", children: opt.label }),
168
+ opt.description && /* @__PURE__ */ jsx("span", { className: "select__option-desc", children: opt.description })
169
+ ] }),
170
+ /* @__PURE__ */ jsx("span", { className: "select__option-check", children: /* @__PURE__ */ jsx(CheckboxTick, { checked: isSel }) })
171
+ ]
172
+ },
173
+ opt.value
174
+ );
175
+ return searchable ? /* @__PURE__ */ jsx(FilterRow, { visible, children: row }, opt.value) : row;
176
+ })
177
+ ]
178
+ },
179
+ gi
180
+ )),
181
+ navItems.length === 0 && /* @__PURE__ */ jsx(EmptyRow, { query })
182
+ ] })
183
+ }
184
+ )
185
+ ] })
186
+ ]
187
+ }
188
+ );
189
+ }
190
+
191
+ export { MultiSelect };
192
+ //# sourceMappingURL=chunk-UJQKVP6V.js.map
193
+ //# sourceMappingURL=chunk-UJQKVP6V.js.map