@k2b/ui 0.50.0 → 0.51.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 (294) hide show
  1. package/dist/base.css +32 -1
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/CommandList.js +861 -0
  4. package/dist/browser/actions/CommandList.js.map +1 -0
  5. package/dist/browser/actions/CommandMenu.js +237 -0
  6. package/dist/browser/actions/CommandMenu.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +43 -10
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/command-dock.js +47 -0
  10. package/dist/browser/actions/command-dock.js.map +1 -0
  11. package/dist/browser/actions/command-items.js +84 -0
  12. package/dist/browser/actions/command-items.js.map +1 -0
  13. package/dist/browser/actions/command-messages.js +42 -0
  14. package/dist/browser/actions/command-messages.js.map +1 -0
  15. package/dist/browser/actions/index.js +1 -0
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/charts/core/area.js +3 -5
  18. package/dist/browser/charts/core/area.js.map +1 -1
  19. package/dist/browser/charts/core/calendar.js +1 -1
  20. package/dist/browser/charts/core/calendar.js.map +1 -1
  21. package/dist/browser/charts/core/chart-messages.js +17 -0
  22. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  23. package/dist/browser/charts/core/hbar-layout.js +118 -0
  24. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  25. package/dist/browser/charts/core/hbar.js +39 -0
  26. package/dist/browser/charts/core/hbar.js.map +1 -0
  27. package/dist/browser/charts/core/index.js +7 -2
  28. package/dist/browser/charts/core/index.js.map +1 -1
  29. package/dist/browser/charts/core/map.js +116 -0
  30. package/dist/browser/charts/core/map.js.map +1 -0
  31. package/dist/browser/charts/core/registry.js +22 -15
  32. package/dist/browser/charts/core/registry.js.map +1 -1
  33. package/dist/browser/charts/core/render-size.js +13 -0
  34. package/dist/browser/charts/core/render-size.js.map +1 -0
  35. package/dist/browser/charts/core/render.js +20 -10
  36. package/dist/browser/charts/core/render.js.map +1 -1
  37. package/dist/browser/charts/core/snapshot.js +3 -3
  38. package/dist/browser/charts/core/snapshot.js.map +1 -1
  39. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  40. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  41. package/dist/browser/charts/core/svg.js +4 -2525
  42. package/dist/browser/charts/core/svg.js.map +1 -1
  43. package/dist/browser/charts/core/types.js +0 -2
  44. package/dist/browser/charts/core/types.js.map +1 -1
  45. package/dist/browser/charts/core/waterfall.js +162 -0
  46. package/dist/browser/charts/core/waterfall.js.map +1 -0
  47. package/dist/browser/charts/description.js +2 -0
  48. package/dist/browser/charts/description.js.map +1 -0
  49. package/dist/browser/charts.js.map +1 -1
  50. package/dist/browser/content/Chart.js +14 -628
  51. package/dist/browser/content/Chart.js.map +1 -1
  52. package/dist/browser/content/ChartRoot.js +632 -0
  53. package/dist/browser/content/ChartRoot.js.map +1 -0
  54. package/dist/browser/content/ChartSparkline.js +24 -0
  55. package/dist/browser/content/ChartSparkline.js.map +1 -0
  56. package/dist/browser/content/FileView.js +111 -61
  57. package/dist/browser/content/FileView.js.map +1 -1
  58. package/dist/browser/content/Lightbox.js +8 -8
  59. package/dist/browser/content/Lightbox.js.map +1 -1
  60. package/dist/browser/content/MapView.js +30 -28
  61. package/dist/browser/content/MapView.js.map +1 -1
  62. package/dist/browser/content/PdfPreview.js +84 -52
  63. package/dist/browser/content/PdfPreview.js.map +1 -1
  64. package/dist/browser/content/PdfViewer.js +588 -0
  65. package/dist/browser/content/PdfViewer.js.map +1 -0
  66. package/dist/browser/content/chart-bar.js +246 -16
  67. package/dist/browser/content/chart-bar.js.map +1 -1
  68. package/dist/browser/content/chart-inspection-core.js +22 -21
  69. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  70. package/dist/browser/content/chart-line-gaps.js +1 -1
  71. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  72. package/dist/browser/content/chart-message-catalog.js +10 -0
  73. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  74. package/dist/browser/content/chart-state-timeline.js +1 -1
  75. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  76. package/dist/browser/content/chart-svg.js +2 -1
  77. package/dist/browser/content/chart-svg.js.map +1 -1
  78. package/dist/browser/content/index.js +1 -0
  79. package/dist/browser/content/index.js.map +1 -1
  80. package/dist/browser/content/pdf-document.js +29 -0
  81. package/dist/browser/content/pdf-document.js.map +1 -0
  82. package/dist/browser/content/pdf-limits.js +31 -0
  83. package/dist/browser/content/pdf-limits.js.map +1 -0
  84. package/dist/browser/content/pdf-messages.js +34 -2
  85. package/dist/browser/content/pdf-messages.js.map +1 -1
  86. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  87. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  88. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  89. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  90. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  91. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  92. package/dist/browser/inputs/DatePicker.js +113 -98
  93. package/dist/browser/inputs/DatePicker.js.map +1 -1
  94. package/dist/browser/inputs/PeriodPicker.js +874 -0
  95. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  96. package/dist/browser/inputs/index.js +4 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/input-messages.js +8 -2
  99. package/dist/browser/inputs/input-messages.js.map +1 -1
  100. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  102. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  103. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  104. package/dist/browser/inputs/period-picker-messages.js +71 -0
  105. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  106. package/dist/browser/inputs/period.js +263 -0
  107. package/dist/browser/inputs/period.js.map +1 -0
  108. package/dist/browser/layout/DetailPanel.js +147 -120
  109. package/dist/browser/layout/DetailPanel.js.map +1 -1
  110. package/dist/browser/layout/Discussion.js +101 -108
  111. package/dist/browser/layout/Discussion.js.map +1 -1
  112. package/dist/browser/layout/index.js.map +1 -1
  113. package/dist/browser/surfaces/DescriptionList.js +5 -2
  114. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +19 -14
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/surfaces/delta-badge.js +16 -2
  118. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  119. package/dist/browser/widgets/DashboardFrame.js +310 -0
  120. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  121. package/dist/browser/widgets/index.js +1 -0
  122. package/dist/browser/widgets/index.js.map +1 -1
  123. package/dist/licenses/pdfjs-dist.txt +177 -0
  124. package/dist/ssr/actions/Button.js.map +1 -1
  125. package/dist/ssr/actions/CommandList.js +638 -0
  126. package/dist/ssr/actions/CommandList.js.map +1 -0
  127. package/dist/ssr/actions/CommandMenu.js +197 -0
  128. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  129. package/dist/ssr/actions/Dropdown.js +43 -10
  130. package/dist/ssr/actions/Dropdown.js.map +1 -1
  131. package/dist/ssr/actions/command-dock.js +47 -0
  132. package/dist/ssr/actions/command-dock.js.map +1 -0
  133. package/dist/ssr/actions/command-items.js +84 -0
  134. package/dist/ssr/actions/command-items.js.map +1 -0
  135. package/dist/ssr/actions/command-messages.js +42 -0
  136. package/dist/ssr/actions/command-messages.js.map +1 -0
  137. package/dist/ssr/actions/index.js +1 -0
  138. package/dist/ssr/actions/index.js.map +1 -1
  139. package/dist/ssr/charts/core/area.js +3 -5
  140. package/dist/ssr/charts/core/area.js.map +1 -1
  141. package/dist/ssr/charts/core/calendar.js +1 -1
  142. package/dist/ssr/charts/core/calendar.js.map +1 -1
  143. package/dist/ssr/charts/core/chart-messages.js +17 -0
  144. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  145. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  146. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  147. package/dist/ssr/charts/core/hbar.js +39 -0
  148. package/dist/ssr/charts/core/hbar.js.map +1 -0
  149. package/dist/ssr/charts/core/index.js +7 -2
  150. package/dist/ssr/charts/core/index.js.map +1 -1
  151. package/dist/ssr/charts/core/map.js +116 -0
  152. package/dist/ssr/charts/core/map.js.map +1 -0
  153. package/dist/ssr/charts/core/registry.js +22 -15
  154. package/dist/ssr/charts/core/registry.js.map +1 -1
  155. package/dist/ssr/charts/core/render-size.js +13 -0
  156. package/dist/ssr/charts/core/render-size.js.map +1 -0
  157. package/dist/ssr/charts/core/render.js +20 -10
  158. package/dist/ssr/charts/core/render.js.map +1 -1
  159. package/dist/ssr/charts/core/snapshot.js +3 -3
  160. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  161. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  162. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  163. package/dist/ssr/charts/core/svg.js +4 -2525
  164. package/dist/ssr/charts/core/svg.js.map +1 -1
  165. package/dist/ssr/charts/core/types.js +0 -2
  166. package/dist/ssr/charts/core/types.js.map +1 -1
  167. package/dist/ssr/charts/core/waterfall.js +162 -0
  168. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  169. package/dist/ssr/charts/description.js +2 -0
  170. package/dist/ssr/charts/description.js.map +1 -0
  171. package/dist/ssr/charts.js.map +1 -1
  172. package/dist/ssr/content/Chart.js +14 -471
  173. package/dist/ssr/content/Chart.js.map +1 -1
  174. package/dist/ssr/content/ChartRoot.js +475 -0
  175. package/dist/ssr/content/ChartRoot.js.map +1 -0
  176. package/dist/ssr/content/ChartSparkline.js +24 -0
  177. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  178. package/dist/ssr/content/FileView.js +56 -7
  179. package/dist/ssr/content/FileView.js.map +1 -1
  180. package/dist/ssr/content/Lightbox.js +8 -8
  181. package/dist/ssr/content/Lightbox.js.map +1 -1
  182. package/dist/ssr/content/MapView.js +9 -9
  183. package/dist/ssr/content/MapView.js.map +1 -1
  184. package/dist/ssr/content/PdfPreview.js +49 -20
  185. package/dist/ssr/content/PdfPreview.js.map +1 -1
  186. package/dist/ssr/content/PdfViewer.js +484 -0
  187. package/dist/ssr/content/PdfViewer.js.map +1 -0
  188. package/dist/ssr/content/chart-bar.js +246 -16
  189. package/dist/ssr/content/chart-bar.js.map +1 -1
  190. package/dist/ssr/content/chart-inspection-core.js +22 -21
  191. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  192. package/dist/ssr/content/chart-line-gaps.js +1 -1
  193. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  194. package/dist/ssr/content/chart-message-catalog.js +10 -0
  195. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  196. package/dist/ssr/content/chart-state-timeline.js +1 -1
  197. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  198. package/dist/ssr/content/chart-svg.js +2 -1
  199. package/dist/ssr/content/chart-svg.js.map +1 -1
  200. package/dist/ssr/content/index.js +1 -0
  201. package/dist/ssr/content/index.js.map +1 -1
  202. package/dist/ssr/content/pdf-document.js +29 -0
  203. package/dist/ssr/content/pdf-document.js.map +1 -0
  204. package/dist/ssr/content/pdf-limits.js +31 -0
  205. package/dist/ssr/content/pdf-limits.js.map +1 -0
  206. package/dist/ssr/content/pdf-messages.js +34 -2
  207. package/dist/ssr/content/pdf-messages.js.map +1 -1
  208. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  209. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  210. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  211. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  212. package/dist/ssr/inputs/DatePicker.js +14 -9
  213. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  214. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  215. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  216. package/dist/ssr/inputs/index.js +4 -1
  217. package/dist/ssr/inputs/index.js.map +1 -1
  218. package/dist/ssr/inputs/input-messages.js +8 -2
  219. package/dist/ssr/inputs/input-messages.js.map +1 -1
  220. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  221. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  222. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  223. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  224. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  225. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  226. package/dist/ssr/inputs/period.js +263 -0
  227. package/dist/ssr/inputs/period.js.map +1 -0
  228. package/dist/ssr/layout/DetailPanel.js +27 -4
  229. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  230. package/dist/ssr/layout/Discussion.js +16 -2
  231. package/dist/ssr/layout/Discussion.js.map +1 -1
  232. package/dist/ssr/layout/index.js.map +1 -1
  233. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  234. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  235. package/dist/ssr/surfaces/StatCell.js +4 -5
  236. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  237. package/dist/ssr/surfaces/delta-badge.js +16 -2
  238. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  239. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  240. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  241. package/dist/ssr/widgets/index.js +1 -0
  242. package/dist/ssr/widgets/index.js.map +1 -1
  243. package/dist/styles.css +1 -1
  244. package/dist/types/actions/Button.d.ts +1 -1
  245. package/dist/types/actions/CommandList.d.ts +120 -0
  246. package/dist/types/actions/CommandMenu.d.ts +39 -0
  247. package/dist/types/actions/Dropdown.d.ts +17 -0
  248. package/dist/types/actions/command-dock.d.ts +8 -0
  249. package/dist/types/actions/command-items.d.ts +134 -0
  250. package/dist/types/actions/command-messages.d.ts +19 -0
  251. package/dist/types/actions/index.d.ts +3 -0
  252. package/dist/types/charts/core/calendar.d.ts +1 -1
  253. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  254. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  255. package/dist/types/charts/core/hbar.d.ts +13 -0
  256. package/dist/types/charts/core/index.d.ts +7 -2
  257. package/dist/types/charts/core/map.d.ts +3 -0
  258. package/dist/types/charts/core/registry.d.ts +17 -11
  259. package/dist/types/charts/core/render-size.d.ts +7 -0
  260. package/dist/types/charts/core/render.d.ts +1 -4
  261. package/dist/types/charts/core/snapshot.d.ts +2 -2
  262. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  263. package/dist/types/charts/core/svg.d.ts +4 -698
  264. package/dist/types/charts/core/types.d.ts +1 -12
  265. package/dist/types/charts/core/waterfall.d.ts +68 -0
  266. package/dist/types/charts/description.d.ts +226 -0
  267. package/dist/types/charts.d.ts +1 -0
  268. package/dist/types/content/Chart.d.ts +3 -91
  269. package/dist/types/content/ChartRoot.d.ts +92 -0
  270. package/dist/types/content/ChartSparkline.d.ts +5 -0
  271. package/dist/types/content/PdfViewer.d.ts +32 -0
  272. package/dist/types/content/chart-bar.d.ts +95 -2
  273. package/dist/types/content/index.d.ts +2 -0
  274. package/dist/types/content/pdf-document.d.ts +5 -0
  275. package/dist/types/content/pdf-engine.d.ts +9 -0
  276. package/dist/types/content/pdf-limits.d.ts +43 -0
  277. package/dist/types/content/pdf-messages.d.ts +16 -0
  278. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  279. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  280. package/dist/types/inputs/DatePicker.d.ts +22 -0
  281. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  282. package/dist/types/inputs/index.d.ts +8 -2
  283. package/dist/types/inputs/input-messages.d.ts +3 -0
  284. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  285. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  286. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  287. package/dist/types/inputs/period.d.ts +134 -0
  288. package/dist/types/layout/DetailPanel.d.ts +12 -0
  289. package/dist/types/layout/index.d.ts +1 -1
  290. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  291. package/dist/types/surfaces/StatCell.d.ts +6 -1
  292. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  293. package/dist/types/widgets/index.d.ts +1 -0
  294. package/package.json +2 -1
