@logicplanes/kaeso-ui 0.4.4 → 0.4.6

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 (482) hide show
  1. package/ai/component-guides.md +250 -98
  2. package/ai/component-registry.json +264 -236
  3. package/ai/component-registry.md +222 -218
  4. package/ai/icons.md +1 -1
  5. package/ai/tokens.md +18 -14
  6. package/dist/blocks/delete-resource.js +3 -3
  7. package/dist/blocks/delete-resource.js.map +1 -1
  8. package/dist/blocks/pages.js +47 -42
  9. package/dist/blocks/pages.js.map +1 -1
  10. package/dist/blocks/resource-list.js +68 -55
  11. package/dist/blocks/resource-list.js.map +1 -1
  12. package/dist/chunks/agent-avatar-DHieggHK.js +188 -0
  13. package/dist/chunks/agent-avatar-DHieggHK.js.map +1 -0
  14. package/dist/chunks/app-frame-DysOel2X.js +232 -0
  15. package/dist/chunks/app-frame-DysOel2X.js.map +1 -0
  16. package/dist/chunks/arrow-focus-B0KdRFX8.js +20 -0
  17. package/dist/chunks/arrow-focus-B0KdRFX8.js.map +1 -0
  18. package/dist/chunks/avatar-CYNMK7uY.js +110 -0
  19. package/dist/chunks/avatar-CYNMK7uY.js.map +1 -0
  20. package/dist/chunks/badge-C0GC3B9X.js +27 -0
  21. package/dist/chunks/badge-C0GC3B9X.js.map +1 -0
  22. package/dist/chunks/banner-B3DGLTBu.js +88 -0
  23. package/dist/chunks/banner-B3DGLTBu.js.map +1 -0
  24. package/dist/chunks/button-IblhXUyZ.js +202 -0
  25. package/dist/chunks/button-IblhXUyZ.js.map +1 -0
  26. package/dist/chunks/{calendar-BWaf2MXc.js → calendar-Dc6_dl0f.js} +4 -4
  27. package/dist/chunks/calendar-Dc6_dl0f.js.map +1 -0
  28. package/dist/chunks/checkbox-9tbimmF3.js +141 -0
  29. package/dist/chunks/checkbox-9tbimmF3.js.map +1 -0
  30. package/dist/chunks/{cn-Dj6sRgkF.js → cn-BjnOAUrA.js} +45 -4
  31. package/dist/chunks/cn-BjnOAUrA.js.map +1 -0
  32. package/dist/chunks/code-block-64e-Cy1S.js +346 -0
  33. package/dist/chunks/code-block-64e-Cy1S.js.map +1 -0
  34. package/dist/chunks/{code-block-DdNPHEzI.js → code-block-KIvuE8jg.js} +122 -114
  35. package/dist/chunks/code-block-KIvuE8jg.js.map +1 -0
  36. package/dist/chunks/{code-tqj0uhBL.js → code-xqjww4Pv.js} +5 -6
  37. package/dist/chunks/code-xqjww4Pv.js.map +1 -0
  38. package/dist/chunks/combobox-DkcjkWc6.js +352 -0
  39. package/dist/chunks/combobox-DkcjkWc6.js.map +1 -0
  40. package/dist/chunks/command-list-CypqsC4T.js +456 -0
  41. package/dist/chunks/command-list-CypqsC4T.js.map +1 -0
  42. package/dist/chunks/{copy-button-FJvPJn72.js → copy-button-CwU8t_9_.js} +22 -15
  43. package/dist/chunks/copy-button-CwU8t_9_.js.map +1 -0
  44. package/dist/chunks/core-CmK-8ObW.js +505 -0
  45. package/dist/chunks/core-CmK-8ObW.js.map +1 -0
  46. package/dist/chunks/data-table-CqY8_6IS.js +581 -0
  47. package/dist/chunks/data-table-CqY8_6IS.js.map +1 -0
  48. package/dist/chunks/date-popup-DAnjptFt.js +58 -0
  49. package/dist/chunks/date-popup-DAnjptFt.js.map +1 -0
  50. package/dist/chunks/{de-D_0mmG-k.js → de-CqC4aSIV.js} +74 -40
  51. package/dist/chunks/de-CqC4aSIV.js.map +1 -0
  52. package/dist/chunks/{dialog-Cg9A_6SF.js → dialog-2zb6ClNR.js} +156 -134
  53. package/dist/chunks/dialog-2zb6ClNR.js.map +1 -0
  54. package/dist/chunks/disclosure-BtYRTDO3.js +22 -0
  55. package/dist/chunks/disclosure-BtYRTDO3.js.map +1 -0
  56. package/dist/chunks/domain-obd_w9xk.js +28 -0
  57. package/dist/chunks/domain-obd_w9xk.js.map +1 -0
  58. package/dist/chunks/{empty-DvhyMXQq.js → empty-BpiUgGzm.js} +2 -2
  59. package/dist/chunks/{empty-DvhyMXQq.js.map → empty-BpiUgGzm.js.map} +1 -1
  60. package/dist/chunks/{field-TviMvYa2.js → field-D7m-yl-D.js} +37 -34
  61. package/dist/chunks/field-D7m-yl-D.js.map +1 -0
  62. package/dist/chunks/{icon-D7ja-_Yk.js → icon-CBzOwqrX.js} +7 -6
  63. package/dist/chunks/{icon-D7ja-_Yk.js.map → icon-CBzOwqrX.js.map} +1 -1
  64. package/dist/chunks/{icon-button-CrdF_eMG.js → icon-button-Dfwpvmav.js} +7 -6
  65. package/dist/chunks/icon-button-Dfwpvmav.js.map +1 -0
  66. package/dist/chunks/{identity-BmhQ6BQ-.js → identity-3Foi5F8w.js} +7 -7
  67. package/dist/chunks/{identity-BmhQ6BQ-.js.map → identity-3Foi5F8w.js.map} +1 -1
  68. package/dist/chunks/{input-2VJuj_M4.js → input-Bo5-UZg2.js} +15 -9
  69. package/dist/chunks/input-Bo5-UZg2.js.map +1 -0
  70. package/dist/chunks/{input-group-DQ_4DoXg.js → input-group-jPcK9T_a.js} +42 -29
  71. package/dist/chunks/input-group-jPcK9T_a.js.map +1 -0
  72. package/dist/chunks/iso-field-DoqHBg8n.js +52 -0
  73. package/dist/chunks/iso-field-DoqHBg8n.js.map +1 -0
  74. package/dist/chunks/json-view-DZ2nL2Ir.js +253 -0
  75. package/dist/chunks/json-view-DZ2nL2Ir.js.map +1 -0
  76. package/dist/chunks/{kbd-BF1vKXJf.js → kbd-8A0ML_up.js} +30 -28
  77. package/dist/chunks/kbd-8A0ML_up.js.map +1 -0
  78. package/dist/chunks/label-DW24Aj0Z.js +26 -0
  79. package/dist/chunks/label-DW24Aj0Z.js.map +1 -0
  80. package/dist/chunks/{link-KWI7PevW.js → link-CMjkcLQK.js} +14 -14
  81. package/dist/chunks/link-CMjkcLQK.js.map +1 -0
  82. package/dist/chunks/list-B4G-sWwV.js +540 -0
  83. package/dist/chunks/list-B4G-sWwV.js.map +1 -0
  84. package/dist/chunks/{loader-DCfPndXa.js → loader-zo8CCIGJ.js} +2 -2
  85. package/dist/chunks/{loader-DCfPndXa.js.map → loader-zo8CCIGJ.js.map} +1 -1
  86. package/dist/chunks/markdown-C565aBR7.js +338 -0
  87. package/dist/chunks/markdown-C565aBR7.js.map +1 -0
  88. package/dist/chunks/menu-Clvv6ftq.js +485 -0
  89. package/dist/chunks/menu-Clvv6ftq.js.map +1 -0
  90. package/dist/chunks/merge-refs-BN1FyQt9.js +20 -0
  91. package/dist/chunks/merge-refs-BN1FyQt9.js.map +1 -0
  92. package/dist/chunks/meter-CASMHlxl.js +100 -0
  93. package/dist/chunks/meter-CASMHlxl.js.map +1 -0
  94. package/dist/chunks/nav-sheet-Dt6JSvzX.js +67 -0
  95. package/dist/chunks/nav-sheet-Dt6JSvzX.js.map +1 -0
  96. package/dist/chunks/{nav-wordmark-_pjheAsZ.js → nav-wordmark-J4pB_vjr.js} +4 -8
  97. package/dist/chunks/nav-wordmark-J4pB_vjr.js.map +1 -0
  98. package/dist/chunks/page-header-kS5tdmvb.js +45 -0
  99. package/dist/chunks/page-header-kS5tdmvb.js.map +1 -0
  100. package/dist/chunks/pagination-D7fAm8qg.js +147 -0
  101. package/dist/chunks/pagination-D7fAm8qg.js.map +1 -0
  102. package/dist/chunks/picker-popover-1FHb1LQG.js +119 -0
  103. package/dist/chunks/picker-popover-1FHb1LQG.js.map +1 -0
  104. package/dist/chunks/popover-Bl5QYqnh.js +51 -0
  105. package/dist/chunks/popover-Bl5QYqnh.js.map +1 -0
  106. package/dist/chunks/{portal-context-BBbzDKmY.js → portal-context-CTatR2Z8.js} +14 -4
  107. package/dist/chunks/portal-context-CTatR2Z8.js.map +1 -0
  108. package/dist/chunks/{radio-CDDFpdtL.js → radio-C6GtzF_t.js} +38 -23
  109. package/dist/chunks/radio-C6GtzF_t.js.map +1 -0
  110. package/dist/chunks/range-popup-lGiZsG3s.js +160 -0
  111. package/dist/chunks/range-popup-lGiZsG3s.js.map +1 -0
  112. package/dist/chunks/reasoning-frame-C3HdQRRS.js +51 -0
  113. package/dist/chunks/reasoning-frame-C3HdQRRS.js.map +1 -0
  114. package/dist/chunks/release-art-ChiT4T2S.js +582 -0
  115. package/dist/chunks/release-art-ChiT4T2S.js.map +1 -0
  116. package/dist/chunks/rights-B68ocZuq.js +312 -0
  117. package/dist/chunks/rights-B68ocZuq.js.map +1 -0
  118. package/dist/chunks/{scroll-area-D8MD7Vpo.js → scroll-area-_Ljh4-bG.js} +11 -6
  119. package/dist/chunks/scroll-area-_Ljh4-bG.js.map +1 -0
  120. package/dist/chunks/section-CFBYhsUi.js +77 -0
  121. package/dist/chunks/section-CFBYhsUi.js.map +1 -0
  122. package/dist/chunks/section-header-DU1Q4Tdf.js +28 -0
  123. package/dist/chunks/section-header-DU1Q4Tdf.js.map +1 -0
  124. package/dist/chunks/segmented-D9i1avik.js +119 -0
  125. package/dist/chunks/segmented-D9i1avik.js.map +1 -0
  126. package/dist/chunks/select-BqjmQOqx.js +222 -0
  127. package/dist/chunks/select-BqjmQOqx.js.map +1 -0
  128. package/dist/chunks/{separator-D7TzNHmX.js → separator-BNWf6BBj.js} +13 -8
  129. package/dist/chunks/separator-BNWf6BBj.js.map +1 -0
  130. package/dist/chunks/sidebar-Dq7oGOje.js +664 -0
  131. package/dist/chunks/sidebar-Dq7oGOje.js.map +1 -0
  132. package/dist/chunks/{sidebar-menu-BN3jkTlK.js → sidebar-menu-QSSNu1jJ.js} +2 -2
  133. package/dist/chunks/{sidebar-menu-BN3jkTlK.js.map → sidebar-menu-QSSNu1jJ.js.map} +1 -1
  134. package/dist/chunks/{skeleton-Dcz57Zyp.js → skeleton-D-qk3mes.js} +3 -3
  135. package/dist/chunks/skeleton-D-qk3mes.js.map +1 -0
  136. package/dist/chunks/slider-CcE8GtuV.js +58 -0
  137. package/dist/chunks/slider-CcE8GtuV.js.map +1 -0
  138. package/dist/chunks/{status-dot-QJTF0Yv4.js → status-dot-CP6runiC.js} +4 -4
  139. package/dist/chunks/{status-dot-QJTF0Yv4.js.map → status-dot-CP6runiC.js.map} +1 -1
  140. package/dist/chunks/{styles-CVJU9t9v.js → styles-hkFkoBbi.js} +2 -2
  141. package/dist/chunks/{styles-CVJU9t9v.js.map → styles-hkFkoBbi.js.map} +1 -1
  142. package/dist/chunks/{swap-text-Dr0Irxz6.js → swap-text-SlUjrTlG.js} +3 -3
  143. package/dist/chunks/swap-text-SlUjrTlG.js.map +1 -0
  144. package/dist/chunks/switch-ngywMQdl.js +76 -0
  145. package/dist/chunks/switch-ngywMQdl.js.map +1 -0
  146. package/dist/chunks/table-CTK5E0J7.js +102 -0
  147. package/dist/chunks/table-CTK5E0J7.js.map +1 -0
  148. package/dist/chunks/tag-BGr6lTSV.js +100 -0
  149. package/dist/chunks/tag-BGr6lTSV.js.map +1 -0
  150. package/dist/chunks/{text-CIXH8rmT.js → text-DkKdTVUf.js} +9 -9
  151. package/dist/chunks/text-DkKdTVUf.js.map +1 -0
  152. package/dist/chunks/{textarea--4FRL3Pb.js → textarea-CO0HP6fK.js} +47 -36
  153. package/dist/chunks/textarea-CO0HP6fK.js.map +1 -0
  154. package/dist/chunks/timeseries-Ck-q0wWn.js +381 -0
  155. package/dist/chunks/timeseries-Ck-q0wWn.js.map +1 -0
  156. package/dist/chunks/toolbar-u0Gm7Q7-.js +61 -0
  157. package/dist/chunks/toolbar-u0Gm7Q7-.js.map +1 -0
  158. package/dist/chunks/tooltip-Tkm-urbi.js +202 -0
  159. package/dist/chunks/tooltip-Tkm-urbi.js.map +1 -0
  160. package/dist/chunks/tooltip-root-BC_RNNiP.js +70 -0
  161. package/dist/chunks/tooltip-root-BC_RNNiP.js.map +1 -0
  162. package/dist/chunks/truncated-d1afmUJT.js +33 -0
  163. package/dist/chunks/truncated-d1afmUJT.js.map +1 -0
  164. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js +28 -0
  165. package/dist/chunks/use-coarse-pointer-Ml5oE6oX.js.map +1 -0
  166. package/dist/chunks/use-hydrating-COtYVRo4.js +8 -0
  167. package/dist/chunks/use-hydrating-COtYVRo4.js.map +1 -0
  168. package/dist/chunks/use-scroll-fade-uc8mWSDX.js +30 -0
  169. package/dist/chunks/use-scroll-fade-uc8mWSDX.js.map +1 -0
  170. package/dist/chunks/{zh-CN-Bm6UPIbW.js → zh-CN-BlpsT6d_.js} +73 -39
  171. package/dist/chunks/zh-CN-BlpsT6d_.js.map +1 -0
  172. package/dist/components/agent-avatar.js +1 -1
  173. package/dist/components/app-frame.js +2 -2
  174. package/dist/components/avatar.js +1 -1
  175. package/dist/components/badge.js +1 -1
  176. package/dist/components/banner.js +1 -1
  177. package/dist/components/button-group.js +22 -22
  178. package/dist/components/button-group.js.map +1 -1
  179. package/dist/components/button.js +1 -1
  180. package/dist/components/calendar.js +1 -1
  181. package/dist/components/charts/bar.js +235 -160
  182. package/dist/components/charts/bar.js.map +1 -1
  183. package/dist/components/charts/donut.js +144 -99
  184. package/dist/components/charts/donut.js.map +1 -1
  185. package/dist/components/charts/gauge.js +61 -49
  186. package/dist/components/charts/gauge.js.map +1 -1
  187. package/dist/components/charts/heatmap.js +179 -70
  188. package/dist/components/charts/heatmap.js.map +1 -1
  189. package/dist/components/charts/sankey.js +144 -77
  190. package/dist/components/charts/sankey.js.map +1 -1
  191. package/dist/components/charts/sparkline.js +54 -38
  192. package/dist/components/charts/sparkline.js.map +1 -1
  193. package/dist/components/charts/timeseries.js +1 -1
  194. package/dist/components/charts.js +2 -2
  195. package/dist/components/checkbox.js +1 -1
  196. package/dist/components/code-block.js +3 -3
  197. package/dist/components/code.js +1 -1
  198. package/dist/components/collapsible.js +77 -1
  199. package/dist/components/collapsible.js.map +1 -0
  200. package/dist/components/combobox.js +1 -1
  201. package/dist/components/command-list.js +2 -2
  202. package/dist/components/command-palette.js +89 -66
  203. package/dist/components/command-palette.js.map +1 -1
  204. package/dist/components/copy-button.js +1 -1
  205. package/dist/components/data-table.js +1 -459
  206. package/dist/components/date-picker.js +162 -151
  207. package/dist/components/date-picker.js.map +1 -1
  208. package/dist/components/dialog.js +74 -63
  209. package/dist/components/dialog.js.map +1 -1
  210. package/dist/components/display-options.js +76 -64
  211. package/dist/components/display-options.js.map +1 -1
  212. package/dist/components/empty.js +1 -1
  213. package/dist/components/field.js +1 -1
  214. package/dist/components/figure.js +2 -2
  215. package/dist/components/filter-chip.js +36 -27
  216. package/dist/components/filter-chip.js.map +1 -1
  217. package/dist/components/filter-row.js +4 -4
  218. package/dist/components/filter-row.js.map +1 -1
  219. package/dist/components/flow.js +94 -63
  220. package/dist/components/flow.js.map +1 -1
  221. package/dist/components/heading.js +1 -1
  222. package/dist/components/icon-button.js +1 -1
  223. package/dist/components/icon.js +1 -1
  224. package/dist/components/input.js +176 -98
  225. package/dist/components/input.js.map +1 -1
  226. package/dist/components/kaeso/conversation.js +51 -46
  227. package/dist/components/kaeso/conversation.js.map +1 -1
  228. package/dist/components/kaeso/identity.js +1 -1
  229. package/dist/components/kaeso/moments.js +23 -20
  230. package/dist/components/kaeso/moments.js.map +1 -1
  231. package/dist/components/kaeso/rights.js +1 -1
  232. package/dist/components/kaeso/usage.js +90 -74
  233. package/dist/components/kaeso/usage.js.map +1 -1
  234. package/dist/components/kaeso.js +200 -187
  235. package/dist/components/kaeso.js.map +1 -1
  236. package/dist/components/kbd.js +1 -1
  237. package/dist/components/key-value.js +32 -47
  238. package/dist/components/key-value.js.map +1 -1
  239. package/dist/components/label.js +1 -25
  240. package/dist/components/layout.js +2 -2
  241. package/dist/components/layout.js.map +1 -1
  242. package/dist/components/link.js +1 -1
  243. package/dist/components/list.js +1 -1
  244. package/dist/components/loader.js +11 -10
  245. package/dist/components/loader.js.map +1 -1
  246. package/dist/components/logo.js +2 -2
  247. package/dist/components/markdown.js +1 -1
  248. package/dist/components/menu.js +2 -2
  249. package/dist/components/meter.js +1 -1
  250. package/dist/components/page-header.js +1 -1
  251. package/dist/components/pagination.js +1 -1
  252. package/dist/components/playground.js +644 -529
  253. package/dist/components/playground.js.map +1 -1
  254. package/dist/components/popover.js +4 -4
  255. package/dist/components/popover.js.map +1 -1
  256. package/dist/components/portal.js +1 -1
  257. package/dist/components/qr-code.js +2 -2
  258. package/dist/components/qr-code.js.map +1 -1
  259. package/dist/components/radio.js +1 -1
  260. package/dist/components/release-art.js +1 -1
  261. package/dist/components/scroll-area.js +1 -1
  262. package/dist/components/section.js +1 -1
  263. package/dist/components/segmented.js +1 -1
  264. package/dist/components/select.js +1 -1
  265. package/dist/components/separator.js +1 -1
  266. package/dist/components/settings.js +39 -46
  267. package/dist/components/settings.js.map +1 -1
  268. package/dist/components/sheet.js +10 -9
  269. package/dist/components/sheet.js.map +1 -1
  270. package/dist/components/sidebar.js +1 -1
  271. package/dist/components/skeleton.js +1 -1
  272. package/dist/components/slider.js +1 -1
  273. package/dist/components/stat.js +98 -84
  274. package/dist/components/stat.js.map +1 -1
  275. package/dist/components/status-dot.js +1 -1
  276. package/dist/components/surface.js +1 -1
  277. package/dist/components/swap-text.js +1 -1
  278. package/dist/components/switch.js +1 -1
  279. package/dist/components/table.js +1 -1
  280. package/dist/components/tabs.js +73 -55
  281. package/dist/components/tabs.js.map +1 -1
  282. package/dist/components/tag.js +1 -1
  283. package/dist/components/text.js +1 -1
  284. package/dist/components/theme-image.js +1 -1
  285. package/dist/components/theme-menu.js +5 -2
  286. package/dist/components/theme-menu.js.map +1 -1
  287. package/dist/components/theme-select.js +1 -1
  288. package/dist/components/thumbnail.js +35 -24
  289. package/dist/components/thumbnail.js.map +1 -1
  290. package/dist/components/timeline.js +51 -35
  291. package/dist/components/timeline.js.map +1 -1
  292. package/dist/components/toast.js +76 -66
  293. package/dist/components/toast.js.map +1 -1
  294. package/dist/components/toc.js +14 -8
  295. package/dist/components/toc.js.map +1 -1
  296. package/dist/components/toolbar.js +1 -1
  297. package/dist/components/tooltip.js +1 -1
  298. package/dist/components/visually-hidden.js +1 -1
  299. package/dist/i18n-provider.js +1 -1
  300. package/dist/index.js +100 -100
  301. package/dist/kaeso.css +605 -67
  302. package/dist/styles.css +1 -1
  303. package/dist/tailwind.css +1 -1
  304. package/dist/types/blocks/delete-resource/delete-resource.d.ts +2 -2
  305. package/dist/types/components/agent-avatar/agent-avatar.d.ts +24 -19
  306. package/dist/types/components/badge/badge.d.ts +3 -3
  307. package/dist/types/components/banner/banner.d.ts +3 -3
  308. package/dist/types/components/button/button.d.ts +2 -2
  309. package/dist/types/components/button-group/button-group.d.ts +1 -1
  310. package/dist/types/components/charts/domain.d.ts +11 -0
  311. package/dist/types/components/charts/marks.d.ts +1 -0
  312. package/dist/types/components/code/code.d.ts +3 -3
  313. package/dist/types/components/code-block/json-view.d.ts +2 -1
  314. package/dist/types/components/code-block/numbers.d.ts +1 -0
  315. package/dist/types/components/collapsible/collapsible.d.ts +2 -2
  316. package/dist/types/components/collapsible/disclosure.d.ts +2 -0
  317. package/dist/types/components/data-table/data-table.d.ts +6 -5
  318. package/dist/types/components/data-table/docs.d.ts +1 -0
  319. package/dist/types/components/data-table/time-columns.d.ts +1 -0
  320. package/dist/types/components/date-picker/focus-day.d.ts +1 -0
  321. package/dist/types/components/date-picker/iso-field.d.ts +8 -1
  322. package/dist/types/components/dialog/dialog.d.ts +7 -7
  323. package/dist/types/components/field/field.d.ts +1 -1
  324. package/dist/types/components/flow/flow.d.ts +1 -1
  325. package/dist/types/components/icon-button/icon-button.d.ts +1 -1
  326. package/dist/types/components/input/input-group.d.ts +2 -0
  327. package/dist/types/components/input/number-input.d.ts +4 -4
  328. package/dist/types/components/input/otp-input.d.ts +3 -3
  329. package/dist/types/components/kaeso/client-button.d.ts +2 -1
  330. package/dist/types/components/kaeso/provider-picker.d.ts +1 -0
  331. package/dist/types/components/kaeso/rights.d.ts +1 -1
  332. package/dist/types/components/kaeso/role-picker.d.ts +1 -0
  333. package/dist/types/components/key-value/key-value.d.ts +2 -2
  334. package/dist/types/components/layout/layout.d.ts +2 -2
  335. package/dist/types/components/link/link.d.ts +4 -4
  336. package/dist/types/components/list/list.d.ts +2 -2
  337. package/dist/types/components/menu/menu.d.ts +2 -1
  338. package/dist/types/components/menu/styles.d.ts +3 -3
  339. package/dist/types/components/meter/meter.d.ts +3 -3
  340. package/dist/types/components/page-header/page-header.d.ts +1 -1
  341. package/dist/types/components/pagination/pagination.d.ts +2 -2
  342. package/dist/types/components/playground/prompt-suggestions.d.ts +1 -0
  343. package/dist/types/components/playground/reasoning-frame.d.ts +14 -0
  344. package/dist/types/components/playground/reasoning.d.ts +1 -0
  345. package/dist/types/components/popover/popover.d.ts +1 -1
  346. package/dist/types/components/scroll-area/scroll-area.d.ts +2 -2
  347. package/dist/types/components/section/section-header.d.ts +6 -0
  348. package/dist/types/components/segmented/segmented.d.ts +1 -0
  349. package/dist/types/components/select/select.d.ts +1 -1
  350. package/dist/types/components/sheet/sheet.d.ts +3 -3
  351. package/dist/types/components/sidebar/sidebar.d.ts +1 -0
  352. package/dist/types/components/slider/slider.d.ts +2 -2
  353. package/dist/types/components/stat/stat.d.ts +1 -1
  354. package/dist/types/components/tabs/tabs.d.ts +6 -4
  355. package/dist/types/components/text/truncated.d.ts +7 -0
  356. package/dist/types/components/timeline/timeline.d.ts +5 -5
  357. package/dist/types/components/toc/toc.d.ts +1 -1
  358. package/dist/types/components/toolbar/toolbar.d.ts +1 -1
  359. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  360. package/dist/types/components/tooltip/trigger-props.d.ts +1 -0
  361. package/dist/types/hooks/use-coarse-pointer.d.ts +1 -0
  362. package/dist/types/hooks/use-hydrating.d.ts +1 -0
  363. package/dist/types/utils/arrow-focus.d.ts +4 -1
  364. package/dist/types/utils/cn.d.ts +33 -0
  365. package/dist/types/utils/portal-context.d.ts +7 -1
  366. package/dist/utils.js +2 -2
  367. package/foundations/accessibility.md +3 -2
  368. package/foundations/color.md +5 -1
  369. package/foundations/elevation.md +1 -0
  370. package/foundations/motion.md +1 -1
  371. package/foundations/shape.md +2 -2
  372. package/foundations/typography.md +12 -12
  373. package/package.json +2 -2
  374. package/dist/chunks/agent-avatar-0pdBTWkR.js +0 -171
  375. package/dist/chunks/agent-avatar-0pdBTWkR.js.map +0 -1
  376. package/dist/chunks/app-frame-DogGRmsu.js +0 -221
  377. package/dist/chunks/app-frame-DogGRmsu.js.map +0 -1
  378. package/dist/chunks/arrow-focus-BcySmwwU.js +0 -11
  379. package/dist/chunks/arrow-focus-BcySmwwU.js.map +0 -1
  380. package/dist/chunks/avatar-CWbdwbJv.js +0 -83
  381. package/dist/chunks/avatar-CWbdwbJv.js.map +0 -1
  382. package/dist/chunks/badge-C2KtxCLB.js +0 -26
  383. package/dist/chunks/badge-C2KtxCLB.js.map +0 -1
  384. package/dist/chunks/banner-BA2ALw9M.js +0 -85
  385. package/dist/chunks/banner-BA2ALw9M.js.map +0 -1
  386. package/dist/chunks/button-CzuxqawA.js +0 -164
  387. package/dist/chunks/button-CzuxqawA.js.map +0 -1
  388. package/dist/chunks/calendar-BWaf2MXc.js.map +0 -1
  389. package/dist/chunks/checkbox-CQjwCPkc.js +0 -126
  390. package/dist/chunks/checkbox-CQjwCPkc.js.map +0 -1
  391. package/dist/chunks/cn-Dj6sRgkF.js.map +0 -1
  392. package/dist/chunks/code-block-BZIe_B9l.js +0 -334
  393. package/dist/chunks/code-block-BZIe_B9l.js.map +0 -1
  394. package/dist/chunks/code-block-DdNPHEzI.js.map +0 -1
  395. package/dist/chunks/code-tqj0uhBL.js.map +0 -1
  396. package/dist/chunks/collapsible-CKrCX_T9.js +0 -87
  397. package/dist/chunks/collapsible-CKrCX_T9.js.map +0 -1
  398. package/dist/chunks/combobox-DjDI7SUC.js +0 -319
  399. package/dist/chunks/combobox-DjDI7SUC.js.map +0 -1
  400. package/dist/chunks/command-list-C2Y7V_lt.js +0 -418
  401. package/dist/chunks/command-list-C2Y7V_lt.js.map +0 -1
  402. package/dist/chunks/copy-button-FJvPJn72.js.map +0 -1
  403. package/dist/chunks/core-BYns5ytV.js +0 -472
  404. package/dist/chunks/core-BYns5ytV.js.map +0 -1
  405. package/dist/chunks/date-popup-CPA_zt6o.js +0 -35
  406. package/dist/chunks/date-popup-CPA_zt6o.js.map +0 -1
  407. package/dist/chunks/de-D_0mmG-k.js.map +0 -1
  408. package/dist/chunks/dialog-Cg9A_6SF.js.map +0 -1
  409. package/dist/chunks/field-TviMvYa2.js.map +0 -1
  410. package/dist/chunks/hidden-description-B2zSmLcn.js +0 -23
  411. package/dist/chunks/hidden-description-B2zSmLcn.js.map +0 -1
  412. package/dist/chunks/icon-button-CrdF_eMG.js.map +0 -1
  413. package/dist/chunks/input-2VJuj_M4.js.map +0 -1
  414. package/dist/chunks/input-group-DQ_4DoXg.js.map +0 -1
  415. package/dist/chunks/iso-field-B2rTwiBo.js +0 -33
  416. package/dist/chunks/iso-field-B2rTwiBo.js.map +0 -1
  417. package/dist/chunks/json-view-Dqd2TDkc.js +0 -175
  418. package/dist/chunks/json-view-Dqd2TDkc.js.map +0 -1
  419. package/dist/chunks/kbd-BF1vKXJf.js.map +0 -1
  420. package/dist/chunks/link-KWI7PevW.js.map +0 -1
  421. package/dist/chunks/list-M1csq-d4.js +0 -494
  422. package/dist/chunks/list-M1csq-d4.js.map +0 -1
  423. package/dist/chunks/markdown-BupwFOae.js +0 -313
  424. package/dist/chunks/markdown-BupwFOae.js.map +0 -1
  425. package/dist/chunks/menu-DEmBfdPm.js +0 -450
  426. package/dist/chunks/menu-DEmBfdPm.js.map +0 -1
  427. package/dist/chunks/meter-Bj4N3Xuh.js +0 -84
  428. package/dist/chunks/meter-Bj4N3Xuh.js.map +0 -1
  429. package/dist/chunks/nav-sheet-CzgIwgAm.js +0 -60
  430. package/dist/chunks/nav-sheet-CzgIwgAm.js.map +0 -1
  431. package/dist/chunks/nav-wordmark-_pjheAsZ.js.map +0 -1
  432. package/dist/chunks/page-header-DL2y2iZp.js +0 -41
  433. package/dist/chunks/page-header-DL2y2iZp.js.map +0 -1
  434. package/dist/chunks/pagination-Cn_qF4cg.js +0 -86
  435. package/dist/chunks/pagination-Cn_qF4cg.js.map +0 -1
  436. package/dist/chunks/picker-popover-BxyU1U9F.js +0 -106
  437. package/dist/chunks/picker-popover-BxyU1U9F.js.map +0 -1
  438. package/dist/chunks/popover-DNN4S47w.js +0 -50
  439. package/dist/chunks/popover-DNN4S47w.js.map +0 -1
  440. package/dist/chunks/portal-context-BBbzDKmY.js.map +0 -1
  441. package/dist/chunks/radio-CDDFpdtL.js.map +0 -1
  442. package/dist/chunks/range-popup-CRyWYUB1.js +0 -128
  443. package/dist/chunks/range-popup-CRyWYUB1.js.map +0 -1
  444. package/dist/chunks/release-art-ZwfFQImt.js +0 -561
  445. package/dist/chunks/release-art-ZwfFQImt.js.map +0 -1
  446. package/dist/chunks/rights-Cyp0Pzp-.js +0 -279
  447. package/dist/chunks/rights-Cyp0Pzp-.js.map +0 -1
  448. package/dist/chunks/scroll-area-D8MD7Vpo.js.map +0 -1
  449. package/dist/chunks/scroll-parent-WXvzQcUo.js +0 -14
  450. package/dist/chunks/scroll-parent-WXvzQcUo.js.map +0 -1
  451. package/dist/chunks/section-Ce1efbsP.js +0 -87
  452. package/dist/chunks/section-Ce1efbsP.js.map +0 -1
  453. package/dist/chunks/segmented-CErcoxwi.js +0 -114
  454. package/dist/chunks/segmented-CErcoxwi.js.map +0 -1
  455. package/dist/chunks/select-x4XVsdCI.js +0 -210
  456. package/dist/chunks/select-x4XVsdCI.js.map +0 -1
  457. package/dist/chunks/separator-D7TzNHmX.js.map +0 -1
  458. package/dist/chunks/sidebar-3r1ZRXlN.js +0 -621
  459. package/dist/chunks/sidebar-3r1ZRXlN.js.map +0 -1
  460. package/dist/chunks/skeleton-Dcz57Zyp.js.map +0 -1
  461. package/dist/chunks/slider-Ci83PGtj.js +0 -57
  462. package/dist/chunks/slider-Ci83PGtj.js.map +0 -1
  463. package/dist/chunks/swap-text-Dr0Irxz6.js.map +0 -1
  464. package/dist/chunks/switch-BNMq_kGt.js +0 -59
  465. package/dist/chunks/switch-BNMq_kGt.js.map +0 -1
  466. package/dist/chunks/table-BeOSKl_3.js +0 -84
  467. package/dist/chunks/table-BeOSKl_3.js.map +0 -1
  468. package/dist/chunks/tag-D_M1s2qS.js +0 -87
  469. package/dist/chunks/tag-D_M1s2qS.js.map +0 -1
  470. package/dist/chunks/text-CIXH8rmT.js.map +0 -1
  471. package/dist/chunks/textarea--4FRL3Pb.js.map +0 -1
  472. package/dist/chunks/timeseries-D1xjRXfk.js +0 -339
  473. package/dist/chunks/timeseries-D1xjRXfk.js.map +0 -1
  474. package/dist/chunks/toolbar-WA_oZgu-.js +0 -37
  475. package/dist/chunks/toolbar-WA_oZgu-.js.map +0 -1
  476. package/dist/chunks/tooltip-OcwO0VUT.js +0 -154
  477. package/dist/chunks/tooltip-OcwO0VUT.js.map +0 -1
  478. package/dist/chunks/tooltip-root-DzahJDVj.js +0 -60
  479. package/dist/chunks/tooltip-root-DzahJDVj.js.map +0 -1
  480. package/dist/chunks/zh-CN-Bm6UPIbW.js.map +0 -1
  481. package/dist/components/data-table.js.map +0 -1
  482. package/dist/components/label.js.map +0 -1
