@logicplanes/kaeso-ui 0.4.3 → 0.4.5

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 (490) hide show
  1. package/ai/component-guides.md +279 -98
  2. package/ai/component-registry.json +352 -236
  3. package/ai/component-registry.md +241 -219
  4. package/ai/icons.md +2 -2
  5. package/ai/tokens.md +18 -14
  6. package/dist/blocks/delete-resource.js +3 -3
  7. package/dist/blocks/delete-resource.js.map +1 -1
  8. package/dist/blocks/pages.js +47 -42
  9. package/dist/blocks/pages.js.map +1 -1
  10. package/dist/blocks/resource-list.js +68 -55
  11. package/dist/blocks/resource-list.js.map +1 -1
  12. package/dist/chunks/agent-avatar-DHieggHK.js +188 -0
  13. package/dist/chunks/agent-avatar-DHieggHK.js.map +1 -0
  14. package/dist/chunks/app-frame-DysOel2X.js +232 -0
  15. package/dist/chunks/app-frame-DysOel2X.js.map +1 -0
  16. package/dist/chunks/arrow-focus-B0KdRFX8.js +20 -0
  17. package/dist/chunks/arrow-focus-B0KdRFX8.js.map +1 -0
  18. package/dist/chunks/avatar-CYNMK7uY.js +110 -0
  19. package/dist/chunks/avatar-CYNMK7uY.js.map +1 -0
  20. package/dist/chunks/badge-C0GC3B9X.js +27 -0
  21. package/dist/chunks/badge-C0GC3B9X.js.map +1 -0
  22. package/dist/chunks/banner-B3DGLTBu.js +88 -0
  23. package/dist/chunks/banner-B3DGLTBu.js.map +1 -0
  24. package/dist/chunks/button-IblhXUyZ.js +202 -0
  25. package/dist/chunks/button-IblhXUyZ.js.map +1 -0
  26. package/dist/chunks/{calendar-BWaf2MXc.js → calendar-Dc6_dl0f.js} +4 -4
  27. package/dist/chunks/calendar-Dc6_dl0f.js.map +1 -0
  28. package/dist/chunks/checkbox-9tbimmF3.js +141 -0
  29. package/dist/chunks/checkbox-9tbimmF3.js.map +1 -0
  30. package/dist/chunks/{cn-Dj6sRgkF.js → cn-BjnOAUrA.js} +45 -4
  31. package/dist/chunks/cn-BjnOAUrA.js.map +1 -0
  32. package/dist/chunks/code-block-64e-Cy1S.js +346 -0
  33. package/dist/chunks/code-block-64e-Cy1S.js.map +1 -0
  34. package/dist/chunks/code-block-KIvuE8jg.js +352 -0
  35. package/dist/chunks/code-block-KIvuE8jg.js.map +1 -0
  36. package/dist/chunks/{code-tqj0uhBL.js → code-xqjww4Pv.js} +5 -6
  37. package/dist/chunks/code-xqjww4Pv.js.map +1 -0
  38. package/dist/chunks/combobox-DkcjkWc6.js +352 -0
  39. package/dist/chunks/combobox-DkcjkWc6.js.map +1 -0
  40. package/dist/chunks/command-list-CypqsC4T.js +456 -0
  41. package/dist/chunks/command-list-CypqsC4T.js.map +1 -0
  42. package/dist/chunks/{copy-button-FJvPJn72.js → copy-button-CwU8t_9_.js} +22 -15
  43. package/dist/chunks/copy-button-CwU8t_9_.js.map +1 -0
  44. package/dist/chunks/core-CmK-8ObW.js +505 -0
  45. package/dist/chunks/core-CmK-8ObW.js.map +1 -0
  46. package/dist/chunks/data-table-CqY8_6IS.js +581 -0
  47. package/dist/chunks/data-table-CqY8_6IS.js.map +1 -0
  48. package/dist/chunks/date-popup-DAnjptFt.js +58 -0
  49. package/dist/chunks/date-popup-DAnjptFt.js.map +1 -0
  50. package/dist/chunks/{de-CPXJh9cq.js → de-CqC4aSIV.js} +81 -40
  51. package/dist/chunks/de-CqC4aSIV.js.map +1 -0
  52. package/dist/chunks/{dialog-Cg9A_6SF.js → dialog-2zb6ClNR.js} +156 -134
  53. package/dist/chunks/dialog-2zb6ClNR.js.map +1 -0
  54. package/dist/chunks/disclosure-BtYRTDO3.js +22 -0
  55. package/dist/chunks/disclosure-BtYRTDO3.js.map +1 -0
  56. package/dist/chunks/domain-obd_w9xk.js +28 -0
  57. package/dist/chunks/domain-obd_w9xk.js.map +1 -0
  58. package/dist/chunks/{empty-DvhyMXQq.js → empty-BpiUgGzm.js} +2 -2
  59. package/dist/chunks/{empty-DvhyMXQq.js.map → empty-BpiUgGzm.js.map} +1 -1
  60. package/dist/chunks/{field-TviMvYa2.js → field-D7m-yl-D.js} +37 -34
  61. package/dist/chunks/field-D7m-yl-D.js.map +1 -0
  62. package/dist/chunks/{icon-D7ja-_Yk.js → icon-CBzOwqrX.js} +7 -6
  63. package/dist/chunks/{icon-D7ja-_Yk.js.map → icon-CBzOwqrX.js.map} +1 -1
  64. package/dist/chunks/icon-CPJWE2N-.js +95 -0
  65. package/dist/chunks/{icon-DVooQfk4.js.map → icon-CPJWE2N-.js.map} +1 -1
  66. package/dist/chunks/{icon-button-CrdF_eMG.js → icon-button-Dfwpvmav.js} +7 -6
  67. package/dist/chunks/icon-button-Dfwpvmav.js.map +1 -0
  68. package/dist/chunks/{identity-BmhQ6BQ-.js → identity-3Foi5F8w.js} +7 -7
  69. package/dist/chunks/{identity-BmhQ6BQ-.js.map → identity-3Foi5F8w.js.map} +1 -1
  70. package/dist/chunks/{input-2VJuj_M4.js → input-Bo5-UZg2.js} +15 -9
  71. package/dist/chunks/input-Bo5-UZg2.js.map +1 -0
  72. package/dist/chunks/{input-group-DQ_4DoXg.js → input-group-jPcK9T_a.js} +42 -29
  73. package/dist/chunks/input-group-jPcK9T_a.js.map +1 -0
  74. package/dist/chunks/iso-field-DoqHBg8n.js +52 -0
  75. package/dist/chunks/iso-field-DoqHBg8n.js.map +1 -0
  76. package/dist/chunks/json-view-DZ2nL2Ir.js +253 -0
  77. package/dist/chunks/json-view-DZ2nL2Ir.js.map +1 -0
  78. package/dist/chunks/{kbd-BF1vKXJf.js → kbd-8A0ML_up.js} +30 -28
  79. package/dist/chunks/kbd-8A0ML_up.js.map +1 -0
  80. package/dist/chunks/label-DW24Aj0Z.js +26 -0
  81. package/dist/chunks/label-DW24Aj0Z.js.map +1 -0
  82. package/dist/chunks/{link-KWI7PevW.js → link-CMjkcLQK.js} +14 -14
  83. package/dist/chunks/link-CMjkcLQK.js.map +1 -0
  84. package/dist/chunks/list-B4G-sWwV.js +540 -0
  85. package/dist/chunks/list-B4G-sWwV.js.map +1 -0
  86. package/dist/chunks/{loader-DCfPndXa.js → loader-zo8CCIGJ.js} +2 -2
  87. package/dist/chunks/{loader-DCfPndXa.js.map → loader-zo8CCIGJ.js.map} +1 -1
  88. package/dist/chunks/markdown-C565aBR7.js +338 -0
  89. package/dist/chunks/markdown-C565aBR7.js.map +1 -0
  90. package/dist/chunks/menu-Clvv6ftq.js +485 -0
  91. package/dist/chunks/menu-Clvv6ftq.js.map +1 -0
  92. package/dist/chunks/merge-refs-BN1FyQt9.js +20 -0
  93. package/dist/chunks/merge-refs-BN1FyQt9.js.map +1 -0
  94. package/dist/chunks/meter-CASMHlxl.js +100 -0
  95. package/dist/chunks/meter-CASMHlxl.js.map +1 -0
  96. package/dist/chunks/nav-sheet-Dt6JSvzX.js +67 -0
  97. package/dist/chunks/nav-sheet-Dt6JSvzX.js.map +1 -0
  98. package/dist/chunks/{nav-wordmark-_pjheAsZ.js → nav-wordmark-J4pB_vjr.js} +4 -8
  99. package/dist/chunks/nav-wordmark-J4pB_vjr.js.map +1 -0
  100. package/dist/chunks/page-header-kS5tdmvb.js +45 -0
  101. package/dist/chunks/page-header-kS5tdmvb.js.map +1 -0
  102. package/dist/chunks/pagination-D7fAm8qg.js +147 -0
  103. package/dist/chunks/pagination-D7fAm8qg.js.map +1 -0
  104. package/dist/chunks/picker-popover-1FHb1LQG.js +119 -0
  105. package/dist/chunks/picker-popover-1FHb1LQG.js.map +1 -0
  106. package/dist/chunks/popover-Bl5QYqnh.js +51 -0
  107. package/dist/chunks/popover-Bl5QYqnh.js.map +1 -0
  108. package/dist/chunks/{portal-context-BBbzDKmY.js → portal-context-CTatR2Z8.js} +14 -4
  109. package/dist/chunks/portal-context-CTatR2Z8.js.map +1 -0
  110. package/dist/chunks/{radio-CDDFpdtL.js → radio-C6GtzF_t.js} +38 -23
  111. package/dist/chunks/radio-C6GtzF_t.js.map +1 -0
  112. package/dist/chunks/range-popup-lGiZsG3s.js +160 -0
  113. package/dist/chunks/range-popup-lGiZsG3s.js.map +1 -0
  114. package/dist/chunks/reasoning-frame-C3HdQRRS.js +51 -0
  115. package/dist/chunks/reasoning-frame-C3HdQRRS.js.map +1 -0
  116. package/dist/chunks/release-art-ChiT4T2S.js +582 -0
  117. package/dist/chunks/release-art-ChiT4T2S.js.map +1 -0
  118. package/dist/chunks/rights-B68ocZuq.js +312 -0
  119. package/dist/chunks/rights-B68ocZuq.js.map +1 -0
  120. package/dist/chunks/{scroll-area-D8MD7Vpo.js → scroll-area-_Ljh4-bG.js} +11 -6
  121. package/dist/chunks/scroll-area-_Ljh4-bG.js.map +1 -0
  122. package/dist/chunks/section-CFBYhsUi.js +77 -0
  123. package/dist/chunks/section-CFBYhsUi.js.map +1 -0
  124. package/dist/chunks/section-header-DU1Q4Tdf.js +28 -0
  125. package/dist/chunks/section-header-DU1Q4Tdf.js.map +1 -0
  126. package/dist/chunks/segmented-D9i1avik.js +119 -0
  127. package/dist/chunks/segmented-D9i1avik.js.map +1 -0
  128. package/dist/chunks/select-BqjmQOqx.js +222 -0
  129. package/dist/chunks/select-BqjmQOqx.js.map +1 -0
  130. package/dist/chunks/{separator-D7TzNHmX.js → separator-BNWf6BBj.js} +13 -8
  131. package/dist/chunks/separator-BNWf6BBj.js.map +1 -0
  132. package/dist/chunks/sidebar-Dq7oGOje.js +664 -0
  133. package/dist/chunks/sidebar-Dq7oGOje.js.map +1 -0
  134. package/dist/chunks/{sidebar-menu-BN3jkTlK.js → sidebar-menu-QSSNu1jJ.js} +2 -2
  135. package/dist/chunks/{sidebar-menu-BN3jkTlK.js.map → sidebar-menu-QSSNu1jJ.js.map} +1 -1
  136. package/dist/chunks/{skeleton-Dcz57Zyp.js → skeleton-D-qk3mes.js} +3 -3
  137. package/dist/chunks/skeleton-D-qk3mes.js.map +1 -0
  138. package/dist/chunks/slider-CcE8GtuV.js +58 -0
  139. package/dist/chunks/slider-CcE8GtuV.js.map +1 -0
  140. package/dist/chunks/{status-dot-QJTF0Yv4.js → status-dot-CP6runiC.js} +4 -4
  141. package/dist/chunks/{status-dot-QJTF0Yv4.js.map → status-dot-CP6runiC.js.map} +1 -1
  142. package/dist/chunks/{styles-CVJU9t9v.js → styles-hkFkoBbi.js} +2 -2
  143. package/dist/chunks/{styles-CVJU9t9v.js.map → styles-hkFkoBbi.js.map} +1 -1
  144. package/dist/chunks/{swap-text-Dr0Irxz6.js → swap-text-SlUjrTlG.js} +3 -3
  145. package/dist/chunks/swap-text-SlUjrTlG.js.map +1 -0
  146. package/dist/chunks/switch-ngywMQdl.js +76 -0
  147. package/dist/chunks/switch-ngywMQdl.js.map +1 -0
  148. package/dist/chunks/table-CTK5E0J7.js +102 -0
  149. package/dist/chunks/table-CTK5E0J7.js.map +1 -0
  150. package/dist/chunks/tag-BGr6lTSV.js +100 -0
  151. package/dist/chunks/tag-BGr6lTSV.js.map +1 -0
  152. package/dist/chunks/{text-CIXH8rmT.js → text-DkKdTVUf.js} +9 -9
  153. package/dist/chunks/text-DkKdTVUf.js.map +1 -0
  154. package/dist/chunks/{textarea--4FRL3Pb.js → textarea-CO0HP6fK.js} +47 -36
  155. package/dist/chunks/textarea-CO0HP6fK.js.map +1 -0
  156. package/dist/chunks/timeseries-Ck-q0wWn.js +381 -0
  157. package/dist/chunks/timeseries-Ck-q0wWn.js.map +1 -0
  158. package/dist/chunks/toolbar-u0Gm7Q7-.js +61 -0
  159. package/dist/chunks/toolbar-u0Gm7Q7-.js.map +1 -0
  160. package/dist/chunks/tooltip-Tkm-urbi.js +202 -0
  161. package/dist/chunks/tooltip-Tkm-urbi.js.map +1 -0
  162. package/dist/chunks/tooltip-root-BC_RNNiP.js +70 -0
  163. package/dist/chunks/tooltip-root-BC_RNNiP.js.map +1 -0
  164. package/dist/chunks/truncated-d1afmUJT.js +33 -0
  165. package/dist/chunks/truncated-d1afmUJT.js.map +1 -0
  166. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js +28 -0
  167. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js.map +1 -0
  168. package/dist/chunks/use-hydrating-COtYVRo4.js +8 -0
  169. package/dist/chunks/use-hydrating-COtYVRo4.js.map +1 -0
  170. package/dist/chunks/use-scroll-fade-uc8mWSDX.js +30 -0
  171. package/dist/chunks/use-scroll-fade-uc8mWSDX.js.map +1 -0
  172. package/dist/chunks/{zh-CN-29X4CDLE.js → zh-CN-BlpsT6d_.js} +80 -39
  173. package/dist/chunks/zh-CN-BlpsT6d_.js.map +1 -0
  174. package/dist/components/agent-avatar.js +1 -1
  175. package/dist/components/app-frame.js +2 -2
  176. package/dist/components/avatar.js +1 -1
  177. package/dist/components/badge.js +1 -1
  178. package/dist/components/banner.js +1 -1
  179. package/dist/components/button-group.js +22 -22
  180. package/dist/components/button-group.js.map +1 -1
  181. package/dist/components/button.js +1 -1
  182. package/dist/components/calendar.js +1 -1
  183. package/dist/components/charts/bar.js +235 -160
  184. package/dist/components/charts/bar.js.map +1 -1
  185. package/dist/components/charts/donut.js +144 -99
  186. package/dist/components/charts/donut.js.map +1 -1
  187. package/dist/components/charts/gauge.js +61 -49
  188. package/dist/components/charts/gauge.js.map +1 -1
  189. package/dist/components/charts/heatmap.js +179 -70
  190. package/dist/components/charts/heatmap.js.map +1 -1
  191. package/dist/components/charts/sankey.js +144 -77
  192. package/dist/components/charts/sankey.js.map +1 -1
  193. package/dist/components/charts/sparkline.js +54 -38
  194. package/dist/components/charts/sparkline.js.map +1 -1
  195. package/dist/components/charts/timeseries.js +1 -1
  196. package/dist/components/charts.js +2 -2
  197. package/dist/components/checkbox.js +1 -1
  198. package/dist/components/code-block.js +4 -3
  199. package/dist/components/code.js +1 -1
  200. package/dist/components/collapsible.js +77 -1
  201. package/dist/components/collapsible.js.map +1 -0
  202. package/dist/components/combobox.js +1 -1
  203. package/dist/components/command-list.js +2 -2
  204. package/dist/components/command-palette.js +89 -66
  205. package/dist/components/command-palette.js.map +1 -1
  206. package/dist/components/copy-button.js +1 -1
  207. package/dist/components/data-table.js +1 -459
  208. package/dist/components/date-picker.js +162 -151
  209. package/dist/components/date-picker.js.map +1 -1
  210. package/dist/components/dialog.js +74 -63
  211. package/dist/components/dialog.js.map +1 -1
  212. package/dist/components/display-options.js +76 -64
  213. package/dist/components/display-options.js.map +1 -1
  214. package/dist/components/empty.js +1 -1
  215. package/dist/components/field.js +1 -1
  216. package/dist/components/figure.js +2 -2
  217. package/dist/components/filter-chip.js +36 -27
  218. package/dist/components/filter-chip.js.map +1 -1
  219. package/dist/components/filter-row.js +4 -4
  220. package/dist/components/filter-row.js.map +1 -1
  221. package/dist/components/flow.js +94 -63
  222. package/dist/components/flow.js.map +1 -1
  223. package/dist/components/heading.js +1 -1
  224. package/dist/components/icon-button.js +1 -1
  225. package/dist/components/icon.js +2 -2
  226. package/dist/components/input.js +176 -98
  227. package/dist/components/input.js.map +1 -1
  228. package/dist/components/kaeso/conversation.js +51 -46
  229. package/dist/components/kaeso/conversation.js.map +1 -1
  230. package/dist/components/kaeso/identity.js +1 -1
  231. package/dist/components/kaeso/moments.js +23 -20
  232. package/dist/components/kaeso/moments.js.map +1 -1
  233. package/dist/components/kaeso/rights.js +1 -1
  234. package/dist/components/kaeso/usage.js +90 -74
  235. package/dist/components/kaeso/usage.js.map +1 -1
  236. package/dist/components/kaeso.js +200 -187
  237. package/dist/components/kaeso.js.map +1 -1
  238. package/dist/components/kbd.js +1 -1
  239. package/dist/components/key-value.js +32 -47
  240. package/dist/components/key-value.js.map +1 -1
  241. package/dist/components/label.js +1 -25
  242. package/dist/components/layout.js +2 -2
  243. package/dist/components/layout.js.map +1 -1
  244. package/dist/components/link.js +1 -1
  245. package/dist/components/list.js +1 -1
  246. package/dist/components/loader.js +11 -10
  247. package/dist/components/loader.js.map +1 -1
  248. package/dist/components/logo.js +2 -2
  249. package/dist/components/markdown.js +1 -1
  250. package/dist/components/menu.js +2 -2
  251. package/dist/components/meter.js +1 -1
  252. package/dist/components/page-header.js +1 -1
  253. package/dist/components/pagination.js +1 -1
  254. package/dist/components/playground.js +644 -529
  255. package/dist/components/playground.js.map +1 -1
  256. package/dist/components/popover.js +4 -4
  257. package/dist/components/popover.js.map +1 -1
  258. package/dist/components/portal.js +1 -1
  259. package/dist/components/qr-code.js +2 -2
  260. package/dist/components/qr-code.js.map +1 -1
  261. package/dist/components/radio.js +1 -1
  262. package/dist/components/release-art.js +1 -1
  263. package/dist/components/scroll-area.js +1 -1
  264. package/dist/components/section.js +1 -1
  265. package/dist/components/segmented.js +1 -1
  266. package/dist/components/select.js +1 -1
  267. package/dist/components/separator.js +1 -1
  268. package/dist/components/settings.js +39 -46
  269. package/dist/components/settings.js.map +1 -1
  270. package/dist/components/sheet.js +10 -9
  271. package/dist/components/sheet.js.map +1 -1
  272. package/dist/components/sidebar.js +1 -1
  273. package/dist/components/skeleton.js +1 -1
  274. package/dist/components/slider.js +1 -1
  275. package/dist/components/stat.js +98 -84
  276. package/dist/components/stat.js.map +1 -1
  277. package/dist/components/status-dot.js +1 -1
  278. package/dist/components/surface.js +1 -1
  279. package/dist/components/swap-text.js +1 -1
  280. package/dist/components/switch.js +1 -1
  281. package/dist/components/table.js +1 -1
  282. package/dist/components/tabs.js +73 -55
  283. package/dist/components/tabs.js.map +1 -1
  284. package/dist/components/tag.js +1 -1
  285. package/dist/components/text.js +1 -1
  286. package/dist/components/theme-image.js +1 -1
  287. package/dist/components/theme-menu.js +5 -2
  288. package/dist/components/theme-menu.js.map +1 -1
  289. package/dist/components/theme-select.js +1 -1
  290. package/dist/components/thumbnail.js +35 -24
  291. package/dist/components/thumbnail.js.map +1 -1
  292. package/dist/components/timeline.js +51 -35
  293. package/dist/components/timeline.js.map +1 -1
  294. package/dist/components/toast.js +76 -66
  295. package/dist/components/toast.js.map +1 -1
  296. package/dist/components/toc.js +14 -8
  297. package/dist/components/toc.js.map +1 -1
  298. package/dist/components/toolbar.js +1 -1
  299. package/dist/components/tooltip.js +1 -1
  300. package/dist/components/visually-hidden.js +1 -1
  301. package/dist/i18n-provider.js +1 -1
  302. package/dist/index.js +101 -101
  303. package/dist/kaeso.css +605 -67
  304. package/dist/styles.css +1 -1
  305. package/dist/tailwind.css +1 -1
  306. package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -2
  307. package/dist/types/components/agent-avatar/agent-avatar.d.ts +24 -19
  308. package/dist/types/components/badge/badge.d.ts +3 -3
  309. package/dist/types/components/banner/banner.d.ts +3 -3
  310. package/dist/types/components/button/button.d.ts +2 -2
  311. package/dist/types/components/button-group/button-group.d.ts +1 -1
  312. package/dist/types/components/charts/domain.d.ts +11 -0
  313. package/dist/types/components/charts/marks.d.ts +1 -0
  314. package/dist/types/components/code/code.d.ts +3 -3
  315. package/dist/types/components/code-block/diff-view.d.ts +30 -0
  316. package/dist/types/components/code-block/diff.d.ts +26 -0
  317. package/dist/types/components/code-block/docs.d.ts +14 -0
  318. package/dist/types/components/code-block/index.d.ts +1 -0
  319. package/dist/types/components/code-block/json-view.d.ts +2 -1
  320. package/dist/types/components/code-block/numbers.d.ts +1 -0
  321. package/dist/types/components/collapsible/collapsible.d.ts +2 -2
  322. package/dist/types/components/collapsible/disclosure.d.ts +2 -0
  323. package/dist/types/components/data-table/data-table.d.ts +6 -5
  324. package/dist/types/components/data-table/docs.d.ts +1 -0
  325. package/dist/types/components/data-table/time-columns.d.ts +1 -0
  326. package/dist/types/components/date-picker/focus-day.d.ts +1 -0
  327. package/dist/types/components/date-picker/iso-field.d.ts +8 -1
  328. package/dist/types/components/dialog/dialog.d.ts +7 -7
  329. package/dist/types/components/field/field.d.ts +1 -1
  330. package/dist/types/components/flow/flow.d.ts +1 -1
  331. package/dist/types/components/icon-button/icon-button.d.ts +1 -1
  332. package/dist/types/components/input/input-group.d.ts +2 -0
  333. package/dist/types/components/input/number-input.d.ts +4 -4
  334. package/dist/types/components/input/otp-input.d.ts +3 -3
  335. package/dist/types/components/kaeso/client-button.d.ts +2 -1
  336. package/dist/types/components/kaeso/provider-picker.d.ts +1 -0
  337. package/dist/types/components/kaeso/rights.d.ts +1 -1
  338. package/dist/types/components/kaeso/role-picker.d.ts +1 -0
  339. package/dist/types/components/key-value/key-value.d.ts +2 -2
  340. package/dist/types/components/layout/layout.d.ts +2 -2
  341. package/dist/types/components/link/link.d.ts +4 -4
  342. package/dist/types/components/list/list.d.ts +2 -2
  343. package/dist/types/components/menu/menu.d.ts +2 -1
  344. package/dist/types/components/menu/styles.d.ts +3 -3
  345. package/dist/types/components/meter/meter.d.ts +3 -3
  346. package/dist/types/components/page-header/page-header.d.ts +1 -1
  347. package/dist/types/components/pagination/pagination.d.ts +2 -2
  348. package/dist/types/components/playground/prompt-suggestions.d.ts +1 -0
  349. package/dist/types/components/playground/reasoning-frame.d.ts +14 -0
  350. package/dist/types/components/playground/reasoning.d.ts +1 -0
  351. package/dist/types/components/popover/popover.d.ts +1 -1
  352. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  353. package/dist/types/components/section/section-header.d.ts +6 -0
  354. package/dist/types/components/segmented/segmented.d.ts +1 -0
  355. package/dist/types/components/select/select.d.ts +1 -1
  356. package/dist/types/components/sheet/sheet.d.ts +3 -3
  357. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  358. package/dist/types/components/slider/slider.d.ts +2 -2
  359. package/dist/types/components/stat/stat.d.ts +1 -1
  360. package/dist/types/components/tabs/tabs.d.ts +6 -4
  361. package/dist/types/components/text/truncated.d.ts +7 -0
  362. package/dist/types/components/timeline/timeline.d.ts +5 -5
  363. package/dist/types/components/toc/toc.d.ts +1 -1
  364. package/dist/types/components/toolbar/toolbar.d.ts +1 -1
  365. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  366. package/dist/types/components/tooltip/trigger-props.d.ts +1 -0
  367. package/dist/types/hooks/use-coarse-pointer.d.ts +1 -0
  368. package/dist/types/hooks/use-hydrating.d.ts +1 -0
  369. package/dist/types/icons/groups.d.ts +1 -1
  370. package/dist/types/icons/vocabulary.d.ts +5 -0
  371. package/dist/types/utils/arrow-focus.d.ts +4 -1
  372. package/dist/types/utils/cn.d.ts +33 -0
  373. package/dist/types/utils/portal-context.d.ts +7 -1
  374. package/dist/utils.js +2 -2
  375. package/foundations/accessibility.md +3 -2
  376. package/foundations/color.md +5 -1
  377. package/foundations/elevation.md +1 -0
  378. package/foundations/motion.md +1 -1
  379. package/foundations/shape.md +2 -2
  380. package/foundations/typography.md +12 -12
  381. package/package.json +2 -2
  382. package/dist/chunks/agent-avatar-0pdBTWkR.js +0 -171
  383. package/dist/chunks/agent-avatar-0pdBTWkR.js.map +0 -1
  384. package/dist/chunks/app-frame-DogGRmsu.js +0 -221
  385. package/dist/chunks/app-frame-DogGRmsu.js.map +0 -1
  386. package/dist/chunks/arrow-focus-BcySmwwU.js +0 -11
  387. package/dist/chunks/arrow-focus-BcySmwwU.js.map +0 -1
  388. package/dist/chunks/avatar-CWbdwbJv.js +0 -83
  389. package/dist/chunks/avatar-CWbdwbJv.js.map +0 -1
  390. package/dist/chunks/badge-C2KtxCLB.js +0 -26
  391. package/dist/chunks/badge-C2KtxCLB.js.map +0 -1
  392. package/dist/chunks/banner-BA2ALw9M.js +0 -85
  393. package/dist/chunks/banner-BA2ALw9M.js.map +0 -1
  394. package/dist/chunks/button-CzuxqawA.js +0 -164
  395. package/dist/chunks/button-CzuxqawA.js.map +0 -1
  396. package/dist/chunks/calendar-BWaf2MXc.js.map +0 -1
  397. package/dist/chunks/checkbox-CQjwCPkc.js +0 -126
  398. package/dist/chunks/checkbox-CQjwCPkc.js.map +0 -1
  399. package/dist/chunks/cn-Dj6sRgkF.js.map +0 -1
  400. package/dist/chunks/code-block-D5A-CGXG.js +0 -330
  401. package/dist/chunks/code-block-D5A-CGXG.js.map +0 -1
  402. package/dist/chunks/code-tqj0uhBL.js.map +0 -1
  403. package/dist/chunks/collapsible-CKrCX_T9.js +0 -87
  404. package/dist/chunks/collapsible-CKrCX_T9.js.map +0 -1
  405. package/dist/chunks/combobox-DjDI7SUC.js +0 -319
  406. package/dist/chunks/combobox-DjDI7SUC.js.map +0 -1
  407. package/dist/chunks/command-list-C2Y7V_lt.js +0 -418
  408. package/dist/chunks/command-list-C2Y7V_lt.js.map +0 -1
  409. package/dist/chunks/copy-button-FJvPJn72.js.map +0 -1
  410. package/dist/chunks/core-BYns5ytV.js +0 -472
  411. package/dist/chunks/core-BYns5ytV.js.map +0 -1
  412. package/dist/chunks/date-popup-CPA_zt6o.js +0 -35
  413. package/dist/chunks/date-popup-CPA_zt6o.js.map +0 -1
  414. package/dist/chunks/de-CPXJh9cq.js.map +0 -1
  415. package/dist/chunks/dialog-Cg9A_6SF.js.map +0 -1
  416. package/dist/chunks/field-TviMvYa2.js.map +0 -1
  417. package/dist/chunks/hidden-description-B2zSmLcn.js +0 -23
  418. package/dist/chunks/hidden-description-B2zSmLcn.js.map +0 -1
  419. package/dist/chunks/icon-DVooQfk4.js +0 -94
  420. package/dist/chunks/icon-button-CrdF_eMG.js.map +0 -1
  421. package/dist/chunks/input-2VJuj_M4.js.map +0 -1
  422. package/dist/chunks/input-group-DQ_4DoXg.js.map +0 -1
  423. package/dist/chunks/iso-field-B2rTwiBo.js +0 -33
  424. package/dist/chunks/iso-field-B2rTwiBo.js.map +0 -1
  425. package/dist/chunks/json-view-Dqd2TDkc.js +0 -175
  426. package/dist/chunks/json-view-Dqd2TDkc.js.map +0 -1
  427. package/dist/chunks/kbd-BF1vKXJf.js.map +0 -1
  428. package/dist/chunks/link-KWI7PevW.js.map +0 -1
  429. package/dist/chunks/list-M1csq-d4.js +0 -494
  430. package/dist/chunks/list-M1csq-d4.js.map +0 -1
  431. package/dist/chunks/markdown-DULktoTK.js +0 -313
  432. package/dist/chunks/markdown-DULktoTK.js.map +0 -1
  433. package/dist/chunks/menu-DEmBfdPm.js +0 -450
  434. package/dist/chunks/menu-DEmBfdPm.js.map +0 -1
  435. package/dist/chunks/meter-Bj4N3Xuh.js +0 -84
  436. package/dist/chunks/meter-Bj4N3Xuh.js.map +0 -1
  437. package/dist/chunks/nav-sheet-CzgIwgAm.js +0 -60
  438. package/dist/chunks/nav-sheet-CzgIwgAm.js.map +0 -1
  439. package/dist/chunks/nav-wordmark-_pjheAsZ.js.map +0 -1
  440. package/dist/chunks/page-header-DL2y2iZp.js +0 -41
  441. package/dist/chunks/page-header-DL2y2iZp.js.map +0 -1
  442. package/dist/chunks/pagination-Cn_qF4cg.js +0 -86
  443. package/dist/chunks/pagination-Cn_qF4cg.js.map +0 -1
  444. package/dist/chunks/picker-popover-BxyU1U9F.js +0 -106
  445. package/dist/chunks/picker-popover-BxyU1U9F.js.map +0 -1
  446. package/dist/chunks/popover-DNN4S47w.js +0 -50
  447. package/dist/chunks/popover-DNN4S47w.js.map +0 -1
  448. package/dist/chunks/portal-context-BBbzDKmY.js.map +0 -1
  449. package/dist/chunks/radio-CDDFpdtL.js.map +0 -1
  450. package/dist/chunks/range-popup-CRyWYUB1.js +0 -128
  451. package/dist/chunks/range-popup-CRyWYUB1.js.map +0 -1
  452. package/dist/chunks/release-art-ZwfFQImt.js +0 -561
  453. package/dist/chunks/release-art-ZwfFQImt.js.map +0 -1
  454. package/dist/chunks/rights-Cyp0Pzp-.js +0 -279
  455. package/dist/chunks/rights-Cyp0Pzp-.js.map +0 -1
  456. package/dist/chunks/scroll-area-D8MD7Vpo.js.map +0 -1
  457. package/dist/chunks/scroll-parent-WXvzQcUo.js +0 -14
  458. package/dist/chunks/scroll-parent-WXvzQcUo.js.map +0 -1
  459. package/dist/chunks/section-Ce1efbsP.js +0 -87
  460. package/dist/chunks/section-Ce1efbsP.js.map +0 -1
  461. package/dist/chunks/segmented-CErcoxwi.js +0 -114
  462. package/dist/chunks/segmented-CErcoxwi.js.map +0 -1
  463. package/dist/chunks/select-x4XVsdCI.js +0 -210
  464. package/dist/chunks/select-x4XVsdCI.js.map +0 -1
  465. package/dist/chunks/separator-D7TzNHmX.js.map +0 -1
  466. package/dist/chunks/sidebar-3r1ZRXlN.js +0 -621
  467. package/dist/chunks/sidebar-3r1ZRXlN.js.map +0 -1
  468. package/dist/chunks/skeleton-Dcz57Zyp.js.map +0 -1
  469. package/dist/chunks/slider-Ci83PGtj.js +0 -57
  470. package/dist/chunks/slider-Ci83PGtj.js.map +0 -1
  471. package/dist/chunks/swap-text-Dr0Irxz6.js.map +0 -1
  472. package/dist/chunks/switch-BNMq_kGt.js +0 -59
  473. package/dist/chunks/switch-BNMq_kGt.js.map +0 -1
  474. package/dist/chunks/table-BeOSKl_3.js +0 -84
  475. package/dist/chunks/table-BeOSKl_3.js.map +0 -1
  476. package/dist/chunks/tag-D_M1s2qS.js +0 -87
  477. package/dist/chunks/tag-D_M1s2qS.js.map +0 -1
  478. package/dist/chunks/text-CIXH8rmT.js.map +0 -1
  479. package/dist/chunks/textarea--4FRL3Pb.js.map +0 -1
  480. package/dist/chunks/timeseries-D1xjRXfk.js +0 -339
  481. package/dist/chunks/timeseries-D1xjRXfk.js.map +0 -1
  482. package/dist/chunks/toolbar-WA_oZgu-.js +0 -37
  483. package/dist/chunks/toolbar-WA_oZgu-.js.map +0 -1
  484. package/dist/chunks/tooltip-OcwO0VUT.js +0 -154
  485. package/dist/chunks/tooltip-OcwO0VUT.js.map +0 -1
  486. package/dist/chunks/tooltip-root-DzahJDVj.js +0 -60
  487. package/dist/chunks/tooltip-root-DzahJDVj.js.map +0 -1
  488. package/dist/chunks/zh-CN-29X4CDLE.js.map +0 -1
  489. package/dist/components/data-table.js.map +0 -1
  490. package/dist/components/label.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.js","names":["_Fragment","__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","lazyModule","preload","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","useHiddenDescription","joinIds","whenIdle","Fragment$1","KAESO_DATE_PICKER_VARIANTS","KAESO_DATE_PICKER_DEFAULT_VARIANTS","datePopup","rangePopup","preloadDatePopup","preloadRangePopup","useLoadedOpen","wanted","setWanted","useState","arrived","useReducer","n","loaded","popup","pending","live","setOpen","useCallback","next","was","TriggerButton","ariaLabel","labelledBy","rest","valueId","useId","purpose","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","labelled","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabelledBy","props","field","fc","t","naming","label","date","setDate","useControllable","value","defaultValue","onValueChange","cancel","DatePopup","description","error","formatDate","day","startOfDay","d","rangePresets","DEFAULT_RANGE_PRESETS","presetId","p","presetIdOf","rangeDays","r","DateRangePicker","presetsProp","presetProp","defaults","useMemo","presets","inner","setInner","range","picked","setPicked","days","preset","opening","setOpening","openRange","open","RangePopup","display","formatDateRange","from","KAESO_TIME_INPUT_VARIANTS","KAESO_TIME_INPUT_DEFAULT_VARIANTS","pad","TimeInput","labelId","time","setTime","draft","setDraftState","setDraft","h","m","minutes","shown","part","set","hh","mm","commit","v","seg","e","Clock01Icon","utc"],"sources":["../../src/components/date-picker/date-picker.tsx","../../src/components/date-picker/time-input.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useReducer, useRef, useState, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport type { CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Calendar03Icon as __icon_Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport { PopoverRoot, PopoverTrigger } from \"../popover/popover-root.js\";\nimport { formatDate, formatDateRange } from \"../../format/index.js\";\nimport { lazyModule, preload, type LazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { joinIds, useHiddenDescription } from \"../../utils/hidden-description.js\";\n\nexport const KAESO_DATE_PICKER_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-10 pr-12 gap-6 text-body\" },\n md: { classes: \"h-36 pl-14 pr-16 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-16 pr-18 gap-8 text-body\" },\n },\n} as const;\nexport const KAESO_DATE_PICKER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst datePopup = /* @__PURE__ */ lazyModule(() => import(\"./date-popup.js\"), { base: () => import.meta.url });\nconst rangePopup = /* @__PURE__ */ lazyModule(() => import(\"./range-popup.js\"), { base: () => import.meta.url });\nconst preloadDatePopup = () => preload(datePopup);\nconst preloadRangePopup = () => preload(rangePopup);\n\ninterface LoadedOpen {\n open: boolean;\n pending: boolean;\n setOpen: (open: boolean) => void;\n}\n\nfunction useLoadedOpen(popup: LazyModule<unknown>): LoadedOpen {\n const [wanted, setWanted] = useState(false);\n const [, arrived] = useReducer((n: number) => n + 1, 0);\n const loaded = !!popup.current();\n const pending = wanted && !loaded;\n useEffect(() => {\n if (!pending) return;\n let live = true;\n popup.load().then(\n () => live && arrived(),\n () => live && setWanted(false),\n );\n return () => {\n live = false;\n };\n }, [pending, popup]);\n const setOpen = useCallback((next: boolean) => setWanted((was) => (next && was && !popup.current() ? false : next)), [popup]);\n return { open: wanted && loaded, pending, setOpen };\n}\n\ninterface TriggerButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n size: keyof typeof KAESO_DATE_PICKER_VARIANTS.size;\n children: ReactNode;\n placeholder: boolean;\n invalid?: boolean | undefined;\n controlProps?: object | undefined;\n force?: string | undefined;\n preload: () => void;\n pending: boolean;\n onCancel: () => void;\n labelled: boolean;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n {\n size,\n children,\n placeholder,\n invalid,\n disabled,\n id,\n controlProps,\n force,\n preload,\n pending,\n onCancel,\n labelled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": labelledBy,\n className,\n ...rest\n },\n ref,\n) {\n const valueId = useId();\n const purpose = useHiddenDescription(labelledBy ? undefined : ariaLabel);\n const self = useRef<HTMLButtonElement | null>(null);\n const setRef = useCallback(\n (el: HTMLButtonElement | null) => {\n self.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n useEffect(() => whenIdle(preload), [preload]);\n useEffect(() => {\n if (!pending) return;\n const doc = self.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n onCancel();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!self.current?.contains(e.target as Node)) onCancel();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, onCancel]);\n const control = (controlProps ?? {}) as { \"aria-describedby\"?: string | undefined };\n const describedBy = joinIds(purpose.id, labelled && !labelledBy && valueId, control[\"aria-describedby\"]);\n return (\n <>\n <button\n ref={setRef}\n type=\"button\"\n {...rest}\n {...(pending ? { \"aria-expanded\": true, \"data-popup-open\": \"\" } : {})}\n onPointerEnter={(e) => {\n preload();\n rest.onPointerEnter?.(e);\n }}\n onFocus={(e) => {\n preload();\n rest.onFocus?.(e);\n }}\n onBlur={(e) => {\n if (pending && e.relatedTarget && !e.currentTarget.contains(e.relatedTarget)) onCancel();\n rest.onBlur?.(e);\n }}\n disabled={disabled}\n {...control}\n {...(labelledBy ? { \"aria-labelledby\": `${labelledBy} ${valueId}` } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(id ? { id } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"inline-flex min-w-0 cursor-pointer items-center rounded-pill font-medium whitespace-nowrap material-selector transition-control disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n className,\n )}\n >\n <Icon icon={__icon_Calendar03Icon} size=\"sm\" className=\"text-fg-secondary\" />\n <span id={valueId} className={cn(\"truncate tabular\", placeholder && \"font-regular text-fg-tertiary\")}>\n {children}\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TriggerButton.displayName = \"TriggerButton\";\n\nexport interface DatePickerProps extends FieldWrapProps {\n value?: Date | null | undefined;\n defaultValue?: Date | null | undefined;\n onValueChange?: ((value: Date | null) => void) | undefined;\n placeholder?: string | undefined;\n size?: keyof typeof KAESO_DATE_PICKER_VARIANTS.size | undefined;\n weekStartsOn?: CalendarProps[\"weekStartsOn\"] | undefined;\n disabledDays?: ((date: Date) => boolean) | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const DatePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [date, setDate] = useControllable<Date | null>(value, defaultValue, onValueChange);\n const { open, pending, setOpen } = useLoadedOpen(datePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const DatePopup = datePopup.current()?.DatePopup;\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!date}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadDatePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {date ? formatDate(date) : (placeholder ?? t(\"datePicker.pickDate\", \"Pick a date\"))}\n </TriggerButton>\n </PopoverTrigger>\n {DatePopup && <DatePopup date={date} onDateChange={setDate} onClose={() => setOpen(false)} weekStartsOn={weekStartsOn} disabledDays={disabledDays} />}\n </PopoverRoot>\n </div>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") DatePicker.displayName = \"DatePicker\";\n\nexport interface DateRangePreset {\n id?: string | undefined;\n label: string;\n range: () => DateRange;\n}\n\nconst day = 86_400_000;\nconst startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nfunction rangePresets(t: UiText): DateRangePreset[] {\n return [\n { id: \"Last 24 hours\", label: t(\"datePicker.last24Hours\", \"Last 24 hours\"), range: () => ({ from: new Date(Date.now() - day), to: new Date() }) },\n { id: \"Last 7 days\", label: t(\"datePicker.last7Days\", \"Last 7 days\"), range: () => ({ from: startOfDay(new Date(Date.now() - 6 * day)), to: new Date() }) },\n {\n id: \"Last 30 days\",\n label: t(\"datePicker.last30Days\", \"Last 30 days\"),\n range: () => ({ from: startOfDay(new Date(Date.now() - 29 * day)), to: new Date() }),\n },\n {\n id: \"This month\",\n label: t(\"datePicker.thisMonth\", \"This month\"),\n range: () => ({ from: new Date(new Date().getFullYear(), new Date().getMonth(), 1), to: new Date() }),\n },\n {\n id: \"Last month\",\n label: t(\"datePicker.lastMonth\", \"Last month\"),\n range: () => {\n const n = new Date();\n return { from: new Date(n.getFullYear(), n.getMonth() - 1, 1), to: new Date(n.getFullYear(), n.getMonth(), 0) };\n },\n },\n ];\n}\nexport const DEFAULT_RANGE_PRESETS: DateRangePreset[] = /* @__PURE__ */ rangePresets(englishText);\nconst presetId = (p: DateRangePreset) => p.id ?? p.label;\nconst presetIdOf = (p: DateRangePreset | undefined) => (p ? presetId(p) : null);\n\nexport interface DateRangePickerProps extends Omit<DatePickerProps, \"value\" | \"defaultValue\" | \"onValueChange\"> {\n value?: DateRange | null | undefined;\n defaultValue?: DateRange | null | undefined;\n onValueChange?: ((value: DateRange | null, details: { preset: string | null }) => void) | undefined;\n presets?: DateRangePreset[] | undefined;\n preset?: string | null | undefined;\n}\n\nconst rangeDays = (r: DateRange | null | undefined) => `${r?.from?.toDateString()}/${r?.to?.toDateString()}`;\n\nexport const DateRangePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n presets: presetsProp,\n preset: presetProp,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const defaults = useMemo(() => rangePresets(t), [t]);\n const presets = presetsProp ?? defaults;\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [inner, setInner] = useState<DateRange | null>(defaultValue);\n const range = value !== undefined ? value : inner;\n const [picked, setPicked] = useState<string | null>(null);\n const days = rangeDays(range);\n const preset = presetProp !== undefined ? presetProp : presetIdOf(presets.find((p) => presetId(p) === picked && rangeDays(p.range()) === days));\n const { open, pending, setOpen } = useLoadedOpen(rangePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const [opening, setOpening] = useState(0);\n const openRange = useCallback(\n (next: boolean) => {\n if (next && !open) setOpening((n) => n + 1);\n setOpen(next);\n },\n [open, setOpen],\n );\n const RangePopup = rangePopup.current()?.RangePopup;\n const presetName = preset === null ? null : (presets.find((p) => presetId(p) === preset)?.label ?? preset);\n const display =\n presetName ??\n (range?.from && range.to\n ? formatDateRange(range.from, range.to)\n : range?.from\n ? formatDate(range.from)\n : (placeholder ?? t(\"datePicker.pickRange\", \"Pick a range\")));\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={openRange}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!range?.from && !preset}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadRangePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {display}\n </TriggerButton>\n </PopoverTrigger>\n {RangePopup && (\n <RangePopup\n key={opening}\n range={range}\n preset={preset}\n presets={presets}\n onPick={(next, from) => {\n if (value === undefined) setInner(next);\n setPicked(from);\n onValueChange?.(next, { preset: from });\n setOpen(false);\n }}\n onClose={() => setOpen(false)}\n weekStartsOn={weekStartsOn}\n disabledDays={disabledDays}\n />\n )}\n </PopoverRoot>\n </div>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") DateRangePicker.displayName = \"DateRangePicker\";\n\nexport type { DateRange };\n","import type * as React from \"react\";\nimport { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, KAESO_INPUT_GROUP_VARIANTS, type InputSize } from \"../input/input-group.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Clock01Icon as __icon_Clock01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TIME_INPUT_VARIANTS = {\n size: KAESO_INPUT_GROUP_VARIANTS.size,\n} as const;\nexport const KAESO_TIME_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TimeInputProps extends FieldWrapProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n size?: InputSize | undefined;\n disabled?: boolean | undefined;\n utc?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst pad = (n: number) => String(n).padStart(2, \"0\");\n\nexport const TimeInput = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeInputProps>(function TimeInput(props, ref) {\n const {\n value,\n defaultValue = \"09:00\",\n onValueChange,\n size = \"md\",\n disabled,\n utc,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const labelId = field ? field.labelId : label && fc.wrapId ? `${fc.wrapId}-label` : undefined;\n const [time, setTime] = useControllable(value, defaultValue, onValueChange);\n const [draft, setDraftState] = useState<{ h?: string | undefined; m?: string | undefined }>({});\n const pending = useRef(draft);\n const setDraft = (next: { h?: string | undefined; m?: string | undefined }) => {\n pending.current = next;\n setDraftState(next);\n };\n const [h = \"00\", m = \"00\"] = time.split(\":\");\n const minutes = useRef<HTMLInputElement>(null);\n const shown = (part: \"h\" | \"m\") => pending.current[part] ?? (part === \"h\" ? h : m);\n const set = (hh: number, mm: number) => {\n setDraft({});\n const next = `${pad(((hh % 24) + 24) % 24)}:${pad(((mm % 60) + 60) % 60)}`;\n if (next !== time) setTime(next);\n };\n const commit = (part: \"h\" | \"m\", v: string) => {\n const n = Number(v || 0);\n if (part === \"h\") set(Math.min(23, n), Number(shown(\"m\") || 0));\n else set(Number(shown(\"h\") || 0), Math.min(59, n));\n };\n const seg = (part: \"h\" | \"m\") => ({\n inputMode: \"numeric\" as const,\n maxLength: 2,\n disabled,\n value: draft[part] ?? (part === \"h\" ? h : m),\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => e.target.select(),\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n const d = e.key === \"ArrowUp\" ? 1 : e.key === \"ArrowDown\" ? -1 : 0;\n if (d) {\n e.preventDefault();\n const hh = Number(shown(\"h\") || 0);\n const mm = Number(shown(\"m\") || 0);\n if (part === \"h\") set(hh + d, mm);\n else set(hh, mm + d);\n }\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value.replace(/\\D/g, \"\").slice(0, 2);\n if (v.length < 2) return setDraft({ ...pending.current, [part]: v });\n commit(part, v);\n if (part === \"h\") minutes.current?.focus();\n },\n onBlur: () => {\n const v = pending.current[part];\n if (v !== undefined) commit(part, v);\n },\n className: \"w-20 flex-none bg-transparent text-center tabular text-fg outline-none coarse:w-24\",\n });\n const control = (\n <InputGroup\n ref={ref}\n size={size}\n leadingIcon\n disabled={disabled}\n invalid={!!error}\n className={cn(\"w-auto\", !(label || description || error) && className)}\n {...(force ? { \"data-force\": force } : {})}\n role=\"group\"\n {...(labelId && !ariaLabel ? { \"aria-labelledby\": labelId } : { \"aria-label\": ariaLabel ?? t(\"timeInput.time\", \"Time\") })}\n >\n <Icon icon={__icon_Clock01Icon} size=\"sm\" className=\"text-fg-tertiary\" />\n <span className=\"flex items-center gap-2\">\n <input {...seg(\"h\")} aria-label={t(\"timeInput.hours\", \"Hours\")} {...(id ? { id } : {})} {...fc.controlProps} />\n <span className=\"text-fg-tertiary\">:</span>\n <input ref={minutes} {...seg(\"m\")} aria-label={t(\"timeInput.minutes\", \"Minutes\")} />\n </span>\n {utc && <InputGroup.Addon>UTC</InputGroup.Addon>}\n </InputGroup>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") TimeInput.displayName = \"TimeInput\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"date-picker.js","names":["_Fragment","__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","preload","joinIds","useHiddenDescription","lazyModule","useDelayedLoading","Spinner","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","whenIdle","Fragment$1","KAESO_DATE_PICKER_VARIANTS","KAESO_DATE_PICKER_DEFAULT_VARIANTS","datePopup","rangePopup","preloadDatePopup","preloadRangePopup","useLoadedOpen","wanted","setWanted","useState","arrived","useReducer","n","loaded","popup","pending","live","setOpen","useCallback","next","was","TriggerButton","ariaLabel","labelledBy","rest","valueId","useId","focused","setFocused","spinning","held","disabled","purpose","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","labelled","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabelledBy","props","field","fc","t","naming","label","date","setDate","useControllable","value","defaultValue","onValueChange","cancel","DatePopup","description","error","formatDate","day","startOfDay","d","rangePresets","DEFAULT_RANGE_PRESETS","presetId","p","presetIdOf","rangeDays","r","DateRangePicker","presetsProp","presetProp","defaults","useMemo","presets","inner","setInner","range","picked","setPicked","days","preset","opening","setOpening","openRange","open","RangePopup","display","formatDateRange","from","KAESO_TIME_INPUT_VARIANTS","KAESO_TIME_INPUT_DEFAULT_VARIANTS","pad","TimeInput","labelId","time","setTime","draft","setDraftState","setDraft","h","m","minutes","shown","part","set","hh","mm","commit","v","seg","total","Clock01Icon","utc"],"sources":["../../src/components/date-picker/date-picker.tsx","../../src/components/date-picker/time-input.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useId, useMemo, useReducer, useRef, useState, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport type { DateRange } from \"react-day-picker\";\nimport type { CalendarProps } from \"../calendar/calendar.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Spinner, useDelayedLoading } from \"../loader/loader.js\";\nimport { Calendar03Icon as __icon_Calendar03Icon } from \"@hugeicons/core-free-icons\";\nimport { PopoverRoot, PopoverTrigger } from \"../popover/popover-root.js\";\nimport { formatDate, formatDateRange } from \"../../format/index.js\";\nimport { lazyModule, preload, type LazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { joinIds, useHiddenDescription } from \"../../utils/hidden-description.js\";\n\nexport const KAESO_DATE_PICKER_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-10 pr-12 gap-6 text-body\" },\n md: { classes: \"h-36 pl-14 pr-16 gap-8 text-body\" },\n lg: { classes: \"h-40 pl-16 pr-18 gap-8 text-body\" },\n },\n} as const;\nexport const KAESO_DATE_PICKER_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nconst datePopup = /* @__PURE__ */ lazyModule(() => import(\"./date-popup.js\"), { base: () => import.meta.url });\nconst rangePopup = /* @__PURE__ */ lazyModule(() => import(\"./range-popup.js\"), { base: () => import.meta.url });\nconst preloadDatePopup = () => preload(datePopup);\nconst preloadRangePopup = () => preload(rangePopup);\n\ninterface LoadedOpen {\n open: boolean;\n pending: boolean;\n setOpen: (open: boolean) => void;\n}\n\nfunction useLoadedOpen(popup: LazyModule<unknown>): LoadedOpen {\n const [wanted, setWanted] = useState(false);\n const [, arrived] = useReducer((n: number) => n + 1, 0);\n const loaded = !!popup.current();\n const pending = wanted && !loaded;\n useEffect(() => {\n if (!pending) return;\n let live = true;\n popup.load().then(\n () => live && arrived(),\n () => live && setWanted(false),\n );\n return () => {\n live = false;\n };\n }, [pending, popup]);\n const setOpen = useCallback((next: boolean) => setWanted((was) => (next && was && !popup.current() ? false : next)), [popup]);\n return { open: wanted && loaded, pending, setOpen };\n}\n\ninterface TriggerButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n size: keyof typeof KAESO_DATE_PICKER_VARIANTS.size;\n children: ReactNode;\n placeholder: boolean;\n invalid?: boolean | undefined;\n controlProps?: object | undefined;\n force?: string | undefined;\n preload: () => void;\n pending: boolean;\n onCancel: () => void;\n labelled: boolean;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n {\n size,\n children,\n placeholder,\n invalid,\n disabled,\n id,\n controlProps,\n force,\n preload,\n pending,\n onCancel,\n labelled,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": labelledBy,\n className,\n ...rest\n },\n ref,\n) {\n const valueId = useId();\n const [focused, setFocused] = useState(false);\n const spinning = useDelayedLoading(pending);\n // A natively disabled button that holds focus drops it to <body>; stay focusable until it blurs.\n const held = !!disabled && focused;\n const purpose = useHiddenDescription(labelledBy ? undefined : ariaLabel);\n const self = useRef<HTMLButtonElement | null>(null);\n const setRef = useCallback(\n (el: HTMLButtonElement | null) => {\n self.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref],\n );\n useEffect(() => whenIdle(preload), [preload]);\n useEffect(() => {\n if (!pending) return;\n const doc = self.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n onCancel();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!self.current?.contains(e.target as Node)) onCancel();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, onCancel]);\n const control = (controlProps ?? {}) as { \"aria-describedby\"?: string | undefined };\n const describedBy = joinIds(purpose.id, labelled && !labelledBy && valueId, control[\"aria-describedby\"]);\n return (\n <>\n <button\n ref={setRef}\n type=\"button\"\n {...rest}\n {...(pending ? { \"aria-expanded\": true, \"data-popup-open\": \"\" } : {})}\n onPointerEnter={(e) => {\n preload();\n rest.onPointerEnter?.(e);\n }}\n onFocus={(e) => {\n setFocused(true);\n preload();\n rest.onFocus?.(e);\n }}\n onClickCapture={(e) => {\n if (!held) return;\n e.preventDefault();\n e.stopPropagation();\n }}\n onBlur={(e) => {\n setFocused(false);\n if (pending && e.relatedTarget && !e.currentTarget.contains(e.relatedTarget)) onCancel();\n rest.onBlur?.(e);\n }}\n {...(held ? { \"aria-disabled\": true, \"data-disabled\": \"\" } : { disabled })}\n {...control}\n {...(labelledBy ? { \"aria-labelledby\": `${labelledBy} ${valueId}` } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(id ? { id } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/date inline-flex min-w-0 cursor-pointer items-center rounded-pill font-medium whitespace-nowrap material-selector transition-control disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n className,\n )}\n >\n {spinning ? (\n <Spinner className=\"text-fg-secondary\" />\n ) : (\n <Icon icon={__icon_Calendar03Icon} size=\"sm\" className=\"text-fg-secondary group-disabled/date:text-fg-disabled\" />\n )}\n <span id={valueId} className={cn(\"truncate tabular\", placeholder && \"font-regular text-fg-tertiary group-disabled/date:text-fg-disabled\")}>\n {children}\n </span>\n </button>\n {purpose.node}\n </>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TriggerButton.displayName = \"TriggerButton\";\n\nexport interface DatePickerProps extends FieldWrapProps {\n value?: Date | null | undefined;\n defaultValue?: Date | null | undefined;\n onValueChange?: ((value: Date | null) => void) | undefined;\n placeholder?: string | undefined;\n size?: keyof typeof KAESO_DATE_PICKER_VARIANTS.size | undefined;\n weekStartsOn?: CalendarProps[\"weekStartsOn\"] | undefined;\n disabledDays?: ((date: Date) => boolean) | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const DatePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [date, setDate] = useControllable<Date | null>(value, defaultValue, onValueChange);\n const { open, pending, setOpen } = useLoadedOpen(datePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const DatePopup = datePopup.current()?.DatePopup;\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={setOpen}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!date}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadDatePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {date ? formatDate(date) : (placeholder ?? t(\"datePicker.chooseDate\", \"Choose a date\"))}\n </TriggerButton>\n </PopoverTrigger>\n {DatePopup && <DatePopup date={date} onDateChange={setDate} onClose={() => setOpen(false)} weekStartsOn={weekStartsOn} disabledDays={disabledDays} />}\n </PopoverRoot>\n </div>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") DatePicker.displayName = \"DatePicker\";\n\nexport interface DateRangePreset {\n id?: string | undefined;\n label: string;\n range: () => DateRange;\n}\n\nconst day = 86_400_000;\nconst startOfDay = (d: Date) => new Date(d.getFullYear(), d.getMonth(), d.getDate());\nfunction rangePresets(t: UiText): DateRangePreset[] {\n return [\n { id: \"Last 24 hours\", label: t(\"datePicker.last24Hours\", \"Last 24 hours\"), range: () => ({ from: new Date(Date.now() - day), to: new Date() }) },\n { id: \"Last 7 days\", label: t(\"datePicker.last7Days\", \"Last 7 days\"), range: () => ({ from: startOfDay(new Date(Date.now() - 6 * day)), to: new Date() }) },\n {\n id: \"Last 30 days\",\n label: t(\"datePicker.last30Days\", \"Last 30 days\"),\n range: () => ({ from: startOfDay(new Date(Date.now() - 29 * day)), to: new Date() }),\n },\n {\n id: \"This month\",\n label: t(\"datePicker.thisMonth\", \"This month\"),\n range: () => ({ from: new Date(new Date().getFullYear(), new Date().getMonth(), 1), to: new Date() }),\n },\n {\n id: \"Last month\",\n label: t(\"datePicker.lastMonth\", \"Last month\"),\n range: () => {\n const n = new Date();\n return { from: new Date(n.getFullYear(), n.getMonth() - 1, 1), to: new Date(n.getFullYear(), n.getMonth(), 0) };\n },\n },\n ];\n}\nexport const DEFAULT_RANGE_PRESETS: DateRangePreset[] = /* @__PURE__ */ rangePresets(englishText);\nconst presetId = (p: DateRangePreset) => p.id ?? p.label;\nconst presetIdOf = (p: DateRangePreset | undefined) => (p ? presetId(p) : null);\n\nexport interface DateRangePickerProps extends Omit<DatePickerProps, \"value\" | \"defaultValue\" | \"onValueChange\"> {\n value?: DateRange | null | undefined;\n defaultValue?: DateRange | null | undefined;\n onValueChange?: ((value: DateRange | null, details: { preset: string | null }) => void) | undefined;\n presets?: DateRangePreset[] | undefined;\n preset?: string | null | undefined;\n}\n\nconst rangeDays = (r: DateRange | null | undefined) => `${r?.from?.toDateString()}/${r?.to?.toDateString()}`;\n\nexport const DateRangePicker = /* @__PURE__ */ forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(props, ref) {\n const {\n value,\n defaultValue = null,\n onValueChange,\n placeholder,\n size = \"md\",\n weekStartsOn = 1,\n disabledDays,\n disabled,\n id,\n className,\n presets: presetsProp,\n preset: presetProp,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const defaults = useMemo(() => rangePresets(t), [t]);\n const presets = presetsProp ?? defaults;\n const naming = { ...(ariaLabel ? { \"aria-label\": ariaLabel } : {}), ...(ariaLabelledBy ? { \"aria-labelledby\": ariaLabelledBy } : {}) };\n const labelled = !!(label || field);\n const [inner, setInner] = useState<DateRange | null>(defaultValue);\n const range = value !== undefined ? value : inner;\n const [picked, setPicked] = useState<string | null>(null);\n const days = rangeDays(range);\n const preset = presetProp !== undefined ? presetProp : presetIdOf(presets.find((p) => presetId(p) === picked && rangeDays(p.range()) === days));\n const { open, pending, setOpen } = useLoadedOpen(rangePopup);\n const cancel = useCallback(() => setOpen(false), [setOpen]);\n const [opening, setOpening] = useState(0);\n const openRange = useCallback(\n (next: boolean) => {\n if (next && !open) setOpening((n) => n + 1);\n setOpen(next);\n },\n [open, setOpen],\n );\n const RangePopup = rangePopup.current()?.RangePopup;\n const presetName = preset === null ? null : (presets.find((p) => presetId(p) === preset)?.label ?? preset);\n const display =\n presetName ??\n (range?.from && range.to\n ? formatDateRange(range.from, range.to)\n : range?.from\n ? formatDate(range.from)\n : (placeholder ?? t(\"datePicker.chooseRange\", \"Choose a date range\")));\n const control = (\n <div ref={ref} className={cn(\"inline-flex\", !(label || description || error) && className)}>\n <PopoverRoot open={open} onOpenChange={openRange}>\n <PopoverTrigger>\n <TriggerButton\n size={size}\n placeholder={!range?.from && !preset}\n invalid={!!error}\n disabled={disabled}\n id={id}\n controlProps={fc.controlProps}\n force={force}\n preload={preloadRangePopup}\n pending={pending}\n onCancel={cancel}\n labelled={labelled}\n {...naming}\n >\n {display}\n </TriggerButton>\n </PopoverTrigger>\n {RangePopup && (\n <RangePopup\n key={opening}\n range={range}\n preset={preset}\n presets={presets}\n onPick={(next, from) => {\n if (value === undefined) setInner(next);\n setPicked(from);\n onValueChange?.(next, { preset: from });\n setOpen(false);\n }}\n onClose={() => setOpen(false)}\n weekStartsOn={weekStartsOn}\n disabledDays={disabledDays}\n />\n )}\n </PopoverRoot>\n </div>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") DateRangePicker.displayName = \"DateRangePicker\";\n\nexport type { DateRange };\n","import type * as React from \"react\";\nimport { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useControllable } from \"../../utils/use-controllable.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, KAESO_INPUT_GROUP_VARIANTS, type InputSize } from \"../input/input-group.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Clock01Icon as __icon_Clock01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TIME_INPUT_VARIANTS = {\n size: KAESO_INPUT_GROUP_VARIANTS.size,\n} as const;\nexport const KAESO_TIME_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface TimeInputProps extends FieldWrapProps {\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n size?: InputSize | undefined;\n disabled?: boolean | undefined;\n utc?: boolean | undefined;\n id?: string | undefined;\n className?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst pad = (n: number) => String(n).padStart(2, \"0\");\n\nexport const TimeInput = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeInputProps>(function TimeInput(props, ref) {\n const {\n value,\n defaultValue = \"09:00\",\n onValueChange,\n size = \"md\",\n disabled,\n utc,\n id,\n className,\n label,\n description,\n error,\n optional,\n required,\n layout,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const t = useUiText();\n const labelId = field ? field.labelId : label && fc.wrapId ? `${fc.wrapId}-label` : undefined;\n const [time, setTime] = useControllable(value, defaultValue, onValueChange);\n const [draft, setDraftState] = useState<{ h?: string | undefined; m?: string | undefined }>({});\n const pending = useRef(draft);\n const setDraft = (next: { h?: string | undefined; m?: string | undefined }) => {\n pending.current = next;\n setDraftState(next);\n };\n const [h = \"00\", m = \"00\"] = time.split(\":\");\n const minutes = useRef<HTMLInputElement>(null);\n const shown = (part: \"h\" | \"m\") => pending.current[part] ?? (part === \"h\" ? h : m);\n const set = (hh: number, mm: number) => {\n setDraft({});\n const next = `${pad(((hh % 24) + 24) % 24)}:${pad(((mm % 60) + 60) % 60)}`;\n if (next !== time) setTime(next);\n };\n const commit = (part: \"h\" | \"m\", v: string) => {\n const n = Number(v || 0);\n if (part === \"h\") set(Math.min(23, n), Number(shown(\"m\") || 0));\n else set(Number(shown(\"h\") || 0), Math.min(59, n));\n };\n const seg = (part: \"h\" | \"m\") => ({\n inputMode: \"numeric\" as const,\n maxLength: 2,\n disabled,\n value: draft[part] ?? (part === \"h\" ? h : m),\n onFocus: (e: React.FocusEvent<HTMLInputElement>) => e.target.select(),\n onKeyDown: (e: KeyboardEvent<HTMLInputElement>) => {\n const d = e.key === \"ArrowUp\" ? 1 : e.key === \"ArrowDown\" ? -1 : 0;\n if (d) {\n e.preventDefault();\n const hh = Number(shown(\"h\") || 0);\n const mm = Number(shown(\"m\") || 0);\n if (part === \"h\") set(hh + d, mm);\n else {\n const total = (((hh * 60 + mm + d) % 1440) + 1440) % 1440;\n set(Math.floor(total / 60), total % 60);\n }\n }\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const v = e.target.value.replace(/\\D/g, \"\").slice(0, 2);\n if (v.length < 2) return setDraft({ ...pending.current, [part]: v });\n commit(part, v);\n if (part === \"h\") minutes.current?.focus();\n },\n onBlur: () => {\n const v = pending.current[part];\n if (v !== undefined) commit(part, v);\n },\n className: cn(\n \"w-20 flex-none bg-transparent tabular text-fg outline-none disabled:text-fg-disabled coarse:w-24\",\n part === \"h\" ? \"text-right\" : \"text-left\",\n ),\n });\n const control = (\n <InputGroup\n ref={ref}\n size={size}\n leadingIcon\n disabled={disabled}\n invalid={!!error}\n className={cn(\"w-auto self-start\", !(label || description || error) && className)}\n {...(force ? { \"data-force\": force } : {})}\n role=\"group\"\n {...(labelId && !ariaLabel ? { \"aria-labelledby\": labelId } : { \"aria-label\": ariaLabel ?? t(\"timeInput.time\", \"Time\") })}\n >\n <Icon icon={__icon_Clock01Icon} size=\"sm\" className=\"text-fg-tertiary\" />\n <span className=\"flex items-center\">\n <input {...seg(\"h\")} aria-label={t(\"timeInput.hours\", \"Hours\")} {...(id ? { id } : {})} {...fc.controlProps} />\n <span className=\"px-1 text-fg-tertiary\" aria-hidden>\n :\n </span>\n <input ref={minutes} {...seg(\"m\")} aria-label={t(\"timeInput.minutes\", \"Minutes\")} />\n </span>\n {utc && <InputGroup.Addon>UTC</InputGroup.Addon>}\n </InputGroup>\n );\n if (field) return control;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, control);\n});\nif (process.env.NODE_ENV !== \"production\") TimeInput.displayName = \"TimeInput\";\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { n as t } from "../chunks/button-CzuxqawA.js";
3
+ import { n as t } from "../chunks/button-IblhXUyZ.js";
4
4
  import { n } from "../chunks/resize-motion-DS3rIIqy.js";
5
- import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-Cg9A_6SF.js";
5
+ import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "../chunks/dialog-2zb6ClNR.js";
6
6
  import { Fragment as p, createContext as m, forwardRef as h, useContext as g, useEffect as _, useId as ee, useLayoutEffect as v, useMemo as y, useRef as b, useState as x } from "react";
7
7
  import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
8
8
  //#region src/components/dialog/step-dialog.tsx
@@ -27,72 +27,83 @@ function k() {
27
27
  return typeof window < "u" && !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
28
28
  }
29
29
  var A = (e) => e?.closest("[data-dialog-body]") ?? null, j = /* @__PURE__ */ h(function({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSubmit: c, submitting: l, tone: u = "default", size: d = "sm", inline: p, defaultStep: m = 0, result: h }, g) {
30
- let [T, E] = x(m), O = ee(), j = e(), [M, N] = x(!1), [P, F] = x(!1), [I, L] = x(null), [R, te] = x({
30
+ let [T, E] = x(m), O = ee(), j = e(), [M, N] = x(!1), [P, F] = x(!1), [I, L] = x(null), [R, z] = x(null), [B, te] = x({
31
31
  open: n,
32
32
  defaultStep: m
33
33
  });
34
- (R.open !== n || R.defaultStep !== m) && (te({
34
+ (B.open !== n || B.defaultStep !== m) && (te({
35
35
  open: n,
36
36
  defaultStep: m
37
- }), (n || R.defaultStep !== m) && (E(m), N(!1), L(null)));
38
- let z = b([]), B = b(null), V = b(!1), H = b(T), U = (e) => {
39
- V.current = !0, N(!0), L(k() ? null : e > T ? "forward" : "back"), E(e);
37
+ }), (n || B.defaultStep !== m) && (E(m), N(!1), L(null)));
38
+ let V = b([]), H = b(null), U = b(!1), W = b(T), G = (e) => {
39
+ U.current = !0, z(null), N(!0), L(k() ? null : e > T ? "forward" : "back"), E(e);
40
40
  };
41
41
  v(() => {
42
- if (H.current === T) return;
43
- H.current = T;
44
- let e = A(z.current[T]);
42
+ if (W.current === T) return;
43
+ W.current = T;
44
+ let e = A(V.current[T]);
45
45
  e && (e.scrollTop = 0);
46
46
  }, [T]);
47
- let W = !!h;
47
+ let K = !!h;
48
48
  v(() => {
49
- if (!W) return;
50
- let e = A(B.current);
51
- e && (e.scrollTop = 0), f(B.current);
52
- }, [W]), _(() => {
53
- V.current && (V.current = !1, f(z.current[T]));
49
+ if (!K) return;
50
+ let e = A(H.current);
51
+ e && (e.scrollTop = 0), f(H.current);
52
+ }, [K]), _(() => {
53
+ U.current && (U.current = !1, f(V.current[T]));
54
54
  }, [T]);
55
- let G = a[Math.min(T, a.length - 1)], K = T >= a.length - 1, q = G?.blockedReason, J = () => {
56
- if (q || l || P) return;
57
- if (K) return c();
58
- let e = G?.onContinue;
59
- if (!e) return U(T + 1);
55
+ let q = a[Math.min(T, a.length - 1)], J = T >= a.length - 1, Y = q?.blockedReason;
56
+ R && R !== Y && z(null);
57
+ let X = () => {
58
+ if (Y) return z(Y);
59
+ if (l || P) return;
60
+ if (J) return c();
61
+ let e = q?.onContinue;
62
+ if (!e) return G(T + 1);
60
63
  let t = T + 1;
61
- F(!0), Promise.resolve().then(e).then((e) => e && U(t), () => {}).finally(() => F(!1));
62
- }, Y = b(J);
64
+ F(!0), Promise.resolve().then(e).then((e) => e && G(t), () => {}).finally(() => F(!1));
65
+ }, Z = b(X);
63
66
  v(() => {
64
- Y.current = J;
67
+ Z.current = X;
65
68
  });
66
- let [X, ne] = x(0);
69
+ let [Q, ne] = x(0);
67
70
  _(() => {
68
- X && Y.current();
69
- }, [X]);
70
- let re = y(() => ({ advance: () => ne((e) => e + 1) }), []), Z = !!l || P, Q = {
71
+ Q && Z.current();
72
+ }, [Q]);
73
+ let re = y(() => ({ advance: () => ne((e) => e + 1) }), []), $ = !!l || P, ie = {
71
74
  current: T + 1,
72
75
  total: a.length
73
- }, ie = j("stepDialog.continue", "Continue"), [ae, oe = ""] = j("stepDialog.stepAnnouncement", "Step {current} of {total}: {title}", Q).split("{title}"), se = /* @__PURE__ */ C("div", {
76
+ }, ae = j("stepDialog.continue", "Continue"), [oe, se = ""] = j("stepDialog.stepAnnouncement", "Step {current} of {total}: {title}", ie).split("{title}"), ce = /* @__PURE__ */ C("div", {
74
77
  className: "-m-8 overflow-clip p-8",
75
78
  children: a.map((e, t) => /* @__PURE__ */ w("section", {
76
79
  ref: (e) => {
77
- z.current[t] = e;
80
+ V.current[t] = e;
78
81
  },
79
82
  "aria-labelledby": `${O}-step-${e.id}`,
80
83
  ...t === T ? I ? { "data-enter": I } : {} : { hidden: !0 },
81
84
  className: "flex min-w-0 flex-col gap-16 step-motion",
82
- children: [/* @__PURE__ */ w("div", {
83
- className: "flex flex-col gap-4",
84
- children: [/* @__PURE__ */ C("h3", {
85
- id: `${O}-step-${e.id}`,
86
- tabIndex: -1,
87
- className: "text-body-lg font-semibold text-fg outline-none",
88
- children: e.title
89
- }), e.description && /* @__PURE__ */ C("p", {
85
+ children: [
86
+ /* @__PURE__ */ w("div", {
87
+ className: "flex flex-col gap-4",
88
+ children: [/* @__PURE__ */ C("h3", {
89
+ id: `${O}-step-${e.id}`,
90
+ tabIndex: -1,
91
+ className: "text-body-lg font-medium text-fg outline-none",
92
+ children: e.title
93
+ }), e.description && /* @__PURE__ */ C("p", {
94
+ className: "text-small text-fg-secondary",
95
+ children: e.description
96
+ })]
97
+ }),
98
+ e.content,
99
+ t === T && R && /* @__PURE__ */ C("p", {
100
+ "data-step-refused": "",
90
101
  className: "text-small text-fg-secondary",
91
- children: e.description
92
- })]
93
- }), e.content]
102
+ children: R
103
+ })
104
+ ]
94
105
  }, e.id))
95
- }), $ = {
106
+ }), le = {
96
107
  ...n === void 0 ? {} : { open: n },
97
108
  ...r ? { onOpenChange: r } : {},
98
109
  ...p ? { inline: p } : {},
@@ -100,7 +111,7 @@ var A = (e) => e?.closest("[data-dialog-body]") ?? null, j = /* @__PURE__ */ h(f
100
111
  };
101
112
  return h ? /* @__PURE__ */ w(s, {
102
113
  ref: g,
103
- ...$,
114
+ ...le,
104
115
  anchor: "top",
105
116
  size: h.size ?? d,
106
117
  title: h.title,
@@ -113,7 +124,7 @@ var A = (e) => e?.closest("[data-dialog-body]") ?? null, j = /* @__PURE__ */ h(f
113
124
  }), /* @__PURE__ */ C("div", {
114
125
  className: "-m-8 overflow-clip p-8",
115
126
  children: /* @__PURE__ */ C("section", {
116
- ref: B,
127
+ ref: H,
117
128
  ...k() ? {} : { "data-enter": "forward" },
118
129
  className: "flex min-w-0 flex-col step-motion",
119
130
  children: h.content
@@ -121,40 +132,40 @@ var A = (e) => e?.closest("[data-dialog-body]") ?? null, j = /* @__PURE__ */ h(f
121
132
  })]
122
133
  }) : /* @__PURE__ */ w(s, {
123
134
  ref: g,
124
- ...$,
135
+ ...le,
125
136
  anchor: "top",
126
- busy: Z,
137
+ busy: $,
127
138
  size: d,
128
139
  title: i,
129
- description: a.length > 1 ? j("stepDialog.stepOf", "Step {current} of {total}", Q) : void 0,
130
- onSubmit: J,
140
+ description: a.length > 1 ? j("stepDialog.stepOf", "Step {current} of {total}", ie) : void 0,
141
+ onSubmit: X,
131
142
  footer: /* @__PURE__ */ w(S, { children: [T > 0 ? /* @__PURE__ */ C(t, {
132
- onClick: () => U(T - 1),
133
- disabled: Z,
143
+ onClick: () => G(T - 1),
144
+ disabled: $,
134
145
  children: j("stepDialog.back", "Back")
135
146
  }) : /* @__PURE__ */ C(t, {
136
147
  onClick: () => r?.(!1),
137
- disabled: Z,
148
+ disabled: $,
138
149
  children: j("stepDialog.cancel", "Cancel")
139
150
  }), /* @__PURE__ */ C(t, {
140
- variant: K && u === "danger" ? "danger" : "primary",
141
- loading: K ? l : P,
142
- disabled: !!q,
143
- ...q ? { disabledReason: q } : {},
144
- onClick: J,
145
- children: K ? o : G?.continueLabel ?? ie
151
+ variant: J && u === "danger" ? "danger" : "primary",
152
+ loading: J ? l : P,
153
+ disabled: !!Y,
154
+ ...Y ? { disabledReason: Y } : {},
155
+ onClick: X,
156
+ children: J ? o : q?.continueLabel ?? ae
146
157
  })] }),
147
158
  children: [/* @__PURE__ */ C("p", {
148
159
  className: "sr-only",
149
160
  "aria-live": "polite",
150
- children: M && G && /* @__PURE__ */ w(S, { children: [
151
- ae,
152
- G.title,
153
- oe
154
- ] })
161
+ children: R ?? (M && q && /* @__PURE__ */ w(S, { children: [
162
+ oe,
163
+ q.title,
164
+ se
165
+ ] }))
155
166
  }), /* @__PURE__ */ C(D.Provider, {
156
167
  value: re,
157
- children: se
168
+ children: ce
158
169
  })]
159
170
  });
160
171
  });
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":["_Fragment","useUiText","Button","KAESO_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_VARIANTS","LayerDialog","Dialog","KAESO_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","AlertDialog","focusDialogSection","Fragment$1","KAESO_STEP_DIALOG_VARIANTS","KAESO_STEP_DIALOG_DEFAULT_VARIANTS","StepDialogContext","useStepDialog","useContext","reducedMotion","bodyOf","el","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","continuing","setContinuing","enter","setEnter","opened","setOpened","open","sections","useRef","resultSection","moved","shown","go","to","body","finished","result","useLayoutEffect","useEffect","step","steps","last","blocked","next","submitting","onSubmit","check","ok","latestNext","advanced","setAdvanced","controls","useMemo","n","waiting","progress","continueLabel","heardBefore","heardAfter","stepList","i","s","frame","onOpenChange","inline","size","tone","submitLabel","KAESO_DIALOG_SCOPE_VARIANTS","KAESO_DIALOG_SCOPE_DEFAULT_VARIANTS","unmountClosed","DialogScope","state","setState","showing","closed","tracker","id","DialogScopeContext","Fragment"],"sources":["../../src/components/dialog/step-dialog.tsx","../../src/components/dialog/scope.tsx"],"sourcesContent":["import { createContext, forwardRef, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\nimport { Dialog, KAESO_DIALOG_VARIANTS } from \"./dialog.js\";\nimport { focusDialogSection } from \"./focus.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STEP_DIALOG_VARIANTS = {\n size: {\n sm: { classes: KAESO_DIALOG_VARIANTS.size.sm.classes },\n md: { classes: KAESO_DIALOG_VARIANTS.size.md.classes },\n lg: { classes: KAESO_DIALOG_VARIANTS.size.lg.classes },\n },\n tone: {\n default: { classes: \"\" },\n danger: { classes: \"\" },\n },\n} as const;\nexport const KAESO_STEP_DIALOG_DEFAULT_VARIANTS = { size: \"sm\", tone: \"default\" } as const;\n\nexport interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | undefined;\n continueLabel?: string | undefined;\n onContinue?: (() => Promise<boolean> | boolean) | undefined;\n}\n\nexport interface StepDialogResult {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer: ReactNode;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n}\n\nexport interface StepDialogProps {\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n title: ReactNode;\n steps: DialogStep[];\n submitLabel: string;\n onSubmit: () => void;\n submitting?: boolean | undefined;\n tone?: keyof typeof KAESO_STEP_DIALOG_VARIANTS.tone | undefined;\n size?: keyof typeof KAESO_STEP_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n result?: StepDialogResult | undefined;\n}\n\nexport interface StepDialogControls {\n advance: () => void;\n}\n\nconst StepDialogContext = /* @__PURE__ */ createContext<StepDialogControls | null>(null);\n\nexport function useStepDialog(): StepDialogControls | null {\n return useContext(StepDialogContext);\n}\n\nfunction reducedMotion() {\n return typeof window !== \"undefined\" && !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport const StepDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, StepDialogProps>(function StepDialog(\n { open, onOpenChange, title, steps, submitLabel, onSubmit, submitting, tone = \"default\", size = \"sm\", inline, defaultStep = 0, result },\n ref,\n) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = useState(false);\n const [continuing, setContinuing] = useState(false);\n const [enter, setEnter] = useState<\"forward\" | \"back\" | null>(null);\n const [opened, setOpened] = useState({ open, defaultStep });\n if (opened.open !== open || opened.defaultStep !== defaultStep) {\n setOpened({ open, defaultStep });\n if (open || opened.defaultStep !== defaultStep) {\n setIndex(defaultStep);\n setAnnounced(false);\n setEnter(null);\n }\n }\n const sections = useRef<(HTMLElement | null)[]>([]);\n const resultSection = useRef<HTMLElement | null>(null);\n const moved = useRef(false);\n const shown = useRef(index);\n const go = (to: number) => {\n moved.current = true;\n setAnnounced(true);\n setEnter(reducedMotion() ? null : to > index ? \"forward\" : \"back\");\n setIndex(to);\n };\n useLayoutEffect(() => {\n if (shown.current === index) return;\n shown.current = index;\n const body = bodyOf(sections.current[index]);\n if (body) body.scrollTop = 0;\n }, [index]);\n const finished = !!result;\n useLayoutEffect(() => {\n if (!finished) return;\n const body = bodyOf(resultSection.current);\n if (body) body.scrollTop = 0;\n focusDialogSection(resultSection.current);\n }, [finished]);\n useEffect(() => {\n if (!moved.current) return;\n moved.current = false;\n focusDialogSection(sections.current[index]);\n }, [index]);\n const step = steps[Math.min(index, steps.length - 1)];\n const last = index >= steps.length - 1;\n const blocked = step?.blockedReason;\n const next = () => {\n if (blocked || submitting || continuing) return;\n if (last) return onSubmit();\n const check = step?.onContinue;\n if (!check) return go(index + 1);\n const to = index + 1;\n setContinuing(true);\n void Promise.resolve()\n .then(check)\n .then(\n (ok) => ok && go(to),\n () => {},\n )\n .finally(() => setContinuing(false));\n };\n const latestNext = useRef(next);\n useLayoutEffect(() => {\n latestNext.current = next;\n });\n const [advanced, setAdvanced] = useState(0);\n useEffect(() => {\n if (advanced) latestNext.current();\n }, [advanced]);\n const controls = useMemo<StepDialogControls>(() => ({ advance: () => setAdvanced((n) => n + 1) }), []);\n const waiting = !!submitting || continuing;\n const progress = { current: index + 1, total: steps.length };\n const continueLabel = t(\"stepDialog.continue\", \"Continue\");\n const [heardBefore, heardAfter = \"\"] = t(\"stepDialog.stepAnnouncement\", \"Step {current} of {total}: {title}\", progress).split(\"{title}\");\n const stepList = (\n <div className=\"-m-8 overflow-clip p-8\">\n {steps.map((s, i) => (\n <section\n key={s.id}\n ref={(el) => {\n sections.current[i] = el;\n }}\n aria-labelledby={`${uid}-step-${s.id}`}\n {...(i !== index ? { hidden: true } : enter ? { \"data-enter\": enter } : {})}\n className=\"flex min-w-0 flex-col gap-16 step-motion\"\n >\n <div className=\"flex flex-col gap-4\">\n <h3 id={`${uid}-step-${s.id}`} tabIndex={-1} className=\"text-body-lg font-semibold text-fg outline-none\">\n {s.title}\n </h3>\n {s.description && <p className=\"text-small text-fg-secondary\">{s.description}</p>}\n </div>\n {s.content}\n </section>\n ))}\n </div>\n );\n const frame = {\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n ...(inline ? { inline } : {}),\n persistent: true,\n };\n if (result)\n return (\n <Dialog ref={ref} {...frame} anchor=\"top\" size={result.size ?? size} title={result.title} description={result.description} footer={result.footer}>\n <p className=\"sr-only\" aria-live=\"polite\">\n {result.title}\n </p>\n <div className=\"-m-8 overflow-clip p-8\">\n <section ref={resultSection} {...(reducedMotion() ? {} : { \"data-enter\": \"forward\" })} className=\"flex min-w-0 flex-col step-motion\">\n {result.content}\n </section>\n </div>\n </Dialog>\n );\n return (\n <Dialog\n ref={ref}\n {...frame}\n anchor=\"top\"\n busy={waiting}\n size={size}\n title={title}\n description={steps.length > 1 ? t(\"stepDialog.stepOf\", \"Step {current} of {total}\", progress) : undefined}\n onSubmit={next}\n footer={\n <>\n {index > 0 ? (\n <Button onClick={() => go(index - 1)} disabled={waiting}>\n {t(\"stepDialog.back\", \"Back\")}\n </Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)} disabled={waiting}>\n {t(\"stepDialog.cancel\", \"Cancel\")}\n </Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last ? submitting : continuing}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n >\n {last ? submitLabel : (step?.continueLabel ?? continueLabel)}\n </Button>\n </>\n }\n >\n <p className=\"sr-only\" aria-live=\"polite\">\n {announced && step && (\n <>\n {heardBefore}\n {step.title}\n {heardAfter}\n </>\n )}\n </p>\n <StepDialogContext.Provider value={controls}>{stepList}</StepDialogContext.Provider>\n </Dialog>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StepDialog.displayName = \"StepDialog\";\n","import { Fragment, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { DialogScopeContext, type DialogScopeTracker } from \"../../utils/dialog-scope.js\";\n\nexport const KAESO_DIALOG_SCOPE_VARIANTS = {} as const;\nexport const KAESO_DIALOG_SCOPE_DEFAULT_VARIANTS = {} as const;\n\nexport interface DialogScopeProps {\n open: boolean;\n children: ReactNode;\n}\n\ninterface ScopeState {\n open: boolean;\n session: number;\n mounted: boolean;\n}\n\nconst unmountClosed = (s: ScopeState): ScopeState => (s.open || !s.mounted ? s : { ...s, mounted: false });\n\nexport function DialogScope({ open, children }: DialogScopeProps) {\n const [state, setState] = useState<ScopeState>({ open, session: 0, mounted: open });\n if (state.open !== open) setState({ open, session: open ? state.session + 1 : state.session, mounted: open || state.mounted });\n const showing = useRef(new Set<string>());\n const closed = useRef(!open);\n useEffect(() => {\n closed.current = !open;\n if (!open && showing.current.size === 0) setState(unmountClosed);\n }, [open]);\n const tracker = useMemo<DialogScopeTracker>(\n () => ({\n showing: (id) => void showing.current.add(id),\n hidden: (id) => {\n showing.current.delete(id);\n if (closed.current && showing.current.size === 0) setState(unmountClosed);\n },\n }),\n [],\n );\n if (!state.mounted) return null;\n return (\n <DialogScopeContext.Provider value={tracker}>\n <Fragment key={state.session}>{children}</Fragment>\n </DialogScopeContext.Provider>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DialogScope.displayName = \"DialogScope\";\n"],"mappings":";;;;;;;;AAMA,IAAac,IAA6B;CACxC,MAAM;EACJ,IAAI,EAAE,SAASN,EAAsB,KAAK,GAAG,QAAQ;EACrD,IAAI,EAAE,SAASA,EAAsB,KAAK,GAAG,QAAQ;EACrD,IAAI,EAAE,SAASA,EAAsB,KAAK,GAAG,QAAQ;CACvD;CACA,MAAM;EACJ,SAAS,EAAE,SAAS,GAAG;EACvB,QAAQ,EAAE,SAAS,GAAG;CACxB;AACF,GACaO,IAAqC;CAAE,MAAM;CAAM,MAAM;AAAU,GAuC1EC,IAAoC,kBAAyC,IAAI;AAEvF,SAAgBC,IAA2C;CACzD,OAAOC,EAAWF,CAAiB;AACrC;AAEA,SAASG,IAAgB;CACvB,OAAO,OAAO,SAAW,OAAe,CAAC,CAAC,OAAO,aAAa,kCAAkC,CAAC,CAAC;AACpG;AAEA,IAAMC,KAAU,MAAuCC,GAAI,QAAqB,oBAAoB,KAAK,MAE5FC,IAA6B,kBAA4C,SACpF,EAAE,SAAM,iBAAc,UAAO,UAAO,gBAAa,aAAU,eAAY,UAAO,WAAW,UAAO,MAAM,WAAQ,iBAAc,GAAG,aAC/H,GACA;CACA,IAAM,CAACC,GAAOC,KAAYC,EAASC,CAAW,GACxCC,IAAMC,GAAM,GACZC,IAAI5B,EAAU,GACd,CAAC6B,GAAWC,KAAgBN,EAAS,EAAK,GAC1C,CAACO,GAAYC,KAAiBR,EAAS,EAAK,GAC5C,CAACS,GAAOC,KAAYV,EAAoC,IAAI,GAC5D,CAACW,GAAQC,MAAaZ,EAAS;EAAE;EAAM;CAAY,CAAC;CAC1D,CAAIW,EAAO,SAASE,KAAQF,EAAO,gBAAgBV,OACjDW,GAAU;EAAE;EAAM;CAAY,CAAC,IAC3BC,KAAQF,EAAO,gBAAgBV,OACjCF,EAASE,CAAW,GACpBK,EAAa,EAAK,GAClBI,EAAS,IAAI;CAGjB,IAAMI,IAAWC,EAA+B,CAAC,CAAC,GAC5CC,IAAgBD,EAA2B,IAAI,GAC/CE,IAAQF,EAAO,EAAK,GACpBG,IAAQH,EAAOjB,CAAK,GACpBqB,KAAM,MAAe;EAIzB,AAHA,EAAM,UAAU,IAChBb,EAAa,EAAI,GACjBI,EAAShB,EAAc,IAAI,OAAO0B,IAAKtB,IAAQ,YAAY,MAAM,GACjEC,EAASqB,CAAE;CACb;CACA,QAAsB;EACpB,IAAIF,EAAM,YAAYpB,GAAO;EAC7B,EAAM,UAAUA;EAChB,IAAMuB,IAAO1B,EAAOmB,EAAS,QAAQhB,EAAM;EAC3C,AAAIuB,MAAM,EAAK,YAAY;CAC7B,GAAG,CAACvB,CAAK,CAAC;CACV,IAAMwB,IAAW,CAAC,CAACC;CAOnB,AANAC,QAAsB;EACpB,IAAI,CAACF,GAAU;EACf,IAAMD,IAAO1B,EAAOqB,EAAc,OAAO;EAEzC,AADIK,MAAM,EAAK,YAAY,IAC3BlC,EAAmB6B,EAAc,OAAO;CAC1C,GAAG,CAACM,CAAQ,CAAC,GACbG,QAAgB;EACd,AAAKR,EAAM,YACX,EAAM,UAAU,IAChB9B,EAAmB2B,EAAS,QAAQhB,EAAM;CAC5C,GAAG,CAACA,CAAK,CAAC;CACV,IAAM4B,IAAOC,EAAM,KAAK,IAAI7B,GAAO6B,EAAM,SAAS,CAAC,IAC7CC,IAAO9B,KAAS6B,EAAM,SAAS,GAC/BE,IAAUH,GAAM,eAChBI,UAAa;EACjB,IAAID,KAAWE,KAAcxB,GAAY;EACzC,IAAIqB,GAAM,OAAOI,EAAS;EAC1B,IAAMC,IAAQP,GAAM;EACpB,IAAI,CAACO,GAAO,OAAOd,EAAGrB,IAAQ,CAAC;EAC/B,IAAMsB,IAAKtB,IAAQ;EAEnB,AADAU,EAAc,EAAI,GAClB,QAAa,QAAQ,CAAC,CACnB,KAAKyB,CAAK,CAAC,CACX,MACE,MAAOC,KAAMf,EAAGC,CAAE,SACb,CAAC,CACT,CAAC,CACA,cAAcZ,EAAc,EAAK,CAAC;CACvC,GACM2B,IAAapB,EAAOe,CAAI;CAC9B,QAAsB;EACpB,EAAW,UAAUA;CACvB,CAAC;CACD,IAAM,CAACM,GAAUC,MAAerC,EAAS,CAAC;CAC1C,QAAgB;EACd,AAAIoC,KAAUD,EAAW,QAAQ;CACnC,GAAG,CAACC,CAAQ,CAAC;CACb,IAAME,KAAWC,SAAmC,EAAE,eAAeF,IAAa,MAAMG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,GAC/FC,IAAU,CAAC,CAACV,KAAcxB,GAC1BmC,IAAW;EAAE,SAAS5C,IAAQ;EAAG,OAAO6B,EAAM;CAAO,GACrDgB,KAAgBvC,EAAE,uBAAuB,UAAU,GACnD,CAACwC,IAAaC,KAAa,MAAMzC,EAAE,+BAA+B,sCAAsCsC,CAAQ,CAAC,CAAC,MAAM,SAAS,GACjII,KACJ,kBAAC,OAAD;EAAK,WAAU;EACZ,UAAAnB,EAAM,KAAK,GAAG,MACb,kBAAC,WAAD;GAEE,MAAM,MAAO;IACX,EAAS,QAAQoB,KAAKnD;GACxB;GACA,mBAAiB,GAAGM,EAAI,QAAQ8C,EAAE;GAClC,GAAKD,MAAMjD,IAA2BW,IAAQ,EAAE,cAAcA,EAAM,IAAI,CAAC,IAAtD,EAAE,QAAQ,GAAK;GAClC,WAAU;GAPZ,UAAA,CASE,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,kBAAC,MAAD;KAAI,IAAI,GAAGP,EAAI,QAAQ8C,EAAE;KAAM,UAAU;KAAI,WAAU;KACpD,UAAAA,EAAE;IACD,CAAA,GACHA,EAAE,eAAe,kBAAC,KAAD;KAAG,WAAU;KAAgC,UAAAA,EAAE;IAAe,CAAA,CAC7E;GACJ,CAAA,GAAAA,EAAE,OACI;EAfF,GAAAA,EAAE,EAeA,CACV;CACE,CAAA,GAEDC,IAAQ;EACZ,GAAIpC,MAAS,KAAA,IAAuB,CAAC,IAAZ,EAAE,QAAK;EAChC,GAAIqC,IAAe,EAAE,gBAAa,IAAI,CAAC;EACvC,GAAIC,IAAS,EAAE,UAAO,IAAI,CAAC;EAC3B,YAAY;CACd;CAcA,OAbI5B,IAEA,kBAACzC,GAAD;EAAa;EAAK,GAAImE;EAAO,QAAO;EAAM,MAAM1B,EAAO,QAAQ6B;EAAM,OAAO7B,EAAO;EAAO,aAAaA,EAAO;EAAa,QAAQA,EAAO;EAA1I,UAAA,CACE,kBAAC,KAAD;GAAG,WAAU;GAAU,aAAU;GAC9B,UAAAA,EAAO;EACP,CAAA,GACH,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAAC,WAAD;IAAS,KAAKP;IAAe,GAAKtB,EAAc,IAAI,CAAC,IAAI,EAAE,cAAc,UAAU;IAAI,WAAU;IAC9F,UAAA6B,EAAO;GACD,CAAA;EACN,CAAA,CACC;C,KAGV,kBAACzC,GAAD;EACO;EACL,GAAImE;EACJ,QAAO;EACP,MAAMR;EACA;EACC;EACP,aAAad,EAAM,SAAS,IAAIvB,EAAE,qBAAqB,6BAA6BsC,CAAQ,IAAI,KAAA;EAChG,UAAUZ;EACV,QACE,kBAAAvD,GAAA,EAAA,UAAA,CACGuB,IAAQ,IACP,kBAACrB,GAAD;GAAQ,eAAe0C,EAAGrB,IAAQ,CAAC;GAAG,UAAU2C;GAC7C,UAAArC,EAAE,mBAAmB,MAAM;EACtB,CAAA,IAER,kBAAC3B,GAAD;GAAQ,eAAeyE,IAAe,EAAK;GAAG,UAAUT;GACrD,UAAArC,EAAE,qBAAqB,QAAQ;EAC1B,CAAA,GAEV,kBAAC3B,GAAD;GACE,SAASmD,KAAQyB,MAAS,WAAW,WAAW;GAChD,SAASzB,IAAOG,IAAaxB;GAC7B,UAAU,CAAC,CAACsB;GACZ,GAAKA,IAAU,EAAE,gBAAgBA,EAAQ,IAAI,CAAC;GAC9C,SAASC;GAER,UAAAF,IAAO0B,IAAe5B,GAAM,iBAAiBiB;EACxC,CAAA,CACR,EAAA,CAAA;EA7BN,UAAA,CAgCE,kBAAC,KAAD;GAAG,WAAU;GAAU,aAAU;GAC9B,UAAAtC,KAAaqB,KACZ,kBAAAnD,GAAA,EAAA,UAAA;IACGqE;IACAlB,EAAK;IACLmB;GACD,EAAA,CAAA;EAEH,CAAA,GACH,kBAACtD,EAAkB,UAAnB;GAA4B,OAAO+C;GAAW,UAAAQ;EAAqC,CAAA,CAC7E;;AAEZ,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;;;ACvOpE,IAAaS,IAA8B,CAAC,GAC/BC,IAAsC,CAAC,GAa9CC,KAAiB,MAA+BT,EAAE,QAAQ,CAACA,EAAE,UAAUA,IAAI;CAAE,GAAGA;CAAG,SAAS;AAAM;AAExG,SAAgBU,EAAY,EAAE,SAAM,eAA8B;CAChE,IAAM,CAACC,GAAOC,KAAY5D,EAAqB;EAAE;EAAM,SAAS;EAAG,SAASa;CAAK,CAAC;CAClF,AAAI8C,EAAM,SAAS9C,KAAM+C,EAAS;EAAE;EAAM,SAAS/C,IAAO8C,EAAM,UAAU,IAAIA,EAAM;EAAS,SAAS9C,KAAQ8C,EAAM;CAAQ,CAAC;CAC7H,IAAME,IAAU9C,kBAAO,IAAI,IAAY,CAAC,GAClC+C,IAAS/C,EAAO,CAACF,CAAI;CAC3B,QAAgB;EAEd,AADA,EAAO,UAAU,CAACA,GACd,CAACA,KAAQgD,EAAQ,QAAQ,SAAS,KAAGD,EAASH,CAAa;CACjE,GAAG,CAAC5C,CAAI,CAAC;CACT,IAAMkD,IAAUxB,SACP;EACL,UAAU,MAAO,KAAKsB,EAAQ,QAAQ,IAAIG,CAAE;EAC5C,SAAS,MAAO;GAEd,AADAH,EAAQ,QAAQ,OAAOG,CAAE,GACrBF,EAAO,WAAWD,EAAQ,QAAQ,SAAS,KAAGD,EAASH,CAAa;EAC1E;CACF,IACA,CAAC,CACH;CAEA,OADKE,EAAM,UAET,kBAACM,EAAmB,UAApB;EAA6B,OAAOF;EAClC,UAAA,kBAACG,GAAD,EAA+B,YAAmB,GAAnCP,EAAM,OAA6B;CACvB,CAAA,IAJJ;AAM7B;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAY,cAAc"}
1
+ {"version":3,"file":"dialog.js","names":["_Fragment","useUiText","Button","KAESO_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_VARIANTS","LayerDialog","Dialog","KAESO_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","AlertDialog","focusDialogSection","Fragment$1","KAESO_STEP_DIALOG_VARIANTS","KAESO_STEP_DIALOG_DEFAULT_VARIANTS","StepDialogContext","useStepDialog","useContext","reducedMotion","bodyOf","el","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","continuing","setContinuing","enter","setEnter","refused","setRefused","opened","setOpened","open","sections","useRef","resultSection","moved","shown","go","to","body","finished","result","useLayoutEffect","useEffect","step","steps","last","blocked","next","submitting","onSubmit","check","ok","latestNext","advanced","setAdvanced","controls","useMemo","n","waiting","progress","continueLabel","heardBefore","heardAfter","stepList","i","s","frame","onOpenChange","inline","size","tone","submitLabel","KAESO_DIALOG_SCOPE_VARIANTS","KAESO_DIALOG_SCOPE_DEFAULT_VARIANTS","unmountClosed","DialogScope","state","setState","showing","closed","tracker","id","DialogScopeContext","Fragment"],"sources":["../../src/components/dialog/step-dialog.tsx","../../src/components/dialog/scope.tsx"],"sourcesContent":["import { createContext, forwardRef, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Button } from \"../button/button.js\";\nimport { Dialog, KAESO_DIALOG_VARIANTS } from \"./dialog.js\";\nimport { focusDialogSection } from \"./focus.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STEP_DIALOG_VARIANTS = {\n size: {\n sm: { classes: KAESO_DIALOG_VARIANTS.size.sm.classes },\n md: { classes: KAESO_DIALOG_VARIANTS.size.md.classes },\n lg: { classes: KAESO_DIALOG_VARIANTS.size.lg.classes },\n },\n tone: {\n default: { classes: \"\" },\n danger: { classes: \"\" },\n },\n} as const;\nexport const KAESO_STEP_DIALOG_DEFAULT_VARIANTS = { size: \"sm\", tone: \"default\" } as const;\n\nexport interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | undefined;\n continueLabel?: string | undefined;\n onContinue?: (() => Promise<boolean> | boolean) | undefined;\n}\n\nexport interface StepDialogResult {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer: ReactNode;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n}\n\nexport interface StepDialogProps {\n open?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n title: ReactNode;\n steps: DialogStep[];\n submitLabel: string;\n onSubmit: () => void;\n submitting?: boolean | undefined;\n tone?: keyof typeof KAESO_STEP_DIALOG_VARIANTS.tone | undefined;\n size?: keyof typeof KAESO_STEP_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n result?: StepDialogResult | undefined;\n}\n\nexport interface StepDialogControls {\n advance: () => void;\n}\n\nconst StepDialogContext = /* @__PURE__ */ createContext<StepDialogControls | null>(null);\n\nexport function useStepDialog(): StepDialogControls | null {\n return useContext(StepDialogContext);\n}\n\nfunction reducedMotion() {\n return typeof window !== \"undefined\" && !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport const StepDialog = /* @__PURE__ */ forwardRef<HTMLDivElement, StepDialogProps>(function StepDialog(\n { open, onOpenChange, title, steps, submitLabel, onSubmit, submitting, tone = \"default\", size = \"sm\", inline, defaultStep = 0, result },\n ref,\n) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = useState(false);\n const [continuing, setContinuing] = useState(false);\n const [enter, setEnter] = useState<\"forward\" | \"back\" | null>(null);\n const [refused, setRefused] = useState<string | null>(null);\n const [opened, setOpened] = useState({ open, defaultStep });\n if (opened.open !== open || opened.defaultStep !== defaultStep) {\n setOpened({ open, defaultStep });\n if (open || opened.defaultStep !== defaultStep) {\n setIndex(defaultStep);\n setAnnounced(false);\n setEnter(null);\n }\n }\n const sections = useRef<(HTMLElement | null)[]>([]);\n const resultSection = useRef<HTMLElement | null>(null);\n const moved = useRef(false);\n const shown = useRef(index);\n const go = (to: number) => {\n moved.current = true;\n setRefused(null);\n setAnnounced(true);\n setEnter(reducedMotion() ? null : to > index ? \"forward\" : \"back\");\n setIndex(to);\n };\n useLayoutEffect(() => {\n if (shown.current === index) return;\n shown.current = index;\n const body = bodyOf(sections.current[index]);\n if (body) body.scrollTop = 0;\n }, [index]);\n const finished = !!result;\n useLayoutEffect(() => {\n if (!finished) return;\n const body = bodyOf(resultSection.current);\n if (body) body.scrollTop = 0;\n focusDialogSection(resultSection.current);\n }, [finished]);\n useEffect(() => {\n if (!moved.current) return;\n moved.current = false;\n focusDialogSection(sections.current[index]);\n }, [index]);\n const step = steps[Math.min(index, steps.length - 1)];\n const last = index >= steps.length - 1;\n const blocked = step?.blockedReason;\n if (refused && refused !== blocked) setRefused(null);\n const next = () => {\n if (blocked) return setRefused(blocked);\n if (submitting || continuing) return;\n if (last) return onSubmit();\n const check = step?.onContinue;\n if (!check) return go(index + 1);\n const to = index + 1;\n setContinuing(true);\n void Promise.resolve()\n .then(check)\n .then(\n (ok) => ok && go(to),\n () => {},\n )\n .finally(() => setContinuing(false));\n };\n const latestNext = useRef(next);\n useLayoutEffect(() => {\n latestNext.current = next;\n });\n const [advanced, setAdvanced] = useState(0);\n useEffect(() => {\n if (advanced) latestNext.current();\n }, [advanced]);\n const controls = useMemo<StepDialogControls>(() => ({ advance: () => setAdvanced((n) => n + 1) }), []);\n const waiting = !!submitting || continuing;\n const progress = { current: index + 1, total: steps.length };\n const continueLabel = t(\"stepDialog.continue\", \"Continue\");\n const [heardBefore, heardAfter = \"\"] = t(\"stepDialog.stepAnnouncement\", \"Step {current} of {total}: {title}\", progress).split(\"{title}\");\n const stepList = (\n <div className=\"-m-8 overflow-clip p-8\">\n {steps.map((s, i) => (\n <section\n key={s.id}\n ref={(el) => {\n sections.current[i] = el;\n }}\n aria-labelledby={`${uid}-step-${s.id}`}\n {...(i !== index ? { hidden: true } : enter ? { \"data-enter\": enter } : {})}\n className=\"flex min-w-0 flex-col gap-16 step-motion\"\n >\n <div className=\"flex flex-col gap-4\">\n <h3 id={`${uid}-step-${s.id}`} tabIndex={-1} className=\"text-body-lg font-medium text-fg outline-none\">\n {s.title}\n </h3>\n {s.description && <p className=\"text-small text-fg-secondary\">{s.description}</p>}\n </div>\n {s.content}\n {i === index && refused && (\n <p data-step-refused=\"\" className=\"text-small text-fg-secondary\">\n {refused}\n </p>\n )}\n </section>\n ))}\n </div>\n );\n const frame = {\n ...(open !== undefined ? { open } : {}),\n ...(onOpenChange ? { onOpenChange } : {}),\n ...(inline ? { inline } : {}),\n persistent: true,\n };\n if (result)\n return (\n <Dialog ref={ref} {...frame} anchor=\"top\" size={result.size ?? size} title={result.title} description={result.description} footer={result.footer}>\n <p className=\"sr-only\" aria-live=\"polite\">\n {result.title}\n </p>\n <div className=\"-m-8 overflow-clip p-8\">\n <section ref={resultSection} {...(reducedMotion() ? {} : { \"data-enter\": \"forward\" })} className=\"flex min-w-0 flex-col step-motion\">\n {result.content}\n </section>\n </div>\n </Dialog>\n );\n return (\n <Dialog\n ref={ref}\n {...frame}\n anchor=\"top\"\n busy={waiting}\n size={size}\n title={title}\n description={steps.length > 1 ? t(\"stepDialog.stepOf\", \"Step {current} of {total}\", progress) : undefined}\n onSubmit={next}\n footer={\n <>\n {index > 0 ? (\n <Button onClick={() => go(index - 1)} disabled={waiting}>\n {t(\"stepDialog.back\", \"Back\")}\n </Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)} disabled={waiting}>\n {t(\"stepDialog.cancel\", \"Cancel\")}\n </Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last ? submitting : continuing}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n >\n {last ? submitLabel : (step?.continueLabel ?? continueLabel)}\n </Button>\n </>\n }\n >\n <p className=\"sr-only\" aria-live=\"polite\">\n {refused ??\n (announced && step && (\n <>\n {heardBefore}\n {step.title}\n {heardAfter}\n </>\n ))}\n </p>\n <StepDialogContext.Provider value={controls}>{stepList}</StepDialogContext.Provider>\n </Dialog>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StepDialog.displayName = \"StepDialog\";\n","import { Fragment, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { DialogScopeContext, type DialogScopeTracker } from \"../../utils/dialog-scope.js\";\n\nexport const KAESO_DIALOG_SCOPE_VARIANTS = {} as const;\nexport const KAESO_DIALOG_SCOPE_DEFAULT_VARIANTS = {} as const;\n\nexport interface DialogScopeProps {\n open: boolean;\n children: ReactNode;\n}\n\ninterface ScopeState {\n open: boolean;\n session: number;\n mounted: boolean;\n}\n\nconst unmountClosed = (s: ScopeState): ScopeState => (s.open || !s.mounted ? s : { ...s, mounted: false });\n\nexport function DialogScope({ open, children }: DialogScopeProps) {\n const [state, setState] = useState<ScopeState>({ open, session: 0, mounted: open });\n if (state.open !== open) setState({ open, session: open ? state.session + 1 : state.session, mounted: open || state.mounted });\n const showing = useRef(new Set<string>());\n const closed = useRef(!open);\n useEffect(() => {\n closed.current = !open;\n if (!open && showing.current.size === 0) setState(unmountClosed);\n }, [open]);\n const tracker = useMemo<DialogScopeTracker>(\n () => ({\n showing: (id) => void showing.current.add(id),\n hidden: (id) => {\n showing.current.delete(id);\n if (closed.current && showing.current.size === 0) setState(unmountClosed);\n },\n }),\n [],\n );\n if (!state.mounted) return null;\n return (\n <DialogScopeContext.Provider value={tracker}>\n <Fragment key={state.session}>{children}</Fragment>\n </DialogScopeContext.Provider>\n );\n}\nif (process.env.NODE_ENV !== \"production\") DialogScope.displayName = \"DialogScope\";\n"],"mappings":"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"}