@logicplanes/kaeso-ui 0.1.0 → 0.2.0

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 (246) hide show
  1. package/AGENTS.md +1 -0
  2. package/LICENSE +1 -1
  3. package/ai/component-guides.md +269 -7
  4. package/ai/component-registry.json +600 -800
  5. package/ai/component-registry.md +200 -141
  6. package/ai/icons.md +2 -2
  7. package/ai/tokens.md +1 -1
  8. package/dist/blocks/delete-resource.js +1 -1
  9. package/dist/blocks/pages.js +3 -3
  10. package/dist/blocks/resource-list.js +2 -2
  11. package/dist/chunks/app-frame-BXh-06HL.js +214 -0
  12. package/dist/chunks/app-frame-BXh-06HL.js.map +1 -0
  13. package/dist/chunks/{banner-BiziJuBZ.js → banner-DxGBPQ7p.js} +2 -2
  14. package/dist/chunks/{banner-BiziJuBZ.js.map → banner-DxGBPQ7p.js.map} +1 -1
  15. package/dist/chunks/{button-BHKAE6ui.js → button-DQvoOxVQ.js} +2 -2
  16. package/dist/chunks/{button-BHKAE6ui.js.map → button-DQvoOxVQ.js.map} +1 -1
  17. package/dist/chunks/{calendar-B5SSTE56.js → calendar-CN3YJi2k.js} +3 -3
  18. package/dist/chunks/{calendar-B5SSTE56.js.map → calendar-CN3YJi2k.js.map} +1 -1
  19. package/dist/chunks/code-BADhvsgC.js +33 -0
  20. package/dist/chunks/code-BADhvsgC.js.map +1 -0
  21. package/dist/chunks/{code-block-BbK6E4Eo.js → code-block-DxtladFW.js} +41 -37
  22. package/dist/chunks/code-block-DxtladFW.js.map +1 -0
  23. package/dist/chunks/{combobox-D8pQk22r.js → combobox-D30Wt11R.js} +4 -4
  24. package/dist/chunks/{combobox-D8pQk22r.js.map → combobox-D30Wt11R.js.map} +1 -1
  25. package/dist/chunks/{copy-button-mAzHjYXq.js → copy-button-DXxn-YYZ.js} +4 -4
  26. package/dist/chunks/{copy-button-mAzHjYXq.js.map → copy-button-DXxn-YYZ.js.map} +1 -1
  27. package/dist/chunks/{core-Bgefcs3z.js → core-K960A4OT.js} +119 -120
  28. package/dist/chunks/core-K960A4OT.js.map +1 -0
  29. package/dist/chunks/{date-popup-Er1oQwtU.js → date-popup-B-6xhb-1.js} +3 -3
  30. package/dist/chunks/{date-popup-Er1oQwtU.js.map → date-popup-B-6xhb-1.js.map} +1 -1
  31. package/dist/chunks/{de-BCg1eRVd.js → de-CTAo4KL7.js} +10 -10
  32. package/dist/chunks/de-CTAo4KL7.js.map +1 -0
  33. package/dist/chunks/dialog-LNKgPEsV.js +319 -0
  34. package/dist/chunks/dialog-LNKgPEsV.js.map +1 -0
  35. package/dist/chunks/{icon-Bha63LaN.js → icon-CBzvyEqC.js} +30 -29
  36. package/dist/chunks/icon-CBzvyEqC.js.map +1 -0
  37. package/dist/chunks/{icon-button-Bw67oKtx.js → icon-button-_x1RUphC.js} +3 -3
  38. package/dist/chunks/{icon-button-Bw67oKtx.js.map → icon-button-_x1RUphC.js.map} +1 -1
  39. package/dist/chunks/{identity-DQinp-Ep.js → identity-BtZC_d_Q.js} +3 -3
  40. package/dist/chunks/{identity-DQinp-Ep.js.map → identity-BtZC_d_Q.js.map} +1 -1
  41. package/dist/chunks/{input-Biakz6GB.js → input-CNTfI6YE.js} +2 -2
  42. package/dist/chunks/{input-Biakz6GB.js.map → input-CNTfI6YE.js.map} +1 -1
  43. package/dist/chunks/{input-group-DQqEPFj_.js → input-group-CYA1MEoZ.js} +2 -2
  44. package/dist/chunks/{input-group-DQqEPFj_.js.map → input-group-CYA1MEoZ.js.map} +1 -1
  45. package/dist/chunks/{iso-field-CznqNVrH.js → iso-field-1qmg7TP8.js} +2 -2
  46. package/dist/chunks/{iso-field-CznqNVrH.js.map → iso-field-1qmg7TP8.js.map} +1 -1
  47. package/dist/chunks/linear-scale-BWKeRqDX.js +37 -0
  48. package/dist/chunks/linear-scale-BWKeRqDX.js.map +1 -0
  49. package/dist/chunks/{link-tTapNTpM.js → link-vz9aV8WX.js} +9 -2
  50. package/dist/chunks/link-vz9aV8WX.js.map +1 -0
  51. package/dist/chunks/{list-CN8pO8lv.js → list-CzaiyNja.js} +119 -111
  52. package/dist/chunks/list-CzaiyNja.js.map +1 -0
  53. package/dist/chunks/{markdown-C-iJsYnd.js → markdown-5NyaHHfN.js} +6 -6
  54. package/dist/chunks/{markdown-C-iJsYnd.js.map → markdown-5NyaHHfN.js.map} +1 -1
  55. package/dist/chunks/{menu-OURWt_hD.js → menu-DyVPwgfF.js} +2 -2
  56. package/dist/chunks/{menu-OURWt_hD.js.map → menu-DyVPwgfF.js.map} +1 -1
  57. package/dist/chunks/nav-sheet-BIErlV74.js +58 -0
  58. package/dist/chunks/nav-sheet-BIErlV74.js.map +1 -0
  59. package/dist/chunks/{logo-VmXYhIJL.js → nav-wordmark-DLkItdvo.js} +12 -93
  60. package/dist/chunks/nav-wordmark-DLkItdvo.js.map +1 -0
  61. package/dist/chunks/observe-resize-DhxhmoyB.js +25 -0
  62. package/dist/chunks/observe-resize-DhxhmoyB.js.map +1 -0
  63. package/dist/chunks/{page-header-BIRswR73.js → page-header-CEPZzhRp.js} +2 -2
  64. package/dist/chunks/{page-header-BIRswR73.js.map → page-header-CEPZzhRp.js.map} +1 -1
  65. package/dist/chunks/{pagination-DYdLm18-.js → pagination-CCMxQ5pH.js} +3 -3
  66. package/dist/chunks/{pagination-DYdLm18-.js.map → pagination-CCMxQ5pH.js.map} +1 -1
  67. package/dist/chunks/{range-popup-AbRzgHtY.js → range-popup-DGOnGGag.js} +4 -4
  68. package/dist/chunks/{range-popup-AbRzgHtY.js.map → range-popup-DGOnGGag.js.map} +1 -1
  69. package/dist/chunks/resize-motion-CMaidkwe.js +101 -0
  70. package/dist/chunks/resize-motion-CMaidkwe.js.map +1 -0
  71. package/dist/chunks/{rights-CXo7zEf6.js → rights-BbiJ0AJB.js} +4 -4
  72. package/dist/chunks/{rights-CXo7zEf6.js.map → rights-BbiJ0AJB.js.map} +1 -1
  73. package/dist/chunks/{section-XStLtXKa.js → section-DzOLLN1p.js} +3 -3
  74. package/dist/chunks/section-DzOLLN1p.js.map +1 -0
  75. package/dist/chunks/{segmented-CDTx2n29.js → segmented-MrinfDL8.js} +36 -35
  76. package/dist/chunks/segmented-MrinfDL8.js.map +1 -0
  77. package/dist/chunks/select-Bc4kRiSG.js +227 -0
  78. package/dist/chunks/select-Bc4kRiSG.js.map +1 -0
  79. package/dist/chunks/{sidebar-C4fL_KMm.js → sidebar-5IA18LuP.js} +180 -183
  80. package/dist/chunks/sidebar-5IA18LuP.js.map +1 -0
  81. package/dist/chunks/{sidebar-menu-sd9vCpDy.js → sidebar-menu-DRWRxcJ3.js} +2 -2
  82. package/dist/chunks/{sidebar-menu-sd9vCpDy.js.map → sidebar-menu-DRWRxcJ3.js.map} +1 -1
  83. package/dist/chunks/{switch-CztLhA8F.js → switch-XMY_CQE-.js} +2 -2
  84. package/dist/chunks/{switch-CztLhA8F.js.map → switch-XMY_CQE-.js.map} +1 -1
  85. package/dist/chunks/{tag-BsmQ1xPj.js → tag-Dg89uYpV.js} +3 -3
  86. package/dist/chunks/{tag-BsmQ1xPj.js.map → tag-Dg89uYpV.js.map} +1 -1
  87. package/dist/chunks/{text-BPglS3vq.js → text--5MKh2G4.js} +3 -3
  88. package/dist/chunks/{text-BPglS3vq.js.map → text--5MKh2G4.js.map} +1 -1
  89. package/dist/chunks/{textarea-Bvk7N2bh.js → textarea-Cj8iR82R.js} +3 -3
  90. package/dist/chunks/{textarea-Bvk7N2bh.js.map → textarea-Cj8iR82R.js.map} +1 -1
  91. package/dist/chunks/theme-provider-DJhORMlc.js +72 -0
  92. package/dist/chunks/theme-provider-DJhORMlc.js.map +1 -0
  93. package/dist/chunks/tooltip-DEbCCsru.js +151 -0
  94. package/dist/chunks/tooltip-DEbCCsru.js.map +1 -0
  95. package/dist/chunks/{tooltip-root-DWhtAtFb.js → tooltip-root-DRd4ciUv.js} +2 -2
  96. package/dist/chunks/{tooltip-root-DWhtAtFb.js.map → tooltip-root-DRd4ciUv.js.map} +1 -1
  97. package/dist/chunks/use-layout-width-CbSDbRb0.js +28 -0
  98. package/dist/chunks/use-layout-width-CbSDbRb0.js.map +1 -0
  99. package/dist/chunks/use-scroll-margin-DfdTc_5D.js +26 -0
  100. package/dist/chunks/use-scroll-margin-DfdTc_5D.js.map +1 -0
  101. package/dist/chunks/use-truncated-CW0hByYt.js +24 -0
  102. package/dist/chunks/use-truncated-CW0hByYt.js.map +1 -0
  103. package/dist/chunks/{virtual-rows-BgMdVelU.js → virtual-rows-BZe49bKi.js} +2 -2
  104. package/dist/chunks/{virtual-rows-BgMdVelU.js.map → virtual-rows-BZe49bKi.js.map} +1 -1
  105. package/dist/chunks/{zh-CN-cPjO1OOo.js → zh-CN-C7GmVswt.js} +15 -15
  106. package/dist/chunks/zh-CN-C7GmVswt.js.map +1 -0
  107. package/dist/components/app-frame.js +3 -1
  108. package/dist/components/banner.js +1 -1
  109. package/dist/components/button-group.js +2 -2
  110. package/dist/components/button.js +1 -1
  111. package/dist/components/calendar.js +1 -1
  112. package/dist/components/charts/bar.js +78 -77
  113. package/dist/components/charts/bar.js.map +1 -1
  114. package/dist/components/charts/donut.js +2 -2
  115. package/dist/components/charts/gauge.js +1 -1
  116. package/dist/components/charts/sankey.js +1 -1
  117. package/dist/components/charts/timeseries.js +75 -75
  118. package/dist/components/charts/timeseries.js.map +1 -1
  119. package/dist/components/charts.js +1 -1
  120. package/dist/components/code-block.js +1 -1
  121. package/dist/components/code.js +1 -1
  122. package/dist/components/combobox.js +1 -1
  123. package/dist/components/command-palette.js +105 -97
  124. package/dist/components/command-palette.js.map +1 -1
  125. package/dist/components/copy-button.js +1 -1
  126. package/dist/components/data-table.js +94 -95
  127. package/dist/components/data-table.js.map +1 -1
  128. package/dist/components/date-picker.js +3 -3
  129. package/dist/components/date-picker.js.map +1 -1
  130. package/dist/components/dialog.js +141 -153
  131. package/dist/components/dialog.js.map +1 -1
  132. package/dist/components/display-options.js +5 -5
  133. package/dist/components/filter-chip.js +1 -1
  134. package/dist/components/flow.js +37 -36
  135. package/dist/components/flow.js.map +1 -1
  136. package/dist/components/icon-button.js +1 -1
  137. package/dist/components/icon.js +1 -1
  138. package/dist/components/input.js +5 -5
  139. package/dist/components/kaeso/conversation.js +2 -2
  140. package/dist/components/kaeso/identity.js +1 -1
  141. package/dist/components/kaeso/moments.js +3 -3
  142. package/dist/components/kaeso/rights.js +1 -1
  143. package/dist/components/kaeso/usage.js +1 -1
  144. package/dist/components/kaeso.js +4 -4
  145. package/dist/components/key-value.js +3 -3
  146. package/dist/components/link.js +1 -1
  147. package/dist/components/list.js +1 -1
  148. package/dist/components/logo.js +101 -1
  149. package/dist/components/logo.js.map +1 -0
  150. package/dist/components/markdown.js +1 -1
  151. package/dist/components/menu.js +1 -1
  152. package/dist/components/page-header.js +1 -1
  153. package/dist/components/pagination.js +1 -1
  154. package/dist/components/playground.js +8 -8
  155. package/dist/components/scroll-area.js +30 -23
  156. package/dist/components/scroll-area.js.map +1 -1
  157. package/dist/components/section.js +1 -1
  158. package/dist/components/segmented.js +1 -1
  159. package/dist/components/select.js +1 -1
  160. package/dist/components/sheet.js +46 -41
  161. package/dist/components/sheet.js.map +1 -1
  162. package/dist/components/sidebar.js +1 -1
  163. package/dist/components/stat.js +75 -76
  164. package/dist/components/stat.js.map +1 -1
  165. package/dist/components/switch.js +1 -1
  166. package/dist/components/tag.js +1 -1
  167. package/dist/components/text.js +1 -1
  168. package/dist/components/theme-image.js +38 -0
  169. package/dist/components/theme-image.js.map +1 -0
  170. package/dist/components/theme-menu.js +3 -3
  171. package/dist/components/theme-select.js +58 -0
  172. package/dist/components/theme-select.js.map +1 -0
  173. package/dist/components/toast.js +91 -92
  174. package/dist/components/toast.js.map +1 -1
  175. package/dist/components/tooltip.js +1 -1
  176. package/dist/i18n-provider.js +1 -1
  177. package/dist/index.js +76 -74
  178. package/dist/kaeso.css +39 -16
  179. package/dist/styles.css +1 -1
  180. package/dist/theme.js +1 -1
  181. package/dist/types/components/app-frame/app-frame.d.ts +2 -10
  182. package/dist/types/components/app-frame/docs.d.ts +1 -0
  183. package/dist/types/components/app-frame/index.d.ts +1 -0
  184. package/dist/types/components/app-frame/nav-sheet.d.ts +11 -0
  185. package/dist/types/components/charts/linear-scale.d.ts +17 -0
  186. package/dist/types/components/code/code.d.ts +16 -0
  187. package/dist/types/components/code/docs.d.ts +1 -0
  188. package/dist/types/components/code-block/code-block.d.ts +2 -0
  189. package/dist/types/components/code-block/docs.d.ts +4 -0
  190. package/dist/types/components/command-palette/command-palette.d.ts +1 -0
  191. package/dist/types/components/command-palette/docs.d.ts +1 -0
  192. package/dist/types/components/dialog/dialog.d.ts +5 -2
  193. package/dist/types/components/dialog/docs.d.ts +10 -0
  194. package/dist/types/components/dialog/index.d.ts +1 -0
  195. package/dist/types/components/dialog/scope.d.ts +9 -0
  196. package/dist/types/components/dialog/step-dialog.d.ts +9 -1
  197. package/dist/types/components/link/link.d.ts +8 -0
  198. package/dist/types/components/logo/nav-wordmark.d.ts +6 -0
  199. package/dist/types/components/scroll-area/scroll-area.d.ts +3 -3
  200. package/dist/types/components/theme-image/docs.d.ts +13 -0
  201. package/dist/types/components/theme-image/index.d.ts +1 -0
  202. package/dist/types/components/theme-image/theme-image.d.ts +23 -0
  203. package/dist/types/components/theme-select/docs.d.ts +10 -0
  204. package/dist/types/components/theme-select/index.d.ts +1 -0
  205. package/dist/types/components/theme-select/theme-select.d.ts +34 -0
  206. package/dist/types/icons/groups.d.ts +1 -1
  207. package/dist/types/icons/vocabulary.d.ts +5 -0
  208. package/dist/types/index.d.ts +2 -0
  209. package/dist/types/theme/theme-provider.d.ts +1 -1
  210. package/dist/types/utils/dialog-scope.d.ts +7 -0
  211. package/dist/types/utils/lazy-module.d.ts +7 -2
  212. package/dist/types/utils/observe-resize.d.ts +1 -0
  213. package/dist/types/utils/resize-motion.d.ts +2 -0
  214. package/foundations/motion.md +1 -0
  215. package/package.json +2 -2
  216. package/dist/chunks/app-frame-BBIMch8X.js +0 -224
  217. package/dist/chunks/app-frame-BBIMch8X.js.map +0 -1
  218. package/dist/chunks/code-DDyOlIFO.js +0 -23
  219. package/dist/chunks/code-DDyOlIFO.js.map +0 -1
  220. package/dist/chunks/code-block-BbK6E4Eo.js.map +0 -1
  221. package/dist/chunks/core-Bgefcs3z.js.map +0 -1
  222. package/dist/chunks/de-BCg1eRVd.js.map +0 -1
  223. package/dist/chunks/dialog-CVqSVk3T.js +0 -283
  224. package/dist/chunks/dialog-CVqSVk3T.js.map +0 -1
  225. package/dist/chunks/icon-Bha63LaN.js.map +0 -1
  226. package/dist/chunks/link-tTapNTpM.js.map +0 -1
  227. package/dist/chunks/list-CN8pO8lv.js.map +0 -1
  228. package/dist/chunks/logo-VmXYhIJL.js.map +0 -1
  229. package/dist/chunks/restore-focus-Cap1Q-R3.js +0 -19
  230. package/dist/chunks/restore-focus-Cap1Q-R3.js.map +0 -1
  231. package/dist/chunks/section-XStLtXKa.js.map +0 -1
  232. package/dist/chunks/segmented-CDTx2n29.js.map +0 -1
  233. package/dist/chunks/select-Ca3HGsN1.js +0 -223
  234. package/dist/chunks/select-Ca3HGsN1.js.map +0 -1
  235. package/dist/chunks/sidebar-C4fL_KMm.js.map +0 -1
  236. package/dist/chunks/theme-provider-mgUaQK7L.js +0 -69
  237. package/dist/chunks/theme-provider-mgUaQK7L.js.map +0 -1
  238. package/dist/chunks/tooltip-CDu00nzg.js +0 -124
  239. package/dist/chunks/tooltip-CDu00nzg.js.map +0 -1
  240. package/dist/chunks/use-layout-width-DZaLOQMT.js +0 -27
  241. package/dist/chunks/use-layout-width-DZaLOQMT.js.map +0 -1
  242. package/dist/chunks/use-scroll-margin-DWcfIXac.js +0 -25
  243. package/dist/chunks/use-scroll-margin-DWcfIXac.js.map +0 -1
  244. package/dist/chunks/use-truncated-DmQoePvG.js +0 -25
  245. package/dist/chunks/use-truncated-DmQoePvG.js.map +0 -1
  246. package/dist/chunks/zh-CN-cPjO1OOo.js.map +0 -1