@@ -1,30 +1,31 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-Dj6sRgkF.js";
2
+ import { t as e } from "../chunks/cn-BjnOAUrA.js";
3
3
  import { i as t, r as n } from "../chunks/context-BELWW79w.js";
4
4
  import { t as r } from "../chunks/observe-resize-DhxhmoyB.js";
5
- import { r as i } from "../chunks/skeleton-Dcz57Zyp.js";
6
- import { t as a } from "../chunks/badge-C2KtxCLB.js";
7
- import { Sparkline as o } from "./charts/sparkline.js";
8
- import { Children as s, cloneElement as c, createContext as l, forwardRef as u, isValidElement as d, useContext as f, useLayoutEffect as p, useRef as m, useState as h } from "react";
9
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
5
+ import { r as i } from "../chunks/skeleton-D-qk3mes.js";
6
+ import { t as a } from "../chunks/truncated-d1afmUJT.js";
7
+ import { t as o } from "../chunks/badge-C0GC3B9X.js";
8
+ import { Sparkline as s } from "./charts/sparkline.js";
9
+ import { Children as c, cloneElement as l, createContext as u, forwardRef as d, isValidElement as f, useContext as p, useLayoutEffect as m, useRef as h, useState as g } from "react";
10
+ import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
10
11
  //#region src/components/stat/stat.tsx
