@logicplanes/kaeso-ui 0.4.0 → 0.4.1

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 (289) hide show
  1. package/ai/component-guides.md +1 -1
  2. package/ai/component-registry.json +10 -10
  3. package/ai/component-registry.md +9 -9
  4. package/ai/icons.md +1 -1
  5. package/ai/tokens.md +2 -1
  6. package/dist/blocks/delete-resource.js +1 -1
  7. package/dist/blocks/pages.js +5 -5
  8. package/dist/blocks/resource-list.js +4 -4
  9. package/dist/chunks/{app-frame-Cj_gCbmu.js → app-frame-DZPEf2NQ.js} +9 -9
  10. package/dist/chunks/{app-frame-Cj_gCbmu.js.map → app-frame-DZPEf2NQ.js.map} +1 -1
  11. package/dist/chunks/{avatar-DOzOhYJr.js → avatar-HnvBUoe5.js} +2 -2
  12. package/dist/chunks/{avatar-DOzOhYJr.js.map → avatar-HnvBUoe5.js.map} +1 -1
  13. package/dist/chunks/{badge-wUHlj7m3.js → badge-CM8ahjDR.js} +2 -2
  14. package/dist/chunks/{badge-wUHlj7m3.js.map → badge-CM8ahjDR.js.map} +1 -1
  15. package/dist/chunks/{banner-DY1jSc9Y.js → banner-CvYgPwCc.js} +4 -4
  16. package/dist/chunks/{banner-DY1jSc9Y.js.map → banner-CvYgPwCc.js.map} +1 -1
  17. package/dist/chunks/{button-h2IFCER2.js → button-9q66Ta23.js} +13 -13
  18. package/dist/chunks/button-9q66Ta23.js.map +1 -0
  19. package/dist/chunks/{calendar-cVuezHQ6.js → calendar-CeNcqLFd.js} +2 -2
  20. package/dist/chunks/{calendar-cVuezHQ6.js.map → calendar-CeNcqLFd.js.map} +1 -1
  21. package/dist/chunks/{checkbox-C5yvSS7O.js → checkbox-C_DrNA2N.js} +2 -2
  22. package/dist/chunks/{checkbox-C5yvSS7O.js.map → checkbox-C_DrNA2N.js.map} +1 -1
  23. package/dist/chunks/{cn-DUDmdLpZ.js → cn-Isw2DnQX.js} +10 -3
  24. package/dist/chunks/cn-Isw2DnQX.js.map +1 -0
  25. package/dist/chunks/{code-C49NzHUQ.js → code-Bp2p9AuD.js} +2 -2
  26. package/dist/chunks/{code-C49NzHUQ.js.map → code-Bp2p9AuD.js.map} +1 -1
  27. package/dist/chunks/code-block-mEH6Sy3h.js +309 -0
  28. package/dist/chunks/code-block-mEH6Sy3h.js.map +1 -0
  29. package/dist/chunks/{collapsible-CDQq1Y9x.js → collapsible-CtQNJn9b.js} +13 -13
  30. package/dist/chunks/collapsible-CtQNJn9b.js.map +1 -0
  31. package/dist/chunks/{combobox-B9ttar4C.js → combobox-D8ZOm8uT.js} +6 -6
  32. package/dist/chunks/{combobox-B9ttar4C.js.map → combobox-D8ZOm8uT.js.map} +1 -1
  33. package/dist/chunks/{command-list-DZMVrXWD.js → command-list-CzMbdtJs.js} +140 -139
  34. package/dist/chunks/command-list-CzMbdtJs.js.map +1 -0
  35. package/dist/chunks/copy-button-Cdea0wKl.js +142 -0
  36. package/dist/chunks/copy-button-Cdea0wKl.js.map +1 -0
  37. package/dist/chunks/{core-Bu6iq5uh.js → core-FtMDNELx.js} +10 -10
  38. package/dist/chunks/core-FtMDNELx.js.map +1 -0
  39. package/dist/chunks/{date-popup-BJPA_fBm.js → date-popup-NytWvSNh.js} +4 -4
  40. package/dist/chunks/{date-popup-BJPA_fBm.js.map → date-popup-NytWvSNh.js.map} +1 -1
  41. package/dist/chunks/{dialog-BLcP7v24.js → dialog-BZCVFmGF.js} +5 -5
  42. package/dist/chunks/{dialog-BLcP7v24.js.map → dialog-BZCVFmGF.js.map} +1 -1
  43. package/dist/chunks/{empty-YXmSkKzR.js → empty-By1qTJr6.js} +2 -2
  44. package/dist/chunks/{empty-YXmSkKzR.js.map → empty-By1qTJr6.js.map} +1 -1
  45. package/dist/chunks/{field-BZriODU7.js → field-DfITT6Jm.js} +2 -2
  46. package/dist/chunks/{field-BZriODU7.js.map → field-DfITT6Jm.js.map} +1 -1
  47. package/dist/chunks/{icon-BqujXDUc.js → icon-D5uD_mnL.js} +2 -2
  48. package/dist/chunks/{icon-BqujXDUc.js.map → icon-D5uD_mnL.js.map} +1 -1
  49. package/dist/chunks/{icon-button-DmKFxQbP.js → icon-button-C7Du4pvb.js} +3 -3
  50. package/dist/chunks/{icon-button-DmKFxQbP.js.map → icon-button-C7Du4pvb.js.map} +1 -1
  51. package/dist/chunks/{identity-Chj7fW89.js → identity-BcVQd-7H.js} +6 -6
  52. package/dist/chunks/{identity-Chj7fW89.js.map → identity-BcVQd-7H.js.map} +1 -1
  53. package/dist/chunks/{input-9y3afoiq.js → input-B6Docqrk.js} +5 -5
  54. package/dist/chunks/{input-9y3afoiq.js.map → input-B6Docqrk.js.map} +1 -1
  55. package/dist/chunks/{input-group-BoxjnN8I.js → input-group-Dgdb0JpZ.js} +4 -4
  56. package/dist/chunks/{input-group-BoxjnN8I.js.map → input-group-Dgdb0JpZ.js.map} +1 -1
  57. package/dist/chunks/{iso-field-DAa6iPWn.js → iso-field-SOZ7Z-yE.js} +2 -2
  58. package/dist/chunks/{iso-field-DAa6iPWn.js.map → iso-field-SOZ7Z-yE.js.map} +1 -1
  59. package/dist/chunks/{json-view-BkG2hTXV.js → json-view-DCTMY_j4.js} +3 -3
  60. package/dist/chunks/{json-view-BkG2hTXV.js.map → json-view-DCTMY_j4.js.map} +1 -1
  61. package/dist/chunks/{kbd-DqWmbr_e.js → kbd-9A9rX60U.js} +2 -2
  62. package/dist/chunks/{kbd-DqWmbr_e.js.map → kbd-9A9rX60U.js.map} +1 -1
  63. package/dist/chunks/{link-YMcxM-BZ.js → link-CtII7u3h.js} +3 -3
  64. package/dist/chunks/{link-YMcxM-BZ.js.map → link-CtII7u3h.js.map} +1 -1
  65. package/dist/chunks/{list-7VARol_x.js → list-CMXBTVkI.js} +8 -8
  66. package/dist/chunks/{list-7VARol_x.js.map → list-CMXBTVkI.js.map} +1 -1
  67. package/dist/chunks/{loader-ENBh2Fbt.js → loader-DqOUwS1j.js} +2 -2
  68. package/dist/chunks/{loader-ENBh2Fbt.js.map → loader-DqOUwS1j.js.map} +1 -1
  69. package/dist/chunks/{markdown-DBVNULWg.js → markdown-CwVQ0niB.js} +9 -9
  70. package/dist/chunks/{markdown-DBVNULWg.js.map → markdown-CwVQ0niB.js.map} +1 -1
  71. package/dist/chunks/{menu-Bnfi9P3t.js → menu-Cjg4RggA.js} +4 -4
  72. package/dist/chunks/{menu-Bnfi9P3t.js.map → menu-Cjg4RggA.js.map} +1 -1
  73. package/dist/chunks/{meter-DhTnem4k.js → meter-VrC2J2GF.js} +2 -2
  74. package/dist/chunks/{meter-DhTnem4k.js.map → meter-VrC2J2GF.js.map} +1 -1
  75. package/dist/chunks/{nav-sheet-D7wIF_OU.js → nav-sheet-Y2Ite-iF.js} +2 -2
  76. package/dist/chunks/{nav-sheet-D7wIF_OU.js.map → nav-sheet-Y2Ite-iF.js.map} +1 -1
  77. package/dist/chunks/{nav-wordmark-DmbT1Aiw.js → nav-wordmark-CjWM3NYa.js} +2 -2
  78. package/dist/chunks/{nav-wordmark-DmbT1Aiw.js.map → nav-wordmark-CjWM3NYa.js.map} +1 -1
  79. package/dist/chunks/{page-header-B3tV8Wog.js → page-header-CZCQVHYE.js} +4 -4
  80. package/dist/chunks/{page-header-B3tV8Wog.js.map → page-header-CZCQVHYE.js.map} +1 -1
  81. package/dist/chunks/{pagination-CLfsofo3.js → pagination-BStrMDqM.js} +4 -4
  82. package/dist/chunks/{pagination-CLfsofo3.js.map → pagination-BStrMDqM.js.map} +1 -1
  83. package/dist/chunks/{picker-popover-B5YdOxNm.js → picker-popover-BerQAEBT.js} +7 -7
  84. package/dist/chunks/{picker-popover-B5YdOxNm.js.map → picker-popover-BerQAEBT.js.map} +1 -1
  85. package/dist/chunks/{popover-bjxg020P.js → popover-CgLt_4yG.js} +2 -2
  86. package/dist/chunks/{popover-bjxg020P.js.map → popover-CgLt_4yG.js.map} +1 -1
  87. package/dist/chunks/{radio-DwYcXAzv.js → radio-07Muf4cX.js} +2 -2
  88. package/dist/chunks/{radio-DwYcXAzv.js.map → radio-07Muf4cX.js.map} +1 -1
  89. package/dist/chunks/{range-popup-ZunS8QSH.js → range-popup-BCov1iPe.js} +6 -6
  90. package/dist/chunks/{range-popup-ZunS8QSH.js.map → range-popup-BCov1iPe.js.map} +1 -1
  91. package/dist/chunks/{release-art-Ogl-L1Vh.js → release-art-69WpgVik.js} +2 -2
  92. package/dist/chunks/{release-art-Ogl-L1Vh.js.map → release-art-69WpgVik.js.map} +1 -1
  93. package/dist/chunks/{rights-CiIBzT9o.js → rights-UVngOX_4.js} +9 -9
  94. package/dist/chunks/{rights-CiIBzT9o.js.map → rights-UVngOX_4.js.map} +1 -1
  95. package/dist/chunks/{section-BsET7Fo-.js → section-Bvg0EUnr.js} +3 -3
  96. package/dist/chunks/{section-BsET7Fo-.js.map → section-Bvg0EUnr.js.map} +1 -1
  97. package/dist/chunks/{segmented-DxjnIuww.js → segmented-DRLDN8EW.js} +4 -4
  98. package/dist/chunks/{segmented-DxjnIuww.js.map → segmented-DRLDN8EW.js.map} +1 -1
  99. package/dist/chunks/{select-Bbv2f5F8.js → select-eFTHLeYG.js} +14 -14
  100. package/dist/chunks/select-eFTHLeYG.js.map +1 -0
  101. package/dist/chunks/{separator-CpAUELNs.js → separator-D86IW7Ge.js} +2 -2
  102. package/dist/chunks/{separator-CpAUELNs.js.map → separator-D86IW7Ge.js.map} +1 -1
  103. package/dist/chunks/{sidebar-ZSTPK9Jn.js → sidebar-DifJ5KgE.js} +7 -7
  104. package/dist/chunks/{sidebar-ZSTPK9Jn.js.map → sidebar-DifJ5KgE.js.map} +1 -1
  105. package/dist/chunks/{sidebar-menu-ct8IiL4z.js → sidebar-menu-XKOiwrQp.js} +2 -2
  106. package/dist/chunks/{sidebar-menu-ct8IiL4z.js.map → sidebar-menu-XKOiwrQp.js.map} +1 -1
  107. package/dist/chunks/{skeleton-BM797MAg.js → skeleton-Cu74kGJA.js} +2 -2
  108. package/dist/chunks/{skeleton-BM797MAg.js.map → skeleton-Cu74kGJA.js.map} +1 -1
  109. package/dist/chunks/{slider-Ds-tqY-1.js → slider-Dh0qq1wa.js} +2 -2
  110. package/dist/chunks/{slider-Ds-tqY-1.js.map → slider-Dh0qq1wa.js.map} +1 -1
  111. package/dist/chunks/{status-dot-BqVOlShY.js → status-dot-u4Izk-uC.js} +3 -3
  112. package/dist/chunks/{status-dot-BqVOlShY.js.map → status-dot-u4Izk-uC.js.map} +1 -1
  113. package/dist/chunks/{swap-text-Cica0pUr.js → swap-text-CC77iKJF.js} +2 -2
  114. package/dist/chunks/{swap-text-Cica0pUr.js.map → swap-text-CC77iKJF.js.map} +1 -1
  115. package/dist/chunks/{switch-Cq1OfeBr.js → switch-CbU9m9gi.js} +5 -5
  116. package/dist/chunks/switch-CbU9m9gi.js.map +1 -0
  117. package/dist/chunks/{table-D-36EM7f.js → table-CTxDp7zC.js} +2 -2
  118. package/dist/chunks/{table-D-36EM7f.js.map → table-CTxDp7zC.js.map} +1 -1
  119. package/dist/chunks/{tag-XgPXKoxi.js → tag-CqSk8F7M.js} +4 -4
  120. package/dist/chunks/{tag-XgPXKoxi.js.map → tag-CqSk8F7M.js.map} +1 -1
  121. package/dist/chunks/{text-IoDy3Vxi.js → text-hFc6TDp9.js} +3 -3
  122. package/dist/chunks/{text-IoDy3Vxi.js.map → text-hFc6TDp9.js.map} +1 -1
  123. package/dist/chunks/{textarea-jOiTkfMf.js → textarea-17Ftvph_.js} +5 -5
  124. package/dist/chunks/{textarea-jOiTkfMf.js.map → textarea-17Ftvph_.js.map} +1 -1
  125. package/dist/chunks/{timeseries-BBWsSM4Q.js → timeseries-CbnSFD5q.js} +3 -3
  126. package/dist/chunks/{timeseries-BBWsSM4Q.js.map → timeseries-CbnSFD5q.js.map} +1 -1
  127. package/dist/chunks/{toolbar-nVLFWH2i.js → toolbar-B_960Ttx.js} +2 -2
  128. package/dist/chunks/{toolbar-nVLFWH2i.js.map → toolbar-B_960Ttx.js.map} +1 -1
  129. package/dist/chunks/{tooltip-CTBnfiDH.js → tooltip-CRApbLF6.js} +4 -4
  130. package/dist/chunks/{tooltip-CTBnfiDH.js.map → tooltip-CRApbLF6.js.map} +1 -1
  131. package/dist/chunks/{tooltip-root-B0zWodAJ.js → tooltip-root-Dssjjp-E.js} +4 -4
  132. package/dist/chunks/{tooltip-root-B0zWodAJ.js.map → tooltip-root-Dssjjp-E.js.map} +1 -1
  133. package/dist/components/app-frame.js +2 -2
  134. package/dist/components/avatar.js +1 -1
  135. package/dist/components/badge.js +1 -1
  136. package/dist/components/banner.js +1 -1
  137. package/dist/components/button-group.js +4 -4
  138. package/dist/components/button.js +1 -1
  139. package/dist/components/calendar.js +1 -1
  140. package/dist/components/charts/bar.js +2 -2
  141. package/dist/components/charts/donut.js +2 -2
  142. package/dist/components/charts/gauge.js +2 -2
  143. package/dist/components/charts/heatmap.js +1 -1
  144. package/dist/components/charts/sankey.js +2 -2
  145. package/dist/components/charts/sparkline.js +1 -1
  146. package/dist/components/charts/timeseries.js +1 -1
  147. package/dist/components/charts.js +2 -2
  148. package/dist/components/checkbox.js +1 -1
  149. package/dist/components/code-block.js +2 -2
  150. package/dist/components/code.js +1 -1
  151. package/dist/components/collapsible.js +1 -1
  152. package/dist/components/combobox.js +1 -1
  153. package/dist/components/command-list.js +2 -2
  154. package/dist/components/command-palette.js +4 -4
  155. package/dist/components/copy-button.js +1 -1
  156. package/dist/components/data-table.js +14 -14
  157. package/dist/components/data-table.js.map +1 -1
  158. package/dist/components/date-picker.js +7 -7
  159. package/dist/components/date-picker.js.map +1 -1
  160. package/dist/components/dialog.js +2 -2
  161. package/dist/components/display-options.js +8 -8
  162. package/dist/components/empty.js +1 -1
  163. package/dist/components/field.js +1 -1
  164. package/dist/components/filter-chip.js +5 -5
  165. package/dist/components/filter-row.js +1 -1
  166. package/dist/components/flow.js +2 -2
  167. package/dist/components/heading.js +1 -1
  168. package/dist/components/icon-button.js +1 -1
  169. package/dist/components/icon.js +1 -1
  170. package/dist/components/input.js +7 -7
  171. package/dist/components/kaeso/conversation.js +8 -8
  172. package/dist/components/kaeso/identity.js +1 -1
  173. package/dist/components/kaeso/moments.js +5 -5
  174. package/dist/components/kaeso/rights.js +1 -1
  175. package/dist/components/kaeso/usage.js +5 -5
  176. package/dist/components/kaeso.js +10 -10
  177. package/dist/components/kbd.js +1 -1
  178. package/dist/components/key-value.js +3 -3
  179. package/dist/components/label.js +1 -1
  180. package/dist/components/layout.js +1 -1
  181. package/dist/components/link.js +1 -1
  182. package/dist/components/list.js +1 -1
  183. package/dist/components/loader.js +2 -2
  184. package/dist/components/logo.js +2 -2
  185. package/dist/components/markdown.js +1 -1
  186. package/dist/components/menu.js +1 -1
  187. package/dist/components/meter.js +1 -1
  188. package/dist/components/page-header.js +1 -1
  189. package/dist/components/pagination.js +1 -1
  190. package/dist/components/playground.js +16 -16
  191. package/dist/components/popover.js +2 -2
  192. package/dist/components/qr-code.js +2 -2
  193. package/dist/components/qr-code.js.map +1 -1
  194. package/dist/components/radio.js +1 -1
  195. package/dist/components/release-art.js +1 -1
  196. package/dist/components/scroll-area.js +1 -1
  197. package/dist/components/section.js +1 -1
  198. package/dist/components/segmented.js +1 -1
  199. package/dist/components/select.js +1 -1
  200. package/dist/components/separator.js +1 -1
  201. package/dist/components/settings.js +5 -4
  202. package/dist/components/settings.js.map +1 -1
  203. package/dist/components/sheet.js +4 -4
  204. package/dist/components/sheet.js.map +1 -1
  205. package/dist/components/sidebar.js +1 -1
  206. package/dist/components/skeleton.js +1 -1
  207. package/dist/components/slider.js +1 -1
  208. package/dist/components/stat.js +3 -3
  209. package/dist/components/status-dot.js +1 -1
  210. package/dist/components/surface.js +1 -1
  211. package/dist/components/swap-text.js +1 -1
  212. package/dist/components/switch.js +1 -1
  213. package/dist/components/table.js +1 -1
  214. package/dist/components/tabs.js +2 -2
  215. package/dist/components/tag.js +1 -1
  216. package/dist/components/text.js +1 -1
  217. package/dist/components/theme-image.js +1 -1
  218. package/dist/components/theme-menu.js +2 -2
  219. package/dist/components/theme-select.js +1 -1
  220. package/dist/components/timeline.js +1 -1
  221. package/dist/components/toast.js +4 -4
  222. package/dist/components/toc.js +1 -1
  223. package/dist/components/toolbar.js +1 -1
  224. package/dist/components/tooltip.js +1 -1
  225. package/dist/components/visually-hidden.js +1 -1
  226. package/dist/index.js +55 -55
  227. package/dist/kaeso.css +45 -0
  228. package/dist/styles.css +1 -1
  229. package/dist/types/blocks/delete-resource/delete-resource.d.ts +1 -1
  230. package/dist/types/blocks/pages/pages.d.ts +3 -3
  231. package/dist/types/blocks/resource-list/resource-list.d.ts +1 -1
  232. package/dist/types/components/app-frame/app-frame.d.ts +1 -1
  233. package/dist/types/components/app-frame/nav-sheet.d.ts +1 -1
  234. package/dist/types/components/button/button.d.ts +6 -6
  235. package/dist/types/components/calendar/calendar.d.ts +1 -1
  236. package/dist/types/components/charts/core.d.ts +5 -5
  237. package/dist/types/components/combobox/combobox.d.ts +1 -1
  238. package/dist/types/components/command-list/picker-popover.d.ts +1 -1
  239. package/dist/types/components/command-palette/command-palette.d.ts +1 -1
  240. package/dist/types/components/data-table/data-table.d.ts +1 -1
  241. package/dist/types/components/date-picker/date-popup.d.ts +1 -1
  242. package/dist/types/components/date-picker/iso-field.d.ts +1 -1
  243. package/dist/types/components/date-picker/range-popup.d.ts +1 -1
  244. package/dist/types/components/dialog/dialog.d.ts +3 -3
  245. package/dist/types/components/dialog/scope.d.ts +1 -1
  246. package/dist/types/components/dialog/step-dialog.d.ts +1 -1
  247. package/dist/types/components/display-options/display-options.d.ts +1 -1
  248. package/dist/types/components/field/field.d.ts +1 -1
  249. package/dist/types/components/list/list.d.ts +1 -1
  250. package/dist/types/components/list/row-checkbox.d.ts +1 -1
  251. package/dist/types/components/list/virtual-rows.d.ts +1 -1
  252. package/dist/types/components/menu/menu.d.ts +8 -8
  253. package/dist/types/components/playground/model-picker.d.ts +3 -3
  254. package/dist/types/components/playground/parameter-panel.d.ts +1 -1
  255. package/dist/types/components/popover/hover-card.d.ts +2 -2
  256. package/dist/types/components/popover/popover-root.d.ts +3 -3
  257. package/dist/types/components/radio/radio.d.ts +1 -1
  258. package/dist/types/components/select/option-checkbox.d.ts +1 -1
  259. package/dist/types/components/select/select.d.ts +4 -4
  260. package/dist/types/components/sheet/sheet.d.ts +4 -4
  261. package/dist/types/components/sidebar/sidebar-menu.d.ts +1 -1
  262. package/dist/types/components/sidebar/sidebar.d.ts +7 -7
  263. package/dist/types/components/theme-menu/theme-menu.d.ts +1 -1
  264. package/dist/types/components/toast/toast.d.ts +3 -3
  265. package/dist/types/components/toolbar/toolbar.d.ts +1 -1
  266. package/dist/types/components/tooltip/tooltip-provider.d.ts +1 -1
  267. package/dist/types/components/tooltip/tooltip-root.d.ts +1 -1
  268. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  269. package/dist/types/hooks/use-scroll-fade.d.ts +2 -0
  270. package/dist/types/i18n/provider.d.ts +1 -1
  271. package/dist/types/theme/theme-provider.d.ts +1 -1
  272. package/dist/types/utils/cn.d.ts +3 -0
  273. package/dist/types/utils/inset.d.ts +2 -2
  274. package/dist/types/utils/link-provider.d.ts +1 -1
  275. package/dist/types/utils/portal-context.d.ts +1 -1
  276. package/dist/utils.js +1 -1
  277. package/foundations/color.md +1 -0
  278. package/package.json +8 -8
  279. package/dist/chunks/button-h2IFCER2.js.map +0 -1
  280. package/dist/chunks/cn-DUDmdLpZ.js.map +0 -1
  281. package/dist/chunks/code-block-BU8gYeZQ.js +0 -280
  282. package/dist/chunks/code-block-BU8gYeZQ.js.map +0 -1
  283. package/dist/chunks/collapsible-CDQq1Y9x.js.map +0 -1
  284. package/dist/chunks/command-list-DZMVrXWD.js.map +0 -1
  285. package/dist/chunks/copy-button-CXJ7fA9z.js +0 -109
  286. package/dist/chunks/copy-button-CXJ7fA9z.js.map +0 -1
  287. package/dist/chunks/core-Bu6iq5uh.js.map +0 -1
  288. package/dist/chunks/select-Bbv2f5F8.js.map +0 -1
  289. package/dist/chunks/switch-Cq1OfeBr.js.map +0 -1