@@ -2,12 +2,12 @@
2
2
  import { t as e } from "../../chunks/cn-CidVUKMm.js";
3
3
  import { i as t, r as n } from "../../chunks/context-BELWW79w.js";
4
4
  import { formatNumber as r, formatPercent as ee } from "../../format.js";
5
- import { A as te, D as ne, E as re, S as ie, _ as ae, b as oe, g as se, i as ce, k as le, n as ue, r as de, s as fe, t as i, v as pe } from "../../chunks/core-Bgefcs3z.js";
6
- import { forwardRef as a, useId as me, useMemo as o, useState as s } from "react";
5
+ import { A as te, D as ne, E as re, S as ie, _ as ae, b as oe, g as se, i as ce, k as le, n as ue, r as de, s as fe, t as i, v as pe } from "../../chunks/core-K960A4OT.js";
6
+ import { t as me } from "../../chunks/linear-scale-BWKeRqDX.js";
7
+ import { forwardRef as a, useId as he, useMemo as o, useState as s } from "react";
7
8
  import { jsx as c, jsxs as l } from "react/jsx-runtime";
8
- import { area as u, curveMonotoneX as d, line as he, stack as ge } from "d3-shape";
9
- import { bisector as _e, max as f, min as ve } from "d3-array";
10
- import { scaleLinear as p } from "d3-scale";
9
+ import { area as u, curveMonotoneX as d, line as f, stack as ge } from "d3-shape";
10
+ import { bisector as _e, max as p, min as ve } from "d3-array";
11
11
  import { timeTicks as ye } from "d3-time";
