@logicplanes/kaeso-ui 0.4.2 → 0.4.4

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 (279) hide show
  1. package/NOTICE.md +1 -1
  2. package/ai/component-guides.md +312 -21
  3. package/ai/component-registry.json +616 -25
  4. package/ai/component-registry.md +154 -26
  5. package/ai/icons.md +4 -4
  6. package/ai/tokens.md +1 -1
  7. package/dist/blocks/delete-resource.js +15 -14
  8. package/dist/blocks/delete-resource.js.map +1 -1
  9. package/dist/blocks/pages.js +2 -2
  10. package/dist/blocks/resource-list.js +41 -40
  11. package/dist/blocks/resource-list.js.map +1 -1
  12. package/dist/chunks/agent-avatar-0pdBTWkR.js +171 -0
  13. package/dist/chunks/agent-avatar-0pdBTWkR.js.map +1 -0
  14. package/dist/chunks/{app-frame-C8csevkL.js → app-frame-DogGRmsu.js} +22 -21
  15. package/dist/chunks/app-frame-DogGRmsu.js.map +1 -0
  16. package/dist/chunks/{banner-Cb8OWnqJ.js → banner-BA2ALw9M.js} +2 -2
  17. package/dist/chunks/{banner-Cb8OWnqJ.js.map → banner-BA2ALw9M.js.map} +1 -1
  18. package/dist/chunks/{button-Dzu7_csE.js → button-CzuxqawA.js} +3 -3
  19. package/dist/chunks/{button-Dzu7_csE.js.map → button-CzuxqawA.js.map} +1 -1
  20. package/dist/chunks/{calendar--YemJsv4.js → calendar-BWaf2MXc.js} +57 -41
  21. package/dist/chunks/calendar-BWaf2MXc.js.map +1 -0
  22. package/dist/chunks/{checkbox-CDfC6E-M.js → checkbox-CQjwCPkc.js} +11 -9
  23. package/dist/chunks/checkbox-CQjwCPkc.js.map +1 -0
  24. package/dist/chunks/{code-block-U5fCqwgC.js → code-block-BZIe_B9l.js} +41 -37
  25. package/dist/chunks/code-block-BZIe_B9l.js.map +1 -0
  26. package/dist/chunks/code-block-DdNPHEzI.js +344 -0
  27. package/dist/chunks/code-block-DdNPHEzI.js.map +1 -0
  28. package/dist/chunks/combobox-DjDI7SUC.js +319 -0
  29. package/dist/chunks/combobox-DjDI7SUC.js.map +1 -0
  30. package/dist/chunks/{command-list-0RR4DpUe.js → command-list-C2Y7V_lt.js} +2 -2
  31. package/dist/chunks/{command-list-0RR4DpUe.js.map → command-list-C2Y7V_lt.js.map} +1 -1
  32. package/dist/chunks/{copy-button-7-irieJw.js → copy-button-FJvPJn72.js} +3 -3
  33. package/dist/chunks/{copy-button-7-irieJw.js.map → copy-button-FJvPJn72.js.map} +1 -1
  34. package/dist/chunks/{core-Bl9NrBLS.js → core-BYns5ytV.js} +145 -139
  35. package/dist/chunks/core-BYns5ytV.js.map +1 -0
  36. package/dist/chunks/{date-popup-RQkqhko4.js → date-popup-CPA_zt6o.js} +4 -4
  37. package/dist/chunks/{date-popup-RQkqhko4.js.map → date-popup-CPA_zt6o.js.map} +1 -1
  38. package/dist/chunks/{de-BnNQtBSV.js → de-D_0mmG-k.js} +10 -1
  39. package/dist/chunks/de-D_0mmG-k.js.map +1 -0
  40. package/dist/chunks/dialog-Cg9A_6SF.js +383 -0
  41. package/dist/chunks/dialog-Cg9A_6SF.js.map +1 -0
  42. package/dist/chunks/icon-CPJWE2N-.js +95 -0
  43. package/dist/chunks/icon-CPJWE2N-.js.map +1 -0
  44. package/dist/chunks/{icon-button-CPYR21Sz.js → icon-button-CrdF_eMG.js} +3 -3
  45. package/dist/chunks/{icon-button-CPYR21Sz.js.map → icon-button-CrdF_eMG.js.map} +1 -1
  46. package/dist/chunks/{identity-DPuTkMsa.js → identity-BmhQ6BQ-.js} +15 -15
  47. package/dist/chunks/identity-BmhQ6BQ-.js.map +1 -0
  48. package/dist/chunks/{input-TyLIaQ5k.js → input-2VJuj_M4.js} +10 -5
  49. package/dist/chunks/input-2VJuj_M4.js.map +1 -0
  50. package/dist/chunks/{input-group-CUSNsQjQ.js → input-group-DQ_4DoXg.js} +2 -2
  51. package/dist/chunks/{input-group-CUSNsQjQ.js.map → input-group-DQ_4DoXg.js.map} +1 -1
  52. package/dist/chunks/{inset-BnBj8NJV.js → inset-BUzyXLK4.js} +14 -4
  53. package/dist/chunks/inset-BUzyXLK4.js.map +1 -0
  54. package/dist/chunks/{iso-field-CWbxlll-.js → iso-field-B2rTwiBo.js} +2 -2
  55. package/dist/chunks/{iso-field-CWbxlll-.js.map → iso-field-B2rTwiBo.js.map} +1 -1
  56. package/dist/chunks/{link-B2I55xg9.js → link-KWI7PevW.js} +2 -2
  57. package/dist/chunks/{link-B2I55xg9.js.map → link-KWI7PevW.js.map} +1 -1
  58. package/dist/chunks/link-provider-cvl8lSTT.js +29 -0
  59. package/dist/chunks/link-provider-cvl8lSTT.js.map +1 -0
  60. package/dist/chunks/{list-CkOozrVY.js → list-M1csq-d4.js} +18 -16
  61. package/dist/chunks/{list-CkOozrVY.js.map → list-M1csq-d4.js.map} +1 -1
  62. package/dist/chunks/{markdown-BEgwZFlu.js → markdown-BupwFOae.js} +5 -5
  63. package/dist/chunks/{markdown-BEgwZFlu.js.map → markdown-BupwFOae.js.map} +1 -1
  64. package/dist/chunks/{menu-fl_QQb38.js → menu-DEmBfdPm.js} +29 -26
  65. package/dist/chunks/menu-DEmBfdPm.js.map +1 -0
  66. package/dist/chunks/nav-sheet-CzgIwgAm.js +60 -0
  67. package/dist/chunks/nav-sheet-CzgIwgAm.js.map +1 -0
  68. package/dist/chunks/{page-header-DjUMDG69.js → page-header-DL2y2iZp.js} +2 -2
  69. package/dist/chunks/{page-header-DjUMDG69.js.map → page-header-DL2y2iZp.js.map} +1 -1
  70. package/dist/chunks/{pagination-BaY8jdli.js → pagination-Cn_qF4cg.js} +3 -3
  71. package/dist/chunks/{pagination-BaY8jdli.js.map → pagination-Cn_qF4cg.js.map} +1 -1
  72. package/dist/chunks/{picker-popover-DShea4b8.js → picker-popover-BxyU1U9F.js} +14 -13
  73. package/dist/chunks/{picker-popover-DShea4b8.js.map → picker-popover-BxyU1U9F.js.map} +1 -1
  74. package/dist/chunks/{popover-CFMwaeIP.js → popover-DNN4S47w.js} +2 -2
  75. package/dist/chunks/{popover-CFMwaeIP.js.map → popover-DNN4S47w.js.map} +1 -1
  76. package/dist/chunks/portal-context-BBbzDKmY.js.map +1 -1
  77. package/dist/chunks/{radio-Yl0nO-Sj.js → radio-CDDFpdtL.js} +4 -4
  78. package/dist/chunks/{radio-Yl0nO-Sj.js.map → radio-CDDFpdtL.js.map} +1 -1
  79. package/dist/chunks/{range-popup-CkhsK3wI.js → range-popup-CRyWYUB1.js} +5 -5
  80. package/dist/chunks/{range-popup-CkhsK3wI.js.map → range-popup-CRyWYUB1.js.map} +1 -1
  81. package/dist/chunks/{rights-BlQx9C_j.js → rights-Cyp0Pzp-.js} +5 -5
  82. package/dist/chunks/{rights-BlQx9C_j.js.map → rights-Cyp0Pzp-.js.map} +1 -1
  83. package/dist/chunks/{segmented-C97zvDR1.js → segmented-CErcoxwi.js} +2 -2
  84. package/dist/chunks/{segmented-C97zvDR1.js.map → segmented-CErcoxwi.js.map} +1 -1
  85. package/dist/chunks/{sidebar-DtFlejU7.js → sidebar-3r1ZRXlN.js} +253 -235
  86. package/dist/chunks/sidebar-3r1ZRXlN.js.map +1 -0
  87. package/dist/chunks/{sidebar-menu-CxQbGwyj.js → sidebar-menu-BN3jkTlK.js} +2 -2
  88. package/dist/chunks/{sidebar-menu-CxQbGwyj.js.map → sidebar-menu-BN3jkTlK.js.map} +1 -1
  89. package/dist/chunks/{switch-b-VkStWj.js → switch-BNMq_kGt.js} +2 -2
  90. package/dist/chunks/{switch-b-VkStWj.js.map → switch-BNMq_kGt.js.map} +1 -1
  91. package/dist/chunks/{tag-DNdX1XRR.js → tag-D_M1s2qS.js} +2 -2
  92. package/dist/chunks/{tag-DNdX1XRR.js.map → tag-D_M1s2qS.js.map} +1 -1
  93. package/dist/chunks/{text-DCGGNqTM.js → text-CIXH8rmT.js} +2 -2
  94. package/dist/chunks/{text-DCGGNqTM.js.map → text-CIXH8rmT.js.map} +1 -1
  95. package/dist/chunks/{textarea-CT2S2JVM.js → textarea--4FRL3Pb.js} +3 -3
  96. package/dist/chunks/{textarea-CT2S2JVM.js.map → textarea--4FRL3Pb.js.map} +1 -1
  97. package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -1
  98. package/dist/chunks/{timeseries-B-8OfeZm.js → timeseries-D1xjRXfk.js} +2 -2
  99. package/dist/chunks/{timeseries-B-8OfeZm.js.map → timeseries-D1xjRXfk.js.map} +1 -1
  100. package/dist/chunks/{toolbar-DL6zVrzU.js → toolbar-WA_oZgu-.js} +5 -4
  101. package/dist/chunks/{toolbar-DL6zVrzU.js.map → toolbar-WA_oZgu-.js.map} +1 -1
  102. package/dist/chunks/tooltip-OcwO0VUT.js +154 -0
  103. package/dist/chunks/tooltip-OcwO0VUT.js.map +1 -0
  104. package/dist/chunks/{tooltip-root-BeAMXzxU.js → tooltip-root-DzahJDVj.js} +2 -2
  105. package/dist/chunks/{tooltip-root-BeAMXzxU.js.map → tooltip-root-DzahJDVj.js.map} +1 -1
  106. package/dist/chunks/{use-scroll-margin-DfdTc_5D.js → use-scroll-margin-atRtf0v_.js} +14 -10
  107. package/dist/chunks/use-scroll-margin-atRtf0v_.js.map +1 -0
  108. package/dist/chunks/{virtual-rows-yAMjeAwj.js → virtual-rows-CC_kc2PR.js} +2 -2
  109. package/dist/chunks/{virtual-rows-yAMjeAwj.js.map → virtual-rows-CC_kc2PR.js.map} +1 -1
  110. package/dist/chunks/{zh-CN-CKffAT7j.js → zh-CN-Bm6UPIbW.js} +10 -1
  111. package/dist/chunks/zh-CN-Bm6UPIbW.js.map +1 -0
  112. package/dist/components/agent-avatar.js +2 -0
  113. package/dist/components/app-frame.js +2 -2
  114. package/dist/components/banner.js +1 -1
  115. package/dist/components/button-group.js +2 -2
  116. package/dist/components/button.js +1 -1
  117. package/dist/components/calendar.js +1 -1
  118. package/dist/components/charts/bar.js +1 -1
  119. package/dist/components/charts/donut.js +1 -1
  120. package/dist/components/charts/gauge.js +1 -1
  121. package/dist/components/charts/sankey.js +1 -1
  122. package/dist/components/charts/timeseries.js +1 -1
  123. package/dist/components/charts.js +2 -2
  124. package/dist/components/checkbox.js +1 -1
  125. package/dist/components/code-block.js +3 -2
  126. package/dist/components/combobox.js +1 -1
  127. package/dist/components/command-list.js +2 -2
  128. package/dist/components/command-palette.js +85 -81
  129. package/dist/components/command-palette.js.map +1 -1
  130. package/dist/components/copy-button.js +1 -1
  131. package/dist/components/data-table.js +191 -187
  132. package/dist/components/data-table.js.map +1 -1
  133. package/dist/components/date-picker.js +6 -4
  134. package/dist/components/date-picker.js.map +1 -1
  135. package/dist/components/dialog.js +125 -91
  136. package/dist/components/dialog.js.map +1 -1
  137. package/dist/components/display-options.js +49 -46
  138. package/dist/components/display-options.js.map +1 -1
  139. package/dist/components/filter-chip.js +3 -3
  140. package/dist/components/filter-chip.js.map +1 -1
  141. package/dist/components/filter-row.js +1 -1
  142. package/dist/components/icon-button.js +1 -1
  143. package/dist/components/icon.js +1 -1
  144. package/dist/components/input.js +49 -49
  145. package/dist/components/input.js.map +1 -1
  146. package/dist/components/kaeso/conversation.js +3 -3
  147. package/dist/components/kaeso/identity.js +1 -1
  148. package/dist/components/kaeso/moments.js +3 -3
  149. package/dist/components/kaeso/rights.js +1 -1
  150. package/dist/components/kaeso/usage.js +8 -8
  151. package/dist/components/kaeso/usage.js.map +1 -1
  152. package/dist/components/kaeso.js +263 -95
  153. package/dist/components/kaeso.js.map +1 -1
  154. package/dist/components/key-value.js +2 -2
  155. package/dist/components/link.js +1 -1
  156. package/dist/components/list.js +1 -1
  157. package/dist/components/markdown.js +1 -1
  158. package/dist/components/menu.js +2 -2
  159. package/dist/components/page-header.js +1 -1
  160. package/dist/components/pagination.js +1 -1
  161. package/dist/components/playground.js +27 -26
  162. package/dist/components/playground.js.map +1 -1
  163. package/dist/components/popover.js +12 -11
  164. package/dist/components/popover.js.map +1 -1
  165. package/dist/components/radio.js +1 -1
  166. package/dist/components/segmented.js +1 -1
  167. package/dist/components/settings.js +8 -8
  168. package/dist/components/settings.js.map +1 -1
  169. package/dist/components/sheet.js +2 -2
  170. package/dist/components/sidebar.js +1 -1
  171. package/dist/components/switch.js +1 -1
  172. package/dist/components/tabs.js +22 -22
  173. package/dist/components/tabs.js.map +1 -1
  174. package/dist/components/tag.js +1 -1
  175. package/dist/components/text.js +1 -1
  176. package/dist/components/theme-menu.js +33 -30
  177. package/dist/components/theme-menu.js.map +1 -1
  178. package/dist/components/thumbnail.js +41 -0
  179. package/dist/components/thumbnail.js.map +1 -0
  180. package/dist/components/toast.js +96 -87
  181. package/dist/components/toast.js.map +1 -1
  182. package/dist/components/toolbar.js +1 -1
  183. package/dist/components/tooltip.js +1 -1
  184. package/dist/format.js.map +1 -1
  185. package/dist/i18n-provider.js +1 -1
  186. package/dist/index.js +90 -88
  187. package/dist/kaeso.css +3 -0
  188. package/dist/styles.css +1 -1
  189. package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -5
  190. package/dist/types/blocks/resource-list/resource-list.d.ts +1 -4
  191. package/dist/types/component-docs.d.ts +1 -1
  192. package/dist/types/components/agent-avatar/agent-avatar.d.ts +94 -0
  193. package/dist/types/components/agent-avatar/docs.d.ts +19 -0
  194. package/dist/types/components/agent-avatar/index.d.ts +3 -0
  195. package/dist/types/components/agent-avatar/model-name.d.ts +9 -0
  196. package/dist/types/components/agent-avatar/models.d.ts +4 -0
  197. package/dist/types/components/app-frame/app-frame.d.ts +3 -8
  198. package/dist/types/components/app-frame/nav-sheet.d.ts +2 -4
  199. package/dist/types/components/calendar/calendar.d.ts +1 -4
  200. package/dist/types/components/charts/core.d.ts +11 -18
  201. package/dist/types/components/checkbox/checkbox.d.ts +2 -0
  202. package/dist/types/components/code-block/diff-view.d.ts +30 -0
  203. package/dist/types/components/code-block/diff.d.ts +26 -0
  204. package/dist/types/components/code-block/docs.d.ts +14 -0
  205. package/dist/types/components/code-block/index.d.ts +1 -0
  206. package/dist/types/components/combobox/combobox.d.ts +26 -2
  207. package/dist/types/components/command-list/picker-popover.d.ts +1 -4
  208. package/dist/types/components/command-palette/command-palette.d.ts +1 -4
  209. package/dist/types/components/data-table/data-table.d.ts +2 -1
  210. package/dist/types/components/data-table/docs.d.ts +1 -0
  211. package/dist/types/components/dialog/dialog.d.ts +7 -9
  212. package/dist/types/components/dialog/docs.d.ts +2 -0
  213. package/dist/types/components/dialog/scope.d.ts +2 -0
  214. package/dist/types/components/dialog/step-dialog.d.ts +38 -5
  215. package/dist/types/components/display-options/display-options.d.ts +2 -5
  216. package/dist/types/components/input/input.d.ts +23 -0
  217. package/dist/types/components/kaeso/client-button.d.ts +17 -0
  218. package/dist/types/components/kaeso/docs.d.ts +18 -0
  219. package/dist/types/components/kaeso/grant-summary.d.ts +12 -0
  220. package/dist/types/components/kaeso/identity.d.ts +2 -0
  221. package/dist/types/components/kaeso/index.d.ts +2 -0
  222. package/dist/types/components/kaeso/provider-picker.d.ts +5 -0
  223. package/dist/types/components/kaeso/usage.d.ts +2 -0
  224. package/dist/types/components/list/list.d.ts +4 -8
  225. package/dist/types/components/menu/docs.d.ts +8 -1
  226. package/dist/types/components/menu/menu.d.ts +19 -31
  227. package/dist/types/components/playground/parameter-panel.d.ts +1 -4
  228. package/dist/types/components/popover/hover-card.d.ts +2 -0
  229. package/dist/types/components/radio/docs.d.ts +15 -0
  230. package/dist/types/components/radio/radio.d.ts +2 -4
  231. package/dist/types/components/settings/settings.d.ts +2 -0
  232. package/dist/types/components/sidebar/sidebar.d.ts +13 -35
  233. package/dist/types/components/tabs/tabs.d.ts +15 -0
  234. package/dist/types/components/theme-menu/docs.d.ts +2 -0
  235. package/dist/types/components/theme-menu/theme-menu.d.ts +6 -5
  236. package/dist/types/components/thumbnail/docs.d.ts +10 -0
  237. package/dist/types/components/thumbnail/index.d.ts +1 -0
  238. package/dist/types/components/thumbnail/thumbnail.d.ts +26 -0
  239. package/dist/types/components/toast/toast.d.ts +5 -12
  240. package/dist/types/components/toolbar/toolbar.d.ts +1 -6
  241. package/dist/types/components/tooltip/tooltip.d.ts +2 -4
  242. package/dist/types/components/tooltip/trigger-props.d.ts +0 -1
  243. package/dist/types/format/index.d.ts +5 -5
  244. package/dist/types/hooks/use-scroll-margin.d.ts +1 -1
  245. package/dist/types/icons/groups.d.ts +3 -3
  246. package/dist/types/icons/vocabulary.d.ts +20 -0
  247. package/dist/types/index.d.ts +2 -0
  248. package/dist/types/utils/inset.d.ts +4 -0
  249. package/dist/types/utils/link-provider.d.ts +1 -1
  250. package/dist/types/utils/merge-refs.d.ts +3 -0
  251. package/dist/types/utils/portal-context.d.ts +1 -1
  252. package/dist/utils.js +3 -3
  253. package/foundations/shape.md +1 -1
  254. package/package.json +2 -2
  255. package/dist/chunks/app-frame-C8csevkL.js.map +0 -1
  256. package/dist/chunks/calendar--YemJsv4.js.map +0 -1
  257. package/dist/chunks/checkbox-CDfC6E-M.js.map +0 -1
  258. package/dist/chunks/code-block-U5fCqwgC.js.map +0 -1
  259. package/dist/chunks/combobox-BARyrpXH.js +0 -314
  260. package/dist/chunks/combobox-BARyrpXH.js.map +0 -1
  261. package/dist/chunks/core-Bl9NrBLS.js.map +0 -1
  262. package/dist/chunks/de-BnNQtBSV.js.map +0 -1
  263. package/dist/chunks/dialog-DQ9vZ7vr.js +0 -353
  264. package/dist/chunks/dialog-DQ9vZ7vr.js.map +0 -1
  265. package/dist/chunks/icon-CBzvyEqC.js +0 -91
  266. package/dist/chunks/icon-CBzvyEqC.js.map +0 -1
  267. package/dist/chunks/identity-DPuTkMsa.js.map +0 -1
  268. package/dist/chunks/input-TyLIaQ5k.js.map +0 -1
  269. package/dist/chunks/inset-BnBj8NJV.js.map +0 -1
  270. package/dist/chunks/link-provider-BsUxhZKG.js +0 -27
  271. package/dist/chunks/link-provider-BsUxhZKG.js.map +0 -1
  272. package/dist/chunks/menu-fl_QQb38.js.map +0 -1
  273. package/dist/chunks/nav-sheet-B2rNb8GB.js +0 -60
  274. package/dist/chunks/nav-sheet-B2rNb8GB.js.map +0 -1
  275. package/dist/chunks/sidebar-DtFlejU7.js.map +0 -1
  276. package/dist/chunks/tooltip-BMQ9BtPp.js +0 -151
  277. package/dist/chunks/tooltip-BMQ9BtPp.js.map +0 -1
  278. package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +0 -1
  279. package/dist/chunks/zh-CN-CKffAT7j.js.map +0 -1
