@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 +1 @@
1
- {"version":3,"file":"bar.js","names":["d3max","_Fragment","cn","useUiText","wholeTicks","useSize","useChartKeys","tickLabel","seriesColors","liveLine","ChartTooltip","useTweenedScale","ChartFrame","axisLabelIndexes","ChartLive","Legend","AXIS","readableTicks","scaleLinear","Fragment$1","KAESO_BAR_CHART_VARIANTS","KAESO_BAR_CHART_DEFAULT_VARIANTS","BarChart","formatNumber","v","ariaLabel","state","t","box","size","hover","setHover","useState","focus","setFocus","horizontal","layout","stacked","flat","series","s","dataTop","max","categories","a","ci","axis","tween","vals","si","palette","color","M","w","h","height","totals","band","scaleBand","scale","n","inner","MAX","barW","groupW","axisLabel","formatValue","centers","c","shown","axisLabels","dates","lastCategory","isPartial","partial","heading","name","table","ticks","quiet","keys","active","highlight","anchor","b","rowTop","PAD","rowBottom","below","tall","lit","center","tallest","sv","rowsFor","shares","formatPercent","className","gap","acc","start","lastVisible","val","dim","x0","len","y","top","bottom","bh","roundedTop","r","rr","x"],"sources":["../../../src/components/charts/bar.tsx"],"sourcesContent":["import { forwardRef, useState } from \"react\";\nimport { scaleBand } from \"d3-scale\";\nimport { scaleLinear } from \"./linear-scale.js\";\nimport { max as d3max } from \"d3-array\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n axisLabelIndexes,\n type AxisDate,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n Legend,\n liveLine,\n seriesColors,\n readableTicks,\n tickLabel,\n useChartKeys,\n useSize,\n useTweenedScale,\n wholeTicks,\n type ChartState,\n} from \"./core.js\";\n\nexport const KAESO_BAR_CHART_VARIANTS = {\n layout: {\n grouped: { classes: \"\" },\n stacked: { classes: \"\" },\n horizontal: { classes: \"\" },\n },\n} as const;\nexport const KAESO_BAR_CHART_DEFAULT_VARIANTS = { layout: \"grouped\" } as const;\n\nexport interface BarSeries {\n id: string;\n label: string;\n values: number[];\n color?: string | undefined;\n}\n\nexport interface BarChartProps extends ChartState {\n categories: string[];\n series: BarSeries[];\n layout?: keyof typeof KAESO_BAR_CHART_VARIANTS.layout | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n highlight?: number | undefined;\n axisLabels?: string[] | undefined;\n dates?: readonly AxisDate[] | undefined;\n shares?: boolean | undefined;\n partial?: { first?: boolean | undefined; last?: boolean | undefined; ongoing?: boolean | undefined } | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nexport const BarChart = /* @__PURE__ */ forwardRef<HTMLDivElement, BarChartProps>(function BarChart(\n {\n categories,\n series,\n layout = \"grouped\",\n height = 240,\n formatValue = (v) => formatNumber(v),\n highlight,\n axisLabels,\n dates,\n shares = true,\n partial,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const [box, size] = useSize<HTMLDivElement>();\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const [focus, setFocus] = useState<string | null>(null);\n const horizontal = layout === \"horizontal\";\n const stacked = layout === \"stacked\";\n const flat = series.flatMap((s) => s.values);\n const dataTop = (stacked ? d3max(categories.map((_, ci) => series.reduce((a, s) => a + (s.values[ci] ?? 0), 0))) : d3max(flat)) ?? 0;\n const axis = scaleLinear()\n .domain([0, dataTop * 1.08 || 1])\n .nice(4);\n const tween = useTweenedScale(flat, axis.domain()[1] ?? 1, !!state.loading);\n const vals = series.map((s, si) => s.values.map((_, ci) => tween.values[si * s.values.length + ci] ?? 0));\n const palette = seriesColors(series.map((s) => s.id));\n const color = (s: BarSeries) => s.color ?? palette.get(s.id)!;\n const M = horizontal ? { top: 0, right: 56, bottom: 0, left: 140 } : { top: 8, right: 52, bottom: 28, left: 0 };\n const w = Math.max(0, size.width - M.left - M.right);\n const h = Math.max(0, height - M.top - M.bottom);\n const totals = categories.map((_, ci) => vals.reduce((a, v) => a + (v[ci] ?? 0), 0));\n const band = scaleBand<string>()\n .domain(categories)\n .range(horizontal ? [0, h] : [0, w])\n .paddingInner(0.24)\n .paddingOuter(0.12);\n axis.range(horizontal ? [0, w] : [h, 0]);\n const scale = axis.copy().domain([0, tween.top || 1]);\n const v = (n: number) => (horizontal ? Math.min(w, scale(n)) : Math.max(0, scale(n)));\n const inner = scaleBand<string>()\n .domain(series.map((s) => s.id))\n .range([0, band.bandwidth()])\n .paddingInner(0.12);\n const MAX = horizontal ? 20 : stacked || series.length === 1 ? 40 : 20;\n const barW = Math.max(4, Math.min(MAX, Math.round(stacked || horizontal ? band.bandwidth() : inner.bandwidth())));\n const groupW = stacked || horizontal ? barW : series.length * barW + (series.length - 1) * 4;\n const axisLabel = tickLabel(formatValue);\n const centers = [categories[0], categories[categories.length - 1]].map((c) => (c === undefined ? 0 : (band(c) ?? 0) + band.bandwidth() / 2));\n const shown = new Set(\n horizontal\n ? []\n : axisLabelIndexes(\n categories.map((c, ci) => axisLabels?.[ci] ?? c),\n band.step(),\n { start: M.left + centers[0]!, end: w - centers[1]! + M.right },\n dates,\n ),\n );\n const GAP = 2;\n const lastCategory = categories.length - 1;\n const isPartial = (ci: number) => (!!(partial?.last || partial?.ongoing) && ci === lastCategory) || (!!partial?.first && ci === 0);\n const heading = (ci: number) => {\n const name = categories[ci] ?? \"\";\n if (partial?.ongoing && ci === lastCategory) return t(\"chart.soFar\", \"{heading}, so far\", { heading: name });\n return isPartial(ci) ? t(\"chart.partial\", \"{heading}, partial\", { heading: name }) : name;\n };\n const table = {\n columns: [t(\"barChart.category\", \"Category\"), ...series.map((s) => s.label)],\n rows: categories.map((_, ci) => [heading(ci), ...series.map((s) => formatValue(s.values[ci] ?? 0))]),\n };\n const ticks = (state.loading ? axis.ticks(4) : wholeTicks(readableTicks(axis, axisLabel), flat)).filter((t) => t <= (tween.top || 1) + 1e-9);\n const quiet = !!state.loading || !!state.empty || !!state.error;\n const keys = useChartKeys(quiet ? 0 : categories.length, horizontal ? { vertical: true, start: 0 } : {});\n const active = quiet ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < categories.length ? highlight : null));\n const anchor = (ci: number) => {\n const b = Math.round(band(categories[ci]!) ?? 0);\n if (horizontal) {\n const rowTop = M.top + Math.round(b + band.bandwidth() / 2 - barW / 2 - PAD);\n const rowBottom = rowTop + barW + PAD * 2;\n const below = ci < categories.length / 2;\n const tall = 40 + series.length * 22;\n return { x: M.left - 16, y: below ? rowBottom + 24 + 4 : rowTop - tall + 24 - 4 };\n }\n const lit = Math.min(band.bandwidth(), groupW + PAD * 2);\n const center = M.left + b + band.bandwidth() / 2;\n const tallest = stacked ? (totals[ci] ?? 0) : Math.max(0, ...vals.map((sv) => sv[ci] ?? 0));\n return {\n x: Math.round(center + lit / 2) - 8,\n xLeft: Math.round(center - lit / 2) + 8,\n y: hover && hover.i === ci ? hover.y : M.top + Math.round(v(tallest)),\n };\n };\n const rowsFor = (ci: number) =>\n series.map((s) => ({\n id: s.id,\n label: s.label,\n color: color(s),\n value: formatValue(s.values[ci] ?? 0),\n ...(shares && series.length > 1 && totals[ci] ? { share: formatPercent(Math.round(((s.values[ci] ?? 0) / (totals[ci] ?? 1)) * 100) / 100, 0) } : {}),\n }));\n const PAD = 8;\n return (\n <div ref={ref} className={cn(\"min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={table}\n state={state}\n legend={series.length > 1 ? <Legend items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))} onHover={setFocus} /> : undefined}\n >\n <div ref={box} role=\"group\" aria-label={ariaLabel} {...keys.props} className=\"absolute inset-0 rounded-cell focus-ring\">\n {size.width > 0 && (\n <svg width={size.width} height={height} className=\"block overflow-visible\" role=\"presentation\">\n <g transform={`translate(${M.left},${M.top})`}>\n {!horizontal &&\n ticks.map((t) => (\n <g key={t} transform={`translate(0,${Math.round(v(t)) + 0.5})`}>\n {t !== 0 && <line x2={w} {...AXIS.grid} />}\n {!state.loading && (\n <text x={w + 12} dy=\"0.32em\" {...AXIS.label}>\n {axisLabel(t)}\n </text>\n )}\n </g>\n ))}\n {categories.map((c, ci) => {\n const b = Math.round(band(c) ?? 0);\n const gap = Math.round((band.step() - band.bandwidth()) / 2);\n const lit = Math.min(band.bandwidth(), groupW + PAD * 2);\n let acc = 0;\n return (\n <g key={c}>\n <rect\n aria-hidden\n className=\"opacity-motion\"\n opacity={active === ci ? 1 : 0}\n fill=\"var(--k-fill-1)\"\n rx={6}\n {...(horizontal\n ? { x: -M.left + PAD, y: Math.round(b + band.bandwidth() / 2 - barW / 2 - PAD), width: size.width - PAD * 2, height: barW + PAD * 2 }\n : { x: Math.round(b + band.bandwidth() / 2 - lit / 2), y: 0, width: lit, height: h })}\n />\n {(() => {\n const center = b + band.bandwidth() / 2;\n const start = Math.round(center - groupW / 2);\n const lastVisible = series.map((_, si) => (vals[si]?.[ci] ?? 0) > 0).lastIndexOf(true);\n let below = horizontal ? 0 : h;\n return series.map((s, si) => {\n const val = vals[si]?.[ci] ?? 0;\n const dim = (focus && focus !== s.id ? 0.3 : 1) * (isPartial(ci) ? 0.5 : 1);\n if (horizontal) {\n const x0 = stacked ? Math.round(v(acc)) : 0;\n acc += val;\n const len = Math.max(val > 0 ? 2 : 0, Math.round(v(stacked ? acc : val)) - x0);\n const y = Math.round(center - barW / 2);\n return <rect key={s.id} x={x0} y={y} width={len} height={barW} rx={Math.min(4, barW / 2)} fill={color(s)} opacity={dim} />;\n }\n if (stacked) {\n acc += val;\n const top = Math.round(v(acc));\n const first = below === h;\n const bottom = first ? below : below - GAP;\n below = top;\n const bh = bottom - top;\n if (val <= 0 || bh <= 0) return null;\n return <path key={s.id} d={roundedTop(start, top, barW, bh, si === lastVisible ? 4 : 0)} fill={color(s)} opacity={dim} />;\n }\n const top = Math.round(v(val));\n const bh = Math.max(val > 0 ? 2 : 0, h - top);\n return <path key={s.id} d={roundedTop(start + si * (barW + 4), h - bh, barW, bh, 4)} fill={color(s)} opacity={dim} />;\n });\n })()}\n <rect\n x={horizontal ? -M.left : b - gap}\n y={horizontal ? b - gap : 0}\n width={horizontal ? size.width : band.step()}\n height={horizontal ? band.step() : h}\n fill=\"transparent\"\n onPointerMove={(e) => {\n if (quiet) return;\n const r = (e.currentTarget.ownerSVGElement ?? e.currentTarget).getBoundingClientRect();\n setHover({ i: ci, y: Math.round(e.clientY - r.top) });\n }}\n onPointerLeave={() => setHover(null)}\n />\n {horizontal ? (\n <>\n <text x={-12} y={b + band.bandwidth() / 2} dy=\"0.32em\" textAnchor=\"end\" fill=\"var(--k-text-secondary)\" fontSize={13} fontWeight={500}>\n {c}\n </text>\n <text\n x={Math.round(v(stacked ? (totals[ci] ?? 0) : (vals[0]?.[ci] ?? 0))) + 10}\n y={b + band.bandwidth() / 2}\n dy=\"0.32em\"\n {...AXIS.label}\n fill=\"var(--k-text-secondary)\"\n >\n {formatValue(stacked ? (totals[ci] ?? 0) : (series[0]?.values[ci] ?? 0))}\n </text>\n </>\n ) : (\n shown.has(ci) && (\n <text x={b + band.bandwidth() / 2} y={h + 20} textAnchor=\"middle\" {...AXIS.label}>\n {axisLabels?.[ci] ?? c}\n </text>\n )\n )}\n </g>\n );\n })}\n {!horizontal && <line x2={w} y1={h + 0.5} y2={h + 0.5} {...AXIS.baseline} />}\n </g>\n </svg>\n )}\n {active !== null && size.width > 0 && (\n <ChartTooltip {...anchor(active)} width={size.width} visible heading={heading(active)} rows={rowsFor(active)} />\n )}\n <ChartLive>{keys.index !== null && !quiet ? liveLine(heading(keys.index), rowsFor(keys.index), t) : null}</ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") BarChart.displayName = \"BarChart\";\n\nfunction roundedTop(x: number, y: number, w: number, h: number, r: number) {\n const rr = Math.min(r, w / 2, h);\n if (rr <= 0) return `M${x} ${y}h${w}v${h}h${-w}z`;\n return `M${x} ${y + h}V${y + rr}Q${x} ${y} ${x + rr} ${y}H${x + w - rr}Q${x + w} ${y} ${x + w} ${y + rr}V${y + h}z`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bar.js","names":["_Fragment","cn","useUiText","wholeTicks","useSize","useChartKeys","edgeColor","useTweened","tickLabel","seriesColors","liveLine","labelWidth","ChartTooltip","ChartFrame","axisLabelIndexes","ChartLive","Legend","AXIS","readableTicks","scaleLinear","hasPoints","fitLabel","compactAxis","onlyZero","finite","valueExtent","axisRoom","Fragment$1","KAESO_BAR_CHART_VARIANTS","KAESO_BAR_CHART_DEFAULT_VARIANTS","GAP","PAD","CATEGORY_FONT","stackSpans","spans","values","sign","acc","raw","v","i","a","at","len","r","k","gap","debt","l","big","dir","edge","start","end","barPath","w","h","rr","round","x","y","X","Y","BarChart","ariaLabel","state","t","format","formatValue","formatNumber","write","box","size","hover","setHover","useState","focus","setFocus","hidden","setHidden","horizontal","layout","stacked","shown","series","s","flat","categories","ci","allHidden","empty","sums","extent","axis","niceLo","niceHi","drawn","lo","hi","vals","si","palette","color","axisLabel","ticks","total","known","n","valueLabel","widestCategory","c","cap","M","height","band","scaleBand","scale","p","zero","grouped","inner","MAX","barW","groupW","centers","labelled","axisLabels","dates","lastCategory","isPartial","partial","heading","name","table","quiet","keys","active","highlight","totals","sv","barEnd","barTop","anchor","b","rowTop","widestValue","lit","center","rowsFor","value","shares","formatPercent","toggle","next","id","mark","fill","part","key","className","tick","outer","ids","sp","radius","val","isOuter"],"sources":["../../../src/components/charts/bar.tsx"],"sourcesContent":["import { forwardRef, useState } from \"react\";\nimport { scaleBand } from \"d3-scale\";\nimport { radius } from \"@logicplanes/kaeso-tokens\";\nimport { scaleLinear } from \"./linear-scale.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n axisLabelIndexes,\n type AxisDate,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n labelWidth,\n Legend,\n liveLine,\n seriesColors,\n readableTicks,\n tickLabel,\n useChartKeys,\n useSize,\n useTweened,\n wholeTicks,\n type ChartState,\n} from \"./core.js\";\nimport { axisRoom, compactAxis, finite, onlyZero, fitLabel, hasPoints, valueExtent } from \"./domain.js\";\nimport { edgeColor } from \"./marks.js\";\n\nexport const KAESO_BAR_CHART_VARIANTS = {\n layout: {\n grouped: { classes: \"\" },\n stacked: { classes: \"\" },\n horizontal: { classes: \"\" },\n },\n} as const;\nexport const KAESO_BAR_CHART_DEFAULT_VARIANTS = { layout: \"grouped\" } as const;\n\nexport interface BarSeries {\n id: string;\n label: string;\n values: number[];\n color?: string | undefined;\n}\n\nexport interface BarChartProps extends ChartState {\n categories: string[];\n series: BarSeries[];\n layout?: keyof typeof KAESO_BAR_CHART_VARIANTS.layout | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n highlight?: number | undefined;\n axisLabels?: string[] | undefined;\n dates?: readonly AxisDate[] | undefined;\n shares?: boolean | undefined;\n partial?: { first?: boolean | undefined; last?: boolean | undefined; ongoing?: boolean | undefined } | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nconst GAP = 2;\nconst PAD = 8;\nconst CATEGORY_FONT = 13;\n\ntype Span = { from: number; to: number };\n\nfunction stackSpans(values: number[], at: (n: number) => number, gap: number): (Span | null)[] {\n const spans: (Span | null)[] = values.map(() => null);\n for (const sign of [1, -1]) {\n let acc = 0;\n const idx = values.map((v, i) => (Number.isFinite(v) && v * sign > 0 ? i : -1)).filter((i) => i >= 0);\n const raw = idx.map((i) => {\n const a = at(acc);\n acc += values[i]!;\n return { i, a, b: at(acc) };\n });\n const len = raw.map((r, k) => Math.abs(r.b - r.a) - (k > 0 ? gap : 0));\n let debt = 0;\n len.forEach((l, k) => {\n if (l < 2) {\n debt += 2 - l;\n len[k] = 2;\n }\n });\n if (debt > 0) {\n const big = len.indexOf(Math.max(...len));\n if (big >= 0) len[big] = Math.max(2, len[big]! - debt);\n }\n const dir = raw.length ? Math.sign(raw[raw.length - 1]!.b - raw[0]!.a) || 1 : 1;\n let edge = raw[0]?.a ?? 0;\n raw.forEach((r, k) => {\n const start = k > 0 ? edge + dir * gap : edge;\n const end = start + dir * len[k]!;\n spans[r.i] = { from: start, to: end };\n edge = end;\n });\n }\n return spans;\n}\n\nfunction barPath(x: number, y: number, w: number, h: number, r: number, round: \"top\" | \"bottom\" | \"left\" | \"right\" | \"none\") {\n if (w <= 0 || h <= 0) return \"\";\n const rr = Math.min(r, round === \"left\" || round === \"right\" ? h / 2 : w / 2, round === \"left\" || round === \"right\" ? w : h);\n if (rr <= 0 || round === \"none\") return `M${x} ${y}h${w}v${h}h${-w}z`;\n const X = x + w;\n const Y = y + h;\n switch (round) {\n case \"top\":\n return `M${x} ${Y}V${y + rr}Q${x} ${y} ${x + rr} ${y}H${X - rr}Q${X} ${y} ${X} ${y + rr}V${Y}z`;\n case \"bottom\":\n return `M${x} ${y}V${Y - rr}Q${x} ${Y} ${x + rr} ${Y}H${X - rr}Q${X} ${Y} ${X} ${Y - rr}V${y}z`;\n case \"right\":\n return `M${x} ${y}H${X - rr}Q${X} ${y} ${X} ${y + rr}V${Y - rr}Q${X} ${Y} ${X - rr} ${Y}H${x}z`;\n case \"left\":\n return `M${X} ${y}H${x + rr}Q${x} ${y} ${x} ${y + rr}V${Y - rr}Q${x} ${Y} ${x + rr} ${Y}H${X}z`;\n }\n}\n\nexport const BarChart = /* @__PURE__ */ forwardRef<HTMLDivElement, BarChartProps>(function BarChart(\n {\n categories,\n series,\n layout = \"grouped\",\n height = 240,\n formatValue,\n highlight,\n axisLabels,\n dates,\n shares = true,\n partial,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const format = formatValue ?? ((v: number) => formatNumber(v));\n const write = (v: number) => (Number.isFinite(v) ? format(v) : \"–\");\n const [box, size] = useSize<HTMLDivElement>();\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const [focus, setFocus] = useState<string | null>(null);\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n const horizontal = layout === \"horizontal\";\n const stacked = layout === \"stacked\";\n const shown = series.filter((s) => !hidden.has(s.id));\n const flat = shown.flatMap((s) => categories.map((_, ci) => s.values[ci] ?? NaN));\n const allHidden = series.length > 0 && shown.length === 0;\n const empty = state.empty ?? (allHidden || categories.length === 0 || !hasPoints(flat));\n const sums = (sign: number) =>\n categories.map((_, ci) => shown.reduce((a, s) => a + (Number.isFinite(s.values[ci]) && (s.values[ci] ?? 0) * sign > 0 ? s.values[ci]! : 0), 0));\n const extent = valueExtent(stacked ? [...sums(1), ...sums(-1)] : flat);\n const axis = scaleLinear().domain(extent).nice(4);\n const [niceLo = 0, niceHi = 1] = axis.domain();\n const drawn = useTweened([...flat.map((v) => (Number.isFinite(v) ? v : 0)), niceLo, niceHi], !!state.loading);\n const lo = drawn[drawn.length - 2] ?? niceLo;\n const hi = drawn[drawn.length - 1] ?? niceHi;\n const vals = shown.map((_, si) => categories.map((_, ci) => drawn[si * categories.length + ci] ?? 0));\n const palette = seriesColors(series.map((s) => s.id));\n const color = (s: BarSeries) => s.color ?? palette.get(s.id)!;\n const axisLabel = tickLabel(formatValue ?? compactAxis);\n const ticks = empty ? [] : onlyZero(flat) ? [0] : wholeTicks(readableTicks(axis, axisLabel), finite(flat)).filter((v) => v >= lo - 1e-9 && v <= hi + 1e-9);\n const total = (ci: number) => {\n const known = finite(shown.map((s) => s.values[ci] ?? NaN));\n return known.length ? known.reduce((a, n) => a + n, 0) : NaN;\n };\n const valueLabel = (ci: number, si = 0) => write(stacked ? total(ci) : (shown[si]?.values[ci] ?? NaN));\n const widestCategory = Math.max(0, ...categories.map((c) => labelWidth(c))) * (CATEGORY_FONT / AXIS.label.fontSize);\n const cap = size.width ? size.width * 0.4 : Infinity;\n const M = horizontal\n ? {\n top: 0,\n right: axisRoom(\n categories.flatMap((_, ci) => (stacked ? [valueLabel(ci)] : shown.map((_, si) => valueLabel(ci, si)))),\n { gap: 10, min: 40, max: cap },\n ),\n bottom: 0,\n left: Math.round(Math.min(160, cap, Math.max(48, widestCategory + 12 + 4))),\n }\n : { top: 8, right: axisRoom(ticks.map(axisLabel), { max: cap }), bottom: 28, left: 0 };\n const w = Math.max(0, size.width - M.left - M.right);\n const h = Math.max(0, height - M.top - M.bottom);\n const band = scaleBand<string>()\n .domain(categories)\n .range(horizontal ? [0, h] : [0, w])\n .paddingInner(0.24)\n .paddingOuter(0.12);\n axis.range(horizontal ? [0, w] : [h, 0]);\n const scale = axis.copy().domain([lo, hi === lo ? lo + 1 : hi]);\n const v = (n: number) => {\n const p = scale(n);\n return horizontal ? Math.max(0, Math.min(w, p)) : Math.max(0, Math.min(h, p));\n };\n const zero = Math.round(v(0));\n const grouped = !stacked && shown.length > 1;\n const inner = scaleBand<string>()\n .domain(shown.map((s) => s.id))\n .range([0, band.bandwidth()])\n .paddingInner(0.12);\n const MAX = horizontal ? 20 : stacked || shown.length <= 1 ? 40 : 20;\n const barW = Math.max(4, Math.min(MAX, Math.round(grouped ? inner.bandwidth() : band.bandwidth())));\n const groupW = grouped ? shown.length * barW + (shown.length - 1) * 4 : barW;\n const centers = [categories[0], categories[categories.length - 1]].map((c) => (c === undefined ? 0 : (band(c) ?? 0) + band.bandwidth() / 2));\n const labelled = new Set(\n horizontal\n ? []\n : axisLabelIndexes(\n categories.map((c, ci) => axisLabels?.[ci] ?? c),\n band.step(),\n { start: M.left + centers[0]!, end: w - centers[1]! + M.right },\n dates,\n ),\n );\n const lastCategory = categories.length - 1;\n const isPartial = (ci: number) => (!!(partial?.last || partial?.ongoing) && ci === lastCategory) || (!!partial?.first && ci === 0);\n const heading = (ci: number) => {\n const name = categories[ci] ?? \"\";\n if (partial?.ongoing && ci === lastCategory) return t(\"chart.soFar\", \"{heading}, so far\", { heading: name });\n return isPartial(ci) ? t(\"chart.partial\", \"{heading}, partial\", { heading: name }) : name;\n };\n const table = {\n columns: [t(\"barChart.category\", \"Category\"), ...series.map((s) => s.label)],\n rows: categories.map((_, ci) => [heading(ci), ...series.map((s) => write(s.values[ci] ?? NaN))]),\n };\n const quiet = !!state.loading || empty || !!state.error;\n const keys = useChartKeys(quiet ? 0 : categories.length, horizontal ? { vertical: true, start: 0 } : {});\n const active = quiet ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < categories.length ? highlight : null));\n const totals = categories.map((_, ci) => finite(shown.map((s) => s.values[ci] ?? NaN)).reduce((a, n) => a + Math.abs(n), 0));\n const spans = categories.map((_, ci) =>\n stacked\n ? stackSpans(\n vals.map((sv) => sv[ci] ?? 0),\n v,\n GAP,\n )\n : null,\n );\n const barEnd = (ci: number) => {\n if (stacked) return Math.max(zero, ...(spans[ci] ?? []).map((s) => (s ? Math.max(s.from, s.to) : zero)));\n return Math.max(zero, ...vals.map((sv) => v(sv[ci] ?? 0)));\n };\n const barTop = (ci: number) => {\n if (stacked) return Math.min(zero, ...(spans[ci] ?? []).map((s) => (s ? Math.min(s.from, s.to) : zero)));\n return Math.min(zero, ...vals.map((sv) => v(sv[ci] ?? 0)));\n };\n const anchor = (ci: number) => {\n const b = Math.round(band(categories[ci]!) ?? 0);\n if (horizontal) {\n const rowTop = M.top + Math.round(b + band.bandwidth() / 2 - groupW / 2 - PAD);\n const widestValue = Math.max(0, ...(stacked ? [valueLabel(ci)] : shown.map((_, si) => valueLabel(ci, si))).map(labelWidth));\n return { x: M.left + Math.round(barEnd(ci) + 10 + widestValue), y: rowTop + 24 };\n }\n const lit = Math.min(band.bandwidth(), groupW + PAD * 2);\n const center = M.left + b + band.bandwidth() / 2;\n return {\n x: Math.round(center + lit / 2) - 8,\n xLeft: Math.round(center - lit / 2) + 8,\n y: hover && hover.i === ci ? hover.y : M.top + Math.round(barTop(ci)),\n };\n };\n const rowsFor = (ci: number) =>\n shown.map((s) => {\n const value = s.values[ci] ?? NaN;\n return {\n id: s.id,\n label: s.label,\n color: color(s),\n value: write(value),\n ...(shares && shown.length > 1 && totals[ci] && Number.isFinite(value)\n ? { share: formatPercent(Math.round((Math.abs(value) / (totals[ci] ?? 1)) * 100) / 100, 0) }\n : {}),\n };\n });\n const toggle = (id: string) => {\n const next = new Set(hidden);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n setHidden(next);\n };\n const mark = (s: BarSeries, ci: number, d: string, key: string) => {\n const fill = color(s);\n const edge = edgeColor(fill);\n const part = isPartial(ci);\n return (\n <path\n key={key}\n d={d}\n fill={fill}\n className=\"opacity-motion\"\n opacity={focus && focus !== s.id ? 0.3 : 1}\n {...(part\n ? { fillOpacity: 0.32, stroke: edge ?? fill, strokeWidth: 1.5, strokeDasharray: \"4 4\", \"data-partial\": \"\" }\n : edge\n ? { stroke: edge, strokeWidth: 1 }\n : {})}\n />\n );\n };\n return (\n <div ref={ref} className={cn(\"min-w-0\", className)}>\n <ChartFrame\n label={ariaLabel}\n height={height}\n table={table}\n state={{\n ...state,\n empty,\n ...(allHidden && !state.empty ? { emptyText: t(\"chart.allHidden\", \"Every series is hidden. Choose one in the legend to show it.\") } : {}),\n }}\n legend={\n series.length > 1 ? (\n <Legend items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))} hidden={hidden} onToggle={toggle} onHover={setFocus} />\n ) : undefined\n }\n >\n <div ref={box} role=\"group\" aria-label={ariaLabel} {...keys.props} className=\"absolute inset-0 rounded-cell focus-ring\">\n {size.width > 0 && (\n <svg width={size.width} height={height} className=\"block overflow-visible\" role=\"presentation\">\n <g transform={`translate(${M.left},${M.top})`}>\n {!horizontal &&\n ticks.map((tick) => (\n <g key={tick} transform={`translate(0,${Math.round(v(tick)) + 0.5})`}>\n {tick !== 0 && <line x2={w} {...AXIS.grid} />}\n <text x={w + 12} dy=\"0.32em\" {...AXIS.label}>\n {axisLabel(tick)}\n </text>\n </g>\n ))}\n {!empty &&\n categories.map((c, ci) => {\n const b = Math.round(band(c) ?? 0);\n const gap = Math.round((band.step() - band.bandwidth()) / 2);\n const lit = Math.min(band.bandwidth(), groupW + PAD * 2);\n const center = b + band.bandwidth() / 2;\n const start = Math.round(center - groupW / 2);\n const outer = (sign: number) => {\n const ids = spans[ci]?.map((sp, si) => (sp && Math.sign(vals[si]?.[ci] ?? 0) === sign ? si : -1)).filter((si) => si >= 0) ?? [];\n return ids[ids.length - 1];\n };\n return (\n <g key={c}>\n <rect\n aria-hidden\n className=\"opacity-motion\"\n opacity={active === ci ? 1 : 0}\n fill=\"var(--k-fill-1)\"\n rx={parseFloat(radius.item)}\n {...(horizontal\n ? { x: -M.left, y: Math.round(center - groupW / 2 - PAD), width: size.width, height: groupW + PAD * 2 }\n : { x: Math.round(center - lit / 2), y: 0, width: lit, height: h })}\n />\n {shown.map((s, si) => {\n const val = vals[si]?.[ci] ?? 0;\n if (!Number.isFinite(s.values[ci] ?? NaN) || val === 0) return null;\n if (stacked) {\n const sp = spans[ci]?.[si];\n if (!sp) return null;\n const a = Math.min(sp.from, sp.to);\n const len = Math.abs(sp.to - sp.from);\n const isOuter = si === outer(Math.sign(val));\n if (horizontal) {\n return mark(\n s,\n ci,\n barPath(a, Math.round(center - barW / 2), len, barW, 4, isOuter ? (val > 0 ? \"right\" : \"left\") : \"none\"),\n s.id,\n );\n }\n return mark(s, ci, barPath(start, a, barW, len, 4, isOuter ? (val > 0 ? \"top\" : \"bottom\") : \"none\"), s.id);\n }\n const end = v(val);\n const len = Math.max(2, Math.abs(end - zero));\n if (horizontal) {\n const y = Math.round(center - groupW / 2 + si * (barW + 4));\n const x = val > 0 ? zero : zero - len;\n return mark(s, ci, barPath(x, y, len, barW, 4, val > 0 ? \"right\" : \"left\"), s.id);\n }\n const x = start + si * (barW + 4);\n const y = val > 0 ? zero - len : zero;\n return mark(s, ci, barPath(x, y, barW, len, 4, val > 0 ? \"top\" : \"bottom\"), s.id);\n })}\n <rect\n x={horizontal ? -M.left : b - gap}\n y={horizontal ? b - gap : 0}\n width={horizontal ? size.width : band.step()}\n height={horizontal ? band.step() : h}\n fill=\"transparent\"\n onPointerMove={(e) => {\n if (quiet) return;\n const r = (e.currentTarget.ownerSVGElement ?? e.currentTarget).getBoundingClientRect();\n setHover({ i: ci, y: Math.round(e.clientY - r.top) });\n }}\n onPointerLeave={() => setHover(null)}\n />\n {horizontal && (\n <>\n <text x={-12} y={center} dy=\"0.32em\" textAnchor=\"end\" fill=\"var(--k-text-secondary)\" fontSize={CATEGORY_FONT} fontWeight={500}>\n {fitLabel(c, M.left - 12, CATEGORY_FONT)}\n <title>{c}</title>\n </text>\n {(stacked ? [0] : shown.map((_, si) => si)).map((si) => {\n const raw = stacked ? total(ci) : (shown[si]?.values[ci] ?? NaN);\n const end = stacked\n ? raw < 0\n ? Math.min(zero, ...(spans[ci] ?? []).map((sp) => (sp ? Math.min(sp.from, sp.to) : zero)))\n : barEnd(ci)\n : v(vals[si]?.[ci] ?? 0);\n const y = stacked ? center : Math.round(center - groupW / 2 + si * (barW + 4) + barW / 2);\n return (\n <text\n key={si}\n x={raw < 0 ? Math.round(end) - 10 : Math.round(Math.max(end, zero)) + 10}\n y={y}\n dy=\"0.32em\"\n textAnchor={raw < 0 ? \"end\" : \"start\"}\n {...AXIS.label}\n fill=\"var(--k-text-secondary)\"\n >\n {valueLabel(ci, si)}\n </text>\n );\n })}\n </>\n )}\n </g>\n );\n })}\n {!horizontal &&\n categories.map((c, ci) =>\n labelled.has(ci) ? (\n <text key={c} x={(band(c) ?? 0) + band.bandwidth() / 2} y={h + 20} textAnchor=\"middle\" {...AXIS.label}>\n {axisLabels?.[ci] ?? c}\n </text>\n ) : null,\n )}\n {horizontal ? (\n !empty && lo < 0 && <line x1={zero + 0.5} x2={zero + 0.5} y2={h} {...AXIS.baseline} />\n ) : (\n <line x2={w} y1={zero + 0.5} y2={zero + 0.5} {...AXIS.baseline} />\n )}\n </g>\n </svg>\n )}\n {active !== null && size.width > 0 && (\n <ChartTooltip {...anchor(active)} width={size.width} visible heading={heading(active)} rows={rowsFor(active)} />\n )}\n <ChartLive>{keys.index !== null && !quiet ? liveLine(heading(keys.index), rowsFor(keys.index), t) : null}</ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") BarChart.displayName = \"BarChart\";\n"],"mappings":"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"}
@@ -1,19 +1,20 @@
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, n } from "../../chunks/context-BELWW79w.js";
4
4
  import { formatNumber as r, formatPercent as i } from "../../format.js";