11
- var y = { size: {
12
+ var b = { size: {
12
13
  md: { classes: "text-metric" },
13
14
  sm: { classes: "text-title" }
14
- } }, b = { size: "md" }, x = /* @__PURE__ */ u(function({ value: t, unit: n, delta: r, size: i = "md", className: o }, s) {
15
- return /* @__PURE__ */ v("div", {
15
+ } }, x = { size: "md" }, S = /* @__PURE__ */ d(function({ value: t, unit: n, delta: r, size: i = "md", className: a }, s) {
16
+ return /* @__PURE__ */ y("div", {
16
17
  ref: s,
17
- className: e("flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4", o),
18
+ className: e("flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4", a),
18
19
  children: [
19
- /* @__PURE__ */ _("span", {
20
- className: e("font-semibold text-fg tabular", y.size[i].classes),
20
+ /* @__PURE__ */ v("span", {
21
+ className: e("font-semibold text-fg tabular", b.size[i].classes),
21
22
  children: t
22
23
  }),
23
- n && /* @__PURE__ */ _("span", {
24
+ n && /* @__PURE__ */ v("span", {
24
25
  className: "text-body-lg font-regular text-fg-secondary",
25
26
  children: n
26
27
  }),
27
- r && /* @__PURE__ */ _(a, {
28
+ r && /* @__PURE__ */ v(o, {
28
29
  tone: r.tone ?? "neutral",
29
30
  className: "self-center",
30
31
  children: r.label
@@ -32,25 +33,25 @@ var y = { size: {
32
33
  ]
33
34
  });
34
35
  });
35
- process.env.NODE_ENV !== "production" && (x.displayName = "Stat");
36
- var S = /* @__PURE__ */ u(function({ children: t, className: n }, r) {
37
- return /* @__PURE__ */ _("div", {
36
+ process.env.NODE_ENV !== "production" && (S.displayName = "Stat");
37
+ var C = /* @__PURE__ */ d(function({ children: t, className: n }, r) {
38
+ return /* @__PURE__ */ v("div", {
38
39
  ref: r,
39
40
  className: e("flex flex-wrap items-baseline gap-x-48 gap-y-16", n),
40
41
  children: t
41
42
  });
42
43
  });
43
- process.env.NODE_ENV !== "production" && (S.displayName = "MetricRow");
44
- var C = (e, t, n) => {
44
+ process.env.NODE_ENV !== "production" && (C.displayName = "MetricRow");
45
+ var w = (e, t, n) => {
45
46
  let r = Math.abs(e) * 100, i = r >= 10 || r === 0 ? 0 : 1, a = new Intl.NumberFormat(n === "en" ? "en-US" : n, {
46
47
  minimumFractionDigits: i,
47
48
  maximumFractionDigits: i,
48
49
  useGrouping: !1
49
50
  }).format(i ? Number(r.toFixed(1)) : Math.round(r));
50
51
  return `${e > 0 ? "↑" : e < 0 ? "↓" : ""}${t("statTile.percent", "{value}%", { value: a })}`;
51
- }, w = [
52
+ }, T = [
52
53
  {
53
- classes: "text-title-lg",
54
+ classes: "text-metric",
54
55
  px: 28
55
56
  },
56
57
  {
@@ -61,78 +62,85 @@ var C = (e, t, n) => {
61
62
  classes: "text-title-sm",
62
63
  px: 17
63
64
  }
64
- ], T = /* @__PURE__ */ l(0), E = /* @__PURE__ */ u(function({ label: r, value: s, change: c, detail: l, trend: u, trendColor: d, loading: p, className: m }, h) {
65
- let y = t(), b = n(), x = c && c.value !== 0 ? c.value > 0 == ((c.better ?? "up") === "up") : void 0, S = w[f(T)] ?? w[0];
66
- return /* @__PURE__ */ v("div", {
67
- ref: h,
65
+ ], E = /* @__PURE__ */ u(0), D = /* @__PURE__ */ d(function({ label: r, value: c, change: l, detail: u, trend: d, trendColor: f, loading: m, className: h }, g) {
66
+ let b = t(), x = n(), S = l && l.value !== 0 ? l.value > 0 == ((l.better ?? "up") === "up") : void 0, C = T[p(E)] ?? T[0];
67
+ return /* @__PURE__ */ y("div", {
68
+ ref: g,
68
69
  role: "listitem",
69
- "aria-busy": p || void 0,
70
- className: e("flex min-w-0 flex-col bg-raised px-20 pt-16", u ? "pb-12" : "pb-16", m),
70
+ "aria-busy": m || void 0,
71
+ className: e("flex min-w-0 flex-col bg-raised px-20 pt-16", d ? "pb-12" : "pb-16", h),
71
72
  children: [
72
- /* @__PURE__ */ _("span", {
73
+ /* @__PURE__ */ v("span", {
73
74
  className: "text-small font-medium text-fg-secondary",
74
75
  children: r
75
76
  }),
76
- /* @__PURE__ */ _("span", {
77
+ /* @__PURE__ */ v("span", {
77
78
  className: "mt-6 flex h-34 min-w-0 items-center",
78
- children: /* @__PURE__ */ _("span", {
79
- "data-stat-value": S.px,
80
- className: e("max-w-full truncate font-semibold text-fg tabular", S.classes, p && "flex"),
81
- children: p ? /* @__PURE__ */ _(i, {
79
+ children: m ? /* @__PURE__ */ v("span", {
80
+ "data-stat-value": C.px,
81
+ className: e("flex max-w-full font-semibold text-fg tabular", C.classes),
82
+ children: /* @__PURE__ */ v(i, {
82
83
  shape: "line",
83
84
  className: "h-20 w-96"
84
- }) : s
85
+ })
86
+ }) : /* @__PURE__ */ v(a, {
87
+ "data-stat-value": C.px,
88
+ className: e("max-w-full font-semibold text-fg tabular", C.classes),
89
+ children: c
85
90
  })
86
91
  }),
87
- p ? /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _("span", {
92
+ m ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("span", {
88
93
  className: "mt-2 flex h-20 items-center",
89
- children: /* @__PURE__ */ _(i, {
94
+ children: /* @__PURE__ */ v(i, {
90
95
  shape: "line",
91
96
  className: "w-120"
92
97
  })
93
- }), u && /* @__PURE__ */ _("span", {
98
+ }), d && /* @__PURE__ */ v("span", {
94
99
  className: "mt-auto h-40 shrink-0 pt-8",
95
- children: /* @__PURE__ */ _(i, { className: "h-full w-full" })
96
- })] }) : /* @__PURE__ */ v("span", {
100
+ children: /* @__PURE__ */ v(i, { className: "h-full w-full" })
101
+ })] }) : /* @__PURE__ */ y("span", {
97
102
  className: "mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary",
98
- children: [c && Number.isFinite(c.value) && /* @__PURE__ */ _("span", {
103
+ children: [l && Number.isFinite(l.value) && /* @__PURE__ */ v("span", {
99
104
  className: "flex h-20 shrink-0 items-center",
100
- children: /* @__PURE__ */ _(a, {
101
- tone: x === void 0 ? "neutral" : x ? "success" : "danger",
105
+ children: /* @__PURE__ */ y(o, {
106
+ tone: S === void 0 ? "neutral" : S ? "success" : "danger",
102
107
  className: "shrink-0 tabular",
103
- children: C(c.value, y, b)
108
+ children: [w(l.value, b, x), S !== void 0 && /* @__PURE__ */ y("span", {
109
+ className: "sr-only",
110
+ children: [" ", S ? b("statTile.better", "better") : b("statTile.worse", "worse")]
111
+ })]
104
112
  })
105
- }), l && /* @__PURE__ */ _("span", {
113
+ }), u && /* @__PURE__ */ v("span", {
106
114
  className: "min-w-0",
107
- children: l
115
+ children: u
108
116
  })]
109
117
  }),
110
- u && !p && /* @__PURE__ */ _("span", {
118
+ d && !m && /* @__PURE__ */ v("span", {
111
119
  className: "mt-auto h-40 shrink-0 pt-8",
112
- children: u.length > 1 && /* @__PURE__ */ _(o, {
113
- values: u,
120
+ children: d.length > 1 && /* @__PURE__ */ v(s, {
121
+ values: d,
114
122
  fluid: !0,
115
- ...d ? { color: d } : {},
116
- "aria-label": typeof r == "string" ? y("statTile.trendPerDay", "{label} per day", { label: r }) : y("statTile.trend", "Trend")
123
+ ...f ? { color: f } : {},
124
+ "aria-label": typeof r == "string" ? b("statTile.trendPerDay", "{label} per day", { label: r }) : b("statTile.trend", "Trend")
117
125
  })
118
126
  })
119
127
  ]
120
128
  });
121
129
  });
122
- process.env.NODE_ENV !== "production" && (E.displayName = "StatTile");
123
- var D = {
130
+ process.env.NODE_ENV !== "production" && (D.displayName = "StatTile");
131
+ var O = {
124
132
  1: "grid-cols-1",
125
133
  2: "grid-cols-2"
126
- }, O = {
134
+ }, k = {
127
135
  3: "lg:grid-cols-3",
128
136
  4: "lg:grid-cols-4"
129
- }, k = { 2: "col-span-2" }, A = {
137
+ }, A = { 2: "col-span-2" }, j = {
130
138
  1: "lg:col-span-1",
131
139
  2: "lg:col-span-2",
132
140
  3: "lg:col-span-3",
133
141
  4: "lg:col-span-4"
134
- }, j = 40, M = 1, N = 1.03;
135
- function P(e, t) {
142
+ }, M = 40, N = 1, P = 1.03;
143
+ function F(e, t) {
136
144
  let n = e <= 2 ? Math.max(e, 1) : t ? Math.min(e, 4) : 2, r = e - 1;
137
145
  return {
138
146
  cols: n,
@@ -143,12 +151,12 @@ function P(e, t) {
143
151
  }[e % 4] ?? 1 : e % 2 == 1 ? 2 : 1)
144
152
  };
145
153
  }
146
- var F = 160;
147
- function I(e, t, n) {
148
- let r = w[0].px, i = ({ cols: n, spans: i }) => {
149
- let a = (t - (n - 1) * M) / n, o = i.map((e) => a * e + (e - 1) * M - j);
150
- return w.findIndex((t) => e.every((e, n) => e * t.px * N / r <= (o[n] ?? 0)));
151
- }, a = P(e.length, n), o = a.cols > 2 && (t - (a.cols - 1) * M) / a.cols < F, s = i(o ? P(e.length, !1) : a);
154
+ var I = 160;
155
+ function L(e, t, n) {
156
+ let r = T[0].px, i = ({ cols: n, spans: i }) => {
157
+ let a = (t - (n - 1) * N) / n, o = i.map((e) => a * e + (e - 1) * N - M);
158
+ return T.findIndex((t) => e.every((e, n) => e * t.px * P / r <= (o[n] ?? 0)));
159
+ }, a = F(e.length, n), o = a.cols > 2 && (t - (a.cols - 1) * N) / a.cols < I, s = i(o ? F(e.length, !1) : a);
152
160
  if (s >= 0 || e.length < 2) return {
153
161
  step: Math.max(s, 0),
154
162
  single: !1,
@@ -159,50 +167,56 @@ function I(e, t, n) {
159
167
  spans: e.map(() => 1)
160
168
  });
161
169
  return {
162
- step: c >= 0 ? c : w.length - 1,
170
+ step: c >= 0 ? c : T.length - 1,
163
171
  single: !0,
164
172
  two: !1
165
173
  };
166
174
  }
167
- var L = /* @__PURE__ */ u(function({ children: t, className: n, ...i }, a) {
168
- let o = s.toArray(t).filter(d), l = o.length, u = m(null), [f, g] = h({
175
+ var R = /* @__PURE__ */ d(function({ children: t, className: n, ...i }, a) {
176
+ let o = c.toArray(t).filter(f), s = o.length, u = h(null), [d, p] = g({
169
177
  step: 0,
170
178
  single: !1,
171
179
  two: !1
172
- }), v = m(() => {});
173
- v.current = () => {
180
+ }), _ = h(() => {}), y = h(0);
181
+ _.current = () => {
174
182
  let e = u.current;
175
183
  if (!e || !e.clientWidth) return;
176
- let t = [...e.querySelectorAll("[data-stat-value]")].map((e) => e.scrollWidth * w[0].px / (Number(e.dataset.statValue) || w[0].px)), n = typeof window.matchMedia == "function" && window.matchMedia("(min-width: 1024px)").matches, r = I(t, e.clientWidth, n);
177
- g((e) => e.step === r.step && e.single === r.single && e.two === r.two ? e : r);
178
- }, p(() => v.current()), p(() => {
184
+ let t = [...e.querySelectorAll("[data-stat-value]")].map((e) => e.scrollWidth * T[0].px / (Number(e.dataset.statValue) || T[0].px)), n = typeof window.matchMedia == "function" && window.matchMedia("(min-width: 1024px)").matches, r = L(t, e.clientWidth, n), i = y.current === e.clientWidth;
185
+ y.current = e.clientWidth, p((e) => {
186
+ let t = i && r.step < e.step ? {
187
+ ...r,
188
+ step: e.step
189
+ } : r;
190
+ return e.step === t.step && e.single === t.single && e.two === t.two ? e : t;
191
+ });
192
+ }, m(() => _.current()), m(() => {
179
193
  let e = u.current;
180
194
  if (!e || typeof ResizeObserver > "u") return;
181
- let t = r([e, ...e.querySelectorAll("[data-stat-value]")], () => v.current());
182
- return document.fonts?.ready.then(() => v.current()), t;
183
- }, [l]);
184
- let y = P(l, !1), b = P(l, !0), x = (t) => {
185
- let n = y.spans[t] ?? 1, r = b.spans[t] ?? 1;
186
- return e(k[n], !f.two && r !== n && A[r]) || void 0;
195
+ let t = r([e, ...e.querySelectorAll("[data-stat-value]")], () => _.current());
196
+ return document.fonts?.ready.then(() => _.current()), t;
197
+ }, [s]);
198
+ let b = F(s, !1), x = F(s, !0), S = (t) => {
199
+ let n = b.spans[t] ?? 1, r = x.spans[t] ?? 1;
200
+ return e(A[n], !d.two && r !== n && j[r]) || void 0;
187
201
  };
188
- return /* @__PURE__ */ _("div", {
202
+ return /* @__PURE__ */ v("div", {
189
203
  ref: (e) => {
190
204
  u.current = e, typeof a == "function" ? a(e) : a && (a.current = e);
191
205
  },
192
206
  role: "list",
193
- className: e("grid gap-1 overflow-hidden rounded-group bg-line-subtle shadow-xs", f.single ? "grid-cols-1" : f.two ? "grid-cols-2" : e(D[y.cols], b.cols !== y.cols && O[b.cols]), n),
207
+ className: e("grid gap-1 overflow-hidden rounded-group bg-line shadow-xs forced-line", d.single ? "grid-cols-1" : d.two ? "grid-cols-2" : e(O[b.cols], x.cols !== b.cols && k[x.cols]), n),
194
208
  ...i,
195
- children: /* @__PURE__ */ _(T.Provider, {
196
- value: f.step,
209
+ children: /* @__PURE__ */ v(E.Provider, {
210
+ value: d.step,
197
211
  children: o.map((t, n) => {
198
- let r = f.single ? void 0 : x(n);
199
- return r ? c(t, { className: e(t.props.className, r) }) : t;
212
+ let r = d.single ? void 0 : S(n);
213
+ return r ? l(t, { className: e(t.props.className, r) }) : t;
200
214
  })
201
215
  })
202
216
  });
203
217
  });
204
- process.env.NODE_ENV !== "production" && (L.displayName = "StatGrid");
218
+ process.env.NODE_ENV !== "production" && (R.displayName = "StatGrid");
205
219
  //#endregion
206
- export { b as KAESO_STAT_DEFAULT_VARIANTS, y as KAESO_STAT_VARIANTS, S as MetricRow, w as STAT_VALUE_STEPS, x as Stat, L as StatGrid, E as StatTile, I as statGridFit, P as statGridLayout };
220
+ export { x as KAESO_STAT_DEFAULT_VARIANTS, b as KAESO_STAT_VARIANTS, C as MetricRow, T as STAT_VALUE_STEPS, S as Stat, R as StatGrid, D as StatTile, L as statGridFit, F as statGridLayout };
207
221
 
208
222
  //# sourceMappingURL=stat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stat.js","names":["_Fragment","cn","useUiText","useLocale","observeResize","Skeleton","Badge","Fragment$1","KAESO_STAT_VARIANTS","KAESO_STAT_DEFAULT_VARIANTS","Stat","className","size","value","unit","delta","MetricRow","changeLabel","pct","v","digits","shown","locale","STAT_VALUE_STEPS","StatStepContext","StatTile","t","good","change","step","useContext","loading","trend","label","detail","Sparkline","trendColor","GRID_COLS","LG_GRID_COLS","COL_SPAN","LG_COL_SPAN","TILE_PADDING","GAP","SLACK","statGridLayout","cols","n","wide","last","MIN_TILE","statGridFit","base","at","col","width","rooms","spans","s","needs","need","st","i","own","two","single","StatGrid","props","tiles","Children","children","isValidElement","grid","useRef","fit","setFit","useState","measure","el","next","f","useLayoutEffect","stop","narrow","span","small","large","ref","extra","cloneElement"],"sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Sparkline } from \"../charts/sparkline.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { useLocale, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STAT_VARIANTS = {\n size: {\n md: { classes: \"text-metric\" },\n sm: { classes: \"text-title\" },\n },\n} as const;\nexport const KAESO_STAT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface StatProps {\n value: ReactNode;\n unit?: ReactNode | undefined;\n delta?: { label: string; tone?: \"success\" | \"danger\" | \"neutral\" | undefined } | undefined;\n size?: keyof typeof KAESO_STAT_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport const Stat = /* @__PURE__ */ forwardRef<HTMLDivElement, StatProps>(function Stat({ value, unit, delta, size = \"md\", className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4\", className)}>\n <span className={cn(\"font-semibold text-fg tabular\", KAESO_STAT_VARIANTS.size[size].classes)}>{value}</span>\n {unit && <span className=\"text-body-lg font-regular text-fg-secondary\">{unit}</span>}\n {delta && (\n <Badge tone={delta.tone ?? \"neutral\"} className=\"self-center\">\n {delta.label}\n </Badge>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Stat.displayName = \"Stat\";\n\nexport const MetricRow = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined }>(function MetricRow({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-baseline gap-x-48 gap-y-16\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MetricRow.displayName = \"MetricRow\";\n\nexport interface StatTileProps {\n label: ReactNode;\n value: ReactNode;\n change?: { value: number; better?: \"up\" | \"down\" | undefined } | undefined;\n detail?: ReactNode | undefined;\n trend?: number[] | undefined;\n trendColor?: string | undefined;\n loading?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst changeLabel = (v: number, t: UiText, locale: string) => {\n const pct = Math.abs(v) * 100;\n const digits = pct >= 10 || pct === 0 ? 0 : 1;\n const shown = new Intl.NumberFormat(locale === \"en\" ? \"en-US\" : locale, {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n useGrouping: false,\n }).format(digits ? Number(pct.toFixed(1)) : Math.round(pct));\n return `${v > 0 ? \"↑\" : v < 0 ? \"↓\" : \"\"}${t(\"statTile.percent\", \"{value}%\", { value: shown })}`;\n};\n\nexport const STAT_VALUE_STEPS = [\n { classes: \"text-title-lg\", px: 28 },\n { classes: \"text-title\", px: 20 },\n { classes: \"text-title-sm\", px: 17 },\n] as const;\n\nconst StatStepContext = /* @__PURE__ */ createContext(0);\n\nexport const StatTile = /* @__PURE__ */ forwardRef<HTMLDivElement, StatTileProps>(function StatTile(\n { label, value, change, detail, trend, trendColor, loading, className },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const good = change && change.value !== 0 ? change.value > 0 === ((change.better ?? \"up\") === \"up\") : undefined;\n const step = STAT_VALUE_STEPS[useContext(StatStepContext)] ?? STAT_VALUE_STEPS[0];\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-busy={loading || undefined}\n className={cn(\"flex min-w-0 flex-col bg-raised px-20 pt-16\", trend ? \"pb-12\" : \"pb-16\", className)}\n >\n <span className=\"text-small font-medium text-fg-secondary\">{label}</span>\n <span className=\"mt-6 flex h-34 min-w-0 items-center\">\n <span data-stat-value={step.px} className={cn(\"max-w-full truncate font-semibold text-fg tabular\", step.classes, loading && \"flex\")}>\n {loading ? <Skeleton shape=\"line\" className=\"h-20 w-96\" /> : value}\n </span>\n </span>\n {loading ? (\n <>\n <span className=\"mt-2 flex h-20 items-center\">\n <Skeleton shape=\"line\" className=\"w-120\" />\n </span>\n {trend && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n <Skeleton className=\"h-full w-full\" />\n </span>\n )}\n </>\n ) : (\n <span className=\"mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary\">\n {change && Number.isFinite(change.value) && (\n <span className=\"flex h-20 shrink-0 items-center\">\n <Badge tone={good === undefined ? \"neutral\" : good ? \"success\" : \"danger\"} className=\"shrink-0 tabular\">\n {changeLabel(change.value, t, locale)}\n </Badge>\n </span>\n )}\n {detail && <span className=\"min-w-0\">{detail}</span>}\n </span>\n )}\n {trend && !loading && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n {trend.length > 1 && (\n <Sparkline\n values={trend}\n fluid\n {...(trendColor ? { color: trendColor } : {})}\n aria-label={typeof label === \"string\" ? t(\"statTile.trendPerDay\", \"{label} per day\", { label }) : t(\"statTile.trend\", \"Trend\")}\n />\n )}\n </span>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StatTile.displayName = \"StatTile\";\n\nconst GRID_COLS: Record<number, string> = { 1: \"grid-cols-1\", 2: \"grid-cols-2\" };\nconst LG_GRID_COLS: Record<number, string> = { 3: \"lg:grid-cols-3\", 4: \"lg:grid-cols-4\" };\nconst COL_SPAN: Record<number, string> = { 2: \"col-span-2\" };\nconst LG_COL_SPAN: Record<number, string> = { 1: \"lg:col-span-1\", 2: \"lg:col-span-2\", 3: \"lg:col-span-3\", 4: \"lg:col-span-4\" };\n\nconst TILE_PADDING = 40;\nconst GAP = 1;\nconst SLACK = 1.03;\n\nexport function statGridLayout(n: number, wide: boolean): { cols: number; spans: number[] } {\n const cols = n <= 2 ? Math.max(n, 1) : wide ? Math.min(n, 4) : 2;\n const last = n - 1;\n const spans = Array.from({ length: n }, (_, i) => {\n if (i !== last || n < 3) return 1;\n if (n === 3) return wide ? 1 : 2;\n return wide ? ({ 1: 4, 2: 3, 3: 2 }[n % 4] ?? 1) : n % 2 === 1 ? 2 : 1;\n });\n return { cols, spans };\n}\n\nconst MIN_TILE = 160;\n\nexport function statGridFit(needs: number[], width: number, wide: boolean): { step: number; single: boolean; two: boolean } {\n const base = STAT_VALUE_STEPS[0].px;\n const at = ({ cols, spans }: { cols: number; spans: number[] }) => {\n const col = (width - (cols - 1) * GAP) / cols;\n const rooms = spans.map((s) => col * s + (s - 1) * GAP - TILE_PADDING);\n return STAT_VALUE_STEPS.findIndex((st) => needs.every((need, i) => (need * st.px * SLACK) / base <= (rooms[i] ?? 0)));\n };\n const own = statGridLayout(needs.length, wide);\n const two = own.cols > 2 && (width - (own.cols - 1) * GAP) / own.cols < MIN_TILE;\n const step = at(two ? statGridLayout(needs.length, false) : own);\n if (step >= 0 || needs.length < 2) return { step: Math.max(step, 0), single: false, two };\n const single = at({ cols: 1, spans: needs.map(() => 1) });\n return { step: single >= 0 ? single : STAT_VALUE_STEPS.length - 1, single: true, two: false };\n}\n\nexport const StatGrid = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; \"aria-label\"?: string | undefined; className?: string | undefined }>(\n function StatGrid({ children, className, ...props }, ref) {\n const tiles = Children.toArray(children).filter(isValidElement) as ReactElement<{ className?: string | undefined }>[];\n const n = tiles.length;\n const grid = useRef<HTMLDivElement | null>(null);\n const [fit, setFit] = useState({ step: 0, single: false, two: false });\n const measure = useRef(() => {});\n measure.current = () => {\n const el = grid.current;\n if (!el || !el.clientWidth) return;\n const values = [...el.querySelectorAll<HTMLElement>(\"[data-stat-value]\")];\n const needs = values.map((v) => (v.scrollWidth * STAT_VALUE_STEPS[0].px) / (Number(v.dataset.statValue) || STAT_VALUE_STEPS[0].px));\n const wide = typeof window.matchMedia === \"function\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n const next = statGridFit(needs, el.clientWidth, wide);\n setFit((f) => (f.step === next.step && f.single === next.single && f.two === next.two ? f : next));\n };\n useLayoutEffect(() => measure.current());\n useLayoutEffect(() => {\n const el = grid.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const stop = observeResize([el, ...el.querySelectorAll(\"[data-stat-value]\")], () => measure.current());\n void document.fonts?.ready.then(() => measure.current());\n return stop;\n }, [n]);\n const narrow = statGridLayout(n, false);\n const wide = statGridLayout(n, true);\n const span = (i: number) => {\n const small = narrow.spans[i] ?? 1;\n const large = wide.spans[i] ?? 1;\n return cn(COL_SPAN[small], !fit.two && large !== small && LG_COL_SPAN[large]) || undefined;\n };\n return (\n <div\n ref={(e) => {\n grid.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"list\"\n className={cn(\n \"grid gap-1 overflow-hidden rounded-group bg-line-subtle shadow-xs\",\n fit.single ? \"grid-cols-1\" : fit.two ? \"grid-cols-2\" : cn(GRID_COLS[narrow.cols], wide.cols !== narrow.cols && LG_GRID_COLS[wide.cols]),\n className,\n )}\n {...props}\n >\n <StatStepContext.Provider value={fit.step}>\n {tiles.map((t, i) => {\n const extra = fit.single ? undefined : span(i);\n return extra ? cloneElement(t, { className: cn(t.props.className, extra) }) : t;\n })}\n </StatStepContext.Provider>\n </div>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") StatGrid.displayName = \"StatGrid\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"stat.js","names":["_Fragment","cn","useUiText","useLocale","observeResize","Skeleton","TruncatedText","Badge","Fragment$1","KAESO_STAT_VARIANTS","KAESO_STAT_DEFAULT_VARIANTS","Stat","className","size","value","unit","delta","MetricRow","changeLabel","pct","v","digits","shown","locale","STAT_VALUE_STEPS","StatStepContext","StatTile","t","good","change","step","useContext","loading","trend","label","detail","Sparkline","trendColor","GRID_COLS","LG_GRID_COLS","COL_SPAN","LG_COL_SPAN","TILE_PADDING","GAP","SLACK","statGridLayout","cols","n","wide","last","MIN_TILE","statGridFit","base","at","col","width","rooms","spans","s","needs","need","st","i","own","two","single","StatGrid","props","tiles","Children","children","isValidElement","grid","useRef","fit","setFit","useState","measure","measuredAt","el","fitted","sameWidth","next","f","useLayoutEffect","stop","narrow","span","small","large","ref","extra","cloneElement"],"sources":["../../src/components/stat/stat.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { Badge } from \"../badge/badge.js\";\nimport { Sparkline } from \"../charts/sparkline.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\nimport { useLocale, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport const KAESO_STAT_VARIANTS = {\n size: {\n md: { classes: \"text-metric\" },\n sm: { classes: \"text-title\" },\n },\n} as const;\nexport const KAESO_STAT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface StatProps {\n value: ReactNode;\n unit?: ReactNode | undefined;\n delta?: { label: string; tone?: \"success\" | \"danger\" | \"neutral\" | undefined } | undefined;\n size?: keyof typeof KAESO_STAT_VARIANTS.size | undefined;\n className?: string | undefined;\n}\n\nexport const Stat = /* @__PURE__ */ forwardRef<HTMLDivElement, StatProps>(function Stat({ value, unit, delta, size = \"md\", className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex min-w-0 flex-wrap items-baseline gap-x-8 gap-y-4\", className)}>\n <span className={cn(\"font-semibold text-fg tabular\", KAESO_STAT_VARIANTS.size[size].classes)}>{value}</span>\n {unit && <span className=\"text-body-lg font-regular text-fg-secondary\">{unit}</span>}\n {delta && (\n <Badge tone={delta.tone ?? \"neutral\"} className=\"self-center\">\n {delta.label}\n </Badge>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Stat.displayName = \"Stat\";\n\nexport const MetricRow = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; className?: string | undefined }>(function MetricRow({ children, className }, ref) {\n return (\n <div ref={ref} className={cn(\"flex flex-wrap items-baseline gap-x-48 gap-y-16\", className)}>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") MetricRow.displayName = \"MetricRow\";\n\nexport interface StatTileProps {\n label: ReactNode;\n value: ReactNode;\n change?: { value: number; better?: \"up\" | \"down\" | undefined } | undefined;\n detail?: ReactNode | undefined;\n trend?: number[] | undefined;\n trendColor?: string | undefined;\n loading?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst changeLabel = (v: number, t: UiText, locale: string) => {\n const pct = Math.abs(v) * 100;\n const digits = pct >= 10 || pct === 0 ? 0 : 1;\n const shown = new Intl.NumberFormat(locale === \"en\" ? \"en-US\" : locale, {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n useGrouping: false,\n }).format(digits ? Number(pct.toFixed(1)) : Math.round(pct));\n return `${v > 0 ? \"↑\" : v < 0 ? \"↓\" : \"\"}${t(\"statTile.percent\", \"{value}%\", { value: shown })}`;\n};\n\nexport const STAT_VALUE_STEPS = [\n { classes: \"text-metric\", px: 28 },\n { classes: \"text-title\", px: 20 },\n { classes: \"text-title-sm\", px: 17 },\n] as const;\n\nconst StatStepContext = /* @__PURE__ */ createContext(0);\n\nexport const StatTile = /* @__PURE__ */ forwardRef<HTMLDivElement, StatTileProps>(function StatTile(\n { label, value, change, detail, trend, trendColor, loading, className },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const good = change && change.value !== 0 ? change.value > 0 === ((change.better ?? \"up\") === \"up\") : undefined;\n const step = STAT_VALUE_STEPS[useContext(StatStepContext)] ?? STAT_VALUE_STEPS[0];\n return (\n <div\n ref={ref}\n role=\"listitem\"\n aria-busy={loading || undefined}\n className={cn(\"flex min-w-0 flex-col bg-raised px-20 pt-16\", trend ? \"pb-12\" : \"pb-16\", className)}\n >\n <span className=\"text-small font-medium text-fg-secondary\">{label}</span>\n <span className=\"mt-6 flex h-34 min-w-0 items-center\">\n {loading ? (\n <span data-stat-value={step.px} className={cn(\"flex max-w-full font-semibold text-fg tabular\", step.classes)}>\n <Skeleton shape=\"line\" className=\"h-20 w-96\" />\n </span>\n ) : (\n <TruncatedText data-stat-value={step.px} className={cn(\"max-w-full font-semibold text-fg tabular\", step.classes)}>\n {value}\n </TruncatedText>\n )}\n </span>\n {loading ? (\n <>\n <span className=\"mt-2 flex h-20 items-center\">\n <Skeleton shape=\"line\" className=\"w-120\" />\n </span>\n {trend && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n <Skeleton className=\"h-full w-full\" />\n </span>\n )}\n </>\n ) : (\n <span className=\"mt-2 flex min-h-20 min-w-0 flex-wrap items-center gap-x-6 gap-y-2 text-small text-fg-tertiary\">\n {change && Number.isFinite(change.value) && (\n <span className=\"flex h-20 shrink-0 items-center\">\n <Badge tone={good === undefined ? \"neutral\" : good ? \"success\" : \"danger\"} className=\"shrink-0 tabular\">\n {changeLabel(change.value, t, locale)}\n {good !== undefined && <span className=\"sr-only\"> {good ? t(\"statTile.better\", \"better\") : t(\"statTile.worse\", \"worse\")}</span>}\n </Badge>\n </span>\n )}\n {detail && <span className=\"min-w-0\">{detail}</span>}\n </span>\n )}\n {trend && !loading && (\n <span className=\"mt-auto h-40 shrink-0 pt-8\">\n {trend.length > 1 && (\n <Sparkline\n values={trend}\n fluid\n {...(trendColor ? { color: trendColor } : {})}\n aria-label={typeof label === \"string\" ? t(\"statTile.trendPerDay\", \"{label} per day\", { label }) : t(\"statTile.trend\", \"Trend\")}\n />\n )}\n </span>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") StatTile.displayName = \"StatTile\";\n\nconst GRID_COLS: Record<number, string> = { 1: \"grid-cols-1\", 2: \"grid-cols-2\" };\nconst LG_GRID_COLS: Record<number, string> = { 3: \"lg:grid-cols-3\", 4: \"lg:grid-cols-4\" };\nconst COL_SPAN: Record<number, string> = { 2: \"col-span-2\" };\nconst LG_COL_SPAN: Record<number, string> = { 1: \"lg:col-span-1\", 2: \"lg:col-span-2\", 3: \"lg:col-span-3\", 4: \"lg:col-span-4\" };\n\nconst TILE_PADDING = 40;\nconst GAP = 1;\nconst SLACK = 1.03;\n\nexport function statGridLayout(n: number, wide: boolean): { cols: number; spans: number[] } {\n const cols = n <= 2 ? Math.max(n, 1) : wide ? Math.min(n, 4) : 2;\n const last = n - 1;\n const spans = Array.from({ length: n }, (_, i) => {\n if (i !== last || n < 3) return 1;\n if (n === 3) return wide ? 1 : 2;\n return wide ? ({ 1: 4, 2: 3, 3: 2 }[n % 4] ?? 1) : n % 2 === 1 ? 2 : 1;\n });\n return { cols, spans };\n}\n\nconst MIN_TILE = 160;\n\nexport function statGridFit(needs: number[], width: number, wide: boolean): { step: number; single: boolean; two: boolean } {\n const base = STAT_VALUE_STEPS[0].px;\n const at = ({ cols, spans }: { cols: number; spans: number[] }) => {\n const col = (width - (cols - 1) * GAP) / cols;\n const rooms = spans.map((s) => col * s + (s - 1) * GAP - TILE_PADDING);\n return STAT_VALUE_STEPS.findIndex((st) => needs.every((need, i) => (need * st.px * SLACK) / base <= (rooms[i] ?? 0)));\n };\n const own = statGridLayout(needs.length, wide);\n const two = own.cols > 2 && (width - (own.cols - 1) * GAP) / own.cols < MIN_TILE;\n const step = at(two ? statGridLayout(needs.length, false) : own);\n if (step >= 0 || needs.length < 2) return { step: Math.max(step, 0), single: false, two };\n const single = at({ cols: 1, spans: needs.map(() => 1) });\n return { step: single >= 0 ? single : STAT_VALUE_STEPS.length - 1, single: true, two: false };\n}\n\nexport const StatGrid = /* @__PURE__ */ forwardRef<HTMLDivElement, { children: ReactNode; \"aria-label\"?: string | undefined; className?: string | undefined }>(\n function StatGrid({ children, className, ...props }, ref) {\n const tiles = Children.toArray(children).filter(isValidElement) as ReactElement<{ className?: string | undefined }>[];\n const n = tiles.length;\n const grid = useRef<HTMLDivElement | null>(null);\n const [fit, setFit] = useState({ step: 0, single: false, two: false });\n const measure = useRef(() => {});\n const measuredAt = useRef(0);\n measure.current = () => {\n const el = grid.current;\n if (!el || !el.clientWidth) return;\n const values = [...el.querySelectorAll<HTMLElement>(\"[data-stat-value]\")];\n const needs = values.map((v) => (v.scrollWidth * STAT_VALUE_STEPS[0].px) / (Number(v.dataset.statValue) || STAT_VALUE_STEPS[0].px));\n const wide = typeof window.matchMedia === \"function\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n const fitted = statGridFit(needs, el.clientWidth, wide);\n const sameWidth = measuredAt.current === el.clientWidth;\n measuredAt.current = el.clientWidth;\n setFit((f) => {\n // At the same width, live values only ever step the size down, so a digit that comes and goes doesn't make every tile jump.\n const next = sameWidth && fitted.step < f.step ? { ...fitted, step: f.step } : fitted;\n return f.step === next.step && f.single === next.single && f.two === next.two ? f : next;\n });\n };\n useLayoutEffect(() => measure.current());\n useLayoutEffect(() => {\n const el = grid.current;\n if (!el || typeof ResizeObserver === \"undefined\") return;\n const stop = observeResize([el, ...el.querySelectorAll(\"[data-stat-value]\")], () => measure.current());\n void document.fonts?.ready.then(() => measure.current());\n return stop;\n }, [n]);\n const narrow = statGridLayout(n, false);\n const wide = statGridLayout(n, true);\n const span = (i: number) => {\n const small = narrow.spans[i] ?? 1;\n const large = wide.spans[i] ?? 1;\n return cn(COL_SPAN[small], !fit.two && large !== small && LG_COL_SPAN[large]) || undefined;\n };\n return (\n <div\n ref={(e) => {\n grid.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"list\"\n className={cn(\n \"grid gap-1 overflow-hidden rounded-group bg-line shadow-xs forced-line\",\n fit.single ? \"grid-cols-1\" : fit.two ? \"grid-cols-2\" : cn(GRID_COLS[narrow.cols], wide.cols !== narrow.cols && LG_GRID_COLS[wide.cols]),\n className,\n )}\n {...props}\n >\n <StatStepContext.Provider value={fit.step}>\n {tiles.map((t, i) => {\n const extra = fit.single ? undefined : span(i);\n return extra ? cloneElement(t, { className: cn(t.props.className, extra) }) : t;\n })}\n </StatStepContext.Provider>\n </div>\n );\n },\n);\nif (process.env.NODE_ENV !== \"production\") StatGrid.displayName = \"StatGrid\";\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_STATUS_DOT_DEFAULT_VARIANTS, n as KAESO_STATUS_DOT_VARIANTS, r as Status, i as StatusDot } from "../chunks/status-dot-QJTF0Yv4.js";
2
+ export { t as KAESO_STATUS_DOT_DEFAULT_VARIANTS, n as KAESO_STATUS_DOT_VARIANTS, r as Status, i as StatusDot } from "../chunks/status-dot-CP6runiC.js";
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-Dj6sRgkF.js";
2
+ import { t as e } from "../chunks/cn-BjnOAUrA.js";
3
3
  import { forwardRef as t } from "react";
4
4
  import { jsx as n } from "react/jsx-runtime";
5
5
  //#region src/components/surface/surface.tsx
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_SWAP_TEXT_DEFAULT_VARIANTS, n as KAESO_SWAP_TEXT_VARIANTS, r as SwapText } from "../chunks/swap-text-Dr0Irxz6.js";
2
+ export { t as KAESO_SWAP_TEXT_DEFAULT_VARIANTS, n as KAESO_SWAP_TEXT_VARIANTS, r as SwapText } from "../chunks/swap-text-SlUjrTlG.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_SWITCH_DEFAULT_VARIANTS, n as KAESO_SWITCH_VARIANTS, r as Switch } from "../chunks/switch-BNMq_kGt.js";
2
+ export { t as KAESO_SWITCH_DEFAULT_VARIANTS, n as KAESO_SWITCH_VARIANTS, r as Switch } from "../chunks/switch-ngywMQdl.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as KAESO_TABLE_DEFAULT_VARIANTS, n as KAESO_TABLE_VARIANTS, r as Table } from "../chunks/table-BeOSKl_3.js";
2
+ export { t as KAESO_TABLE_DEFAULT_VARIANTS, n as KAESO_TABLE_VARIANTS, r as Table } from "../chunks/table-CTK5E0J7.js";
@@ -1,95 +1,113 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/cn-Dj6sRgkF.js";
3
- import { t } from "../chunks/icon-D7ja-_Yk.js";
4
- import { createContext as n, forwardRef as r, useContext as i } from "react";
5
- import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
6
- import { Tabs as c } from "@base-ui/react/tabs";
2
+ import { t as e } from "../chunks/cn-BjnOAUrA.js";
3
+ import { t } from "../chunks/icon-CBzOwqrX.js";
4
+ import { t as n } from "../chunks/merge-refs-BN1FyQt9.js";
5
+ import { t as r } from "../chunks/observe-resize-DhxhmoyB.js";
6
+ import { createContext as i, forwardRef as a, useContext as o, useEffect as s, useMemo as c, useRef as l } from "react";
7
+ import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
8
+ import { Tabs as p } from "@base-ui/react/tabs";
7
9
  //#region src/components/tabs/tabs.tsx
8
- var l = { variant: {
10
+ var m = { variant: {
9
11
  underline: { classes: "" },
10
12
  pill: { classes: "" }
11
- } }, u = { variant: "underline" }, d = { variant: l.variant }, f = { variant: "pill" }, p = /* @__PURE__ */ n("underline");
12
- function m(t, n) {
13
- let i = /* @__PURE__ */ r(function({ value: n, defaultValue: r, onValueChange: i, variant: a = t, className: s, children: l }, u) {
14
- return /* @__PURE__ */ o(p.Provider, {
13
+ } }, h = { variant: "underline" }, g = { variant: m.variant }, _ = { variant: "pill" }, v = /* @__PURE__ */ i("underline");
14
+ function y(t, n) {
15
+ let r = /* @__PURE__ */ a(function({ value: n, defaultValue: r, onValueChange: i, variant: a = t, className: o, children: s }, c) {
16
+ return /* @__PURE__ */ d(v.Provider, {
15
17
  value: a,
16
- children: /* @__PURE__ */ o(c.Root, {
17
- ref: u,
18
+ children: /* @__PURE__ */ d(p.Root, {
19
+ ref: c,
18
20
  ...n === void 0 ? {} : { value: n },
19
21
  ...r === void 0 ? {} : { defaultValue: r },
20
22
  ...i ? { onValueChange: (e) => i(String(e)) } : {},
21
- className: e("flex min-w-0 flex-col", s),
22
- children: l
23
+ className: e("flex min-w-0 flex-col", o),
24
+ children: s
23
25
  })
24
26
  });
25
27
  });
26
- return i.displayName = n, i;
28
+ return r.displayName = n, r;
27
29
  }
28
- var h = /* @__PURE__ */ r(function({ className: t, children: n, ...r }, a) {
29
- let l = i(p);
30
- return /* @__PURE__ */ s(c.List, {
31
- ref: a,
32
- className: e("relative flex min-w-0 items-center overflow-x-auto scrollbar-none", l === "underline" ? "-mx-12 gap-20 px-12 hairline-b-inset-12" : "-m-4 gap-4 p-4", t),
33
- ...r,
34
- children: [n, l === "underline" && /* @__PURE__ */ o(c.Indicator, { className: "absolute bottom-0 left-0 h-2 w-(--active-tab-width) translate-x-(--active-tab-left) rounded-pill bg-ink indicator-motion" })]
30
+ var b = /* @__PURE__ */ a(function({ className: t, children: i, ...a }, u) {
31
+ let m = o(v), h = l(null), g = c(() => n(h, u), [u]);
32
+ return s(() => {
33
+ let e = h.current;
34
+ if (!e) return;
35
+ let t = () => {
36
+ let t = e.scrollWidth - e.clientWidth - Math.abs(e.scrollLeft);
37
+ e.style.setProperty("--scroll-area-overflow-x-start", `${Math.max(0, Math.abs(e.scrollLeft))}px`), e.style.setProperty("--scroll-area-overflow-x-end", `${Math.max(0, t)}px`);
38
+ };
39
+ t(), e.addEventListener("scroll", t, { passive: !0 });
40
+ let n = r([e, ...e.children], t);
41
+ return () => {
42
+ e.removeEventListener("scroll", t), n();
43
+ };
44
+ }, []), /* @__PURE__ */ f(p.List, {
45
+ ref: g,
46
+ className: e("relative flex min-w-0 items-center overflow-x-auto scroll-px-16 scrollbar-none scroll-fade-x", m === "underline" ? "hairline-b-strong" : "gap-4", t),
47
+ ...a,
48
+ children: [i, m === "underline" && /* @__PURE__ */ d(p.Indicator, {
49
+ className: "absolute bottom-0 left-0 flex h-2 w-(--active-tab-width) translate-x-(--active-tab-left) px-12 indicator-motion",
50
+ children: /* @__PURE__ */ d("span", { className: "h-2 flex-1 rounded-pill bg-ink forced-line" })
51
+ })]
35
52
  });
36
53
  });
37
- process.env.NODE_ENV !== "production" && (h.displayName = "Tabs.List");
38
- var g = /* @__PURE__ */ r(function({ value: n, children: r, icon: l, count: u, disabled: d, className: f, "data-force": m }, h) {
39
- let g = i(p);
40
- return /* @__PURE__ */ o(c.Tab, {
41
- ref: h,
54
+ process.env.NODE_ENV !== "production" && (b.displayName = "Tabs.List");
55
+ var x = /* @__PURE__ */ a(function({ value: n, children: r, icon: i, count: a, disabled: s, className: c, "data-force": l }, m) {
56
+ let h = o(v);
57
+ return /* @__PURE__ */ d(p.Tab, {
58
+ ref: m,
42
59
  value: n,
43
- ...d ? { disabled: !0 } : {},
44
- ...m ? { "data-force": m } : {},
45
- className: e("relative inline-flex shrink-0 cursor-pointer items-center gap-6 text-body font-medium whitespace-nowrap transition-control tap-target disabled:cursor-not-allowed disabled:text-fg-disabled", g === "underline" ? "group/tab h-40 text-fg-secondary outline-none hover:text-fg selected:text-fg" : "h-32 rounded-pill px-12 text-fg-secondary hover:bg-fill-1 hover:text-fg active:bg-fill-2 selected:bg-fill-2 selected:text-fg focus-ring", f),
46
- children: g === "underline" ? /* @__PURE__ */ s("span", {
47
- className: "-mx-8 inline-flex h-28 items-center gap-6 rounded-pill px-8 outline-2 outline-transparent group-focus-visible/tab:outline-focus",
60
+ ...s ? { disabled: !0 } : {},
61
+ ...l ? { "data-force": l } : {},
62
+ className: e("relative inline-flex shrink-0 cursor-pointer items-center gap-6 text-body font-medium whitespace-nowrap text-fg-secondary transition-control tap-target hover:text-fg selected:text-fg disabled:cursor-not-allowed disabled:text-fg-disabled selected:disabled:text-fg-disabled", h === "underline" ? "group/tab h-40 outline-none" : "h-32 rounded-pill px-12 hover:bg-fill-1 active:bg-fill-2 selected:bg-fill-2 selected:hover:bg-fill-3 selected:active:bg-fill-3 focus-ring-inset", c),
63
+ children: h === "underline" ? /* @__PURE__ */ f("span", {
64
+ className: "inline-flex h-28 items-center gap-6 rounded-pill px-12 transition-control focus-ring-inset group-hover/tab:bg-fill-1 group-active/tab:bg-fill-2 group-disabled/tab:bg-transparent group-focus-visible/tab:outline-focus group-focus-visible/tab:outline-solid",
48
65
  children: [
49
- l && /* @__PURE__ */ o(t, {
50
- icon: l,
66
+ i && /* @__PURE__ */ d(t, {
67
+ icon: i,
51
68
  size: "sm"
52
69
  }),
53
70
  r,
54
- u !== void 0 && /* @__PURE__ */ o("span", {
71
+ a !== void 0 && /* @__PURE__ */ d("span", {
55
72
  className: "text-body font-regular text-fg-secondary tabular",
56
- children: u
73
+ children: a
57
74
  })
58
75
  ]
59
- }) : /* @__PURE__ */ s(a, { children: [
60
- l && /* @__PURE__ */ o(t, {
61
- icon: l,
76
+ }) : /* @__PURE__ */ f(u, { children: [
77
+ i && /* @__PURE__ */ d(t, {
78
+ icon: i,
62
79
  size: "sm"
63
80
  }),
64
81
  r,
65
- u !== void 0 && /* @__PURE__ */ o("span", {
82
+ a !== void 0 && /* @__PURE__ */ d("span", {
66
83
  className: "text-body font-regular text-fg-secondary tabular",
67
- children: u
84
+ children: a
68
85
  })
69
86
  ] })
70
87
  });
71
88
  });
72
- process.env.NODE_ENV !== "production" && (g.displayName = "Tabs.Tab");
73
- var _ = /* @__PURE__ */ r(function({ value: t, className: n, children: r, keepMounted: i }, a) {
74
- return /* @__PURE__ */ o(c.Panel, {
75
- ref: a,
89
+ process.env.NODE_ENV !== "production" && (x.displayName = "Tabs.Tab");
90
+ var S = /* @__PURE__ */ a(function({ value: t, className: n, children: r, keepMounted: i, "data-force": a }, o) {
91
+ return /* @__PURE__ */ d(p.Panel, {
92
+ ref: o,
76
93
  value: t,
77
94
  ...i ? { keepMounted: i } : {},
95
+ ...a ? { "data-force": a } : {},
78
96
  className: e("outline-none focus-ring-inset", n),
79
97
  children: r
80
98
  });
81
99
  });
82
- process.env.NODE_ENV !== "production" && (_.displayName = "Tabs.Panel");
83
- var v = /* @__PURE__ */ Object.assign(/* @__PURE__ */ m(u.variant, "Tabs"), {
84
- List: h,
85
- Tab: g,
86
- Panel: _
87
- }), y = /* @__PURE__ */ Object.assign(/* @__PURE__ */ m(f.variant, "PillTabs"), {
88
- List: h,
89
- Tab: g,
90
- Panel: _
100
+ process.env.NODE_ENV !== "production" && (S.displayName = "Tabs.Panel");
101
+ var C = /* @__PURE__ */ Object.assign(/* @__PURE__ */ y(h.variant, "Tabs"), {
102
+ List: b,
103
+ Tab: x,
104
+ Panel: S
105
+ }), w = /* @__PURE__ */ Object.assign(/* @__PURE__ */ y(_.variant, "PillTabs"), {
106
+ List: b,
107
+ Tab: x,
108
+ Panel: S
91
109
  });
92
110
  //#endregion
93
- export { f as KAESO_PILL_TABS_DEFAULT_VARIANTS, d as KAESO_PILL_TABS_VARIANTS, u as KAESO_TABS_DEFAULT_VARIANTS, l as KAESO_TABS_VARIANTS, y as PillTabs, v as Tabs };
111
+ export { _ as KAESO_PILL_TABS_DEFAULT_VARIANTS, g as KAESO_PILL_TABS_VARIANTS, h as KAESO_TABS_DEFAULT_VARIANTS, m as KAESO_TABS_VARIANTS, w as PillTabs, C as Tabs };
94
112
 
95
113
  //# sourceMappingURL=tabs.js.map