12
12
  //#region src/components/charts/timeseries.tsx
13
13
  var m = { kind: {
@@ -24,83 +24,83 @@ function _(e, t) {
24
24
  let n = new Intl.DateTimeFormat(e === "en" ? "en-US" : e, t);
25
25
  return (e) => n.format(e);
26
26
  }
27
- var be = {
27
+ var v = {
28
28
  hour: "2-digit",
29
29
  minute: "2-digit",
30
30
  hourCycle: "h23"
31
- }, v = {
31
+ }, y = {
32
32
  month: "short",
33
33
  day: "numeric"
34
34
  };
35
- function xe(e, t) {
35
+ function be(e, t) {
36
36
  let n = 36e5;
37
- if (t <= 48 * n) return _(e, be);
38
- if (t <= 2160 * n) return _(e, v);
37
+ if (t <= 48 * n) return _(e, v);
38
+ if (t <= 2160 * n) return _(e, y);
39
39
  let r = _(e, { month: "short" });
40
40
  return (e) => e.getMonth() === 0 ? String(e.getFullYear()) : r(e);
41
41
  }
42
- var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 240, formatValue: y = (e) => r(e), threshold: b, hideLegend: Se, highlight: x, formatTime: S, className: Ce, "aria-label": C, ...w }, we) {
43
- let Te = t(), T = n(), [Ee, E] = ne(), D = me().replace(/:/g, ""), O = ie(y), [k, De] = s(/* @__PURE__ */ new Set()), [A, Oe] = s(null), [j, ke] = s(null), M = a.filter((e) => !k.has(e.id)), N = o(() => (a[0]?.points ?? []).map((e) => new Date(e.t)), [a]), P = M.flatMap((e) => e.points.map((e) => e.v)), F = Math.max(0, E.width - g.left - g.right), I = Math.max(0, h - g.top - g.bottom), L = m === "stacked", Ae = L ? f(N.map((e, t) => M.reduce((e, n) => e + (n.points[t]?.v ?? 0), 0))) ?? 0 : f(P) ?? 0, R = p().domain([0, Math.max(Ae, b?.value ?? 0) * 1.08 || 1]).nice(4).range([I, 0]), z = le(P, R.domain()[1] ?? 1, !!w.loading), B = o(() => {
42
+ var b = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 240, formatValue: b = (e) => r(e), threshold: x, hideLegend: xe, highlight: S, formatTime: C, className: Se, "aria-label": w, ...T }, Ce) {
43
+ let we = t(), Te = n(), [Ee, E] = ne(), D = he().replace(/:/g, ""), De = ie(b), [O, Oe] = s(/* @__PURE__ */ new Set()), [k, ke] = s(null), [A, Ae] = s(null), j = a.filter((e) => !O.has(e.id)), M = o(() => (a[0]?.points ?? []).map((e) => new Date(e.t)), [a]), N = j.flatMap((e) => e.points.map((e) => e.v)), P = Math.max(0, E.width - g.left - g.right), F = Math.max(0, h - g.top - g.bottom), I = m === "stacked", je = I ? p(M.map((e, t) => j.reduce((e, n) => e + (n.points[t]?.v ?? 0), 0))) ?? 0 : p(N) ?? 0, L = me().domain([0, Math.max(je, x?.value ?? 0) * 1.08 || 1]).nice(4).range([F, 0]), R = le(N, L.domain()[1] ?? 1, !!T.loading), z = o(() => {
44
44
  let e = 0;
45
- return M.map((t) => t.points.map(() => z.values[e++] ?? 0));
46
- }, [M, z.values]), je = R.copy().domain([0, z.top || 1]), V = ve(N) ?? /* @__PURE__ */ new Date(), H = f(N) ?? /* @__PURE__ */ new Date(), U = p().domain([V.getTime(), H.getTime()]).range([0, F]), W = L ? ge().keys(M.map((e, t) => String(t)))(N.map((e, t) => M.map((e, n) => B[n]?.[t] ?? 0))) : null, G = (e) => Math.max(0, je(e)), Me = (w.loading ? R.ticks(4) : te(pe(R, O), P)).filter((e) => e <= (z.top || 1) + 1e-9), Ne = ye(V, H, Math.max(2, Math.min(8, Math.floor(F / 96)))), K = (N[N.length - 1]?.getTime() ?? 0) - (N[0]?.getTime() ?? 0), q = xe(T, K), J = (N[1]?.getTime() ?? 0) - (N[0]?.getTime() ?? 0), Pe = S ?? _(T, J && J < 864e5 ? {
47
- weekday: "short",
48
- ...v,
49
- ...be
50
- } : K <= 7776e6 ? {
45
+ return j.map((t) => t.points.map(() => R.values[e++] ?? 0));
46
+ }, [j, R.values]), Me = L.copy().domain([0, R.top || 1]), B = ve(M) ?? /* @__PURE__ */ new Date(), V = p(M) ?? /* @__PURE__ */ new Date(), H = me().domain([B.getTime(), V.getTime()]).range([0, P]), U = I ? ge().keys(j.map((e, t) => String(t)))(M.map((e, t) => j.map((e, n) => z[n]?.[t] ?? 0))) : null, W = (e) => Math.max(0, Me(e)), Ne = (T.loading ? L.ticks(4) : te(pe(L, De), N)).filter((e) => e <= (R.top || 1) + 1e-9), Pe = ye(B, V, Math.max(2, Math.min(8, Math.floor(P / 96)))), G = (M[M.length - 1]?.getTime() ?? 0) - (M[0]?.getTime() ?? 0), K = be(Te, G), q = (M[1]?.getTime() ?? 0) - (M[0]?.getTime() ?? 0), J = C ?? _(Te, q && q < 864e5 ? {
51
47
  weekday: "short",
48
+ ...y,
52
49
  ...v
50
+ } : G <= 7776e6 ? {
51
+ weekday: "short",
52
+ ...y
53
53
  } : {
54
- ...v,
54
+ ...y,
55
55
  year: "numeric"
56
- }), Fe = he().x((e, t) => Math.round(U(N[t] ?? /* @__PURE__ */ new Date()))).y((e) => G(e)).curve(d), Ie = u().x((e, t) => Math.round(U(N[t] ?? /* @__PURE__ */ new Date()))).y0(I).y1((e) => G(e)).curve(d), Le = u().x((e, t) => Math.round(U(N[t] ?? /* @__PURE__ */ new Date()))).y0((e) => G(e[0])).y1((e) => G(e[1])).curve(d), Re = he().x((e, t) => Math.round(U(N[t] ?? /* @__PURE__ */ new Date()))).y((e) => G(e[1])).curve(d), ze = o(() => oe(a.map((e) => e.id)), [a]), Y = (e) => e.color ?? ze.get(e.id), Be = _e((e) => e.getTime()).center, Ve = (e) => {
57
- let t = e.currentTarget.getBoundingClientRect(), n = Be(N, U.invert(e.clientX - t.left));
58
- ke({
56
+ }), Fe = f().x((e, t) => Math.round(H(M[t] ?? /* @__PURE__ */ new Date()))).y((e) => W(e)).curve(d), Ie = u().x((e, t) => Math.round(H(M[t] ?? /* @__PURE__ */ new Date()))).y0(F).y1((e) => W(e)).curve(d), Le = u().x((e, t) => Math.round(H(M[t] ?? /* @__PURE__ */ new Date()))).y0((e) => W(e[0])).y1((e) => W(e[1])).curve(d), Re = f().x((e, t) => Math.round(H(M[t] ?? /* @__PURE__ */ new Date()))).y((e) => W(e[1])).curve(d), ze = o(() => oe(a.map((e) => e.id)), [a]), Y = (e) => e.color ?? ze.get(e.id), Be = _e((e) => e.getTime()).center, Ve = (e) => {
57
+ let t = e.currentTarget.getBoundingClientRect(), n = Be(M, H.invert(e.clientX - t.left));
58
+ Ae({
59
59
  i: n,
60
60
  y: Math.round(e.clientY - t.top + g.top)
61
61
  });
62
62
  }, He = {
63
- columns: [Te("timeseriesChart.time", "Time"), ...a.map((e) => e.label)],
64
- rows: N.map((e, t) => [(S ?? q)(e), ...a.map((e) => y(e.points[t]?.v ?? 0))])
65
- }, Ue = w.empty ?? a.every((e) => e.points.every((e) => e.v === 0)), X = !!w.loading || Ue, Z = re(X || w.error ? 0 : N.length), Q = X || w.error ? null : j?.i ?? Z.index ?? (x !== void 0 && x < N.length ? x : null), $ = Q === null ? 0 : Math.round(U(N[Q])) + g.left, We = Q === null ? 0 : j && j.i === Q ? j.y : g.top + Math.round(G(L ? W?.[W.length - 1]?.[Q]?.[1] ?? 0 : Math.max(0, ...B.map((e) => e[Q] ?? 0)))), Ge = (e) => M.map((t) => {
66
- let n = t.points[e]?.v ?? 0, r = M.reduce((t, n) => t + (n.points[e]?.v ?? 0), 0);
63
+ columns: [we("timeseriesChart.time", "Time"), ...a.map((e) => e.label)],
64
+ rows: M.map((e, t) => [(C ?? K)(e), ...a.map((e) => b(e.points[t]?.v ?? 0))])
65
+ }, Ue = T.empty ?? a.every((e) => e.points.every((e) => e.v === 0)), X = !!T.loading || Ue, Z = re(X || T.error ? 0 : M.length), Q = X || T.error ? null : A?.i ?? Z.index ?? (S !== void 0 && S < M.length ? S : null), $ = Q === null ? 0 : Math.round(H(M[Q])) + g.left, We = Q === null ? 0 : A && A.i === Q ? A.y : g.top + Math.round(W(I ? U?.[U.length - 1]?.[Q]?.[1] ?? 0 : Math.max(0, ...z.map((e) => e[Q] ?? 0)))), Ge = (e) => j.map((t) => {
66
+ let n = t.points[e]?.v ?? 0, r = j.reduce((t, n) => t + (n.points[e]?.v ?? 0), 0);
67
67
  return {
68
68
  id: t.id,
69
69
  label: t.label,
70
70
  color: Y(t),
71
- value: y(n),
72
- ...M.length > 1 && r ? { share: ee(Math.round(n / r * 100) / 100, 0) } : {}
71
+ value: b(n),
72
+ ...j.length > 1 && r ? { share: ee(Math.round(n / r * 100) / 100, 0) } : {}
73
73
  };
74
74
  });
75
75
  return /* @__PURE__ */ c("div", {
76
- ref: we,
77
- className: e("min-w-0", Ce),
76
+ ref: Ce,
77
+ className: e("min-w-0", Se),
78
78
  children: /* @__PURE__ */ c(ue, {
79
- label: C,
79
+ label: w,
80
80
  height: h,
81
81
  table: He,
82
82
  state: {
83
- ...w,
83
+ ...T,
84
84
  empty: Ue
85
85
  },
86
- legend: !Se && a.length > 1 ? /* @__PURE__ */ c(fe, {
86
+ legend: !xe && a.length > 1 ? /* @__PURE__ */ c(fe, {
87
87
  items: a.map((e) => ({
88
88
  id: e.id,
89
89
  label: e.label,
90
90
  color: Y(e)
91
91
  })),
92
- hidden: k,
92
+ hidden: O,
93
93
  shape: m === "line" ? "line" : "square",
94
94
  onToggle: (e) => {
95
- let t = new Set(k);
96
- t.has(e) ? t.delete(e) : t.add(e), De(t);
95
+ let t = new Set(O);
96
+ t.has(e) ? t.delete(e) : t.add(e), Oe(t);
97
97
  },
98
- onHover: Oe
98
+ onHover: ke
99
99
  }) : void 0,
100
100
  children: /* @__PURE__ */ l("div", {
101
101
  ref: Ee,
102
102
  role: "group",
103
- "aria-label": C,
103
+ "aria-label": w,
104
104
  ...Z.props,
105
105
  className: "absolute inset-0 rounded-cell focus-ring",
106
106
  children: [
@@ -109,7 +109,7 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
109
109
  height: h,
110
110
  className: "block overflow-visible",
111
111
  role: "presentation",
112
- children: [/* @__PURE__ */ c("defs", { children: M.map((e) => /* @__PURE__ */ l("linearGradient", {
112
+ children: [/* @__PURE__ */ c("defs", { children: j.map((e) => /* @__PURE__ */ l("linearGradient", {
113
113
  id: `${D}-${e.id}`,
114
114
  x1: "0",
115
115
  y1: "0",
@@ -127,39 +127,39 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
127
127
  }, e.id)) }), /* @__PURE__ */ l("g", {
128
128
  transform: `translate(${g.left},${g.top})`,
129
129
  children: [
130
- Me.map((e) => /* @__PURE__ */ l("g", {
131
- transform: `translate(0,${Math.round(G(e)) + .5})`,
130
+ Ne.map((e) => /* @__PURE__ */ l("g", {
131
+ transform: `translate(0,${Math.round(W(e)) + .5})`,
132
132
  children: [e !== 0 && /* @__PURE__ */ c("line", {
133
- x2: F,
133
+ x2: P,
134
134
  ...i.grid
135
- }), !w.loading && /* @__PURE__ */ c("text", {
136
- x: F + 12,
135
+ }), !T.loading && /* @__PURE__ */ c("text", {
136
+ x: P + 12,
137
137
  dy: "0.32em",
138
138
  ...i.label,
139
- children: O(e)
139
+ children: De(e)
140
140
  })]
141
141
  }, e)),
142
142
  /* @__PURE__ */ c("line", {
143
- x2: F,
144
- y1: I + .5,
145
- y2: I + .5,
143
+ x2: P,
144
+ y1: F + .5,
145
+ y2: F + .5,
146
146
  ...i.baseline
147
147
  }),
148
- ae(Ne.map((e) => ({
148
+ ae(Pe.map((e) => ({
149
149
  key: e.getTime(),
150
- at: Math.round(U(e)),
151
- label: q(e)
152
- })), F + g.right).map((e) => /* @__PURE__ */ c("text", {
150
+ at: Math.round(H(e)),
151
+ label: K(e)
152
+ })), P + g.right).map((e) => /* @__PURE__ */ c("text", {
153
153
  x: e.x,
154
- y: I + 20,
154
+ y: F + 20,
155
155
  textAnchor: e.anchor,
156
156
  ...i.label,
157
157
  children: e.label
158
158
  }, e.key)),
159
- X ? null : L && W ? W.map((e, t) => {
160
- let n = M[t];
159
+ X ? null : I && U ? U.map((e, t) => {
160
+ let n = j[t];
161
161
  return /* @__PURE__ */ l("g", {
162
- opacity: A && A !== n.id ? .3 : 1,
162
+ opacity: k && k !== n.id ? .3 : 1,
163
163
  className: "opacity-motion",
164
164
  children: [/* @__PURE__ */ c("path", {
165
165
  d: Le(e) ?? "",
@@ -174,14 +174,14 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
174
174
  strokeLinecap: "round"
175
175
  })]
176
176
  }, n.id);
177
- }) : M.map((e, t) => /* @__PURE__ */ l("g", {
178
- opacity: A && A !== e.id ? .3 : 1,
177
+ }) : j.map((e, t) => /* @__PURE__ */ l("g", {
178
+ opacity: k && k !== e.id ? .3 : 1,
179
179
  className: "opacity-motion",
180
180
  children: [m === "area" && /* @__PURE__ */ c("path", {
181
- d: Ie(B[t] ?? []) ?? "",
181
+ d: Ie(z[t] ?? []) ?? "",
182
182
  fill: `url(#${D}-${e.id})`
183
183
  }), /* @__PURE__ */ c("path", {
184
- d: Fe(B[t] ?? []) ?? "",
184
+ d: Fe(z[t] ?? []) ?? "",
185
185
  fill: "none",
186
186
  stroke: Y(e),
187
187
  strokeWidth: 2,
@@ -189,10 +189,10 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
189
189
  strokeLinecap: "round"
190
190
  })]
191
191
  }, e.id)),
192
- b && /* @__PURE__ */ l("g", {
193
- transform: `translate(0,${Math.round(G(b.value)) + .5})`,
192
+ x && /* @__PURE__ */ l("g", {
193
+ transform: `translate(0,${Math.round(W(x.value)) + .5})`,
194
194
  children: [/* @__PURE__ */ c("line", {
195
- x2: F,
195
+ x2: P,
196
196
  stroke: "var(--k-danger)",
197
197
  strokeDasharray: "4 4",
198
198
  strokeWidth: 1
@@ -202,7 +202,7 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
202
202
  fill: "var(--k-danger-text)",
203
203
  fontSize: 12,
204
204
  fontWeight: 500,
205
- children: b.label
205
+ children: x.label
206
206
  })]
207
207
  }),
208
208
  Q !== null && /* @__PURE__ */ l("g", {
@@ -210,12 +210,12 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
210
210
  children: [/* @__PURE__ */ c("line", {
211
211
  x1: $ - g.left + .5,
212
212
  x2: $ - g.left + .5,
213
- y2: I,
213
+ y2: F,
214
214
  ...i.grid,
215
215
  stroke: "var(--k-line-strong)"
216
- }), !L && M.map((e, t) => /* @__PURE__ */ c("circle", {
216
+ }), !I && j.map((e, t) => /* @__PURE__ */ c("circle", {
217
217
  cx: $ - g.left,
218
- cy: G(B[t]?.[Q] ?? 0),
218
+ cy: W(z[t]?.[Q] ?? 0),
219
219
  r: 4,
220
220
  fill: Y(e),
221
221
  stroke: "var(--k-bg-panel)",
@@ -223,31 +223,31 @@ var y = /* @__PURE__ */ a(function({ series: a, kind: m = "line", height: h = 24
223
223
  }, e.id))]
224
224
  }),
225
225
  /* @__PURE__ */ c("rect", {
226
- width: F,
227
- height: I,
226
+ width: P,
227
+ height: F,
228
228
  fill: "transparent",
229
229
  onPointerMove: Ve,
230
- onPointerLeave: () => ke(null)
230
+ onPointerLeave: () => Ae(null)
231
231
  })
232
232
  ]
233
233
  })]
234
234
  }),
235
- Q !== null && N[Q] && /* @__PURE__ */ c(ce, {
235
+ Q !== null && M[Q] && /* @__PURE__ */ c(ce, {
236
236
  x: $,
237
237
  y: We,
238
238
  width: E.width,
239
239
  visible: !0,
240
- heading: Pe(N[Q]),
240
+ heading: J(M[Q]),
241
241
  rows: Ge(Q)
242
242
  }),
243
- /* @__PURE__ */ c(de, { children: Z.index !== null && Q !== null && N[Z.index] ? se(Pe(N[Z.index]), Ge(Z.index), Te) : null })
243
+ /* @__PURE__ */ c(de, { children: Z.index !== null && Q !== null && M[Z.index] ? se(J(M[Z.index]), Ge(Z.index), we) : null })
244
244
  ]
245
245
  })
246
246
  })
247
247
  });
248
248
  });
249
- process.env.NODE_ENV !== "production" && (y.displayName = "TimeseriesChart");
249
+ process.env.NODE_ENV !== "production" && (b.displayName = "TimeseriesChart");
250
250
  //#endregion
251
- export { h as KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS, m as KAESO_TIMESERIES_CHART_VARIANTS, y as TimeseriesChart };
251
+ export { h as KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS, m as KAESO_TIMESERIES_CHART_VARIANTS, b as TimeseriesChart };
252
252
 
253
253
  //# sourceMappingURL=timeseries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeseries.js","names":["d3max","d3min","d3stack","d3line","d3area","cn","useUiText","useLocale","wholeTicks","useSize","useChartKeys","tickLabel","placeTimeLabels","seriesColors","liveLine","ChartTooltip","useTweenedScale","ChartFrame","ChartLive","Legend","AXIS","readableTicks","KAESO_TIMESERIES_CHART_VARIANTS","KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS","M","timeFormat","f","locale","options","d","CLOCK","DAY","tickFormat","h","span","month","TimeseriesChart","formatNumber","v","ariaLabel","state","t","box","size","gid","useId","axisLabel","formatValue","hidden","setHidden","useState","focus","setFocus","hover","setHover","visible","series","s","times","useMemo","p","flatValues","w","height","stacked","kind","top","max","a","ti","axis","scaleLinear","threshold","tween","values","k","yScale","t0","min","t1","x","stackData","stack","i","si","y","yTicks","xTicks","timeTicks","fmt","step","headingFormat","formatTime","lineGen","line","curveMonotoneX","areaGen","area","stackArea","stackTop","palette","color","bis","bisector","onMove","r","table","empty","blank","keys","active","highlight","activeX","activeY","sv","rowsFor","total","acc","ss","formatPercent","className","hideLegend","n","id","l","li","layer"],"sources":["../../../src/components/charts/timeseries.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { scaleLinear } from \"d3-scale\";\nimport { area as d3area, curveMonotoneX, line as d3line, stack as d3stack } from \"d3-shape\";\nimport { bisector, max as d3max, min as d3min } from \"d3-array\";\nimport { timeTicks } from \"d3-time\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n Legend,\n placeTimeLabels,\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_TIMESERIES_CHART_VARIANTS = {\n kind: {\n line: { classes: \"\" },\n area: { classes: \"\" },\n stacked: { classes: \"\" },\n },\n} as const;\nexport const KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS = { kind: \"line\" } as const;\n\nexport interface TimePoint {\n t: Date | number | string;\n v: number;\n}\nexport interface TimeSeries {\n id: string;\n label: string;\n points: TimePoint[];\n color?: string | undefined;\n}\n\nexport interface TimeseriesChartProps extends ChartState {\n series: TimeSeries[];\n kind?: keyof typeof KAESO_TIMESERIES_CHART_VARIANTS.kind | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n threshold?: { value: number; label: string } | undefined;\n hideLegend?: boolean | undefined;\n highlight?: number | undefined;\n formatTime?: ((t: Date) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nconst M = { top: 8, right: 52, bottom: 28, left: 0 };\n\nfunction timeFormat(locale: string, options: Intl.DateTimeFormatOptions): (d: Date) => string {\n const f = new Intl.DateTimeFormat(locale === \"en\" ? \"en-US\" : locale, options);\n return (d) => f.format(d);\n}\nconst CLOCK = { hour: \"2-digit\", minute: \"2-digit\", hourCycle: \"h23\" } as const;\nconst DAY = { month: \"short\", day: \"numeric\" } as const;\n\nfunction tickFormat(locale: string, span: number) {\n const h = 3_600_000;\n if (span <= 48 * h) return timeFormat(locale, CLOCK);\n if (span <= 90 * 24 * h) return timeFormat(locale, DAY);\n const month = timeFormat(locale, { month: \"short\" });\n return (d: Date) => (d.getMonth() === 0 ? String(d.getFullYear()) : month(d));\n}\n\nexport const TimeseriesChart = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeseriesChartProps>(function TimeseriesChart(\n {\n series,\n kind = \"line\",\n height = 240,\n formatValue = (v) => formatNumber(v),\n threshold,\n hideLegend,\n highlight,\n formatTime,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const [box, size] = useSize<HTMLDivElement>();\n const gid = useId().replace(/:/g, \"\");\n const axisLabel = tickLabel(formatValue);\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n const [focus, setFocus] = useState<string | null>(null);\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const visible = series.filter((s) => !hidden.has(s.id));\n const times = useMemo(() => (series[0]?.points ?? []).map((p) => new Date(p.t)), [series]);\n const flatValues = visible.flatMap((s) => s.points.map((p) => p.v));\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 stacked = kind === \"stacked\";\n const top = stacked ? (d3max(times.map((_, ti) => visible.reduce((a, s) => a + (s.points[ti]?.v ?? 0), 0))) ?? 0) : (d3max(flatValues) ?? 0);\n const axis = scaleLinear()\n .domain([0, Math.max(top, threshold?.value ?? 0) * 1.08 || 1])\n .nice(4)\n .range([h, 0]);\n const tween = useTweenedScale(flatValues, axis.domain()[1] ?? 1, !!state.loading);\n const values = useMemo(() => {\n let k = 0;\n return visible.map((s) => s.points.map(() => tween.values[k++] ?? 0));\n }, [visible, tween.values]);\n const yScale = axis.copy().domain([0, tween.top || 1]);\n const t0 = d3min(times) ?? new Date();\n const t1 = d3max(times) ?? new Date();\n const x = scaleLinear().domain([t0.getTime(), t1.getTime()]).range([0, w]);\n const stackData = stacked\n ? d3stack<number[]>().keys(visible.map((_, i) => String(i)))(times.map((_, ti) => visible.map((_, si) => values[si]?.[ti] ?? 0)))\n : null;\n const y = (v: number) => Math.max(0, yScale(v));\n const yTicks = (state.loading ? axis.ticks(4) : wholeTicks(readableTicks(axis, axisLabel), flatValues)).filter((t) => t <= (tween.top || 1) + 1e-9);\n const xTicks = timeTicks(t0, t1, Math.max(2, Math.min(8, Math.floor(w / 96))));\n const span = (times[times.length - 1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const fmt = tickFormat(locale, span);\n const step = (times[1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const headingFormat =\n formatTime ??\n timeFormat(\n locale,\n step && step < 86_400_000 ? { weekday: \"short\", ...DAY, ...CLOCK } : span <= 90 * 86_400_000 ? { weekday: \"short\", ...DAY } : { ...DAY, year: \"numeric\" },\n );\n const lineGen = d3line<number>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y((v) => y(v))\n .curve(curveMonotoneX);\n const areaGen = d3area<number>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y0(h)\n .y1((v) => y(v))\n .curve(curveMonotoneX);\n const stackArea = d3area<[number, number]>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y0((d) => y(d[0]))\n .y1((d) => y(d[1]))\n .curve(curveMonotoneX);\n\n const stackTop = d3line<[number, number]>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y((d) => y(d[1]))\n .curve(curveMonotoneX);\n const palette = useMemo(() => seriesColors(series.map((s) => s.id)), [series]);\n const color = (s: TimeSeries) => s.color ?? palette.get(s.id)!;\n const bis = bisector((d: Date) => d.getTime()).center;\n const onMove = (e: React.PointerEvent<SVGRectElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const i = bis(times, x.invert(e.clientX - r.left));\n setHover({ i, y: Math.round(e.clientY - r.top + M.top) });\n };\n\n const table = {\n columns: [t(\"timeseriesChart.time\", \"Time\"), ...series.map((s) => s.label)],\n rows: times.map((t, i) => [(formatTime ?? fmt)(t), ...series.map((s) => formatValue(s.points[i]?.v ?? 0))]),\n };\n\n const empty = state.empty ?? series.every((s) => s.points.every((p) => p.v === 0));\n const blank = !!state.loading || empty;\n const keys = useChartKeys(blank || state.error ? 0 : times.length);\n const active = blank || !!state.error ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < times.length ? highlight : null));\n const activeX = active === null ? 0 : Math.round(x(times[active]!)) + M.left;\n const activeY =\n active === null\n ? 0\n : hover && hover.i === active\n ? hover.y\n : M.top + Math.round(y(stacked ? (stackData?.[stackData.length - 1]?.[active]?.[1] ?? 0) : Math.max(0, ...values.map((sv) => sv[active] ?? 0))));\n const rowsFor = (i: number) =>\n visible.map((s) => {\n const v = s.points[i]?.v ?? 0;\n const total = visible.reduce((acc, ss) => acc + (ss.points[i]?.v ?? 0), 0);\n return {\n id: s.id,\n label: s.label,\n color: color(s),\n value: formatValue(v),\n ...(visible.length > 1 && total ? { share: formatPercent(Math.round((v / total) * 100) / 100, 0) } : {}),\n } as { id: string; label: ReactNode; color: string; value: ReactNode; share?: ReactNode | undefined };\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={{ ...state, empty }}\n legend={\n !hideLegend && series.length > 1 ? (\n <Legend\n items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))}\n hidden={hidden}\n shape={kind === \"line\" ? \"line\" : \"square\"}\n onToggle={(id) => {\n const n = new Set(hidden);\n if (n.has(id)) n.delete(id);\n else n.add(id);\n setHidden(n);\n }}\n onHover={setFocus}\n />\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 <defs>\n {visible.map((s) => (\n <linearGradient key={s.id} id={`${gid}-${s.id}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color(s)} className=\"chart-fill-top\" />\n <stop offset=\"100%\" stopColor={color(s)} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n <g transform={`translate(${M.left},${M.top})`}>\n {yTicks.map((t) => (\n <g key={t} transform={`translate(0,${Math.round(y(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 <line x2={w} y1={h + 0.5} y2={h + 0.5} {...AXIS.baseline} />\n {placeTimeLabels(\n xTicks.map((t) => ({ key: t.getTime(), at: Math.round(x(t)), label: fmt(t) })),\n w + M.right,\n ).map((l) => (\n <text key={l.key} x={l.x} y={h + 20} textAnchor={l.anchor} {...AXIS.label}>\n {l.label}\n </text>\n ))}\n {blank\n ? null\n : stacked && stackData\n ? stackData.map((layer, li) => {\n const s = visible[li]!;\n return (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n <path d={stackArea(layer as unknown as [number, number][]) ?? \"\"} fill={color(s)} className=\"chart-stack-fill\" />\n <path\n d={stackTop(layer as unknown as [number, number][]) ?? \"\"}\n fill=\"none\"\n stroke={color(s)}\n strokeWidth={1.5}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </g>\n );\n })\n : visible.map((s, si) => (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n {kind === \"area\" && <path d={areaGen(values[si] ?? []) ?? \"\"} fill={`url(#${gid}-${s.id})`} />}\n <path\n d={lineGen(values[si] ?? []) ?? \"\"}\n fill=\"none\"\n stroke={color(s)}\n strokeWidth={2}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </g>\n ))}\n {threshold && (\n <g transform={`translate(0,${Math.round(y(threshold.value)) + 0.5})`}>\n <line x2={w} stroke=\"var(--k-danger)\" strokeDasharray=\"4 4\" strokeWidth={1} />\n <text x={0} dy={-6} fill=\"var(--k-danger-text)\" fontSize={12} fontWeight={500}>\n {threshold.label}\n </text>\n </g>\n )}\n {active !== null && (\n <g aria-hidden>\n <line x1={activeX - M.left + 0.5} x2={activeX - M.left + 0.5} y2={h} {...AXIS.grid} stroke=\"var(--k-line-strong)\" />\n {!stacked &&\n visible.map((s, si) => (\n <circle\n key={s.id}\n cx={activeX - M.left}\n cy={y(values[si]?.[active] ?? 0)}\n r={4}\n fill={color(s)}\n stroke=\"var(--k-bg-panel)\"\n strokeWidth={2}\n />\n ))}\n </g>\n )}\n <rect width={w} height={h} fill=\"transparent\" onPointerMove={onMove} onPointerLeave={() => setHover(null)} />\n </g>\n </svg>\n )}\n {active !== null && times[active] && (\n <ChartTooltip x={activeX} y={activeY} width={size.width} visible heading={headingFormat(times[active]!)} rows={rowsFor(active)} />\n )}\n <ChartLive>\n {keys.index !== null && active !== null && times[keys.index] ? liveLine(headingFormat(times[keys.index]!), rowsFor(keys.index), t) : null}\n </ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TimeseriesChart.displayName = \"TimeseriesChart\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"timeseries.js","names":["d3max","d3min","d3stack","d3line","d3area","cn","useUiText","useLocale","wholeTicks","useSize","useChartKeys","tickLabel","placeTimeLabels","seriesColors","liveLine","ChartTooltip","useTweenedScale","ChartFrame","ChartLive","Legend","AXIS","readableTicks","scaleLinear","KAESO_TIMESERIES_CHART_VARIANTS","KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS","M","timeFormat","f","locale","options","d","CLOCK","DAY","tickFormat","h","span","month","TimeseriesChart","formatNumber","v","ariaLabel","state","t","box","size","gid","useId","axisLabel","formatValue","hidden","setHidden","useState","focus","setFocus","hover","setHover","visible","series","s","times","useMemo","p","flatValues","w","height","stacked","kind","top","max","a","ti","axis","threshold","tween","values","k","yScale","t0","min","t1","x","stackData","stack","i","si","y","yTicks","xTicks","timeTicks","fmt","step","headingFormat","formatTime","lineGen","line","curveMonotoneX","areaGen","area","stackArea","stackTop","palette","color","bis","bisector","onMove","r","table","empty","blank","keys","active","highlight","activeX","activeY","sv","rowsFor","total","acc","ss","formatPercent","className","hideLegend","n","id","l","li","layer"],"sources":["../../../src/components/charts/timeseries.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { forwardRef, useId, useMemo, useState, type ReactNode } from \"react\";\nimport { scaleLinear } from \"./linear-scale.js\";\nimport { area as d3area, curveMonotoneX, line as d3line, stack as d3stack } from \"d3-shape\";\nimport { bisector, max as d3max, min as d3min } from \"d3-array\";\nimport { timeTicks } from \"d3-time\";\nimport { cn } from \"../../utils/cn.js\";\nimport { formatNumber, formatPercent } from \"../../format/index.js\";\nimport { useLocale, useUiText } from \"../../i18n/context.js\";\nimport {\n AXIS,\n ChartFrame,\n ChartLive,\n ChartTooltip,\n Legend,\n placeTimeLabels,\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_TIMESERIES_CHART_VARIANTS = {\n kind: {\n line: { classes: \"\" },\n area: { classes: \"\" },\n stacked: { classes: \"\" },\n },\n} as const;\nexport const KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS = { kind: \"line\" } as const;\n\nexport interface TimePoint {\n t: Date | number | string;\n v: number;\n}\nexport interface TimeSeries {\n id: string;\n label: string;\n points: TimePoint[];\n color?: string | undefined;\n}\n\nexport interface TimeseriesChartProps extends ChartState {\n series: TimeSeries[];\n kind?: keyof typeof KAESO_TIMESERIES_CHART_VARIANTS.kind | undefined;\n height?: number | undefined;\n formatValue?: ((v: number) => string) | undefined;\n threshold?: { value: number; label: string } | undefined;\n hideLegend?: boolean | undefined;\n highlight?: number | undefined;\n formatTime?: ((t: Date) => string) | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n}\n\nconst M = { top: 8, right: 52, bottom: 28, left: 0 };\n\nfunction timeFormat(locale: string, options: Intl.DateTimeFormatOptions): (d: Date) => string {\n const f = new Intl.DateTimeFormat(locale === \"en\" ? \"en-US\" : locale, options);\n return (d) => f.format(d);\n}\nconst CLOCK = { hour: \"2-digit\", minute: \"2-digit\", hourCycle: \"h23\" } as const;\nconst DAY = { month: \"short\", day: \"numeric\" } as const;\n\nfunction tickFormat(locale: string, span: number) {\n const h = 3_600_000;\n if (span <= 48 * h) return timeFormat(locale, CLOCK);\n if (span <= 90 * 24 * h) return timeFormat(locale, DAY);\n const month = timeFormat(locale, { month: \"short\" });\n return (d: Date) => (d.getMonth() === 0 ? String(d.getFullYear()) : month(d));\n}\n\nexport const TimeseriesChart = /* @__PURE__ */ forwardRef<HTMLDivElement, TimeseriesChartProps>(function TimeseriesChart(\n {\n series,\n kind = \"line\",\n height = 240,\n formatValue = (v) => formatNumber(v),\n threshold,\n hideLegend,\n highlight,\n formatTime,\n className,\n \"aria-label\": ariaLabel,\n ...state\n },\n ref,\n) {\n const t = useUiText();\n const locale = useLocale();\n const [box, size] = useSize<HTMLDivElement>();\n const gid = useId().replace(/:/g, \"\");\n const axisLabel = tickLabel(formatValue);\n const [hidden, setHidden] = useState<Set<string>>(new Set());\n const [focus, setFocus] = useState<string | null>(null);\n const [hover, setHover] = useState<{ i: number; y: number } | null>(null);\n const visible = series.filter((s) => !hidden.has(s.id));\n const times = useMemo(() => (series[0]?.points ?? []).map((p) => new Date(p.t)), [series]);\n const flatValues = visible.flatMap((s) => s.points.map((p) => p.v));\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 stacked = kind === \"stacked\";\n const top = stacked ? (d3max(times.map((_, ti) => visible.reduce((a, s) => a + (s.points[ti]?.v ?? 0), 0))) ?? 0) : (d3max(flatValues) ?? 0);\n const axis = scaleLinear()\n .domain([0, Math.max(top, threshold?.value ?? 0) * 1.08 || 1])\n .nice(4)\n .range([h, 0]);\n const tween = useTweenedScale(flatValues, axis.domain()[1] ?? 1, !!state.loading);\n const values = useMemo(() => {\n let k = 0;\n return visible.map((s) => s.points.map(() => tween.values[k++] ?? 0));\n }, [visible, tween.values]);\n const yScale = axis.copy().domain([0, tween.top || 1]);\n const t0 = d3min(times) ?? new Date();\n const t1 = d3max(times) ?? new Date();\n const x = scaleLinear().domain([t0.getTime(), t1.getTime()]).range([0, w]);\n const stackData = stacked\n ? d3stack<number[]>().keys(visible.map((_, i) => String(i)))(times.map((_, ti) => visible.map((_, si) => values[si]?.[ti] ?? 0)))\n : null;\n const y = (v: number) => Math.max(0, yScale(v));\n const yTicks = (state.loading ? axis.ticks(4) : wholeTicks(readableTicks(axis, axisLabel), flatValues)).filter((t) => t <= (tween.top || 1) + 1e-9);\n const xTicks = timeTicks(t0, t1, Math.max(2, Math.min(8, Math.floor(w / 96))));\n const span = (times[times.length - 1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const fmt = tickFormat(locale, span);\n const step = (times[1]?.getTime() ?? 0) - (times[0]?.getTime() ?? 0);\n const headingFormat =\n formatTime ??\n timeFormat(\n locale,\n step && step < 86_400_000 ? { weekday: \"short\", ...DAY, ...CLOCK } : span <= 90 * 86_400_000 ? { weekday: \"short\", ...DAY } : { ...DAY, year: \"numeric\" },\n );\n const lineGen = d3line<number>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y((v) => y(v))\n .curve(curveMonotoneX);\n const areaGen = d3area<number>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y0(h)\n .y1((v) => y(v))\n .curve(curveMonotoneX);\n const stackArea = d3area<[number, number]>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y0((d) => y(d[0]))\n .y1((d) => y(d[1]))\n .curve(curveMonotoneX);\n\n const stackTop = d3line<[number, number]>()\n .x((_, i) => Math.round(x(times[i] ?? new Date())))\n .y((d) => y(d[1]))\n .curve(curveMonotoneX);\n const palette = useMemo(() => seriesColors(series.map((s) => s.id)), [series]);\n const color = (s: TimeSeries) => s.color ?? palette.get(s.id)!;\n const bis = bisector((d: Date) => d.getTime()).center;\n const onMove = (e: React.PointerEvent<SVGRectElement>) => {\n const r = e.currentTarget.getBoundingClientRect();\n const i = bis(times, x.invert(e.clientX - r.left));\n setHover({ i, y: Math.round(e.clientY - r.top + M.top) });\n };\n\n const table = {\n columns: [t(\"timeseriesChart.time\", \"Time\"), ...series.map((s) => s.label)],\n rows: times.map((t, i) => [(formatTime ?? fmt)(t), ...series.map((s) => formatValue(s.points[i]?.v ?? 0))]),\n };\n\n const empty = state.empty ?? series.every((s) => s.points.every((p) => p.v === 0));\n const blank = !!state.loading || empty;\n const keys = useChartKeys(blank || state.error ? 0 : times.length);\n const active = blank || !!state.error ? null : (hover?.i ?? keys.index ?? (highlight !== undefined && highlight < times.length ? highlight : null));\n const activeX = active === null ? 0 : Math.round(x(times[active]!)) + M.left;\n const activeY =\n active === null\n ? 0\n : hover && hover.i === active\n ? hover.y\n : M.top + Math.round(y(stacked ? (stackData?.[stackData.length - 1]?.[active]?.[1] ?? 0) : Math.max(0, ...values.map((sv) => sv[active] ?? 0))));\n const rowsFor = (i: number) =>\n visible.map((s) => {\n const v = s.points[i]?.v ?? 0;\n const total = visible.reduce((acc, ss) => acc + (ss.points[i]?.v ?? 0), 0);\n return {\n id: s.id,\n label: s.label,\n color: color(s),\n value: formatValue(v),\n ...(visible.length > 1 && total ? { share: formatPercent(Math.round((v / total) * 100) / 100, 0) } : {}),\n } as { id: string; label: ReactNode; color: string; value: ReactNode; share?: ReactNode | undefined };\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={{ ...state, empty }}\n legend={\n !hideLegend && series.length > 1 ? (\n <Legend\n items={series.map((s) => ({ id: s.id, label: s.label, color: color(s) }))}\n hidden={hidden}\n shape={kind === \"line\" ? \"line\" : \"square\"}\n onToggle={(id) => {\n const n = new Set(hidden);\n if (n.has(id)) n.delete(id);\n else n.add(id);\n setHidden(n);\n }}\n onHover={setFocus}\n />\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 <defs>\n {visible.map((s) => (\n <linearGradient key={s.id} id={`${gid}-${s.id}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={color(s)} className=\"chart-fill-top\" />\n <stop offset=\"100%\" stopColor={color(s)} stopOpacity={0} />\n </linearGradient>\n ))}\n </defs>\n <g transform={`translate(${M.left},${M.top})`}>\n {yTicks.map((t) => (\n <g key={t} transform={`translate(0,${Math.round(y(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 <line x2={w} y1={h + 0.5} y2={h + 0.5} {...AXIS.baseline} />\n {placeTimeLabels(\n xTicks.map((t) => ({ key: t.getTime(), at: Math.round(x(t)), label: fmt(t) })),\n w + M.right,\n ).map((l) => (\n <text key={l.key} x={l.x} y={h + 20} textAnchor={l.anchor} {...AXIS.label}>\n {l.label}\n </text>\n ))}\n {blank\n ? null\n : stacked && stackData\n ? stackData.map((layer, li) => {\n const s = visible[li]!;\n return (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n <path d={stackArea(layer as unknown as [number, number][]) ?? \"\"} fill={color(s)} className=\"chart-stack-fill\" />\n <path\n d={stackTop(layer as unknown as [number, number][]) ?? \"\"}\n fill=\"none\"\n stroke={color(s)}\n strokeWidth={1.5}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </g>\n );\n })\n : visible.map((s, si) => (\n <g key={s.id} opacity={focus && focus !== s.id ? 0.3 : 1} className=\"opacity-motion\">\n {kind === \"area\" && <path d={areaGen(values[si] ?? []) ?? \"\"} fill={`url(#${gid}-${s.id})`} />}\n <path\n d={lineGen(values[si] ?? []) ?? \"\"}\n fill=\"none\"\n stroke={color(s)}\n strokeWidth={2}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n </g>\n ))}\n {threshold && (\n <g transform={`translate(0,${Math.round(y(threshold.value)) + 0.5})`}>\n <line x2={w} stroke=\"var(--k-danger)\" strokeDasharray=\"4 4\" strokeWidth={1} />\n <text x={0} dy={-6} fill=\"var(--k-danger-text)\" fontSize={12} fontWeight={500}>\n {threshold.label}\n </text>\n </g>\n )}\n {active !== null && (\n <g aria-hidden>\n <line x1={activeX - M.left + 0.5} x2={activeX - M.left + 0.5} y2={h} {...AXIS.grid} stroke=\"var(--k-line-strong)\" />\n {!stacked &&\n visible.map((s, si) => (\n <circle\n key={s.id}\n cx={activeX - M.left}\n cy={y(values[si]?.[active] ?? 0)}\n r={4}\n fill={color(s)}\n stroke=\"var(--k-bg-panel)\"\n strokeWidth={2}\n />\n ))}\n </g>\n )}\n <rect width={w} height={h} fill=\"transparent\" onPointerMove={onMove} onPointerLeave={() => setHover(null)} />\n </g>\n </svg>\n )}\n {active !== null && times[active] && (\n <ChartTooltip x={activeX} y={activeY} width={size.width} visible heading={headingFormat(times[active]!)} rows={rowsFor(active)} />\n )}\n <ChartLive>\n {keys.index !== null && active !== null && times[keys.index] ? liveLine(headingFormat(times[keys.index]!), rowsFor(keys.index), t) : null}\n </ChartLive>\n </div>\n </ChartFrame>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") TimeseriesChart.displayName = \"TimeseriesChart\";\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { KAESO_SPARKLINE_DEFAULT_VARIANTS as e, KAESO_SPARKLINE_VARIANTS as t, Sparkline as n } from "./charts/sparkline.js";
3
- import { A as r, C as i, D as a, E as o, O as s, S as c, T as l, _ as u, a as d, b as f, c as p, d as m, f as h, g, h as _, i as v, j as y, k as b, l as x, m as S, n as C, o as w, p as T, r as E, s as D, t as O, u as k, v as A, w as j, x as M, y as N } from "../chunks/core-Bgefcs3z.js";
3
+ import { A as r, C as i, D as a, E as o, O as s, S as c, T as l, _ as u, a as d, b as f, c as p, d as m, f as h, g, h as _, i as v, j as y, k as b, l as x, m as S, n as C, o as w, p as T, r as E, s as D, t as O, u as k, v as A, w as j, x as M, y as N } from "../chunks/core-K960A4OT.js";
4
4
  import { KAESO_TIMESERIES_CHART_DEFAULT_VARIANTS as P, KAESO_TIMESERIES_CHART_VARIANTS as F, TimeseriesChart as I } from "./charts/timeseries.js";
5
5
  import { BarChart as L, KAESO_BAR_CHART_DEFAULT_VARIANTS as R, KAESO_BAR_CHART_VARIANTS as z } from "./charts/bar.js";
6
6
  import { Donut as B, KAESO_DONUT_DEFAULT_VARIANTS as V, KAESO_DONUT_VARIANTS as H, KAESO_SHARE_BAR_DEFAULT_VARIANTS as U, KAESO_SHARE_BAR_VARIANTS as W, Ring as G, ShareBar as K, groupSmall as q, shareLabel as J, wholeShares as Y } from "./charts/donut.js";
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../chunks/code-block-BbK6E4Eo.js";
2
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "../chunks/code-block-DxtladFW.js";
3
3
  import { n as s, r as c, t as l } from "../chunks/json-view-B6KHIWzh.js";
4
4
  export { e as CODE_LANGS, o as CodeBlock, n as CodeHighlighted, l as JsonView, i as KAESO_CODE_BLOCK_DEFAULT_VARIANTS, t as KAESO_CODE_BLOCK_VARIANTS, s as KAESO_JSON_VIEW_DEFAULT_VARIANTS, c as KAESO_JSON_VIEW_VARIANTS, r as highlight, a as kaesoShikiTheme };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as Code, n as KAESO_CODE_DEFAULT_VARIANTS, r as KAESO_CODE_VARIANTS } from "../chunks/code-DDyOlIFO.js";
2
+ export { t as Code, n as KAESO_CODE_DEFAULT_VARIANTS, r as KAESO_CODE_VARIANTS } from "../chunks/code-BADhvsgC.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as Autocomplete, n as Combobox, r as Highlight, i as KAESO_COMBOBOX_DEFAULT_VARIANTS, a as KAESO_COMBOBOX_VARIANTS } from "../chunks/combobox-D8pQk22r.js";
2
+ export { t as Autocomplete, n as Combobox, r as Highlight, i as KAESO_COMBOBOX_DEFAULT_VARIANTS, a as KAESO_COMBOBOX_VARIANTS } from "../chunks/combobox-D30Wt11R.js";