@@ -0,0 +1,142 @@
1
+ "use client";
2
+ import { t as e } from "./cn-Isw2DnQX.js";
3
+ import { i as t } from "./context-BELWW79w.js";
4
+ import { t as n } from "./icon-D5uD_mnL.js";
5
+ import { r } from "./tooltip-CRApbLF6.js";
6
+ import { t as i } from "./use-truncated-CW0hByYt.js";
7
+ import { n as a } from "./button-9q66Ta23.js";
8
+ import { t as o } from "./use-copy-Dm2ncvMX.js";
9
+ import { forwardRef as s, useCallback as c, useLayoutEffect as l, useRef as u, useState as d } from "react";
10
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
11
+ import { Copy01Icon as m, Tick02Icon as h } from "@hugeicons/core-free-icons";
12
+ //#region src/components/copy-button/copy-button.tsx
13
+ var g = {
14
+ variant: {
15
+ ghost: { classes: "material-ghost" },
16
+ secondary: { classes: "material-secondary" }
17
+ },
18
+ size: {
19
+ xs: { classes: "size-24" },
20
+ sm: { classes: "size-32" },
21
+ md: { classes: "size-36" },
22
+ lg: { classes: "size-40" },
23
+ xl: { classes: "size-48" }
24
+ }
25
+ }, _ = {
26
+ variant: "ghost",
27
+ size: "sm"
28
+ }, v = /* @__PURE__ */ s(function({ value: e, label: n, size: i = "sm", variant: s = "ghost", onCopy: c, className: l, ...u }, p) {
29
+ let { copied: g, copy: _ } = o(), [v, y] = d(!1), b = t(), x = n ?? b("copyButton.copy", "Copy"), S = b("copyButton.copied", "Copied");
30
+ return /* @__PURE__ */ f(r, {
31
+ content: g ? S : x,
32
+ open: g || v,
33
+ onOpenChange: y,
34
+ children: /* @__PURE__ */ f(a, {
35
+ ref: p,
36
+ shape: "circle",
37
+ size: i,
38
+ variant: s,
39
+ icon: g ? h : m,
40
+ "aria-label": g ? S : x,
41
+ className: l,
42
+ onClick: async () => {
43
+ await _(e) && c?.(e);
44
+ },
45
+ ...u
46
+ })
47
+ });
48
+ });
49
+ process.env.NODE_ENV !== "production" && (v.displayName = "CopyButton");
50
+ var y = { size: {
51
+ sm: { classes: "h-32 pl-12 pr-0 text-small" },
52
+ md: { classes: "h-36 pl-16 pr-2 text-small" },
53
+ lg: { classes: "h-40 pl-18 pr-4 text-small" }
54
+ } }, b = { size: "md" }, x = /* @__PURE__ */ s(function({ value: t, display: n, label: r, size: i = "md", className: a, ...o }, s) {
55
+ return /* @__PURE__ */ p("div", {
56
+ ref: s,
57
+ className: e("inline-flex min-w-0 max-w-full items-center gap-8 rounded-pill bg-fill-1", y.size[i].classes, a),
58
+ ...o,
59
+ children: [/* @__PURE__ */ f("span", {
60
+ className: "mono min-w-0 flex-1 truncate text-fg select-all",
61
+ children: n ?? t
62
+ }), /* @__PURE__ */ f(v, {
63
+ value: t,
64
+ label: r,
65
+ size: "sm"
66
+ })]
67
+ });
68
+ });
69
+ process.env.NODE_ENV !== "production" && (x.displayName = "ClipboardText");
70
+ var S = 18;
71
+ function C(e, t) {
72
+ if (e.nodeType === Node.TEXT_NODE) return !!e.textContent?.trim();
73
+ if (!(e instanceof Element)) return !1;
74
+ let n = getComputedStyle(e);
75
+ return n.display === "none" || n.position === "absolute" || n.position === "fixed" ? !1 : t.display.endsWith("flex") ? !t.flexDirection.startsWith("column") : t.display === "block" || t.display === "flow-root" || t.display === "list-item" ? n.display.startsWith("inline") : !0;
76
+ }
77
+ function w(e) {
78
+ let t = e;
79
+ for (let n = e.parentElement; n; t = n, n = n.parentElement) {
80
+ let e = getComputedStyle(n);
81
+ for (let n = t.nextSibling; n; n = n.nextSibling) if (C(n, e)) return !1;
82
+ if ((parseFloat(e.direction === "rtl" ? e.paddingLeft : e.paddingRight) || 0) >= S) return !0;
83
+ let r = e.overflowX || e.overflow;
84
+ if (r && r !== "visible") return !1;
85
+ }
86
+ return !0;
87
+ }
88
+ function T() {
89
+ let [e, t] = d(null), [n, r] = d(!1);
90
+ return l(() => {
91
+ let t = e?.parentElement;
92
+ if (!e || !t) return;
93
+ let n = typeof window.matchMedia == "function" ? window.matchMedia("(pointer: coarse)") : null, i = () => r(!n?.matches && w(e));
94
+ i();
95
+ let a = new MutationObserver(i);
96
+ return a.observe(t, { childList: !0 }), n?.addEventListener("change", i), () => {
97
+ a.disconnect(), n?.removeEventListener("change", i);
98
+ };
99
+ }, [e]), [n, t];
100
+ }
101
+ var E = /* @__PURE__ */ s(function({ value: a, children: s, label: l, onCopy: g, className: _, ...v }, y) {
102
+ let { copied: b, copy: x } = o(), [S, C] = d(!1), [w, E] = T(), D = c((e) => {
103
+ E(e), typeof y == "function" ? y(e) : y && (y.current = e);
104
+ }, [y, E]), O = u(null), k = i(O), A = t(), j = A("copyButton.copied", "Copied");
105
+ return /* @__PURE__ */ f(r, {
106
+ content: b ? j : k ? a : l ?? A("copyButton.copy", "Copy"),
107
+ shape: k && !b ? "multiline" : "pill",
108
+ open: b || S,
109
+ onOpenChange: C,
110
+ children: /* @__PURE__ */ p("button", {
111
+ ref: D,
112
+ type: "button",
113
+ onClick: async () => {
114
+ await x(a) && g?.(a);
115
+ },
116
+ className: e("group/copy relative -mx-4 inline-flex max-w-full-bleed-4 min-w-0 items-center gap-4 rounded-code px-4 align-baseline mono text-small text-fg transition-control focus-ring tap-target", "hover:bg-fill-1 active:bg-fill-2 cursor-copy", _),
117
+ ...v,
118
+ children: [
119
+ /* @__PURE__ */ f("span", {
120
+ ref: O,
121
+ className: "min-w-0 truncate",
122
+ children: s ?? a
123
+ }),
124
+ /* @__PURE__ */ f(n, {
125
+ icon: b ? h : m,
126
+ size: "xs",
127
+ className: e(w && "pointer-events-none absolute start-full group-hover/copy:pointer-events-auto group-focus-visible/copy:pointer-events-auto", "text-fg-tertiary opacity-0 transition-control group-hover/copy:opacity-100 coarse:opacity-100 group-focus-visible/copy:opacity-100", b && "pointer-events-auto opacity-100 text-fg")
128
+ }),
129
+ /* @__PURE__ */ f("span", {
130
+ className: "sr-only",
131
+ "aria-live": "polite",
132
+ children: b ? j : ""
133
+ })
134
+ ]
135
+ })
136
+ });
137
+ });
138
+ process.env.NODE_ENV !== "production" && (E.displayName = "InlineCopyText");
139
+ //#endregion
140
+ export { y as a, b as i, v as n, _ as o, E as r, g as s, x as t };
141
+
142
+ //# sourceMappingURL=copy-button-Cdea0wKl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-button-Cdea0wKl.js","names":["__icon_Tick02Icon","__icon_Copy01Icon","cn","useUiText","Icon","useTruncated","Button","useCopy","KAESO_COPY_BUTTON_VARIANTS","KAESO_COPY_BUTTON_DEFAULT_VARIANTS","CopyButton","labelProp","props","hover","setHover","useState","t","label","done","Tooltip","copied","Tick02Icon","Copy01Icon","copy","value","onCopy","KAESO_CLIPBOARD_TEXT_VARIANTS","KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS","ClipboardText","size","className","display","ICON_ROOM","sharesLine","sibling","style","parent","hasRoomAfter","node","el","overflow","useRoomAfter","button","setButton","room","setRoom","useLayoutEffect","touch","check","watch","InlineCopyText","buttonRef","useCallback","ref","text","useRef","cut","children"],"sources":["../../src/components/copy-button/copy-button.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useCallback, useLayoutEffect, useRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useCopy } from \"../../hooks/use-copy.js\";\nimport { useTruncated } from \"../../hooks/use-truncated.js\";\nimport { Button, type ButtonSize } from \"../button/button.js\";\nimport { Tooltip } from \"../tooltip/tooltip.js\";\nimport { Icon } from \"../icon/icon.js\";\nimport { Tick02Icon as __icon_Tick02Icon, Copy01Icon as __icon_Copy01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COPY_BUTTON_VARIANTS = {\n variant: {\n ghost: { classes: \"material-ghost\" },\n secondary: { classes: \"material-secondary\" },\n },\n size: {\n xs: { classes: \"size-24\" },\n sm: { classes: \"size-32\" },\n md: { classes: \"size-36\" },\n lg: { classes: \"size-40\" },\n xl: { classes: \"size-48\" },\n },\n} as const;\nexport const KAESO_COPY_BUTTON_DEFAULT_VARIANTS = { variant: \"ghost\", size: \"sm\" } as const;\n\nexport interface CopyButtonProps {\n value: string;\n label?: string | undefined;\n size?: ButtonSize | undefined;\n variant?: keyof typeof KAESO_COPY_BUTTON_VARIANTS.variant | undefined;\n onCopy?: ((value: string) => void) | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const CopyButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, CopyButtonProps>(function CopyButton(\n { value, label: labelProp, size = \"sm\", variant = \"ghost\", onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const t = useUiText();\n const label = labelProp ?? t(\"copyButton.copy\", \"Copy\");\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip content={copied ? done : label} open={copied || hover} onOpenChange={setHover}>\n <Button\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n size={size}\n variant={variant}\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n aria-label={copied ? done : label}\n className={className}\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n {...props}\n />\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CopyButton.displayName = \"CopyButton\";\n\nexport const KAESO_CLIPBOARD_TEXT_VARIANTS = {\n size: {\n sm: { classes: \"h-32 pl-12 pr-0 text-small\" },\n md: { classes: \"h-36 pl-16 pr-2 text-small\" },\n lg: { classes: \"h-40 pl-18 pr-4 text-small\" },\n },\n} as const;\nexport const KAESO_CLIPBOARD_TEXT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface ClipboardTextProps extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n value: string;\n display?: ReactNode | undefined;\n label?: string | undefined;\n size?: keyof typeof KAESO_CLIPBOARD_TEXT_VARIANTS.size | undefined;\n}\n\nexport const ClipboardText = /* @__PURE__ */ forwardRef<HTMLDivElement, ClipboardTextProps>(function ClipboardText(\n { value, display, label, size = \"md\", className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\"inline-flex min-w-0 max-w-full items-center gap-8 rounded-pill bg-fill-1\", KAESO_CLIPBOARD_TEXT_VARIANTS.size[size].classes, className)}\n {...props}\n >\n <span className=\"mono min-w-0 flex-1 truncate text-fg select-all\">{display ?? value}</span>\n <CopyButton value={value} label={label} size=\"sm\" />\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ClipboardText.displayName = \"ClipboardText\";\n\nexport interface InlineCopyTextProps extends Omit<HTMLAttributes<HTMLButtonElement>, \"children\" | \"onCopy\"> {\n value: string;\n children?: ReactNode | undefined;\n label?: string | undefined;\n onCopy?: ((value: string) => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst ICON_ROOM = 18;\n\nfunction sharesLine(sibling: Node, parent: CSSStyleDeclaration): boolean {\n if (sibling.nodeType === Node.TEXT_NODE) return !!sibling.textContent?.trim();\n if (!(sibling instanceof Element)) return false;\n const style = getComputedStyle(sibling);\n if (style.display === \"none\" || style.position === \"absolute\" || style.position === \"fixed\") return false;\n if (parent.display.endsWith(\"flex\")) return !parent.flexDirection.startsWith(\"column\");\n if (parent.display === \"block\" || parent.display === \"flow-root\" || parent.display === \"list-item\") return style.display.startsWith(\"inline\");\n return true;\n}\n\nfunction hasRoomAfter(el: Element): boolean {\n let node = el;\n for (let parent = el.parentElement; parent; node = parent, parent = parent.parentElement) {\n const style = getComputedStyle(parent);\n for (let sibling = node.nextSibling; sibling; sibling = sibling.nextSibling) if (sharesLine(sibling, style)) return false;\n if ((parseFloat(style.direction === \"rtl\" ? style.paddingLeft : style.paddingRight) || 0) >= ICON_ROOM) return true;\n const overflow = style.overflowX || style.overflow;\n if (overflow && overflow !== \"visible\") return false;\n }\n return true;\n}\n\nfunction useRoomAfter() {\n const [button, setButton] = useState<HTMLButtonElement | null>(null);\n const [room, setRoom] = useState(false);\n useLayoutEffect(() => {\n const parent = button?.parentElement;\n if (!button || !parent) return;\n const touch = typeof window.matchMedia === \"function\" ? window.matchMedia(\"(pointer: coarse)\") : null;\n const check = () => setRoom(!touch?.matches && hasRoomAfter(button));\n check();\n const watch = new MutationObserver(check);\n watch.observe(parent, { childList: true });\n touch?.addEventListener(\"change\", check);\n return () => {\n watch.disconnect();\n touch?.removeEventListener(\"change\", check);\n };\n }, [button]);\n return [room, setButton] as const;\n}\n\nexport const InlineCopyText = /* @__PURE__ */ forwardRef<HTMLButtonElement, InlineCopyTextProps>(function InlineCopyText(\n { value, children, label, onCopy, className, ...props },\n ref,\n) {\n const { copied, copy } = useCopy();\n const [hover, setHover] = useState(false);\n const [room, setButton] = useRoomAfter();\n const buttonRef = useCallback(\n (el: HTMLButtonElement | null) => {\n setButton(el);\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n },\n [ref, setButton],\n );\n const text = useRef<HTMLSpanElement>(null);\n const cut = useTruncated(text);\n const t = useUiText();\n const done = t(\"copyButton.copied\", \"Copied\");\n return (\n <Tooltip\n content={copied ? done : cut ? value : (label ?? t(\"copyButton.copy\", \"Copy\"))}\n shape={cut && !copied ? \"multiline\" : \"pill\"}\n open={copied || hover}\n onOpenChange={setHover}\n >\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={async () => {\n if (await copy(value)) onCopy?.(value);\n }}\n className={cn(\n \"group/copy relative -mx-4 inline-flex max-w-full-bleed-4 min-w-0 items-center gap-4 rounded-code px-4 align-baseline mono text-small text-fg transition-control focus-ring tap-target\",\n \"hover:bg-fill-1 active:bg-fill-2 cursor-copy\",\n className,\n )}\n {...props}\n >\n <span ref={text} className=\"min-w-0 truncate\">\n {children ?? value}\n </span>\n <Icon\n icon={copied ? __icon_Tick02Icon : __icon_Copy01Icon}\n size=\"xs\"\n className={cn(\n room && \"pointer-events-none absolute start-full group-hover/copy:pointer-events-auto group-focus-visible/copy:pointer-events-auto\",\n \"text-fg-tertiary opacity-0 transition-control group-hover/copy:opacity-100 coarse:opacity-100 group-focus-visible/copy:opacity-100\",\n copied && \"pointer-events-auto opacity-100 text-fg\",\n )}\n />\n <span className=\"sr-only\" aria-live=\"polite\">\n {copied ? done : \"\"}\n </span>\n </button>\n </Tooltip>\n );\n});\nif (process.env.NODE_ENV !== \"production\") InlineCopyText.displayName = \"InlineCopyText\";\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { t as e } from "./cn-DUDmdLpZ.js";
2
+ import { t as e } from "./cn-Isw2DnQX.js";
3
3
  import { i as t, n } from "./context-BELWW79w.js";