5
- import { n as a } from "../../chunks/use-layout-width-CbSDbRb0.js";
6
- import { O as o, b as s, c, n as l, s as u } from "../../chunks/core-BYns5ytV.js";
7
- import { forwardRef as d, useRef as f, useState as p } from "react";
8
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
- import { arc as g, pie as _ } from "d3-shape";
5
+ import { r as a } from "../../chunks/text-DkKdTVUf.js";
6
+ import { n as o } from "../../chunks/use-layout-width-CbSDbRb0.js";
7
+ import { M as s, O as c, b as l, c as u, n as d, s as f } from "../../chunks/core-CmK-8ObW.js";
8
+ import { forwardRef as p, useLayoutEffect as m, useRef as h, useState as g } from "react";
9
+ import { jsx as _, jsxs as v } from "react/jsx-runtime";
10
+ import { arc as y, pie as b } from "d3-shape";
10
11
  //#region src/components/charts/donut.tsx
11
- var v = { size: {
12
+ var x = { size: {
12
13
  md: { classes: "size-160" },
13
14
  sm: { classes: "size-140" },
14
15
  lg: { classes: "size-180" }
15
- } }, y = { size: "md" };
16
- function b(e, t = .02, r = n) {
16
+ } }, S = { size: "md" };
17
+ function C(e, t = .02, r = n) {
17
18
  let i = e.reduce((e, t) => e + t.value, 0) || 1, a = e.filter((e) => e.value > 0 && e.value / i < t), o = e.filter((e) => e.value / i >= t);
18
19
  if (a.length < 2) return [...o, ...a].sort((t, n) => e.indexOf(t) - e.indexOf(n));
19
20
  let s = a.reduce((e, t) => e + t.value, 0);
@@ -24,11 +25,11 @@ function b(e, t = .02, r = n) {
24
25
  color: "var(--k-text-tertiary)"
25
26
  }];
26
27
  }
