@logicplanes/kaeso-ui 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,65 +1,77 @@
1
1
  "use client";
2
- import { t as e } from "../../chunks/cn-Dj6sRgkF.js";
3
- import { r as t } from "../../chunks/context-BELWW79w.js";
2
+ import { t as e } from "../../chunks/cn-BjnOAUrA.js";
3
+ import { i as t } from "../../chunks/context-BELWW79w.js";
4
4
  import { formatPercent as n } from "../../format.js";
5
- import { O as r } from "../../chunks/core-BYns5ytV.js";
5
+ import { O as r } from "../../chunks/core-CmK-8ObW.js";
6
6
  import { forwardRef as i } from "react";
7
7
  import { jsx as a, jsxs as o } from "react/jsx-runtime";
8
8
  //#region src/components/charts/gauge.tsx
9
9
  var s = { size: { md: { classes: "w-180" } } }, c = { size: "md" }, l = /* @__PURE__ */ i(function({ value: i, thresholds: s = [.8], label: c, valueLabel: l, className: u, "aria-label": d }, f) {
10
- t();
11
- let [p] = r([Math.max(0, Math.min(1, i))]), m = (e) => Math.PI * (1 - e), h = (e, t) => [90 + t * Math.cos(m(e)), 94 - t * Math.sin(m(e))], g = (e, t) => {
12
- let [n, r] = h(e, 82), [i, a] = h(t, 82);
10
+ let p = t(), m = Number.isFinite(i), [h] = r([m ? Math.max(0, Math.min(1, i)) : 0]), g = (e) => Math.PI * (1 - e), _ = (e, t) => [90 + t * Math.cos(g(e)), 94 - t * Math.sin(g(e))], v = (e, t) => {
11
+ let [n, r] = _(e, 82), [i, a] = _(t, 82);
13
12
  return `M${n} ${r}A82 82 0 0 1 ${i} ${a}`;
14
- }, _ = Math.round(i * 100), v = i >= 1 ? "var(--k-danger)" : i >= Math.min(...s, 1) ? "var(--k-warning)" : "var(--k-viz-1)";
13
+ }, y = m ? Math.round(i * 100) : 0, b = m && i >= 1, x = m && !b && i >= Math.min(...s, 1), S = b ? "var(--k-danger)" : x ? "var(--k-warning)" : "var(--k-viz-1)", C = b ? p("gauge.over", "Over the limit") : x ? p("gauge.near", "Near the limit") : null, w = l ?? (m ? n(i, 0) : "–"), T = [
14
+ typeof l == "string" ? l : m ? n(i, 0) : p("gauge.noData", "No data"),
15
+ typeof c == "string" ? c : null,
16
+ C
17
+ ].filter(Boolean).join(", ");
15
18
  return /* @__PURE__ */ o("div", {
16
19
  ref: f,
17
20
  role: "meter",
18
21
  "aria-label": d,
19
22
  "aria-valuemin": 0,
20
- "aria-valuemax": Math.max(100, _),
21
- "aria-valuenow": _,
22
- className: e("relative inline-flex flex-col items-center", u),
23
- children: [/* @__PURE__ */ o("svg", {
24
- width: 180,
25
- height: 104,
26
- role: "presentation",
27
- children: [
28
- /* @__PURE__ */ a("path", {
29
- d: g(0, 1),
30
- fill: "none",
31
- stroke: "var(--k-fill-3)",
32
- strokeWidth: 12,
33
- strokeLinecap: "round"
34
- }),
35
- (p ?? 0) > 0 && /* @__PURE__ */ a("path", {
36
- d: g(0, Math.max(.005, p ?? 0)),
37
- fill: "none",
38
- stroke: v,
39
- strokeWidth: 12,
40
- strokeLinecap: "round"
41
- }),
42
- s.map((e) => {
43
- let [t, n] = h(e, 73), [r, i] = h(e, 91);
44
- return /* @__PURE__ */ a("line", {
45
- x1: t,
46
- y1: n,
47
- x2: r,
48
- y2: i,
49
- stroke: "var(--k-bg-panel)",
50
- strokeWidth: 2
51
- }, e);
52
- })
53
- ]
54
- }), /* @__PURE__ */ o("div", {
55
- className: "absolute inset-x-0 bottom-0 flex flex-col items-center",
56
- children: [/* @__PURE__ */ a("span", {
57
- className: "text-title font-semibold text-fg tabular",
58
- children: l ?? n(i, 0)
59
- }), c && /* @__PURE__ */ a("span", {
60
- className: "text-caption font-medium text-fg-tertiary",
61
- children: c
23
+ "aria-valuemax": 100,
24
+ "aria-valuenow": Math.max(0, Math.min(100, y)),
25
+ "aria-valuetext": T,
26
+ className: e("relative inline-flex w-180 flex-col items-center", u),
27
+ children: [/* @__PURE__ */ o("div", {
28
+ className: "relative",
29
+ children: [/* @__PURE__ */ o("svg", {
30
+ width: 180,
31
+ height: 104,
32
+ role: "presentation",
33
+ className: "block data-mark",
34
+ children: [
35
+ /* @__PURE__ */ a("path", {
36
+ d: v(0, 1),
37
+ fill: "none",
38
+ stroke: "var(--k-fill-3)",
39
+ strokeWidth: 12,
40
+ strokeLinecap: "round"
41
+ }),
42
+ (h ?? 0) > 0 && /* @__PURE__ */ a("path", {
43
+ d: v(0, Math.max(.005, h ?? 0)),
44
+ fill: "none",
45
+ stroke: S,
46
+ strokeWidth: 12,
47
+ strokeLinecap: "round"
48
+ }),
49
+ s.map((e) => {
50
+ let [t, n] = _(e, 76), [r, i] = _(e, 92);
51
+ return /* @__PURE__ */ a("line", {
52
+ x1: t,
53
+ y1: n,
54
+ x2: r,
55
+ y2: i,
56
+ stroke: "var(--k-text-tertiary)",
57
+ strokeWidth: 2,
58
+ strokeLinecap: "round"
59
+ }, e);
60
+ })
61
+ ]
62
+ }), /* @__PURE__ */ o("div", {
63
+ className: "absolute inset-x-0 bottom-0 mx-auto flex max-w-140 flex-col items-center text-center",
64
+ children: [C && /* @__PURE__ */ a("span", {
65
+ className: e("text-caption font-medium", b ? "text-danger-text" : "text-warning-text"),
66
+ children: C
67
+ }), /* @__PURE__ */ a("span", {
68
+ className: "max-w-full text-title font-semibold text-fg tabular wrap-anywhere",
69
+ children: w
70
+ })]
62
71
  })]
72
+ }), c && /* @__PURE__ */ a("span", {
73
+ className: "mt-4 max-w-full text-center text-caption font-medium text-pretty text-fg-tertiary",
74
+ children: c
63
75
  })]
64
76
  });
65
77
  });
@@ -1 +1 @@
1
- {"version":3,"file":"gauge.js","names":["cn","useLocale","useTweened","KAESO_GAUGE_VARIANTS","KAESO_GAUGE_DEFAULT_VARIANTS","Gauge","ariaLabel","t","value","a","f","pt","r","path","x1","y1","from","x2","y2","to","now","tone","thresholds","className","th","valueLabel","formatPercent","label"],"sources":["../../../src/components/charts/gauge.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatPercent } from \"../../format/index.js\";\nimport { useTweened } from \"./core.js\";\nimport { useLocale } from \"../../i18n/context.js\";\n\nexport const KAESO_GAUGE_VARIANTS = {\n size: { md: { classes: \"w-180\" } },\n} as const;\nexport const KAESO_GAUGE_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport const Gauge = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n value: number;\n thresholds?: number[] | undefined;\n label?: ReactNode | undefined;\n valueLabel?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n }\n>(function Gauge({ value, thresholds = [0.8], label, valueLabel, className, \"aria-label\": ariaLabel }, ref) {\n useLocale();\n const W = 180;\n const R = 82;\n const [t] = useTweened([Math.max(0, Math.min(1, value))]);\n const a = (f: number) => Math.PI * (1 - f);\n const pt = (f: number, r: number) => [W / 2 + r * Math.cos(a(f)), 94 - r * Math.sin(a(f))] as const;\n const path = (from: number, to: number) => {\n const [x1, y1] = pt(from, R);\n const [x2, y2] = pt(to, R);\n return `M${x1} ${y1}A${R} ${R} 0 0 1 ${x2} ${y2}`;\n };\n const now = Math.round(value * 100);\n const tone = value >= 1 ? \"var(--k-danger)\" : value >= Math.min(...thresholds, 1) ? \"var(--k-warning)\" : \"var(--k-viz-1)\";\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={Math.max(100, now)}\n aria-valuenow={now}\n className={cn(\"relative inline-flex flex-col items-center\", className)}\n >\n <svg width={W} height={104} role=\"presentation\">\n <path d={path(0, 1)} fill=\"none\" stroke=\"var(--k-fill-3)\" strokeWidth={12} strokeLinecap=\"round\" />\n {(t ?? 0) > 0 && <path d={path(0, Math.max(0.005, t ?? 0))} fill=\"none\" stroke={tone} strokeWidth={12} strokeLinecap=\"round\" />}\n {thresholds.map((th) => {\n const [x1, y1] = pt(th, R - 9);\n const [x2, y2] = pt(th, R + 9);\n return <line key={th} x1={x1} y1={y1} x2={x2} y2={y2} stroke=\"var(--k-bg-panel)\" strokeWidth={2} />;\n })}\n </svg>\n <div className=\"absolute inset-x-0 bottom-0 flex flex-col items-center\">\n <span className=\"text-title font-semibold text-fg tabular\">{valueLabel ?? formatPercent(value, 0)}</span>\n {label && <span className=\"text-caption font-medium text-fg-tertiary\">{label}</span>}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Gauge.displayName = \"Gauge\";\n"],"mappings":";;;;;;;;AAMA,IAAaG,IAAuB,EAClC,MAAM,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAE,EACnC,GACaC,IAA+B,EAAE,MAAM,KAAK,GAE5CC,IAAwB,kBAUnC,SAAe,EAAE,UAAO,gBAAa,CAAC,EAAG,GAAG,UAAO,eAAY,cAAW,cAAcC,KAAa,GAAK;CAC1G,EAAU;CACV,IAEM,CAACC,KAAKL,EAAW,CAAC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGM,CAAK,CAAC,CAAC,CAAC,GAClDC,KAAK,MAAc,KAAK,MAAM,IAAIC,IAClCC,KAAM,GAAW,MAAc,CAAC,KAAQC,IAAI,KAAK,IAAIH,EAAEC,CAAC,CAAC,GAAG,KAAKE,IAAI,KAAK,IAAIH,EAAEC,CAAC,CAAC,CAAC,GACnFG,KAAQ,GAAc,MAAe;EACzC,IAAM,CAACC,GAAIC,KAAMJ,EAAGK,GAAM,EAAC,GACrB,CAACC,GAAIC,KAAMP,EAAGQ,GAAI,EAAC;EACzB,OAAO,IAAIL,EAAG,GAAGC,EAAG,eAAmBE,EAAG,GAAGC;CAC/C,GACME,IAAM,KAAK,MAAMZ,IAAQ,GAAG,GAC5Ba,IAAOb,KAAS,IAAI,oBAAoBA,KAAS,KAAK,IAAI,GAAGc,GAAY,CAAC,IAAI,qBAAqB;CACzG,OACE,kBAAC,OAAD;EACO;EACL,MAAK;EACL,cAAYhB;EACZ,iBAAe;EACf,iBAAe,KAAK,IAAI,KAAKc,CAAG;EAChC,iBAAeA;EACf,WAAWpB,EAAG,8CAA8CuB,CAAS;EAPvE,UAAA,CASE,kBAAC,OAAD;GAAK,OAAO;GAAG,QAAQ;GAAK,MAAK;GAAjC,UAAA;IACE,kBAAC,QAAD;KAAM,GAAGV,EAAK,GAAG,CAAC;KAAG,MAAK;KAAO,QAAO;KAAkB,aAAa;KAAI,eAAc;IAAS,CAAA;KAChGN,KAAK,KAAK,KAAK,kBAAC,QAAD;KAAM,GAAGM,EAAK,GAAG,KAAK,IAAI,MAAON,KAAK,CAAC,CAAC;KAAG,MAAK;KAAO,QAAQc;KAAM,aAAa;KAAI,eAAc;IAAS,CAAA;IAC7HC,EAAW,KAAK,MAAO;KACtB,IAAM,CAACR,GAAIC,KAAMJ,EAAGa,GAAI,EAAK,GACvB,CAACP,GAAIC,KAAMP,EAAGa,GAAI,EAAK;KAC7B,OAAO,kBAAC,QAAD;MAAmB;MAAQ;MAAQ;MAAQ;MAAI,QAAO;MAAoB,aAAa;KAAI,GAAhFA,CAAgF;IACpG,CAAC;GACE;EACL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAAC,QAAD;IAAM,WAAU;IAA4C,UAAAC,KAAcC,EAAclB,GAAO,CAAC;GAAQ,CAAA,GACvGmB,KAAS,kBAAC,QAAD;IAAM,WAAU;IAA6C,UAAAA;GAAY,CAAA,CAChF;EACF,CAAA,CAAA;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc"}
1
+ {"version":3,"file":"gauge.js","names":["cn","useUiText","useTweened","KAESO_GAUGE_VARIANTS","KAESO_GAUGE_DEFAULT_VARIANTS","Gauge","ariaLabel","t","known","value","drawn","a","f","pt","r","path","x1","y1","from","x2","y2","to","now","over","near","thresholds","tone","status","shown","valueLabel","formatPercent","spoken","label","className","th"],"sources":["../../../src/components/charts/gauge.tsx"],"sourcesContent":["import { forwardRef, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatPercent } from \"../../format/index.js\";\nimport { useTweened } from \"./core.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_GAUGE_VARIANTS = {\n size: { md: { classes: \"w-180\" } },\n} as const;\nexport const KAESO_GAUGE_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport const Gauge = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n value: number;\n thresholds?: number[] | undefined;\n label?: ReactNode | undefined;\n valueLabel?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n }\n>(function Gauge({ value, thresholds = [0.8], label, valueLabel, className, \"aria-label\": ariaLabel }, ref) {\n const t = useUiText();\n const W = 180;\n const R = 82;\n const known = Number.isFinite(value);\n const [drawn] = useTweened([known ? Math.max(0, Math.min(1, value)) : 0]);\n const a = (f: number) => Math.PI * (1 - f);\n const pt = (f: number, r: number) => [W / 2 + r * Math.cos(a(f)), 94 - r * Math.sin(a(f))] as const;\n const path = (from: number, to: number) => {\n const [x1, y1] = pt(from, R);\n const [x2, y2] = pt(to, R);\n return `M${x1} ${y1}A${R} ${R} 0 0 1 ${x2} ${y2}`;\n };\n const now = known ? Math.round(value * 100) : 0;\n const over = known && value >= 1;\n const near = known && !over && value >= Math.min(...thresholds, 1);\n const tone = over ? \"var(--k-danger)\" : near ? \"var(--k-warning)\" : \"var(--k-viz-1)\";\n const status = over ? t(\"gauge.over\", \"Over the limit\") : near ? t(\"gauge.near\", \"Near the limit\") : null;\n const shown = valueLabel ?? (known ? formatPercent(value, 0) : \"–\");\n const spokenValue = typeof valueLabel === \"string\" ? valueLabel : known ? formatPercent(value, 0) : t(\"gauge.noData\", \"No data\");\n const spoken = [spokenValue, typeof label === \"string\" ? label : null, status].filter(Boolean).join(\", \");\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.max(0, Math.min(100, now))}\n aria-valuetext={spoken}\n className={cn(\"relative inline-flex w-180 flex-col items-center\", className)}\n >\n <div className=\"relative\">\n <svg width={W} height={104} role=\"presentation\" className=\"block data-mark\">\n <path d={path(0, 1)} fill=\"none\" stroke=\"var(--k-fill-3)\" strokeWidth={12} strokeLinecap=\"round\" />\n {(drawn ?? 0) > 0 && <path d={path(0, Math.max(0.005, drawn ?? 0))} fill=\"none\" stroke={tone} strokeWidth={12} strokeLinecap=\"round\" />}\n {thresholds.map((th) => {\n const [x1, y1] = pt(th, R - 6);\n const [x2, y2] = pt(th, R + 10);\n return <line key={th} x1={x1} y1={y1} x2={x2} y2={y2} stroke=\"var(--k-text-tertiary)\" strokeWidth={2} strokeLinecap=\"round\" />;\n })}\n </svg>\n <div className=\"absolute inset-x-0 bottom-0 mx-auto flex max-w-140 flex-col items-center text-center\">\n {status && <span className={cn(\"text-caption font-medium\", over ? \"text-danger-text\" : \"text-warning-text\")}>{status}</span>}\n <span className=\"max-w-full text-title font-semibold text-fg tabular wrap-anywhere\">{shown}</span>\n </div>\n </div>\n {label && <span className=\"mt-4 max-w-full text-center text-caption font-medium text-pretty text-fg-tertiary\">{label}</span>}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Gauge.displayName = \"Gauge\";\n"],"mappings":"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"}
@@ -1,83 +1,192 @@
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 } from "../../chunks/context-BELWW79w.js";
4
4
  import { formatNumber as n } from "../../format.js";
5
- import { forwardRef as r } from "react";
6
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
- import { max as o } from "d3-array";
5
+ import { t as r } from "../../chunks/use-scroll-fade-uc8mWSDX.js";
6
+ import { i, n as a, r as o } from "../../chunks/core-CmK-8ObW.js";
7
+ import { forwardRef as s, useLayoutEffect as c, useRef as l, useState as u } from "react";
8
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
9
+ import { max as p } from "d3-array";
8
10
  //#region src/components/charts/heatmap.tsx
9
- var s = { layout: {
11
+ var m = { layout: {
10
12
  week: { classes: "" },
11
13
  year: { classes: "" }
12
- } }, c = { layout: "week" }, l = [
14
+ } }, h = { layout: "week" }, g = [
13
15
  "var(--k-fill-1)",
14
- "color-mix(in oklab, var(--k-viz-1) 25%, var(--k-fill-1))",
15
- "color-mix(in oklab, var(--k-viz-1) 50%, var(--k-fill-1))",
16
- "color-mix(in oklab, var(--k-viz-1) 75%, var(--k-fill-1))",
16
+ "color-mix(in oklab, var(--k-viz-1) 40%, var(--k-fill-1))",
17
+ "color-mix(in oklab, var(--k-viz-1) 60%, var(--k-fill-1))",
18
+ "color-mix(in oklab, var(--k-viz-1) 80%, var(--k-fill-1))",
17
19
  "var(--k-viz-1)"
18
- ], u = /* @__PURE__ */ r(function({ rows: r, columns: s, values: c, formatValue: u = (e) => n(e), className: d, "aria-label": f, columnLabelEvery: p = 3 }, m) {
19
- let h = t(), g = o(c.flat()) ?? 0, _ = (e) => e <= 0 || g === 0 ? 0 : Math.min(4, Math.ceil(e / g * 4));
20
- return /* @__PURE__ */ a("div", {
21
- ref: m,
22
- className: e("flex min-w-0 max-w-full flex-col gap-12", d),
23
- children: [/* @__PURE__ */ a("div", {
24
- role: "table",
25
- tabIndex: 0,
26
- "aria-label": f,
27
- className: "inline-grid max-w-full gap-3 overflow-x-auto scrollbar-quiet rounded-cell focus-ring",
28
- style: { gridTemplateColumns: `40px repeat(${s.length}, 12px)` },
29
- children: [
30
- /* @__PURE__ */ i("span", {}),
31
- s.map((e, t) => /* @__PURE__ */ i("span", {
32
- className: "h-16 text-micro text-fg-tertiary tabular whitespace-nowrap",
33
- "aria-hidden": !0,
34
- children: t % p === 0 ? e : ""
35
- }, e)),
36
- r.map((e, t) => /* @__PURE__ */ a("div", {
37
- role: "row",
38
- className: "contents",
39
- children: [/* @__PURE__ */ i("span", {
40
- role: "rowheader",
41
- className: "flex h-12 items-center text-micro text-fg-tertiary",
42
- children: e
43
- }), s.map((n, r) => {
44
- let a = c[t]?.[r] ?? 0, o = h("heatmap.cell", "{row} {column}: {value}", {
45
- row: e,
46
- column: n,
47
- value: u(a)
48
- });
49
- return /* @__PURE__ */ i("span", {
50
- role: "cell",
51
- "aria-label": o,
52
- title: o,
53
- className: "size-12 rounded-cell",
54
- style: { background: l[_(a)] }
55
- }, n);
56
- })]
57
- }, e))
58
- ]
59
- }), /* @__PURE__ */ a("div", {
60
- className: "flex items-center gap-3 text-caption font-medium text-fg-tertiary",
61
- "aria-hidden": !0,
62
- children: [
63
- /* @__PURE__ */ i("span", {
64
- className: "mr-4",
65
- children: h("heatmap.less", "Less")
66
- }),
67
- l.map((e) => /* @__PURE__ */ i("span", {
68
- className: "size-12 rounded-cell",
69
- style: { background: e }
70
- }, e)),
71
- /* @__PURE__ */ i("span", {
72
- className: "ml-4",
73
- children: h("heatmap.more", "More")
74
- })
75
- ]
76
- })]
20
+ ], _ = 12, v = 3, y = /* @__PURE__ */ s(function({ rows: s, columns: m, values: h, formatValue: y = (e) => n(e), className: b, "aria-label": x, columnLabelEvery: S = 3 }, C) {
21
+ let w = t(), T = p(h.flat().filter(Number.isFinite)) ?? 0, E = (e) => !Number.isFinite(e) || e <= 0 || T === 0 ? 0 : Math.min(4, Math.ceil(e / T * 4)), D = s.length === 0 || m.length === 0, [O, k] = u(null), [A, j] = u(!1), M = l(null), N = l(null), [P, F] = u(0);
22
+ r(M, "[data-heatmap-grid]"), c(() => {
23
+ let e = N.current?.querySelector("[data-heatmap-rows]");
24
+ e && F(e.offsetWidth);
25
+ }, [s]), c(() => {
26
+ A && O && N.current?.querySelector(`[data-cell="${O.r}-${O.c}"]`)?.scrollIntoView?.({
27
+ block: "nearest",
28
+ inline: "nearest"
29
+ });
30
+ }, [O, A]);
31
+ let I = (e, t) => h[e]?.[t] ?? 0, L = (e) => Number.isFinite(e) ? y(e) : "–", R = (e, t) => w("heatmap.cell", "{row} {column}: {value}", {
32
+ row: s[e] ?? "",
33
+ column: m[t] ?? "",
34
+ value: L(I(e, t))
35
+ }), z = 19 + s.length * 15 + 8, B = {
36
+ columns: [w("heatmap.rows", "Row"), ...m],
37
+ rows: s.map((e, t) => [e, ...m.map((e, n) => L(I(t, n)))])
38
+ }, V = (e) => {
39
+ let t = O ?? {
40
+ r: 0,
41
+ c: 0
42
+ }, n = e === "ArrowRight" ? {
43
+ r: t.r,
44
+ c: Math.min(m.length - 1, t.c + 1)
45
+ } : e === "ArrowLeft" ? {
46
+ r: t.r,
47
+ c: Math.max(0, t.c - 1)
48
+ } : e === "ArrowDown" ? {
49
+ r: Math.min(s.length - 1, t.r + 1),
50
+ c: t.c
51
+ } : e === "ArrowUp" ? {
52
+ r: Math.max(0, t.r - 1),
53
+ c: t.c
54
+ } : e === "Home" ? {
55
+ r: t.r,
56
+ c: 0
57
+ } : e === "End" ? {
58
+ r: t.r,
59
+ c: m.length - 1
60
+ } : void 0;
61
+ return O === null && n ? t : n;
62
+ }, H = M.current?.scrollLeft ?? 0, U = O ? {
63
+ x: P + v + O.c * 15 + _ - H,
64
+ xLeft: P + v + O.c * 15 - H,
65
+ y: 19 + O.r * 15 + 24
66
+ } : null;
67
+ return /* @__PURE__ */ d("div", {
68
+ ref: C,
69
+ className: e("w-full min-w-0", b),
70
+ children: /* @__PURE__ */ d(a, {
71
+ label: x,
72
+ height: z,
73
+ table: D ? void 0 : B,
74
+ state: { empty: D },
75
+ legend: D ? void 0 : /* @__PURE__ */ f("div", {
76
+ className: "flex items-center gap-3 text-caption font-medium text-fg-tertiary",
77
+ "aria-hidden": !0,
78
+ children: [
79
+ /* @__PURE__ */ d("span", {
80
+ className: "mr-4",
81
+ children: w("heatmap.less", "Less")
82
+ }),
83
+ g.map((e) => /* @__PURE__ */ d("span", {
84
+ className: "size-12 rounded-cell data-mark",
85
+ style: { background: e }
86
+ }, e)),
87
+ /* @__PURE__ */ d("span", {
88
+ className: "ml-4",
89
+ children: w("heatmap.more", "More")
90
+ })
91
+ ]
92
+ }),
93
+ children: !D && /* @__PURE__ */ f("div", {
94
+ className: "absolute inset-0",
95
+ children: [
96
+ /* @__PURE__ */ d("div", {
97
+ ref: M,
98
+ role: "group",
99
+ tabIndex: 0,
100
+ "aria-label": x,
101
+ onKeyDown: (e) => {
102
+ if (e.key === "Escape" && O) {
103
+ e.stopPropagation(), k(null);
104
+ return;
105
+ }
106
+ let t = V(e.key);
107
+ t && (e.preventDefault(), j(!0), k(t));
108
+ },
109
+ onFocus: (e) => {
110
+ if (e.target !== e.currentTarget || document.documentElement.hasAttribute("data-k-pointer")) return;
111
+ let t = !0;
112
+ try {
113
+ t = e.currentTarget.matches(":focus-visible");
114
+ } catch {}
115
+ t && (j(!0), k({
116
+ r: 0,
117
+ c: 0
118
+ }));
119
+ },
120
+ onBlur: () => {
121
+ k(null), j(!1);
122
+ },
123
+ onScroll: () => k((e) => A ? e : null),
124
+ className: "size-full overflow-x-auto overflow-y-hidden rounded-cell scrollbar-quiet scroll-fade-x focus-ring-inset",
125
+ children: /* @__PURE__ */ f("div", {
126
+ ref: N,
127
+ "data-heatmap-grid": "",
128
+ className: "inline-grid gap-3",
129
+ style: { gridTemplateColumns: `max-content repeat(${m.length}, ${_}px)` },
130
+ onPointerLeave: () => {
131
+ j(!1), k(null);
132
+ },
133
+ children: [
134
+ /* @__PURE__ */ d("span", { "data-heatmap-rows": "" }),
135
+ m.map((e, t) => /* @__PURE__ */ d("span", {
136
+ className: "h-16 overflow-visible text-caption whitespace-nowrap text-fg-tertiary tabular",
137
+ "aria-hidden": !0,
138
+ children: t % S === 0 ? e : ""
139
+ }, e)),
140
+ s.map((t, n) => /* @__PURE__ */ f("div", {
141
+ className: "contents",
142
+ children: [/* @__PURE__ */ d("span", {
143
+ className: "flex h-12 items-center pr-8 text-caption whitespace-nowrap text-fg-tertiary",
144
+ "aria-hidden": !0,
145
+ children: t
146
+ }), m.map((t, r) => {
147
+ let i = O?.r === n && O.c === r;
148
+ return /* @__PURE__ */ d("span", {
149
+ "data-cell": `${n}-${r}`,
150
+ "aria-hidden": !0,
151
+ onPointerEnter: () => {
152
+ j(!1), k({
153
+ r: n,
154
+ c: r
155
+ });
156
+ },
157
+ className: e("size-12 rounded-cell data-mark", i && "outline-2 outline-offset-1 outline-fg"),
158
+ style: { background: g[E(I(n, r))] }
159
+ }, t);
160
+ })]
161
+ }, t))
162
+ ]
163
+ })
164
+ }),
165
+ O && U && /* @__PURE__ */ d(i, {
166
+ x: U.x,
167
+ xLeft: U.xLeft,
168
+ y: U.y,
169
+ width: M.current?.clientWidth ?? 0,
170
+ visible: !0,
171
+ heading: w("heatmap.cellHeading", "{row} {column}", {
172
+ row: s[O.r] ?? "",
173
+ column: m[O.c] ?? ""
174
+ }),
175
+ rows: [{
176
+ id: "v",
177
+ label: "",
178
+ color: g[E(I(O.r, O.c))],
179
+ value: L(I(O.r, O.c))
180
+ }]
181
+ }),
182
+ /* @__PURE__ */ d(o, { children: A && O ? R(O.r, O.c) : null })
183
+ ]
184
+ })
185
+ })
77
186
  });
78
187
  });
79
- process.env.NODE_ENV !== "production" && (u.displayName = "Heatmap");
188
+ process.env.NODE_ENV !== "production" && (y.displayName = "Heatmap");
80
189
  //#endregion
81
- export { u as Heatmap, c as KAESO_HEATMAP_DEFAULT_VARIANTS, s as KAESO_HEATMAP_VARIANTS };
190
+ export { y as Heatmap, h as KAESO_HEATMAP_DEFAULT_VARIANTS, m as KAESO_HEATMAP_VARIANTS };
82
191
 
83
192
  //# sourceMappingURL=heatmap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap.js","names":["d3max","cn","useUiText","KAESO_HEATMAP_VARIANTS","KAESO_HEATMAP_DEFAULT_VARIANTS","RAMP","Heatmap","formatNumber","v","ariaLabel","t","hi","max","values","level","className","columns","i","columnLabelEvery","c","rows","r","ri","ci","cell","formatValue"],"sources":["../../../src/components/charts/heatmap.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { max as d3max } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_HEATMAP_VARIANTS = {\n layout: {\n week: { classes: \"\" },\n year: { classes: \"\" },\n },\n} as const;\nexport const KAESO_HEATMAP_DEFAULT_VARIANTS = { layout: \"week\" } as const;\n\nconst RAMP = [\n \"var(--k-fill-1)\",\n \"color-mix(in oklab, var(--k-viz-1) 25%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 50%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 75%, var(--k-fill-1))\",\n \"var(--k-viz-1)\",\n];\n\nexport const Heatmap = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n rows: string[];\n columns: string[];\n values: number[][];\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n columnLabelEvery?: number | undefined;\n }\n>(function Heatmap({ rows, columns, values, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, columnLabelEvery = 3 }, ref) {\n const t = useUiText();\n const hi = d3max(values.flat()) ?? 0;\n const level = (v: number) => (v <= 0 || hi === 0 ? 0 : Math.min(4, Math.ceil((v / hi) * 4)));\n return (\n <div ref={ref} className={cn(\"flex min-w-0 max-w-full flex-col gap-12\", className)}>\n <div\n role=\"table\"\n tabIndex={0}\n aria-label={ariaLabel}\n className=\"inline-grid max-w-full gap-3 overflow-x-auto scrollbar-quiet rounded-cell focus-ring\"\n style={{ gridTemplateColumns: `40px repeat(${columns.length}, 12px)` }}\n >\n <span />\n {columns.map((c, i) => (\n <span key={c} className=\"h-16 text-micro text-fg-tertiary tabular whitespace-nowrap\" aria-hidden>\n {i % columnLabelEvery === 0 ? c : \"\"}\n </span>\n ))}\n {rows.map((r, ri) => (\n <div key={r} role=\"row\" className=\"contents\">\n <span role=\"rowheader\" className=\"flex h-12 items-center text-micro text-fg-tertiary\">\n {r}\n </span>\n {columns.map((c, ci) => {\n const v = values[ri]?.[ci] ?? 0;\n const cell = t(\"heatmap.cell\", \"{row} {column}: {value}\", { row: r, column: c, value: formatValue(v) });\n return <span key={c} role=\"cell\" aria-label={cell} title={cell} className=\"size-12 rounded-cell\" style={{ background: RAMP[level(v)] }} />;\n })}\n </div>\n ))}\n </div>\n <div className=\"flex items-center gap-3 text-caption font-medium text-fg-tertiary\" aria-hidden>\n <span className=\"mr-4\">{t(\"heatmap.less\", \"Less\")}</span>\n {RAMP.map((c) => (\n <span key={c} className=\"size-12 rounded-cell\" style={{ background: c }} />\n ))}\n <span className=\"ml-4\">{t(\"heatmap.more\", \"More\")}</span>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Heatmap.displayName = \"Heatmap\";\n"],"mappings":";;;;;;;;AAMA,IAAaG,IAAyB,EACpC,QAAQ;CACN,MAAM,EAAE,SAAS,GAAG;CACpB,MAAM,EAAE,SAAS,GAAG;AACtB,EACF,GACaC,IAAiC,EAAE,QAAQ,OAAO,GAEzDC,IAAO;CACX;CACA;CACA;CACA;CACA;AACF,GAEaC,IAA0B,kBAWrC,SAAiB,EAAE,SAAM,YAAS,WAAQ,kBAAe,MAAMC,EAAaC,CAAC,GAAG,cAAW,cAAcC,GAAW,sBAAmB,KAAK,GAAK;CACjJ,IAAMC,IAAIR,EAAU,GACdS,IAAKX,EAAMa,EAAO,KAAK,CAAC,KAAK,GAC7BC,KAAS,MAAeN,KAAK,KAAKG,MAAO,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,KAAMH,IAAIG,IAAM,CAAC,CAAC;CAC1F,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWV,EAAG,2CAA2Cc,CAAS;EAAjF,UAAA,CACE,kBAAC,OAAD;GACE,MAAK;GACL,UAAU;GACV,cAAYN;GACZ,WAAU;GACV,OAAO,EAAE,qBAAqB,eAAeO,EAAQ,OAAO,SAAS;GALvE,UAAA;IAOE,kBAAC,QAAD,CAAO,CAAA;IACNA,EAAQ,KAAK,GAAG,MACf,kBAAC,QAAD;KAAc,WAAU;KAA6D,eAAA;KAClF,UAAAC,IAAIC,MAAqB,IAAIC,IAAI;IAC9B,GAFKA,CAEL,CACP;IACAC,EAAK,KAAK,GAAG,MACZ,kBAAC,OAAD;KAAa,MAAK;KAAM,WAAU;KAAlC,UAAA,CACE,kBAAC,QAAD;MAAM,MAAK;MAAY,WAAU;MAC9B,UAAAC;KACG,CAAA,GACLL,EAAQ,KAAK,GAAG,MAAO;MACtB,IAAMR,IAAIK,EAAOS,EAAG,GAAGC,MAAO,GACxBC,IAAOd,EAAE,gBAAgB,2BAA2B;OAAE,KAAKW;OAAG,QAAQF;OAAG,OAAOM,EAAYjB,CAAC;MAAE,CAAC;MACtG,OAAO,kBAAC,QAAD;OAAc,MAAK;OAAO,cAAYgB;OAAM,OAAOA;OAAM,WAAU;OAAuB,OAAO,EAAE,YAAYnB,EAAKS,EAAMN,CAAC,GAAG;MAAI,GAAvHW,CAAuH;KAC3I,CAAC,CACE;IATK,GAAAE,CASL,CACN;GACE;EACL,CAAA,GAAA,kBAAC,OAAD;GAAK,WAAU;GAAoE,eAAA;GAAnF,UAAA;IACE,kBAAC,QAAD;KAAM,WAAU;KAAQ,UAAAX,EAAE,gBAAgB,MAAM;IAAQ,CAAA;IACvDL,EAAK,KAAK,MACT,kBAAC,QAAD;KAAc,WAAU;KAAuB,OAAO,EAAE,YAAYc,EAAE;IAAI,GAA/DA,CAA+D,CAC3E;IACD,kBAAC,QAAD;KAAM,WAAU;KAAQ,UAAAT,EAAE,gBAAgB,MAAM;IAAQ,CAAA;GACrD;EACF,CAAA,CAAA;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAQ,cAAc"}
1
+ {"version":3,"file":"heatmap.js","names":["d3max","cn","useUiText","useScrollFadeX","ChartFrame","ChartLive","KAESO_HEATMAP_VARIANTS","KAESO_HEATMAP_DEFAULT_VARIANTS","RAMP","CELL","GAP","Heatmap","formatNumber","v","ariaLabel","t","hi","max","values","level","empty","rows","columns","cell","setCell","useState","keyboard","setKeyboard","scroller","useRef","grid","labelWidth","setLabelWidth","useLayoutEffect","first","value","r","c","write","formatValue","line","height","table","ri","ci","move","at","next","key","scrollLeft","tip","className","visible","i","columnLabelEvery","on","ChartTooltip"],"sources":["../../../src/components/charts/heatmap.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState } from \"react\";\nimport { max as d3max } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\nimport { ChartFrame, ChartLive, ChartTooltip } from \"./core.js\";\n\nexport const KAESO_HEATMAP_VARIANTS = {\n layout: {\n week: { classes: \"\" },\n year: { classes: \"\" },\n },\n} as const;\nexport const KAESO_HEATMAP_DEFAULT_VARIANTS = { layout: \"week\" } as const;\n\nconst RAMP = [\n \"var(--k-fill-1)\",\n \"color-mix(in oklab, var(--k-viz-1) 40%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 60%, var(--k-fill-1))\",\n \"color-mix(in oklab, var(--k-viz-1) 80%, var(--k-fill-1))\",\n \"var(--k-viz-1)\",\n];\nconst CELL = 12;\nconst GAP = 3;\nconst HEAD = 16;\n\nexport const Heatmap = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n rows: string[];\n columns: string[];\n values: number[][];\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n columnLabelEvery?: number | undefined;\n }\n>(function Heatmap({ rows, columns, values, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, columnLabelEvery = 3 }, ref) {\n const t = useUiText();\n const hi = d3max(values.flat().filter(Number.isFinite)) ?? 0;\n const level = (v: number) => (!Number.isFinite(v) || v <= 0 || hi === 0 ? 0 : Math.min(4, Math.ceil((v / hi) * 4)));\n const empty = rows.length === 0 || columns.length === 0;\n const [cell, setCell] = useState<{ r: number; c: number } | null>(null);\n const [keyboard, setKeyboard] = useState(false);\n const scroller = useRef<HTMLDivElement | null>(null);\n const grid = useRef<HTMLDivElement | null>(null);\n const [labelWidth, setLabelWidth] = useState(0);\n useScrollFadeX(scroller, \"[data-heatmap-grid]\");\n useLayoutEffect(() => {\n const first = grid.current?.querySelector<HTMLElement>(\"[data-heatmap-rows]\");\n if (first) setLabelWidth(first.offsetWidth);\n }, [rows]);\n useLayoutEffect(() => {\n if (!keyboard || !cell) return;\n grid.current?.querySelector(`[data-cell=\"${cell.r}-${cell.c}\"]`)?.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n }, [cell, keyboard]);\n const value = (r: number, c: number) => values[r]?.[c] ?? 0;\n const write = (v: number) => (Number.isFinite(v) ? formatValue(v) : \"–\");\n const line = (r: number, c: number) =>\n t(\"heatmap.cell\", \"{row} {column}: {value}\", { row: rows[r] ?? \"\", column: columns[c] ?? \"\", value: write(value(r, c)) });\n const height = HEAD + GAP + rows.length * (CELL + GAP) + 8;\n const table = { columns: [t(\"heatmap.rows\", \"Row\"), ...columns], rows: rows.map((r, ri) => [r, ...columns.map((_, ci) => write(value(ri, ci)))]) };\n const move = (key: string) => {\n const at = cell ?? { r: 0, c: 0 };\n const next =\n key === \"ArrowRight\"\n ? { r: at.r, c: Math.min(columns.length - 1, at.c + 1) }\n : key === \"ArrowLeft\"\n ? { r: at.r, c: Math.max(0, at.c - 1) }\n : key === \"ArrowDown\"\n ? { r: Math.min(rows.length - 1, at.r + 1), c: at.c }\n : key === \"ArrowUp\"\n ? { r: Math.max(0, at.r - 1), c: at.c }\n : key === \"Home\"\n ? { r: at.r, c: 0 }\n : key === \"End\"\n ? { r: at.r, c: columns.length - 1 }\n : undefined;\n return cell === null && next ? at : next;\n };\n const scrollLeft = scroller.current?.scrollLeft ?? 0;\n const tip = cell\n ? {\n x: labelWidth + GAP + cell.c * (CELL + GAP) + CELL - scrollLeft,\n xLeft: labelWidth + GAP + cell.c * (CELL + GAP) - scrollLeft,\n y: HEAD + GAP + cell.r * (CELL + GAP) + 24,\n }\n : null;\n return (\n <div ref={ref} className={cn(\"w-full min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={empty ? undefined : table}\n state={{ empty }}\n legend={\n empty ? undefined : (\n <div className=\"flex items-center gap-3 text-caption font-medium text-fg-tertiary\" aria-hidden>\n <span className=\"mr-4\">{t(\"heatmap.less\", \"Less\")}</span>\n {RAMP.map((c) => (\n <span key={c} className=\"size-12 rounded-cell data-mark\" style={{ background: c }} />\n ))}\n <span className=\"ml-4\">{t(\"heatmap.more\", \"More\")}</span>\n </div>\n )\n }\n >\n {!empty && (\n <div className=\"absolute inset-0\">\n <div\n ref={scroller}\n role=\"group\"\n tabIndex={0}\n aria-label={ariaLabel}\n onKeyDown={(e) => {\n if (e.key === \"Escape\" && cell) {\n e.stopPropagation();\n setCell(null);\n return;\n }\n const next = move(e.key);\n if (!next) return;\n e.preventDefault();\n setKeyboard(true);\n setCell(next);\n }}\n onFocus={(e) => {\n if (e.target !== e.currentTarget || document.documentElement.hasAttribute(\"data-k-pointer\")) return;\n let visible = true;\n try {\n visible = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (visible) {\n setKeyboard(true);\n setCell({ r: 0, c: 0 });\n }\n }}\n onBlur={() => {\n setCell(null);\n setKeyboard(false);\n }}\n onScroll={() => setCell((c) => (keyboard ? c : null))}\n className=\"size-full overflow-x-auto overflow-y-hidden rounded-cell scrollbar-quiet scroll-fade-x focus-ring-inset\"\n >\n <div\n ref={grid}\n data-heatmap-grid=\"\"\n className=\"inline-grid gap-3\"\n style={{ gridTemplateColumns: `max-content repeat(${columns.length}, ${CELL}px)` }}\n onPointerLeave={() => {\n setKeyboard(false);\n setCell(null);\n }}\n >\n <span data-heatmap-rows=\"\" />\n {columns.map((c, i) => (\n <span key={c} className=\"h-16 overflow-visible text-caption whitespace-nowrap text-fg-tertiary tabular\" aria-hidden>\n {i % columnLabelEvery === 0 ? c : \"\"}\n </span>\n ))}\n {rows.map((r, ri) => (\n <div key={r} className=\"contents\">\n <span className=\"flex h-12 items-center pr-8 text-caption whitespace-nowrap text-fg-tertiary\" aria-hidden>\n {r}\n </span>\n {columns.map((c, ci) => {\n const on = cell?.r === ri && cell.c === ci;\n return (\n <span\n key={c}\n data-cell={`${ri}-${ci}`}\n aria-hidden\n onPointerEnter={() => {\n setKeyboard(false);\n setCell({ r: ri, c: ci });\n }}\n className={cn(\"size-12 rounded-cell data-mark\", on && \"outline-2 outline-offset-1 outline-fg\")}\n style={{ background: RAMP[level(value(ri, ci))] }}\n />\n );\n })}\n </div>\n ))}\n </div>\n </div>\n {cell && tip && (\n <ChartTooltip\n x={tip.x}\n xLeft={tip.xLeft}\n y={tip.y}\n width={scroller.current?.clientWidth ?? 0}\n visible\n heading={t(\"heatmap.cellHeading\", \"{row} {column}\", { row: rows[cell.r] ?? \"\", column: columns[cell.c] ?? \"\" })}\n rows={[{ id: \"v\", label: \"\", color: RAMP[level(value(cell.r, cell.c))]!, value: write(value(cell.r, cell.c)) }]}\n />\n )}\n <ChartLive>{keyboard && cell ? line(cell.r, cell.c) : null}</ChartLive>\n </div>\n )}\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Heatmap.displayName = \"Heatmap\";\n"],"mappings":"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"}