@@ -0,0 +1,632 @@
1
+ import { template as _$template } from "solid-js/web";
2
+ import { delegateEvents as _$delegateEvents } from "solid-js/web";
3
+ import { memo as _$memo } from "solid-js/web";
4
+ import { setProperty as _$setProperty } from "solid-js/web";
5
+ import { setStyleProperty as _$setStyleProperty } from "solid-js/web";
6
+ import { style as _$style } from "solid-js/web";
7
+ import { runHydrationEvents as _$runHydrationEvents } from "solid-js/web";
8
+ import { getNextMarker as _$getNextMarker } from "solid-js/web";
9
+ import { setAttribute as _$setAttribute } from "solid-js/web";
10
+ import { effect as _$effect } from "solid-js/web";
11
+ import { insert as _$insert } from "solid-js/web";
12
+ import { addEventListener as _$addEventListener } from "solid-js/web";
13
+ import { use as _$use } from "solid-js/web";
14
+ import { createComponent as _$createComponent } from "solid-js/web";
15
+ import { getNextElement as _$getNextElement } from "solid-js/web";
16
+ import { className as _$className } from "solid-js/web";
17
+ var _tmpl$ = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
18
+ _tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-chart__legend role=group tabindex=0>`),
19
+ _tmpl$3 = /*#__PURE__*/_$template(`<div class=k2b-chart__controls><!$><!/><!$><!/><!$><!/>`),
20
+ _tmpl$4 = /*#__PURE__*/_$template(`<div data-interactive=true role=group tabindex=0><!$><!/><div class=k2b-chart__svg></div><span class=k2b-chart__anchor aria-hidden=true></span><span role=tooltip popover=manual data-instant=true class="k2b-tooltip k2b-chart__tooltip"></span><!$><!/>`),
21
+ _tmpl$5 = /*#__PURE__*/_$template(`<div>`),
22
+ _tmpl$6 = /*#__PURE__*/_$template(`<b data-chart-legend-value>`),
23
+ _tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-chart__legend-item><svg viewBox="0 0 10 10"width=10 height=10 aria-hidden=true><rect x=1 y=1 width=8 height=8 rx=2 stroke=none></rect></svg><span></span><!$><!/>`);
24
+ import { createEffect, createMemo, createSignal, createUniqueId, For, onCleanup, onMount, Show, splitProps, untrack } from "solid-js";
25
+ import { isServer } from "solid-js/web";
26
+ import { IconButton } from "../actions/Button";
27
+ import { calendarLayout } from "../charts/core/calendar";
28
+ import { chartRenderHeight, preservesAspectRatio } from "../charts/core/render-size";
29
+ import { suppressTextSelection } from "../internal/text-selection";
30
+ import { useLocale } from "../intl/locale";
31
+ import { useUiMessages } from "../intl/messages";
32
+ import { calendarInspectionNavigation, mountCalendarScroll } from "./chart-calendar";
33
+ import { createChartInspection } from "./chart-inspection";
34
+ import { closeChartInspectionOnOutside } from "./chart-inspection-core";
35
+ import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from "./chart-map-viewport";
36
+ import { resolveChartMessages, useChartMessages } from "./chart-messages";
37
+ import { panStateTimelineViewport, stateTimelineDomain, stateTimelineHeight, zoomStateTimelineViewport } from "./chart-state-timeline";
38
+ import { selectedChartSvg } from "./chart-svg";
39
+ import { useViewportMessages } from "./viewport-messages";
40
+
41
+ /**
42
+ * Chart — Solid interaction and sizing around the portable UI chart core.
43
+ *
44
+ * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;
45
+ * Solid's `innerHTML` is reactive, so any time a prop (signal, store
46
+ * slice, derived value) changes, the SVG re-renders. No manual
47
+ * subscription, no imperative DOM patching. Trade-off: every change
48
+ * is a full SVG re-build, not a diff — fine for dashboard cadences
49
+ * (poll, websocket, store updates). Don't use this for 60fps streaming.
50
+ *
51
+ * **Sizing.** The server and browser render the same logical viewBox. CSS
52
+ * fits Cartesian plots to the container and preserves text/marker sizes;
53
+ * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain
54
+ * their aspect ratio. No measurement
55
+ * or hydration redraw is needed. The caller sizes the wrapper, for example
56
+ * `style={{ height: "14rem" }}`. State timelines derive their default height
57
+ * from the row count and legend via `stateTimelineHeight()`.
58
+ *
59
+ * **Why so thin.** The props are a discriminated union over each
60
+ * registered core chart renderer — `kind: "line"` brings in exactly the params
61
+ * `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
62
+ * Options stay aligned with the core renderer without renaming. Every chart provides
63
+ * renderer-owned inspection, tooltips and optional selection by default.
64
+ * `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
65
+ * When a core renderer gains an option, it is automatically available at every
66
+ * callsite.
67
+ *
68
+ * **Theming.** The core renderers use `currentColor` for axes / ticks /
69
+ * tick labels — set the wrapping element's `color` and everything
70
+ * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS
71
+ * custom properties; override on the parent for per-chart palettes.
72
+ *
73
+ * ```tsx
74
+ * <Chart kind="line" style={{ height: "12rem" }}
75
+ * series={[{ data: points() }]}
76
+ * yAxis={{ format: v => `€${v}k` }} />
77
+ *
78
+ * <Chart kind="donut" style={{ height: "12rem" }} data={slices()} />
79
+ *
80
+ * <Chart kind="sparkline" style={{ width: "6rem", height: "1.5rem" }} data={trend()} />
81
+ *
82
+ * <Chart kind="map" style={{ height: "16rem" }} series={locations()} interactive />
83
+ * ```
84
+ */
85
+
86
+ /** All registered chart kinds. */
87
+
88
+ /**
89
+ * Per-kind props: `kind` discriminator + the exact options that
90
+ * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper
91
+ * owns those — CSS fits a stable coordinate space to the box). Solid's
92
+ * component model handles discriminated unions natively, so callsites
93
+ * get full type safety.
94
+ */
95
+
96
+ /** Empty-data short-circuit. Kept per-kind because each renderer's payload
97
+ * key differs (series vs data vs groups). We're conservative: only
98
+ * block on truly empty inputs; partially-filled series get rendered
99
+ * as-is and the core handles the gaps. */
100
+ const isEmpty = props => {
101
+ if (props.kind === "area") return !props.x.length || !props.series.length || props.x.every((_, i) => props.series.some(s => s.data[i] === null) || props.normalize && props.series.every(s => s.data[i] === 0));
102
+ if (props.kind === "line" || props.kind === "scatter") {
103
+ return !props.series?.length || props.series.every(s => !s.data.length);
104
+ }
105
+ if (props.kind === "hbar") return !props.rows.length;
106
+ if (props.kind === "bar") return props.series ? !props.x?.length || !props.series.some(s => s.data.some(v => v !== null && Number.isFinite(v))) : !props.data?.length;
107
+ if (props.kind === "donut" || props.kind === "pie") {
108
+ return !props.data?.length;
109
+ }
110
+ if (props.kind === "histogram" || props.kind === "sparkline") {
111
+ return !props.data?.length;
112
+ }
113
+ if (props.kind === "boxplot") {
114
+ return !props.groups?.length;
115
+ }
116
+ if (props.kind === "stateTimeline") {
117
+ return !props.rows?.length || props.rows.every(row => !row.intervals.length);
118
+ }
119
+ return false;
120
+ };
121
+ export const renderChartRoot = (props, renderChartSvg) => {
122
+ const [, drawingProps] = splitProps(props, ["class", "style", "labels", "interactive", "selected", "onSelect", "tooltip", "cursor"]);
123
+ const messages = useUiMessages();
124
+ const chartMessages = useChartMessages();
125
+ const viewportMessages = useViewportMessages();
126
+ const locale = useLocale();
127
+ let containerRef;
128
+ let chartTooltipRef;
129
+ let lineAnchorRef;
130
+ // One deterministic coordinate space on the server and client. CSS fits the
131
+ // SVG to its box; hydration must never replace it with measured geometry.
132
+ const calendar = () => props.kind === "heatmap" && props.layout === "calendar" ? calendarLayout({
133
+ ...props,
134
+ locale: props.locale ?? locale()
135
+ }) : undefined;
136
+ const size = () => ({
137
+ width: calendar()?.width ?? 480,
138
+ height: chartRenderHeight(props)
139
+ });
140
+ const topLegend = () => props.kind === "area" ? props.legend !== false : props.kind === "line" && props.legend === true && props.legendPlacement === "top-start";
141
+ const legendSeries = () => props.kind === "line" || props.kind === "area" ? props.series : [];
142
+ const legendValue = index => {
143
+ if (props.kind !== "area") return "";
144
+ const last = props.x.length - 1;
145
+ const amount = props.series[index]?.data[last];
146
+ const values = props.series.map(s => s.data[last]);
147
+ const total = values.reduce((sum, value) => sum + (value ?? 0), 0);
148
+ if (amount == null || values.some(v => v == null) || props.normalize && total === 0) return "—";
149
+ return props.normalize ? new Intl.NumberFormat(locale(), {
150
+ style: "percent",
151
+ minimumFractionDigits: 1,
152
+ maximumFractionDigits: 1
153
+ }).format(amount / total) : props.format?.(amount) ?? new Intl.NumberFormat(locale(), {
154
+ maximumFractionDigits: 2
155
+ }).format(amount);
156
+ };
157
+ const dimensions = () => containerRef?.getBoundingClientRect() ?? size();
158
+ const initialMapViewport = props.kind === "map" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;
159
+ const [mapViewport, setMapViewport] = createSignal(initialMapViewport);
160
+ const initialTimelineViewport = props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
161
+ const [timelineViewport, setTimelineViewport] = createSignal(initialTimelineViewport);
162
+ const [dragging, setDragging] = createSignal(false);
163
+ const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;
164
+ let timelineViewportLocallyChanged = false;
165
+ let drag;
166
+ let timelineDrag;
167
+ let pointerFrame;
168
+ let pendingPointer;
169
+ const interactiveMap = () => props.kind === "map" && props.interactive === true;
170
+ const interactiveTimeline = () => props.kind === "stateTimeline" && props.interactive === true;
171
+ const draggable = () => interactiveMap() || interactiveTimeline();
172
+ const labels = () => props.labels ?? {};
173
+ const accessibleName = () => {
174
+ const override = props.kind === "map" ? labels().interactiveMap : props.kind === "stateTimeline" ? labels().interactiveTimeline : props.kind === "line" ? labels().interactiveLine : labels().interactiveChart;
175
+ const title = "title" in props && typeof props.title === "string" && props.title.trim() ? props.title : undefined;
176
+ const valueLabel = (props.kind === "stat" || props.kind === "gauge") && props.label?.trim() ? props.label : undefined;
177
+ const fallback = props.kind === "map" ? chartMessages().interactiveMap : props.kind === "stateTimeline" ? chartMessages().interactiveTimeline : props.kind === "line" ? chartMessages().interactiveLineChart : chartMessages().interactiveChart;
178
+ return override ?? title ?? valueLabel ?? fallback;
179
+ };
180
+ const timelineFullDomain = () => props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
181
+ createEffect(() => {
182
+ if (props.kind === "map") {
183
+ setMapViewport(normalizeMapViewport(props.viewport));
184
+ }
185
+ });
186
+ createEffect(() => {
187
+ if (props.kind === "stateTimeline" && !timelineViewportLocallyChanged) {
188
+ setTimelineViewport(timelineFullDomain());
189
+ }
190
+ });
191
+ const updateTimelineViewport = update => {
192
+ timelineViewportLocallyChanged = true;
193
+ setTimelineViewport(update);
194
+ };
195
+ const mapDimensions = () => {
196
+ const viewportElement = containerRef?.querySelector(".stdlib-chart-map-viewport");
197
+ const matrix = viewportElement?.getScreenCTM?.();
198
+ const box = viewportElement?.viewBox?.baseVal;
199
+ if (matrix && box?.width && box.height) {
200
+ return {
201
+ width: box.width * Math.hypot(matrix.a, matrix.b),
202
+ height: box.height * Math.hypot(matrix.c, matrix.d)
203
+ };
204
+ }
205
+ const rect = viewportElement?.getBoundingClientRect();
206
+ if (rect && rect.width > 0 && rect.height > 0) {
207
+ return {
208
+ width: rect.width,
209
+ height: rect.height
210
+ };
211
+ }
212
+ return dimensions();
213
+ };
214
+ const zoom = delta => {
215
+ closeChartTooltip();
216
+ if (interactiveMap()) {
217
+ setMapViewport(current => zoomMapViewport(current, delta, props.kind === "map" ? props.zoomFocus : undefined));
218
+ } else if (interactiveTimeline()) {
219
+ updateTimelineViewport(current => zoomStateTimelineViewport(current, timelineFullDomain(), delta));
220
+ }
221
+ };
222
+ const reset = () => {
223
+ closeChartTooltip();
224
+ if (interactiveMap() && props.kind === "map") {
225
+ setMapViewport(normalizeMapViewport(props.viewport));
226
+ }
227
+ if (interactiveTimeline()) {
228
+ timelineViewportLocallyChanged = false;
229
+ setTimelineViewport(timelineFullDomain());
230
+ }
231
+ };
232
+ const handlePointerDown = event => {
233
+ inspection.down(event);
234
+ if (!draggable() || event.button !== 0 || event.target.closest("button, a")) {
235
+ return;
236
+ }
237
+ closeChartTooltip();
238
+ // The pointer's own pointerup or pointercancel ends the hold.
239
+ suppressTextSelection(event.pointerId);
240
+ if (interactiveTimeline()) {
241
+ timelineDrag = {
242
+ pointerId: event.pointerId,
243
+ x: event.clientX,
244
+ width: Math.max(1, event.currentTarget.getBoundingClientRect().width),
245
+ viewport: timelineViewport()
246
+ };
247
+ event.currentTarget.setPointerCapture(event.pointerId);
248
+ setDragging(true);
249
+ return;
250
+ }
251
+ const dimensions = mapDimensions();
252
+ drag = {
253
+ pointerId: event.pointerId,
254
+ x: event.clientX,
255
+ y: event.clientY,
256
+ width: dimensions.width,
257
+ height: dimensions.height,
258
+ viewport: mapViewport()
259
+ };
260
+ event.currentTarget.setPointerCapture(event.pointerId);
261
+ setDragging(true);
262
+ };
263
+ const flushPointerMove = () => {
264
+ if (pointerFrame !== undefined) {
265
+ cancelAnimationFrame(pointerFrame);
266
+ pointerFrame = undefined;
267
+ }
268
+ const sample = pendingPointer;
269
+ pendingPointer = undefined;
270
+ if (!sample) return;
271
+ const start = timelineDrag ?? drag;
272
+ if (start && Math.hypot(sample.clientX - start.x, sample.clientY - ("y" in start ? start.y : sample.clientY)) <= 6) return;
273
+ const activeTimelineDrag = timelineDrag;
274
+ if (activeTimelineDrag?.pointerId === sample.pointerId) {
275
+ updateTimelineViewport(() => panStateTimelineViewport(activeTimelineDrag.viewport, timelineFullDomain(), sample.clientX - activeTimelineDrag.x, activeTimelineDrag.width));
276
+ return;
277
+ }
278
+ if (!drag || drag.pointerId !== sample.pointerId) return;
279
+ setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));
280
+ };
281
+ const handlePointerMove = event => {
282
+ inspection.move(event);
283
+ if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;
284
+ pendingPointer = {
285
+ pointerId: event.pointerId,
286
+ clientX: event.clientX,
287
+ clientY: event.clientY
288
+ };
289
+ if (pointerFrame !== undefined) return;
290
+ pointerFrame = requestAnimationFrame(flushPointerMove);
291
+ };
292
+ const stopDragging = event => {
293
+ inspection.up();
294
+ if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();
295
+ if (timelineDrag?.pointerId === event.pointerId) {
296
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
297
+ event.currentTarget.releasePointerCapture(event.pointerId);
298
+ }
299
+ timelineDrag = undefined;
300
+ setDragging(false);
301
+ return;
302
+ }
303
+ if (!drag || drag.pointerId !== event.pointerId) return;
304
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
305
+ event.currentTarget.releasePointerCapture(event.pointerId);
306
+ }
307
+ drag = undefined;
308
+ setDragging(false);
309
+ };
310
+ const handleWheel = event => {
311
+ if (interactiveMap() && (event.ctrlKey || event.metaKey)) {
312
+ event.preventDefault();
313
+ zoom(event.deltaY < 0 ? 1 : -1);
314
+ return;
315
+ }
316
+ if (!interactiveTimeline()) return;
317
+ if (event.ctrlKey || event.metaKey) {
318
+ event.preventDefault();
319
+ const rect = event.currentTarget.getBoundingClientRect();
320
+ const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;
321
+ updateTimelineViewport(current => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));
322
+ } else if (event.shiftKey) {
323
+ event.preventDefault();
324
+ updateTimelineViewport(current => panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width));
325
+ }
326
+ };
327
+ const handleKeyDown = event => {
328
+ if (inspection.key(event)) return;
329
+ if (!draggable() || event.target !== containerRef) return;
330
+ if (event.key === "+" || event.key === "=") {
331
+ event.preventDefault();
332
+ zoom(1);
333
+ return;
334
+ }
335
+ if (event.key === "-" || event.key === "_") {
336
+ event.preventDefault();
337
+ zoom(-1);
338
+ return;
339
+ }
340
+ if (event.key === "0" || event.key === "Home") {
341
+ event.preventDefault();
342
+ reset();
343
+ return;
344
+ }
345
+ if (interactiveTimeline() && (event.key === "ArrowLeft" || event.key === "ArrowRight")) {
346
+ event.preventDefault();
347
+ updateTimelineViewport(current => panStateTimelineViewport(current, timelineFullDomain(), event.key === "ArrowLeft" ? 80 : -80, event.currentTarget.getBoundingClientRect().width));
348
+ return;
349
+ }
350
+ const delta = {
351
+ ArrowLeft: [40, 0],
352
+ ArrowRight: [-40, 0],
353
+ ArrowUp: [0, 40],
354
+ ArrowDown: [0, -40]
355
+ }[event.key];
356
+ if (!delta) return;
357
+ event.preventDefault();
358
+ const dimensions = mapDimensions();
359
+ setMapViewport(current => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));
360
+ };
361
+ const inspection = createChartInspection({
362
+ container: () => containerRef,
363
+ locale,
364
+ cursor: () => props.cursor,
365
+ tooltip: () => chartTooltipRef,
366
+ anchor: () => lineAnchorRef,
367
+ kind: () => props.kind,
368
+ nav: () => props.kind === "heatmap" && props.layout === "calendar" ? calendarInspectionNavigation : undefined,
369
+ enabled: () => !isEmpty(props),
370
+ select: selection => props.onSelect?.(selection),
371
+ format: selection => {
372
+ if (props.tooltip) return props.tooltip(selection);
373
+ const fields = props.kind === "heatmap" && props.layout === "calendar" ? resolveChartMessages(props.locale ?? locale()).chartFields : chartMessages().chartFields;
374
+ if (selection.kind === "area" && props.kind === "area") {
375
+ const amount = selection.datum.values.find(f => f.key === "value");
376
+ const share = selection.datum.values.find(f => f.key === "percent");
377
+ return {
378
+ title: selection.datum.values.find(f => f.key === "x")?.formatted ?? "",
379
+ rows: [{
380
+ label: selection.datum.label ?? chartMessages().series,
381
+ value: `${share ? `${share.formatted} · ` : ""}${amount.formatted}`
382
+ }]
383
+ };
384
+ }
385
+ const format = new Intl.NumberFormat(locale(), {
386
+ maximumFractionDigits: 6
387
+ });
388
+ return {
389
+ title: selection.datum.label ?? (selection.datum.seriesIndex !== undefined ? `${labels().series ?? chartMessages().series} ${selection.datum.seriesIndex + 1}` : undefined),
390
+ rows: selection.datum.values.filter(field => selection.kind !== "waterfall" || field.key !== "before").map(field => ({
391
+ label: props.kind === "heatmap" && props.layout === "calendar" && field.key === "value" && props.label ? props.label : selection.kind === "line" && field.key === "y" ? selection.datum.label ?? labels().series ?? chartMessages().series : (props.kind === "bar" || props.kind === "hbar") && field.key.startsWith("series:") ? (props.kind === "hbar" ? props.series[Number(field.key.slice(7))] : props.series?.[Number(field.key.slice(7))]?.label) ?? fields({
392
+ key: field.key
393
+ }) : props.kind === "bar" && field.key === "previous" ? props.compare?.label ?? fields({
394
+ key: field.key
395
+ }) : fields({
396
+ key: field.key
397
+ }),
398
+ value: field.formatted ?? (field.key === "upperInclusive" ? field.value === "true" ? messages().yes : messages().no : typeof field.value === "number" ? `${format.format(field.value)}${field.key === "percent" ? "%" : ""}` : field.value)
399
+ }))
400
+ };
401
+ }
402
+ });
403
+ const closeChartTooltip = () => inspection.close();
404
+ const svgMarkup = createMemo(() => renderChartSvg(props.kind === "heatmap" && props.layout === "calendar" ? {
405
+ ...props,
406
+ locale: props.locale ?? locale()
407
+ } : {
408
+ ...drawingProps,
409
+ ...(props.kind === "bar" || props.kind === "hbar" ? {
410
+ locale: locale()
411
+ } : {})
412
+ }, size().width, size().height, interactiveMap() ? mapViewport() : undefined, interactiveTimeline() ? timelineViewport() : undefined, locale()));
413
+ createEffect(() => {
414
+ svgMarkup();
415
+ inspection.invalidate();
416
+ untrack(() => inspection.selectDatum(props.selected));
417
+ });
418
+ createEffect(() => inspection.selectDatum(props.selected));
419
+ onCleanup(() => {
420
+ inspection.close();
421
+ if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);
422
+ pointerFrame = undefined;
423
+ pendingPointer = undefined;
424
+ });
425
+ onMount(() => {
426
+ if (!containerRef) return;
427
+ if (props.kind === "heatmap" && props.layout === "calendar") onCleanup(mountCalendarScroll(containerRef));
428
+ onCleanup(closeChartInspectionOnOutside({
429
+ container: () => containerRef,
430
+ tooltip: () => chartTooltipRef,
431
+ close: closeChartTooltip,
432
+ keepScroll: () => props.kind === "heatmap" && props.layout === "calendar"
433
+ }));
434
+ });
435
+ const chartStyle = () => props.style ?? (props.kind === "stateTimeline" ? {
436
+ height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`
437
+ } : undefined);
438
+ const control = (label, shortcut, icon, action) => _$createComponent(IconButton, {
439
+ variant: "secondary",
440
+ label: label,
441
+ tooltip: `${label} (${shortcut})`,
442
+ onClick: action,
443
+ get children() {
444
+ var _el$ = _$getNextElement(_tmpl$);
445
+ _$className(_el$, `ti ${icon}`);
446
+ return _el$;
447
+ }
448
+ });
449
+ return _$createComponent(Show, {
450
+ get when() {
451
+ return !isEmpty(props);
452
+ },
453
+ get fallback() {
454
+ return (() => {
455
+ var _el$16 = _$getNextElement(_tmpl$5);
456
+ var _ref$4 = containerRef;
457
+ typeof _ref$4 === "function" ? _$use(_ref$4, _el$16) : containerRef = _el$16;
458
+ _$insert(_el$16, () => labels().empty ?? messages().noData);
459
+ _$effect(_p$ => {
460
+ var _v$13 = `k2b-chart k2b-chart__empty ${props.class ?? ""}`,
461
+ _v$14 = chartStyle();
462
+ _v$13 !== _p$.e && _$className(_el$16, _p$.e = _v$13);
463
+ _p$.t = _$style(_el$16, _v$14, _p$.t);
464
+ return _p$;
465
+ }, {
466
+ e: undefined,
467
+ t: undefined
468
+ });
469
+ return _el$16;
470
+ })();
471
+ },
472
+ get children() {
473
+ var _el$2 = _$getNextElement(_tmpl$4),
474
+ _el$12 = _el$2.firstChild,
475
+ [_el$13, _co$4] = _$getNextMarker(_el$12.nextSibling),
476
+ _el$4 = _el$13.nextSibling,
477
+ _el$5 = _el$4.nextSibling,
478
+ _el$6 = _el$5.nextSibling,
479
+ _el$14 = _el$6.nextSibling,
480
+ [_el$15, _co$5] = _$getNextMarker(_el$14.nextSibling);
481
+ _el$2.$$keydown = handleKeyDown;
482
+ _el$2.addEventListener("wheel", handleWheel);
483
+ _el$2.$$focusout = closeChartTooltip;
484
+ _$addEventListener(_el$2, "focusin", inspection.focus, true);
485
+ _$addEventListener(_el$2, "pointerleave", inspection.leave);
486
+ _$addEventListener(_el$2, "click", inspection.click, true);
487
+ _el$2.addEventListener("pointercancel", stopDragging);
488
+ _el$2.$$pointerup = stopDragging;
489
+ _el$2.$$pointermove = handlePointerMove;
490
+ _el$2.$$pointerdown = handlePointerDown;
491
+ var _ref$ = containerRef;
492
+ typeof _ref$ === "function" ? _$use(_ref$, _el$2) : containerRef = _el$2;
493
+ _$insert(_el$2, _$createComponent(Show, {
494
+ get when() {
495
+ return topLegend();
496
+ },
497
+ get children() {
498
+ var _el$3 = _$getNextElement(_tmpl$2);
499
+ _$insert(_el$3, _$createComponent(For, {
500
+ get each() {
501
+ return legendSeries();
502
+ },
503
+ children: (series, index) => (() => {
504
+ var _el$17 = _$getNextElement(_tmpl$7),
505
+ _el$18 = _el$17.firstChild,
506
+ _el$19 = _el$18.firstChild,
507
+ _el$20 = _el$18.nextSibling,
508
+ _el$22 = _el$20.nextSibling,
509
+ [_el$23, _co$6] = _$getNextMarker(_el$22.nextSibling);
510
+ _$insert(_el$20, (() => {
511
+ var _c$ = _$memo(() => !!(series.label && series.label.length > 0));
512
+ return () => _c$() ? series.label : `${chartMessages().series} ${index() + 1}`;
513
+ })());
514
+ _$insert(_el$17, _$createComponent(Show, {
515
+ get when() {
516
+ return props.kind === "area";
517
+ },
518
+ get children() {
519
+ var _el$21 = _$getNextElement(_tmpl$6);
520
+ _$insert(_el$21, () => legendValue(index()));
521
+ _$effect(_p$ => {
522
+ var _v$15 = index(),
523
+ _v$16 = props.kind === "area" && props.normalize ? "percent" : "value",
524
+ _v$17 = legendValue(index());
525
+ _v$15 !== _p$.e && _$setAttribute(_el$21, "data-series-index", _p$.e = _v$15);
526
+ _v$16 !== _p$.t && _$setAttribute(_el$21, "data-field", _p$.t = _v$16);
527
+ _v$17 !== _p$.a && _$setAttribute(_el$21, "data-default", _p$.a = _v$17);
528
+ return _p$;
529
+ }, {
530
+ e: undefined,
531
+ t: undefined,
532
+ a: undefined
533
+ });
534
+ return _el$21;
535
+ }
536
+ }), _el$23, _co$6);
537
+ _$effect(_p$ => {
538
+ var _v$18 = `stdlib-chart k2b-chart__legend-swatch ${props.kind === "line" ? props.className ?? "" : ""}`,
539
+ _v$19 = `stdlib-chart-series-${index() % 8}`,
540
+ _v$20 = `var(--stdlib-chart-c${index() % 8 + 1}, ${["#2563eb", "#16a34a", "#d97706", "#dc2626", "#a855f7", "#0891b2", "#db2777", "#65a30d"][index() % 8]})`;
541
+ _v$18 !== _p$.e && _$setAttribute(_el$18, "class", _p$.e = _v$18);
542
+ _v$19 !== _p$.t && _$setAttribute(_el$19, "class", _p$.t = _v$19);
543
+ _v$20 !== _p$.a && _$setAttribute(_el$19, "fill", _p$.a = _v$20);
544
+ return _p$;
545
+ }, {
546
+ e: undefined,
547
+ t: undefined,
548
+ a: undefined
549
+ });
550
+ return _el$17;
551
+ })()
552
+ }));
553
+ _$effect(() => _$setAttribute(_el$3, "aria-label", chartMessages().chartLegend));
554
+ return _el$3;
555
+ }
556
+ }), _el$13, _co$4);
557
+ var _ref$2 = lineAnchorRef;
558
+ typeof _ref$2 === "function" ? _$use(_ref$2, _el$5) : lineAnchorRef = _el$5;
559
+ var _ref$3 = chartTooltipRef;
560
+ typeof _ref$3 === "function" ? _$use(_ref$3, _el$6) : chartTooltipRef = _el$6;
561
+ _$setAttribute(_el$6, "id", chartTooltipId);
562
+ _$insert(_el$2, _$createComponent(Show, {
563
+ get when() {
564
+ return draggable();
565
+ },
566
+ get children() {
567
+ var _el$7 = _$getNextElement(_tmpl$3),
568
+ _el$8 = _el$7.firstChild,
569
+ [_el$9, _co$] = _$getNextMarker(_el$8.nextSibling),
570
+ _el$0 = _el$9.nextSibling,
571
+ [_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling),
572
+ _el$10 = _el$1.nextSibling,
573
+ [_el$11, _co$3] = _$getNextMarker(_el$10.nextSibling);
574
+ _$insert(_el$7, () => control(labels().zoomIn ?? viewportMessages().zoomIn, "+", "ti-plus", () => zoom(1)), _el$9, _co$);
575
+ _$insert(_el$7, () => control(labels().zoomOut ?? viewportMessages().zoomOut, "-", "ti-minus", () => zoom(-1)), _el$1, _co$2);
576
+ _$insert(_el$7, () => control(interactiveMap() ? labels().resetMap ?? chartMessages().resetMapView : labels().resetTimeline ?? chartMessages().resetTimelineView, "0", "ti-focus-centered", reset), _el$11, _co$3);
577
+ return _el$7;
578
+ }
579
+ }), _el$15, _co$5);
580
+ _$effect(_p$ => {
581
+ var _v$ = `k2b-chart ${props.class ?? ""}`,
582
+ _v$2 = props.kind,
583
+ _v$3 = topLegend() ? "top-start" : undefined,
584
+ _v$4 = draggable() ? dragging() ? "active" : "idle" : undefined,
585
+ _v$5 = !draggable() && props.kind === "line" ? "true" : undefined,
586
+ _v$6 = chartStyle(),
587
+ _v$7 = accessibleName(),
588
+ _v$8 = accessibleName() !== chartMessages().interactiveChart ? chartMessages().interactiveChart : undefined,
589
+ _v$9 = !calendar() && !preservesAspectRatio(props.kind) ? "true" : undefined,
590
+ _v$0 = calendar() ? `${calendar().minWidth}px` : undefined,
591
+ _v$1 = `${size().width}px`,
592
+ _v$10 = `${size().height}px`,
593
+ _v$11 = `${size().width} / ${size().height}`,
594
+ _v$12 = isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup();
595
+ _v$ !== _p$.e && _$className(_el$2, _p$.e = _v$);
596
+ _v$2 !== _p$.t && _$setAttribute(_el$2, "data-chart-kind", _p$.t = _v$2);
597
+ _v$3 !== _p$.a && _$setAttribute(_el$2, "data-legend-placement", _p$.a = _v$3);
598
+ _v$4 !== _p$.o && _$setAttribute(_el$2, "data-drag", _p$.o = _v$4);
599
+ _v$5 !== _p$.i && _$setAttribute(_el$2, "data-crosshair", _p$.i = _v$5);
600
+ _p$.n = _$style(_el$2, _v$6, _p$.n);
601
+ _v$7 !== _p$.s && _$setAttribute(_el$2, "aria-label", _p$.s = _v$7);
602
+ _v$8 !== _p$.h && _$setAttribute(_el$2, "aria-description", _p$.h = _v$8);
603
+ _v$9 !== _p$.r && _$setAttribute(_el$4, "data-stretch", _p$.r = _v$9);
604
+ _v$0 !== _p$.d && _$setStyleProperty(_el$4, "min-width", _p$.d = _v$0);
605
+ _v$1 !== _p$.l && _$setStyleProperty(_el$4, "--k2b-chart-width", _p$.l = _v$1);
606
+ _v$10 !== _p$.u && _$setStyleProperty(_el$4, "--k2b-chart-height", _p$.u = _v$10);
607
+ _v$11 !== _p$.c && _$setStyleProperty(_el$4, "aspect-ratio", _p$.c = _v$11);
608
+ _v$12 !== _p$.w && _$setProperty(_el$4, "innerHTML", _p$.w = _v$12);
609
+ return _p$;
610
+ }, {
611
+ e: undefined,
612
+ t: undefined,
613
+ a: undefined,
614
+ o: undefined,
615
+ i: undefined,
616
+ n: undefined,
617
+ s: undefined,
618
+ h: undefined,
619
+ r: undefined,
620
+ d: undefined,
621
+ l: undefined,
622
+ u: undefined,
623
+ c: undefined,
624
+ w: undefined
625
+ });
626
+ _$runHydrationEvents();
627
+ return _el$2;
628
+ }
629
+ });
630
+ };
631
+ _$delegateEvents(["pointerdown", "pointermove", "pointerup", "click", "focusin", "focusout", "keydown"]);
632
+ //# sourceMappingURL=ChartRoot.js.map