@@ -6,26 +6,26 @@ import { t as r } from "../chunks/icon-D7ja-_Yk.js";
6
6
  import { t as i } from "../chunks/observe-resize-DhxhmoyB.js";
7
7
  import { r as a } from "../chunks/loader-DCfPndXa.js";
8
8
  import { r as o } from "../chunks/swap-text-Dr0Irxz6.js";
9
- import { useLayoutEffect as s, useRef as c, useState as l } from "react";
10
- import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
11
- import { Alert02Icon as p, AlertCircleIcon as m, Cancel01Icon as h, CheckmarkCircle02Icon as g, InformationCircleIcon as _ } from "@hugeicons/core-free-icons";
12
- import { Toast as v } from "@base-ui/react/toast";
9
+ import { forwardRef as s, useLayoutEffect as c, useRef as l, useState as u } from "react";
10
+ import { Fragment as d, jsx as f, jsxs as p } from "react/jsx-runtime";
11
+ import { Alert02Icon as m, AlertCircleIcon as h, Cancel01Icon as g, CheckmarkCircle02Icon as _, InformationCircleIcon as v } from "@hugeicons/core-free-icons";
12
+ import { Toast as y } from "@base-ui/react/toast";
13
13
  //#region src/components/toast/toast.tsx
14
- var y = { tone: {
14
+ var b = { tone: {
15
15
  neutral: { classes: "" },
16
16
  success: { classes: "text-success" },
17
17
  error: { classes: "text-danger" },
18
18
  warning: { classes: "text-warning" },
19
19
  info: { classes: "text-info" },
20
20
  loading: { classes: "text-toast-fg-secondary" }
21
- } }, b = { tone: "neutral" }, x = {
22
- success: g,
23
- error: m,
24
- warning: p,
25
- info: _
26
- }, S = /* @__PURE__ */ v.createToastManager();
27
- function C(e, t, n = {}) {
28
- return S.add({
21
+ } }, x = { tone: "neutral" }, S = {
22
+ success: _,
23
+ error: h,
24
+ warning: m,
25
+ info: v
26
+ }, C = /* @__PURE__ */ y.createToastManager();
27
+ function w(e, t, n = {}) {
28
+ return C.add({
29
29
  title: t,
30
30
  type: e,
31
31
  ...n.description === void 0 ? {} : { description: n.description },
@@ -38,19 +38,19 @@ function C(e, t, n = {}) {
38
38
  } } : {}
39
39
  });
40
40
  }
41
- var w = /* @__PURE__ */ Object.assign((e, t) => C("neutral", e, t), {
42
- success: (e, t) => C("success", e, t),
43
- error: (e, t) => C("error", e, t),
44
- warning: (e, t) => C("warning", e, t),
45
- info: (e, t) => C("info", e, t),
46
- dismiss: (e) => S.close(e),
41
+ var T = /* @__PURE__ */ Object.assign((e, t) => w("neutral", e, t), {
42
+ success: (e, t) => w("success", e, t),
43
+ error: (e, t) => w("error", e, t),
44
+ warning: (e, t) => w("warning", e, t),
45
+ info: (e, t) => w("info", e, t),
46
+ dismiss: (e) => C.close(e),
47
47
  promise: (e, t) => {
48
48
  let n = [
49
49
  t.loading,
50
50
  ...typeof t.success == "string" ? [t.success] : [],
51
51
  ...typeof t.error == "string" ? [t.error] : []
52
52
  ];
53
- return S.promise(e, {
53
+ return C.promise(e, {
54
54
  loading: {
55
55
  title: t.loading,
56
56
  type: "loading",
@@ -71,63 +71,64 @@ var w = /* @__PURE__ */ Object.assign((e, t) => C("neutral", e, t), {
71
71
  });
72
72
  }
73
73
  });
74
- function T({ tone: t }) {
75
- return t === "neutral" ? null : /* @__PURE__ */ d("span", {
76
- className: e("flex shrink-0", y.tone[t].classes),
77
- children: t === "loading" ? /* @__PURE__ */ d(a, { size: "sm" }) : /* @__PURE__ */ d(r, {
78
- icon: x[t],
74
+ function E({ tone: t }) {
75
+ return t === "neutral" ? null : /* @__PURE__ */ f("span", {
76
+ className: e("flex shrink-0", b.tone[t].classes),
77
+ children: t === "loading" ? /* @__PURE__ */ f(a, { size: "sm" }) : /* @__PURE__ */ f(r, {
78
+ icon: S[t],
79
79
  size: "sm"
80
80
  })
81
81
  });
82
82
  }
83
- var E = "relative flex min-h-44 max-w-560 items-center gap-10 bg-toast py-8 text-body font-medium text-toast-fg shadow-toast", D = "inline-flex h-32 shrink-0 cursor-pointer items-center rounded-pill bg-toast-action px-12 text-body font-medium text-toast-fg transition-control hover:bg-toast-action-hover focus-ring", O = "k-toast-close absolute -top-6 -left-6 inline-flex size-20 cursor-pointer items-center justify-center rounded-pill bg-toast text-toast-fg-secondary shadow-toast hover:text-toast-fg focus-ring";
84
- function k(e, t) {
85
- let n = c(null), [r, i] = l(!1);
86
- return s(() => {
83
+ var D = "relative flex min-h-44 max-w-560 items-center gap-10 bg-toast py-8 text-body font-medium text-toast-fg shadow-toast", O = "inline-flex h-32 shrink-0 cursor-pointer items-center rounded-pill bg-toast-action px-12 text-body font-medium text-toast-fg transition-control hover:bg-toast-action-hover focus-ring", k = "k-toast-close absolute -top-6 -left-6 inline-flex size-20 cursor-pointer items-center justify-center rounded-pill bg-toast text-toast-fg-secondary shadow-toast hover:text-toast-fg focus-ring";
84
+ function A(e, t) {
85
+ let n = l(null), [r, i] = u(!1);
86
+ return c(() => {
87
87
  let e = n.current;
88
88
  e && i(e.offsetHeight > 46);
89
89
  }, [e, t]), [n, r];
90
90
  }
91
- function A({ tone: t = "neutral", title: i, description: a, action: o, closable: s, "data-force": c }) {
92
- let [l, u] = k(i, a), p = n();
93
- return /* @__PURE__ */ f("div", {
91
+ var j = /* @__PURE__ */ s(function({ tone: t = "neutral", title: i, description: a, action: o, closable: s, "data-force": c }, l) {
92
+ let [u, d] = A(i, a), m = n();
93
+ return /* @__PURE__ */ p("div", {
94
+ ref: l,
94
95
  role: "status",
95
96
  className: "k-toast-static relative w-max",
96
- children: [/* @__PURE__ */ f("div", {
97
- ref: l,
98
- className: e(E, u ? "rounded-toast" : "rounded-pill", t === "neutral" ? "pl-16" : "pl-14", o ? "pr-6" : "pr-16"),
97
+ children: [/* @__PURE__ */ p("div", {
98
+ ref: u,
99
+ className: e(D, d ? "rounded-toast" : "rounded-pill", t === "neutral" ? "pl-16" : "pl-14", o ? "pr-6" : "pr-16"),
99
100
  children: [
100
- /* @__PURE__ */ d(T, { tone: t }),
101
- /* @__PURE__ */ f("span", {
101
+ /* @__PURE__ */ f(E, { tone: t }),
102
+ /* @__PURE__ */ p("span", {
102
103
  className: "min-w-0 text-pretty",
103
- children: [i, a && /* @__PURE__ */ f("span", {
104
+ children: [i, a && /* @__PURE__ */ p("span", {
104
105
  className: "font-regular text-toast-fg-secondary",
105
106
  children: [" ", a]
106
107
  })]
107
108
  }),
108
- o && /* @__PURE__ */ d("button", {
109
+ o && /* @__PURE__ */ f("button", {
109
110
  type: "button",
110
- className: D,
111
+ className: O,
111
112
  children: o
112
113
  })
113
114
  ]
114
- }), s && /* @__PURE__ */ d("button", {
115
+ }), s && /* @__PURE__ */ f("button", {
115
116
  type: "button",
116
- "aria-label": p("toast.dismiss", "Dismiss"),
117
- className: O,
117
+ "aria-label": m("toast.dismiss", "Dismiss"),
118
+ className: k,
118
119
  "data-force": c ? `visible ${c}` : "visible",
119
- children: /* @__PURE__ */ d(r, {
120
- icon: h,
120
+ children: /* @__PURE__ */ f(r, {
121
+ icon: g,
121
122
  size: "xs",
122
123
  className: "size-12"
123
124
  })
124
125
  })]
125
126
  });
126
- }
127
- process.env.NODE_ENV !== "production" && (A.displayName = "ToastCapsule");
128
- function j({ item: t, index: a, limit: c, onFrontWidth: l }) {
129
- let p = n(), m = t.type ?? "neutral", g = t.data?.reserve, [_, y] = k(t.title, t.description);
130
- return s(() => {
127
+ });
128
+ process.env.NODE_ENV !== "production" && (j.displayName = "ToastCapsule");
129
+ function M({ item: t, index: a, limit: s, onFrontWidth: l }) {
130
+ let u = n(), m = t.type ?? "neutral", h = t.data?.reserve, [_, v] = A(t.title, t.description);
131
+ return c(() => {
131
132
  let e = _.current;
132
133
  if (a !== 0 || !e) return;
133
134
  let t = () => l(Math.round(e.offsetWidth));
@@ -136,7 +137,7 @@ function j({ item: t, index: a, limit: c, onFrontWidth: l }) {
136
137
  a,
137
138
  l,
138
139
  _
139
- ]), /* @__PURE__ */ f(v.Root, {
140
+ ]), /* @__PURE__ */ p(y.Root, {
140
141
  toast: t,
141
142
  swipeDirection: [
142
143
  "down",
@@ -145,69 +146,77 @@ function j({ item: t, index: a, limit: c, onFrontWidth: l }) {
145
146
  ],
146
147
  className: "k-toast outline-none",
147
148
  ...a > 0 ? { "data-behind": "" } : {},
148
- ...a >= c ? { "data-index-hidden": "" } : {},
149
- children: [/* @__PURE__ */ d("div", {
149
+ ...a >= s ? { "data-index-hidden": "" } : {},
150
+ children: [/* @__PURE__ */ f("div", {
150
151
  ref: _,
151
- className: e("k-toast-surface", E, y ? "rounded-toast" : "rounded-pill", m === "neutral" ? "pl-16" : "pl-14", t.actionProps ? "pr-6" : "pr-16"),
152
- children: /* @__PURE__ */ f("div", {
152
+ className: e("k-toast-surface", D, v ? "rounded-toast" : "rounded-pill", m === "neutral" ? "pl-16" : "pl-14", t.actionProps ? "pr-6" : "pr-16"),
153
+ children: /* @__PURE__ */ p("div", {
153
154
  className: "k-toast-content flex min-w-0 items-center gap-10",
154
155
  children: [
155
- /* @__PURE__ */ d(T, { tone: m }),
156
- /* @__PURE__ */ f("span", {
156
+ /* @__PURE__ */ f(E, { tone: m }),
157
+ /* @__PURE__ */ p("span", {
157
158
  className: "min-w-0 text-pretty",
158
- children: [g ? /* @__PURE__ */ d(o, {
159
- reserve: g,
159
+ children: [h ? /* @__PURE__ */ f(o, {
160
+ reserve: h,
160
161
  align: "start",
161
- children: /* @__PURE__ */ d(v.Title, { render: /* @__PURE__ */ d("span", {}) })
162
- }) : /* @__PURE__ */ d(v.Title, { render: /* @__PURE__ */ d("span", {}) }), t.description && /* @__PURE__ */ f(u, { children: [" ", /* @__PURE__ */ d(v.Description, {
163
- render: /* @__PURE__ */ d("span", {}),
162
+ children: /* @__PURE__ */ f(y.Title, { render: /* @__PURE__ */ f("span", {}) })
163
+ }) : /* @__PURE__ */ f(y.Title, { render: /* @__PURE__ */ f("span", {}) }), t.description && /* @__PURE__ */ p(d, { children: [" ", /* @__PURE__ */ f(y.Description, {
164
+ render: /* @__PURE__ */ f("span", {}),
164
165
  className: "font-regular text-toast-fg-secondary"
165
166
  })] })]
166
167
  }),
167
- t.actionProps && /* @__PURE__ */ d(v.Action, { className: D })
168
+ t.actionProps && /* @__PURE__ */ f(y.Action, { className: O })
168
169
  ]
169
170
  })
170
- }), /* @__PURE__ */ d(v.Close, {
171
- "aria-label": p("toast.dismiss", "Dismiss"),
172
- className: O,
173
- children: /* @__PURE__ */ d(r, {
174
- icon: h,
171
+ }), /* @__PURE__ */ f(y.Close, {
172
+ "aria-label": u("toast.dismiss", "Dismiss"),
173
+ className: k,
174
+ children: /* @__PURE__ */ f(r, {
175
+ icon: g,
175
176
  size: "xs",
176
177
  className: "size-12"
177
178
  })
178
179
  })]
179
180
  });
180
181
  }
181
- function M({ limit: e }) {
182
- let { toasts: r } = v.useToastManager(), i = r.filter((e) => e.transitionStatus !== "ending"), [a, o] = l(0), s = n();
183
- return /* @__PURE__ */ d(v.Portal, {
182
+ function N({ limit: e, viewportRef: r }) {
183
+ let { toasts: i } = y.useToastManager(), a = i.filter((e) => e.transitionStatus !== "ending"), [o, s] = u(0), c = n();
184
+ return /* @__PURE__ */ f(y.Portal, {
184
185
  container: t(),
185
- children: /* @__PURE__ */ d(v.Viewport, {
186
- "aria-label": s("toast.notifications", "Notifications"),
186
+ children: /* @__PURE__ */ f(y.Viewport, {
187
+ ref: r,
188
+ "aria-label": c("toast.notifications", "Notifications"),
187
189
  className: "fixed right-0 bottom-24 left-0 z-60 mx-auto h-0 w-full toast-viewport-width outline-none",
188
- style: { "--k-front-width": a ? `${a}px` : "auto" },
189
- children: r.map((t) => /* @__PURE__ */ d(j, {
190
+ style: { "--k-front-width": o ? `${o}px` : "auto" },
191
+ children: i.map((t) => /* @__PURE__ */ f(M, {
190
192
  item: t,
191
- index: Math.max(0, i.indexOf(t)),
193
+ index: Math.max(0, a.indexOf(t)),
192
194
  limit: e,
193
- onFrontWidth: o
195
+ onFrontWidth: s
194
196
  }, t.id))
195
197
  })
196
198
  });
197
199
  }
198
- function N({ limit: e = 3, timeout: t = 5e3 }) {
199
- return /* @__PURE__ */ d(v.Provider, {
200
- toastManager: S,
200
+ var P = /* @__PURE__ */ s(function({ limit: e = 3, timeout: t = 5e3 }, n) {
201
+ return /* @__PURE__ */ f(y.Provider, {
202
+ toastManager: C,
201
203
  limit: e,
202
204
  timeout: t,
203
- children: /* @__PURE__ */ d(M, { limit: e })
205
+ children: /* @__PURE__ */ f(N, {
206
+ limit: e,
207
+ viewportRef: n
208
+ })
204
209
  });
205
- }
206
- process.env.NODE_ENV !== "production" && (N.displayName = "Toaster");
207
- var P = /* @__PURE__ */ Object.assign(function(e) {
208
- return /* @__PURE__ */ d(N, { ...e });
209
- }, { add: w });
210
+ });
211
+ process.env.NODE_ENV !== "production" && (P.displayName = "Toaster");
212
+ var F = /* @__PURE__ */ Object.assign(/* @__PURE__ */ s(function(e, t) {
213
+ return /* @__PURE__ */ f(P, {
214
+ ref: t,
215
+ ...e
216
+ });
217
+ }), { add: T });
218
+ process.env.NODE_ENV !== "production" && (F.displayName = "Toast");
210
219
  //#endregion
211
- export { b as KAESO_TOAST_DEFAULT_VARIANTS, y as KAESO_TOAST_VARIANTS, P as Toast, A as ToastCapsule, N as Toaster, w as toast, S as toastManager };
220
+ export { x as KAESO_TOAST_DEFAULT_VARIANTS, b as KAESO_TOAST_VARIANTS, F as Toast, j as ToastCapsule, P as Toaster, T as toast, C as toastManager };
212
221
 
213
222
  //# sourceMappingURL=toast.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.js","names":["__icon_CheckmarkCircle02Icon","__icon_AlertCircleIcon","__icon_Alert02Icon","__icon_InformationCircleIcon","__icon_Cancel01Icon","BaseToast","_Fragment","cn","usePortalContainer","useUiText","Icon","observeResize","Spinner","SwapText","Fragment$1","Toast$1","KAESO_TOAST_VARIANTS","KAESO_TOAST_DEFAULT_VARIANTS","ICON","CheckmarkCircle02Icon","AlertCircleIcon","Alert02Icon","InformationCircleIcon","toastManager","add","tone","o","toast","title","id","reserve","m","p","v","ToneIcon","SURFACE","ACTION","CLOSE","useMultiline","ref","useRef","multi","setMulti","useState","useLayoutEffect","el","description","ToastCapsule","force","t","action","closable","Cancel01Icon","ToastItem","item","index","report","onFrontWidth","limit","List","live","toasts","frontWidth","setFrontWidth","Toaster","Toast","props"],"sources":["../../src/components/toast/toast.tsx"],"sourcesContent":["import { useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { CheckmarkCircle02Icon as __icon_CheckmarkCircle02Icon, AlertCircleIcon as __icon_AlertCircleIcon, Alert02Icon as __icon_Alert02Icon, InformationCircleIcon as __icon_InformationCircleIcon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Spinner } from \"../loader/loader.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TOAST_VARIANTS = {\n tone: {\n neutral: { classes: \"\" },\n success: { classes: \"text-success\" },\n error: { classes: \"text-danger\" },\n warning: { classes: \"text-warning\" },\n info: { classes: \"text-info\" },\n loading: { classes: \"text-toast-fg-secondary\" },\n },\n} as const;\nexport const KAESO_TOAST_DEFAULT_VARIANTS = { tone: \"neutral\" } as const;\ntype Tone = keyof typeof KAESO_TOAST_VARIANTS.tone;\n\nconst ICON = { success: __icon_CheckmarkCircle02Icon, error: __icon_AlertCircleIcon, warning: __icon_Alert02Icon, info: __icon_InformationCircleIcon } as const;\n\nexport const toastManager = /* @__PURE__ */ BaseToast.createToastManager();\n\nexport interface ToastOptions {\n description?: ReactNode | undefined;\n action?: { label: string; onClick: () => void } | undefined;\n timeout?: number | undefined;\n id?: string | undefined;\n}\n\ninterface ToastData {\n reserve?: ReactNode[] | undefined;\n}\n\nfunction add(tone: Tone, title: ReactNode, o: ToastOptions = {}) {\n return toastManager.add({\n title,\n type: tone,\n ...(o.description !== undefined ? { description: o.description } : {}),\n ...(o.timeout !== undefined ? { timeout: o.timeout } : {}),\n ...(o.id ? { id: o.id } : {}),\n ...(tone === \"error\" ? { priority: \"high\" as const } : {}),\n ...(o.action ? { actionProps: { children: o.action.label, onClick: o.action.onClick } } : {}),\n });\n}\n\nexport const toast = /* @__PURE__ */ Object.assign((title: ReactNode, o?: ToastOptions) => add(\"neutral\", title, o), {\n success: (title: ReactNode, o?: ToastOptions) => add(\"success\", title, o),\n error: (title: ReactNode, o?: ToastOptions) => add(\"error\", title, o),\n warning: (title: ReactNode, o?: ToastOptions) => add(\"warning\", title, o),\n info: (title: ReactNode, o?: ToastOptions) => add(\"info\", title, o),\n dismiss: (id?: string) => toastManager.close(id),\n promise: <T,>(p: Promise<T>, m: { loading: string; success: string | ((v: T) => string); error: string | ((e: unknown) => string) }) => {\n const reserve = [m.loading, ...(typeof m.success === \"string\" ? [m.success] : []), ...(typeof m.error === \"string\" ? [m.error] : [])];\n return toastManager.promise(p, {\n loading: { title: m.loading, type: \"loading\", timeout: 0, data: { reserve } },\n success: (v: T) => ({ title: typeof m.success === \"function\" ? m.success(v) : m.success, type: \"success\", data: { reserve } }),\n error: (e: unknown) => ({ title: typeof m.error === \"function\" ? m.error(e) : m.error, type: \"error\", priority: \"high\", data: { reserve } }),\n });\n },\n});\n\nfunction ToneIcon({ tone }: { tone: Tone }) {\n if (tone === \"neutral\") return null;\n return (\n <span className={cn(\"flex shrink-0\", KAESO_TOAST_VARIANTS.tone[tone].classes)}>\n {tone === \"loading\" ? <Spinner size=\"sm\" /> : <Icon icon={ICON[tone]} size=\"sm\" />}\n </span>\n );\n}\n\nconst SURFACE = \"relative flex min-h-44 max-w-560 items-center gap-10 bg-toast py-8 text-body font-medium text-toast-fg shadow-toast\";\nconst ACTION =\n \"inline-flex h-32 shrink-0 cursor-pointer items-center rounded-pill bg-toast-action px-12 text-body font-medium text-toast-fg transition-control hover:bg-toast-action-hover focus-ring\";\nconst CLOSE =\n \"k-toast-close absolute -top-6 -left-6 inline-flex size-20 cursor-pointer items-center justify-center rounded-pill bg-toast text-toast-fg-secondary shadow-toast hover:text-toast-fg focus-ring\";\n\nfunction useMultiline(title: ReactNode, description: ReactNode) {\n const ref = useRef<HTMLDivElement>(null);\n const [multi, setMulti] = useState(false);\n useLayoutEffect(() => {\n const el = ref.current;\n if (el) setMulti(el.offsetHeight > 46);\n }, [title, description]);\n return [ref, multi] as const;\n}\n\nexport function ToastCapsule({\n tone = \"neutral\",\n title,\n description,\n action,\n closable,\n \"data-force\": force,\n}: {\n tone?: Tone | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n action?: string | undefined;\n closable?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}) {\n const [ref, multi] = useMultiline(title, description);\n const t = useUiText();\n return (\n <div role=\"status\" className=\"k-toast-static relative w-max\">\n <div ref={ref} className={cn(SURFACE, multi ? \"rounded-toast\" : \"rounded-pill\", tone === \"neutral\" ? \"pl-16\" : \"pl-14\", action ? \"pr-6\" : \"pr-16\")}>\n <ToneIcon tone={tone} />\n <span className=\"min-w-0 text-pretty\">\n {title}\n {description && <span className=\"font-regular text-toast-fg-secondary\"> {description}</span>}\n </span>\n {action && (\n <button type=\"button\" className={ACTION}>\n {action}\n </button>\n )}\n </div>\n {closable && (\n <button type=\"button\" aria-label={t(\"toast.dismiss\", \"Dismiss\")} className={CLOSE} data-force={force ? `visible ${force}` : \"visible\"}>\n <Icon icon={__icon_Cancel01Icon} size=\"xs\" className=\"size-12\" />\n </button>\n )}\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ToastCapsule.displayName = \"ToastCapsule\";\n\ntype ManagedToast = ReturnType<typeof BaseToast.useToastManager>[\"toasts\"][number];\n\nfunction ToastItem({ item, index, limit, onFrontWidth }: { item: ManagedToast; index: number; limit: number; onFrontWidth: (w: number) => void }) {\n const t = useUiText();\n const tone = ((item.type as Tone) ?? \"neutral\") as Tone;\n const reserve = (item.data as ToastData | undefined)?.reserve;\n const [ref, multi] = useMultiline(item.title, item.description);\n useLayoutEffect(() => {\n const el = ref.current;\n if (index !== 0 || !el) return;\n const report = () => onFrontWidth(Math.round(el.offsetWidth));\n report();\n return observeResize([el], report);\n }, [index, onFrontWidth, ref]);\n return (\n <BaseToast.Root\n toast={item}\n swipeDirection={[\"down\", \"left\", \"right\"]}\n className=\"k-toast outline-none\"\n {...(index > 0 ? { \"data-behind\": \"\" } : {})}\n {...(index >= limit ? { \"data-index-hidden\": \"\" } : {})}\n >\n <div\n ref={ref}\n className={cn(\n \"k-toast-surface\",\n SURFACE,\n multi ? \"rounded-toast\" : \"rounded-pill\",\n tone === \"neutral\" ? \"pl-16\" : \"pl-14\",\n item.actionProps ? \"pr-6\" : \"pr-16\",\n )}\n >\n <div className=\"k-toast-content flex min-w-0 items-center gap-10\">\n <ToneIcon tone={tone} />\n <span className=\"min-w-0 text-pretty\">\n {reserve ? (\n <SwapText reserve={reserve} align=\"start\">\n <BaseToast.Title render={<span />} />\n </SwapText>\n ) : (\n <BaseToast.Title render={<span />} />\n )}\n {item.description && (\n <>\n {\" \"}\n <BaseToast.Description render={<span />} className=\"font-regular text-toast-fg-secondary\" />\n </>\n )}\n </span>\n {item.actionProps && <BaseToast.Action className={ACTION} />}\n </div>\n </div>\n <BaseToast.Close aria-label={t(\"toast.dismiss\", \"Dismiss\")} className={CLOSE}>\n <Icon icon={__icon_Cancel01Icon} size=\"xs\" className=\"size-12\" />\n </BaseToast.Close>\n </BaseToast.Root>\n );\n}\n\nfunction List({ limit }: { limit: number }) {\n const { toasts } = BaseToast.useToastManager();\n const live = toasts.filter((item) => item.transitionStatus !== \"ending\");\n const [frontWidth, setFrontWidth] = useState(0);\n const t = useUiText();\n return (\n <BaseToast.Portal container={usePortalContainer()}>\n <BaseToast.Viewport\n aria-label={t(\"toast.notifications\", \"Notifications\")}\n className=\"fixed right-0 bottom-24 left-0 z-60 mx-auto h-0 w-full toast-viewport-width outline-none\"\n style={{ [\"--k-front-width\" as string]: frontWidth ? `${frontWidth}px` : \"auto\" }}\n >\n {toasts.map((item) => (\n <ToastItem key={item.id} item={item} index={Math.max(0, live.indexOf(item))} limit={limit} onFrontWidth={setFrontWidth} />\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n );\n}\n\nexport function Toaster({ limit = 3, timeout = 5000 }: { limit?: number | undefined; timeout?: number | undefined }) {\n return (\n <BaseToast.Provider toastManager={toastManager} limit={limit} timeout={timeout}>\n <List limit={limit} />\n </BaseToast.Provider>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Toaster.displayName = \"Toaster\";\n\nexport const Toast = /* @__PURE__ */ Object.assign(\n function Toast(props: { limit?: number | undefined; timeout?: number | undefined }) {\n return <Toaster {...props} />;\n },\n { add: toast },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"toast.js","names":["__icon_CheckmarkCircle02Icon","__icon_AlertCircleIcon","__icon_Alert02Icon","__icon_InformationCircleIcon","__icon_Cancel01Icon","BaseToast","_Fragment","cn","usePortalContainer","useUiText","Icon","observeResize","Spinner","SwapText","Fragment$1","Toast$1","KAESO_TOAST_VARIANTS","KAESO_TOAST_DEFAULT_VARIANTS","ICON","CheckmarkCircle02Icon","AlertCircleIcon","Alert02Icon","InformationCircleIcon","toastManager","add","tone","o","toast","title","id","reserve","m","p","v","ToneIcon","SURFACE","ACTION","CLOSE","useMultiline","ref","useRef","multi","setMulti","useState","useLayoutEffect","el","description","ToastCapsule","force","surface","t","action","closable","Cancel01Icon","ToastItem","item","index","report","onFrontWidth","limit","List","live","toasts","frontWidth","setFrontWidth","viewportRef","Toaster","Toast","props"],"sources":["../../src/components/toast/toast.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type ReactNode, type Ref } from \"react\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { CheckmarkCircle02Icon as __icon_CheckmarkCircle02Icon, AlertCircleIcon as __icon_AlertCircleIcon, Alert02Icon as __icon_Alert02Icon, InformationCircleIcon as __icon_InformationCircleIcon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Spinner } from \"../loader/loader.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_TOAST_VARIANTS = {\n tone: {\n neutral: { classes: \"\" },\n success: { classes: \"text-success\" },\n error: { classes: \"text-danger\" },\n warning: { classes: \"text-warning\" },\n info: { classes: \"text-info\" },\n loading: { classes: \"text-toast-fg-secondary\" },\n },\n} as const;\nexport const KAESO_TOAST_DEFAULT_VARIANTS = { tone: \"neutral\" } as const;\ntype Tone = keyof typeof KAESO_TOAST_VARIANTS.tone;\n\nconst ICON = { success: __icon_CheckmarkCircle02Icon, error: __icon_AlertCircleIcon, warning: __icon_Alert02Icon, info: __icon_InformationCircleIcon } as const;\n\nexport const toastManager = /* @__PURE__ */ BaseToast.createToastManager();\n\nexport interface ToastOptions {\n description?: ReactNode | undefined;\n action?: { label: string; onClick: () => void } | undefined;\n timeout?: number | undefined;\n id?: string | undefined;\n}\n\ninterface ToastData {\n reserve?: ReactNode[] | undefined;\n}\n\nfunction add(tone: Tone, title: ReactNode, o: ToastOptions = {}) {\n return toastManager.add({\n title,\n type: tone,\n ...(o.description !== undefined ? { description: o.description } : {}),\n ...(o.timeout !== undefined ? { timeout: o.timeout } : {}),\n ...(o.id ? { id: o.id } : {}),\n ...(tone === \"error\" ? { priority: \"high\" as const } : {}),\n ...(o.action ? { actionProps: { children: o.action.label, onClick: o.action.onClick } } : {}),\n });\n}\n\nexport const toast = /* @__PURE__ */ Object.assign((title: ReactNode, o?: ToastOptions) => add(\"neutral\", title, o), {\n success: (title: ReactNode, o?: ToastOptions) => add(\"success\", title, o),\n error: (title: ReactNode, o?: ToastOptions) => add(\"error\", title, o),\n warning: (title: ReactNode, o?: ToastOptions) => add(\"warning\", title, o),\n info: (title: ReactNode, o?: ToastOptions) => add(\"info\", title, o),\n dismiss: (id?: string) => toastManager.close(id),\n promise: <T,>(p: Promise<T>, m: { loading: string; success: string | ((v: T) => string); error: string | ((e: unknown) => string) }) => {\n const reserve = [m.loading, ...(typeof m.success === \"string\" ? [m.success] : []), ...(typeof m.error === \"string\" ? [m.error] : [])];\n return toastManager.promise(p, {\n loading: { title: m.loading, type: \"loading\", timeout: 0, data: { reserve } },\n success: (v: T) => ({ title: typeof m.success === \"function\" ? m.success(v) : m.success, type: \"success\", data: { reserve } }),\n error: (e: unknown) => ({ title: typeof m.error === \"function\" ? m.error(e) : m.error, type: \"error\", priority: \"high\", data: { reserve } }),\n });\n },\n});\n\nfunction ToneIcon({ tone }: { tone: Tone }) {\n if (tone === \"neutral\") return null;\n return (\n <span className={cn(\"flex shrink-0\", KAESO_TOAST_VARIANTS.tone[tone].classes)}>\n {tone === \"loading\" ? <Spinner size=\"sm\" /> : <Icon icon={ICON[tone]} size=\"sm\" />}\n </span>\n );\n}\n\nconst SURFACE = \"relative flex min-h-44 max-w-560 items-center gap-10 bg-toast py-8 text-body font-medium text-toast-fg shadow-toast\";\nconst ACTION =\n \"inline-flex h-32 shrink-0 cursor-pointer items-center rounded-pill bg-toast-action px-12 text-body font-medium text-toast-fg transition-control hover:bg-toast-action-hover focus-ring\";\nconst CLOSE =\n \"k-toast-close absolute -top-6 -left-6 inline-flex size-20 cursor-pointer items-center justify-center rounded-pill bg-toast text-toast-fg-secondary shadow-toast hover:text-toast-fg focus-ring\";\n\nfunction useMultiline(title: ReactNode, description: ReactNode) {\n const ref = useRef<HTMLDivElement>(null);\n const [multi, setMulti] = useState(false);\n useLayoutEffect(() => {\n const el = ref.current;\n if (el) setMulti(el.offsetHeight > 46);\n }, [title, description]);\n return [ref, multi] as const;\n}\n\nexport interface ToastCapsuleProps {\n tone?: Tone | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n action?: string | undefined;\n closable?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const ToastCapsule = /* @__PURE__ */ forwardRef<HTMLDivElement, ToastCapsuleProps>(function ToastCapsule(\n { tone = \"neutral\", title, description, action, closable, \"data-force\": force },\n ref,\n) {\n const [surface, multi] = useMultiline(title, description);\n const t = useUiText();\n return (\n <div ref={ref} role=\"status\" className=\"k-toast-static relative w-max\">\n <div ref={surface} className={cn(SURFACE, multi ? \"rounded-toast\" : \"rounded-pill\", tone === \"neutral\" ? \"pl-16\" : \"pl-14\", action ? \"pr-6\" : \"pr-16\")}>\n <ToneIcon tone={tone} />\n <span className=\"min-w-0 text-pretty\">\n {title}\n {description && <span className=\"font-regular text-toast-fg-secondary\"> {description}</span>}\n </span>\n {action && (\n <button type=\"button\" className={ACTION}>\n {action}\n </button>\n )}\n </div>\n {closable && (\n <button type=\"button\" aria-label={t(\"toast.dismiss\", \"Dismiss\")} className={CLOSE} data-force={force ? `visible ${force}` : \"visible\"}>\n <Icon icon={__icon_Cancel01Icon} size=\"xs\" className=\"size-12\" />\n </button>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ToastCapsule.displayName = \"ToastCapsule\";\n\ntype ManagedToast = ReturnType<typeof BaseToast.useToastManager>[\"toasts\"][number];\n\nfunction ToastItem({ item, index, limit, onFrontWidth }: { item: ManagedToast; index: number; limit: number; onFrontWidth: (w: number) => void }) {\n const t = useUiText();\n const tone = ((item.type as Tone) ?? \"neutral\") as Tone;\n const reserve = (item.data as ToastData | undefined)?.reserve;\n const [ref, multi] = useMultiline(item.title, item.description);\n useLayoutEffect(() => {\n const el = ref.current;\n if (index !== 0 || !el) return;\n const report = () => onFrontWidth(Math.round(el.offsetWidth));\n report();\n return observeResize([el], report);\n }, [index, onFrontWidth, ref]);\n return (\n <BaseToast.Root\n toast={item}\n swipeDirection={[\"down\", \"left\", \"right\"]}\n className=\"k-toast outline-none\"\n {...(index > 0 ? { \"data-behind\": \"\" } : {})}\n {...(index >= limit ? { \"data-index-hidden\": \"\" } : {})}\n >\n <div\n ref={ref}\n className={cn(\n \"k-toast-surface\",\n SURFACE,\n multi ? \"rounded-toast\" : \"rounded-pill\",\n tone === \"neutral\" ? \"pl-16\" : \"pl-14\",\n item.actionProps ? \"pr-6\" : \"pr-16\",\n )}\n >\n <div className=\"k-toast-content flex min-w-0 items-center gap-10\">\n <ToneIcon tone={tone} />\n <span className=\"min-w-0 text-pretty\">\n {reserve ? (\n <SwapText reserve={reserve} align=\"start\">\n <BaseToast.Title render={<span />} />\n </SwapText>\n ) : (\n <BaseToast.Title render={<span />} />\n )}\n {item.description && (\n <>\n {\" \"}\n <BaseToast.Description render={<span />} className=\"font-regular text-toast-fg-secondary\" />\n </>\n )}\n </span>\n {item.actionProps && <BaseToast.Action className={ACTION} />}\n </div>\n </div>\n <BaseToast.Close aria-label={t(\"toast.dismiss\", \"Dismiss\")} className={CLOSE}>\n <Icon icon={__icon_Cancel01Icon} size=\"xs\" className=\"size-12\" />\n </BaseToast.Close>\n </BaseToast.Root>\n );\n}\n\nfunction List({ limit, viewportRef }: { limit: number; viewportRef: Ref<HTMLDivElement> }) {\n const { toasts } = BaseToast.useToastManager();\n const live = toasts.filter((item) => item.transitionStatus !== \"ending\");\n const [frontWidth, setFrontWidth] = useState(0);\n const t = useUiText();\n return (\n <BaseToast.Portal container={usePortalContainer()}>\n <BaseToast.Viewport\n ref={viewportRef}\n aria-label={t(\"toast.notifications\", \"Notifications\")}\n className=\"fixed right-0 bottom-24 left-0 z-60 mx-auto h-0 w-full toast-viewport-width outline-none\"\n style={{ [\"--k-front-width\" as string]: frontWidth ? `${frontWidth}px` : \"auto\" }}\n >\n {toasts.map((item) => (\n <ToastItem key={item.id} item={item} index={Math.max(0, live.indexOf(item))} limit={limit} onFrontWidth={setFrontWidth} />\n ))}\n </BaseToast.Viewport>\n </BaseToast.Portal>\n );\n}\n\nexport interface ToasterProps {\n limit?: number | undefined;\n timeout?: number | undefined;\n}\n\nexport const Toaster = /* @__PURE__ */ forwardRef<HTMLDivElement, ToasterProps>(function Toaster({ limit = 3, timeout = 5000 }, ref) {\n return (\n <BaseToast.Provider toastManager={toastManager} limit={limit} timeout={timeout}>\n <List limit={limit} viewportRef={ref} />\n </BaseToast.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Toaster.displayName = \"Toaster\";\n\nexport const Toast = /* @__PURE__ */ Object.assign(\n /* @__PURE__ */ forwardRef<HTMLDivElement, ToasterProps>(function Toast(props, ref) {\n return <Toaster ref={ref} {...props} />;\n }),\n { add: toast },\n);\nif (process.env.NODE_ENV !== \"production\") Toast.displayName = \"Toast\";\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_TOOLBAR_DEFAULT_VARIANTS, n as KAESO_TOOLBAR_VARIANTS, r as Toolbar } from "../chunks/toolbar-DL6zVrzU.js";
2
+ export { t as KAESO_TOOLBAR_DEFAULT_VARIANTS, n as KAESO_TOOLBAR_VARIANTS, r as Toolbar } from "../chunks/toolbar-WA_oZgu-.js";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as e, n as t, r as n, t as r } from "../chunks/tooltip-BMQ9BtPp.js";
2
+ import { i as e, n as t, r as n, t as r } from "../chunks/tooltip-OcwO0VUT.js";
3
3
  import { jsx as i } from "react/jsx-runtime";
4
4
  import { Tooltip as a } from "@base-ui/react/tooltip";
5
5
  //#region src/components/tooltip/tooltip-provider.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","names":["formatMessage","current","words","zone","setFormatLocale","locale","messages","t","key","english","values","formatLocale","setFormatTimeZone","timeZone","formatTimeZone","inZone","numberLocale","formatNumber","options","value","COMPACT","nativeCompact","abbreviated","text","formatTokens","compact","thousands","promoted","formatContext","binary","tokens","k","unit","formatBytes","units","v","bytes","i","digits","formatPercent","ratio","groupThousands","int","formatUSD","writeUSD","amount","localUSD","smallest","formatPrice","frac","m","parts","part","p","type","at","before","gap","space","number","symbol","significant","match","negative","intPart","sign","n","scaled","str","whole","lead","take","kept","cents","two","formatDuration","ms","places","secondsTo","seconds","total","min","s","minutes","toDate","d","dateFormats","dateFormatter","zoned","format","day","month","f","formatDate","formatDateRange","a","from","b","to","withYear","start","pad2","formatISODate","parseISODate","y","mo","formatRelative","diff","now","abs","future","count","year"],"sources":["../src/format/index.ts"],"sourcesContent":["import { formatMessage, type MessageValues } from \"../i18n/message.js\";\n\nlet current = \"en\";\nlet words: Readonly<Record<string, string>> = {};\nlet zone: string | undefined;\n\nexport function setFormatLocale(locale: string, messages: Readonly<Record<string, string>> = {}): void {\n current = locale;\n words = messages;\n}\n\nconst t = (key: string, english: string, values?: MessageValues) => formatMessage(words[key] ?? english, values, current);\n\nexport function formatLocale(): string {\n return current;\n}\n\nexport function setFormatTimeZone(timeZone: string | undefined): void {\n if (!timeZone) {\n zone = undefined;\n return;\n }\n try {\n new Intl.DateTimeFormat(\"en\", { timeZone });\n zone = timeZone;\n } catch {\n zone = undefined;\n }\n}\n\nexport function formatTimeZone(): string | undefined {\n return zone;\n}\n\nconst inZone = (): { timeZone?: string } => (zone ? { timeZone: zone } : {});\n\nconst numberLocale = () => (current === \"en\" ? \"en-US\" : current);\n\n// CLDR's en-GB writes September alone with four letters (\"Sept\"), which breaks a column of three-letter months.\nexport function formatNumber(value: number, options: Intl.NumberFormatOptions = {}): string {\n return new Intl.NumberFormat(numberLocale(), { maximumFractionDigits: 2, ...options }).format(value);\n}\n\nconst COMPACT = { maximumFractionDigits: 1, maximumSignificantDigits: 3, roundingPriority: \"morePrecision\" } as const;\n\nconst nativeCompact = (value: number) => new Intl.NumberFormat(numberLocale(), { notation: \"compact\", ...COMPACT }).format(value);\nconst abbreviated = (text: string) => /\\p{L}/u.test(text);\n\nexport function formatTokens(value: number): string {\n if (Math.abs(value) < 1000) return formatNumber(value, { maximumFractionDigits: 0 });\n const compact = nativeCompact(value);\n // German and Chinese have no short form below a million and ten thousand, so 793,640 would stand in full beside 2.89 million.\n if (abbreviated(compact)) return compact;\n const thousands = Number(new Intl.NumberFormat(\"en-US\", { ...COMPACT, useGrouping: false }).format(value / 1000));\n const promoted = nativeCompact(thousands * 1000);\n if (abbreviated(promoted)) return promoted;\n return t(\"format.thousands\", \"{value}K\", { value: formatNumber(thousands, COMPACT) });\n}\n\n/** A model's context or output limit as models are named: a multiple of 1,024 in binary thousands (\"128K\" for 131,072, \"1M\" for 1,048,576), anything else in decimal ones (\"128K\" for 128,000, \"200K\"). */\nexport function formatContext(tokens: number): string {\n const binary = tokens % 1000 !== 0 && tokens % 1024 === 0;\n const k = binary ? tokens / 1024 : tokens / 1000;\n const unit = binary ? 1024 : 1000;\n if (tokens < 1000) return formatNumber(tokens, { maximumFractionDigits: 0 });\n if (k >= unit) return `${formatNumber(k / unit, { maximumFractionDigits: 1 })}M`;\n return `${formatNumber(k, { maximumFractionDigits: k < 10 ? 1 : 0 })}K`;\n}\n\nexport function formatBytes(bytes: number): string {\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n let v = bytes;\n let i = 0;\n while (Math.abs(v) >= 1024 && i < units.length - 1) {\n v /= 1024;\n i++;\n }\n const digits = i === 0 || v >= 100 ? 0 : 1;\n return `${formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits, useGrouping: false })} ${units[i]}`;\n}\n\nexport function formatPercent(ratio: number, digits = 1): string {\n return new Intl.NumberFormat(numberLocale(), { style: \"percent\", maximumFractionDigits: digits }).format(ratio);\n}\n\nfunction groupThousands(int: string): string {\n return int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nexport function formatUSD(amount: string, options: { significant?: number; decimals?: number } = {}): string {\n const text = writeUSD(amount, options);\n if (options.decimals === undefined || !/^\\s*-?\\d*\\.?\\d*[1-9]/.test(amount) || /[1-9]/.test(text)) return localUSD(text);\n const smallest = localUSD(`$${options.decimals ? `0.${\"1\".padStart(options.decimals, \"0\")}` : \"1\"}`);\n return /^\\s*-/.test(amount) ? `>\\u00a0−${smallest}` : `<\\u00a0${smallest}`;\n}\n\n/** A price per million tokens, exactly as set: at least two decimals and up to six (\"$0.075\", \"$4.00\", \"$1.25\"). */\nexport function formatPrice(amount: string): string {\n const frac = /\\.(\\d*?)0*\\s*$/.exec(amount)?.[1] ?? \"\";\n return formatUSD(amount, { decimals: Math.min(6, Math.max(2, frac.length)) });\n}\n\nfunction localUSD(text: string): string {\n const m = /^(−?)\\$([\\d,]+)(?:\\.(\\d+))?$/.exec(text);\n if (current === \"en\" || current.startsWith(\"zh\") || !m) return text;\n const parts = new Intl.NumberFormat(numberLocale(), { style: \"currency\", currency: \"USD\" }).formatToParts(1000.5);\n const part = (type: string) => parts.find((p) => p.type === type)?.value;\n const at = parts.findIndex((p) => p.type === \"currency\");\n const before = at < parts.findIndex((p) => p.type === \"integer\");\n const gap = parts[before ? at + 1 : at - 1];\n const space = gap?.type === \"literal\" ? gap.value : \"\";\n const number = (m[2] ?? \"\").replace(/,/g, part(\"group\") ?? \",\") + (m[3] ? `${part(\"decimal\") ?? \".\"}${m[3]}` : \"\");\n const symbol = part(\"currency\") ?? \"$\";\n return before ? `${m[1]}${symbol}${space}${number}` : `${m[1]}${number}${space}${symbol}`;\n}\n\nfunction writeUSD(amount: string, options: { significant?: number; decimals?: number }): string {\n const significant = options.significant ?? 3;\n const match = /^\\s*(-)?(\\d*)(?:\\.(\\d*))?\\s*$/.exec(amount);\n if (!match) return amount;\n const negative = match[1] === \"-\";\n const intPart = (match[2] ?? \"\").replace(/^0+(?=\\d)/, \"\") || \"0\";\n const frac = match[3] ?? \"\";\n const sign = negative ? \"−\" : \"\";\n if (options.decimals !== undefined) {\n const n = options.decimals;\n const digits = (intPart + frac.padEnd(n + 1, \"0\").slice(0, n + 1)).replace(/^0+(?=\\d)/, \"\");\n let scaled = BigInt(digits.slice(0, -1) || \"0\");\n if (Number(digits.slice(-1)) >= 5) scaled += 1n;\n const str = scaled.toString().padStart(n + 1, \"0\");\n const whole = str.slice(0, str.length - n) || \"0\";\n const isZero = scaled === 0n;\n return `${negative && !isZero ? sign : \"\"}$${groupThousands(whole)}${n ? `.${str.slice(-n)}` : \"\"}`;\n }\n if (intPart === \"0\" && /^0{2}/.test(frac.padEnd(2, \"0\")) && /[1-9]/.test(frac)) {\n let lead = frac.match(/^0*/)?.[0].length ?? 0;\n const take = frac.slice(lead, lead + significant + 1).padEnd(significant + 1, \"0\");\n let kept = BigInt(take.slice(0, significant));\n if (Number(take[significant]) >= 5) kept += 1n;\n let digits = kept.toString().padStart(significant, \"0\");\n if (digits.length > significant) {\n lead -= 1;\n digits = digits.slice(0, significant);\n }\n if (lead < 2) return `${sign}$0.${\"0\".repeat(Math.max(0, lead))}${digits}`.replace(/^(−?\\$0\\.\\d{2})\\d*$/, \"$1\");\n return `${sign}$0.${\"0\".repeat(lead)}${digits}`;\n }\n const cents = frac.padEnd(3, \"0\");\n let whole = BigInt(intPart);\n let two = Number(cents.slice(0, 2));\n if (Number(cents[2]) >= 5) two += 1;\n if (two === 100) {\n two = 0;\n whole += 1n;\n }\n const isZero = whole === 0n && two === 0;\n return `${negative && !isZero ? sign : \"\"}$${groupThousands(whole.toString())}.${String(two).padStart(2, \"0\")}`;\n}\n\nexport function formatDuration(ms: number, options: { precise?: boolean | undefined } = {}): string {\n const whole = Math.round(ms);\n if (whole < 1000) return t(\"format.milliseconds\", \"{ms} ms\", { ms: String(whole) });\n const places = options.precise ? 2 : 1;\n const secondsTo = (digits: number) => Math.round(ms / 10 ** (3 - digits)) / 10 ** digits;\n const seconds = (digits: number) =>\n t(\"format.seconds\", \"{s} s\", {\n s: formatNumber(secondsTo(digits), { minimumFractionDigits: options.precise ? digits : 0, maximumFractionDigits: digits }),\n });\n if (secondsTo(places) < 10) return seconds(places);\n if (secondsTo(places - 1) < 60) return seconds(places - 1);\n const total = secondsTo(0);\n if (total < 3600) {\n const min = Math.floor(total / 60);\n const s = total % 60;\n return s ? t(\"format.minutesSeconds\", \"{min} min {s} s\", { min: String(min), s: String(s) }) : t(\"format.minutes\", \"{min} min\", { min: String(min) });\n }\n const minutes = Math.round(ms / 60_000);\n return t(\"format.hoursMinutes\", \"{h} h {min} min\", { h: String(Math.floor(minutes / 60)), min: String(minutes % 60) });\n}\n\ntype DateInput = Date | string | number;\nconst toDate = (d: DateInput) => (d instanceof Date ? d : new Date(d));\n\nconst dateFormats = new Map<string, (d: Date) => string>();\n\n/** A cached date formatter in the format locale. English writes the day first with three-letter months (\"20 Sep 2026\", \"Mon 21 Sep\"), the console's English everywhere. */\nexport function dateFormatter(options: Intl.DateTimeFormatOptions, locale: string = current): (value: DateInput) => string {\n // A cached formatter keeps the zone it was made in, so the viewer's zone is part of the key.\n const zoned = options.timeZone ? options : { ...options, timeZone: new Intl.DateTimeFormat().resolvedOptions().timeZone };\n const key = `${locale}|${JSON.stringify(zoned)}`;\n let format = dateFormats.get(key);\n if (!format) {\n if (locale === \"en\") {\n const day = new Intl.DateTimeFormat(\"en-GB\", zoned);\n const month = zoned.month === \"short\" ? new Intl.DateTimeFormat(\"en-US\", { month: \"short\", timeZone: zoned.timeZone }) : null;\n format = (d) =>\n day\n .formatToParts(d)\n .map((p) => (p.type === \"month\" && month ? month.format(d) : p.type === \"weekday\" ? p.value.replace(/,$/, \"\") : p.value))\n .join(\"\");\n } else {\n const f = new Intl.DateTimeFormat(locale, zoned);\n format = (d) => f.format(d);\n }\n dateFormats.set(key, format);\n }\n return (value) => format(toDate(value));\n}\n\nexport function formatDate(value: DateInput, options: { time?: boolean; utc?: boolean; seconds?: boolean } = {}): string {\n const f = dateFormatter({\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n ...(options.time ? { hour: \"2-digit\", minute: \"2-digit\", ...(options.seconds ? { second: \"2-digit\" } : {}), hourCycle: \"h23\" } : {}),\n ...(options.utc ? { timeZone: \"UTC\" } : inZone()),\n });\n return `${f(value)}${options.utc ? \" UTC\" : \"\"}`;\n}\n\nexport function formatDateRange(from: DateInput, to: DateInput): string {\n const a = toDate(from);\n const b = toDate(to);\n const f = dateFormatter({ day: \"numeric\", month: \"short\" });\n const withYear = dateFormatter({ day: \"numeric\", month: \"short\", year: \"numeric\" });\n if (a.getFullYear() !== b.getFullYear()) return `${withYear(a)} – ${withYear(b)}`;\n const start = f(a);\n return a.toDateString() === b.toDateString() ? start : `${start} – ${f(b)}`;\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, \"0\");\n\nexport function formatISODate(value: DateInput, options: { utc?: boolean | undefined } = {}): string {\n const d = toDate(value);\n if (options.utc) return d.toISOString().slice(0, 10);\n return `${String(d.getFullYear()).padStart(4, \"0\")}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\nexport function parseISODate(text: string): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(text.trim());\n if (!m) return null;\n const [y, mo, day] = [Number(m[1]), Number(m[2]) - 1, Number(m[3])];\n const d = new Date(2000, 0, 1);\n d.setFullYear(y, mo, day);\n return d.getFullYear() === y && d.getMonth() === mo && d.getDate() === day ? d : null;\n}\n\nexport function formatRelative(value: DateInput, now: DateInput = Date.now()): string {\n const d = toDate(value);\n const diff = toDate(now).getTime() - d.getTime();\n const abs = Math.abs(diff);\n const future = diff < 0;\n if (abs < 45_000) return t(\"format.justNow\", \"just now\");\n if (abs < 3_600_000) {\n const count = Math.round(abs / 60_000);\n return future ? t(\"format.inMinutes\", \"in {count} min\", { count }) : t(\"format.minutesAgo\", \"{count} min ago\", { count });\n }\n if (abs < 86_400_000) {\n const count = Math.round(abs / 3_600_000);\n return future ? t(\"format.inHours\", \"in {count} h\", { count }) : t(\"format.hoursAgo\", \"{count} h ago\", { count });\n }\n if (abs < 172_800_000 && !future) return t(\"format.yesterday\", \"yesterday\");\n if (abs < 7 * 86_400_000) {\n const count = Math.round(abs / 86_400_000);\n return future\n ? t(\"format.inDays\", \"{count, plural, one {in # day} other {in # days}}\", { count })\n : t(\"format.daysAgo\", \"{count, plural, one {# day ago} other {# days ago}}\", { count });\n }\n const year = dateFormatter({ year: \"numeric\", ...inZone() }, \"en\");\n return dateFormatter({\n day: \"numeric\",\n month: \"short\",\n ...inZone(),\n ...(year(d) !== year(toDate(now)) ? { year: \"numeric\" } : {}),\n })(d);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"format.js","names":["formatMessage","current","words","zone","setFormatLocale","locale","messages","t","key","english","values","formatLocale","setFormatTimeZone","timeZone","formatTimeZone","inZone","numberLocale","formatNumber","options","value","COMPACT","nativeCompact","abbreviated","text","formatTokens","compact","thousands","promoted","formatContext","binary","tokens","k","unit","formatBytes","units","v","bytes","i","digits","formatPercent","ratio","groupThousands","int","formatUSD","writeUSD","amount","localUSD","smallest","formatPrice","frac","m","parts","part","p","type","at","before","gap","space","number","symbol","significant","match","negative","intPart","sign","n","scaled","str","whole","lead","take","kept","cents","two","formatDuration","ms","places","secondsTo","seconds","total","min","s","minutes","toDate","d","dateFormats","dateFormatter","zoned","format","day","month","f","formatDate","formatDateRange","a","from","b","to","withYear","start","pad2","formatISODate","parseISODate","y","mo","formatRelative","diff","now","abs","future","count","year"],"sources":["../src/format/index.ts"],"sourcesContent":["import { formatMessage, type MessageValues } from \"../i18n/message.js\";\n\nlet current = \"en\";\nlet words: Readonly<Record<string, string>> = {};\nlet zone: string | undefined;\n\nexport function setFormatLocale(locale: string, messages: Readonly<Record<string, string>> = {}): void {\n current = locale;\n words = messages;\n}\n\nconst t = (key: string, english: string, values?: MessageValues) => formatMessage(words[key] ?? english, values, current);\n\nexport function formatLocale(): string {\n return current;\n}\n\nexport function setFormatTimeZone(timeZone: string | undefined): void {\n if (!timeZone) {\n zone = undefined;\n return;\n }\n try {\n new Intl.DateTimeFormat(\"en\", { timeZone });\n zone = timeZone;\n } catch {\n zone = undefined;\n }\n}\n\nexport function formatTimeZone(): string | undefined {\n return zone;\n}\n\nconst inZone = (): { timeZone?: string | undefined } => (zone ? { timeZone: zone } : {});\n\nconst numberLocale = () => (current === \"en\" ? \"en-US\" : current);\n\n// CLDR's en-GB writes September alone with four letters (\"Sept\"), which breaks a column of three-letter months.\nexport function formatNumber(value: number, options: Intl.NumberFormatOptions = {}): string {\n return new Intl.NumberFormat(numberLocale(), { maximumFractionDigits: 2, ...options }).format(value);\n}\n\nconst COMPACT = { maximumFractionDigits: 1, maximumSignificantDigits: 3, roundingPriority: \"morePrecision\" } as const;\n\nconst nativeCompact = (value: number) => new Intl.NumberFormat(numberLocale(), { notation: \"compact\", ...COMPACT }).format(value);\nconst abbreviated = (text: string) => /\\p{L}/u.test(text);\n\nexport function formatTokens(value: number): string {\n if (Math.abs(value) < 1000) return formatNumber(value, { maximumFractionDigits: 0 });\n const compact = nativeCompact(value);\n // German and Chinese have no short form below a million and ten thousand, so 793,640 would stand in full beside 2.89 million.\n if (abbreviated(compact)) return compact;\n const thousands = Number(new Intl.NumberFormat(\"en-US\", { ...COMPACT, useGrouping: false }).format(value / 1000));\n const promoted = nativeCompact(thousands * 1000);\n if (abbreviated(promoted)) return promoted;\n return t(\"format.thousands\", \"{value}K\", { value: formatNumber(thousands, COMPACT) });\n}\n\n/** A model's context or output limit as models are named: a multiple of 1,024 in binary thousands (\"128K\" for 131,072, \"1M\" for 1,048,576), anything else in decimal ones (\"128K\" for 128,000, \"200K\"). */\nexport function formatContext(tokens: number): string {\n const binary = tokens % 1000 !== 0 && tokens % 1024 === 0;\n const k = binary ? tokens / 1024 : tokens / 1000;\n const unit = binary ? 1024 : 1000;\n if (tokens < 1000) return formatNumber(tokens, { maximumFractionDigits: 0 });\n if (k >= unit) return `${formatNumber(k / unit, { maximumFractionDigits: 1 })}M`;\n return `${formatNumber(k, { maximumFractionDigits: k < 10 ? 1 : 0 })}K`;\n}\n\nexport function formatBytes(bytes: number): string {\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n let v = bytes;\n let i = 0;\n while (Math.abs(v) >= 1024 && i < units.length - 1) {\n v /= 1024;\n i++;\n }\n const digits = i === 0 || v >= 100 ? 0 : 1;\n return `${formatNumber(v, { minimumFractionDigits: digits, maximumFractionDigits: digits, useGrouping: false })} ${units[i]}`;\n}\n\nexport function formatPercent(ratio: number, digits = 1): string {\n return new Intl.NumberFormat(numberLocale(), { style: \"percent\", maximumFractionDigits: digits }).format(ratio);\n}\n\nfunction groupThousands(int: string): string {\n return int.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nexport function formatUSD(amount: string, options: { significant?: number | undefined; decimals?: number | undefined } = {}): string {\n const text = writeUSD(amount, options);\n if (options.decimals === undefined || !/^\\s*-?\\d*\\.?\\d*[1-9]/.test(amount) || /[1-9]/.test(text)) return localUSD(text);\n const smallest = localUSD(`$${options.decimals ? `0.${\"1\".padStart(options.decimals, \"0\")}` : \"1\"}`);\n return /^\\s*-/.test(amount) ? `>\\u00a0−${smallest}` : `<\\u00a0${smallest}`;\n}\n\n/** A price per million tokens, exactly as set: at least two decimals and up to six (\"$0.075\", \"$4.00\", \"$1.25\"). */\nexport function formatPrice(amount: string): string {\n const frac = /\\.(\\d*?)0*\\s*$/.exec(amount)?.[1] ?? \"\";\n return formatUSD(amount, { decimals: Math.min(6, Math.max(2, frac.length)) });\n}\n\nfunction localUSD(text: string): string {\n const m = /^(−?)\\$([\\d,]+)(?:\\.(\\d+))?$/.exec(text);\n if (current === \"en\" || current.startsWith(\"zh\") || !m) return text;\n const parts = new Intl.NumberFormat(numberLocale(), { style: \"currency\", currency: \"USD\" }).formatToParts(1000.5);\n const part = (type: string) => parts.find((p) => p.type === type)?.value;\n const at = parts.findIndex((p) => p.type === \"currency\");\n const before = at < parts.findIndex((p) => p.type === \"integer\");\n const gap = parts[before ? at + 1 : at - 1];\n const space = gap?.type === \"literal\" ? gap.value : \"\";\n const number = (m[2] ?? \"\").replace(/,/g, part(\"group\") ?? \",\") + (m[3] ? `${part(\"decimal\") ?? \".\"}${m[3]}` : \"\");\n const symbol = part(\"currency\") ?? \"$\";\n return before ? `${m[1]}${symbol}${space}${number}` : `${m[1]}${number}${space}${symbol}`;\n}\n\nfunction writeUSD(amount: string, options: { significant?: number | undefined; decimals?: number | undefined }): string {\n const significant = options.significant ?? 3;\n const match = /^\\s*(-)?(\\d*)(?:\\.(\\d*))?\\s*$/.exec(amount);\n if (!match) return amount;\n const negative = match[1] === \"-\";\n const intPart = (match[2] ?? \"\").replace(/^0+(?=\\d)/, \"\") || \"0\";\n const frac = match[3] ?? \"\";\n const sign = negative ? \"−\" : \"\";\n if (options.decimals !== undefined) {\n const n = options.decimals;\n const digits = (intPart + frac.padEnd(n + 1, \"0\").slice(0, n + 1)).replace(/^0+(?=\\d)/, \"\");\n let scaled = BigInt(digits.slice(0, -1) || \"0\");\n if (Number(digits.slice(-1)) >= 5) scaled += 1n;\n const str = scaled.toString().padStart(n + 1, \"0\");\n const whole = str.slice(0, str.length - n) || \"0\";\n const isZero = scaled === 0n;\n return `${negative && !isZero ? sign : \"\"}$${groupThousands(whole)}${n ? `.${str.slice(-n)}` : \"\"}`;\n }\n if (intPart === \"0\" && /^0{2}/.test(frac.padEnd(2, \"0\")) && /[1-9]/.test(frac)) {\n let lead = frac.match(/^0*/)?.[0].length ?? 0;\n const take = frac.slice(lead, lead + significant + 1).padEnd(significant + 1, \"0\");\n let kept = BigInt(take.slice(0, significant));\n if (Number(take[significant]) >= 5) kept += 1n;\n let digits = kept.toString().padStart(significant, \"0\");\n if (digits.length > significant) {\n lead -= 1;\n digits = digits.slice(0, significant);\n }\n if (lead < 2) return `${sign}$0.${\"0\".repeat(Math.max(0, lead))}${digits}`.replace(/^(−?\\$0\\.\\d{2})\\d*$/, \"$1\");\n return `${sign}$0.${\"0\".repeat(lead)}${digits}`;\n }\n const cents = frac.padEnd(3, \"0\");\n let whole = BigInt(intPart);\n let two = Number(cents.slice(0, 2));\n if (Number(cents[2]) >= 5) two += 1;\n if (two === 100) {\n two = 0;\n whole += 1n;\n }\n const isZero = whole === 0n && two === 0;\n return `${negative && !isZero ? sign : \"\"}$${groupThousands(whole.toString())}.${String(two).padStart(2, \"0\")}`;\n}\n\nexport function formatDuration(ms: number, options: { precise?: boolean | undefined } = {}): string {\n const whole = Math.round(ms);\n if (whole < 1000) return t(\"format.milliseconds\", \"{ms} ms\", { ms: String(whole) });\n const places = options.precise ? 2 : 1;\n const secondsTo = (digits: number) => Math.round(ms / 10 ** (3 - digits)) / 10 ** digits;\n const seconds = (digits: number) =>\n t(\"format.seconds\", \"{s} s\", {\n s: formatNumber(secondsTo(digits), { minimumFractionDigits: options.precise ? digits : 0, maximumFractionDigits: digits }),\n });\n if (secondsTo(places) < 10) return seconds(places);\n if (secondsTo(places - 1) < 60) return seconds(places - 1);\n const total = secondsTo(0);\n if (total < 3600) {\n const min = Math.floor(total / 60);\n const s = total % 60;\n return s ? t(\"format.minutesSeconds\", \"{min} min {s} s\", { min: String(min), s: String(s) }) : t(\"format.minutes\", \"{min} min\", { min: String(min) });\n }\n const minutes = Math.round(ms / 60_000);\n return t(\"format.hoursMinutes\", \"{h} h {min} min\", { h: String(Math.floor(minutes / 60)), min: String(minutes % 60) });\n}\n\ntype DateInput = Date | string | number;\nconst toDate = (d: DateInput) => (d instanceof Date ? d : new Date(d));\n\nconst dateFormats = new Map<string, (d: Date) => string>();\n\n/** A cached date formatter in the format locale. English writes the day first with three-letter months (\"20 Sep 2026\", \"Mon 21 Sep\"), the console's English everywhere. */\nexport function dateFormatter(options: Intl.DateTimeFormatOptions, locale: string = current): (value: DateInput) => string {\n // A cached formatter keeps the zone it was made in, so the viewer's zone is part of the key.\n const zoned = options.timeZone ? options : { ...options, timeZone: new Intl.DateTimeFormat().resolvedOptions().timeZone };\n const key = `${locale}|${JSON.stringify(zoned)}`;\n let format = dateFormats.get(key);\n if (!format) {\n if (locale === \"en\") {\n const day = new Intl.DateTimeFormat(\"en-GB\", zoned);\n const month = zoned.month === \"short\" ? new Intl.DateTimeFormat(\"en-US\", { month: \"short\", timeZone: zoned.timeZone }) : null;\n format = (d) =>\n day\n .formatToParts(d)\n .map((p) => (p.type === \"month\" && month ? month.format(d) : p.type === \"weekday\" ? p.value.replace(/,$/, \"\") : p.value))\n .join(\"\");\n } else {\n const f = new Intl.DateTimeFormat(locale, zoned);\n format = (d) => f.format(d);\n }\n dateFormats.set(key, format);\n }\n return (value) => format(toDate(value));\n}\n\nexport function formatDate(value: DateInput, options: { time?: boolean | undefined; utc?: boolean | undefined; seconds?: boolean | undefined } = {}): string {\n const f = dateFormatter({\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n ...(options.time ? { hour: \"2-digit\", minute: \"2-digit\", ...(options.seconds ? { second: \"2-digit\" } : {}), hourCycle: \"h23\" } : {}),\n ...(options.utc ? { timeZone: \"UTC\" } : inZone()),\n });\n return `${f(value)}${options.utc ? \" UTC\" : \"\"}`;\n}\n\nexport function formatDateRange(from: DateInput, to: DateInput): string {\n const a = toDate(from);\n const b = toDate(to);\n const f = dateFormatter({ day: \"numeric\", month: \"short\" });\n const withYear = dateFormatter({ day: \"numeric\", month: \"short\", year: \"numeric\" });\n if (a.getFullYear() !== b.getFullYear()) return `${withYear(a)} – ${withYear(b)}`;\n const start = f(a);\n return a.toDateString() === b.toDateString() ? start : `${start} – ${f(b)}`;\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, \"0\");\n\nexport function formatISODate(value: DateInput, options: { utc?: boolean | undefined } = {}): string {\n const d = toDate(value);\n if (options.utc) return d.toISOString().slice(0, 10);\n return `${String(d.getFullYear()).padStart(4, \"0\")}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\nexport function parseISODate(text: string): Date | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(text.trim());\n if (!m) return null;\n const [y, mo, day] = [Number(m[1]), Number(m[2]) - 1, Number(m[3])];\n const d = new Date(2000, 0, 1);\n d.setFullYear(y, mo, day);\n return d.getFullYear() === y && d.getMonth() === mo && d.getDate() === day ? d : null;\n}\n\nexport function formatRelative(value: DateInput, now: DateInput = Date.now()): string {\n const d = toDate(value);\n const diff = toDate(now).getTime() - d.getTime();\n const abs = Math.abs(diff);\n const future = diff < 0;\n if (abs < 45_000) return t(\"format.justNow\", \"just now\");\n if (abs < 3_600_000) {\n const count = Math.round(abs / 60_000);\n return future ? t(\"format.inMinutes\", \"in {count} min\", { count }) : t(\"format.minutesAgo\", \"{count} min ago\", { count });\n }\n if (abs < 86_400_000) {\n const count = Math.round(abs / 3_600_000);\n return future ? t(\"format.inHours\", \"in {count} h\", { count }) : t(\"format.hoursAgo\", \"{count} h ago\", { count });\n }\n if (abs < 172_800_000 && !future) return t(\"format.yesterday\", \"yesterday\");\n if (abs < 7 * 86_400_000) {\n const count = Math.round(abs / 86_400_000);\n return future\n ? t(\"format.inDays\", \"{count, plural, one {in # day} other {in # days}}\", { count })\n : t(\"format.daysAgo\", \"{count, plural, one {# day ago} other {# days ago}}\", { count });\n }\n const year = dateFormatter({ year: \"numeric\", ...inZone() }, \"en\");\n return dateFormatter({\n day: \"numeric\",\n month: \"short\",\n ...inZone(),\n ...(year(d) !== year(toDate(now)) ? { year: \"numeric\" } : {}),\n })(d);\n}\n"],"mappings":"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"}
@@ -22,7 +22,7 @@ function s(e) {
22
22
  }
23
23
  async function c(e) {
24
24
  let t = s(e);
25
- return t === "de" ? (await import("./chunks/de-BnNQtBSV.js")).default : t === "zh-CN" ? (await import("./chunks/zh-CN-CKffAT7j.js")).default : {};
25
+ return t === "de" ? (await import("./chunks/de-D_0mmG-k.js")).default : t === "zh-CN" ? (await import("./chunks/zh-CN-Bm6UPIbW.js")).default : {};
26
26
  }
27
27
  //#endregion
28
28
  export { o as LocaleProvider, c as loadUiMessages, s as resolveUiLocale };