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