4
4
  import { t as r } from "./observe-resize-DhxhmoyB.js";
5
- import { n as i } from "./button-h2IFCER2.js";
6
- import { r as a } from "./skeleton-BM797MAg.js";
5
+ import { n as i } from "./button-9q66Ta23.js";
6
+ import { r as a } from "./skeleton-Cu74kGJA.js";
7
7
  import { useEffect as o, useLayoutEffect as s, useRef as c, useState as l } from "react";
8
8
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
9
  import { motion as f, tokenKindSeries as p, tokenKindTint as m } from "@logicplanes/kaeso-tokens";
@@ -146,7 +146,7 @@ function M(e, t, n = !1) {
146
146
  function N({ label: n, height: r, children: o, table: s, legend: c, state: f = {}, className: p, toggle: m = !0 }) {
147
147
  let [h, g] = l(!1), _ = t();
148
148
  return /* @__PURE__ */ d("figure", {
149
- className: e("flex min-w-0 flex-col gap-12", p),
149
+ className: e("@container flex min-w-0 flex-col gap-12", p),
150
150
  "aria-label": n,
151
151
  children: [
152
152
  f.error ? /* @__PURE__ */ d("div", {
@@ -178,15 +178,15 @@ function N({ label: n, height: r, children: o, table: s, legend: c, state: f = {
178
178
  ]
179
179
  }),
180
180
  (c || m && s) && /* @__PURE__ */ d("div", {
181
- className: "flex flex-wrap items-center gap-12",
182
- children: [/* @__PURE__ */ u("div", {
183
- className: "min-w-0 flex-1",
184
- children: !h && c
181
+ className: "flex flex-col gap-8 @chart-legend:flex-row @chart-legend:gap-12",
182
+ children: [!h && c && /* @__PURE__ */ u("div", {
183
+ className: "min-w-0 @chart-legend:flex-1",
184
+ children: c
185
185
  }), m && s && /* @__PURE__ */ u("button", {
186
186
  type: "button",
187
187
  onClick: () => g((e) => !e),
188
188
  "aria-pressed": h,
189
- className: "relative inline-flex h-28 cursor-pointer items-center rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target",
189
+ className: "relative ml-auto inline-flex h-28 shrink-0 cursor-pointer items-center self-end rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target",
190
190
  children: h ? _("chartFrame.viewAsChart", "View as chart") : _("chartFrame.viewAsTable", "View as table")
191
191
  })]
192
192
  }),
@@ -463,4 +463,4 @@ var te = (e, t, r = n) => r("chart.liveLine", "{heading}: {values}", {
463
463
  //#endregion
464
464
  export { h as A, w as C, D, Q as E, j as O, I as S, A as T, W as _, X as a, S as b, F as c, _ as d, x as f, te as g, H as h, q as i, B as j, M as k, T as l, Z as m, N as n, Y as o, G as p, $ as r, K as s, J as t, g as u, L as v, E as w, b as x, C as y };
465
465
 
466
- //# sourceMappingURL=core-Bu6iq5uh.js.map
466
+ //# sourceMappingURL=core-FtMDNELx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-FtMDNELx.js","names":["cn","useUiText","observeResize","Button","Skeleton","wholeTicks","values","ticks","VIZ","VIZ_THIN","hash","h","i","s","NEAR","seriesIndex","id","assignSeries","out","used","clash","k","ids","keys","seriesColors","thin","seriesColor","tokenKindColor","tokenKindTint","tokenKindSeries","TOKEN_KIND_ORDER","tokenKindLabel","englishText","kind","useSize","el","setEl","useState","size","setSize","useLayoutEffect","set","ease","t","reducedMotion","mix","to","from","v","tweens","useTweened","key","tween","setTween","current","still","drawn","running","useEffect","start","raf","step","motion","useTweenedScale","any","top","ChartFrame","asTable","setAsTable","className","label","state","table","height","DataTablePlain","children","legend","toggle","caption","c","r","j","Swatch","shape","off","color","tickLabel","format","readableTicks","n","count","scale","lo","hi","dayNumber","d","m","yearOfDay","yearStarts","days","dates","prev","WIDE","labelWidth","em","ch","AXIS","LABEL_GAP","placeTimeLabels","placed","width","anchor","right","x","left","clear","a","b","kept","l","axisLabelIndexes","labels","fits","edges","room","every","starts","stride","score","p","best","Legend","items","hidden","it","onToggle","onHover","ChartTooltip","useRef","own","setOwn","w","heading","rows","visible","flip","wanted","xLeft","y","KAESO_CHARTS_VARIANTS","KAESO_CHARTS_DEFAULT_VARIANTS","chartKeyIndex","back","vertical","forward","index","useChartKeys","setIndex","options","keyboard","next","e","ChartLive","liveLine"],"sources":["../../src/components/charts/core.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { useEffect, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { motion, tokenKindSeries, tokenKindTint } from \"@logicplanes/kaeso-tokens\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Button } from \"../button/button.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport function wholeTicks(ticks: number[], values: number[]): number[] {\n return values.every(Number.isInteger) ? ticks.filter(Number.isInteger) : ticks;\n}\nexport const VIZ = [\n \"var(--k-viz-1)\",\n \"var(--k-viz-2)\",\n \"var(--k-viz-3)\",\n \"var(--k-viz-4)\",\n \"var(--k-viz-5)\",\n \"var(--k-viz-6)\",\n \"var(--k-viz-7)\",\n \"var(--k-viz-8)\",\n] as const;\nexport const VIZ_THIN = [\n \"var(--k-viz-thin-1)\",\n \"var(--k-viz-thin-2)\",\n \"var(--k-viz-thin-3)\",\n \"var(--k-viz-thin-4)\",\n \"var(--k-viz-thin-5)\",\n \"var(--k-viz-thin-6)\",\n \"var(--k-viz-thin-7)\",\n \"var(--k-viz-thin-8)\",\n] as const;\n\nfunction hash(s: string) {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 16777619);\n return Math.abs(h);\n}\nconst NEAR: Record<number, number> = { 1: 6, 6: 1, 2: 5, 5: 2, 3: 7, 7: 3 };\n\nexport function seriesIndex(id: string): number {\n return hash(id) % VIZ.length;\n}\n\nexport function assignSeries(ids: string[]): Map<string, number> {\n const out = new Map<string, number>();\n const used = new Set<number>();\n const clash = (k: number) => used.has(k) || (NEAR[k] !== undefined && used.has(NEAR[k]!));\n for (const id of ids) {\n if (out.has(id)) continue;\n let i = seriesIndex(id);\n if (clash(i)) {\n const keys = [...VIZ.keys()];\n i = keys.find((k) => !clash(k)) ?? keys.find((k) => !used.has(k)) ?? i;\n }\n used.add(i);\n out.set(id, i);\n }\n return out;\n}\n\nexport function seriesColors(ids: string[], thin = false): Map<string, string> {\n return new Map([...assignSeries(ids)].map(([id, i]) => [id, (thin ? VIZ_THIN : VIZ)[i]!]));\n}\n\nexport const seriesColor = (id: string, thin = false) => (thin ? VIZ_THIN : VIZ)[seriesIndex(id)]!;\n\nexport type TokenKind = keyof typeof tokenKindSeries;\nexport const tokenKindColor = (k: TokenKind, thin = false) => {\n if (tokenKindTint[k]) return \"var(--k-viz-1-soft)\";\n return (thin ? VIZ_THIN : VIZ)[tokenKindSeries[k] - 1]!;\n};\nexport const TOKEN_KIND_ORDER: TokenKind[] = [\"input\", \"cacheRead\", \"cacheWrite\", \"output\", \"reasoning\"];\nexport function tokenKindLabel(kind: TokenKind, t: UiText = englishText): string {\n switch (kind) {\n case \"input\":\n return t(\"tokenKind.input\", \"Input\");\n case \"output\":\n return t(\"tokenKind.output\", \"Output\");\n case \"cacheRead\":\n return t(\"tokenKind.cacheRead\", \"Cache read\");\n case \"cacheWrite\":\n return t(\"tokenKind.cacheWrite\", \"Cache write\");\n case \"reasoning\":\n return t(\"tokenKind.reasoning\", \"Reasoning\");\n }\n}\n\nexport function useSize<T extends HTMLElement>(): [(el: T | null) => void, { width: number; height: number }] {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (!el) return;\n const set = () => setSize({ width: Math.round(el.clientWidth), height: Math.round(el.clientHeight) });\n set();\n return observeResize([el], set);\n }, [el]);\n return [setEl, size];\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\nconst reducedMotion = () => typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst mix = (from: number[], to: number[], t: number) => (t >= 1 ? to : to.map((v, i) => (from[i] ?? v) + (v - (from[i] ?? v)) * ease(t)));\n\nexport function tweens(from: number[], to: number[]): boolean {\n return from.length === to.length && from.some((v) => v !== 0) && to.some((v) => v !== 0) && from.some((v, i) => v !== to[i]) && !reducedMotion();\n}\n\nexport function useTweened(values: number[], still = false): number[] {\n const key = values.join(\",\");\n const [tween, setTween] = useState({ key, from: values, to: values, t: 1, still });\n let current = tween;\n if (tween.key !== key || tween.still !== still) {\n const drawn = mix(tween.from, tween.to, tween.t);\n const animate = !still && !tween.still && tweens(drawn, values);\n current = animate ? { key, from: drawn, to: values, t: 0, still } : { key, from: values, to: values, t: 1, still };\n setTween(current);\n }\n const running = current.t < 1;\n useEffect(() => {\n if (!running) return;\n const start = performance.now();\n let raf = 0;\n const step = () => {\n const t = Math.max(0, Math.min(1, (performance.now() - start) / motion.duration.chart));\n setTween((s) => (s.key === key ? { ...s, t } : s));\n if (t < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [key, running]);\n return mix(current.from, current.to, current.t);\n}\n\nexport function useTweenedScale(values: number[], top: number, still = false): { values: number[]; top: number } {\n const any = values.some((v) => v !== 0);\n const drawn = useTweened(any ? [...values, top] : values, still);\n return any ? { values: drawn.slice(0, -1), top: drawn[drawn.length - 1] ?? top } : { values: drawn, top };\n}\n\nexport interface ChartState {\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: boolean | undefined;\n emptyText?: ReactNode | undefined;\n}\n\nexport interface TableData {\n columns: string[];\n rows: (string | number)[][];\n}\n\nexport function ChartFrame({\n label,\n height,\n children,\n table,\n legend,\n state = {},\n className,\n toggle = true,\n}: {\n label: string;\n height: number;\n children: ReactNode;\n table?: TableData | undefined;\n legend?: ReactNode | undefined;\n state?: ChartState | undefined;\n className?: string | undefined;\n toggle?: boolean | undefined;\n}) {\n const [asTable, setAsTable] = useState(false);\n const t = useUiText();\n return (\n <figure className={cn(\"@container flex min-w-0 flex-col gap-12\", className)} aria-label={label}>\n {state.error ? (\n <div className=\"flex flex-col items-center justify-center gap-8 text-center\" style={{ height }}>\n <p role=\"alert\" className=\"text-body text-fg-secondary\">\n {t(\"chartFrame.loadFailed\", \"Couldn't load this chart\")}\n </p>\n {state.onRetry && (\n <Button size=\"sm\" onClick={state.onRetry}>\n {t(\"chartFrame.tryAgain\", \"Try again\")}\n </Button>\n )}\n </div>\n ) : asTable && table ? (\n <div className=\"overflow-auto scrollbar-quiet\" style={{ minHeight: height }}>\n <DataTablePlain table={table} />\n </div>\n ) : (\n <div className=\"relative\" style={{ height }}>\n {state.loading && state.empty ? <Skeleton className=\"absolute inset-0\" /> : children}\n {state.loading && !state.empty && <Skeleton className=\"absolute inset-x-0 bottom-0 h-2 rounded-pill\" />}\n {state.empty && !state.loading && (\n <div className=\"absolute inset-0 flex items-center justify-center text-body text-fg-secondary\">\n {state.emptyText ?? t(\"chartFrame.noData\", \"No data for this period\")}\n </div>\n )}\n </div>\n )}\n {(legend || (toggle && table)) && (\n <div className=\"flex flex-col gap-8 @chart-legend:flex-row @chart-legend:gap-12\">\n {!asTable && legend && <div className=\"min-w-0 @chart-legend:flex-1\">{legend}</div>}\n {toggle && table && (\n <button\n type=\"button\"\n onClick={() => setAsTable((v) => !v)}\n aria-pressed={asTable}\n className=\"relative ml-auto inline-flex h-28 shrink-0 cursor-pointer items-center self-end rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\"\n >\n {asTable ? t(\"chartFrame.viewAsChart\", \"View as chart\") : t(\"chartFrame.viewAsTable\", \"View as table\")}\n </button>\n )}\n </div>\n )}\n {table && !asTable && (\n <div className=\"sr-only\">\n <DataTablePlain table={table} caption={label} />\n </div>\n )}\n </figure>\n );\n}\n\nfunction DataTablePlain({ table, caption }: { table: TableData; caption?: string | undefined }) {\n return (\n <table className=\"w-full text-body\">\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <thead>\n <tr className=\"hairline-b-strong\">\n {table.columns.map((c, i) => (\n <th key={c} scope=\"col\" className={cn(\"h-36 px-12 text-caption font-medium text-fg-secondary first:pl-0\", i > 0 ? \"text-right\" : \"text-left\")}>\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((r, i) => (\n <tr key={i} className=\"hairline-b\">\n {r.map((v, j) => (\n <td key={j} className={cn(\"h-36 px-12 first:pl-0\", j > 0 ? \"text-right tabular\" : \"text-left\")}>\n {v}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport interface LegendItem {\n id: string;\n label: ReactNode;\n color: string;\n value?: ReactNode | undefined;\n}\n\nexport function Swatch({ color, shape = \"square\", off }: { color: string; shape?: \"square\" | \"line\" | undefined; off?: boolean | undefined }) {\n return (\n <span\n aria-hidden\n className={cn(\"shrink-0 transition-control\", shape === \"line\" ? \"h-2 w-12 rounded-pill\" : \"size-10 rounded-bar\", off && \"opacity-30\")}\n style={{ background: color }}\n />\n );\n}\nif (process.env.NODE_ENV !== \"production\") Swatch.displayName = \"Swatch\";\n\nexport const tickLabel = (format: (v: number) => string) => (v: number) => format(v).replace(/[.,]00(?=\\D*$)/, \"\");\n\nexport function readableTicks(scale: { ticks: (count: number) => number[]; domain: () => number[] }, label: (v: number) => string, count = 4): number[] {\n for (let n = count; n >= 1; n--) {\n const ticks = scale.ticks(n);\n if (new Set(ticks.map(label)).size === ticks.length) return ticks;\n }\n const [lo = 0, hi = 0] = scale.domain();\n return label(lo) === label(hi) ? [lo] : [lo, hi];\n}\n\nexport type AxisDate = Date | string;\n\nfunction dayNumber(d: AxisDate): number {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? NaN : Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()) / 86_400_000;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(d);\n return m ? Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3])) / 86_400_000 : NaN;\n}\nconst yearOfDay = (n: number) => new Date(n * 86_400_000).getUTCFullYear();\n\nexport function yearStarts(dates: readonly AxisDate[]): number[] {\n const days = dates.map(dayNumber);\n const out: number[] = [];\n days.forEach((d, i) => {\n const prev = i > 0 ? days[i - 1]! : days.length > 1 ? 2 * d - days[1]! : NaN;\n if (Number.isFinite(d) && Number.isFinite(prev) && yearOfDay(d) !== yearOfDay(prev)) out.push(i);\n });\n return out;\n}\n\nconst WIDE = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\u3000-\\u303f\\uff00-\\uffef]/u;\n\nexport function labelWidth(label: string): number {\n let em = 0;\n for (const ch of label) em += WIDE.test(ch) ? 1 : /\\p{Lu}/u.test(ch) ? 0.8 : /\\p{Ll}/u.test(ch) ? 0.6 : /\\p{Nd}/u.test(ch) ? 0.66 : /\\s/.test(ch) ? 0.3 : 0.4;\n return em * AXIS.label.fontSize;\n}\n\nconst LABEL_GAP = 8;\n\nexport function placeTimeLabels(\n ticks: { key: number; at: number; label: string }[],\n right: number,\n): { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string }[] {\n const placed = ticks.map((t) => {\n const width = labelWidth(t.label);\n const anchor: \"start\" | \"middle\" | \"end\" = t.at - width / 2 < 0 ? \"start\" : t.at + width / 2 > right ? \"end\" : \"middle\";\n const x = anchor === \"start\" ? Math.max(t.at, 0) : t.at;\n const left = anchor === \"start\" ? x : anchor === \"end\" ? x - width : x - width / 2;\n return { key: t.key, x, anchor, label: t.label, left, right: left + width };\n });\n const clear = (a: { right: number } | undefined, b: { left: number } | undefined) => !a || !b || a.right + LABEL_GAP <= b.left;\n if (placed.length > 2 && !clear(placed[0], placed[1])) placed.splice(1, 1);\n if (placed.length > 2 && !clear(placed[placed.length - 2], placed[placed.length - 1])) placed.splice(placed.length - 2, 1);\n const kept: typeof placed = [];\n for (const l of placed) if (clear(kept[kept.length - 1], l)) kept.push(l);\n return kept.map(({ key, x, anchor, label }) => ({ key, x, anchor, label }));\n}\n\nexport function axisLabelIndexes(\n labels: string[],\n step: number,\n edges: { start: number; end: number } = { start: Infinity, end: Infinity },\n dates?: readonly AxisDate[] | undefined,\n): number[] {\n const n = labels.length;\n if (n === 0) return [];\n const fits = (i: number) => labelWidth(labels[i]!) / 2 <= Math.min(edges.start + i * step, edges.end + (n - 1 - i) * step) + 1e-6;\n const room = Math.max(48, Math.max(...labels.map(labelWidth)) + 16);\n const every = step > 0 ? Math.max(1, Math.ceil(room / step - 1e-6)) : n;\n const starts = dates && dates.length === n ? yearStarts(dates) : [];\n let stride = every;\n for (let s = every; every > 1 && s <= every * 2; s++) {\n if (starts.every((i) => (i - starts[0]!) % s === 0)) {\n stride = s;\n break;\n }\n }\n const score = (p: number) => [\n starts.filter((i) => i % stride === p && fits(i)).length,\n (n - 1) % stride === p && fits(n - 1) ? 1 : 0,\n p === 0 && fits(0) ? 1 : 0,\n n - 1 - ((n - 1 - p) % stride),\n ];\n let best = 0;\n for (let p = 1; p < Math.min(stride, n); p++) {\n const a = score(p);\n const b = score(best);\n const k = a.findIndex((v, j) => v !== b[j]);\n if (k >= 0 && a[k]! > b[k]!) best = p;\n }\n const out: number[] = [];\n for (let i = best; i < n; i += stride) if (fits(i)) out.push(i);\n return out;\n}\n\nexport function Legend({\n items,\n hidden,\n onToggle,\n onHover,\n shape = \"square\",\n}: {\n items: LegendItem[];\n hidden?: Set<string> | undefined;\n onToggle?: ((id: string) => void) | undefined;\n onHover?: ((id: string | null) => void) | undefined;\n shape?: \"square\" | \"line\" | undefined;\n}) {\n const t = useUiText();\n return (\n <ul className=\"flex flex-wrap items-center gap-4\" aria-label={t(\"chartLegend.label\", \"Legend\")}>\n {items.map((it) => {\n const off = hidden?.has(it.id);\n const Comp = onToggle ? \"button\" : \"span\";\n return (\n <li key={it.id}>\n <Comp\n {...(onToggle ? { type: \"button\" as const, \"aria-pressed\": !off, onClick: () => onToggle(it.id) } : {})}\n onMouseEnter={() => onHover?.(it.id)}\n onMouseLeave={() => onHover?.(null)}\n onFocus={() => onHover?.(it.id)}\n onBlur={() => onHover?.(null)}\n className={cn(\n \"inline-flex h-28 items-center gap-8 rounded-pill px-10 text-small font-medium transition-control\",\n onToggle && \"relative cursor-pointer hover:bg-fill-1 focus-ring tap-target\",\n off ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Swatch color={it.color} shape={shape} off={off} />\n {it.label}\n {it.value !== undefined && <span className=\"text-fg-secondary tabular\">{it.value}</span>}\n </Comp>\n </li>\n );\n })}\n </ul>\n );\n}\nif (process.env.NODE_ENV !== \"production\") Legend.displayName = \"Legend\";\n\nexport interface TooltipRow {\n id: string;\n label: ReactNode;\n color: string;\n value: ReactNode;\n share?: ReactNode | undefined;\n}\n\nexport function ChartTooltip({\n x,\n xLeft = x,\n y,\n width,\n heading,\n rows,\n visible,\n}: {\n x: number;\n xLeft?: number | undefined;\n y: number;\n width: number;\n heading: ReactNode;\n rows: TooltipRow[];\n visible: boolean;\n}) {\n const el = useRef<HTMLDivElement | null>(null);\n const [own, setOwn] = useState(0);\n useLayoutEffect(() => {\n const w = el.current?.offsetWidth ?? 0;\n if (w !== own) setOwn(w);\n }, [own, heading, rows, visible]);\n const flip = x > width / 2;\n const wanted = flip ? xLeft - 16 - own : x + 16;\n const left = own ? Math.round(Math.max(0, Math.min(wanted, width - own))) : undefined;\n return (\n <div\n ref={el}\n role=\"presentation\"\n aria-hidden\n className={cn(\n \"pointer-events-none absolute z-10 w-max min-w-200 max-w-360 rounded-tooltip bg-raised p-10 text-small shadow-raised opacity-motion\",\n visible && own ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n ...(left !== undefined ? { left } : flip ? { right: Math.round(width - xLeft + 16) } : { left: Math.round(x + 16) }),\n top: Math.round(Math.max(0, y - 24)),\n }}\n >\n <div className=\"mb-6 text-caption font-medium text-fg tabular\">{heading}</div>\n <div className=\"flex flex-col gap-4\">\n {rows.map((r) => (\n <div key={r.id} className=\"flex items-center gap-8\">\n <Swatch color={r.color} />\n <span className=\"min-w-0 flex-1 truncate pr-12 text-fg-secondary\">{r.label}</span>\n <span className=\"font-medium text-fg tabular\">{r.value}</span>\n {r.share !== undefined && <span className=\"w-40 text-right text-fg-tertiary tabular\">{r.share}</span>}\n </div>\n ))}\n </div>\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartTooltip.displayName = \"ChartTooltip\";\n\nexport const AXIS = {\n grid: { stroke: \"var(--k-line)\", strokeDasharray: \"3 3\", strokeWidth: 1 },\n baseline: { stroke: \"var(--k-line-strong)\", strokeWidth: 1 },\n label: { fill: \"var(--k-text-tertiary)\", fontSize: 12, fontWeight: 500, style: { fontVariantNumeric: \"tabular-nums\" as const } },\n};\n\nexport const KAESO_CHARTS_VARIANTS = {\n chrome: { default: { classes: \"\" } },\n} as const;\nexport const KAESO_CHARTS_DEFAULT_VARIANTS = { chrome: \"default\" } as const;\n\nexport function chartKeyIndex(\n key: string,\n index: number | null,\n count: number,\n { vertical = false, start = count - 1 }: { vertical?: boolean | undefined; start?: number | undefined } = {},\n): number | null | undefined {\n if (count <= 0) return undefined;\n const back = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const forward = vertical ? \"ArrowDown\" : \"ArrowRight\";\n if (key === back) return index === null ? start : Math.max(0, index - 1);\n if (key === forward) return index === null ? start : Math.min(count - 1, index + 1);\n if (key === \"Home\") return 0;\n if (key === \"End\") return count - 1;\n if (key === \"Escape\") return index === null ? undefined : null;\n return undefined;\n}\n\nexport function useChartKeys(count: number, options: { vertical?: boolean | undefined; start?: number | undefined } = {}) {\n const [index, setIndex] = useState<number | null>(null);\n const start = options.start ?? count - 1;\n const props = {\n tabIndex: count > 0 ? 0 : -1,\n onFocus: (e: React.FocusEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n let keyboard = true;\n try {\n keyboard = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (keyboard && !document.documentElement.hasAttribute(\"data-k-pointer\")) setIndex(Math.max(0, start));\n },\n onBlur: () => setIndex(null),\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => {\n const next = chartKeyIndex(e.key, index, count, { vertical: !!options.vertical, start });\n if (next === undefined) return;\n e.preventDefault();\n if (next === null) e.stopPropagation();\n setIndex(next);\n },\n };\n return { index: index !== null && index < count ? index : null, props };\n}\n\nexport function ChartLive({ children }: { children?: ReactNode | undefined }) {\n return (\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic>\n {children}\n </div>\n );\n}\nif (process.env.NODE_ENV !== \"production\") ChartLive.displayName = \"ChartLive\";\n\nexport const liveLine = (heading: ReactNode, rows: { label: ReactNode; value: ReactNode }[], t: UiText = englishText) =>\n t(\"chart.liveLine\", \"{heading}: {values}\", {\n heading: String(heading),\n values: rows.map((r) => t(\"chart.liveValue\", \"{label} {value}\", { label: String(r.label), value: String(r.value) })).join(t(\"chart.listSeparator\", \", \")),\n });\n"],"mappings":";;;;;;;;;;AASA,SAAgBK,EAAW,GAAiB,GAA4B;CACtE,OAAOC,EAAO,MAAM,OAAO,SAAS,IAAIC,EAAM,OAAO,OAAO,SAAS,IAAIA;AAC3E;AACA,IAAaC,IAAM;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACaC,IAAW;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAASC,EAAK,GAAW;CACvB,IAAIC,IAAI;CACR,KAAK,IAAIC,IAAI,GAAGA,IAAIC,EAAE,QAAQ,KAAK,IAAI,KAAK,KAAKF,IAAIE,EAAE,WAAWD,CAAC,GAAG,QAAQ;CAC9E,OAAO,KAAK,IAAID,CAAC;AACnB;AACA,IAAMG,IAA+B;CAAE,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;CAAG,GAAG;AAAE;AAE1E,SAAgBC,EAAY,GAAoB;CAC9C,OAAOL,EAAKM,CAAE,IAAIR,EAAI;AACxB;AAEA,SAAgBS,EAAa,GAAoC;CAC/D,IAAMC,oBAAM,IAAI,IAAoB,GAC9BC,oBAAO,IAAI,IAAY,GACvBC,KAAS,MAAcD,EAAK,IAAIE,CAAC,KAAMP,EAAKO,OAAO,KAAA,KAAaF,EAAK,IAAIL,EAAKO,EAAG;CACvF,KAAK,IAAML,KAAMM,GAAK;EACpB,IAAIJ,EAAI,IAAIF,CAAE,GAAG;EACjB,IAAIJ,IAAIG,EAAYC,CAAE;EACtB,IAAII,EAAMR,CAAC,GAAG;GACZ,IAAMW,IAAO,CAAC,GAAGf,EAAI,KAAK,CAAC;GAC3B,IAAIe,EAAK,MAAM,MAAM,CAACH,EAAMC,CAAC,CAAC,KAAKE,EAAK,MAAM,MAAM,CAACJ,EAAK,IAAIE,CAAC,CAAC,KAAKT;EACvE;EAEA,AADAO,EAAK,IAAIP,CAAC,GACVM,EAAI,IAAIF,GAAIJ,CAAC;CACf;CACA,OAAOM;AACT;AAEA,SAAgBM,EAAa,GAAe,IAAO,IAA4B;CAC7E,OAAO,IAAI,IAAI,CAAC,GAAGP,EAAaK,CAAG,CAAC,CAAC,CAAC,KAAK,CAACN,GAAIJ,OAAO,CAACI,IAAKS,IAAOhB,IAAWD,EAAA,CAAKI,EAAG,CAAC,CAAC;AAC3F;AAEA,IAAac,KAAe,GAAY,IAAO,QAAWD,IAAOhB,IAAWD,EAAA,CAAKO,EAAYC,CAAE,IAGlFW,KAAkB,GAAc,IAAO,OAC9CC,EAAcP,KAAW,yBACrBI,IAAOhB,IAAWD,EAAA,CAAKqB,EAAgBR,KAAK,IAEzCS,IAAgC;CAAC;CAAS;CAAa;CAAc;CAAU;AAAW;AACvG,SAAgBC,EAAe,GAAiB,IAAYC,GAAqB;CAC/E,QAAQC,GAAR;EACE,KAAK,SACH,OAAO,EAAE,mBAAmB,OAAO;EACrC,KAAK,UACH,OAAO,EAAE,oBAAoB,QAAQ;EACvC,KAAK,aACH,OAAO,EAAE,uBAAuB,YAAY;EAC9C,KAAK,cACH,OAAO,EAAE,wBAAwB,aAAa;EAChD,KAAK,aACH,OAAO,EAAE,uBAAuB,WAAW;CAC/C;AACF;AAEA,SAAgBC,IAA8F;CAC5G,IAAM,CAACC,GAAIC,KAASC,EAAmB,IAAI,GACrC,CAACC,GAAMC,KAAWF,EAAS;EAAE,OAAO;EAAG,QAAQ;CAAE,CAAC;CAOxD,OANAG,QAAsB;EACpB,IAAI,CAACL,GAAI;EACT,IAAMM,UAAYF,EAAQ;GAAE,OAAO,KAAK,MAAMJ,EAAG,WAAW;GAAG,QAAQ,KAAK,MAAMA,EAAG,YAAY;EAAE,CAAC;EAEpG,OADAM,EAAI,GACGvC,EAAc,CAACiC,CAAE,GAAGM,CAAG;CAChC,GAAG,CAACN,CAAE,CAAC,GACA,CAACC,GAAOE,CAAI;AACrB;AAEA,IAAMI,KAAQ,MAAc,KAAa,IAAIC,MAAG,GAC1CC,WAAsB,OAAO,aAAe,OAAe,WAAW,kCAAkC,CAAC,CAAC,SAC1GC,KAAO,GAAgB,GAAc,MAAeF,KAAK,IAAIG,IAAKA,EAAG,KAAK,GAAG,OAAOC,EAAKnC,MAAMoC,MAAMA,KAAKD,EAAKnC,MAAMoC,MAAMN,EAAKC,CAAC,CAAC;AAExI,SAAgBM,EAAO,GAAgB,GAAuB;CAC5D,OAAOF,EAAK,WAAWD,EAAG,UAAUC,EAAK,MAAM,MAAMC,MAAM,CAAC,KAAKF,EAAG,MAAM,MAAME,MAAM,CAAC,KAAKD,EAAK,MAAM,GAAG,MAAMC,MAAMF,EAAGlC,EAAE,KAAK,CAACgC,GAAc;AACjJ;AAEA,SAAgBM,EAAW,GAAkB,IAAQ,IAAiB;CACpE,IAAMC,IAAM7C,EAAO,KAAK,GAAG,GACrB,CAAC8C,GAAOC,KAAYhB,EAAS;EAAE;EAAK,MAAM/B;EAAQ,IAAIA;EAAQ,GAAG;EAAG;CAAM,CAAC,GAC7EgD,IAAUF;CACd,IAAIA,EAAM,QAAQD,KAAOC,EAAM,UAAUG,GAAO;EAC9C,IAAMC,IAAQX,EAAIO,EAAM,MAAMA,EAAM,IAAIA,EAAM,CAAC;EAG/C,AADA,IADgB,CAACG,KAAS,CAACH,EAAM,SAASH,EAAOO,GAAOlD,CAAM,IAC1C;GAAE;GAAK,MAAMkD;GAAO,IAAIlD;GAAQ,GAAG;GAAG;EAAM,IAAI;GAAE;GAAK,MAAMA;GAAQ,IAAIA;GAAQ,GAAG;GAAG;EAAM,GACjH+C,EAASC,CAAO;CAClB;CACA,IAAMG,IAAUH,EAAQ,IAAI;CAa5B,OAZAI,QAAgB;EACd,IAAI,CAACD,GAAS;EACd,IAAME,IAAQ,YAAY,IAAI,GAC1BC,IAAM,GACJC,UAAa;GACjB,IAAMlB,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,YAAY,IAAI,IAAIgB,KAASG,EAAO,SAAS,KAAK,CAAC;GAEtF,AADAT,GAAU,MAAOxC,EAAE,QAAQsC,IAAM;IAAE,GAAGtC;IAAG;GAAE,IAAIA,CAAE,GAC7C8B,IAAI,MAAG,IAAM,sBAAsBkB,CAAI;EAC7C;EAEA,OADA,IAAM,sBAAsBA,CAAI,SACnB,qBAAqBD,CAAG;CACvC,GAAG,CAACT,GAAKM,CAAO,CAAC,GACVZ,EAAIS,EAAQ,MAAMA,EAAQ,IAAIA,EAAQ,CAAC;AAChD;AAEA,SAAgBS,EAAgB,GAAkB,GAAa,IAAQ,IAA0C;CAC/G,IAAMC,IAAM1D,EAAO,MAAM,MAAM0C,MAAM,CAAC,GAChCQ,IAAQN,EAAWc,IAAM,CAAC,GAAG1D,GAAQ2D,CAAG,IAAI3D,GAAQiD,CAAK;CAC/D,OAAOS,IAAM;EAAE,QAAQR,EAAM,MAAM,GAAG,EAAE;EAAG,KAAKA,EAAMA,EAAM,SAAS,MAAMS;CAAI,IAAI;EAAE,QAAQT;EAAO;CAAI;AAC1G;AAeA,SAAgBU,EAAW,EACzB,UACA,WACA,aACA,UACA,WACA,WAAQ,CAAC,GACT,cACA,YAAS,MAUR;CACD,IAAM,CAACC,GAASC,KAAc/B,EAAS,EAAK,GACtCM,IAAI1C,EAAU;CACpB,OACE,kBAAC,UAAD;EAAQ,WAAWD,EAAG,2CAA2CqE,CAAS;EAAG,cAAYC;EAAzF,UAAA;GACGC,EAAM,QACL,kBAAC,OAAD;IAAK,WAAU;IAA8D,OAAO,EAAE,UAAO;IAA7F,UAAA,CACE,kBAAC,KAAD;KAAG,MAAK;KAAQ,WAAU;KACvB,UAAA5B,EAAE,yBAAyB,0BAA0B;IACrD,CAAA,GACF4B,EAAM,WACL,kBAACpE,GAAD;KAAQ,MAAK;KAAK,SAASoE,EAAM;KAC9B,UAAA5B,EAAE,uBAAuB,WAAW;IAC/B,CAAA,CAEP;GACH,CAAA,IAAAwB,KAAWK,IACb,kBAAC,OAAD;IAAK,WAAU;IAAgC,OAAO,EAAE,WAAWC,EAAO;IACxE,UAAA,kBAACC,GAAD,EAAuB,SAAQ,CAAA;GAC5B,CAAA,IAEL,kBAAC,OAAD;IAAK,WAAU;IAAW,OAAO,EAAE,UAAO;IAA1C,UAAA;KACGH,EAAM,WAAWA,EAAM,QAAQ,kBAACnE,GAAD,EAAU,WAAU,mBAAoB,CAAA,IAAIuE;KAC3EJ,EAAM,WAAW,CAACA,EAAM,SAAS,kBAACnE,GAAD,EAAU,WAAU,+CAAgD,CAAA;KACrGmE,EAAM,SAAS,CAACA,EAAM,WACrB,kBAAC,OAAD;MAAK,WAAU;MACZ,UAAAA,EAAM,aAAa5B,EAAE,qBAAqB,yBAAyB;KACjE,CAAA;IAEJ;;IAELiC,KAAWC,KAAUL,MACrB,kBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,CAACL,KAAWS,KAAU,kBAAC,OAAD;KAAK,WAAU;KAAgC,UAAAA;IAAY,CAAA,GACjFC,KAAUL,KACT,kBAAC,UAAD;KACE,MAAK;KACL,eAAeJ,GAAY,MAAM,CAACpB,CAAC;KACnC,gBAAcmB;KACd,WAAU;KAET,UAAAA,IAAUxB,EAAE,0BAA0B,eAAe,IAAIA,EAAE,0BAA0B,eAAe;IAC/F,CAAA,CAEP;;GAEN6B,KAAS,CAACL,KACT,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACO,GAAD;KAAuB;KAAO,SAASJ;IAAQ,CAAA;GAC5C,CAAA;EAED;;AAEZ;AAEA,SAASI,EAAe,EAAE,UAAO,cAA+D;CAC9F,OACE,kBAAC,SAAD;EAAO,WAAU;EAAjB,UAAA;GACGI,KAAW,kBAAC,WAAD;IAAS,WAAU;IAAW,UAAAA;GAAiB,CAAA;GAC3D,kBAAC,SAAD,EAAA,UACE,kBAAC,MAAD;IAAI,WAAU;IACX,UAAAN,EAAM,QAAQ,KAAK,GAAG,MACrB,kBAAC,MAAD;KAAY,OAAM;KAAM,WAAWxE,EAAG,oEAAoEY,IAAI,IAAI,eAAe,WAAW;KACzI,UAAAmE;IACC,GAFKA,CAEL,CACL;GACC,CAAA,EACC,CAAA;GACP,kBAAC,SAAD,EAAA,UACGP,EAAM,KAAK,KAAK,GAAG,MAClB,kBAAC,MAAD;IAAY,WAAU;IACnB,UAAAQ,EAAE,KAAK,GAAG,MACT,kBAAC,MAAD;KAAY,WAAWhF,EAAG,yBAAyBiF,IAAI,IAAI,uBAAuB,WAAW;KAC1F,UAAAjC;IACC,GAFKiC,CAEL,CACL;GACC,GANKrE,CAML,CACL,EACI,CAAA;EACF;;AAEX;AASA,SAAgBsE,EAAO,EAAE,UAAO,WAAQ,UAAU,UAA4F;CAC5I,OACE,kBAAC,QAAD;EACE,eAAA;EACA,WAAWlF,EAAG,+BAA+BmF,MAAU,SAAS,0BAA0B,uBAAuBC,KAAO,YAAY;EACpI,OAAO,EAAE,YAAYC,EAAM;CAC5B,CAAA;AAEL;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc;AAEhE,IAAaC,KAAa,OAAmC,MAAcC,EAAOvC,CAAC,CAAC,CAAC,QAAQ,kBAAkB,EAAE;AAEjH,SAAgBwC,EAAc,GAAuE,GAA8B,IAAQ,GAAa;CACtJ,KAAK,IAAIC,IAAIC,GAAOD,KAAK,GAAG,KAAK;EAC/B,IAAMlF,IAAQoF,EAAM,MAAMF,CAAC;EAC3B,IAAI,IAAI,IAAIlF,EAAM,IAAI+D,CAAK,CAAC,CAAC,CAAC,SAAS/D,EAAM,QAAQ,OAAOA;CAC9D;CACA,IAAM,CAACqF,IAAK,GAAGC,IAAK,KAAKF,EAAM,OAAO;CACtC,OAAOrB,EAAMsB,CAAE,MAAMtB,EAAMuB,CAAE,IAAI,CAACD,CAAE,IAAI,CAACA,GAAIC,CAAE;AACjD;AAIA,SAASC,EAAU,GAAqB;CACtC,IAAIC,aAAa,MAAM,OAAO,OAAO,MAAMA,EAAE,QAAQ,CAAC,IAAI,MAAM,KAAK,IAAIA,EAAE,YAAY,GAAGA,EAAE,SAAS,GAAGA,EAAE,QAAQ,CAAC,IAAI;CACvH,IAAMC,IAAI,2BAA2B,KAAKD,CAAC;CAC3C,OAAOC,IAAI,KAAK,IAAI,OAAOA,EAAE,EAAE,GAAG,OAAOA,EAAE,EAAE,IAAI,GAAG,OAAOA,EAAE,EAAE,CAAC,IAAI,QAAa;AACnF;AACA,IAAMC,KAAa,uBAAc,IAAI,KAAKR,IAAI,KAAU,EAAA,CAAE,eAAe;AAEzE,SAAgBS,EAAW,GAAsC;CAC/D,IAAMC,IAAOC,EAAM,IAAIN,CAAS,GAC1B5E,IAAgB,CAAC;CAKvB,OAJAiF,EAAK,SAAS,GAAG,MAAM;EACrB,IAAME,IAAOzF,IAAI,IAAIuF,EAAKvF,IAAI,KAAMuF,EAAK,SAAS,IAAI,IAAIJ,IAAII,EAAK,KAAM;EACzE,AAAI,OAAO,SAASJ,CAAC,KAAK,OAAO,SAASM,CAAI,KAAKJ,EAAUF,CAAC,MAAME,EAAUI,CAAI,KAAGnF,EAAI,KAAKN,CAAC;CACjG,CAAC,GACMM;AACT;AAEA,IAAMoF,IAAO;AAEb,SAAgBC,EAAW,GAAuB;CAChD,IAAIC,IAAK;CACT,KAAK,IAAMC,KAAMnC,GAAO,KAAMgC,EAAK,KAAKG,CAAE,IAAI,IAAI,UAAU,KAAKA,CAAE,IAAI,KAAM,UAAU,KAAKA,CAAE,IAAI,KAAM,UAAU,KAAKA,CAAE,IAAI,MAAO,KAAK,KAAKA,CAAE,IAAI,KAAM;CAC1J,OAAOD,IAAKE,EAAK,MAAM;AACzB;AAEA,IAAMC,IAAY;AAElB,SAAgBC,EACd,GACA,GACiF;CACjF,IAAMC,IAAStG,EAAM,KAAK,MAAM;EAC9B,IAAMuG,IAAQP,EAAW5D,EAAE,KAAK,GAC1BoE,IAAqCpE,EAAE,KAAKmE,IAAQ,IAAI,IAAI,UAAUnE,EAAE,KAAKmE,IAAQ,IAAIE,IAAQ,QAAQ,UACzGC,IAAIF,MAAW,UAAU,KAAK,IAAIpE,EAAE,IAAI,CAAC,IAAIA,EAAE,IAC/CuE,IAAOH,MAAW,UAAUE,IAAIF,MAAW,QAAQE,IAAIH,IAAQG,IAAIH,IAAQ;EACjF,OAAO;GAAE,KAAKnE,EAAE;GAAK;GAAG;GAAQ,OAAOA,EAAE;GAAO;GAAM,OAAOuE,IAAOJ;EAAM;CAC5E,CAAC,GACKK,KAAS,GAAkC,MAAoC,CAACC,KAAK,CAACC,KAAKD,EAAE,QAAQT,KAAaU,EAAE;CAE1H,AADIR,EAAO,SAAS,KAAK,CAACM,EAAMN,EAAO,IAAIA,EAAO,EAAE,KAAGA,EAAO,OAAO,GAAG,CAAC,GACrEA,EAAO,SAAS,KAAK,CAACM,EAAMN,EAAOA,EAAO,SAAS,IAAIA,EAAOA,EAAO,SAAS,EAAE,KAAGA,EAAO,OAAOA,EAAO,SAAS,GAAG,CAAC;CACzH,IAAMS,IAAsB,CAAC;CAC7B,KAAK,IAAMC,KAAKV,GAAQ,AAAIM,EAAMG,EAAKA,EAAK,SAAS,IAAIC,CAAC,KAAGD,EAAK,KAAKC,CAAC;CACxE,OAAOD,EAAK,KAAK,EAAE,QAAK,MAAG,WAAQ,gBAAa;EAAE;EAAK;EAAG;EAAQ;CAAM,EAAE;AAC5E;AAEA,SAAgBE,EACd,GACA,GACA,IAAwC;CAAE,OAAO;CAAU,KAAK;AAAS,GACzE,GACU;CACV,IAAM/B,IAAIgC,EAAO;CACjB,IAAIhC,MAAM,GAAG,OAAO,CAAC;CACrB,IAAMiC,KAAQ,MAAcnB,EAAWkB,EAAO7G,EAAG,IAAI,KAAK,KAAK,IAAI+G,EAAM,QAAQ/G,IAAIiD,GAAM8D,EAAM,OAAOlC,IAAI,IAAI7E,KAAKiD,CAAI,IAAI,MACvH+D,IAAO,KAAK,IAAI,IAAI,KAAK,IAAI,GAAGH,EAAO,IAAIlB,CAAU,CAAC,IAAI,EAAE,GAC5DsB,IAAQhE,IAAO,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK+D,IAAO/D,IAAO,IAAI,CAAC,IAAI4B,GAChEqC,IAAS1B,KAASA,EAAM,WAAWX,IAAIS,EAAWE,CAAK,IAAI,CAAC,GAC9D2B,IAASF;CACb,KAAK,IAAIhH,IAAIgH,GAAOA,IAAQ,KAAKhH,KAAKgH,IAAQ,GAAG,KAC/C,IAAIC,EAAO,OAAO,OAAOlH,IAAIkH,EAAO,MAAOjH,MAAM,CAAC,GAAG;EACnD,IAASA;EACT;CACF;CAEF,IAAMmH,KAAS,MAAc;EAC3BF,EAAO,QAAQ,MAAMlH,IAAImH,MAAWE,KAAKP,EAAK9G,CAAC,CAAC,CAAC,CAAC;GACjD6E,IAAI,KAAKsC,MAAWE,KAAKP,EAAKjC,IAAI,CAAC,IAAI,IAAI;EAC5CwC,MAAM,KAAKP,EAAK,CAAC,IAAI,IAAI;EACzBjC,IAAI,KAAMA,IAAI,IAAIwC,KAAKF;CACzB,GACIG,IAAO;CACX,KAAK,IAAID,IAAI,GAAGA,IAAI,KAAK,IAAIF,GAAQtC,CAAC,GAAG,KAAK;EAC5C,IAAM2B,IAAIY,EAAMC,CAAC,GACXZ,IAAIW,EAAME,CAAI,GACd7G,IAAI+F,EAAE,WAAW,GAAG,MAAMpE,MAAMqE,EAAEpC,EAAE;EAC1C,AAAI5D,KAAK,KAAK+F,EAAE/F,KAAMgG,EAAEhG,OAAK,IAAO4G;CACtC;CACA,IAAM/G,IAAgB,CAAC;CACvB,KAAK,IAAIN,IAAIsH,GAAMtH,IAAI6E,GAAG,KAAKsC,GAAQ,AAAIL,EAAK9G,CAAC,KAAGM,EAAI,KAAKN,CAAC;CAC9D,OAAOM;AACT;AAEA,SAAgBiH,EAAO,EACrB,UACA,WACA,aACA,YACA,WAAQ,YAOP;CACD,IAAMxF,IAAI1C,EAAU;CACpB,OACE,kBAAC,MAAD;EAAI,WAAU;EAAoC,cAAY0C,EAAE,qBAAqB,QAAQ;EAC1F,UAAAyF,EAAM,KAAK,MAAO;GACjB,IAAMhD,IAAMiD,GAAQ,IAAIC,EAAG,EAAE;GAE7B,OACE,kBAAC,MAAD,EAAA,UACE,kBAHSC,IAAW,WAAW,QAG/B;IACE,GAAKA,IAAW;KAAE,MAAM;KAAmB,gBAAgB,CAACnD;KAAK,eAAemD,EAASD,EAAG,EAAE;IAAE,IAAI,CAAC;IACrG,oBAAoBE,IAAUF,EAAG,EAAE;IACnC,oBAAoBE,IAAU,IAAI;IAClC,eAAeA,IAAUF,EAAG,EAAE;IAC9B,cAAcE,IAAU,IAAI;IAC5B,WAAWxI,EACT,oGACAuI,KAAY,iEACZnD,IAAM,qBAAqB,SAC7B;IAVF,UAAA;KAYE,kBAACF,GAAD;MAAQ,OAAOoD,EAAG;MAAc;MAAY;KAAM,CAAA;KACjDA,EAAG;KACHA,EAAG,UAAU,KAAA,KAAa,kBAAC,QAAD;MAAM,WAAU;MAA6B,UAAAA,EAAG;KAAY,CAAA;IACnF;GACJ,CAAA,EAAA,GAjBKA,EAAG,EAiBR;EAER,CAAC;CACC,CAAA;AAER;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAO,cAAc;AAUhE,SAAgBG,EAAa,EAC3B,MACA,WAAQxB,GACR,MACA,UACA,YACA,SACA,cASC;CACD,IAAM9E,IAAKuG,EAA8B,IAAI,GACvC,CAACC,GAAKC,KAAUvG,EAAS,CAAC;CAChC,QAAsB;EACpB,IAAMwG,IAAI1G,EAAG,SAAS,eAAe;EACrC,AAAI0G,MAAMF,KAAKC,EAAOC,CAAC;CACzB,GAAG;EAACF;EAAKG;EAASC;EAAMC;CAAO,CAAC;CAChC,IAAMC,IAAOhC,IAAIH,IAAQ,GACnBoC,IAASD,IAAOE,IAAQ,KAAKR,IAAM1B,IAAI,IACvCC,IAAOyB,IAAM,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIO,GAAQpC,IAAQ6B,CAAG,CAAC,CAAC,IAAI,KAAA;CAC5E,OACE,kBAAC,OAAD;EACE,KAAKxG;EACL,MAAK;EACL,eAAA;EACA,WAAWnC,EACT,sIACAgJ,KAAWL,IAAM,gBAAgB,WACnC;EACA,OAAO;GACL,GAAIzB,MAAS,KAAA,IAAuB+B,IAAO,EAAE,OAAO,KAAK,MAAMnC,IAAQqC,IAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAMlC,IAAI,EAAE,EAAE,IAAzF,EAAE,QAAK;GAChC,KAAK,KAAK,MAAM,KAAK,IAAI,GAAGmC,IAAI,EAAE,CAAC;EACrC;EAXF,UAAA,CAaE,kBAAC,OAAD;GAAK,WAAU;GAAiD,UAAAN;EAAa,CAAA,GAC7E,kBAAC,OAAD;GAAK,WAAU;GACZ,UAAAC,EAAK,KAAK,MACT,kBAAC,OAAD;IAAgB,WAAU;IAA1B,UAAA;KACE,kBAAC7D,GAAD,EAAQ,OAAOF,EAAE,MAAQ,CAAA;KACzB,kBAAC,QAAD;MAAM,WAAU;MAAmD,UAAAA,EAAE;KAAY,CAAA;KACjF,kBAAC,QAAD;MAAM,WAAU;MAA+B,UAAAA,EAAE;KAAY,CAAA;KAC5DA,EAAE,UAAU,KAAA,KAAa,kBAAC,QAAD;MAAM,WAAU;MAA4C,UAAAA,EAAE;KAAY,CAAA;IACjG;GALK,GAAAA,EAAE,EAKP,CACN;EACE,CAAA,CACF;;AAET;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAa,cAAc;AAEtE,IAAa0B,IAAO;CAClB,MAAM;EAAE,QAAQ;EAAiB,iBAAiB;EAAO,aAAa;CAAE;CACxE,UAAU;EAAE,QAAQ;EAAwB,aAAa;CAAE;CAC3D,OAAO;EAAE,MAAM;EAA0B,UAAU;EAAI,YAAY;EAAK,OAAO,EAAE,oBAAoB,eAAwB;CAAE;AACjI,GAEa2C,IAAwB,EACnC,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,EAAE,EACrC,GACaC,IAAgC,EAAE,QAAQ,UAAU;AAEjE,SAAgBC,EACd,GACA,GACA,GACA,EAAE,cAAW,IAAO,WAAQ7D,IAAQ,MAAsE,CAAC,GAChF;CAC3B,IAAIA,KAAS,GAAG;CAChB,IAAM8D,IAAOC,IAAW,YAAY,aAC9BC,IAAUD,IAAW,cAAc;CACzC,IAAItG,MAAQqG,GAAM,OAAOG,MAAU,OAAOhG,IAAQ,KAAK,IAAI,GAAGgG,IAAQ,CAAC;CACvE,IAAIxG,MAAQuG,GAAS,OAAOC,MAAU,OAAOhG,IAAQ,KAAK,IAAI+B,IAAQ,GAAGiE,IAAQ,CAAC;CAClF,IAAIxG,MAAQ,QAAQ,OAAO;CAC3B,IAAIA,MAAQ,OAAO,OAAOuC,IAAQ;CAClC,IAAIvC,MAAQ,UAAU,OAAOwG,MAAU,OAAO,KAAA,IAAY;AAE5D;AAEA,SAAgBC,EAAa,GAAe,IAA0E,CAAC,GAAG;CACxH,IAAM,CAACD,GAAOE,KAAYxH,EAAwB,IAAI,GAChDsB,IAAQmG,EAAQ,SAASpE,IAAQ;CAoBvC,OAAO;EAAE,OAAOiE,MAAU,QAAQA,IAAQjE,IAAQiE,IAAQ;EAAM,OAAA;GAlB9D,UAAUjE,IAAQ,IAAI,IAAI;GAC1B,UAAU,MAAqC;IAC7C,IAAI,EAAE,WAAW,EAAE,eAAe;IAClC,IAAIqE,IAAW;IACf,IAAI;KACF,IAAW,EAAE,cAAc,QAAQ,gBAAgB;IACrD,QAAQ,CAAC;IACT,AAAIA,KAAY,CAAC,SAAS,gBAAgB,aAAa,gBAAgB,KAAGF,EAAS,KAAK,IAAI,GAAGlG,CAAK,CAAC;GACvG;GACA,cAAckG,EAAS,IAAI;GAC3B,YAAY,MAAwC;IAClD,IAAMG,IAAOT,EAAcU,EAAE,KAAKN,GAAOjE,GAAO;KAAE,UAAU,CAAC,CAACoE,EAAQ;KAAU;IAAM,CAAC;IACvF,AAAIE,MAAS,KAAA,MACbC,EAAE,eAAe,GACbD,MAAS,QAAMC,EAAE,gBAAgB,GACrCJ,EAASG,CAAI;GACf;EAE8D;CAAM;AACxE;AAEA,SAAgBE,EAAU,EAAE,eAAkD;CAC5E,OACE,kBAAC,OAAD;EAAK,WAAU;EAAU,aAAU;EAAS,eAAA;EACzC;CACE,CAAA;AAET;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAU,cAAc;AAEnE,IAAaC,MAAY,GAAoB,GAAgD,IAAYnI,MACvGW,EAAE,kBAAkB,uBAAuB;CACzC,SAAS,OAAOmG,CAAO;CACvB,QAAQC,EAAK,KAAK,MAAMpG,EAAE,mBAAmB,mBAAmB;EAAE,OAAO,OAAOqC,EAAE,KAAK;EAAG,OAAO,OAAOA,EAAE,KAAK;CAAE,CAAC,CAAC,CAAC,CAAC,KAAKrC,EAAE,uBAAuB,IAAI,CAAC;AAC1J,CAAC"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { i as e } from "./context-BELWW79w.js";
3
- import { i as t } from "./popover-bjxg020P.js";
4
- import { t as n } from "./calendar-cVuezHQ6.js";
5
- import { t as r } from "./iso-field-DAa6iPWn.js";
3
+ import { i as t } from "./popover-CgLt_4yG.js";
4
+ import { t as n } from "./calendar-CeNcqLFd.js";
5
+ import { t as r } from "./iso-field-SOZ7Z-yE.js";
6
6
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
7
  //#region src/components/date-picker/date-popup.tsx
8
8
  function o({ date: o, onDateChange: s, onClose: c, weekStartsOn: l, disabledDays: u }) {
@@ -32,4 +32,4 @@ function o({ date: o, onDateChange: s, onClose: c, weekStartsOn: l, disabledDays
32
32
  //#endregion
33
33
  export { o as DatePopup };
34
34
 
35
- //# sourceMappingURL=date-popup-BJPA_fBm.js.map
35
+ //# sourceMappingURL=date-popup-NytWvSNh.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-popup-BJPA_fBm.js","names":["useUiText","Popover","Calendar","IsoField","DatePopup","t","date","onDateChange","d","onClose","disabledDays"],"sources":["../../src/components/date-picker/date-popup.tsx"],"sourcesContent":["import { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { IsoField } from \"./iso-field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport interface DatePopupProps {\n date: Date | null;\n onDateChange: (date: Date | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nexport function DatePopup({ date, onDateChange, onClose, weekStartsOn, disabledDays }: DatePopupProps) {\n const t = useUiText();\n return (\n <Popover.Content padding=\"form\" aria-label={t(\"datePicker.chooseDate\", \"Choose a date\")}>\n <Calendar\n mode=\"single\"\n selected={date ?? undefined}\n {...(date ? { defaultMonth: date } : {})}\n onSelect={(d) => {\n onDateChange((d as Date | undefined) ?? null);\n if (d) onClose();\n }}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex gap-8\">\n <IsoField\n label={t(\"datePicker.date\", \"Date\")}\n value={date ?? undefined}\n onCommit={(d) => {\n if (disabledDays?.(d)) return false;\n onDateChange(d);\n return true;\n }}\n />\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAgBI,EAAU,EAAE,SAAM,iBAAc,YAAS,iBAAc,mBAAgC;CACrG,IAAMC,IAAIL,EAAU;CACpB,OACE,kBAACC,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYI,EAAE,yBAAyB,eAAe;EAAtF,UAAA,CACE,kBAACH,GAAD;GACE,MAAK;GACL,UAAUI,KAAQ,KAAA;GAClB,GAAKA,IAAO,EAAE,cAAcA,EAAK,IAAI,CAAC;GACtC,WAAW,MAAM;IAEf,AADAC,EAAcC,KAA0B,IAAI,GACxCA,KAAGC,EAAQ;GACjB;GACc;GACd,UAAUC;EACX,CAAA,GACD,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAACP,GAAD;IACE,OAAOE,EAAE,mBAAmB,MAAM;IAClC,OAAOC,KAAQ,KAAA;IACf,WAAW,MACT,CAAII,IAAeF,CAAC,MACpBD,EAAaC,CAAC,GACP;GAEV,CAAA;EACE,CAAA,CACU;;AAErB"}
1
+ {"version":3,"file":"date-popup-NytWvSNh.js","names":["useUiText","Popover","Calendar","IsoField","DatePopup","t","date","onDateChange","d","onClose","disabledDays"],"sources":["../../src/components/date-picker/date-popup.tsx"],"sourcesContent":["import { Calendar, type CalendarProps } from \"../calendar/calendar.js\";\nimport { Popover } from \"../popover/popover.js\";\nimport { IsoField } from \"./iso-field.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport interface DatePopupProps {\n date: Date | null;\n onDateChange: (date: Date | null) => void;\n onClose: () => void;\n weekStartsOn: CalendarProps[\"weekStartsOn\"];\n disabledDays: ((date: Date) => boolean) | undefined;\n}\n\nexport function DatePopup({ date, onDateChange, onClose, weekStartsOn, disabledDays }: DatePopupProps) {\n const t = useUiText();\n return (\n <Popover.Content padding=\"form\" aria-label={t(\"datePicker.chooseDate\", \"Choose a date\")}>\n <Calendar\n mode=\"single\"\n selected={date ?? undefined}\n {...(date ? { defaultMonth: date } : {})}\n onSelect={(d) => {\n onDateChange((d as Date | undefined) ?? null);\n if (d) onClose();\n }}\n weekStartsOn={weekStartsOn}\n disabled={disabledDays}\n />\n <div className=\"mt-12 flex gap-8\">\n <IsoField\n label={t(\"datePicker.date\", \"Date\")}\n value={date ?? undefined}\n onCommit={(d) => {\n if (disabledDays?.(d)) return false;\n onDateChange(d);\n return true;\n }}\n />\n </div>\n </Popover.Content>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAgBI,EAAU,EAAE,SAAM,iBAAc,YAAS,iBAAc,mBAAgC;CACrG,IAAMC,IAAIL,EAAU;CACpB,OACE,kBAACC,EAAQ,SAAT;EAAiB,SAAQ;EAAO,cAAYI,EAAE,yBAAyB,eAAe;EAAtF,UAAA,CACE,kBAACH,GAAD;GACE,MAAK;GACL,UAAUI,KAAQ,KAAA;GAClB,GAAKA,IAAO,EAAE,cAAcA,EAAK,IAAI,CAAC;GACtC,WAAW,MAAM;IAEf,AADAC,EAAcC,KAA0B,IAAI,GACxCA,KAAGC,EAAQ;GACjB;GACc;GACd,UAAUC;EACX,CAAA,GACD,kBAAC,OAAD;GAAK,WAAU;GACb,UAAA,kBAACP,GAAD;IACE,OAAOE,EAAE,mBAAmB,MAAM;IAClC,OAAOC,KAAQ,KAAA;IACf,WAAW,MACT,CAAII,IAAeF,CAAC,MACpBD,EAAaC,CAAC,GACP;GAEV,CAAA;EACE,CAAA,CACU;;AAErB"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import { t as e } from "./cn-DUDmdLpZ.js";
2
+ import { t as e } from "./cn-Isw2DnQX.js";
3
3
  import { r as t } from "./portal-context-BBbzDKmY.js";
4
4
  import { n, t as r } from "./inset-BnBj8NJV.js";
5
5
  import { i } from "./context-BELWW79w.js";
6
- import { i as a, n as o } from "./button-h2IFCER2.js";
7
- import { t as s } from "./icon-button-DmKFxQbP.js";
8
- import { t as c } from "./input-9y3afoiq.js";
6
+ import { i as a, n as o } from "./button-9q66Ta23.js";
7
+ import { t as s } from "./icon-button-C7Du4pvb.js";
8
+ import { t as c } from "./input-B6Docqrk.js";
9
9
  import { a as l, i as u, t as d } from "./resize-motion-DS3rIIqy.js";
10
10
  import { t as f } from "./over-sheet-B8vzr_zU.js";
11
11
  import { cloneElement as p, createContext as m, forwardRef as h, use as g, useCallback as _, useEffect as v, useLayoutEffect as y, useRef as b, useState as x } from "react";
@@ -350,4 +350,4 @@ process.env.NODE_ENV !== "production" && ($.displayName = "LayerDialog");
350
350
  //#endregion
351
351
  export { I as a, re as c, te as i, $ as l, Y as n, F as o, ne as r, ie as s, Z as t, P as u };
352
352
 
353
- //# sourceMappingURL=dialog-BLcP7v24.js.map
353
+ //# sourceMappingURL=dialog-BZCVFmGF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-BLcP7v24.js","names":["BaseDialog","__icon_Cancel01Icon","_Fragment","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","Fragment$1","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","useScrolledUnder","ref","useRef","under","setUnder","useState","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","boxRef","t","useUiText","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","anchor","size","className","onSubmit","headerStart","title","description","children","focusFirstControl","open","Root","props","focus","container","overSheet","use","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (el && !el.closest(\"[data-resizing]\")) setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n if (e.key !== \"Enter\" || e.altKey || e.nativeEvent.isComposing || e.keyCode === 229) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n footer,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n}: DialogProps) {\n const { ref, under, check } = useScrolledUnder<HTMLDivElement>();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={boxRef}\n data-dialog-frame=\"\"\n className={cn(\n \"flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n {headerStart !== undefined ? (\n <>\n <div className=\"flex h-32 items-center justify-between px-24 pt-16 box-content\">\n <span className=\"flex items-center\">{headerStart}</span>\n {close}\n </div>\n <div className=\"flex flex-col gap-4 px-24 pt-8 pb-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n </>\n ) : (\n <div className=\"flex items-start gap-12 px-24 pt-20 pb-4\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4 pt-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n {close && <span className=\"flex\">{close}</span>}\n </div>\n )}\n {children && (\n <div ref={ref} data-dialog-body=\"\" className={cn(\"min-h-0 flex-1 overflow-y-auto px-24 pt-16 scrollbar-quiet\", footer ? \"pb-8\" : \"pb-24\")}>\n <GutterContent>{children}</GutterContent>\n </div>\n )}\n {footer && (\n <div\n data-dialog-footer=\"\"\n className={cn(\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-20 transition-control\", under && \"hairline-t\")}\n >\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"bg-danger-tint text-danger-text\" },\n warning: { classes: \"bg-warning-tint text-warning-text\" },\n info: { classes: \"bg-info-tint text-info-text\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n}: AlertDialogProps & { close: () => void; busy: boolean; setBusy: (busy: boolean) => void }) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div ref={boxRef} className={cn(\"flex w-440 flex-col gap-20 p-24\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}>\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => e.key === \"Enter\" && confirm()}\n />\n )}\n <div className=\"flex flex-wrap justify-end gap-8\">\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function AlertDialog(props: AlertDialogProps) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const focus = useRestoreFocus(isOpen);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)}>\n <BaseAlertDialog.Popup initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = KAESO_DIALOG_DEFAULT_VARIANTS;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"footer\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function LayerDialog({ layers, layer, onLayerChange, ...props }: LayerDialogProps) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <Dialog\n {...props}\n title={current.title}\n description={current.description}\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog-BZCVFmGF.js","names":["BaseDialog","__icon_Cancel01Icon","_Fragment","Dialog","BaseAlertDialog","AlertDialog","__icon_ArrowLeft01Icon","cn","usePortalContainer","GutterContent","KAESO_BUTTON_VARIANTS","Button","IconButton","Input","useRestoreFocus","useScopedDialog","useResizeMotion","OverNonModalSheet","Fragment$1","DIALOG_FIELD","FOCUSABLE","usable","el","firstUsable","scope","selector","initialDialogControl","content","frame","footer","actions","dangerSecondary","safe","a","danger","primary","focusDialogSection","section","previous","KAESO_DIALOG_VARIANTS","KAESO_DIALOG_DEFAULT_VARIANTS","BACKDROP","DIALOG_VIEWPORT","DIALOG_POPUP","DialogBusy","useScrolledUnder","ref","useRef","under","setUnder","useState","check","useCallback","useEffect","useKeepFocus","rendered","first","active","inline","box","SINGLE_LINE","submitsOnEnter","target","useBox","setBox","DialogFrame","boxRef","t","useUiText","Title","Dialog","closeButton","Cancel01Icon","busy","close","hideClose","Description","anchor","size","className","onSubmit","headerStart","title","description","children","focusFirstControl","open","Root","props","focus","container","overSheet","use","settled","defaultOpen","o","details","persistent","trigger","InsetContent","Close","cloneElement","Dialog$1","KAESO_ALERT_DIALOG_VARIANTS","KAESO_ALERT_DIALOG_DEFAULT_VARIANTS","AlertFrame","cancelProp","typed","setTyped","pending","cancelLabel","typeBefore","typeAfter","AlertDialog","ok","confirmText","confirm","loading","r","onConfirm","setBusy","done","tone","confirmLabel","AlertDialog$1","inner","setInner","isOpen","setOpen","onOpenChange","KAESO_LAYER_DIALOG_VARIANTS","KAESO_LAYER_DIALOG_DEFAULT_VARIANTS","bodyOf","LayerDialog","wanted","layer","index","layers","sections","focused","tops","left","shown","useLayoutEffect","from","back","body","go","i","onLayerChange","stack","current","remember","e","l","ArrowLeft01Icon"],"sources":["../../src/components/dialog/focus.ts","../../src/components/dialog/dialog.tsx"],"sourcesContent":["import { KAESO_BUTTON_VARIANTS } from \"../button/button.js\";\n\nconst DIALOG_FIELD =\n 'input:not([type=hidden]):not([tabindex=\"-1\"]):not([aria-hidden=\"true\"]), textarea, select, [role=combobox]:not([tabindex=\"-1\"]), [role=radio][tabindex=\"0\"], [role=checkbox]:not([tabindex=\"-1\"]), [role=switch]:not([tabindex=\"-1\"]), [role=listbox]:not([tabindex=\"-1\"]), [role=grid] [data-index][tabindex=\"0\"], button[data-picker]';\nconst FOCUSABLE = 'a[href], button, input:not([type=hidden]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\nconst usable = (el: HTMLElement) => !el.closest(\"[hidden], [inert]\") && !el.matches(\":disabled, [aria-disabled=true]\");\nconst firstUsable = (scope: ParentNode, selector: string) => [...scope.querySelectorAll<HTMLElement>(selector)].find(usable) ?? null;\n\nexport function initialDialogControl(frame: HTMLElement, scope?: HTMLElement | undefined): HTMLElement | null {\n const content = scope ?? frame.querySelector<HTMLElement>(\"[data-dialog-body]\");\n const footer = frame.querySelector<HTMLElement>(\"[data-dialog-footer]\");\n const actions = footer ? [...footer.querySelectorAll<HTMLElement>(\"button, a[href]\")].filter(usable) : [];\n const { primary, danger, \"danger-secondary\": dangerSecondary } = KAESO_BUTTON_VARIANTS.variant;\n const safe = actions.filter((a) => !a.classList.contains(danger.classes) && !a.classList.contains(dangerSecondary.classes));\n return (\n (content && (firstUsable(content, \"[data-autofocus]\") ?? firstUsable(content, DIALOG_FIELD))) ??\n safe.find((a) => a.classList.contains(primary.classes)) ??\n safe[0] ??\n (content && firstUsable(content, FOCUSABLE)) ??\n firstUsable(frame, FOCUSABLE)\n );\n}\n\nexport function focusDialogSection(section: HTMLElement | null | undefined, previous?: HTMLElement | null | undefined) {\n const frame = section?.closest<HTMLElement>(\"[data-dialog-frame]\");\n if (!section || !frame || frame.closest(\"[data-closed]\")) return;\n const back = previous?.isConnected && frame.contains(previous) && usable(previous) ? previous : null;\n (back ?? initialDialogControl(frame, section))?.focus({ preventScroll: true });\n}\n","import { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport {\n cloneElement,\n createContext,\n forwardRef,\n use,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useRestoreFocus } from \"../../utils/restore-focus.js\";\nimport { useScopedDialog } from \"../../utils/dialog-scope.js\";\nimport { OverNonModalSheet } from \"../../utils/over-sheet.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowLeft01Icon as __icon_ArrowLeft01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Button } from \"../button/button.js\";\nimport { Input } from \"../input/input.js\";\nimport { focusDialogSection, initialDialogControl } from \"./focus.js\";\nimport { useResizeMotion } from \"../../utils/resize-motion.js\";\n\nexport const KAESO_DIALOG_VARIANTS = {\n size: {\n sm: { classes: \"w-440\" },\n md: { classes: \"w-560\" },\n lg: { classes: \"w-720\" },\n },\n anchor: {\n center: { classes: \"items-center\" },\n top: { classes: \"items-start pt-dialog-top\" },\n },\n} as const;\nexport const KAESO_DIALOG_DEFAULT_VARIANTS = { size: \"md\", anchor: \"center\" } as const;\n\nconst BACKDROP = \"fixed inset-0 z-50 bg-overlay backdrop-motion\";\nconst DIALOG_VIEWPORT = \"fixed inset-0 z-50 flex justify-center p-16\";\nconst DIALOG_POPUP = \"relative flex dialog-limits flex-col overflow-hidden rounded-dialog bg-raised text-fg shadow-dialog outline-none dialog-motion\";\n\nconst DialogBusy = /* @__PURE__ */ createContext(false);\n\nfunction useScrolledUnder<T extends HTMLElement>() {\n const ref = useRef<T | null>(null);\n const [under, setUnder] = useState(false);\n const check = useCallback(() => {\n const el = ref.current;\n if (el && !el.closest(\"[data-resizing]\")) setUnder(el.scrollHeight - el.scrollTop - el.clientHeight > 1);\n }, []);\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n check();\n el.addEventListener(\"scroll\", check, { passive: true });\n window.addEventListener(\"resize\", check);\n return () => {\n el.removeEventListener(\"scroll\", check);\n window.removeEventListener(\"resize\", check);\n };\n }, [check]);\n return { ref, under, check };\n}\n\nfunction useKeepFocus(box: HTMLElement | null, inline: boolean | undefined) {\n const rendered = useRef(false);\n useEffect(() => {\n const first = !rendered.current;\n rendered.current = true;\n const active = document.activeElement;\n if (first || inline || !box || (active && active !== document.body) || box.matches(\"[data-ending-style], [data-closed]\")) return;\n const frame = box.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n if (frame) initialDialogControl(frame)?.focus({ preventScroll: true });\n });\n}\n\nconst SINGLE_LINE = new Set([\"text\", \"email\", \"password\", \"tel\", \"url\", \"number\"]);\n\nfunction submitsOnEnter(e: KeyboardEvent): boolean {\n // Safari ends composition before the Enter that confirms it, leaving only keyCode 229: https://bugs.webkit.org/show_bug.cgi?id=165004\n if (e.key !== \"Enter\" || e.altKey || e.nativeEvent.isComposing || e.keyCode === 229) return false;\n if (e.metaKey || e.ctrlKey) return true;\n const target = e.target as HTMLElement;\n return !e.defaultPrevented && !e.shiftKey && target instanceof HTMLInputElement && SINGLE_LINE.has(target.type) && target.getAttribute(\"role\") !== \"combobox\";\n}\n\nfunction useBox(inline: boolean | undefined) {\n const [box, setBox] = useState<HTMLElement | null>(null);\n const ref = useCallback((el: HTMLElement | null) => setBox(inline ? el : (el?.parentElement ?? null)), [inline]);\n return [box, ref] as const;\n}\n\nexport interface DialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description?: ReactNode | undefined;\n busy?: boolean | undefined;\n size?: keyof typeof KAESO_DIALOG_VARIANTS.size | undefined;\n anchor?: keyof typeof KAESO_DIALOG_VARIANTS.anchor | undefined;\n children?: ReactNode | undefined;\n footer?: ReactNode | undefined;\n onSubmit?: (() => void) | undefined;\n hideClose?: boolean | undefined;\n headerStart?: ReactNode | undefined;\n className?: string | undefined;\n inline?: boolean | undefined;\n persistent?: boolean | undefined;\n}\n\nfunction DialogFrame({\n title,\n description,\n children,\n footer,\n onSubmit,\n hideClose,\n headerStart,\n size = \"md\",\n anchor = \"center\",\n className,\n inline,\n busy,\n}: DialogProps) {\n const { ref, under, check } = useScrolledUnder<HTMLDivElement>();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box, check);\n useKeepFocus(box, inline);\n const t = useUiText();\n const Title = inline ? \"h2\" : BaseDialog.Title;\n const closeButton = <IconButton icon={__icon_Cancel01Icon} aria-label={t(\"dialog.close\", \"Close\")} tooltip={false} disabled={!!busy} />;\n const close = hideClose ? null : inline ? closeButton : <BaseDialog.Close render={closeButton} />;\n const Description = inline ? \"p\" : BaseDialog.Description;\n return (\n <DialogBusy value={!!busy}>\n <div\n ref={boxRef}\n data-dialog-frame=\"\"\n className={cn(\n \"flex min-h-0 flex-col\",\n inline ? \"rounded-dialog bg-raised shadow-dialog\" : cn(\"flex-1 self-center\", anchor === \"top\" ? \"dialog-limits-top\" : \"dialog-limits\"),\n KAESO_DIALOG_VARIANTS.size[size].classes,\n className,\n )}\n onKeyDown={(e: KeyboardEvent) => {\n if (onSubmit && !busy && submitsOnEnter(e)) {\n e.preventDefault();\n onSubmit();\n }\n }}\n >\n {headerStart !== undefined ? (\n <>\n <div className=\"flex h-32 items-center justify-between px-24 pt-16 box-content\">\n <span className=\"flex items-center\">{headerStart}</span>\n {close}\n </div>\n <div className=\"flex flex-col gap-4 px-24 pt-8 pb-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n </>\n ) : (\n <div className=\"flex items-start gap-12 px-24 pt-20 pb-4\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-4 pt-4\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n {description && <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>}\n </div>\n {close && <span className=\"flex\">{close}</span>}\n </div>\n )}\n {children && (\n <div ref={ref} data-dialog-body=\"\" className={cn(\"min-h-0 flex-1 overflow-y-auto px-24 pt-16 scrollbar-quiet\", footer ? \"pb-8\" : \"pb-24\")}>\n <GutterContent>{children}</GutterContent>\n </div>\n )}\n {footer && (\n <div\n data-dialog-footer=\"\"\n className={cn(\"flex shrink-0 flex-wrap items-center justify-end gap-8 px-24 pt-16 pb-20 transition-control\", under && \"hairline-t\")}\n >\n {footer}\n </div>\n )}\n </div>\n </DialogBusy>\n );\n}\n\nfunction focusFirstControl(): HTMLElement | true {\n const open = [...document.querySelectorAll<HTMLElement>(\"[role=dialog], [role=alertdialog]\")].pop();\n const frame = open?.querySelector<HTMLElement>(\"[data-dialog-frame]\");\n return (frame && initialDialogControl(frame)) ?? open ?? true;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, DialogProps>(function Dialog(props, ref) {\n const { open, defaultOpen, onOpenChange, trigger, size = \"md\", anchor = \"center\", inline, busy, persistent } = props;\n const focus = useRestoreFocus(open, focusFirstControl);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : open);\n if (inline) return <DialogFrame {...props} />;\n return (\n <BaseDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n onOpenChange={(o: boolean, details: BaseDialog.Root.ChangeEventDetails) => {\n if (!o && busy) return details.cancel();\n onOpenChange?.(o);\n }}\n onOpenChangeComplete={settled}\n {...(persistent ? { disablePointerDismissal: true } : {})}\n >\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor[anchor].classes)}>\n <BaseDialog.Popup\n ref={ref}\n initialFocus={focus.initialFocus}\n finalFocus={focus.finalFocus}\n className={cn(DIALOG_POPUP, KAESO_DIALOG_VARIANTS.size[size].classes, anchor === \"top\" && \"dialog-limits-top\")}\n >\n <InsetContent inset={false}>\n <OverNonModalSheet value={false}>\n <DialogFrame {...props} />\n </OverNonModalSheet>\n </InsetContent>\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Dialog\";\n\nfunction Close({ children }: { children: ReactElement<{ disabled?: boolean | undefined }> }) {\n const busy = use(DialogBusy);\n return <BaseDialog.Close render={busy ? cloneElement(children, { disabled: true }) : children} />;\n}\nif (process.env.NODE_ENV !== \"production\") Close.displayName = \"Dialog.Close\";\n\nexport const Dialog = /* @__PURE__ */ Object.assign(Root, { Close });\n\nexport const KAESO_ALERT_DIALOG_VARIANTS = {\n tone: {\n danger: { classes: \"bg-danger-tint text-danger-text\" },\n warning: { classes: \"bg-warning-tint text-warning-text\" },\n info: { classes: \"bg-info-tint text-info-text\" },\n },\n} as const;\nexport const KAESO_ALERT_DIALOG_DEFAULT_VARIANTS = { tone: \"danger\" } as const;\n\nexport interface AlertDialogProps {\n open?: boolean | undefined;\n defaultOpen?: boolean | undefined;\n onOpenChange?: ((open: boolean) => void) | undefined;\n trigger?: ReactElement | undefined;\n title: ReactNode;\n description: ReactNode;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n onConfirm: () => void | Promise<unknown>;\n tone?: keyof typeof KAESO_ALERT_DIALOG_VARIANTS.tone | undefined;\n confirmText?: string | undefined;\n loading?: boolean | undefined;\n inline?: boolean | undefined;\n}\n\nfunction AlertFrame({\n title,\n description,\n confirmLabel,\n cancelLabel: cancelProp,\n onConfirm,\n tone = \"danger\",\n confirmText,\n loading,\n inline,\n close,\n busy,\n setBusy,\n}: AlertDialogProps & { close: () => void; busy: boolean; setBusy: (busy: boolean) => void }) {\n const [typed, setTyped] = useState(\"\");\n const pending = useRef(false);\n const t = useUiText();\n const [box, boxRef] = useBox(inline);\n useResizeMotion(box);\n const cancelLabel = cancelProp ?? t(\"alertDialog.cancel\", \"Cancel\");\n const [typeBefore, typeAfter = \"\"] = t(\"alertDialog.typeToConfirm\", \"Type {text} to confirm\").split(\"{text}\");\n const Title = inline ? \"h2\" : BaseAlertDialog.Title;\n const Description = inline ? \"p\" : BaseAlertDialog.Description;\n const ok = !confirmText || typed === confirmText;\n const confirm = async () => {\n if (!ok || loading || pending.current) return;\n const r = onConfirm();\n if (!(r instanceof Promise)) return close();\n pending.current = true;\n setBusy(true);\n const done = await r.then(\n () => true,\n () => false,\n );\n pending.current = false;\n setBusy(false);\n if (done) close();\n };\n return (\n <div ref={boxRef} className={cn(\"flex w-440 flex-col gap-20 p-24\", inline ? \"rounded-dialog bg-raised shadow-dialog\" : \"self-center dialog-limits\")}>\n <div className=\"flex flex-col gap-6\">\n <Title className=\"text-title-sm font-semibold text-fg text-balance\">{title}</Title>\n <Description className=\"text-body text-fg-secondary text-pretty\">{description}</Description>\n </div>\n {confirmText && (\n <Input\n label={\n <span className=\"font-regular text-fg-secondary\">\n {typeBefore}\n <span className=\"mono font-medium text-fg\">{confirmText}</span>\n {typeAfter}\n </span>\n }\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n onKeyDown={(e) => e.key === \"Enter\" && confirm()}\n />\n )}\n <div className=\"flex flex-wrap justify-end gap-8\">\n {inline ? <Button>{cancelLabel}</Button> : <BaseAlertDialog.Close render={<Button disabled={busy || !!loading}>{cancelLabel}</Button>} />}\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} onClick={confirm} disabled={!ok} loading={busy || loading}>\n {confirmLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function AlertDialog(props: AlertDialogProps) {\n const { open, defaultOpen, onOpenChange, trigger, inline } = props;\n const [inner, setInner] = useState(defaultOpen ?? false);\n const isOpen = open ?? inner;\n const setOpen = (o: boolean) => {\n if (open === undefined) setInner(o);\n onOpenChange?.(o);\n };\n const [busy, setBusy] = useState(false);\n const focus = useRestoreFocus(isOpen);\n const container = usePortalContainer();\n const overSheet = use(OverNonModalSheet);\n const settled = useScopedDialog(inline ? false : isOpen);\n if (inline) return <AlertFrame {...props} close={() => undefined} busy={busy} setBusy={setBusy} />;\n return (\n <BaseAlertDialog.Root\n open={isOpen}\n onOpenChange={(o: boolean, details: BaseAlertDialog.Root.ChangeEventDetails) => {\n if (!o && (busy || props.loading)) return details.cancel();\n setOpen(o);\n }}\n onOpenChangeComplete={settled}\n >\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal container={container}>\n <BaseAlertDialog.Backdrop className={BACKDROP} forceRender={overSheet} />\n <BaseAlertDialog.Viewport className={cn(DIALOG_VIEWPORT, KAESO_DIALOG_VARIANTS.anchor.center.classes)}>\n <BaseAlertDialog.Popup initialFocus={focus.initialFocus} finalFocus={focus.finalFocus} className={cn(DIALOG_POPUP, \"w-440\")}>\n <InsetContent inset={false}>\n <AlertFrame {...props} close={() => setOpen(false)} busy={busy} setBusy={setBusy} />\n </InsetContent>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Viewport>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\nif (process.env.NODE_ENV !== \"production\") AlertDialog.displayName = \"AlertDialog\";\n\nexport const KAESO_LAYER_DIALOG_VARIANTS = KAESO_DIALOG_VARIANTS;\nexport const KAESO_LAYER_DIALOG_DEFAULT_VARIANTS = KAESO_DIALOG_DEFAULT_VARIANTS;\n\nexport interface DialogLayer {\n title: ReactNode;\n description?: ReactNode | undefined;\n content: ReactNode;\n footer?: ReactNode | undefined;\n}\n\nexport interface LayerDialogProps extends Omit<DialogProps, \"title\" | \"description\" | \"children\" | \"footer\" | \"headerStart\"> {\n layers: DialogLayer[];\n layer?: number | undefined;\n onLayerChange?: ((layer: number) => void) | undefined;\n}\n\nconst bodyOf = (el: HTMLElement | null | undefined) => el?.closest<HTMLElement>(\"[data-dialog-body]\") ?? null;\n\nexport function LayerDialog({ layers, layer, onLayerChange, ...props }: LayerDialogProps) {\n const [inner, setInner] = useState(0);\n const t = useUiText();\n const wanted = layer ?? inner;\n const index = wanted > 0 && wanted < layers.length ? wanted : 0;\n const sections = useRef<(HTMLDivElement | null)[]>([]);\n const focused = useRef<(HTMLElement | null)[]>([]);\n const tops = useRef<number[]>([]);\n const left = useRef(index);\n const shown = useRef(index);\n if (left.current !== index) {\n tops.current[left.current] = bodyOf(sections.current[left.current])?.scrollTop ?? 0;\n left.current = index;\n }\n useLayoutEffect(() => {\n const from = shown.current;\n shown.current = index;\n if (from === index) return;\n const back = index < from;\n if (!back) focused.current[index] = null;\n focused.current.length = index + 1;\n const section = sections.current[index];\n const body = bodyOf(section);\n if (body) body.scrollTop = back ? (tops.current[index] ?? 0) : 0;\n focusDialogSection(section, back ? focused.current[index] : null);\n }, [index]);\n const go = (i: number) => {\n if (props.busy) return;\n if (layer === undefined) setInner(i);\n onLayerChange?.(i);\n };\n const stack = layers.slice(0, index + 1);\n const current = stack[index];\n if (!current) return null;\n const remember = (i: number) => (e: FocusEvent<HTMLElement>) => {\n if (e.target instanceof HTMLElement) focused.current[i] = e.target;\n };\n return (\n <Dialog\n {...props}\n title={current.title}\n description={current.description}\n footer={\n current.footer\n ? stack.map((l, i) =>\n l.footer ? (\n <div key={i} hidden={i !== index} className=\"contents\" onFocus={remember(i)}>\n {l.footer}\n </div>\n ) : null,\n )\n : undefined\n }\n headerStart={\n index > 0 ? (\n <IconButton\n key=\"back\"\n icon={__icon_ArrowLeft01Icon}\n aria-label={t(\"dialog.back\", \"Back\")}\n onClick={() => go(index - 1)}\n disabled={!!props.busy}\n className=\"animate-layer-in\"\n />\n ) : null\n }\n >\n {stack.map((l, i) => (\n <div\n key={i}\n ref={(el) => {\n sections.current[i] = el;\n }}\n hidden={i !== index}\n className=\"animate-layer-in\"\n onFocus={remember(i)}\n >\n {l.content}\n </div>\n ))}\n </Dialog>\n );\n}\nif (process.env.NODE_ENV !== \"production\") LayerDialog.displayName = \"LayerDialog\";\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "./cn-DUDmdLpZ.js";
2
+ import { t as e } from "./cn-Isw2DnQX.js";
3
3
  import { forwardRef as t } from "react";
4
4
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
5
5
  //#region src/components/empty/empty.tsx
@@ -35,4 +35,4 @@ process.env.NODE_ENV !== "production" && (o.displayName = "Empty");
35
35
  //#endregion
36
36
  export { a as n, i as r, o as t };
37
37
 
38
- //# sourceMappingURL=empty-YXmSkKzR.js.map
38
+ //# sourceMappingURL=empty-By1qTJr6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"empty-YXmSkKzR.js","names":["cn","KAESO_EMPTY_VARIANTS","KAESO_EMPTY_DEFAULT_VARIANTS","Empty","compact","size","className","title","description","actions","children"],"sources":["../../src/components/empty/empty.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport const KAESO_EMPTY_VARIANTS = {\n size: {\n lg: { classes: \"py-80 gap-16\" },\n md: { classes: \"py-48 gap-12\" },\n compact: { classes: \"py-32 gap-8\" },\n },\n} as const;\nexport const KAESO_EMPTY_DEFAULT_VARIANTS = { size: \"lg\" } as const;\n\nexport interface EmptyProps {\n title: ReactNode;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n size?: keyof typeof KAESO_EMPTY_VARIANTS.size | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nexport const Empty = /* @__PURE__ */ forwardRef<HTMLDivElement, EmptyProps>(function Empty({ title, description, actions, size = \"lg\", children, className }, ref) {\n const compact = size === \"compact\";\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center text-center\", KAESO_EMPTY_VARIANTS.size[size].classes, className)}>\n <div className={cn(\"flex flex-col items-center\", compact ? \"gap-2\" : \"gap-6\")}>\n <h2 className={cn(\"font-semibold text-fg text-balance\", compact ? \"text-body\" : \"text-title\")}>{title}</h2>\n {description && <p className={cn(\"max-w-44ch text-fg-secondary text-pretty\", compact ? \"text-small\" : \"text-body\")}>{description}</p>}\n </div>\n {actions && <div className={cn(\"flex flex-wrap items-center justify-center gap-8\", !compact && \"mt-8\")}>{actions}</div>}\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Empty.displayName = \"Empty\";\n"],"mappings":";;;;;AAGA,IAAaC,IAAuB,EAClC,MAAM;CACJ,IAAI,EAAE,SAAS,eAAe;CAC9B,IAAI,EAAE,SAAS,eAAe;CAC9B,SAAS,EAAE,SAAS,cAAc;AACpC,EACF,GACaC,IAA+B,EAAE,MAAM,KAAK,GAW5CC,IAAwB,kBAAuC,SAAe,EAAE,UAAO,gBAAa,YAAS,UAAO,MAAM,aAAU,gBAAa,GAAK;CACjK,IAAMC,IAAUC,MAAS;CACzB,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWL,EAAG,0CAA0CC,EAAqB,KAAKI,EAAK,CAAC,SAASC,CAAS;EAAzH,UAAA;GACE,kBAAC,OAAD;IAAK,WAAWN,EAAG,8BAA8BI,IAAU,UAAU,OAAO;IAA5E,UAAA,CACE,kBAAC,MAAD;KAAI,WAAWJ,EAAG,sCAAsCI,IAAU,cAAc,YAAY;KAAI,UAAAG;IAAU,CAAA,GACzGC,KAAe,kBAAC,KAAD;KAAG,WAAWR,EAAG,4CAA4CI,IAAU,eAAe,WAAW;KAAI,UAAAI;IAAe,CAAA,CACjI;;GACJC,KAAW,kBAAC,OAAD;IAAK,WAAWT,EAAG,oDAAoD,CAACI,KAAW,MAAM;IAAI,UAAAK;GAAa,CAAA;GACrHC;EACE;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc"}
1
+ {"version":3,"file":"empty-By1qTJr6.js","names":["cn","KAESO_EMPTY_VARIANTS","KAESO_EMPTY_DEFAULT_VARIANTS","Empty","compact","size","className","title","description","actions","children"],"sources":["../../src/components/empty/empty.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\n\nexport const KAESO_EMPTY_VARIANTS = {\n size: {\n lg: { classes: \"py-80 gap-16\" },\n md: { classes: \"py-48 gap-12\" },\n compact: { classes: \"py-32 gap-8\" },\n },\n} as const;\nexport const KAESO_EMPTY_DEFAULT_VARIANTS = { size: \"lg\" } as const;\n\nexport interface EmptyProps {\n title: ReactNode;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n size?: keyof typeof KAESO_EMPTY_VARIANTS.size | undefined;\n children?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nexport const Empty = /* @__PURE__ */ forwardRef<HTMLDivElement, EmptyProps>(function Empty({ title, description, actions, size = \"lg\", children, className }, ref) {\n const compact = size === \"compact\";\n return (\n <div ref={ref} className={cn(\"flex flex-col items-center text-center\", KAESO_EMPTY_VARIANTS.size[size].classes, className)}>\n <div className={cn(\"flex flex-col items-center\", compact ? \"gap-2\" : \"gap-6\")}>\n <h2 className={cn(\"font-semibold text-fg text-balance\", compact ? \"text-body\" : \"text-title\")}>{title}</h2>\n {description && <p className={cn(\"max-w-44ch text-fg-secondary text-pretty\", compact ? \"text-small\" : \"text-body\")}>{description}</p>}\n </div>\n {actions && <div className={cn(\"flex flex-wrap items-center justify-center gap-8\", !compact && \"mt-8\")}>{actions}</div>}\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Empty.displayName = \"Empty\";\n"],"mappings":";;;;;AAGA,IAAaC,IAAuB,EAClC,MAAM;CACJ,IAAI,EAAE,SAAS,eAAe;CAC9B,IAAI,EAAE,SAAS,eAAe;CAC9B,SAAS,EAAE,SAAS,cAAc;AACpC,EACF,GACaC,IAA+B,EAAE,MAAM,KAAK,GAW5CC,IAAwB,kBAAuC,SAAe,EAAE,UAAO,gBAAa,YAAS,UAAO,MAAM,aAAU,gBAAa,GAAK;CACjK,IAAMC,IAAUC,MAAS;CACzB,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWL,EAAG,0CAA0CC,EAAqB,KAAKI,EAAK,CAAC,SAASC,CAAS;EAAzH,UAAA;GACE,kBAAC,OAAD;IAAK,WAAWN,EAAG,8BAA8BI,IAAU,UAAU,OAAO;IAA5E,UAAA,CACE,kBAAC,MAAD;KAAI,WAAWJ,EAAG,sCAAsCI,IAAU,cAAc,YAAY;KAAI,UAAAG;IAAU,CAAA,GACzGC,KAAe,kBAAC,KAAD;KAAG,WAAWR,EAAG,4CAA4CI,IAAU,eAAe,WAAW;KAAI,UAAAI;IAAe,CAAA,CACjI;;GACJC,KAAW,kBAAC,OAAD;IAAK,WAAWT,EAAG,oDAAoD,CAACI,KAAW,MAAM;IAAI,UAAAK;GAAa,CAAA;GACrHC;EACE;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "./cn-DUDmdLpZ.js";
2
+ import { t as e } from "./cn-Isw2DnQX.js";
3
3
  import { i as t } from "./context-BELWW79w.js";
4
4
  import { createContext as n, forwardRef as r, useContext as i, useId as a } from "react";
5
5
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
@@ -116,4 +116,4 @@ function h(e, t) {
116
116
  //#endregion
117
117
  export { d as a, c as i, p as n, m as o, l as r, h as s, f as t };
118
118
 
119
- //# sourceMappingURL=field-BZriODU7.js.map
119
+ //# sourceMappingURL=field-DfITT6Jm.js.map