27
- function x(e, t, r = n) {
28
+ function w(e, t, r = n) {
28
29
  let a = t ? e / t : 0;
29
30
  return a > 0 && a < .005 ? r("donut.underOnePercent", "<1%") : i(a, 0);
30
31
  }
31
- function S(e, t = n) {
32
+ function T(e, t = n) {
32
33
  let r = e.reduce((e, t) => e + t, 0);
33
34
  if (!r) return e.map(() => i(0, 0));
34
35
  let a = e.map((e) => e / r * 100), o = a.map(Math.floor), s = 100 - o.reduce((e, t) => e + t, 0), c = a.map((e, t) => ({
@@ -41,94 +42,137 @@ function S(e, t = n) {
41
42
  }
42
43
  return o.map((n, r) => n === 0 && (e[r] ?? 0) > 0 ? t("donut.underOnePercent", "<1%") : i(n / 100, 0));
43
44
  }
44
- function C(e) {
45
- let [t, n] = p(e);
45
+ function E(e) {
46
+ let [t, n] = g(e);
46
47
  return t !== e && n(e), t !== e;
47
48
  }
48
- var w = /* @__PURE__ */ d(function({ slices: n, size: u = "md", total: d, totalLabel: v, formatValue: y = (e) => r(e), className: x, "aria-label": w, ...T }, E) {
49
- let D = t(), O = {
49
+ var D = 8;
50
+ function O(e, t) {
51
+ if (e.length <= D) return e;
52
+ let n = e.filter((e) => e.id !== "__other").slice(0, 7), r = e.filter((e) => !n.includes(e)).reduce((e, t) => e + t.value, 0);
53
+ return [...n, {
54
+ id: "__other",
55
+ label: t("donut.other", "Other"),
56
+ value: r,
57
+ color: "var(--k-text-tertiary)"
58
+ }];
59
+ }
60
+ var k = [
61
+ "text-title",
62
+ "text-title-sm",
63
+ "text-body-lg"
64
+ ];
65
+ function A(e, t, n) {
66
+ let r = h(null), [i, a] = g({
67
+ text: e,
68
+ room: t,
69
+ at: n
70
+ }), o = i.text === e && i.room === t ? i : {
71
+ text: e,
72
+ room: t,
73
+ at: n
74
+ };
75
+ return o !== i && a(o), m(() => {
76
+ let n = r.current;
77
+ !n || o.at >= k.length - 1 || n.scrollWidth > t && a({
78
+ text: e,
79
+ room: t,
80
+ at: o.at + 1
81
+ });
82
+ }, [
83
+ o.at,
84
+ t,
85
+ e
86
+ ]), [r, k[o.at]];
87
+ }
88
+ var j = /* @__PURE__ */ p(function({ slices: n, size: s = "md", total: f, totalLabel: p, formatValue: m = (e) => r(e), className: x, "aria-label": S, ...w }, D) {
89
+ let k = t(), j = {
50
90
  sm: 140,
51
91
  md: 160,
52
92
  lg: 180
53
- }[u], k = b(n, .02, D), A = k.reduce((e, t) => e + t.value, 0), j = C(k.map((e) => e.id).join("\0")), M = o(k.map((e) => e.value), !!T.loading || j), [N, P] = p(null), F = O / 2 - 7, I = _().sort(null).padAngle(3 / F).value((e) => e)(M), L = g().innerRadius(O / 2 - 14).outerRadius(O / 2).padRadius(F), R = s(k.map((e) => e.id)), z = (e) => e.color ?? R.get(e.id), B = S(k.map((e) => e.value), D), V = {
93
+ }[s], M = O(C(n, .02, k), k), N = M.reduce((e, t) => e + t.value, 0), P = w.empty ?? N === 0, F = E(M.map((e) => e.id).join("\0")), I = c(M.map((e) => e.value), !!w.loading || F), [L, R] = g(null), z = j / 2 - 7, B = b().sort(null).padAngle(3 / z).value((e) => e)(I), V = y().innerRadius(j / 2 - 14).outerRadius(j / 2).padRadius(z), H = l(M.map((e) => e.id)), U = (e) => e.color ?? H.get(e.id), W = T(M.map((e) => e.value), k), G = {
54
94
  columns: [
55
- D("donut.slice", "Slice"),
56
- D("donut.value", "Value"),
57
- D("donut.share", "Share")
95
+ k("donut.slice", "Slice"),
96
+ k("donut.value", "Value"),
97
+ k("donut.share", "Share")
58
98
  ],
59
- rows: k.map((e) => [
99
+ rows: M.map((e) => [
60
100
  e.label,
61
- y(e.value),
62
- i(A ? e.value / A : 0)
101
+ m(e.value),
102
+ i(N ? e.value / N : 0)
63
103
  ])
64
- }, H = f(null), U = a(H), W = !!U && U < O + 40 + 220;
65
- return /* @__PURE__ */ m("div", {
104
+ }, K = h(null), q = o(K), J = !!q && q < j + 40 + 220, [Y, X] = A(typeof f == "string" ? f : f === void 0 ? m(N) : "", j - 28 - 16, j >= 160 ? 0 : 1);
105
+ return /* @__PURE__ */ _("div", {
66
106
  ref: (e) => {
67
- H.current = e, typeof E == "function" ? E(e) : E && (E.current = e);
107
+ K.current = e, typeof D == "function" ? D(e) : D && (D.current = e);
68
108
  },
69
- className: e("min-w-0", x),
70
- children: /* @__PURE__ */ m(l, {
71
- label: w,
72
- height: W ? O + 24 + k.length * 32 : Math.max(O, k.length * 32),
73
- table: V,
109
+ className: e("w-full min-w-0", x),
110
+ children: /* @__PURE__ */ _(d, {
111
+ label: S,
112
+ height: J ? j + 24 + M.length * 32 : Math.max(j, M.length * 32),
113
+ table: G,
74
114
  state: {
75
- ...T,
76
- empty: T.empty ?? A === 0
115
+ ...w,
116
+ empty: P
77
117
  },
78
- children: /* @__PURE__ */ h("div", {
79
- className: e("flex h-full", W ? "flex-col items-center gap-24" : "items-center gap-40"),
80
- children: [/* @__PURE__ */ h("div", {
118
+ children: !P && /* @__PURE__ */ v("div", {
119
+ className: e("flex h-full", J ? "flex-col items-center gap-24" : "items-center gap-40"),
120
+ children: [/* @__PURE__ */ v("div", {
81
121
  className: "relative shrink-0",
82
122
  style: {
83
- width: O,
84
- height: O
123
+ width: j,
124
+ height: j
85
125
  },
86
- children: [/* @__PURE__ */ m("svg", {
87
- width: O,
88
- height: O,
126
+ children: [/* @__PURE__ */ _("svg", {
127
+ width: j,
128
+ height: j,
89
129
  role: "presentation",
90
- children: /* @__PURE__ */ m("g", {
91
- transform: `translate(${O / 2},${O / 2})`,
92
- children: I.map((e, t) => {
93
- let n = (e.endAngle - e.startAngle - e.padAngle) * F;
94
- return /* @__PURE__ */ m("path", {
95
- d: L.cornerRadius(Math.max(0, Math.min(7, n / 2)))(e) ?? "",
96
- fill: z(k[t]),
97
- opacity: N && N !== k[t].id ? .3 : 1,
130
+ children: /* @__PURE__ */ _("g", {
131
+ transform: `translate(${j / 2},${j / 2})`,
132
+ children: B.map((e, t) => {
133
+ let n = (e.endAngle - e.startAngle - e.padAngle) * z;
134
+ return /* @__PURE__ */ _("path", {
135
+ d: V.cornerRadius(Math.max(0, Math.min(7, n / 2)))(e) ?? "",
136
+ fill: U(M[t]),
137
+ opacity: L && L !== M[t].id ? .3 : 1,
98
138
  className: "opacity-motion"
99
- }, k[t].id);
139
+ }, M[t].id);
100
140
  })
101
141
  })
102
- }), /* @__PURE__ */ h("div", {
103
- className: "absolute inset-0 flex flex-col items-center justify-center gap-2",
104
- children: [/* @__PURE__ */ m("span", {
105
- className: e("font-semibold text-fg tabular", O >= 160 ? "text-title" : "text-title-sm"),
106
- children: d ?? y(A)
107
- }), /* @__PURE__ */ m("span", {
142
+ }), /* @__PURE__ */ v("div", {
143
+ className: "absolute inset-0 flex flex-col items-center justify-center gap-2 px-16 text-center",
144
+ children: [/* @__PURE__ */ _("span", {
145
+ ref: Y,
146
+ className: e("max-w-full font-semibold text-balance text-fg tabular wrap-anywhere", X),
147
+ children: f ?? m(N)
148
+ }), /* @__PURE__ */ _("span", {
108
149
  className: "text-caption font-medium text-fg-tertiary",
109
- children: v ?? D("donut.total", "Total")
150
+ children: p ?? k("donut.total", "Total")
110
151
  })]
111
152
  })]
112
- }), /* @__PURE__ */ m("ul", {
113
- className: e("flex min-w-0 flex-col", W ? "w-full" : "max-w-320 flex-1"),
114
- "aria-label": D("donut.legend", "Legend"),
115
- children: k.map((t, n) => /* @__PURE__ */ h("li", {
116
- onMouseEnter: () => P(t.id),
117
- onMouseLeave: () => P(null),
118
- className: e("flex h-32 items-center gap-10 rounded-item px-8 text-small transition-control hover:bg-fill-1", N && N !== t.id && "opacity-50"),
153
+ }), /* @__PURE__ */ _("ul", {
154
+ className: e("flex min-w-0 flex-col", J ? "w-full" : "min-w-160 max-w-320 flex-1"),
155
+ "aria-label": k("donut.legend", "Legend"),
156
+ children: M.map((t, n) => /* @__PURE__ */ v("li", {
157
+ onMouseEnter: () => R(t.id),
158
+ onMouseLeave: () => R(null),
159
+ className: e("flex h-32 items-center gap-10 text-small opacity-motion", L && L !== t.id && "opacity-50"),
119
160
  children: [
120
- /* @__PURE__ */ m(c, { color: z(t) }),
121
- /* @__PURE__ */ m("span", {
122
- className: "min-w-0 flex-1 truncate font-medium text-fg",
161
+ /* @__PURE__ */ _(u, { color: U(t) }),
162
+ /* @__PURE__ */ _(a, {
163
+ variant: "small",
164
+ weight: "medium",
165
+ truncate: !0,
166
+ className: "flex-1",
123
167
  children: t.label
124
168
  }),
125
- /* @__PURE__ */ m("span", {
169
+ /* @__PURE__ */ _("span", {
126
170
  className: "text-fg-secondary tabular",
127
- children: y(t.value)
171
+ children: m(t.value)
128
172
  }),
129
- /* @__PURE__ */ m("span", {
173
+ /* @__PURE__ */ _("span", {
130
174
  className: "w-40 text-right text-fg-tertiary tabular",
131
- children: B[n]
175
+ children: W[n]
132
176
  })
133
177
  ]
134
178
  }, t.id))
@@ -137,43 +181,44 @@ var w = /* @__PURE__ */ d(function({ slices: n, size: u = "md", total: d, totalL
137
181
  })
138
182
  });
139
183
  });
140
- process.env.NODE_ENV !== "production" && (w.displayName = "Donut");
141
- var T = w, E = { size: { md: { classes: "h-8" } } }, D = { size: "md" }, O = /* @__PURE__ */ d(function({ slices: n, formatValue: a = (e) => r(e), legend: o = !0, className: c, "aria-label": l }, d) {
142
- let f = t(), p = n.reduce((e, t) => e + t.value, 0) || 1, g = s(n.map((e) => e.id)), _ = (e) => e.color ?? g.get(e.id);
143
- return /* @__PURE__ */ h("div", {
144
- ref: d,
145
- className: e("flex flex-col gap-12", c),
146
- children: [/* @__PURE__ */ m("div", {
184
+ process.env.NODE_ENV !== "production" && (j.displayName = "Donut");
185
+ var M = j, N = { size: { md: { classes: "h-8" } } }, P = { size: "md" }, F = /* @__PURE__ */ p(function({ slices: n, formatValue: i = (e) => r(e), legend: a = !0, className: o, "aria-label": c }, u) {
186
+ let d = t(), p = n.reduce((e, t) => e + t.value, 0) || 1, m = l(n.map((e) => e.id)), h = (e) => e.color ?? m.get(e.id), g = T(n.map((e) => e.value), d);
187
+ return /* @__PURE__ */ v("div", {
188
+ ref: u,
189
+ className: e("flex flex-col gap-12", o),
190
+ children: [/* @__PURE__ */ _("div", {
147
191
  role: "img",
148
- "aria-label": f("shareBar.summary", "{label}: {shares}", {
149
- label: l,
150
- shares: n.map((e) => f("shareBar.share", "{label} {share}", {
192
+ "aria-label": d("shareBar.summary", "{label}: {shares}", {
193
+ label: c,
194
+ shares: n.map((e, t) => d("shareBar.valueShare", "{label} {value} ({share})", {
151
195
  label: e.label,
152
- share: i(e.value / p, 0)
153
- })).join(f("shareBar.listSeparator", ", "))
196
+ value: i(e.value),
197
+ share: g[t] ?? ""
198
+ })).join(d("shareBar.listSeparator", ", "))
154
199
  }),
155
- className: "flex h-8 w-full gap-2 overflow-hidden rounded-pill",
156
- children: n.filter((e) => e.value > 0).map((e) => /* @__PURE__ */ m("span", {
157
- className: "h-full min-w-2 first:rounded-l-pill last:rounded-r-pill width-motion",
158
- style: {
159
- width: `${e.value / p * 100}%`,
160
- background: _(e)
161
- },
162
- title: f("shareBar.segment", "{label}: {value}", {
163
- label: e.label,
164
- value: a(e.value)
165
- })
166
- }, e.id))
167
- }), o && /* @__PURE__ */ m(u, { items: n.map((e) => ({
200
+ className: e("flex h-8 w-full gap-2 overflow-hidden rounded-pill", !n.some((e) => e.value > 0) && "bg-fill-2"),
201
+ children: n.filter((e) => e.value > 0).map((e) => {
202
+ let t = s(h(e));
203
+ return /* @__PURE__ */ _("span", {
204
+ className: "h-full min-w-2 data-mark first:rounded-l-pill last:rounded-r-pill width-motion",
205
+ style: {
206
+ width: `${e.value / p * 100}%`,
207
+ background: h(e),
208
+ ...t ? { boxShadow: `inset 0 0 0 1px ${t}` } : {}
209
+ }
210
+ }, e.id);
211
+ })
212
+ }), a && /* @__PURE__ */ _(f, { items: n.map((e, t) => ({
168
213
  id: e.id,
169
214
  label: e.label,
170
- color: _(e),
171
- value: i(e.value / p, 0)
215
+ color: h(e),
216
+ value: g[t]
172
217
  })) })]
173
218
  });
174
219
  });
175
- process.env.NODE_ENV !== "production" && (O.displayName = "ShareBar");
220
+ process.env.NODE_ENV !== "production" && (F.displayName = "ShareBar");
176
221
  //#endregion
177
- export { w as Donut, y as KAESO_DONUT_DEFAULT_VARIANTS, v as KAESO_DONUT_VARIANTS, D as KAESO_SHARE_BAR_DEFAULT_VARIANTS, E as KAESO_SHARE_BAR_VARIANTS, T as Ring, O as ShareBar, b as groupSmall, x as shareLabel, S as wholeShares };
222
+ export { j as Donut, S as KAESO_DONUT_DEFAULT_VARIANTS, x as KAESO_DONUT_VARIANTS, P as KAESO_SHARE_BAR_DEFAULT_VARIANTS, N as KAESO_SHARE_BAR_VARIANTS, M as Ring, F as ShareBar, C as groupSmall, w as shareLabel, T as wholeShares };
178
223
 
179
224
  //# sourceMappingURL=donut.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"donut.js","names":["d3pie","arc","d3arc","cn","useUiText","useLayoutWidth","useTweened","seriesColors","ChartFrame","Legend","KAESO_DONUT_VARIANTS","KAESO_DONUT_DEFAULT_VARIANTS","groupSmall","englishText","total","slices","a","s","small","min","big","b","rest","t","shareLabel","share","sum","value","formatPercent","wholeShares","values","v","exact","floors","left","order","i","f","useOtherData","seen","setSeen","useState","identity","Donut","formatNumber","ariaLabel","state","D","size","data","other","d","tween","focus","setFocus","mid","arcs","pie","arc$1","arc","palette","color","shares","table","formatValue","box","useRef","width","stacked","el","ref","className","len","totalLabel","Swatch","Ring","KAESO_SHARE_BAR_VARIANTS","KAESO_SHARE_BAR_DEFAULT_VARIANTS","ShareBar","legend"],"sources":["../../../src/components/charts/donut.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, type ReactNode } from \"react\";\nimport { arc as d3arc, pie as d3pie } from \"d3-shape\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { ChartFrame, Legend, Swatch, seriesColors, useTweened, type ChartState } from \"./core.js\";\n\nexport interface Slice {\n id: string;\n label: string;\n value: number;\n color?: string | undefined;\n}\n\nexport const KAESO_DONUT_VARIANTS = {\n size: {\n md: { classes: \"size-160\" },\n sm: { classes: \"size-140\" },\n lg: { classes: \"size-180\" },\n },\n} as const;\nexport const KAESO_DONUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport function groupSmall(slices: Slice[], min = 0.02, t: UiText = englishText): Slice[] {\n const total = slices.reduce((a, s) => a + s.value, 0) || 1;\n const small = slices.filter((s) => s.value > 0 && s.value / total < min);\n const big = slices.filter((s) => s.value / total >= min);\n if (small.length < 2) return [...big, ...small].sort((a, b) => slices.indexOf(a) - slices.indexOf(b));\n const rest = small.reduce((a, s) => a + s.value, 0);\n return [\n ...big,\n {\n id: \"__other\",\n label: t(\"donut.other\", \"Other\"),\n value: rest,\n color: \"var(--k-text-tertiary)\",\n },\n ];\n}\n\nexport function shareLabel(value: number, sum: number, t: UiText = englishText): string {\n const share = sum ? value / sum : 0;\n return share > 0 && share < 0.005 ? t(\"donut.underOnePercent\", \"<1%\") : formatPercent(share, 0);\n}\n\nexport function wholeShares(values: number[], t: UiText = englishText): string[] {\n const sum = values.reduce((a, v) => a + v, 0);\n if (!sum) return values.map(() => formatPercent(0, 0));\n const exact = values.map((v) => (v / sum) * 100);\n const floors = exact.map(Math.floor);\n let left = 100 - floors.reduce((a, v) => a + v, 0);\n const order = exact.map((e, i) => ({ i, r: e - Math.floor(e) })).sort((a, b) => b.r - a.r);\n for (const { i } of order) {\n if (left <= 0) break;\n floors[i] = (floors[i] ?? 0) + 1;\n left--;\n }\n return floors.map((f, i) => (f === 0 && (values[i] ?? 0) > 0 ? t(\"donut.underOnePercent\", \"<1%\") : formatPercent(f / 100, 0)));\n}\n\nfunction useOtherData(identity: string): boolean {\n const [seen, setSeen] = useState(identity);\n if (seen !== identity) setSeen(identity);\n return seen !== identity;\n}\n\nexport const Donut = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n slices: Slice[];\n size?: keyof typeof KAESO_DONUT_VARIANTS.size | undefined;\n total?: ReactNode | undefined;\n totalLabel?: ReactNode | undefined;\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n } & ChartState\n>(function Donut({ slices, size = \"md\", total, totalLabel, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, ...state }, ref) {\n const t = useUiText();\n const D = { sm: 140, md: 160, lg: 180 }[size];\n const STROKE = 14;\n const data = groupSmall(slices, 0.02, t);\n const sum = data.reduce((a, s) => a + s.value, 0);\n const other = useOtherData(data.map((d) => d.id).join(\"\\u0000\"));\n const tween = useTweened(\n data.map((d) => d.value),\n !!state.loading || other,\n );\n const [focus, setFocus] = useState<string | null>(null);\n const mid = D / 2 - STROKE / 2;\n const pie = d3pie<number>()\n .sort(null)\n .padAngle(3 / mid)\n .value((v) => v);\n const arcs = pie(tween);\n const arc = d3arc<{\n startAngle: number;\n endAngle: number;\n padAngle: number;\n }>()\n .innerRadius(D / 2 - STROKE)\n .outerRadius(D / 2)\n .padRadius(mid);\n const palette = seriesColors(data.map((d) => d.id));\n const color = (s: Slice) => s.color ?? palette.get(s.id)!;\n const shares = wholeShares(\n data.map((d) => d.value),\n t,\n );\n const table = {\n columns: [t(\"donut.slice\", \"Slice\"), t(\"donut.value\", \"Value\"), t(\"donut.share\", \"Share\")],\n rows: data.map((d) => [d.label, formatValue(d.value), formatPercent(sum ? d.value / sum : 0)]),\n };\n const box = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(box);\n const stacked = !!width && width < D + 40 + 220;\n return (\n <div\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n className={cn(\"min-w-0\", className)}\n >\n <ChartFrame\n label={ariaLabel}\n height={stacked ? D + 24 + data.length * 32 : Math.max(D, data.length * 32)}\n table={table}\n state={{ ...state, empty: state.empty ?? sum === 0 }}\n >\n <div className={cn(\"flex h-full\", stacked ? \"flex-col items-center gap-24\" : \"items-center gap-40\")}>\n <div className=\"relative shrink-0\" style={{ width: D, height: D }}>\n <svg width={D} height={D} role=\"presentation\">\n <g transform={`translate(${D / 2},${D / 2})`}>\n {arcs.map((a, i) => {\n const len = (a.endAngle - a.startAngle - a.padAngle) * mid;\n return (\n <path\n key={data[i]!.id}\n d={arc.cornerRadius(Math.max(0, Math.min(STROKE / 2, len / 2)))(a) ?? \"\"}\n fill={color(data[i]!)}\n opacity={focus && focus !== data[i]!.id ? 0.3 : 1}\n className=\"opacity-motion\"\n />\n );\n })}\n </g>\n </svg>\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2\">\n <span className={cn(\"font-semibold text-fg tabular\", D >= 160 ? \"text-title\" : \"text-title-sm\")}>{total ?? formatValue(sum)}</span>\n <span className=\"text-caption font-medium text-fg-tertiary\">{totalLabel ?? t(\"donut.total\", \"Total\")}</span>\n </div>\n </div>\n <ul className={cn(\"flex min-w-0 flex-col\", stacked ? \"w-full\" : \"max-w-320 flex-1\")} aria-label={t(\"donut.legend\", \"Legend\")}>\n {data.map((d, i) => (\n <li\n key={d.id}\n onMouseEnter={() => setFocus(d.id)}\n onMouseLeave={() => setFocus(null)}\n className={cn(\n \"flex h-32 items-center gap-10 rounded-item px-8 text-small transition-control hover:bg-fill-1\",\n focus && focus !== d.id && \"opacity-50\",\n )}\n >\n <Swatch color={color(d)} />\n <span className=\"min-w-0 flex-1 truncate font-medium text-fg\">{d.label}</span>\n <span className=\"text-fg-secondary tabular\">{formatValue(d.value)}</span>\n <span className=\"w-40 text-right text-fg-tertiary tabular\">{shares[i]}</span>\n </li>\n ))}\n </ul>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Donut.displayName = \"Donut\";\nexport const Ring = Donut;\n\nexport const KAESO_SHARE_BAR_VARIANTS = {\n size: { md: { classes: \"h-8\" } },\n} as const;\nexport const KAESO_SHARE_BAR_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport const ShareBar = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n slices: Slice[];\n formatValue?: ((v: number) => string) | undefined;\n legend?: boolean | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n }\n>(function ShareBar({ slices, formatValue = (v) => formatNumber(v), legend = true, className, \"aria-label\": ariaLabel }, ref) {\n const t = useUiText();\n const sum = slices.reduce((a, s) => a + s.value, 0) || 1;\n const palette = seriesColors(slices.map((s) => s.id));\n const color = (s: Slice) => s.color ?? palette.get(s.id)!;\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-12\", className)}>\n <div\n role=\"img\"\n aria-label={t(\"shareBar.summary\", \"{label}: {shares}\", {\n label: ariaLabel,\n shares: slices\n .map((s) => t(\"shareBar.share\", \"{label} {share}\", { label: s.label, share: formatPercent(s.value / sum, 0) }))\n .join(t(\"shareBar.listSeparator\", \", \")),\n })}\n className=\"flex h-8 w-full gap-2 overflow-hidden rounded-pill\"\n >\n {slices\n .filter((s) => s.value > 0)\n .map((s) => (\n <span\n key={s.id}\n className=\"h-full min-w-2 first:rounded-l-pill last:rounded-r-pill width-motion\"\n style={{\n width: `${(s.value / sum) * 100}%`,\n background: color(s),\n }}\n title={t(\"shareBar.segment\", \"{label}: {value}\", { label: s.label, value: formatValue(s.value) })}\n />\n ))}\n </div>\n {legend && (\n <Legend\n items={slices.map((s) => ({\n id: s.id,\n label: s.label,\n color: color(s),\n value: formatPercent(s.value / sum, 0),\n }))}\n />\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ShareBar.displayName = \"ShareBar\";\n"],"mappings":";;;;;;;;;;AAeA,IAAaU,IAAuB,EAClC,MAAM;CACJ,IAAI,EAAE,SAAS,WAAW;CAC1B,IAAI,EAAE,SAAS,WAAW;CAC1B,IAAI,EAAE,SAAS,WAAW;AAC5B,EACF,GACaC,IAA+B,EAAE,MAAM,KAAK;AAEzD,SAAgBC,EAAW,GAAiB,IAAM,KAAM,IAAYC,GAAsB;CACxF,IAAMC,IAAQC,EAAO,QAAQ,GAAG,MAAMC,IAAIC,EAAE,OAAO,CAAC,KAAK,GACnDC,IAAQH,EAAO,QAAQ,MAAME,EAAE,QAAQ,KAAKA,EAAE,QAAQH,IAAQK,CAAG,GACjEC,IAAML,EAAO,QAAQ,MAAME,EAAE,QAAQH,KAASK,CAAG;CACvD,IAAID,EAAM,SAAS,GAAG,OAAO,CAAC,GAAGE,GAAK,GAAGF,CAAK,CAAC,CAAC,MAAM,GAAG,MAAMH,EAAO,QAAQC,CAAC,IAAID,EAAO,QAAQM,CAAC,CAAC;CACpG,IAAMC,IAAOJ,EAAM,QAAQ,GAAG,MAAMF,IAAIC,EAAE,OAAO,CAAC;CAClD,OAAO,CACL,GAAGG,GACH;EACE,IAAI;EACJ,OAAOG,EAAE,eAAe,OAAO;EAC/B,OAAOD;EACP,OAAO;CACT,CACF;AACF;AAEA,SAAgBE,EAAW,GAAe,GAAa,IAAYX,GAAqB;CACtF,IAAMY,IAAQC,IAAMC,IAAQD,IAAM;CAClC,OAAOD,IAAQ,KAAKA,IAAQ,OAAQF,EAAE,yBAAyB,KAAK,IAAIK,EAAcH,GAAO,CAAC;AAChG;AAEA,SAAgBI,EAAY,GAAkB,IAAYhB,GAAuB;CAC/E,IAAMa,IAAMI,EAAO,QAAQ,GAAG,MAAMd,IAAIe,GAAG,CAAC;CAC5C,IAAI,CAACL,GAAK,OAAOI,EAAO,UAAUF,EAAc,GAAG,CAAC,CAAC;CACrD,IAAMI,IAAQF,EAAO,KAAK,MAAOC,IAAIL,IAAO,GAAG,GACzCO,IAASD,EAAM,IAAI,KAAK,KAAK,GAC/BE,IAAO,MAAMD,EAAO,QAAQ,GAAG,MAAMjB,IAAIe,GAAG,CAAC,GAC3CI,IAAQH,EAAM,KAAK,GAAG,OAAO;EAAE;EAAG,GAAG,IAAI,KAAK,MAAM,CAAC;CAAE,EAAE,CAAC,CAAC,MAAM,GAAG,MAAMX,EAAE,IAAIL,EAAE,CAAC;CACzF,KAAK,IAAM,EAAE,UAAOmB,GAAO;EACzB,IAAID,KAAQ,GAAG;EAEf,AADA,EAAOE,MAAMH,EAAOG,MAAM,KAAK,GAC/B;CACF;CACA,OAAOH,EAAO,KAAK,GAAG,MAAOI,MAAM,MAAMP,EAAOM,MAAM,KAAK,IAAI,EAAE,yBAAyB,KAAK,IAAIR,EAAcS,IAAI,KAAK,CAAC,CAAE;AAC/H;AAEA,SAASC,EAAa,GAA2B;CAC/C,IAAM,CAACC,GAAMC,KAAWC,EAASC,CAAQ;CAEzC,OADIH,MAASG,KAAUF,EAAQE,CAAQ,GAChCH,MAASG;AAClB;AAEA,IAAaC,IAAwB,kBAWnC,SAAe,EAAE,WAAQ,UAAO,MAAM,UAAO,eAAY,kBAAe,MAAMC,EAAab,CAAC,GAAG,cAAW,cAAcc,GAAW,GAAGC,KAAS,GAAK;CACpJ,IAAMvB,IAAInB,EAAU,GACd2C,IAAI;EAAE,IAAI;EAAK,IAAI;EAAK,IAAI;CAAI,EAAEC,IAElCC,IAAOrC,EAAWG,GAAQ,KAAMQ,CAAC,GACjCG,IAAMuB,EAAK,QAAQ,GAAG,MAAMjC,IAAIC,EAAE,OAAO,CAAC,GAC1CiC,IAAQZ,EAAaW,EAAK,KAAK,MAAME,EAAE,EAAE,CAAC,CAAC,KAAK,IAAQ,CAAC,GACzDC,IAAQ9C,EACZ2C,EAAK,KAAK,MAAME,EAAE,KAAK,GACvB,CAAC,CAACL,EAAM,WAAWI,CACrB,GACM,CAACG,GAAOC,KAAYb,EAAwB,IAAI,GAChDc,IAAMR,IAAI,IAAI,GAKdS,IAJMxD,EAAc,CAAC,CACxB,KAAK,IAAI,CAAC,CACV,SAAS,IAAIuD,CAAG,CAAC,CACjB,OAAO,MAAMxB,CACH,CAAA,CAAIqB,CAAK,GAChBnD,IAAMC,EAIT,CAAC,CACD,YAAY6C,IAAI,IAAI,EAAM,CAAC,CAC3B,YAAYA,IAAI,CAAC,CAAC,CAClB,UAAUQ,CAAG,GACVK,IAAUrD,EAAa0C,EAAK,KAAK,MAAME,EAAE,EAAE,CAAC,GAC5CU,KAAS,MAAa5C,EAAE,SAAS2C,EAAQ,IAAI3C,EAAE,EAAE,GACjD6C,IAASjC,EACboB,EAAK,KAAK,MAAME,EAAE,KAAK,GACvB5B,CACF,GACMwC,IAAQ;EACZ,SAAS;GAACxC,EAAE,eAAe,OAAO;GAAGA,EAAE,eAAe,OAAO;GAAGA,EAAE,eAAe,OAAO;EAAC;EACzF,MAAM0B,EAAK,KAAK,MAAM;GAACE,EAAE;GAAOa,EAAYb,EAAE,KAAK;GAAGvB,EAAcF,IAAMyB,EAAE,QAAQzB,IAAM,CAAC;EAAC,CAAC;CAC/F,GACMuC,IAAMC,EAA8B,IAAI,GACxCC,IAAQ9D,EAAe4D,CAAG,GAC1BG,IAAU,CAAC,CAACD,KAASA,IAAQpB,IAAI,KAAK;CAC5C,OACE,kBAAC,OAAD;EACE,MAAM,MAAO;GAEX,AADA,EAAI,UAAUsB,GACV,OAAOC,KAAQ,aAAYA,EAAID,CAAE,IAC5BC,MAAK,EAAI,UAAUD;EAC9B;EACA,WAAWlE,EAAG,WAAWoE,CAAS;EAElC,UAAA,kBAAC/D,GAAD;GACE,OAAOqC;GACP,QAAQuB,IAAUrB,IAAI,KAAKE,EAAK,SAAS,KAAK,KAAK,IAAIF,GAAGE,EAAK,SAAS,EAAE;GACnE;GACP,OAAO;IAAE,GAAGH;IAAO,OAAOA,EAAM,SAASpB,MAAQ;GAAE;GAEnD,UAAA,kBAAC,OAAD;IAAK,WAAWvB,EAAG,eAAeiE,IAAU,iCAAiC,qBAAqB;IAAlG,UAAA,CACE,kBAAC,OAAD;KAAK,WAAU;KAAoB,OAAO;MAAE,OAAOrB;MAAG,QAAQA;KAAE;KAAhE,UAAA,CACE,kBAAC,OAAD;MAAK,OAAOA;MAAG,QAAQA;MAAG,MAAK;MAC7B,UAAA,kBAAC,KAAD;OAAG,WAAW,aAAaA,IAAI,EAAE,GAAGA,IAAI,EAAE;OACvC,UAAAS,EAAK,KAAK,GAAG,MAAM;QAClB,IAAMgB,KAAOxD,EAAE,WAAWA,EAAE,aAAaA,EAAE,YAAYuC;QACvD,OACE,kBAAC,QAAD;SAEE,GAAGtD,EAAI,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAYuE,IAAM,CAAC,CAAC,CAAC,CAAC,CAACxD,CAAC,KAAK;SACtE,MAAM6C,EAAMZ,EAAKb,EAAG;SACpB,SAASiB,KAASA,MAAUJ,EAAKb,EAAE,CAAE,KAAK,KAAM;SAChD,WAAU;QACX,GALMa,EAAKb,EAAE,CAAE,EAKf;OAEL,CAAC;MACA,CAAA;KACA,CAAA,GACL,kBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACE,kBAAC,QAAD;OAAM,WAAWjC,EAAG,iCAAiC4C,KAAK,MAAM,eAAe,eAAe;OAAI,UAAAjC,KAASkD,EAAYtC,CAAG;MAAQ,CAAA,GAClI,kBAAC,QAAD;OAAM,WAAU;OAA6C,UAAA+C,KAAclD,EAAE,eAAe,OAAO;MAAQ,CAAA,CACxG;KACF,CAAA,CAAA;IACL,CAAA,GAAA,kBAAC,MAAD;KAAI,WAAWpB,EAAG,yBAAyBiE,IAAU,WAAW,kBAAkB;KAAG,cAAY7C,EAAE,gBAAgB,QAAQ;KACxH,UAAA0B,EAAK,KAAK,GAAG,MACZ,kBAAC,MAAD;MAEE,oBAAoBK,EAASH,EAAE,EAAE;MACjC,oBAAoBG,EAAS,IAAI;MACjC,WAAWnD,EACT,iGACAkD,KAASA,MAAUF,EAAE,MAAM,YAC7B;MAPF,UAAA;OASE,kBAACuB,GAAD,EAAQ,OAAOb,EAAMV,CAAC,EAAI,CAAA;OAC1B,kBAAC,QAAD;QAAM,WAAU;QAA+C,UAAAA,EAAE;OAAY,CAAA;OAC7E,kBAAC,QAAD;QAAM,WAAU;QAA6B,UAAAa,EAAYb,EAAE,KAAK;OAAQ,CAAA;OACxE,kBAAC,QAAD;QAAM,WAAU;QAA4C,UAAAW,EAAO1B;OAAS,CAAA;MAC1E;KAZG,GAAAe,EAAE,EAYL,CACL;IACC,CAAA,CACD;;EACK,CAAA;CACT,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc;AAC/D,IAAawB,IAAOhC,GAEPiC,IAA2B,EACtC,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EACjC,GACaC,IAAmC,EAAE,MAAM,KAAK,GAEhDC,IAA2B,kBAStC,SAAkB,EAAE,WAAQ,kBAAe,MAAMlC,EAAab,CAAC,GAAG,YAAS,IAAM,cAAW,cAAcc,KAAa,GAAK;CAC5H,IAAMtB,IAAInB,EAAU,GACdsB,IAAMX,EAAO,QAAQ,GAAG,MAAMC,IAAIC,EAAE,OAAO,CAAC,KAAK,GACjD2C,IAAUrD,EAAaQ,EAAO,KAAK,MAAME,EAAE,EAAE,CAAC,GAC9C4C,KAAS,MAAa5C,EAAE,SAAS2C,EAAQ,IAAI3C,EAAE,EAAE;CACvD,OACE,kBAAC,OAAD;EAAU;EAAK,WAAWd,EAAG,wBAAwBoE,CAAS;EAA9D,UAAA,CACE,kBAAC,OAAD;GACE,MAAK;GACL,cAAYhD,EAAE,oBAAoB,qBAAqB;IACrD,OAAOsB;IACP,QAAQ9B,EACL,KAAK,MAAMQ,EAAE,kBAAkB,mBAAmB;KAAE,OAAON,EAAE;KAAO,OAAOW,EAAcX,EAAE,QAAQS,GAAK,CAAC;IAAE,CAAC,CAAC,CAAC,CAC9G,KAAKH,EAAE,0BAA0B,IAAI,CAAC;GAC3C,CAAC;GACD,WAAU;GAET,UAAAR,EACE,QAAQ,MAAME,EAAE,QAAQ,CAAC,CAAC,CAC1B,KAAK,MACJ,kBAAC,QAAD;IAEE,WAAU;IACV,OAAO;KACL,OAAO,GAAIA,EAAE,QAAQS,IAAO,IAAI;KAChC,YAAYmC,EAAM5C,CAAC;IACrB;IACA,OAAOM,EAAE,oBAAoB,oBAAoB;KAAE,OAAON,EAAE;KAAO,OAAO+C,EAAY/C,EAAE,KAAK;IAAE,CAAC;GACjG,GAPMA,EAAE,EAOR,CACF;EACA,CAAA,GACJ8D,KACC,kBAACtE,GAAD,EACE,OAAOM,EAAO,KAAK,OAAO;GACxB,IAAIE,EAAE;GACN,OAAOA,EAAE;GACT,OAAO4C,EAAM5C,CAAC;GACd,OAAOW,EAAcX,EAAE,QAAQS,GAAK,CAAC;EACvC,EAAE,EACH,CAAA,CAEA;;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc"}
1
+ {"version":3,"file":"donut.js","names":["d3pie","arc","d3arc","cn","useUiText","Text","useLayoutWidth","edgeColor","useTweened","seriesColors","Swatch","ChartFrame","Legend","KAESO_DONUT_VARIANTS","KAESO_DONUT_DEFAULT_VARIANTS","groupSmall","englishText","total","slices","a","s","small","min","big","b","rest","t","shareLabel","share","sum","value","formatPercent","wholeShares","values","v","exact","floors","left","order","i","f","useOtherData","seen","setSeen","useState","identity","MAX_SLICES","capSlices","kept","TOTAL_SIZES","useFittedSize","ref","useRef","step","setStep","first","current","text","room","useLayoutEffect","el","Donut","formatNumber","ariaLabel","state","D","size","data","empty","other","d","tween","focus","setFocus","mid","arcs","pie","arc$1","arc","palette","color","shares","table","formatValue","box","width","stacked","totalRef","totalSize","className","len","totalLabel","Ring","KAESO_SHARE_BAR_VARIANTS","KAESO_SHARE_BAR_DEFAULT_VARIANTS","ShareBar","edge","legend"],"sources":["../../../src/components/charts/donut.tsx"],"sourcesContent":["import { forwardRef, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { arc as d3arc, pie as d3pie } from \"d3-shape\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\nimport { ChartFrame, Legend, Swatch, seriesColors, useTweened, type ChartState } from \"./core.js\";\nimport { Text } from \"../text/text.js\";\nimport { edgeColor } from \"./marks.js\";\n\nexport interface Slice {\n id: string;\n label: string;\n value: number;\n color?: string | undefined;\n}\n\nexport const KAESO_DONUT_VARIANTS = {\n size: {\n md: { classes: \"size-160\" },\n sm: { classes: \"size-140\" },\n lg: { classes: \"size-180\" },\n },\n} as const;\nexport const KAESO_DONUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport function groupSmall(slices: Slice[], min = 0.02, t: UiText = englishText): Slice[] {\n const total = slices.reduce((a, s) => a + s.value, 0) || 1;\n const small = slices.filter((s) => s.value > 0 && s.value / total < min);\n const big = slices.filter((s) => s.value / total >= min);\n if (small.length < 2) return [...big, ...small].sort((a, b) => slices.indexOf(a) - slices.indexOf(b));\n const rest = small.reduce((a, s) => a + s.value, 0);\n return [\n ...big,\n {\n id: \"__other\",\n label: t(\"donut.other\", \"Other\"),\n value: rest,\n color: \"var(--k-text-tertiary)\",\n },\n ];\n}\n\nexport function shareLabel(value: number, sum: number, t: UiText = englishText): string {\n const share = sum ? value / sum : 0;\n return share > 0 && share < 0.005 ? t(\"donut.underOnePercent\", \"<1%\") : formatPercent(share, 0);\n}\n\nexport function wholeShares(values: number[], t: UiText = englishText): string[] {\n const sum = values.reduce((a, v) => a + v, 0);\n if (!sum) return values.map(() => formatPercent(0, 0));\n const exact = values.map((v) => (v / sum) * 100);\n const floors = exact.map(Math.floor);\n let left = 100 - floors.reduce((a, v) => a + v, 0);\n const order = exact.map((e, i) => ({ i, r: e - Math.floor(e) })).sort((a, b) => b.r - a.r);\n for (const { i } of order) {\n if (left <= 0) break;\n floors[i] = (floors[i] ?? 0) + 1;\n left--;\n }\n return floors.map((f, i) => (f === 0 && (values[i] ?? 0) > 0 ? t(\"donut.underOnePercent\", \"<1%\") : formatPercent(f / 100, 0)));\n}\n\nfunction useOtherData(identity: string): boolean {\n const [seen, setSeen] = useState(identity);\n if (seen !== identity) setSeen(identity);\n return seen !== identity;\n}\n\nconst MAX_SLICES = 8;\n\nfunction capSlices(slices: Slice[], t: UiText): Slice[] {\n if (slices.length <= MAX_SLICES) return slices;\n const named = slices.filter((s) => s.id !== \"__other\");\n const kept = named.slice(0, MAX_SLICES - 1);\n const rest = slices.filter((s) => !kept.includes(s)).reduce((a, s) => a + s.value, 0);\n return [...kept, { id: \"__other\", label: t(\"donut.other\", \"Other\"), value: rest, color: \"var(--k-text-tertiary)\" }];\n}\n\nconst TOTAL_SIZES = [\"text-title\", \"text-title-sm\", \"text-body-lg\"] as const;\n\nfunction useFittedSize(text: string, room: number, first: number) {\n const ref = useRef<HTMLSpanElement | null>(null);\n const [step, setStep] = useState({ text, room, at: first });\n const current = step.text === text && step.room === room ? step : { text, room, at: first };\n if (current !== step) setStep(current);\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el || current.at >= TOTAL_SIZES.length - 1) return;\n if (el.scrollWidth > room) setStep({ text, room, at: current.at + 1 });\n }, [current.at, room, text]);\n return [ref, TOTAL_SIZES[current.at]!] as const;\n}\n\nexport const Donut = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n slices: Slice[];\n size?: keyof typeof KAESO_DONUT_VARIANTS.size | undefined;\n total?: ReactNode | undefined;\n totalLabel?: ReactNode | undefined;\n formatValue?: ((v: number) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n } & ChartState\n>(function Donut({ slices, size = \"md\", total, totalLabel, formatValue = (v) => formatNumber(v), className, \"aria-label\": ariaLabel, ...state }, ref) {\n const t = useUiText();\n const D = { sm: 140, md: 160, lg: 180 }[size];\n const STROKE = 14;\n const data = capSlices(groupSmall(slices, 0.02, t), t);\n const sum = data.reduce((a, s) => a + s.value, 0);\n const empty = state.empty ?? sum === 0;\n const other = useOtherData(data.map((d) => d.id).join(\"\\u0000\"));\n const tween = useTweened(\n data.map((d) => d.value),\n !!state.loading || other,\n );\n const [focus, setFocus] = useState<string | null>(null);\n const mid = D / 2 - STROKE / 2;\n const pie = d3pie<number>()\n .sort(null)\n .padAngle(3 / mid)\n .value((v) => v);\n const arcs = pie(tween);\n const arc = d3arc<{\n startAngle: number;\n endAngle: number;\n padAngle: number;\n }>()\n .innerRadius(D / 2 - STROKE)\n .outerRadius(D / 2)\n .padRadius(mid);\n const palette = seriesColors(data.map((d) => d.id));\n const color = (s: Slice) => s.color ?? palette.get(s.id)!;\n const shares = wholeShares(\n data.map((d) => d.value),\n t,\n );\n const table = {\n columns: [t(\"donut.slice\", \"Slice\"), t(\"donut.value\", \"Value\"), t(\"donut.share\", \"Share\")],\n rows: data.map((d) => [d.label, formatValue(d.value), formatPercent(sum ? d.value / sum : 0)]),\n };\n const box = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(box);\n const stacked = !!width && width < D + 40 + 220;\n const totalText = typeof total === \"string\" ? total : total === undefined ? formatValue(sum) : \"\";\n const [totalRef, totalSize] = useFittedSize(totalText, D - STROKE * 2 - 16, D >= 160 ? 0 : 1);\n return (\n <div\n ref={(el) => {\n box.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n className={cn(\"w-full min-w-0\", className)}\n >\n <ChartFrame label={ariaLabel} height={stacked ? D + 24 + data.length * 32 : Math.max(D, data.length * 32)} table={table} state={{ ...state, empty }}>\n {!empty && (\n <div className={cn(\"flex h-full\", stacked ? \"flex-col items-center gap-24\" : \"items-center gap-40\")}>\n <div className=\"relative shrink-0\" style={{ width: D, height: D }}>\n <svg width={D} height={D} role=\"presentation\">\n <g transform={`translate(${D / 2},${D / 2})`}>\n {arcs.map((a, i) => {\n const len = (a.endAngle - a.startAngle - a.padAngle) * mid;\n return (\n <path\n key={data[i]!.id}\n d={arc.cornerRadius(Math.max(0, Math.min(STROKE / 2, len / 2)))(a) ?? \"\"}\n fill={color(data[i]!)}\n opacity={focus && focus !== data[i]!.id ? 0.3 : 1}\n className=\"opacity-motion\"\n />\n );\n })}\n </g>\n </svg>\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2 px-16 text-center\">\n <span ref={totalRef} className={cn(\"max-w-full font-semibold text-balance text-fg tabular wrap-anywhere\", totalSize)}>\n {total ?? formatValue(sum)}\n </span>\n <span className=\"text-caption font-medium text-fg-tertiary\">{totalLabel ?? t(\"donut.total\", \"Total\")}</span>\n </div>\n </div>\n <ul className={cn(\"flex min-w-0 flex-col\", stacked ? \"w-full\" : \"min-w-160 max-w-320 flex-1\")} aria-label={t(\"donut.legend\", \"Legend\")}>\n {data.map((d, i) => (\n <li\n key={d.id}\n onMouseEnter={() => setFocus(d.id)}\n onMouseLeave={() => setFocus(null)}\n className={cn(\"flex h-32 items-center gap-10 text-small opacity-motion\", focus && focus !== d.id && \"opacity-50\")}\n >\n <Swatch color={color(d)} />\n <Text variant=\"small\" weight=\"medium\" truncate className=\"flex-1\">\n {d.label}\n </Text>\n <span className=\"text-fg-secondary tabular\">{formatValue(d.value)}</span>\n <span className=\"w-40 text-right text-fg-tertiary tabular\">{shares[i]}</span>\n </li>\n ))}\n </ul>\n </div>\n )}\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Donut.displayName = \"Donut\";\nexport const Ring = Donut;\n\nexport const KAESO_SHARE_BAR_VARIANTS = {\n size: { md: { classes: \"h-8\" } },\n} as const;\nexport const KAESO_SHARE_BAR_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport const ShareBar = /* @__PURE__ */ forwardRef<\n HTMLDivElement,\n {\n slices: Slice[];\n formatValue?: ((v: number) => string) | undefined;\n legend?: boolean | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n }\n>(function ShareBar({ slices, formatValue = (v) => formatNumber(v), legend = true, className, \"aria-label\": ariaLabel }, ref) {\n const t = useUiText();\n const sum = slices.reduce((a, s) => a + s.value, 0) || 1;\n const palette = seriesColors(slices.map((s) => s.id));\n const color = (s: Slice) => s.color ?? palette.get(s.id)!;\n const shares = wholeShares(\n slices.map((s) => s.value),\n t,\n );\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-12\", className)}>\n <div\n role=\"img\"\n aria-label={t(\"shareBar.summary\", \"{label}: {shares}\", {\n label: ariaLabel,\n shares: slices\n .map((s, i) => t(\"shareBar.valueShare\", \"{label} {value} ({share})\", { label: s.label, value: formatValue(s.value), share: shares[i] ?? \"\" }))\n .join(t(\"shareBar.listSeparator\", \", \")),\n })}\n className={cn(\"flex h-8 w-full gap-2 overflow-hidden rounded-pill\", !slices.some((s) => s.value > 0) && \"bg-fill-2\")}\n >\n {slices\n .filter((s) => s.value > 0)\n .map((s) => {\n const edge = edgeColor(color(s));\n return (\n <span\n key={s.id}\n className=\"h-full min-w-2 data-mark first:rounded-l-pill last:rounded-r-pill width-motion\"\n style={{\n width: `${(s.value / sum) * 100}%`,\n background: color(s),\n ...(edge ? { boxShadow: `inset 0 0 0 1px ${edge}` } : {}),\n }}\n />\n );\n })}\n </div>\n {legend && (\n <Legend\n items={slices.map((s, i) => ({\n id: s.id,\n label: s.label,\n color: color(s),\n value: shares[i],\n }))}\n />\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ShareBar.displayName = \"ShareBar\";\n"],"mappings":"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"}