@logicplanes/kaeso-ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/AGENTS.md +1 -0
  2. package/LICENSE +1 -1
  3. package/ai/component-guides.md +269 -7
  4. package/ai/component-registry.json +600 -800
  5. package/ai/component-registry.md +200 -141
  6. package/ai/icons.md +2 -2
  7. package/ai/tokens.md +1 -1
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +3 -3
  10. package/dist/blocks/resource-list.js +2 -2
  11. package/dist/chunks/app-frame-BXh-06HL.js +214 -0
  12. package/dist/chunks/app-frame-BXh-06HL.js.map +1 -0
  13. package/dist/chunks/{banner-BiziJuBZ.js → banner-DxGBPQ7p.js} +2 -2
  14. package/dist/chunks/{banner-BiziJuBZ.js.map → banner-DxGBPQ7p.js.map} +1 -1
  15. package/dist/chunks/{button-BHKAE6ui.js → button-DQvoOxVQ.js} +2 -2
  16. package/dist/chunks/{button-BHKAE6ui.js.map → button-DQvoOxVQ.js.map} +1 -1
  17. package/dist/chunks/{calendar-B5SSTE56.js → calendar-CN3YJi2k.js} +3 -3
  18. package/dist/chunks/{calendar-B5SSTE56.js.map → calendar-CN3YJi2k.js.map} +1 -1
  19. package/dist/chunks/code-BADhvsgC.js +33 -0
  20. package/dist/chunks/code-BADhvsgC.js.map +1 -0
  21. package/dist/chunks/{code-block-BbK6E4Eo.js → code-block-DxtladFW.js} +41 -37
  22. package/dist/chunks/code-block-DxtladFW.js.map +1 -0
  23. package/dist/chunks/{combobox-D8pQk22r.js → combobox-D30Wt11R.js} +4 -4
  24. package/dist/chunks/{combobox-D8pQk22r.js.map → combobox-D30Wt11R.js.map} +1 -1
  25. package/dist/chunks/{copy-button-mAzHjYXq.js → copy-button-DXxn-YYZ.js} +4 -4
  26. package/dist/chunks/{copy-button-mAzHjYXq.js.map → copy-button-DXxn-YYZ.js.map} +1 -1
  27. package/dist/chunks/{core-Bgefcs3z.js → core-K960A4OT.js} +119 -120
  28. package/dist/chunks/core-K960A4OT.js.map +1 -0
  29. package/dist/chunks/{date-popup-Er1oQwtU.js → date-popup-B-6xhb-1.js} +3 -3
  30. package/dist/chunks/{date-popup-Er1oQwtU.js.map → date-popup-B-6xhb-1.js.map} +1 -1
  31. package/dist/chunks/{de-BCg1eRVd.js → de-CTAo4KL7.js} +10 -10
  32. package/dist/chunks/de-CTAo4KL7.js.map +1 -0
  33. package/dist/chunks/dialog-LNKgPEsV.js +319 -0
  34. package/dist/chunks/dialog-LNKgPEsV.js.map +1 -0
  35. package/dist/chunks/{icon-Bha63LaN.js → icon-CBzvyEqC.js} +30 -29
  36. package/dist/chunks/icon-CBzvyEqC.js.map +1 -0
  37. package/dist/chunks/{icon-button-Bw67oKtx.js → icon-button-_x1RUphC.js} +3 -3
  38. package/dist/chunks/{icon-button-Bw67oKtx.js.map → icon-button-_x1RUphC.js.map} +1 -1
  39. package/dist/chunks/{identity-DQinp-Ep.js → identity-BtZC_d_Q.js} +3 -3
  40. package/dist/chunks/{identity-DQinp-Ep.js.map → identity-BtZC_d_Q.js.map} +1 -1
  41. package/dist/chunks/{input-Biakz6GB.js → input-CNTfI6YE.js} +2 -2
  42. package/dist/chunks/{input-Biakz6GB.js.map → input-CNTfI6YE.js.map} +1 -1
  43. package/dist/chunks/{input-group-DQqEPFj_.js → input-group-CYA1MEoZ.js} +2 -2
  44. package/dist/chunks/{input-group-DQqEPFj_.js.map → input-group-CYA1MEoZ.js.map} +1 -1
  45. package/dist/chunks/{iso-field-CznqNVrH.js → iso-field-1qmg7TP8.js} +2 -2
  46. package/dist/chunks/{iso-field-CznqNVrH.js.map → iso-field-1qmg7TP8.js.map} +1 -1
  47. package/dist/chunks/linear-scale-BWKeRqDX.js +37 -0
  48. package/dist/chunks/linear-scale-BWKeRqDX.js.map +1 -0
  49. package/dist/chunks/{link-tTapNTpM.js → link-vz9aV8WX.js} +9 -2
  50. package/dist/chunks/link-vz9aV8WX.js.map +1 -0
  51. package/dist/chunks/{list-CN8pO8lv.js → list-CzaiyNja.js} +119 -111
  52. package/dist/chunks/list-CzaiyNja.js.map +1 -0
  53. package/dist/chunks/{markdown-C-iJsYnd.js → markdown-5NyaHHfN.js} +6 -6
  54. package/dist/chunks/{markdown-C-iJsYnd.js.map → markdown-5NyaHHfN.js.map} +1 -1
  55. package/dist/chunks/{menu-OURWt_hD.js → menu-DyVPwgfF.js} +2 -2
  56. package/dist/chunks/{menu-OURWt_hD.js.map → menu-DyVPwgfF.js.map} +1 -1
  57. package/dist/chunks/nav-sheet-BIErlV74.js +58 -0
  58. package/dist/chunks/nav-sheet-BIErlV74.js.map +1 -0
  59. package/dist/chunks/{logo-VmXYhIJL.js → nav-wordmark-DLkItdvo.js} +12 -93
  60. package/dist/chunks/nav-wordmark-DLkItdvo.js.map +1 -0
  61. package/dist/chunks/observe-resize-DhxhmoyB.js +25 -0
  62. package/dist/chunks/observe-resize-DhxhmoyB.js.map +1 -0
  63. package/dist/chunks/{page-header-BIRswR73.js → page-header-CEPZzhRp.js} +2 -2
  64. package/dist/chunks/{page-header-BIRswR73.js.map → page-header-CEPZzhRp.js.map} +1 -1
  65. package/dist/chunks/{pagination-DYdLm18-.js → pagination-CCMxQ5pH.js} +3 -3
  66. package/dist/chunks/{pagination-DYdLm18-.js.map → pagination-CCMxQ5pH.js.map} +1 -1
  67. package/dist/chunks/{range-popup-AbRzgHtY.js → range-popup-DGOnGGag.js} +4 -4
  68. package/dist/chunks/{range-popup-AbRzgHtY.js.map → range-popup-DGOnGGag.js.map} +1 -1
  69. package/dist/chunks/resize-motion-CMaidkwe.js +101 -0
  70. package/dist/chunks/resize-motion-CMaidkwe.js.map +1 -0
  71. package/dist/chunks/{rights-CXo7zEf6.js → rights-BbiJ0AJB.js} +4 -4
  72. package/dist/chunks/{rights-CXo7zEf6.js.map → rights-BbiJ0AJB.js.map} +1 -1
  73. package/dist/chunks/{section-XStLtXKa.js → section-DzOLLN1p.js} +3 -3
  74. package/dist/chunks/section-DzOLLN1p.js.map +1 -0
  75. package/dist/chunks/{segmented-CDTx2n29.js → segmented-MrinfDL8.js} +36 -35
  76. package/dist/chunks/segmented-MrinfDL8.js.map +1 -0
  77. package/dist/chunks/select-Bc4kRiSG.js +227 -0
  78. package/dist/chunks/select-Bc4kRiSG.js.map +1 -0
  79. package/dist/chunks/{sidebar-C4fL_KMm.js → sidebar-5IA18LuP.js} +180 -183
  80. package/dist/chunks/sidebar-5IA18LuP.js.map +1 -0
  81. package/dist/chunks/{sidebar-menu-sd9vCpDy.js → sidebar-menu-DRWRxcJ3.js} +2 -2
  82. package/dist/chunks/{sidebar-menu-sd9vCpDy.js.map → sidebar-menu-DRWRxcJ3.js.map} +1 -1
  83. package/dist/chunks/{switch-CztLhA8F.js → switch-XMY_CQE-.js} +2 -2
  84. package/dist/chunks/{switch-CztLhA8F.js.map → switch-XMY_CQE-.js.map} +1 -1
  85. package/dist/chunks/{tag-BsmQ1xPj.js → tag-Dg89uYpV.js} +3 -3
  86. package/dist/chunks/{tag-BsmQ1xPj.js.map → tag-Dg89uYpV.js.map} +1 -1
  87. package/dist/chunks/{text-BPglS3vq.js → text--5MKh2G4.js} +3 -3
  88. package/dist/chunks/{text-BPglS3vq.js.map → text--5MKh2G4.js.map} +1 -1
  89. package/dist/chunks/{textarea-Bvk7N2bh.js → textarea-Cj8iR82R.js} +3 -3
  90. package/dist/chunks/{textarea-Bvk7N2bh.js.map → textarea-Cj8iR82R.js.map} +1 -1
  91. package/dist/chunks/theme-provider-DJhORMlc.js +72 -0
  92. package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -0
  93. package/dist/chunks/tooltip-DEbCCsru.js +151 -0
  94. package/dist/chunks/tooltip-DEbCCsru.js.map +1 -0
  95. package/dist/chunks/{tooltip-root-DWhtAtFb.js → tooltip-root-DRd4ciUv.js} +2 -2
  96. package/dist/chunks/{tooltip-root-DWhtAtFb.js.map → tooltip-root-DRd4ciUv.js.map} +1 -1
  97. package/dist/chunks/use-layout-width-CbSDbRb0.js +28 -0
  98. package/dist/chunks/use-layout-width-CbSDbRb0.js.map +1 -0
  99. package/dist/chunks/use-scroll-margin-DfdTc_5D.js +26 -0
  100. package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +1 -0
  101. package/dist/chunks/use-truncated-CW0hByYt.js +24 -0
  102. package/dist/chunks/use-truncated-CW0hByYt.js.map +1 -0
  103. package/dist/chunks/{virtual-rows-BgMdVelU.js → virtual-rows-BZe49bKi.js} +2 -2
  104. package/dist/chunks/{virtual-rows-BgMdVelU.js.map → virtual-rows-BZe49bKi.js.map} +1 -1
  105. package/dist/chunks/{zh-CN-cPjO1OOo.js → zh-CN-C7GmVswt.js} +15 -15
  106. package/dist/chunks/zh-CN-C7GmVswt.js.map +1 -0
  107. package/dist/components/app-frame.js +3 -1
  108. package/dist/components/banner.js +1 -1
  109. package/dist/components/button-group.js +2 -2
  110. package/dist/components/button.js +1 -1
  111. package/dist/components/calendar.js +1 -1
  112. package/dist/components/charts/bar.js +78 -77
  113. package/dist/components/charts/bar.js.map +1 -1
  114. package/dist/components/charts/donut.js +2 -2
  115. package/dist/components/charts/gauge.js +1 -1
  116. package/dist/components/charts/sankey.js +1 -1
  117. package/dist/components/charts/timeseries.js +75 -75
  118. package/dist/components/charts/timeseries.js.map +1 -1
  119. package/dist/components/charts.js +1 -1
  120. package/dist/components/code-block.js +1 -1
  121. package/dist/components/code.js +1 -1
  122. package/dist/components/combobox.js +1 -1
  123. package/dist/components/command-palette.js +105 -97
  124. package/dist/components/command-palette.js.map +1 -1
  125. package/dist/components/copy-button.js +1 -1
  126. package/dist/components/data-table.js +94 -95
  127. package/dist/components/data-table.js.map +1 -1
  128. package/dist/components/date-picker.js +3 -3
  129. package/dist/components/date-picker.js.map +1 -1
  130. package/dist/components/dialog.js +141 -153
  131. package/dist/components/dialog.js.map +1 -1
  132. package/dist/components/display-options.js +5 -5
  133. package/dist/components/filter-chip.js +1 -1
  134. package/dist/components/flow.js +37 -36
  135. package/dist/components/flow.js.map +1 -1
  136. package/dist/components/icon-button.js +1 -1
  137. package/dist/components/icon.js +1 -1
  138. package/dist/components/input.js +5 -5
  139. package/dist/components/kaeso/conversation.js +2 -2
  140. package/dist/components/kaeso/identity.js +1 -1
  141. package/dist/components/kaeso/moments.js +3 -3
  142. package/dist/components/kaeso/rights.js +1 -1
  143. package/dist/components/kaeso/usage.js +1 -1
  144. package/dist/components/kaeso.js +4 -4
  145. package/dist/components/key-value.js +3 -3
  146. package/dist/components/link.js +1 -1
  147. package/dist/components/list.js +1 -1
  148. package/dist/components/logo.js +101 -1
  149. package/dist/components/logo.js.map +1 -0
  150. package/dist/components/markdown.js +1 -1
  151. package/dist/components/menu.js +1 -1
  152. package/dist/components/page-header.js +1 -1
  153. package/dist/components/pagination.js +1 -1
  154. package/dist/components/playground.js +8 -8
  155. package/dist/components/scroll-area.js +30 -23
  156. package/dist/components/scroll-area.js.map +1 -1
  157. package/dist/components/section.js +1 -1
  158. package/dist/components/segmented.js +1 -1
  159. package/dist/components/select.js +1 -1
  160. package/dist/components/sheet.js +46 -41
  161. package/dist/components/sheet.js.map +1 -1
  162. package/dist/components/sidebar.js +1 -1
  163. package/dist/components/stat.js +75 -76
  164. package/dist/components/stat.js.map +1 -1
  165. package/dist/components/switch.js +1 -1
  166. package/dist/components/tag.js +1 -1
  167. package/dist/components/text.js +1 -1
  168. package/dist/components/theme-image.js +38 -0
  169. package/dist/components/theme-image.js.map +1 -0
  170. package/dist/components/theme-menu.js +3 -3
  171. package/dist/components/theme-select.js +58 -0
  172. package/dist/components/theme-select.js.map +1 -0
  173. package/dist/components/toast.js +91 -92
  174. package/dist/components/toast.js.map +1 -1
  175. package/dist/components/tooltip.js +1 -1
  176. package/dist/i18n-provider.js +1 -1
  177. package/dist/index.js +76 -74
  178. package/dist/kaeso.css +39 -16
  179. package/dist/styles.css +1 -1
  180. package/dist/theme.js +1 -1
  181. package/dist/types/components/app-frame/app-frame.d.ts +2 -10
  182. package/dist/types/components/app-frame/docs.d.ts +1 -0
  183. package/dist/types/components/app-frame/index.d.ts +1 -0
  184. package/dist/types/components/app-frame/nav-sheet.d.ts +11 -0
  185. package/dist/types/components/charts/linear-scale.d.ts +17 -0
  186. package/dist/types/components/code/code.d.ts +16 -0
  187. package/dist/types/components/code/docs.d.ts +1 -0
  188. package/dist/types/components/code-block/code-block.d.ts +2 -0
  189. package/dist/types/components/code-block/docs.d.ts +4 -0
  190. package/dist/types/components/command-palette/command-palette.d.ts +1 -0
  191. package/dist/types/components/command-palette/docs.d.ts +1 -0
  192. package/dist/types/components/dialog/dialog.d.ts +5 -2
  193. package/dist/types/components/dialog/docs.d.ts +10 -0
  194. package/dist/types/components/dialog/index.d.ts +1 -0
  195. package/dist/types/components/dialog/scope.d.ts +9 -0
  196. package/dist/types/components/dialog/step-dialog.d.ts +9 -1
  197. package/dist/types/components/link/link.d.ts +8 -0
  198. package/dist/types/components/logo/nav-wordmark.d.ts +6 -0
  199. package/dist/types/components/scroll-area/scroll-area.d.ts +3 -3
  200. package/dist/types/components/theme-image/docs.d.ts +13 -0
  201. package/dist/types/components/theme-image/index.d.ts +1 -0
  202. package/dist/types/components/theme-image/theme-image.d.ts +23 -0
  203. package/dist/types/components/theme-select/docs.d.ts +10 -0
  204. package/dist/types/components/theme-select/index.d.ts +1 -0
  205. package/dist/types/components/theme-select/theme-select.d.ts +34 -0
  206. package/dist/types/icons/groups.d.ts +1 -1
  207. package/dist/types/icons/vocabulary.d.ts +5 -0
  208. package/dist/types/index.d.ts +2 -0
  209. package/dist/types/theme/theme-provider.d.ts +1 -1
  210. package/dist/types/utils/dialog-scope.d.ts +7 -0
  211. package/dist/types/utils/lazy-module.d.ts +7 -2
  212. package/dist/types/utils/observe-resize.d.ts +1 -0
  213. package/dist/types/utils/resize-motion.d.ts +2 -0
  214. package/foundations/motion.md +1 -0
  215. package/package.json +2 -2
  216. package/dist/chunks/app-frame-BBIMch8X.js +0 -224
  217. package/dist/chunks/app-frame-BBIMch8X.js.map +0 -1
  218. package/dist/chunks/code-DDyOlIFO.js +0 -23
  219. package/dist/chunks/code-DDyOlIFO.js.map +0 -1
  220. package/dist/chunks/code-block-BbK6E4Eo.js.map +0 -1
  221. package/dist/chunks/core-Bgefcs3z.js.map +0 -1
  222. package/dist/chunks/de-BCg1eRVd.js.map +0 -1
  223. package/dist/chunks/dialog-CVqSVk3T.js +0 -283
  224. package/dist/chunks/dialog-CVqSVk3T.js.map +0 -1
  225. package/dist/chunks/icon-Bha63LaN.js.map +0 -1
  226. package/dist/chunks/link-tTapNTpM.js.map +0 -1
  227. package/dist/chunks/list-CN8pO8lv.js.map +0 -1
  228. package/dist/chunks/logo-VmXYhIJL.js.map +0 -1
  229. package/dist/chunks/restore-focus-Cap1Q-R3.js +0 -19
  230. package/dist/chunks/restore-focus-Cap1Q-R3.js.map +0 -1
  231. package/dist/chunks/section-XStLtXKa.js.map +0 -1
  232. package/dist/chunks/segmented-CDTx2n29.js.map +0 -1
  233. package/dist/chunks/select-Ca3HGsN1.js +0 -223
  234. package/dist/chunks/select-Ca3HGsN1.js.map +0 -1
  235. package/dist/chunks/sidebar-C4fL_KMm.js.map +0 -1
  236. package/dist/chunks/theme-provider-mgUaQK7L.js +0 -69
  237. package/dist/chunks/theme-provider-mgUaQK7L.js.map +0 -1
  238. package/dist/chunks/tooltip-CDu00nzg.js +0 -124
  239. package/dist/chunks/tooltip-CDu00nzg.js.map +0 -1
  240. package/dist/chunks/use-layout-width-DZaLOQMT.js +0 -27
  241. package/dist/chunks/use-layout-width-DZaLOQMT.js.map +0 -1
  242. package/dist/chunks/use-scroll-margin-DWcfIXac.js +0 -25
  243. package/dist/chunks/use-scroll-margin-DWcfIXac.js.map +0 -1
  244. package/dist/chunks/use-truncated-DmQoePvG.js +0 -25
  245. package/dist/chunks/use-truncated-DmQoePvG.js.map +0 -1
  246. package/dist/chunks/zh-CN-cPjO1OOo.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.js","names":["__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","preload","lazyModule","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","whenIdle","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","rest","valueId","useId","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","named","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabel","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\";\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\"));\nconst rangePopup = /* @__PURE__ */ lazyModule(() => import(\"./range-popup.js\"));\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 named: boolean;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n { size, children, placeholder, invalid, disabled, id, controlProps, force, preload, pending, onCancel, named, className, ...rest },\n ref,\n) {\n const valueId = useId();\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 = [named ? valueId : \"\", control[\"aria-describedby\"] ?? \"\"].filter(Boolean).join(\" \");\n return (\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 {...(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-secondary transition-control focus-ring disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n invalid && \"ring-invalid\",\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 );\n});\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 named = !!(ariaLabel || ariaLabelledBy || 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 named={named}\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 named = !!(ariaLabel || ariaLabelledBy || 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 named={named}\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\",\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":["__icon_Calendar03Icon","__icon_Clock01Icon","cn","useUiText","englishText","Icon","preload","lazyModule","useField","useFieldControl","withField","KAESO_INPUT_GROUP_VARIANTS","InputGroup","PopoverRoot","PopoverTrigger","whenIdle","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","rest","valueId","useId","self","useRef","setRef","el","ref","useEffect","doc","onKeyDown","onCancel","onPointerDown","control","controlProps","describedBy","named","id","invalid","force","size","className","Calendar03Icon","placeholder","DatePicker","ariaLabel","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\";\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 named: boolean;\n}\n\nconst TriggerButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, TriggerButtonProps>(function TriggerButton(\n { size, children, placeholder, invalid, disabled, id, controlProps, force, preload, pending, onCancel, named, className, ...rest },\n ref,\n) {\n const valueId = useId();\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 = [named ? valueId : \"\", control[\"aria-describedby\"] ?? \"\"].filter(Boolean).join(\" \");\n return (\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 {...(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-secondary transition-control focus-ring disabled:cursor-not-allowed\",\n KAESO_DATE_PICKER_VARIANTS.size[size].classes,\n invalid && \"ring-invalid\",\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 );\n});\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 named = !!(ariaLabel || ariaLabelledBy || 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 named={named}\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 named = !!(ariaLabel || ariaLabelledBy || 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 named={named}\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\",\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,178 +1,166 @@
1
1
  "use client";
2
2
  import { i as e } from "../chunks/context-BELWW79w.js";
3
- import { n as t } from "../chunks/button-BHKAE6ui.js";
4
- import { a as n, c as r, i, l as a, n as o, o as s, r as c, s as l, t as u, u as d } from "../chunks/dialog-CVqSVk3T.js";
5
- import { useCallback as f, useEffect as p, useId as m, useLayoutEffect as h, useRef as g, useState as _ } from "react";
6
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
3
+ import { n as t } from "../chunks/button-DQvoOxVQ.js";
4
+ import { n } from "../chunks/resize-motion-CMaidkwe.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-LNKgPEsV.js";
6
+ import { Fragment as p, useEffect as m, useId as h, useLayoutEffect as g, useMemo as _, useRef as v, useState as y } from "react";
7
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
7
8
  //#region src/components/dialog/step-dialog.tsx
8
- var x = 4, S = 16, C = (e) => parseFloat(e) || 0;
9
- function w() {
9
+ function C() {
10
10
  return typeof window < "u" && !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
11
11
  }
12
- function T(e, t) {
13
- let n = Math.ceil((e - .5) / x) * x;
14
- return t === null || n > t || t - n > S ? n : t;
15
- }
16
- function E(e) {
17
- let t = e.closest("[role=dialog]"), n = t?.parentElement;
18
- return t && n ? {
19
- popup: t,
20
- viewport: n
21
- } : null;
22
- }
23
- function D(e, t) {
24
- e.style.transition = "none", e.style.height = `${t}px`, e.offsetHeight, e.style.transition = "";
25
- }
26
- function O(e, t, n, r) {
27
- if (delete e.dataset.full, r) {
28
- e.style.height = `${t}px`;
29
- return;
30
- }
31
- let i = n ? null : E(e), a = e.parentElement, o = C(e.style.height), s = getComputedStyle(e), c = s.transitionProperty.includes("height") && C(s.transitionDuration) > 0 && !w(), l = Infinity, u = null, d = null;
32
- if (i && a) {
33
- let { popup: e, viewport: n } = i, r = getComputedStyle(n), o = n.clientHeight - C(r.paddingTop) - C(r.paddingBottom), c = Math.min(C(getComputedStyle(e).maxHeight) || o, o), f = getComputedStyle(a), p = e.offsetHeight - a.offsetHeight + C(f.paddingTop) + C(f.paddingBottom) + C(s.marginTop) + C(s.marginBottom);
34
- l = Math.max(0, c - p);
35
- let m = Math.max(0, (o - c) / 2), h = e.dataset.stepTop;
36
- d = h === void 0 ? Math.round(e.offsetTop - C(r.paddingTop)) : Number(h), u = Math.round(Math.max(m, Math.min(d, o - m - Math.min(c, p + t))));
37
- }
38
- let f = c ? Math.min(t, l) : t;
39
- if (i && u !== null && d !== null) {
40
- let { popup: e } = i;
41
- e.dataset.stepTop === void 0 && (e.style.setProperty("--k-step-top", `${d}px`), e.dataset.stepTop = String(d), e.setAttribute("data-step-anchored", ""), e.offsetTop, e.setAttribute("data-step-glide", "")), e.style.setProperty("--k-step-top", `${u}px`);
42
- }
43
- if (c && o > l && D(e, l), f < t) {
44
- if (Math.min(o, l) === f) return D(e, t);
45
- e.dataset.full = String(t);
46
- }
47
- e.style.height = `${f}px`;
48
- }
49
- function k(e) {
50
- let t = e.dataset.full;
51
- t !== void 0 && (delete e.dataset.full, D(e, Number(t)));
52
- }
53
- function A(e) {
54
- let t = E(e)?.popup;
55
- t && (t.removeAttribute("data-step-glide"), t.removeAttribute("data-step-anchored"), t.style.removeProperty("--k-step-top"), delete t.dataset.stepTop);
56
- }
57
- function j({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: s, onSubmit: c, submitting: l, tone: u = "default", size: x = "sm", inline: S, defaultStep: C = 0 }) {
58
- let [E, D] = _(C), j = m(), M = e(), [N, P] = _(!1), [F, I] = _(null), [L, R] = _({
12
+ var w = (e) => e?.closest("[data-dialog-body]") ?? null;
13
+ function T({ open: n, onOpenChange: r, title: i, steps: a, submitLabel: o, onSubmit: c, submitting: l, tone: u = "default", size: d = "sm", inline: p, defaultStep: _ = 0, result: T }) {
14
+ let [E, D] = y(_), O = h(), k = e(), [A, j] = y(!1), [M, N] = y(null), [P, F] = y({
59
15
  open: n,
60
- defaultStep: C
16
+ defaultStep: _
61
17
  });
62
- (L.open !== n || L.defaultStep !== C) && (R({
18
+ (P.open !== n || P.defaultStep !== _) && (F({
63
19
  open: n,
64
- defaultStep: C
65
- }), (n || L.defaultStep !== C) && (D(C), P(!1), I(null)));
66
- let z = g([]), [B, V] = _(null), H = g(null), U = g(null), W = g(!1), G = (e) => {
67
- W.current = !0, P(!0), I(w() ? null : e > E ? "forward" : "back"), D(e);
20
+ defaultStep: _
21
+ }), (n || P.defaultStep !== _) && (D(_), j(!1), N(null)));
22
+ let I = v([]), L = v(null), R = v(!1), z = v(E), B = (e) => {
23
+ R.current = !0, j(!0), N(C() ? null : e > E ? "forward" : "back"), D(e);
68
24
  };
69
- h(() => {
70
- let e = H.current;
71
- if (!B || !e) return;
72
- let t = U.current === null, n = T(e.offsetHeight, t ? null : U.current);
73
- U.current = n, O(B, n, S, t), !t && B.parentElement && (B.parentElement.scrollTop = 0);
74
- }, [
75
- B,
76
- E,
77
- S
78
- ]), p(() => {
79
- let e = H.current;
80
- if (!B || !e || typeof ResizeObserver > "u") return;
81
- let t = 0, n = () => {
82
- if (t = 0, U.current === null) return;
83
- let n = T(e.offsetHeight, U.current);
84
- n <= U.current || (U.current = n, O(B, n, S, !1));
85
- }, r = new ResizeObserver(() => {
86
- t ||= requestAnimationFrame(n);
87
- });
88
- r.observe(e);
89
- let i = () => A(B), a = (e) => {
90
- e.target === B && e.propertyName === "height" && k(B);
91
- };
92
- return S || window.addEventListener("resize", i), B.addEventListener("transitionend", a), () => {
93
- r.disconnect(), cancelAnimationFrame(t), window.removeEventListener("resize", i), B.removeEventListener("transitionend", a);
94
- };
95
- }, [B, S]);
96
- let K = f((e) => {
97
- e || (U.current = null), V(e);
98
- }, []);
99
- p(() => {
100
- W.current && (W.current = !1, d(z.current[E]));
25
+ g(() => {
26
+ if (z.current === E) return;
27
+ z.current = E;
28
+ let e = w(I.current[E]);
29
+ e && (e.scrollTop = 0);
30
+ }, [E]);
31
+ let V = !!T;
32
+ g(() => {
33
+ if (!V) return;
34
+ let e = w(L.current);
35
+ e && (e.scrollTop = 0), f(L.current);
36
+ }, [V]), m(() => {
37
+ R.current && (R.current = !1, f(I.current[E]));
101
38
  }, [E]);
102
- let q = a[Math.min(E, a.length - 1)], J = E >= a.length - 1, Y = q?.blockedReason, X = () => {
103
- Y || l || (J ? c() : G(E + 1));
104
- }, Z = {
39
+ let H = a[Math.min(E, a.length - 1)], U = E >= a.length - 1, W = H?.blockedReason, G = () => {
40
+ W || l || (U ? c() : B(E + 1));
41
+ }, K = {
105
42
  current: E + 1,
106
43
  total: a.length
107
- }, Q = M("stepDialog.continue", "Continue"), [$, ee = ""] = M("stepDialog.stepAnnouncement", "Step {current} of {total}: {title}", Z).split("{title}");
108
- return /* @__PURE__ */ b(o, {
44
+ }, q = k("stepDialog.continue", "Continue"), [J, Y = ""] = k("stepDialog.stepAnnouncement", "Step {current} of {total}: {title}", K).split("{title}"), X = /* @__PURE__ */ x("div", {
45
+ className: "-m-8 overflow-clip p-8",
46
+ children: a.map((e, t) => /* @__PURE__ */ S("section", {
47
+ ref: (e) => {
48
+ I.current[t] = e;
49
+ },
50
+ "aria-labelledby": `${O}-step-${e.id}`,
51
+ ...t === E ? M ? { "data-enter": M } : {} : { hidden: !0 },
52
+ className: "flex min-w-0 flex-col gap-16 step-motion",
53
+ onKeyDown: (e) => {
54
+ let t = e.target;
55
+ e.key === "Enter" && !e.metaKey && !e.ctrlKey && t.tagName === "INPUT" && t.getAttribute("role") !== "combobox" && (e.preventDefault(), G());
56
+ },
57
+ children: [/* @__PURE__ */ S("div", {
58
+ className: "flex flex-col gap-4",
59
+ children: [/* @__PURE__ */ x("h3", {
60
+ id: `${O}-step-${e.id}`,
61
+ tabIndex: -1,
62
+ className: "text-body-lg font-semibold text-fg outline-none",
63
+ children: e.title
64
+ }), e.description && /* @__PURE__ */ x("p", {
65
+ className: "text-small text-fg-secondary",
66
+ children: e.description
67
+ })]
68
+ }), e.content]
69
+ }, e.id))
70
+ }), Z = {
109
71
  ...n === void 0 ? {} : { open: n },
110
72
  ...r ? { onOpenChange: r } : {},
111
- ...S ? { inline: S } : {},
112
- size: x,
73
+ ...p ? { inline: p } : {}
74
+ };
75
+ return T ? /* @__PURE__ */ S(s, {
76
+ ...Z,
77
+ size: T.size ?? d,
78
+ title: T.title,
79
+ description: T.description,
80
+ footer: T.footer,
81
+ children: [/* @__PURE__ */ x("p", {
82
+ className: "sr-only",
83
+ "aria-live": "polite",
84
+ children: T.title
85
+ }), /* @__PURE__ */ x("div", {
86
+ className: "-m-8 overflow-clip p-8",
87
+ children: /* @__PURE__ */ x("section", {
88
+ ref: L,
89
+ ...C() ? {} : { "data-enter": "forward" },
90
+ className: "flex min-w-0 flex-col step-motion",
91
+ children: T.content
92
+ })
93
+ })]
94
+ }) : /* @__PURE__ */ S(s, {
95
+ ...Z,
96
+ busy: !!l,
97
+ size: d,
113
98
  title: i,
114
- description: a.length > 1 ? M("stepDialog.stepOf", "Step {current} of {total}", Z) : void 0,
115
- onSubmit: X,
116
- footer: /* @__PURE__ */ b(v, { children: [E > 0 ? /* @__PURE__ */ y(t, {
117
- onClick: () => G(E - 1),
118
- children: M("stepDialog.back", "Back")
119
- }) : /* @__PURE__ */ y(t, {
99
+ description: a.length > 1 ? k("stepDialog.stepOf", "Step {current} of {total}", K) : void 0,
100
+ onSubmit: G,
101
+ footer: /* @__PURE__ */ S(b, { children: [E > 0 ? /* @__PURE__ */ x(t, {
102
+ onClick: () => B(E - 1),
103
+ disabled: !!l,
104
+ children: k("stepDialog.back", "Back")
105
+ }) : /* @__PURE__ */ x(t, {
120
106
  onClick: () => r?.(!1),
121
- children: M("stepDialog.cancel", "Cancel")
122
- }), /* @__PURE__ */ y(t, {
123
- variant: J && u === "danger" ? "danger" : "primary",
124
- loading: J && l,
125
- disabled: !!Y,
126
- ...Y ? { disabledReason: Y } : {},
127
- onClick: X,
128
- reserveLabels: [s, Q],
129
- children: J ? s : Q
107
+ disabled: !!l,
108
+ children: k("stepDialog.cancel", "Cancel")
109
+ }), /* @__PURE__ */ x(t, {
110
+ variant: U && u === "danger" ? "danger" : "primary",
111
+ loading: U && l,
112
+ disabled: !!W,
113
+ ...W ? { disabledReason: W } : {},
114
+ onClick: G,
115
+ reserveLabels: [o, q],
116
+ children: U ? o : q
130
117
  })] }),
131
- children: [/* @__PURE__ */ y("p", {
118
+ children: [/* @__PURE__ */ x("p", {
132
119
  className: "sr-only",
133
120
  "aria-live": "polite",
134
- children: N && q && /* @__PURE__ */ b(v, { children: [
135
- $,
136
- q.title,
137
- ee
121
+ children: A && H && /* @__PURE__ */ S(b, { children: [
122
+ J,
123
+ H.title,
124
+ Y
138
125
  ] })
139
- }), /* @__PURE__ */ y("div", {
140
- ref: K,
141
- "data-step-frame": "",
142
- className: "-m-8 overflow-clip step-height-motion",
143
- children: /* @__PURE__ */ y("div", {
144
- ref: H,
145
- className: "p-8",
146
- children: a.map((e, t) => /* @__PURE__ */ b("section", {
147
- ref: (e) => {
148
- z.current[t] = e;
149
- },
150
- "aria-labelledby": `${j}-step-${e.id}`,
151
- ...t === E ? F ? { "data-enter": F } : {} : { hidden: !0 },
152
- className: "flex min-w-0 flex-col gap-16 step-motion",
153
- onKeyDown: (e) => {
154
- let t = e.target;
155
- e.key === "Enter" && !e.metaKey && !e.ctrlKey && t.tagName === "INPUT" && t.getAttribute("role") !== "combobox" && (e.preventDefault(), X());
156
- },
157
- children: [/* @__PURE__ */ b("div", {
158
- className: "flex flex-col gap-4",
159
- children: [/* @__PURE__ */ y("h3", {
160
- id: `${j}-step-${e.id}`,
161
- tabIndex: -1,
162
- className: "text-body-lg font-semibold text-fg outline-none",
163
- children: e.title
164
- }), e.description && /* @__PURE__ */ y("p", {
165
- className: "text-small text-fg-secondary",
166
- children: e.description
167
- })]
168
- }), e.content]
169
- }, e.id))
170
- })
171
- })]
126
+ }), X]
127
+ });
128
+ }
129
+ process.env.NODE_ENV !== "production" && (T.displayName = "StepDialog");
130
+ //#endregion
131
+ //#region src/components/dialog/scope.tsx
132
+ var E = (e) => e.open || !e.mounted ? e : {
133
+ ...e,
134
+ mounted: !1
135
+ };
136
+ function D({ open: e, children: t }) {
137
+ let [r, i] = y({
138
+ open: e,
139
+ session: 0,
140
+ mounted: e
141
+ });
142
+ r.open !== e && i({
143
+ open: e,
144
+ session: e ? r.session + 1 : r.session,
145
+ mounted: e || r.mounted
172
146
  });
147
+ let a = v(/* @__PURE__ */ new Set()), o = v(!e);
148
+ m(() => {
149
+ o.current = !e, !e && a.current.size === 0 && i(E);
150
+ }, [e]);
151
+ let s = _(() => ({
152
+ showing: (e) => void a.current.add(e),
153
+ hidden: (e) => {
154
+ a.current.delete(e), o.current && a.current.size === 0 && i(E);
155
+ }
156
+ }), []);
157
+ return r.mounted ? /* @__PURE__ */ x(n.Provider, {
158
+ value: s,
159
+ children: /* @__PURE__ */ x(p, { children: t }, r.session)
160
+ }) : null;
173
161
  }
174
- process.env.NODE_ENV !== "production" && (j.displayName = "StepDialog");
162
+ process.env.NODE_ENV !== "production" && (D.displayName = "DialogScope");
175
163
  //#endregion
176
- export { u as AlertDialog, o as Dialog, c as KAESO_ALERT_DIALOG_DEFAULT_VARIANTS, i as KAESO_ALERT_DIALOG_VARIANTS, n as KAESO_DIALOG_DEFAULT_VARIANTS, s as KAESO_DIALOG_VARIANTS, l as KAESO_LAYER_DIALOG_DEFAULT_VARIANTS, r as KAESO_LAYER_DIALOG_VARIANTS, a as LayerDialog, j as StepDialog };
164
+ export { d as AlertDialog, s as Dialog, D as DialogScope, l as KAESO_ALERT_DIALOG_DEFAULT_VARIANTS, a as KAESO_ALERT_DIALOG_VARIANTS, r as KAESO_DIALOG_DEFAULT_VARIANTS, c as KAESO_DIALOG_VARIANTS, u as KAESO_LAYER_DIALOG_DEFAULT_VARIANTS, i as KAESO_LAYER_DIALOG_VARIANTS, o as LayerDialog, T as StepDialog };
177
165
 
178
166
  //# sourceMappingURL=dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":["_Fragment","useUiText","Button","KAESO_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_VARIANTS","LayerDialog","Dialog","KAESO_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","AlertDialog","focusDialogSection","Fragment$1","GRID","KEEP","px","v","reducedMotion","stepHeight","next","content","current","panelOf","popup","frame","viewport","snapHeight","height","fit","instant","panel","inline","body","shown","fcs","moves","limit","top","anchor","vs","room","max","bs","rest","inset","held","visible","settle","full","release","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","enter","setEnter","opened","setOpened","open","sections","useRef","setFrame","moved","go","to","useLayoutEffect","inner","first","useEffect","pending","grow","ro","resize","end","setFrameRef","useCallback","el","step","steps","last","blocked","submitting","onSubmit","progress","continueLabel","heardBefore","heardAfter","onOpenChange","tone","submitLabel","i","s","target","KAESO_ALERT_DIALOG_VARIANTS"],"sources":["../../src/components/dialog/step-dialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useLayoutEffect, useRef, useState, type KeyboardEvent, 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 interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | 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?: \"default\" | \"danger\" | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n}\n\nconst GRID = 4;\nconst KEEP = 16;\n\nconst px = (v: string) => parseFloat(v) || 0;\n\nfunction reducedMotion() {\n return typeof window !== \"undefined\" && !!window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\nfunction stepHeight(content: number, current: number | null) {\n const next = Math.ceil((content - 0.5) / GRID) * GRID;\n if (current === null || next > current || current - next > KEEP) return next;\n return current;\n}\n\nfunction panelOf(frame: HTMLElement) {\n const popup = frame.closest<HTMLElement>(\"[role=dialog]\");\n const viewport = popup?.parentElement;\n return popup && viewport ? { popup, viewport } : null;\n}\n\nfunction snapHeight(frame: HTMLElement, height: number) {\n frame.style.transition = \"none\";\n frame.style.height = `${height}px`;\n void frame.offsetHeight;\n frame.style.transition = \"\";\n}\n\nfunction fit(frame: HTMLElement, height: number, inline: boolean | undefined, instant: boolean) {\n delete frame.dataset.full;\n if (instant) {\n frame.style.height = `${height}px`;\n return;\n }\n const panel = inline ? null : panelOf(frame);\n const body = frame.parentElement;\n const shown = px(frame.style.height);\n const fcs = getComputedStyle(frame);\n const moves = fcs.transitionProperty.includes(\"height\") && px(fcs.transitionDuration) > 0 && !reducedMotion();\n let limit = Infinity;\n let top: number | null = null;\n let anchor: number | null = null;\n if (panel && body) {\n const { popup, viewport } = panel;\n const vs = getComputedStyle(viewport);\n const room = viewport.clientHeight - px(vs.paddingTop) - px(vs.paddingBottom);\n const max = Math.min(px(getComputedStyle(popup).maxHeight) || room, room);\n const bs = getComputedStyle(body);\n const rest = popup.offsetHeight - body.offsetHeight + px(bs.paddingTop) + px(bs.paddingBottom) + px(fcs.marginTop) + px(fcs.marginBottom);\n limit = Math.max(0, max - rest);\n const inset = Math.max(0, (room - max) / 2);\n const held = popup.dataset.stepTop;\n anchor = held !== undefined ? Number(held) : Math.round(popup.offsetTop - px(vs.paddingTop));\n top = Math.round(Math.max(inset, Math.min(anchor, room - inset - Math.min(max, rest + height))));\n }\n const visible = moves ? Math.min(height, limit) : height;\n if (panel && top !== null && anchor !== null) {\n const { popup } = panel;\n if (popup.dataset.stepTop === undefined) {\n popup.style.setProperty(\"--k-step-top\", `${anchor}px`);\n popup.dataset.stepTop = String(anchor);\n popup.setAttribute(\"data-step-anchored\", \"\");\n void popup.offsetTop;\n popup.setAttribute(\"data-step-glide\", \"\");\n }\n popup.style.setProperty(\"--k-step-top\", `${top}px`);\n }\n if (moves && shown > limit) snapHeight(frame, limit);\n if (visible < height) {\n if (Math.min(shown, limit) === visible) return snapHeight(frame, height);\n frame.dataset.full = String(height);\n }\n frame.style.height = `${visible}px`;\n}\n\nfunction settle(frame: HTMLElement) {\n const full = frame.dataset.full;\n if (full === undefined) return;\n delete frame.dataset.full;\n snapHeight(frame, Number(full));\n}\n\nfunction release(frame: HTMLElement) {\n const popup = panelOf(frame)?.popup;\n if (!popup) return;\n popup.removeAttribute(\"data-step-glide\");\n popup.removeAttribute(\"data-step-anchored\");\n popup.style.removeProperty(\"--k-step-top\");\n delete popup.dataset.stepTop;\n}\n\nexport function StepDialog({\n open,\n onOpenChange,\n title,\n steps,\n submitLabel,\n onSubmit,\n submitting,\n tone = \"default\",\n size = \"sm\",\n inline,\n defaultStep = 0,\n}: StepDialogProps) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = 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 [frame, setFrame] = useState<HTMLDivElement | null>(null);\n const content = useRef<HTMLDivElement | null>(null);\n const height = useRef<number | null>(null);\n const moved = useRef(false);\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 const inner = content.current;\n if (!frame || !inner) return;\n const first = height.current === null;\n const next = stepHeight(inner.offsetHeight, first ? null : height.current);\n height.current = next;\n fit(frame, next, inline, first);\n if (!first && frame.parentElement) frame.parentElement.scrollTop = 0;\n }, [frame, index, inline]);\n useEffect(() => {\n const inner = content.current;\n if (!frame || !inner || typeof ResizeObserver === \"undefined\") return;\n let pending = 0;\n const grow = () => {\n pending = 0;\n if (height.current === null) return;\n const next = stepHeight(inner.offsetHeight, height.current);\n if (next <= height.current) return;\n height.current = next;\n fit(frame, next, inline, false);\n };\n const ro = new ResizeObserver(() => {\n if (!pending) pending = requestAnimationFrame(grow);\n });\n ro.observe(inner);\n const resize = () => release(frame);\n const end = (e: TransitionEvent) => {\n if (e.target === frame && e.propertyName === \"height\") settle(frame);\n };\n if (!inline) window.addEventListener(\"resize\", resize);\n frame.addEventListener(\"transitionend\", end);\n return () => {\n ro.disconnect();\n cancelAnimationFrame(pending);\n window.removeEventListener(\"resize\", resize);\n frame.removeEventListener(\"transitionend\", end);\n };\n }, [frame, inline]);\n const setFrameRef = useCallback((el: HTMLDivElement | null) => {\n if (!el) height.current = null;\n setFrame(el);\n }, []);\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) return;\n if (last) onSubmit();\n else go(index + 1);\n };\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 return (\n <Dialog\n {...(open !== undefined ? { open } : {})}\n {...(onOpenChange ? { onOpenChange } : {})}\n {...(inline ? { inline } : {})}\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)}>{t(\"stepDialog.back\", \"Back\")}</Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)}>{t(\"stepDialog.cancel\", \"Cancel\")}</Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last && submitting}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n reserveLabels={[submitLabel, continueLabel]}\n >\n {last ? submitLabel : 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 <div ref={setFrameRef} data-step-frame=\"\" className=\"-m-8 overflow-clip step-height-motion\">\n <div ref={content} className=\"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 onKeyDown={(e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (e.key === \"Enter\" && !e.metaKey && !e.ctrlKey && target.tagName === \"INPUT\" && target.getAttribute(\"role\") !== \"combobox\") {\n e.preventDefault();\n next();\n }\n }}\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 </div>\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") StepDialog.displayName = \"StepDialog\";\n"],"mappings":"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"}
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","reducedMotion","bodyOf","el","StepDialog","index","setIndex","useState","defaultStep","uid","useId","t","announced","setAnnounced","enter","setEnter","opened","setOpened","open","sections","useRef","resultSection","moved","shown","go","to","body","finished","result","useLayoutEffect","useEffect","step","steps","last","blocked","next","submitting","onSubmit","progress","continueLabel","heardBefore","heardAfter","stepList","i","s","target","frame","onOpenChange","inline","size","tone","submitLabel","unmountClosed","DialogScope","state","setState","showing","closed","tracker","useMemo","id","DialogScopeContext","Fragment"],"sources":["../../src/components/dialog/step-dialog.tsx","../../src/components/dialog/scope.tsx"],"sourcesContent":["import { useEffect, useId, useLayoutEffect, useRef, useState, type KeyboardEvent, 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 interface DialogStep {\n id: string;\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n blockedReason?: string | 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?: \"default\" | \"danger\" | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n inline?: boolean | undefined;\n defaultStep?: number | undefined;\n result?: StepDialogResult | undefined;\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 function StepDialog({\n open,\n onOpenChange,\n title,\n steps,\n submitLabel,\n onSubmit,\n submitting,\n tone = \"default\",\n size = \"sm\",\n inline,\n defaultStep = 0,\n result,\n}: StepDialogProps) {\n const [index, setIndex] = useState(defaultStep);\n const uid = useId();\n const t = useUiText();\n const [announced, setAnnounced] = 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) return;\n if (last) onSubmit();\n else go(index + 1);\n };\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 onKeyDown={(e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (e.key === \"Enter\" && !e.metaKey && !e.ctrlKey && target.tagName === \"INPUT\" && target.getAttribute(\"role\") !== \"combobox\") {\n e.preventDefault();\n next();\n }\n }}\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 };\n if (result)\n return (\n <Dialog {...frame} 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 {...frame}\n busy={!!submitting}\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={!!submitting}>\n {t(\"stepDialog.back\", \"Back\")}\n </Button>\n ) : (\n <Button onClick={() => onOpenChange?.(false)} disabled={!!submitting}>\n {t(\"stepDialog.cancel\", \"Cancel\")}\n </Button>\n )}\n <Button\n variant={last && tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={last && submitting}\n disabled={!!blocked}\n {...(blocked ? { disabledReason: blocked } : {})}\n onClick={next}\n reserveLabels={[submitLabel, continueLabel]}\n >\n {last ? submitLabel : 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 {stepList}\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 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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"}
@@ -3,11 +3,11 @@ import { t as e } from "../chunks/cn-CidVUKMm.js";
3
3
  import { t } from "../chunks/dev-CR1p7gCm.js";
4
4
  import { i as n } from "../chunks/context-BELWW79w.js";
5
5
  import { t as r } from "../chunks/icon-CeNQtobn.js";
6
- import { t as i } from "../chunks/icon-button-Bw67oKtx.js";
7
- import { a } from "../chunks/tag-BsmQ1xPj.js";
8
- import { r as o } from "../chunks/switch-CztLhA8F.js";
9
- import { r as s } from "../chunks/segmented-CDTx2n29.js";
10
- import { r as c } from "../chunks/select-Ca3HGsN1.js";
6
+ import { t as i } from "../chunks/icon-button-_x1RUphC.js";
7
+ import { a } from "../chunks/tag-Dg89uYpV.js";
8
+ import { r as o } from "../chunks/switch-XMY_CQE-.js";
9
+ import { r as s } from "../chunks/segmented-MrinfDL8.js";
10
+ import { r as c } from "../chunks/select-Bc4kRiSG.js";
11
11
  import { i as l } from "../chunks/popover-BE7VO-a4.js";
12
12
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
13
13
  import { SlidersHorizontalIcon as f } from "@hugeicons/core-free-icons";
@@ -2,7 +2,7 @@
2
2
  import { t as e } from "../chunks/cn-CidVUKMm.js";
3
3
  import { i as t, r as n } from "../chunks/context-BELWW79w.js";
4
4
  import { t as r } from "../chunks/icon-CeNQtobn.js";
5
- import { i } from "../chunks/menu-OURWt_hD.js";
5
+ import { i } from "../chunks/menu-DyVPwgfF.js";
6
6
  import { forwardRef as a, useEffect as o, useRef as s, useState as c } from "react";
7
7
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
8
  import { Cancel01Icon as d } from "@hugeicons/core-free-icons";