@vielzeug/prism 1.1.6 → 2.0.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 (70) hide show
  1. package/dist/_dev.cjs +1 -1
  2. package/dist/_dev.cjs.map +1 -1
  3. package/dist/_dev.js +3 -8
  4. package/dist/_dev.js.map +1 -1
  5. package/dist/charts/area/area-chart.cjs +1 -1
  6. package/dist/charts/area/area-chart.cjs.map +1 -1
  7. package/dist/charts/area/area-chart.js +43 -43
  8. package/dist/charts/area/area-chart.js.map +1 -1
  9. package/dist/charts/area/area-renderer.cjs +1 -1
  10. package/dist/charts/area/area-renderer.cjs.map +1 -1
  11. package/dist/charts/area/area-renderer.js +40 -40
  12. package/dist/charts/area/area-renderer.js.map +1 -1
  13. package/dist/charts/bar/bar-chart.cjs +1 -1
  14. package/dist/charts/bar/bar-chart.cjs.map +1 -1
  15. package/dist/charts/bar/bar-chart.js +92 -92
  16. package/dist/charts/bar/bar-chart.js.map +1 -1
  17. package/dist/charts/bar/bar-hit-test.cjs +1 -1
  18. package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
  19. package/dist/charts/bar/bar-hit-test.js +1 -1
  20. package/dist/charts/bar/bar-hit-test.js.map +1 -1
  21. package/dist/charts/line/line-chart.cjs +1 -1
  22. package/dist/charts/line/line-chart.cjs.map +1 -1
  23. package/dist/charts/line/line-chart.js +43 -43
  24. package/dist/charts/line/line-chart.js.map +1 -1
  25. package/dist/charts/line/line-renderer.cjs +1 -1
  26. package/dist/charts/line/line-renderer.cjs.map +1 -1
  27. package/dist/charts/line/line-renderer.js +52 -52
  28. package/dist/charts/line/line-renderer.js.map +1 -1
  29. package/dist/charts/pie/pie-chart.cjs.map +1 -1
  30. package/dist/charts/pie/pie-chart.js.map +1 -1
  31. package/dist/charts/sparkline/sparkline.cjs +1 -1
  32. package/dist/charts/sparkline/sparkline.cjs.map +1 -1
  33. package/dist/charts/sparkline/sparkline.d.ts.map +1 -1
  34. package/dist/charts/sparkline/sparkline.js +14 -12
  35. package/dist/charts/sparkline/sparkline.js.map +1 -1
  36. package/dist/core/cartesian-scales.cjs +1 -1
  37. package/dist/core/cartesian-scales.cjs.map +1 -1
  38. package/dist/core/cartesian-scales.js +23 -39
  39. package/dist/core/cartesian-scales.js.map +1 -1
  40. package/dist/core/chart-base.cjs +1 -1
  41. package/dist/core/chart-base.cjs.map +1 -1
  42. package/dist/core/chart-base.d.ts.map +1 -1
  43. package/dist/core/chart-base.js +38 -38
  44. package/dist/core/chart-base.js.map +1 -1
  45. package/dist/core/chart-scaffold.cjs +1 -1
  46. package/dist/core/chart-scaffold.cjs.map +1 -1
  47. package/dist/core/chart-scaffold.d.ts.map +1 -1
  48. package/dist/core/chart-scaffold.js +46 -48
  49. package/dist/core/chart-scaffold.js.map +1 -1
  50. package/dist/errors.cjs.map +1 -1
  51. package/dist/errors.js.map +1 -1
  52. package/dist/interaction/tooltip.cjs +1 -1
  53. package/dist/interaction/tooltip.cjs.map +1 -1
  54. package/dist/interaction/tooltip.js +33 -35
  55. package/dist/interaction/tooltip.js.map +1 -1
  56. package/dist/prism.cjs +1 -1
  57. package/dist/prism.cjs.map +1 -1
  58. package/dist/prism.iife.js +1 -1
  59. package/dist/prism.iife.js.map +1 -1
  60. package/dist/prism.js +1 -1
  61. package/dist/prism.js.map +1 -1
  62. package/dist/scales/band.cjs +1 -1
  63. package/dist/scales/band.cjs.map +1 -1
  64. package/dist/scales/band.js +22 -22
  65. package/dist/scales/band.js.map +1 -1
  66. package/dist/svg/element.cjs +1 -1
  67. package/dist/svg/element.cjs.map +1 -1
  68. package/dist/svg/element.js +12 -12
  69. package/dist/svg/element.js.map +1 -1
  70. package/package.json +4 -4
@@ -1,60 +1,58 @@
1
- import { error as e } from "../_dev.js";
2
- import { createSvgElement as t, removeChildren as n } from "../svg/element.js";
3
- import { createLegend as r } from "../interaction/legend.js";
4
- import { createTooltip as i } from "../interaction/tooltip.js";
5
- import { createChartBase as a } from "./chart-base.js";
6
- import { effect as o, scope as s } from "@vielzeug/ripple";
1
+ import "../_dev.js";
2
+ import { createSvgElement as e, removeChildren as t } from "../svg/element.js";
3
+ import { createLegend as n } from "../interaction/legend.js";
4
+ import { createTooltip as r } from "../interaction/tooltip.js";
5
+ import { createChartBase as i } from "./chart-base.js";
6
+ import { createScope as a, effect as o } from "@vielzeug/ripple";
7
7
  //#region src/core/chart-scaffold.ts
8
- function c(e, t, r, i) {
9
- n(e.series), n(e.grid), n(e.xAxis), n(e.yAxis), t?.update([]), r?.hide(), i?.hide();
8
+ function s(e, n, r, i) {
9
+ t(e.series), t(e.grid), t(e.xAxis), t(e.yAxis), n?.update([]), r?.hide(), i?.hide();
10
10
  }
11
- function l(t, n, c, l) {
12
- let d = a(t, {
13
- ariaLabel: n.ariaLabel,
14
- margin: n.margin
15
- }), f = n.tooltip ? i(t, n.tooltip) : null, p = n.legend ? r(t, n.legend) : null, m = new AbortController(), h = c(d, f, p, m.signal), g = !1, _ = u(d.svg), v = s(() => {
11
+ function c(e, t, s, c) {
12
+ let u = i(e, {
13
+ ariaLabel: t.ariaLabel,
14
+ margin: t.margin
15
+ }), d = t.tooltip ? r(e, t.tooltip) : null, f = t.legend ? n(e, t.legend) : null, p = new AbortController(), m = s(u, d, f, p.signal), h = !1, g = l(u.svg), _ = a();
16
+ _.run(() => {
16
17
  o(() => {
17
- g || _.attach(l(h));
18
+ h || g.attach(c(m));
18
19
  }, { scheduler: "microtask" });
19
- }), y = [];
20
- if (n.plugins) {
21
- let r = {
22
- container: t,
23
- dimensions: d.dimensions,
24
- disposalSignal: m.signal,
25
- svg: d.svg
20
+ });
21
+ let v = [];
22
+ if (t.plugins) {
23
+ let n = {
24
+ container: e,
25
+ dimensions: u.dimensions,
26
+ disposalSignal: p.signal,
27
+ svg: u.svg
26
28
  };
27
- for (let t of n.plugins) try {
28
- t.install(r), y.push(t);
29
- } catch (t) {
30
- e("A chart plugin threw during install() — skipping it; the rest of the chart still renders.", t);
31
- }
29
+ for (let e of t.plugins) try {
30
+ e.install(n), v.push(e);
31
+ } catch {}
32
32
  }
33
33
  return {
34
34
  get disposalSignal() {
35
- return m.signal;
35
+ return p.signal;
36
36
  },
37
37
  dispose() {
38
- if (!g) {
39
- g = !0, m.abort(), _.detach();
40
- for (let t of y) try {
41
- t.dispose();
42
- } catch (t) {
43
- e("A chart plugin threw during dispose() — continuing to tear down the rest of the chart.", t);
44
- }
45
- f?.dispose(), p?.dispose(), v.dispose(), d.dispose();
38
+ if (!h) {
39
+ h = !0, p.abort(), g.detach();
40
+ for (let e of v) try {
41
+ e.dispose();
42
+ } catch {}
43
+ d?.dispose(), f?.dispose(), _.dispose(), u.dispose();
46
44
  }
47
45
  },
48
46
  get disposed() {
49
- return g;
47
+ return h;
50
48
  },
51
- el: d.svg,
49
+ el: u.svg,
52
50
  [Symbol.dispose]() {
53
51
  this.dispose();
54
52
  }
55
53
  };
56
54
  }
57
- function u(e) {
55
+ function l(e) {
58
56
  let t = null;
59
57
  return {
60
58
  attach(n) {
@@ -65,20 +63,20 @@ function u(e) {
65
63
  }
66
64
  };
67
65
  }
68
- function d(e, n, r) {
69
- return l(e, n, (n, r, i, a) => {
66
+ function u(t, n, r) {
67
+ return c(t, n, (n, r, i, a) => {
70
68
  let o = {
71
- grid: t("g", {
69
+ grid: e("g", {
72
70
  "aria-hidden": "true",
73
71
  class: "prism-grid"
74
72
  }),
75
- series: t("g", { class: "prism-series" }),
76
- xAxis: t("g", { class: "prism-x-axis" }),
77
- yAxis: t("g", { class: "prism-y-axis" })
73
+ series: e("g", { class: "prism-series" }),
74
+ xAxis: e("g", { class: "prism-x-axis" }),
75
+ yAxis: e("g", { class: "prism-y-axis" })
78
76
  };
79
77
  return n.chartArea.appendChild(o.grid), n.chartArea.appendChild(o.xAxis), n.chartArea.appendChild(o.yAxis), n.chartArea.appendChild(o.series), {
80
78
  chartArea: n.chartArea,
81
- container: e,
79
+ container: t,
82
80
  dimensions: n.dimensions,
83
81
  disposalSignal: a,
84
82
  groups: o,
@@ -88,8 +86,8 @@ function d(e, n, r) {
88
86
  };
89
87
  }, r);
90
88
  }
91
- function f(e, t, n) {
92
- return l(e, t, (t, n, r, i) => ({
89
+ function d(e, t, n) {
90
+ return c(e, t, (t, n, r, i) => ({
93
91
  container: e,
94
92
  dimensions: t.dimensions,
95
93
  disposalSignal: i,
@@ -99,6 +97,6 @@ function f(e, t, n) {
99
97
  }), n);
100
98
  }
101
99
  //#endregion
102
- export { c as clearCartesianDom, d as createChartScaffold, f as createRadialScaffold };
100
+ export { s as clearCartesianDom, u as createChartScaffold, d as createRadialScaffold };
103
101
 
104
102
  //# sourceMappingURL=chart-scaffold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-scaffold.js","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { effect, scope } from '@vielzeug/ripple';\n\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle, ChartPlugin, ChartPluginContext } from '../types';\n\nimport { error } from '../_dev';\nimport { createLegend } from '../interaction/legend';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so a reactive series\n * transitioning to empty leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: Readable<ChartDimensions>;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | void,\n): ChartHandle {\n const base = createChartBase(container, { ariaLabel: config.ariaLabel, margin: config.margin });\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n const s = scope(() => {\n effect(\n () => {\n if (disposed) return;\n\n events.attach(renderFn(ctx));\n },\n { scheduler: 'microtask' },\n );\n });\n\n const installedPlugins: ChartPlugin[] = [];\n\n if (config.plugins) {\n const pluginCtx: ChartPluginContext = {\n container,\n dimensions: base.dimensions,\n disposalSignal: ac.signal,\n svg: base.svg,\n };\n\n for (const plugin of config.plugins) {\n try {\n plugin.install(pluginCtx);\n installedPlugins.push(plugin);\n } catch (err) {\n error('A chart plugin threw during install() — skipping it; the rest of the chart still renders.', err);\n }\n }\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n\n for (const p of installedPlugins) {\n try {\n p.dispose();\n } catch (err) {\n error('A chart plugin threw during dispose() — continuing to tear down the rest of the chart.', err);\n }\n }\n\n tooltip?.dispose();\n legend?.dispose();\n s.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | void): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a reactive\n * render loop. `renderFn` is called inside a reactive effect; it returns\n * optional `ChartEventHandlers` that are attached/replaced on every render.\n */\nexport function createChartScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | void,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | void,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n );\n}\n"],"mappings":";;;;;;;AA2BA,SAAgB,EACd,GACA,GACA,GACA,GACM;CAON,AANA,EAAe,EAAO,MAAM,GAC5B,EAAe,EAAO,IAAI,GAC1B,EAAe,EAAO,KAAK,GAC3B,EAAe,EAAO,KAAK,GAC3B,GAAQ,OAAO,CAAC,CAAC,GACjB,GAAS,KAAK,GACd,GAAW,KAAK;AAClB;AA8BA,SAAS,EACP,GACA,GACA,GAUA,GACa;CACb,IAAM,IAAO,EAAgB,GAAW;EAAE,WAAW,EAAO;EAAW,QAAQ,EAAO;CAAO,CAAC,GACxF,IAAU,EAAO,UAAU,EAAc,GAAW,EAAO,OAAO,IAAI,MACtE,IAAS,EAAO,SAAS,EAAa,GAAW,EAAO,MAAM,IAAI,MAClE,IAAK,IAAI,gBAAgB,GACzB,IAAM,EAAS,GAAM,GAAS,GAAQ,EAAG,MAAM,GAEjD,IAAW,IACT,IAAS,EAAiB,EAAK,GAAG,GAElC,IAAI,QAAY;EACpB,QACQ;GACA,KAEJ,EAAO,OAAO,EAAS,CAAG,CAAC;EAC7B,GACA,EAAE,WAAW,YAAY,CAC3B;CACF,CAAC,GAEK,IAAkC,CAAC;CAEzC,IAAI,EAAO,SAAS;EAClB,IAAM,IAAgC;GACpC;GACA,YAAY,EAAK;GACjB,gBAAgB,EAAG;GACnB,KAAK,EAAK;EACZ;EAEA,KAAK,IAAM,KAAU,EAAO,SAC1B,IAAI;GAEF,AADA,EAAO,QAAQ,CAAS,GACxB,EAAiB,KAAK,CAAM;EAC9B,SAAS,GAAK;GACZ,EAAM,6FAA6F,CAAG;EACxG;CAEJ;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAG;EACZ;EAEA,UAAU;GACJ,QAIJ;IAFA,IAAW,IACX,EAAG,MAAM,GACT,EAAO,OAAO;IAEd,KAAK,IAAM,KAAK,GACd,IAAI;KACF,EAAE,QAAQ;IACZ,SAAS,GAAK;KACZ,EAAM,0FAA0F,CAAG;IACrG;IAMF,AAHA,GAAS,QAAQ,GACjB,GAAQ,QAAQ,GAChB,EAAE,QAAQ,GACV,EAAK,QAAQ;GAbC;EAchB;EAEA,IAAI,WAAoB;GACtB,OAAO;EACT;EAEA,IAAI,EAAK;EAET,CAAC,OAAO,WAAW;GACjB,KAAK,QAAQ;EACf;CACF;AACF;AAEA,SAAS,EAAiB,GAGxB;CACA,IAAI,IAAoC;CAExC,OAAO;EACL,OAAO,GAAU;GACf,AAOE,OANI,EAAO,eAAa,EAAI,oBAAoB,aAAa,EAAO,WAAW,GAE3E,EAAO,gBAAc,EAAI,oBAAoB,cAAc,EAAO,YAAY,GAE9E,EAAO,WAAS,EAAI,oBAAoB,SAAS,EAAO,OAAO,GAE1D,OAGN,MAEL,IAAS,GAEL,EAAS,eAAa,EAAI,iBAAiB,aAAa,EAAS,WAAW,GAE5E,EAAS,gBAAc,EAAI,iBAAiB,cAAc,EAAS,YAAY,GAE/E,EAAS,WAAS,EAAI,iBAAiB,SAAS,EAAS,OAAO;EACtE;EACA,SAAS;GACP,KAAK,OAAO,KAAA,CAAS;EACvB;CACF;AACF;AAOA,SAAgB,EACd,GACA,GACA,GACa;CACb,OAAO,EACL,GACA,IACC,GAAM,GAAS,GAAQ,MAAmB;EACzC,IAAM,IAAyB;GAI7B,MAAM,EAAiB,KAAK;IAAE,eAAe;IAAQ,OAAO;GAAa,CAAC;GAC1E,QAAQ,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;GACvD,OAAO,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;GACtD,OAAO,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;EACxD;EAOA,OALA,EAAK,UAAU,YAAY,EAAO,IAAI,GACtC,EAAK,UAAU,YAAY,EAAO,KAAK,GACvC,EAAK,UAAU,YAAY,EAAO,KAAK,GACvC,EAAK,UAAU,YAAY,EAAO,MAAM,GAEjC;GACL,WAAW,EAAK;GAChB;GACA,YAAY,EAAK;GACjB;GACA;GACA;GACA,KAAK,EAAK;GACV;EACF;CACF,GACA,CACF;AACF;AAMA,SAAgB,EACd,GACA,GACA,GACa;CACb,OAAO,EACL,GACA,IACC,GAAM,GAAS,GAAQ,OACrB;EACC;EACA,YAAY,EAAK;EACjB;EACA;EACA,KAAK,EAAK;EACV;CACF,IACF,CACF;AACF"}
1
+ {"version":3,"file":"chart-scaffold.js","names":[],"sources":["../../src/core/chart-scaffold.ts"],"sourcesContent":["import type { Readable } from '@vielzeug/ripple';\n\nimport { createScope, effect } from '@vielzeug/ripple';\n\nimport type { CrosshairState } from '../interaction/crosshair';\nimport type { LegendState } from '../interaction/legend';\nimport type { TooltipState } from '../interaction/tooltip';\nimport type { BaseChartConfig, ChartDimensions, ChartHandle, ChartPlugin, ChartPluginContext } from '../types';\n\nimport { error } from '../_dev';\nimport { createLegend } from '../interaction/legend';\nimport { createTooltip } from '../interaction/tooltip';\nimport { createSvgElement, removeChildren } from '../svg/element';\nimport { createChartBase } from './chart-base';\n\nexport interface ScaffoldGroups {\n grid: SVGGElement;\n series: SVGGElement;\n xAxis: SVGGElement;\n yAxis: SVGGElement;\n}\n\n/**\n * Clears a cartesian chart's series/grid/axis groups and hides its legend/tooltip/crosshair —\n * shared by every cartesian chart factory's \"no data\" early-return so a reactive series\n * transitioning to empty leaves a fully blank chart, not a half-cleared one.\n */\nexport function clearCartesianDom(\n groups: ScaffoldGroups,\n legend: LegendState | null,\n tooltip: TooltipState | null,\n crosshair?: CrosshairState | null,\n): void {\n removeChildren(groups.series);\n removeChildren(groups.grid);\n removeChildren(groups.xAxis);\n removeChildren(groups.yAxis);\n legend?.update([]);\n tooltip?.hide();\n crosshair?.hide();\n}\n\nexport interface ScaffoldContext {\n chartArea: SVGGElement;\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n groups: ScaffoldGroups;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface RadialScaffoldContext {\n container: HTMLElement;\n dimensions: Readable<ChartDimensions>;\n /** Aborted when the chart is disposed — renderers use this to stop rescheduling in-flight `requestAnimationFrame` transitions. */\n disposalSignal: AbortSignal;\n legend: LegendState | null;\n svg: SVGSVGElement;\n tooltip: TooltipState | null;\n}\n\nexport interface ChartEventHandlers {\n onClick?: (event: MouseEvent) => void;\n onMouseLeave?: (event: MouseEvent) => void;\n onMouseMove?: (event: MouseEvent) => void;\n}\n\nfunction runScaffold<TCtx>(\n container: HTMLElement,\n config: BaseChartConfig,\n buildCtx: (\n base: {\n chartArea: SVGGElement;\n dimensions: Readable<ChartDimensions>;\n svg: SVGSVGElement;\n },\n tooltip: TooltipState | null,\n legend: LegendState | null,\n disposalSignal: AbortSignal,\n ) => TCtx,\n renderFn: (ctx: TCtx) => ChartEventHandlers | void,\n): ChartHandle {\n const base = createChartBase(container, { ariaLabel: config.ariaLabel, margin: config.margin });\n const tooltip = config.tooltip ? createTooltip(container, config.tooltip) : null;\n const legend = config.legend ? createLegend(container, config.legend) : null;\n const ac = new AbortController();\n const ctx = buildCtx(base, tooltip, legend, ac.signal);\n\n let disposed = false;\n const events = makeEventManager(base.svg);\n\n const scope = createScope();\n\n scope.run(() => {\n effect(\n () => {\n if (disposed) return;\n\n events.attach(renderFn(ctx));\n },\n { scheduler: 'microtask' },\n );\n });\n\n const installedPlugins: ChartPlugin[] = [];\n\n if (config.plugins) {\n const pluginCtx: ChartPluginContext = {\n container,\n dimensions: base.dimensions,\n disposalSignal: ac.signal,\n svg: base.svg,\n };\n\n for (const plugin of config.plugins) {\n try {\n plugin.install(pluginCtx);\n installedPlugins.push(plugin);\n } catch (err) {\n error('A chart plugin threw during install() — skipping it; the rest of the chart still renders.', err);\n }\n }\n }\n\n return {\n get disposalSignal(): AbortSignal {\n return ac.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n ac.abort();\n events.detach();\n\n for (const p of installedPlugins) {\n try {\n p.dispose();\n } catch (err) {\n error('A chart plugin threw during dispose() — continuing to tear down the rest of the chart.', err);\n }\n }\n\n tooltip?.dispose();\n legend?.dispose();\n scope.dispose();\n base.dispose();\n },\n\n get disposed(): boolean {\n return disposed;\n },\n\n el: base.svg,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction makeEventManager(svg: SVGSVGElement): {\n attach(handlers: ChartEventHandlers | void): void;\n detach(): void;\n} {\n let active: ChartEventHandlers | null = null;\n\n return {\n attach(handlers) {\n if (active) {\n if (active.onMouseMove) svg.removeEventListener('mousemove', active.onMouseMove);\n\n if (active.onMouseLeave) svg.removeEventListener('mouseleave', active.onMouseLeave);\n\n if (active.onClick) svg.removeEventListener('click', active.onClick);\n\n active = null;\n }\n\n if (!handlers) return;\n\n active = handlers;\n\n if (handlers.onMouseMove) svg.addEventListener('mousemove', handlers.onMouseMove);\n\n if (handlers.onMouseLeave) svg.addEventListener('mouseleave', handlers.onMouseLeave);\n\n if (handlers.onClick) svg.addEventListener('click', handlers.onClick);\n },\n detach() {\n this.attach(undefined);\n },\n };\n}\n\n/**\n * Cartesian scaffold: provides grid/axis/series SVG groups and a reactive\n * render loop. `renderFn` is called inside a reactive effect; it returns\n * optional `ChartEventHandlers` that are attached/replaced on every render.\n */\nexport function createChartScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: ScaffoldContext) => ChartEventHandlers | void,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) => {\n const groups: ScaffoldGroups = {\n // Grid lines are purely decorative relative to the root svg's own role=\"img\"/aria-label.\n // Axis groups are NOT hidden wholesale — they can contain a meaningful `.prism-axis-title`;\n // `renderAxis` marks its own decorative tick lines/labels individually instead.\n grid: createSvgElement('g', { 'aria-hidden': 'true', class: 'prism-grid' }),\n series: createSvgElement('g', { class: 'prism-series' }),\n xAxis: createSvgElement('g', { class: 'prism-x-axis' }),\n yAxis: createSvgElement('g', { class: 'prism-y-axis' }),\n };\n\n base.chartArea.appendChild(groups.grid);\n base.chartArea.appendChild(groups.xAxis);\n base.chartArea.appendChild(groups.yAxis);\n base.chartArea.appendChild(groups.series);\n\n return {\n chartArea: base.chartArea,\n container,\n dimensions: base.dimensions,\n disposalSignal,\n groups,\n legend,\n svg: base.svg,\n tooltip,\n } satisfies ScaffoldContext;\n },\n renderFn,\n );\n}\n\n/**\n * Radial scaffold: for charts that do not use cartesian axis groups\n * (pie, donut, semi). Provides only tooltip, legend, and the SVG root.\n */\nexport function createRadialScaffold(\n container: HTMLElement,\n config: BaseChartConfig,\n renderFn: (ctx: RadialScaffoldContext) => ChartEventHandlers | void,\n): ChartHandle {\n return runScaffold(\n container,\n config,\n (base, tooltip, legend, disposalSignal) =>\n ({\n container,\n dimensions: base.dimensions,\n disposalSignal,\n legend,\n svg: base.svg,\n tooltip,\n }) satisfies RadialScaffoldContext,\n renderFn,\n );\n}\n"],"mappings":";;;;;;;AA2BA,SAAgB,EACd,GACA,GACA,GACA,GACM;CAON,AANA,EAAe,EAAO,MAAM,GAC5B,EAAe,EAAO,IAAI,GAC1B,EAAe,EAAO,KAAK,GAC3B,EAAe,EAAO,KAAK,GAC3B,GAAQ,OAAO,CAAC,CAAC,GACjB,GAAS,KAAK,GACd,GAAW,KAAK;AAClB;AA8BA,SAAS,EACP,GACA,GACA,GAUA,GACa;CACb,IAAM,IAAO,EAAgB,GAAW;EAAE,WAAW,EAAO;EAAW,QAAQ,EAAO;CAAO,CAAC,GACxF,IAAU,EAAO,UAAU,EAAc,GAAW,EAAO,OAAO,IAAI,MACtE,IAAS,EAAO,SAAS,EAAa,GAAW,EAAO,MAAM,IAAI,MAClE,IAAK,IAAI,gBAAgB,GACzB,IAAM,EAAS,GAAM,GAAS,GAAQ,EAAG,MAAM,GAEjD,IAAW,IACT,IAAS,EAAiB,EAAK,GAAG,GAElC,IAAQ,EAAY;CAE1B,EAAM,UAAU;EACd,QACQ;GACA,KAEJ,EAAO,OAAO,EAAS,CAAG,CAAC;EAC7B,GACA,EAAE,WAAW,YAAY,CAC3B;CACF,CAAC;CAED,IAAM,IAAkC,CAAC;CAEzC,IAAI,EAAO,SAAS;EAClB,IAAM,IAAgC;GACpC;GACA,YAAY,EAAK;GACjB,gBAAgB,EAAG;GACnB,KAAK,EAAK;EACZ;EAEA,KAAK,IAAM,KAAU,EAAO,SAC1B,IAAI;GAEF,AADA,EAAO,QAAQ,CAAS,GACxB,EAAiB,KAAK,CAAM;EAC9B,QAAc,CAEd;CAEJ;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAG;EACZ;EAEA,UAAU;GACJ,QAIJ;IAFA,IAAW,IACX,EAAG,MAAM,GACT,EAAO,OAAO;IAEd,KAAK,IAAM,KAAK,GACd,IAAI;KACF,EAAE,QAAQ;IACZ,QAAc,CAEd;IAMF,AAHA,GAAS,QAAQ,GACjB,GAAQ,QAAQ,GAChB,EAAM,QAAQ,GACd,EAAK,QAAQ;GAbC;EAchB;EAEA,IAAI,WAAoB;GACtB,OAAO;EACT;EAEA,IAAI,EAAK;EAET,CAAC,OAAO,WAAW;GACjB,KAAK,QAAQ;EACf;CACF;AACF;AAEA,SAAS,EAAiB,GAGxB;CACA,IAAI,IAAoC;CAExC,OAAO;EACL,OAAO,GAAU;GACf,AAOE,OANI,EAAO,eAAa,EAAI,oBAAoB,aAAa,EAAO,WAAW,GAE3E,EAAO,gBAAc,EAAI,oBAAoB,cAAc,EAAO,YAAY,GAE9E,EAAO,WAAS,EAAI,oBAAoB,SAAS,EAAO,OAAO,GAE1D,OAGN,MAEL,IAAS,GAEL,EAAS,eAAa,EAAI,iBAAiB,aAAa,EAAS,WAAW,GAE5E,EAAS,gBAAc,EAAI,iBAAiB,cAAc,EAAS,YAAY,GAE/E,EAAS,WAAS,EAAI,iBAAiB,SAAS,EAAS,OAAO;EACtE;EACA,SAAS;GACP,KAAK,OAAO,KAAA,CAAS;EACvB;CACF;AACF;AAOA,SAAgB,EACd,GACA,GACA,GACa;CACb,OAAO,EACL,GACA,IACC,GAAM,GAAS,GAAQ,MAAmB;EACzC,IAAM,IAAyB;GAI7B,MAAM,EAAiB,KAAK;IAAE,eAAe;IAAQ,OAAO;GAAa,CAAC;GAC1E,QAAQ,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;GACvD,OAAO,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;GACtD,OAAO,EAAiB,KAAK,EAAE,OAAO,eAAe,CAAC;EACxD;EAOA,OALA,EAAK,UAAU,YAAY,EAAO,IAAI,GACtC,EAAK,UAAU,YAAY,EAAO,KAAK,GACvC,EAAK,UAAU,YAAY,EAAO,KAAK,GACvC,EAAK,UAAU,YAAY,EAAO,MAAM,GAEjC;GACL,WAAW,EAAK;GAChB;GACA,YAAY,EAAK;GACjB;GACA;GACA;GACA,KAAK,EAAK;GACV;EACF;CACF,GACA,CACF;AACF;AAMA,SAAgB,EACd,GACA,GACA,GACa;CACb,OAAO,EACL,GACA,IACC,GAAM,GAAS,GAAQ,OACrB;EACC;EACA,YAAY,EAAK;EACjB;EACA;EACA,KAAK,EAAK;EACV;CACF,IACF,CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is PrismError {\n return err instanceof PrismError;\n }\n}\n\n/**\n * Reserved for future disposal-sensitive APIs on `ChartHandle`. Currently, calling\n * `dispose()` more than once is a documented no-op rather than an error — no code path\n * throws this yet.\n */\nexport class PrismDisposedError extends PrismError {}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,EAAb,MAAa,UAAmB,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,IAAI,OAAO,KACvB,OAAO,eAAe,KAAM,IAAI,OAAO,SAAS,CAClD,CAEA,OAAO,GAAG,EAAiC,CACzC,OAAO,aAAe,CACxB,CACF,EAOa,EAAb,cAAwC,CAAW,CAAC,EAGvC,EAAb,cAAsC,CAAW,CAAC"}
1
+ {"version":3,"file":"errors.cjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is PrismError {\n return err instanceof PrismError;\n }\n}\n\n/**\n * Reserved for future disposal-sensitive APIs on `ChartHandle`. Currently, calling\n * `dispose()` more than once is a documented no-op rather than an error — no code path\n * throws this yet.\n */\nexport class PrismDisposedError extends PrismError {}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":"AACA,IAAa,EAAb,MAAa,UAAmB,KAAM,CACpC,YAAY,EAAiB,EAAqB,CAChD,MAAM,EAAS,CAAI,EACnB,KAAK,KAAO,WAAW,KACvB,OAAO,eAAe,KAAM,WAAW,SAAS,CAClD,CAEA,OAAO,GAAG,EAAiC,CACzC,OAAO,aAAe,CACxB,CACF,EAOa,EAAb,cAAwC,CAAW,CAAC,EAGvC,EAAb,cAAsC,CAAW,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is PrismError {\n return err instanceof PrismError;\n }\n}\n\n/**\n * Reserved for future disposal-sensitive APIs on `ChartHandle`. Currently, calling\n * `dispose()` more than once is a documented no-op rather than an error — no code path\n * throws this yet.\n */\nexport class PrismDisposedError extends PrismError {}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":";AACA,IAAa,IAAb,MAAa,UAAmB,MAAM;CACpC,YAAY,GAAiB,GAAqB;EAGhD,AAFA,MAAM,GAAS,CAAI,GACnB,KAAK,OAAO,IAAI,OAAO,MACvB,OAAO,eAAe,MAAM,IAAI,OAAO,SAAS;CAClD;CAEA,OAAO,GAAG,GAAiC;EACzC,OAAO,aAAe;CACxB;AACF,GAOa,IAAb,cAAwC,EAAW,CAAC,GAGvC,IAAb,cAAsC,EAAW,CAAC"}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/** Base class for all prism errors. Use `instanceof PrismError` to catch any prism-originated error. */\nexport class PrismError extends Error {\n constructor(message: string, opts?: ErrorOptions) {\n super(message, opts);\n this.name = new.target.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static is(err: unknown): err is PrismError {\n return err instanceof PrismError;\n }\n}\n\n/**\n * Reserved for future disposal-sensitive APIs on `ChartHandle`. Currently, calling\n * `dispose()` more than once is a documented no-op rather than an error — no code path\n * throws this yet.\n */\nexport class PrismDisposedError extends PrismError {}\n\n/** Thrown when a chart is given a structurally invalid configuration it cannot render at all (e.g. a non-Element `container`). Recoverable issues like empty or malformed data emit a dev-mode warning instead — see the package docs for details. */\nexport class PrismRenderError extends PrismError {}\n"],"mappings":";AACA,IAAa,IAAb,MAAa,UAAmB,MAAM;CACpC,YAAY,GAAiB,GAAqB;EAGhD,AAFA,MAAM,GAAS,CAAI,GACnB,KAAK,OAAO,WAAW,MACvB,OAAO,eAAe,MAAM,WAAW,SAAS;CAClD;CAEA,OAAO,GAAG,GAAiC;EACzC,OAAO,aAAe;CACxB;AACF,GAOa,IAAb,cAAwC,EAAW,CAAC,GAGvC,IAAb,cAAsC,EAAW,CAAC"}
@@ -1,2 +1,2 @@
1
- const e=require("../_dev.cjs");let t=require("@vielzeug/orbit");function n(n,r){getComputedStyle(n).position===`static`&&(n.style.position=`relative`);let i=document.createElement(`div`);i.className=`prism-tooltip`,i.style.position=`absolute`,i.style.pointerEvents=`none`,i.style.top=`0`,i.style.left=`0`,i.setAttribute(`role`,`status`),i.setAttribute(`aria-live`,`polite`),n.appendChild(i);let a=r!==!0&&r?.offset||8,o=r===!0?void 0:r?.render,s=r===!0?void 0:r?.sanitize;o&&!s&&e.warn("createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.");let c=()=>{i.remove()};return{dispose:c,el:i,hide(){i.style.opacity=`0`,i.textContent=``},show(e,r,c,l){if(!n.isConnected)return;if(o){let e=o(c,l);s?i.innerHTML=s(e):i.textContent=e}else i.textContent=`${l.name}: ${c.value}`;let{x:u,y:d}=(0,t.computePosition)({getBoundingClientRect:()=>{let t=n.getBoundingClientRect();return{bottom:t.top+r,height:0,left:t.left+e,right:t.left+e,top:t.top+r,width:0,x:t.left+e,y:t.top+r}}},i,{middleware:[(0,t.offset)(a),(0,t.flip)(),(0,t.shift)({padding:8})],placement:`top`}),f=n.getBoundingClientRect();i.style.left=`${u-f.left}px`,i.style.top=`${d-f.top}px`,i.style.opacity=`1`},[Symbol.dispose]:c}}exports.createTooltip=n;
1
+ require("../_dev.cjs");let e=require("@vielzeug/orbit");function t(t,n){getComputedStyle(t).position===`static`&&(t.style.position=`relative`);let r=document.createElement(`div`);r.className=`prism-tooltip`,r.style.position=`absolute`,r.style.pointerEvents=`none`,r.style.top=`0`,r.style.left=`0`,r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),t.appendChild(r);let i=n!==!0&&n?.offset||8,a=n===!0?void 0:n?.render,o=n===!0?void 0:n?.sanitize,s=()=>{r.remove()};return{dispose:s,el:r,hide(){r.style.opacity=`0`,r.textContent=``},show(n,s,c,l){if(!t.isConnected)return;if(a){let e=a(c,l);o?r.innerHTML=o(e):r.textContent=e}else r.textContent=`${l.name}: ${c.value}`;let{x:u,y:d}=(0,e.computePosition)({getBoundingClientRect:()=>{let e=t.getBoundingClientRect();return{bottom:e.top+s,height:0,left:e.left+n,right:e.left+n,top:e.top+s,width:0,x:e.left+n,y:e.top+s}}},r,{middleware:[(0,e.offset)(i),(0,e.flip)(),(0,e.shift)({padding:8})],placement:`top`}),f=t.getBoundingClientRect();r.style.left=`${u-f.left}px`,r.style.top=`${d-f.top}px`,r.style.opacity=`1`},[Symbol.dispose]:s}}exports.createTooltip=t;
2
2
  //# sourceMappingURL=tooltip.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.cjs","names":[],"sources":["../../src/interaction/tooltip.ts"],"sourcesContent":["import { computePosition, flip, offset, shift } from '@vielzeug/orbit';\n\nimport type { Datum, Series, TooltipConfig } from '../types';\n\nimport { warn } from '../_dev';\n\nexport interface TooltipState {\n dispose(): void;\n [Symbol.dispose](): void;\n el: HTMLDivElement | null;\n hide(): void;\n show(x: number, y: number, datum: Datum, series: Series): void;\n}\n\nexport function createTooltip(container: HTMLElement, config?: TooltipConfig | true): TooltipState {\n if (getComputedStyle(container).position === 'static') {\n container.style.position = 'relative';\n }\n\n const el = document.createElement('div');\n\n el.className = 'prism-tooltip';\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n el.style.top = '0';\n el.style.left = '0';\n // Non-modal status text — announced by assistive tech whenever content/hide state changes.\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n container.appendChild(el);\n\n const tooltipOffset: number = (config !== true && config?.offset) || 8;\n const render = config !== true ? config?.render : undefined;\n const sanitize = config !== true ? config?.sanitize : undefined;\n\n if (render && !sanitize) {\n warn(\n 'createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.',\n );\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n hide() {\n el.style.opacity = '0';\n // Clear the live region's text too — otherwise assistive tech keeps announcing the\n // last-hovered value as \"current\" even after the pointer leaves the chart.\n el.textContent = '';\n },\n show(x: number, y: number, datum: Datum, series: Series) {\n if (!container.isConnected) return;\n\n if (render) {\n const html = render(datum, series);\n\n if (sanitize) {\n el.innerHTML = sanitize(html);\n } else {\n // No sanitizer provided — never inject the raw string as HTML. Render it as text instead.\n el.textContent = html;\n }\n } else {\n el.textContent = `${series.name}: ${datum.value}`;\n }\n\n const virtualRef = {\n getBoundingClientRect: () => {\n const rect = container.getBoundingClientRect();\n\n return {\n bottom: rect.top + y,\n height: 0,\n left: rect.left + x,\n right: rect.left + x,\n top: rect.top + y,\n width: 0,\n x: rect.left + x,\n y: rect.top + y,\n };\n },\n };\n\n const { x: posX, y: posY } = computePosition(virtualRef, el, {\n middleware: [offset(tooltipOffset), flip(), shift({ padding: 8 })],\n placement: 'top',\n });\n\n const rect = container.getBoundingClientRect();\n\n el.style.left = `${posX - rect.left}px`;\n el.style.top = `${posY - rect.top}px`;\n el.style.opacity = '1';\n },\n [Symbol.dispose]: disposeHandle,\n };\n}\n"],"mappings":"gEAcA,SAAgB,EAAc,EAAwB,EAA6C,CAC7F,iBAAiB,CAAS,CAAC,CAAC,WAAa,WAC3C,EAAU,MAAM,SAAW,YAG7B,IAAM,EAAK,SAAS,cAAc,KAAK,EAEvC,EAAG,UAAY,gBACf,EAAG,MAAM,SAAW,WACpB,EAAG,MAAM,cAAgB,OACzB,EAAG,MAAM,IAAM,IACf,EAAG,MAAM,KAAO,IAEhB,EAAG,aAAa,OAAQ,QAAQ,EAChC,EAAG,aAAa,YAAa,QAAQ,EACrC,EAAU,YAAY,CAAE,EAExB,IAAM,EAAyB,IAAW,IAAQ,GAAQ,QAAW,EAC/D,EAAS,IAAW,GAAwB,IAAA,GAAjB,GAAQ,OACnC,EAAW,IAAW,GAA0B,IAAA,GAAnB,GAAQ,SAEvC,GAAU,CAAC,GACb,EAAA,KACE,uKACF,EAGF,IAAM,MAA4B,CAChC,EAAG,OAAO,CACZ,EAEA,MAAO,CACL,QAAS,EACT,KACA,MAAO,CACL,EAAG,MAAM,QAAU,IAGnB,EAAG,YAAc,EACnB,EACA,KAAK,EAAW,EAAW,EAAc,EAAgB,CACvD,GAAI,CAAC,EAAU,YAAa,OAE5B,GAAI,EAAQ,CACV,IAAM,EAAO,EAAO,EAAO,CAAM,EAE7B,EACF,EAAG,UAAY,EAAS,CAAI,EAG5B,EAAG,YAAc,CAErB,KACE,GAAG,YAAc,GAAG,EAAO,KAAK,IAAI,EAAM,QAoB5C,GAAM,CAAE,EAAG,EAAM,EAAG,IAAA,EAAA,EAAA,gBAAA,CAAyB,CAhB3C,0BAA6B,CAC3B,IAAM,EAAO,EAAU,sBAAsB,EAE7C,MAAO,CACL,OAAQ,EAAK,IAAM,EACnB,OAAQ,EACR,KAAM,EAAK,KAAO,EAClB,MAAO,EAAK,KAAO,EACnB,IAAK,EAAK,IAAM,EAChB,MAAO,EACP,EAAG,EAAK,KAAO,EACf,EAAG,EAAK,IAAM,CAChB,CACF,CAG2C,EAAY,EAAI,CAC3D,WAAY,cAAQ,CAAa,aAAQ,cAAS,CAAE,QAAS,CAAE,CAAC,CAAC,EACjE,UAAW,KACb,CAAC,EAEK,EAAO,EAAU,sBAAsB,EAE7C,EAAG,MAAM,KAAO,GAAG,EAAO,EAAK,KAAK,IACpC,EAAG,MAAM,IAAM,GAAG,EAAO,EAAK,IAAI,IAClC,EAAG,MAAM,QAAU,GACrB,GACC,OAAO,SAAU,CACpB,CACF"}
1
+ {"version":3,"file":"tooltip.cjs","names":[],"sources":["../../src/interaction/tooltip.ts"],"sourcesContent":["import { computePosition, flip, offset, shift } from '@vielzeug/orbit';\n\nimport type { Datum, Series, TooltipConfig } from '../types';\n\nimport { warn } from '../_dev';\n\nexport interface TooltipState {\n dispose(): void;\n [Symbol.dispose](): void;\n el: HTMLDivElement | null;\n hide(): void;\n show(x: number, y: number, datum: Datum, series: Series): void;\n}\n\nexport function createTooltip(container: HTMLElement, config?: TooltipConfig | true): TooltipState {\n if (getComputedStyle(container).position === 'static') {\n container.style.position = 'relative';\n }\n\n const el = document.createElement('div');\n\n el.className = 'prism-tooltip';\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n el.style.top = '0';\n el.style.left = '0';\n // Non-modal status text — announced by assistive tech whenever content/hide state changes.\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n container.appendChild(el);\n\n const tooltipOffset: number = (config !== true && config?.offset) || 8;\n const render = config !== true ? config?.render : undefined;\n const sanitize = config !== true ? config?.sanitize : undefined;\n\n if (render && !sanitize) {\n warn(\n 'createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.',\n );\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n hide() {\n el.style.opacity = '0';\n // Clear the live region's text too — otherwise assistive tech keeps announcing the\n // last-hovered value as \"current\" even after the pointer leaves the chart.\n el.textContent = '';\n },\n show(x: number, y: number, datum: Datum, series: Series) {\n if (!container.isConnected) return;\n\n if (render) {\n const html = render(datum, series);\n\n if (sanitize) {\n el.innerHTML = sanitize(html);\n } else {\n // No sanitizer provided — never inject the raw string as HTML. Render it as text instead.\n el.textContent = html;\n }\n } else {\n el.textContent = `${series.name}: ${datum.value}`;\n }\n\n const virtualRef = {\n getBoundingClientRect: () => {\n const rect = container.getBoundingClientRect();\n\n return {\n bottom: rect.top + y,\n height: 0,\n left: rect.left + x,\n right: rect.left + x,\n top: rect.top + y,\n width: 0,\n x: rect.left + x,\n y: rect.top + y,\n };\n },\n };\n\n const { x: posX, y: posY } = computePosition(virtualRef, el, {\n middleware: [offset(tooltipOffset), flip(), shift({ padding: 8 })],\n placement: 'top',\n });\n\n const rect = container.getBoundingClientRect();\n\n el.style.left = `${posX - rect.left}px`;\n el.style.top = `${posY - rect.top}px`;\n el.style.opacity = '1';\n },\n [Symbol.dispose]: disposeHandle,\n };\n}\n"],"mappings":"wDAcA,SAAgB,EAAc,EAAwB,EAA6C,CAC7F,iBAAiB,CAAS,CAAC,CAAC,WAAa,WAC3C,EAAU,MAAM,SAAW,YAG7B,IAAM,EAAK,SAAS,cAAc,KAAK,EAEvC,EAAG,UAAY,gBACf,EAAG,MAAM,SAAW,WACpB,EAAG,MAAM,cAAgB,OACzB,EAAG,MAAM,IAAM,IACf,EAAG,MAAM,KAAO,IAEhB,EAAG,aAAa,OAAQ,QAAQ,EAChC,EAAG,aAAa,YAAa,QAAQ,EACrC,EAAU,YAAY,CAAE,EAExB,IAAM,EAAyB,IAAW,IAAQ,GAAQ,QAAW,EAC/D,EAAS,IAAW,GAAwB,IAAA,GAAjB,GAAQ,OACnC,EAAW,IAAW,GAA0B,IAAA,GAAnB,GAAQ,SAQrC,MAA4B,CAChC,EAAG,OAAO,CACZ,EAEA,MAAO,CACL,QAAS,EACT,KACA,MAAO,CACL,EAAG,MAAM,QAAU,IAGnB,EAAG,YAAc,EACnB,EACA,KAAK,EAAW,EAAW,EAAc,EAAgB,CACvD,GAAI,CAAC,EAAU,YAAa,OAE5B,GAAI,EAAQ,CACV,IAAM,EAAO,EAAO,EAAO,CAAM,EAE7B,EACF,EAAG,UAAY,EAAS,CAAI,EAG5B,EAAG,YAAc,CAErB,KACE,GAAG,YAAc,GAAG,EAAO,KAAK,IAAI,EAAM,QAoB5C,GAAM,CAAE,EAAG,EAAM,EAAG,IAAA,EAAS,EAAA,gBAAA,CAAgB,CAhB3C,0BAA6B,CAC3B,IAAM,EAAO,EAAU,sBAAsB,EAE7C,MAAO,CACL,OAAQ,EAAK,IAAM,EACnB,OAAQ,EACR,KAAM,EAAK,KAAO,EAClB,MAAO,EAAK,KAAO,EACnB,IAAK,EAAK,IAAM,EAChB,MAAO,EACP,EAAG,EAAK,KAAO,EACf,EAAG,EAAK,IAAM,CAChB,CACF,CAG2C,EAAY,EAAI,CAC3D,WAAY,EAAC,EAAA,EAAA,OAAA,CAAO,CAAa,GAAG,EAAA,EAAA,KAAA,CAAK,GAAG,EAAA,EAAA,MAAA,CAAM,CAAE,QAAS,CAAE,CAAC,CAAC,EACjE,UAAW,KACb,CAAC,EAEK,EAAO,EAAU,sBAAsB,EAE7C,EAAG,MAAM,KAAO,GAAG,EAAO,EAAK,KAAK,IACpC,EAAG,MAAM,IAAM,GAAG,EAAO,EAAK,IAAI,IAClC,EAAG,MAAM,QAAU,GACrB,GACC,OAAO,SAAU,CACpB,CACF"}
@@ -1,53 +1,51 @@
1
- import { warn as e } from "../_dev.js";
2
- import { computePosition as t, flip as n, offset as r, shift as i } from "@vielzeug/orbit";
1
+ import "../_dev.js";
2
+ import { computePosition as e, flip as t, offset as n, shift as r } from "@vielzeug/orbit";
3
3
  //#region src/interaction/tooltip.ts
4
- function a(a, o) {
5
- getComputedStyle(a).position === "static" && (a.style.position = "relative");
6
- let s = document.createElement("div");
7
- s.className = "prism-tooltip", s.style.position = "absolute", s.style.pointerEvents = "none", s.style.top = "0", s.style.left = "0", s.setAttribute("role", "status"), s.setAttribute("aria-live", "polite"), a.appendChild(s);
8
- let c = o !== !0 && o?.offset || 8, l = o === !0 ? void 0 : o?.render, u = o === !0 ? void 0 : o?.sanitize;
9
- l && !u && e("createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.");
10
- let d = () => {
11
- s.remove();
4
+ function i(i, a) {
5
+ getComputedStyle(i).position === "static" && (i.style.position = "relative");
6
+ let o = document.createElement("div");
7
+ o.className = "prism-tooltip", o.style.position = "absolute", o.style.pointerEvents = "none", o.style.top = "0", o.style.left = "0", o.setAttribute("role", "status"), o.setAttribute("aria-live", "polite"), i.appendChild(o);
8
+ let s = a !== !0 && a?.offset || 8, c = a === !0 ? void 0 : a?.render, l = a === !0 ? void 0 : a?.sanitize, u = () => {
9
+ o.remove();
12
10
  };
13
11
  return {
14
- dispose: d,
15
- el: s,
12
+ dispose: u,
13
+ el: o,
16
14
  hide() {
17
- s.style.opacity = "0", s.textContent = "";
15
+ o.style.opacity = "0", o.textContent = "";
18
16
  },
19
- show(e, o, d, f) {
20
- if (!a.isConnected) return;
21
- if (l) {
22
- let e = l(d, f);
23
- u ? s.innerHTML = u(e) : s.textContent = e;
24
- } else s.textContent = `${f.name}: ${d.value}`;
25
- let { x: p, y: m } = t({ getBoundingClientRect: () => {
26
- let t = a.getBoundingClientRect();
17
+ show(a, u, d, f) {
18
+ if (!i.isConnected) return;
19
+ if (c) {
20
+ let e = c(d, f);
21
+ l ? o.innerHTML = l(e) : o.textContent = e;
22
+ } else o.textContent = `${f.name}: ${d.value}`;
23
+ let { x: p, y: m } = e({ getBoundingClientRect: () => {
24
+ let e = i.getBoundingClientRect();
27
25
  return {
28
- bottom: t.top + o,
26
+ bottom: e.top + u,
29
27
  height: 0,
30
- left: t.left + e,
31
- right: t.left + e,
32
- top: t.top + o,
28
+ left: e.left + a,
29
+ right: e.left + a,
30
+ top: e.top + u,
33
31
  width: 0,
34
- x: t.left + e,
35
- y: t.top + o
32
+ x: e.left + a,
33
+ y: e.top + u
36
34
  };
37
- } }, s, {
35
+ } }, o, {
38
36
  middleware: [
39
- r(c),
40
- n(),
41
- i({ padding: 8 })
37
+ n(s),
38
+ t(),
39
+ r({ padding: 8 })
42
40
  ],
43
41
  placement: "top"
44
- }), h = a.getBoundingClientRect();
45
- s.style.left = `${p - h.left}px`, s.style.top = `${m - h.top}px`, s.style.opacity = "1";
42
+ }), h = i.getBoundingClientRect();
43
+ o.style.left = `${p - h.left}px`, o.style.top = `${m - h.top}px`, o.style.opacity = "1";
46
44
  },
47
- [Symbol.dispose]: d
45
+ [Symbol.dispose]: u
48
46
  };
49
47
  }
50
48
  //#endregion
51
- export { a as createTooltip };
49
+ export { i as createTooltip };
52
50
 
53
51
  //# sourceMappingURL=tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":[],"sources":["../../src/interaction/tooltip.ts"],"sourcesContent":["import { computePosition, flip, offset, shift } from '@vielzeug/orbit';\n\nimport type { Datum, Series, TooltipConfig } from '../types';\n\nimport { warn } from '../_dev';\n\nexport interface TooltipState {\n dispose(): void;\n [Symbol.dispose](): void;\n el: HTMLDivElement | null;\n hide(): void;\n show(x: number, y: number, datum: Datum, series: Series): void;\n}\n\nexport function createTooltip(container: HTMLElement, config?: TooltipConfig | true): TooltipState {\n if (getComputedStyle(container).position === 'static') {\n container.style.position = 'relative';\n }\n\n const el = document.createElement('div');\n\n el.className = 'prism-tooltip';\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n el.style.top = '0';\n el.style.left = '0';\n // Non-modal status text — announced by assistive tech whenever content/hide state changes.\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n container.appendChild(el);\n\n const tooltipOffset: number = (config !== true && config?.offset) || 8;\n const render = config !== true ? config?.render : undefined;\n const sanitize = config !== true ? config?.sanitize : undefined;\n\n if (render && !sanitize) {\n warn(\n 'createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.',\n );\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n hide() {\n el.style.opacity = '0';\n // Clear the live region's text too — otherwise assistive tech keeps announcing the\n // last-hovered value as \"current\" even after the pointer leaves the chart.\n el.textContent = '';\n },\n show(x: number, y: number, datum: Datum, series: Series) {\n if (!container.isConnected) return;\n\n if (render) {\n const html = render(datum, series);\n\n if (sanitize) {\n el.innerHTML = sanitize(html);\n } else {\n // No sanitizer provided — never inject the raw string as HTML. Render it as text instead.\n el.textContent = html;\n }\n } else {\n el.textContent = `${series.name}: ${datum.value}`;\n }\n\n const virtualRef = {\n getBoundingClientRect: () => {\n const rect = container.getBoundingClientRect();\n\n return {\n bottom: rect.top + y,\n height: 0,\n left: rect.left + x,\n right: rect.left + x,\n top: rect.top + y,\n width: 0,\n x: rect.left + x,\n y: rect.top + y,\n };\n },\n };\n\n const { x: posX, y: posY } = computePosition(virtualRef, el, {\n middleware: [offset(tooltipOffset), flip(), shift({ padding: 8 })],\n placement: 'top',\n });\n\n const rect = container.getBoundingClientRect();\n\n el.style.left = `${posX - rect.left}px`;\n el.style.top = `${posY - rect.top}px`;\n el.style.opacity = '1';\n },\n [Symbol.dispose]: disposeHandle,\n };\n}\n"],"mappings":";;;AAcA,SAAgB,EAAc,GAAwB,GAA6C;CACjG,AAAI,iBAAiB,CAAS,CAAC,CAAC,aAAa,aAC3C,EAAU,MAAM,WAAW;CAG7B,IAAM,IAAK,SAAS,cAAc,KAAK;CAUvC,AARA,EAAG,YAAY,iBACf,EAAG,MAAM,WAAW,YACpB,EAAG,MAAM,gBAAgB,QACzB,EAAG,MAAM,MAAM,KACf,EAAG,MAAM,OAAO,KAEhB,EAAG,aAAa,QAAQ,QAAQ,GAChC,EAAG,aAAa,aAAa,QAAQ,GACrC,EAAU,YAAY,CAAE;CAExB,IAAM,IAAyB,MAAW,MAAQ,GAAQ,UAAW,GAC/D,IAAS,MAAW,KAAwB,KAAA,IAAjB,GAAQ,QACnC,IAAW,MAAW,KAA0B,KAAA,IAAnB,GAAQ;CAE3C,AAAI,KAAU,CAAC,KACb,EACE,uKACF;CAGF,IAAM,UAA4B;EAChC,EAAG,OAAO;CACZ;CAEA,OAAO;EACL,SAAS;EACT;EACA,OAAO;GAIL,AAHA,EAAG,MAAM,UAAU,KAGnB,EAAG,cAAc;EACnB;EACA,KAAK,GAAW,GAAW,GAAc,GAAgB;GACvD,IAAI,CAAC,EAAU,aAAa;GAE5B,IAAI,GAAQ;IACV,IAAM,IAAO,EAAO,GAAO,CAAM;IAEjC,AAAI,IACF,EAAG,YAAY,EAAS,CAAI,IAG5B,EAAG,cAAc;GAErB,OACE,EAAG,cAAc,GAAG,EAAO,KAAK,IAAI,EAAM;GAoB5C,IAAM,EAAE,GAAG,GAAM,GAAG,MAAS,EAAgB,EAhB3C,6BAA6B;IAC3B,IAAM,IAAO,EAAU,sBAAsB;IAE7C,OAAO;KACL,QAAQ,EAAK,MAAM;KACnB,QAAQ;KACR,MAAM,EAAK,OAAO;KAClB,OAAO,EAAK,OAAO;KACnB,KAAK,EAAK,MAAM;KAChB,OAAO;KACP,GAAG,EAAK,OAAO;KACf,GAAG,EAAK,MAAM;IAChB;GACF,EAG2C,GAAY,GAAI;IAC3D,YAAY;KAAC,EAAO,CAAa;KAAG,EAAK;KAAG,EAAM,EAAE,SAAS,EAAE,CAAC;IAAC;IACjE,WAAW;GACb,CAAC,GAEK,IAAO,EAAU,sBAAsB;GAI7C,AAFA,EAAG,MAAM,OAAO,GAAG,IAAO,EAAK,KAAK,KACpC,EAAG,MAAM,MAAM,GAAG,IAAO,EAAK,IAAI,KAClC,EAAG,MAAM,UAAU;EACrB;GACC,OAAO,UAAU;CACpB;AACF"}
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../../src/interaction/tooltip.ts"],"sourcesContent":["import { computePosition, flip, offset, shift } from '@vielzeug/orbit';\n\nimport type { Datum, Series, TooltipConfig } from '../types';\n\nimport { warn } from '../_dev';\n\nexport interface TooltipState {\n dispose(): void;\n [Symbol.dispose](): void;\n el: HTMLDivElement | null;\n hide(): void;\n show(x: number, y: number, datum: Datum, series: Series): void;\n}\n\nexport function createTooltip(container: HTMLElement, config?: TooltipConfig | true): TooltipState {\n if (getComputedStyle(container).position === 'static') {\n container.style.position = 'relative';\n }\n\n const el = document.createElement('div');\n\n el.className = 'prism-tooltip';\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n el.style.top = '0';\n el.style.left = '0';\n // Non-modal status text — announced by assistive tech whenever content/hide state changes.\n el.setAttribute('role', 'status');\n el.setAttribute('aria-live', 'polite');\n container.appendChild(el);\n\n const tooltipOffset: number = (config !== true && config?.offset) || 8;\n const render = config !== true ? config?.render : undefined;\n const sanitize = config !== true ? config?.sanitize : undefined;\n\n if (render && !sanitize) {\n warn(\n 'createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.',\n );\n }\n\n const disposeHandle = (): void => {\n el.remove();\n };\n\n return {\n dispose: disposeHandle,\n el,\n hide() {\n el.style.opacity = '0';\n // Clear the live region's text too — otherwise assistive tech keeps announcing the\n // last-hovered value as \"current\" even after the pointer leaves the chart.\n el.textContent = '';\n },\n show(x: number, y: number, datum: Datum, series: Series) {\n if (!container.isConnected) return;\n\n if (render) {\n const html = render(datum, series);\n\n if (sanitize) {\n el.innerHTML = sanitize(html);\n } else {\n // No sanitizer provided — never inject the raw string as HTML. Render it as text instead.\n el.textContent = html;\n }\n } else {\n el.textContent = `${series.name}: ${datum.value}`;\n }\n\n const virtualRef = {\n getBoundingClientRect: () => {\n const rect = container.getBoundingClientRect();\n\n return {\n bottom: rect.top + y,\n height: 0,\n left: rect.left + x,\n right: rect.left + x,\n top: rect.top + y,\n width: 0,\n x: rect.left + x,\n y: rect.top + y,\n };\n },\n };\n\n const { x: posX, y: posY } = computePosition(virtualRef, el, {\n middleware: [offset(tooltipOffset), flip(), shift({ padding: 8 })],\n placement: 'top',\n });\n\n const rect = container.getBoundingClientRect();\n\n el.style.left = `${posX - rect.left}px`;\n el.style.top = `${posY - rect.top}px`;\n el.style.opacity = '1';\n },\n [Symbol.dispose]: disposeHandle,\n };\n}\n"],"mappings":";;;AAcA,SAAgB,EAAc,GAAwB,GAA6C;CACjG,AAAI,iBAAiB,CAAS,CAAC,CAAC,aAAa,aAC3C,EAAU,MAAM,WAAW;CAG7B,IAAM,IAAK,SAAS,cAAc,KAAK;CAUvC,AARA,EAAG,YAAY,iBACf,EAAG,MAAM,WAAW,YACpB,EAAG,MAAM,gBAAgB,QACzB,EAAG,MAAM,MAAM,KACf,EAAG,MAAM,OAAO,KAEhB,EAAG,aAAa,QAAQ,QAAQ,GAChC,EAAG,aAAa,aAAa,QAAQ,GACrC,EAAU,YAAY,CAAE;CAExB,IAAM,IAAyB,MAAW,MAAQ,GAAQ,UAAW,GAC/D,IAAS,MAAW,KAAwB,KAAA,IAAjB,GAAQ,QACnC,IAAW,MAAW,KAA0B,KAAA,IAAnB,GAAQ,UAQrC,UAA4B;EAChC,EAAG,OAAO;CACZ;CAEA,OAAO;EACL,SAAS;EACT;EACA,OAAO;GAIL,AAHA,EAAG,MAAM,UAAU,KAGnB,EAAG,cAAc;EACnB;EACA,KAAK,GAAW,GAAW,GAAc,GAAgB;GACvD,IAAI,CAAC,EAAU,aAAa;GAE5B,IAAI,GAAQ;IACV,IAAM,IAAO,EAAO,GAAO,CAAM;IAEjC,AAAI,IACF,EAAG,YAAY,EAAS,CAAI,IAG5B,EAAG,cAAc;GAErB,OACE,EAAG,cAAc,GAAG,EAAO,KAAK,IAAI,EAAM;GAoB5C,IAAM,EAAE,GAAG,GAAM,GAAG,MAAS,EAAgB,EAhB3C,6BAA6B;IAC3B,IAAM,IAAO,EAAU,sBAAsB;IAE7C,OAAO;KACL,QAAQ,EAAK,MAAM;KACnB,QAAQ;KACR,MAAM,EAAK,OAAO;KAClB,OAAO,EAAK,OAAO;KACnB,KAAK,EAAK,MAAM;KAChB,OAAO;KACP,GAAG,EAAK,OAAO;KACf,GAAG,EAAK,MAAM;IAChB;GACF,EAG2C,GAAY,GAAI;IAC3D,YAAY;KAAC,EAAO,CAAa;KAAG,EAAK;KAAG,EAAM,EAAE,SAAS,EAAE,CAAC;IAAC;IACjE,WAAW;GACb,CAAC,GAEK,IAAO,EAAU,sBAAsB;GAI7C,AAFA,EAAG,MAAM,OAAO,GAAG,IAAO,EAAK,KAAK,KACpC,EAAG,MAAM,MAAM,GAAG,IAAO,EAAK,IAAI,KAClC,EAAG,MAAM,UAAU;EACrB;GACC,OAAO,UAAU;CACpB;AACF"}
package/dist/prism.cjs CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/ripple"),t=require("@vielzeug/orbit");var n=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},r=class extends n{},i=class extends n{},a=!globalThis.__PRISM_PROD__;function o(e){a&&console.warn(`[@vielzeug/prism] ${e}`)}function s(e,...t){a&&console.error(`[@vielzeug/prism] ${e}`,...t)}var c=`http://www.w3.org/2000/svg`;function l(e,t){let n=document.createElementNS(c,e);return t&&u(n,t),n}function u(e,t){for(let[n,r]of Object.entries(t)){if(r===void 0){e.removeAttribute(n);continue}typeof r==`number`&&!Number.isFinite(r)&&o(`setAttributes: attribute "${n}" on <${e.tagName}> received a non-finite value (${r}) — check upstream scale/geometry math for invalid input.`),e.setAttribute(n,String(r))}}function d(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,t){let n=l(`text`,t);return n.textContent=e,n}function p(e){return typeof e.bandwidth==`function`}function m(e,t){return p(e)?e.map(t)+e.bandwidth()/2:e.map(t)}var h=e=>e instanceof Date?e.toLocaleDateString(void 0,{month:`short`,year:`numeric`}):String(e);function g(e,t,n){let r=e.position??n,i=r===`bottom`||r===`top`?Math.max(2,Math.floor(t/80)):Math.max(2,Math.floor(t/50));return e.tickCount??i}function _(e,t,n,r,i=`bottom`){d(e);let a=n.position??i,o=a===`bottom`||a===`top`,s=a===`top`||a===`left`,c=s?-1:1,p=l(`line`,{"aria-hidden":`true`,class:`prism-axis-line`,x1:0,x2:o?r:0,y1:0,y2:o?0:r});e.appendChild(p);let _=t.ticks(g(n,r,i)),v=n.tickFormat??h;for(let n of _){let r=m(t,n),i=l(`line`,{"aria-hidden":`true`,class:`prism-axis-tick`,x1:o?r:0,x2:o?r:6*c,y1:o?0:r,y2:o?6*c:r});e.appendChild(i);let a=f(v(n),{"aria-hidden":`true`,class:`prism-axis-label`,"dominant-baseline":o?s?`auto`:`hanging`:`middle`,"text-anchor":o?`middle`:s?`end`:`start`,x:o?r:6*c*1.5,y:o?6*c*1.5:r});e.appendChild(a)}if(n.label){let t=f(n.label,{class:`prism-axis-title`,"dominant-baseline":`middle`,"text-anchor":`middle`});o?u(t,{x:r/2,y:6*c*3.5}):u(t,{transform:`translate(${6*c*4}, ${r/2}) rotate(-90)`}),e.appendChild(t)}}function v(e,t,n,r,i,a=10){d(e);let o=n!==!0&&n.color||void 0,s=n!==!0&&n.dash||void 0,c=t.ticks(a);for(let n of c){let a=m(t,n),c={class:`prism-grid-line`,stroke:o??`var(--prism-grid-color)`,"stroke-dasharray":s,"stroke-opacity":`var(--prism-grid-opacity)`};i===`vertical`?Object.assign(c,{x1:a,x2:a,y1:0,y2:r}):Object.assign(c,{x1:0,x2:r,y1:a,y2:a}),e.appendChild(l(`line`,c))}}function y(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function b(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return[0,1];if(e>t&&([e,t]=[t,e]),e===t)return[e-1,t+1];let r=y(y(t-e,!1)/Math.max(1,n-1),!0);return[Math.floor(e/r)*r,Math.ceil(t/r)*r]}function x(e){let t=()=>e.nice===!1?e.domain:b(e.domain[0],e.domain[1],10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();return o===a?r:r+(e-a)/(o-a)*(i-r)},map(r){let[i,a]=t(),[o,s]=n();if(a===i)return o;let c=(r-i)/(a-i);return e.clamp&&(c=Math.max(0,Math.min(1,c))),o+c*(s-o)},get range(){return n()},ticks(e=10){if(e<=0)return[];let[n,r]=t();if(n===r||e===1)return[n];let i=Math.min(n,r),a=Math.max(n,r),o=y(y(a-i,!1)/(e-1),!0),s=Math.ceil(i/o)*o,c=Math.floor(a/o)*o,l=[];for(let e=s;e<=c+o*.5;e+=o)l.push(Math.round(e*0xe8d4a51000)/0xe8d4a51000);return l}}}var S=1e3,C=60*S,w=60*C,T=24*w,E=30*T,D=365*T,O=[S,5*S,15*S,30*S,C,5*C,15*C,30*C,w,3*w,6*w,12*w,T,7*T,E,3*E,6*E,D];function k(e,t){let n=Math.abs(e)/Math.max(1,t);for(let e of O)if(e>=n)return e;return D}function A(e,t){let[n,r]=e;n.getTime()>r.getTime()&&([n,r]=[r,n]);let i=k(r.getTime()-n.getTime(),t);return[new Date(Math.floor(n.getTime()/i)*i),new Date(Math.ceil(r.getTime()/i)*i)]}function j(e){let t=()=>e.nice===!1?e.domain:A(e.domain,10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();if(o===a)return r;let s=(e-a)/(o-a);return new Date(r.getTime()+s*(i.getTime()-r.getTime()))},map(e){let[r,i]=t(),[a,o]=n(),s=i.getTime()-r.getTime();return s===0?a:a+(e.getTime()-r.getTime())/s*(o-a)},get range(){return n()},ticks(e=10){let[n,r]=t(),i=k(r.getTime()-n.getTime(),e),a=Math.ceil(n.getTime()/i)*i,o=[];for(let e=a;e<=r.getTime();e+=i)o.push(new Date(e));return o}}}function M(e,t){if(e.length===0)return x({domain:[0,1],range:[0,t]});if(e.some(e=>e==null))return o(`buildXScale: one or more x values are null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?`),x({domain:[0,1],range:[0,t]});if(e.some(e=>typeof e==`number`&&!Number.isFinite(e)))return o(`buildXScale: one or more x values are NaN or Infinity — check upstream data for invalid arithmetic.`),x({domain:[0,1],range:[0,t]});if(e[0]instanceof Date){let n=e,r=Math.min(...n.map(Number)),i=Math.max(...n.map(Number));return j({domain:[new Date(r),new Date(r===i?i+1:i)],range:[0,t]})}let n=e,r=Math.min(...n),i=Math.max(...n);return x({domain:[r,r===i?i+1:i],nice:!1,range:[0,t]})}function N(e,t,n=!0){if(e.length===0)return x({domain:[0,1],range:[t,0]});if(e.some(e=>e==null))return o(`buildYScale: one or more y values are null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?`),x({domain:[0,1],range:[t,0]});if(e.some(e=>!Number.isFinite(e)))return o(`buildYScale: one or more y values are NaN or Infinity — check upstream data for invalid arithmetic.`),x({domain:[0,1],range:[t,0]});let r=Math.min(...e),i=n?Math.min(0,r):r,a=Math.max(...e);return x({domain:[i,i===a?a+1:a],range:[t,0]})}function ee(e){return e===!0?`bottom`:e.position??`bottom`}function te(e,t){let n=ee(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let i=()=>{r.remove()};return{dispose:i,el:r,[Symbol.dispose]:i,update(e){r.innerHTML=``;for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}function ne(e,n){getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=document.createElement(`div`);r.className=`prism-tooltip`,r.style.position=`absolute`,r.style.pointerEvents=`none`,r.style.top=`0`,r.style.left=`0`,r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),e.appendChild(r);let i=n!==!0&&n?.offset||8,a=n===!0?void 0:n?.render,s=n===!0?void 0:n?.sanitize;a&&!s&&o("createTooltip: `render` is set without `sanitize` — falling back to plain-text rendering of the returned string to avoid an XSS risk. Pass `sanitize` to render HTML.");let c=()=>{r.remove()};return{dispose:c,el:r,hide(){r.style.opacity=`0`,r.textContent=``},show(n,o,c,l){if(!e.isConnected)return;if(a){let e=a(c,l);s?r.innerHTML=s(e):r.textContent=e}else r.textContent=`${l.name}: ${c.value}`;let{x:u,y:d}=(0,t.computePosition)({getBoundingClientRect:()=>{let t=e.getBoundingClientRect();return{bottom:t.top+o,height:0,left:t.left+n,right:t.left+n,top:t.top+o,width:0,x:t.left+n,y:t.top+o}}},r,{middleware:[(0,t.offset)(i),(0,t.flip)(),(0,t.shift)({padding:8})],placement:`top`}),f=e.getBoundingClientRect();r.style.left=`${u-f.left}px`,r.style.top=`${d-f.top}px`,r.style.opacity=`1`},[Symbol.dispose]:c}}var re={bottom:40,left:50,right:20,top:20};function P(e){return{...re,...e}}function F(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}function ie(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}function ae(t,n){if(!(typeof t==`object`&&t&&t.nodeType===1&&typeof t.appendChild==`function`&&typeof t.getBoundingClientRect==`function`)){let e=t;throw new i(`Invalid chart configuration: \`container\` must be a DOM Element, received ${e===null?`null`:typeof e==`object`?e.constructor?.name??`object`:typeof e}.`)}let r=P(n.margin),a=l(`svg`,{...n.ariaHidden?{"aria-hidden":`true`}:{...n.ariaLabel?{"aria-label":n.ariaLabel}:{},role:`img`},class:`prism-chart`,style:`display:block;width:100%;height:100%`}),s=l(`g`,{class:`prism-chart-area`,transform:`translate(${r.left},${r.top})`});a.appendChild(s);let c=t.getBoundingClientRect();(c.width===0||c.height===0)&&o(`Chart container has zero dimensions. Ensure the container has a defined width and height before mounting a chart.`);let d=typeof getComputedStyle<`u`?getComputedStyle(t):null;d&&d.position===`static`&&o(`Chart container has position:static. Set position:relative (or absolute/fixed) on the container so tooltip and overlay elements are positioned correctly.`);let f=(0,e.signal)({height:c.height||300,margin:r,width:c.width||600}),p=ie(t,(e,t)=>{f.value={height:t,margin:r,width:e},u(a,{height:t,viewBox:`0 0 ${e} ${t}`,width:e})}),m=c.width||600,h=c.height||300;return u(a,{height:h,viewBox:`0 0 ${m} ${h}`,width:m}),t.appendChild(a),{chartArea:s,dimensions:f,dispose(){p(),f.dispose(),a.remove()},svg:a}}function oe(e,t,n,r){d(e.series),d(e.grid),d(e.xAxis),d(e.yAxis),t?.update([]),n?.hide(),r?.hide()}function se(t,n,r,i){let a=ae(t,{ariaLabel:n.ariaLabel,margin:n.margin}),o=n.tooltip?ne(t,n.tooltip):null,c=n.legend?te(t,n.legend):null,l=new AbortController,u=r(a,o,c,l.signal),d=!1,f=ce(a.svg),p=(0,e.scope)(()=>{(0,e.effect)(()=>{d||f.attach(i(u))},{scheduler:`microtask`})}),m=[];if(n.plugins){let e={container:t,dimensions:a.dimensions,disposalSignal:l.signal,svg:a.svg};for(let t of n.plugins)try{t.install(e),m.push(t)}catch(e){s(`A chart plugin threw during install() — skipping it; the rest of the chart still renders.`,e)}}return{get disposalSignal(){return l.signal},dispose(){if(!d){d=!0,l.abort(),f.detach();for(let e of m)try{e.dispose()}catch(e){s(`A chart plugin threw during dispose() — continuing to tear down the rest of the chart.`,e)}o?.dispose(),c?.dispose(),p.dispose(),a.dispose()}},get disposed(){return d},el:a.svg,[Symbol.dispose](){this.dispose()}}}function ce(e){let t=null;return{attach(n){t&&=(t.onMouseMove&&e.removeEventListener(`mousemove`,t.onMouseMove),t.onMouseLeave&&e.removeEventListener(`mouseleave`,t.onMouseLeave),t.onClick&&e.removeEventListener(`click`,t.onClick),null),n&&(t=n,n.onMouseMove&&e.addEventListener(`mousemove`,n.onMouseMove),n.onMouseLeave&&e.addEventListener(`mouseleave`,n.onMouseLeave),n.onClick&&e.addEventListener(`click`,n.onClick))},detach(){this.attach(void 0)}}}function I(e,t,n){return se(e,t,(t,n,r,i)=>{let a={grid:l(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:l(`g`,{class:`prism-series`}),xAxis:l(`g`,{class:`prism-x-axis`}),yAxis:l(`g`,{class:`prism-y-axis`})};return t.chartArea.appendChild(a.grid),t.chartArea.appendChild(a.xAxis),t.chartArea.appendChild(a.yAxis),t.chartArea.appendChild(a.series),{chartArea:t.chartArea,container:e,dimensions:t.dimensions,disposalSignal:i,groups:a,legend:r,svg:t.svg,tooltip:n}},n)}function le(e,t,n){return se(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n)}function ue(e,t){let n=t===!0||t?.vertical!==!1,r=t!==!0&&t?.horizontal===!0,i=t===!0||t?.snap!==!1,a=l(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),o=n?l(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,s=r?l(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;o&&a.appendChild(o),s&&a.appendChild(s),e.appendChild(a);let c=l(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return e.appendChild(c),{hide(){a.style.display=`none`,c.textContent=``},show(e,t,n,r,i){a.style.display=``,o&&u(o,{x1:e,x2:e,y1:0,y2:r}),s&&u(s,{x1:0,x2:n,y1:t,y2:t}),i!==void 0&&(c.textContent=i)},snap:i}}function L(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}function de(e,t){if(e.length===0)return-1;let n=1/0,r=0;for(let i=0;i<e.length;i++){let a=Math.abs(e[i].x-t);a<n&&(n=a,r=i)}return r}function fe(e,t,n){let r=0,i=1/0;for(let a=0;a<e.length;a++){let o=e[a]?.[t];if(o){let e=Math.abs(o.y-n);e<i&&(i=e,r=a)}}return r}function pe(e){return{onClick:t=>{if(!e.onClick)return;let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=L(e.svg,t,r.margin.left,r.margin.top),a=F(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=de(n[0],i.x);if(o<0)return;let s=fe(n,o,i.y),c=e.getData()[s]?.[o],l=e.getSeriesList()[s];c&&l&&e.onClick({datum:c,originalEvent:t,series:l})},onMouseLeave:()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null)},onMouseMove:t=>{let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=L(e.svg,t,r.margin.left,r.margin.top),a=F(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height){e.crosshair?.hide(),e.tooltip?.hide();return}let o=n[0]??[],s=de(o,i.x);if(s<0)return;let c=o[s],l=e.crosshair?.snap===!1?i.x:c.x,u=e.crosshair?.snap===!1?i.y:c.y,d=fe(n,s,i.y),f=n[d]?.[s],p=e.getData()[d]?.[s],m=e.getSeriesList()[d];e.crosshair?.show(l,u,a.width,a.height,m&&p?`${m.name}: ${p.value}`:void 0),f&&p&&m&&(e.tooltip?.show(f.x+r.margin.left,f.y+r.margin.top,p,m),e.onHover?.({datum:p,originalEvent:t,series:m}))}}}var me=8;function he(e){let t=document.documentElement;if(e.colors)for(let n=0;n<me;n++){let r=e.colors[n];r?t.style.setProperty(`--prism-color-${n+1}`,r):t.style.removeProperty(`--prism-color-${n+1}`)}e.fontFamily&&t.style.setProperty(`--prism-font-family`,e.fontFamily),e.gridColor&&t.style.setProperty(`--prism-grid-color`,e.gridColor),e.gridOpacity!==void 0&&t.style.setProperty(`--prism-grid-opacity`,String(e.gridOpacity))}function ge(){let e=document.documentElement;for(let t=1;t<=me;t++)e.style.removeProperty(`--prism-color-${t}`);e.style.removeProperty(`--prism-font-family`),e.style.removeProperty(`--prism-grid-color`),e.style.removeProperty(`--prism-grid-opacity`)}function R(e,t){return t??`var(--prism-color-${e%me+1})`}var z={"ease-in":e=>e*e,"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"ease-out":e=>1-(1-e)*(1-e),linear:e=>e};function B(e){return typeof e==`function`?e:e!==void 0&&Object.hasOwn(z,e)?z[e]:z[`ease-out`]}function V(e,t,n){return e+(t-e)*n}function H(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++)t+=`L${e[n].x},${e[n].y}`;return t}function U(e){if(e.length<3)return H(e);let t=e.length,n=[];for(let r=0;r<t;r++)r===0?n.push({x:e[1].x-e[0].x,y:e[1].y-e[0].y}):r===t-1?n.push({x:e[t-1].x-e[t-2].x,y:e[t-1].y-e[t-2].y}):n.push({x:(e[r+1].x-e[r-1].x)/2,y:(e[r+1].y-e[r-1].y)/2});let r=`M${e[0].x},${e[0].y}`;for(let i=0;i<t-1;i++){let t=e[i],a=e[i+1],o=n[i],s=n[i+1],c=(a.x-t.x)/3;r+=`C${t.x+c},${t.y+o.y/3},${a.x-c},${a.y-s.y/3},${a.x},${a.y}`}return r}function W(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++){let r=(e[n-1].x+e[n].x)/2;t+=`H${r}V${e[n].y}H${e[n].x}`}return t}function G(e,t,n=`linear`){if(e.length===0)return``;let r=n===`monotone`?U(e):n===`step`?W(e):H(e),i=[...t].reverse();if(i.length>0){r+=`L${i[0].x},${i[0].y}`;for(let e=1;e<i.length;e++)r+=`L${i[e].x},${i[e].y}`}return r+=`Z`,r}var K=new WeakMap,q=new WeakMap;function J(e,t){return t===`monotone`?U(e):t===`step`?W(e):H(e)}function _e(e,t,n,r){let i=r.transition?.duration??(r.transition?300:0),a=B(r.transition?.easing),o=e.querySelector(`.prism-area-fill`);o||(o=l(`path`,{class:`prism-area-fill`}),e.appendChild(o)),u(o,{fill:r.color,"fill-opacity":r.fillOpacity,stroke:`none`});let s=null;if(r.showLine?(s=e.querySelector(`.prism-area-line`),s||(s=l(`path`,{class:`prism-area-line`,fill:`none`}),e.appendChild(s)),u(s,{stroke:r.color,"stroke-width":2})):e.querySelector(`.prism-area-line`)?.remove(),i===0){let e=t.map(e=>({x:e.x,y:n}));u(o,{d:G(t,e,r.curve)}),s&&u(s,{d:J(t,r.curve)});return}if(K.get(e)?.(),!o.hasAttribute(`d`)){let i=t.map(e=>({x:e.x,y:n}));u(o,{d:G(t,i,r.curve)}),s&&u(s,{d:J(t,r.curve)}),q.set(e,t);return}let c=q.get(e)??t,d=t.map((e,n)=>c[n]??c[c.length-1]??t[n]),f=null;function p(c){if(r.disposalSignal?.aborted){K.delete(e);return}f===null&&(f=c);let l=Math.min(1,(c-f)/i),m=a(l),h=t.map((e,t)=>({x:V(d[t].x,e.x,m),y:V(d[t].y,e.y,m)})),g=h.map(e=>({x:e.x,y:n}));if(u(o,{d:G(h,g,r.curve)}),s&&u(s,{d:J(h,r.curve)}),l<1){let t=requestAnimationFrame(p);K.set(e,()=>cancelAnimationFrame(t))}else K.delete(e),q.set(e,t)}q.set(e,d);let m=requestAnimationFrame(p);K.set(e,()=>cancelAnimationFrame(m))}function ve(e,t,n){return e.some(e=>e.key==null)?o(`computeAreaPoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?`):e.some(e=>typeof e.key==`string`)&&o(`computeAreaPoints: string keys are not supported for line/area charts — use numeric or Date keys.`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function ye(t,n){let r=null;return I(t,n,t=>{let{groups:i,legend:a,tooltip:s}=t,c=t.dimensions.value,u=F(c.width,c.height,c.margin),d=(0,e.isReactive)(n.series)?n.series.value:n.series,f=d.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),p=f.flat().map(e=>e.key),m=f.flat().map(e=>e.value);if(p.length===0){o(`createAreaChart: no data`),oe(i,a,s,r);return}n.crosshair&&!r&&(r=ue(t.chartArea,n.crosshair));let h=M(p,u.width),y=N(m,u.height),b=y.map(0);for(n.yAxis?.grid&&v(i.grid,y,n.yAxis.grid,u.width,`horizontal`,g(n.yAxis,u.height,`left`)),n.xAxis?.grid&&v(i.grid,h,n.xAxis.grid,u.height,`vertical`,g(n.xAxis,u.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${u.height})`),_(i.xAxis,h,n.xAxis,u.width,`bottom`)),n.yAxis&&_(i.yAxis,y,n.yAxis,u.height,`left`);i.series.children.length>d.length;)i.series.removeChild(i.series.lastChild);let x=[];for(let e=0;e<d.length;e++){let r=d[e],a=i.series.children[e];a||(a=l(`g`,{class:`prism-area-series`}),i.series.appendChild(a));let o=ve(f[e],h,y);x.push(o),_e(a,o,b,{color:R(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,fillOpacity:r.fillOpacity??.3,showLine:r.showLine!==!1,transition:n.transition})}return a?.update(d.map((e,t)=>({color:R(t,e.color),name:e.name}))),s?.hide(),pe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>f,getPoints:()=>x,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:s})})}function be(e){let t=()=>e.domain,n=()=>e.range,r=()=>{let r=t().length;if(r===0)return 0;let[i,a]=n(),o=e.padding??.1;return(a-i)/(r+(r-1)*o+(e.paddingOuter??o)*2)};return{bandwidth:r,get domain(){return t()},gap(){let t=e.padding??.1;return r()*t},map(i){let a=t().indexOf(i);if(a===-1)return o(`bandScale.map: unknown category "${i}"`),0;let[s]=n(),c=r(),l=e.padding??.1;return s+(e.paddingOuter??l)*c+a*(c+c*l)},get range(){return n()},ticks(e){let n=t();if(e===void 0||e>=n.length)return[...n];if(e<=0)return[];let r=Math.ceil(n.length/e);return n.filter((e,t)=>t%r===0)}}}function xe(e,t,n){for(let r=0;r<t.length;r++){let i=n.bandCenter(t[r])-n.bandwidth/2;if(e>=i&&e<i+n.bandwidth)return r}return-1}function Se(e,t,n,r,i){if(r.stacked)if(r.horizontal){for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)>=e.x)return n;return i-1}else{for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)<=e.y)return n;return i-1}else{let a=r.bandwidth/i,o=r.bandCenter(n[t])-r.bandwidth/2,s=r.horizontal?e.y-o:e.x-o,c=Math.floor(s/a);return Math.max(0,Math.min(i-1,c))}}function Ce(e,t,n,r,i){let a=i-1,o=r.stacked?r.stackedTops[a]?.[t]??0:Math.max(...Array.from({length:i},(e,r)=>n[r]?.[t]?.value??0)),s=r.valueScale.map(o);return r.horizontal?e.x>s:e.y<s}function Y(e,t,n,r){let i=t?.duration??300,a=B(t?.easing),o=Math.max(0,t?.stagger??0);if(i===0||e.length===0){for(let t of e)for(let[e,{to:n}]of Object.entries(t.attrs))t.el.setAttribute(e,String(n));return n?.(),()=>{}}let s=null,c=!1,l=Math.max(i,i+o*(e.length-1));function u(t){if(c||r?.aborted)return;s===null&&(s=t);let d=t-s;for(let t=0;t<e.length;t++){let n=e[t],r=o*t,s=Math.max(0,d-r),c=Math.min(1,s/i),l=a(c);for(let[e,{from:t,to:r}]of Object.entries(n.attrs))n.el.setAttribute(e,String(V(t,r,l)))}d<l?requestAnimationFrame(u):n?.()}return requestAnimationFrame(u),()=>{c=!0}}var we=new WeakMap;function Te(e,t,n,r,i,a){for(;e.children.length>t.length;){let t=e.lastElementChild;t&&e.removeChild(t)}let o=n.bandwidth(),s=a.stacked?o:o/a.seriesCount,c=a.stacked?0:s*a.seriesIndex,d=a.horizontal??!1,f=[],p=[];for(let o=0;o<t.length;o++){let m=t[o],h=n.map(m.key)+c,g=a.baselineYs?a.baselineYs[o]:i,_=r.map(m.y),v=e.children[o],y=!v;if(v||(v=l(`rect`,{class:`prism-bar`}),e.appendChild(v)),d){let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);u(v,{fill:a.color,height:Math.max(0,s-1),rx:a.borderRadius,ry:a.borderRadius,y:h}),a.transition?y?(u(v,{width:0,x:g}),f.push({attrs:{width:{from:0,to:e},x:{from:g,to:t}},el:v})):p.push({attrs:{width:{from:Number(v.getAttribute(`width`)??e),to:e},x:{from:Number(v.getAttribute(`x`)??t),to:t}},el:v}):u(v,{width:e,x:t})}else{let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);u(v,{fill:a.color,rx:a.borderRadius,ry:a.borderRadius,width:Math.max(0,s-1),x:h}),a.transition?y?(u(v,{height:0,y:g}),f.push({attrs:{height:{from:0,to:e},y:{from:g,to:t}},el:v})):p.push({attrs:{height:{from:Number(v.getAttribute(`height`)??e),to:e},y:{from:Number(v.getAttribute(`y`)??t),to:t}},el:v}):u(v,{height:e,y:t})}}if(a.transition){we.get(e)?.();let t=[];f.length>0&&t.push(Y(f,a.transition,void 0,a.disposalSignal)),p.length>0&&t.push(Y(p,{...a.transition,stagger:0},void 0,a.disposalSignal)),we.set(e,()=>{for(let e of t)e()})}}function Ee(e){return{horizontal:e===`grouped-horizontal`||e===`stacked-horizontal`,stacked:e===`stacked`||e===`stacked-horizontal`}}function De(t,n){return I(t,n,t=>{let{groups:r,legend:i,tooltip:a}=t,s=t.dimensions.value,c=F(s.width,s.height,s.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=[...new Set(d.flat().map(e=>String(e.key)))];if(f.length===0){o(`createBarChart: no data`),oe(r,i,a);return}let{horizontal:p,stacked:m}=Ee(n.variant??`grouped`),h,y;if(m){d.some(e=>e.some(e=>e.value<0))&&o(`createBarChart: negative values in a stacked/stacked-horizontal series are clamped to 0 — stacking mixed-sign data is not supported.`);let e=f.map(e=>d.reduce((t,n)=>{let r=n.find(t=>String(t.key)===e);return t+(r?Math.max(0,r.value):0)},0));h=Math.max(...e),y=0}else{let e=d.flat().map(e=>e.value);h=Math.max(...e),y=Math.min(0,...e)}let b=be(p?{domain:f,range:[0,c.height]}:{domain:f,range:[0,c.width]}),S=x(p?{domain:[y,h],range:[0,c.width]}:{domain:[y,h],range:[c.height,0]}),C=[],w=Object.create(null);for(let e of f)w[e]=0;let T={bandCenter:e=>b.map(e)+b.bandwidth()/2,bandwidth:b.bandwidth(),baselinePx:S.map(0),horizontal:p,stacked:m,stackedTops:C,valueScale:S};for(p?(n.xAxis?.grid&&v(r.grid,S,n.xAxis.grid,c.height,`vertical`,g(n.xAxis,c.width,`bottom`)),n.yAxis&&_(r.yAxis,b,n.yAxis,c.height,`left`),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${c.height})`),_(r.xAxis,S,n.xAxis,c.width,`bottom`))):(n.yAxis?.grid&&v(r.grid,S,n.yAxis.grid,c.width,`horizontal`,g(n.yAxis,c.height,`left`)),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${c.height})`),_(r.xAxis,b,n.xAxis,c.width,`bottom`)),n.yAxis&&_(r.yAxis,S,n.yAxis,c.height,`left`));r.series.children.length>u.length;){let e=r.series.lastElementChild;e&&r.series.removeChild(e)}for(let e=0;e<u.length;e++){let i=u[e],a=r.series.children[e];a||(a=l(`g`,{class:`prism-bar-series`}),r.series.appendChild(a));let o=d[e].map(e=>{let t=String(e.key);if(m){let n=w[t]??0,r=n+Math.max(0,e.value);return w[t]=r,{base:n,key:t,y:r}}return{base:0,key:t,y:e.value}});C[e]=o.map(e=>e.y);let s=m?o.map(e=>S.map(e.base)):void 0;Te(a,o,b,S,T.baselinePx,{baselineYs:s,borderRadius:i.borderRadius??0,color:R(e,i.color),disposalSignal:t.disposalSignal,horizontal:p,seriesCount:u.length,seriesIndex:e,stacked:m,transition:n.transition})}return i?.update(u.map((e,t)=>({color:R(t,e.color),name:e.name}))),a?.hide(),{onClick:e=>{if(!n.onClick)return;let r=t.dimensions.value,i=L(t.svg,e,r.margin.left,r.margin.top),a=F(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=xe(p?i.y:i.x,f,T);if(o===-1)return;let s=Se(i,o,f,T,u.length),c=d[s]?.[o];c&&n.onClick({datum:c,originalEvent:e,series:u[s]})},onMouseLeave:()=>{a?.hide(),n.onHover?.(null)},onMouseMove:e=>{let r=t.dimensions.value,i=L(t.svg,e,r.margin.left,r.margin.top),o=F(r.width,r.height,r.margin);if(i.x<0||i.x>o.width||i.y<0||i.y>o.height){a?.hide();return}let s=xe(p?i.y:i.x,f,T);if(s===-1){a?.hide();return}if(Ce(i,s,d,T,u.length)){a?.hide();return}let c=Se(i,s,f,T,u.length),l=d[c]?.[s];if(l){let t=T.bandCenter(f[s]),i=m?C[c]?.[s]??l.value:l.value,o=S.map(i),d=p?o+r.margin.left:t+r.margin.left,h=p?t+r.margin.top:o+r.margin.top;a?.show(d,h,l,u[c]),n.onHover?.({datum:l,originalEvent:e,series:u[c]})}}}})}var X=new WeakMap;function Oe(e,t){return t===`monotone`?U(e):t===`step`?W(e):H(e)}function ke(e,t,n){let r=n.transition?.duration??(n.transition?300:0),i=B(n.transition?.easing),a=e.querySelector(`.prism-line-path`);a||(a=l(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(a)),u(a,{stroke:n.color,"stroke-width":n.strokeWidth});let o=e.querySelector(`.prism-line-dots`);if(n.showPoints?o||(o=l(`g`,{class:`prism-line-dots`}),e.appendChild(o)):o&&=(o.remove(),null),r===0){if(u(a,{d:Oe(t,n.curve)}),o){for(;o.children.length>t.length;)o.removeChild(o.lastChild);for(let e=0;e<t.length;e++){let r=o.children[e];r||(r=l(`circle`,{class:`prism-line-dot`}),o.appendChild(r)),u(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius})}}return}X.get(e)?.();let s=!!a.getAttribute(`d`),c=[],d=null;if(o){let e=o.children.length;for(let t=0;t<e;t++){let e=o.children[t],n={x:Number(e.getAttribute(`cx`)),y:Number(e.getAttribute(`cy`))};c.push(n),d=n}for(;o.children.length>t.length;)o.removeChild(o.lastChild);for(let e=o.children.length;e<t.length;e++){let r=l(`circle`,{class:`prism-line-dot`});u(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius}),o.appendChild(r)}}for(let e=c.length;e<t.length;e++)c.push(d??t[e]);let f=null;function p(s){if(n.disposalSignal?.aborted){X.delete(e);return}f===null&&(f=s);let l=Math.min(1,(s-f)/r),d=i(l),m=t.map((e,t)=>{let n=c[t]??e;return{x:V(n.x,e.x,d),y:V(n.y,e.y,d)}});if(u(a,{d:Oe(m,n.curve)}),o)for(let e=0;e<t.length;e++){let t=o.children[e];t&&u(t,{cx:m[e].x,cy:m[e].y})}if(l<1){let t=requestAnimationFrame(p);X.set(e,()=>cancelAnimationFrame(t))}else X.delete(e)}if(!s)u(a,{d:Oe(t,n.curve)});else{let t=requestAnimationFrame(p);X.set(e,()=>cancelAnimationFrame(t))}}function Ae(e,t,n){return e.some(e=>e.key==null)?o(`computePoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?`):e.some(e=>typeof e.key==`string`)&&o(`computePoints: string keys are not supported for line/area charts — use numeric or Date keys.`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function je(t,n){let r=null;return I(t,n,t=>{let{groups:i,legend:a,tooltip:s}=t,c=t.dimensions.value,u=F(c.width,c.height,c.margin),d=(0,e.isReactive)(n.series)?n.series.value:n.series,f=d.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),p=f.flat().map(e=>e.key),m=f.flat().map(e=>e.value);if(p.length===0){o(`createLineChart: no data`),oe(i,a,s,r);return}n.crosshair&&!r&&(r=ue(t.chartArea,n.crosshair));let h=M(p,u.width),y=N(m,u.height);for(n.yAxis?.grid&&v(i.grid,y,n.yAxis.grid,u.width,`horizontal`,g(n.yAxis,u.height,`left`)),n.xAxis?.grid&&v(i.grid,h,n.xAxis.grid,u.height,`vertical`,g(n.xAxis,u.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${u.height})`),_(i.xAxis,h,n.xAxis,u.width,`bottom`)),n.yAxis&&_(i.yAxis,y,n.yAxis,u.height,`left`);i.series.children.length>d.length;)i.series.removeChild(i.series.lastChild);let b=[];for(let e=0;e<d.length;e++){let r=d[e],a=i.series.children[e];a||(a=l(`g`,{class:`prism-line-series`}),i.series.appendChild(a));let o=Ae(f[e],h,y);b.push(o),ke(a,o,{color:R(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,pointRadius:r.pointRadius??3,showPoints:r.showPoints??!1,strokeWidth:r.strokeWidth??2,transition:n.transition})}return a?.update(d.map((e,t)=>({color:R(t,e.color),name:e.name}))),s?.hide(),pe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>f,getPoints:()=>b,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:s})})}function Me(e,t,n,r,i,a,o,s,c,l,u=!1){let d=e.reduce((e,t)=>e+Math.max(0,t.value),0);if(d===0)return[];let f=o-a,p=r>0?Math.asin(Math.min(1,s/2/r)):0,m=a,h=e.length;return e.map((e,a)=>{let o=Math.max(0,e.value)/d*f,s=m,g=m+o;m+=o;let _=Math.min(p,o/2);return{capEnd:u&&a===h-1,capStart:u&&a===0,centerX:t,centerY:n,color:e.color??l(a),cornerRadius:c,endAngle:g,index:a,innerRadius:i,outerRadius:r,padAngle:_,slice:e,startAngle:s}})}function Z(e,t,n,r){return`${e+n*Math.sin(r)},${t-n*Math.cos(r)}`}function Q(e,t,n){return e+t*Math.sin(n)}function $(e,t,n){return e-t*Math.cos(n)}function Ne(e){let{capEnd:t,capStart:n,centerX:r,centerY:i,cornerRadius:a,endAngle:o,innerRadius:s,outerRadius:c,padAngle:l,startAngle:u}=e,d=o-u;if(d<=0)return``;if(d>=2*Math.PI-1e-6){let e=u+Math.PI;return s<=0?`M${Z(r,i,c,u)}A${c},${c},0,1,1,${Z(r,i,c,e)}A${c},${c},0,1,1,${Z(r,i,c,u)}Z`:[`M${Z(r,i,c,u)}`,`A${c},${c},0,1,1,${Z(r,i,c,e)}`,`A${c},${c},0,1,1,${Z(r,i,c,u)}`,`M${Z(r,i,s,u)}`,`A${s},${s},0,1,0,${Z(r,i,s,e)}`,`A${s},${s},0,1,0,${Z(r,i,s,u)}`,`Z`].join(``)}let f=n?u:u+l,p=t?o:o-l;if(p<=f)return``;let m=p-f;if(a<=0){let e=+(m>Math.PI);return s<=0?`M${r},${i}L${Z(r,i,c,f)}A${c},${c},0,${e},1,${Z(r,i,c,p)}Z`:[`M${Z(r,i,c,f)}`,`A${c},${c},0,${e},1,${Z(r,i,c,p)}`,`L${Z(r,i,s,p)}`,`A${s},${s},0,${e},0,${Z(r,i,s,f)}`,`Z`].join(``)}let h=Math.min(a/c,m/2),g=Math.min(a/s,m/2),_=Math.min(a,(c-s)/2),v=(c-s)/2,y=f+(n?0:h),b=p-(t?0:h),x=f+(n?0:g),S=p-(t?0:g),C=+(b-y>Math.PI),w=+(S-x>Math.PI),T=Q(r,c,f),E=$(i,c,f),D=Q(r,c,p),O=$(i,c,p),k=Q(r,s,f),A=$(i,s,f),j=Q(r,s,p),M=$(i,s,p),N=_/(c-s),ee=`${T+(k-T)*N},${E+(A-E)*N}`,te=`${D+(j-D)*N},${O+(M-O)*N}`,ne=`${k+(T-k)*N},${A+(E-A)*N}`,re=`${j+(D-j)*N},${M+(O-M)*N}`,P=[];return n?P.push(`M${Z(r,i,c,f)}`):(P.push(`M${ee}`),P.push(`Q${T},${E},${Z(r,i,c,y)}`)),P.push(`A${c},${c},0,${C},1,${Z(r,i,c,b)}`),t?P.push(`A${v},${v},0,0,1,${Z(r,i,s,p)}`):(P.push(`Q${D},${O},${te}`),P.push(`L${re}`),P.push(`Q${j},${M},${Z(r,i,s,S)}`)),P.push(`A${s},${s},0,${w},0,${Z(r,i,s,x)}`),n?P.push(`A${v},${v},0,0,0,${Z(r,i,c,f)}`):P.push(`Q${k},${A},${ne}`),P.push(`Z`),P.join(``)}function Pe(e){let t=(e.startAngle+e.endAngle)/2,n=(e.outerRadius+e.innerRadius)/2;return{x:e.centerX+n*Math.sin(t),y:e.centerY-n*Math.cos(t)}}var Fe=2*Math.PI,Ie=-Math.PI/2,Le=Math.PI/2;function Re(e){return e===`semi`?{end:Le,start:Ie}:{end:Fe,start:0}}function ze(t,n){let r=n.variant??`pie`,i=n.padPixels??(r===`pie`?0:8),a=n.cornerRadius??(r===`pie`?0:8),o=l(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),s=l(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),c=l(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),d=[],f=null;function p(e){for(;c.children.length>d.length;)c.removeChild(c.lastChild);for(let t=0;t<d.length;t++){let n=d[t],r=e[t];if(!r?.label)continue;let{x:i,y:a}=Pe(n),o=c.children[t];o||(o=l(`text`,{class:`prism-pie-label`}),c.appendChild(o)),u(o,{"dominant-baseline":`middle`,fill:`var(--prism-pie-label-color, #fff)`,"font-family":`var(--prism-font-family, system-ui)`,"font-size":`var(--prism-pie-label-size, 12px)`,"text-anchor":`middle`,x:i,y:a}),o.textContent=r.label}}let m=le(t,{ariaLabel:n.ariaLabel,legend:n.legend,plugins:n.plugins,tooltip:n.tooltip},m=>{let{legend:h,svg:g,tooltip:_}=m;g.contains(o)||(g.appendChild(o),g.appendChild(s),g.appendChild(c));let{height:v,width:y}=m.dimensions.value,b=r===`semi`,x=y/2,S=b?v*.85:v/2,C=b?Math.min(x,S)-8:Math.min(y,v)/2-8,w=r===`pie`?0:Math.round(C*.55),T=n.innerRadius===void 0?w:n.innerRadius,E=Math.max(T+1,C),D=(0,e.isReactive)(n.data)?n.data.value:n.data,{end:O,start:k}=Re(r);for(d=Me(D,x,S,E,T,k,O,i,a,e=>R(e),!1),u(o,{cx:x,cy:S,r:T>0?T:0}),o.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);s.children.length>d.length;)s.removeChild(s.lastChild);for(;c.children.length>d.length;)c.removeChild(c.lastChild);let A=n.transition?.duration??400,j=B(n.transition?.easing);for(let e=0;e<d.length;e++){let t=d[e],r=s.children[e];r||(r=l(`path`,{class:`prism-pie-slice`}),s.appendChild(r)),r.setAttribute(`fill`,t.color),r.setAttribute(`stroke`,`none`),r.style.cursor=n.onClick||n.onHover?`pointer`:``}if(f!==null&&(cancelAnimationFrame(f),f=null),A>0){let e=null,t=n=>{e===null&&(e=n);let r=j(Math.min(1,(n-e)/A)),i=V(k,O,r);for(let e=0;e<d.length;e++){let t=d[e],n=s.children[e];if(n)if(i<=t.startAngle)u(n,{d:``});else{let e=Math.min(t.endAngle,i);u(n,{d:Ne({...t,endAngle:e})})}}r<1?f=requestAnimationFrame(t):(f=null,p(D))};f=requestAnimationFrame(t)}else{for(let e=0;e<d.length;e++){let t=d[e],n=s.children[e];n&&u(n,{d:Ne(t)})}p(D)}return h?.update(d.map(e=>({color:e.color,name:e.slice.label??``}))),_?.hide(),{onClick:e=>{if(!n.onClick)return;let t=g.getBoundingClientRect(),i=e.clientX-t.left,a=e.clientY-t.top,o=Be(d,i,a,r);o>=0&&n.onClick(d[o].slice,o)},onMouseLeave:()=>{n.onHover?.(null,null),_?.hide()},onMouseMove:e=>{let i=g.getBoundingClientRect(),a=e.clientX-i.left,o=e.clientY-i.top,s=Be(d,a,o,r);if(s>=0){let e=d[s];n.onHover?.(e.slice,s);let{x:r,y:a}=Pe(e),o=t.getBoundingClientRect();_?.show(r+(i.left-o.left),a+(i.top-o.top),{key:s,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else n.onHover?.(null,null),_?.hide()}}});return{get disposalSignal(){return m.disposalSignal},dispose(){f!==null&&(cancelAnimationFrame(f),f=null),m.dispose()},get disposed(){return m.disposed},el:m.el,[Symbol.dispose](){this.dispose()}}}function Be(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i],o=t-a.centerX,s=n-a.centerY,c=Math.sqrt(o*o+s*s);if(c<a.outerRadius&&c>=a.innerRadius){let e=Math.atan2(o,-s);if(r===`semi`){if(e>=a.startAngle-1e-9&&e<=a.endAngle+1e-9)return i}else{let t=e<0?e+Fe:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}function Ve(e,t,n){if(e.length===0)return[];let r=t/Math.max(1,e.length-1),i=Math.min(...e),a=Math.max(...e)-i||1;return e.map((e,t)=>({x:t*r,y:n-(e-i)/a*n}))}function He(e,t,n,r=`linear`){if(e.length===0)return``;let i=Ve(e,t,n);return G(i,i.map(e=>({x:e.x,y:n})),r??`linear`)}function Ue(e,t,n,r){if(e.length===0)return``;let i=Ve(e,t,n);return r===`monotone`?U(i):r===`step`?W(i):H(i)}function We(e,t,n,r,i,a,o){let s=t.length,c=Math.max(1,n/s-1),d=n/s,f=Math.min(0,...t),p=Math.max(...t)-f||1,m=a?.duration??0,h=B(a?.easing);for(;e.children.length>s;){let t=e.lastElementChild;t&&e.removeChild(t)}for(let n=0;n<s;n++){let a=Math.max(1,(t[n]-f)/p*r),s=r-a,g=e.children[n];if(g||(g=l(`rect`,{class:`prism-spark-bar`}),e.appendChild(g)),u(g,{fill:i,width:c,x:n*d}),m>0&&!g.hasAttribute(`data-init`)){g.setAttribute(`data-init`,`1`),u(g,{height:0,y:r});let e=null,t={h:0,y:r},n={h:a,y:s},i=r=>{if(o?.aborted)return;e===null&&(e=r);let a=h(Math.min(1,(r-e)/m));u(g,{height:V(t.h,n.h,a),y:V(t.y,n.y,a)}),a<1&&requestAnimationFrame(i)};requestAnimationFrame(i)}else g.setAttribute(`data-init`,`1`),u(g,{height:a,y:s})}}function Ge(e){return e.length>0&&e[0]!==null&&typeof e[0]==`object`}function Ke(e,t,n,r,i,a,o){let s=Math.min(i,n/2,r/2),c=a?s:0,l=a?s:0,u=o?s:0,d=o?s:0;return[`M${e+c},${t}`,`H${e+n-u}`,u?`Q${e+n},${t} ${e+n},${t+u}`:``,`V${t+r-d}`,d?`Q${e+n},${t+r} ${e+n-d},${t+r}`:``,`H${e+l}`,l?`Q${e},${t+r} ${e},${t+r-l}`:``,`V${t+c}`,c?`Q${e},${t} ${e+c},${t}`:``,`Z`].filter(Boolean).join(``)}function qe(e){return`var(--prism-color-${e%8+1})`}function Je(t,n){let r=n.variant??`line`,i=n.color??`var(--prism-color-1)`,a=n.curve??`linear`,o=n.strokeWidth??1.5,s=n.fillOpacity??.2,c=ae(t,{...n.ariaLabel?{ariaLabel:n.ariaLabel}:{ariaHidden:!0},margin:{bottom:0,left:0,right:0,top:0}}),{svg:d}=c;d.classList.add(`prism-sparkline`);let f=l(`g`,{class:`prism-spark-inner`});d.appendChild(f);let p;function m(){let{height:t,width:d}=c.dimensions.value,p=(0,e.isReactive)(n.data)?n.data.value:n.data;for(;f.firstChild;)f.removeChild(f.firstChild);if(p.length!==0){if(r===`stack`&&Ge(p)){let e=l(`g`,{class:`prism-spark-stack`});f.appendChild(e);let r=n.cornerRadius??4,i=p,a=i.reduce((e,t)=>e+Math.max(0,t.value),0);if(a>0){let o=(n.padPixels??0)/2,s=0;i.forEach((n,c)=>{let f=Math.round(s);s+=Math.max(0,n.value)/a*d;let p=c===i.length-1?d:Math.round(s),m=c===0,h=c===i.length-1,g=Ke(f+(m?0:o),0,Math.max(0,p-f-(m?0:o)-(h?0:o)),t,r,m,h),_=l(`path`,{class:`prism-spark-stack-segment`});u(_,{d:g,fill:n.color??qe(c)}),e.appendChild(_)})}}else if(r===`bar`){let e=l(`g`,{class:`prism-spark-bars`});f.appendChild(e),We(e,p,d,t,i,n.transition,g.signal)}else{if(r===`area`){let e=l(`path`,{class:`prism-spark-fill`});u(e,{d:He(p,d,t,a),fill:i,"fill-opacity":s,stroke:`none`}),f.appendChild(e)}let e=l(`path`,{class:`prism-spark-line`});u(e,{d:Ue(p,d,t,a),fill:`none`,stroke:i,"stroke-width":o}),f.appendChild(e)}Ge(p)||h(p)}}function h(e){if(p?.(),p=void 0,!n.onHover&&!n.onClick||e.length<=1)return;let{width:t}=c.dimensions.value;d.style.cursor=`crosshair`;let r=t/(e.length-1),i=t=>{let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onHover?.(o,e[o])},a=()=>n.onHover?.(null,null),o=t=>{if(!n.onClick)return;let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onClick(o,e[o])};d.addEventListener(`mousemove`,i),d.addEventListener(`mouseleave`,a),d.addEventListener(`click`,o),p=()=>{d.removeEventListener(`mousemove`,i),d.removeEventListener(`mouseleave`,a),d.removeEventListener(`click`,o)}}let g=new AbortController,_=(0,e.scope)(()=>{(0,e.effect)(()=>{m()},{scheduler:`microtask`})}),v=!1;return{get disposalSignal(){return g.signal},dispose(){v||(v=!0,g.abort(),p?.(),_.dispose(),c.dispose())},get disposed(){return v},el:d,[Symbol.dispose](){this.dispose()}}}exports.PrismDisposedError=r,exports.PrismError=n,exports.PrismRenderError=i,exports.animate=Y,exports.bandScale=be,exports.createAreaChart=ye,exports.createBarChart=De,exports.createLineChart=je,exports.createPieChart=ze,exports.createSparkline=Je,exports.linearScale=x,exports.resetTheme=ge,exports.seriesColor=R,exports.setTheme=he,exports.timeScale=j;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/ripple"),t=require("@vielzeug/orbit");var n=class e extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}static is(t){return t instanceof e}},r=class extends n{},i=class extends n{},a=`http://www.w3.org/2000/svg`;function o(e,t){let n=document.createElementNS(a,e);return t&&s(n,t),n}function s(e,t){for(let[n,r]of Object.entries(t)){if(r===void 0){e.removeAttribute(n);continue}typeof r==`number`&&!Number.isFinite(r)&&`${n}${e.tagName}${r}`,e.setAttribute(n,String(r))}}function c(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function l(e,t){let n=o(`text`,t);return n.textContent=e,n}function u(e){return typeof e.bandwidth==`function`}function d(e,t){return u(e)?e.map(t)+e.bandwidth()/2:e.map(t)}var f=e=>e instanceof Date?e.toLocaleDateString(void 0,{month:`short`,year:`numeric`}):String(e);function p(e,t,n){let r=e.position??n,i=r===`bottom`||r===`top`?Math.max(2,Math.floor(t/80)):Math.max(2,Math.floor(t/50));return e.tickCount??i}function m(e,t,n,r,i=`bottom`){c(e);let a=n.position??i,u=a===`bottom`||a===`top`,m=a===`top`||a===`left`,h=m?-1:1,g=o(`line`,{"aria-hidden":`true`,class:`prism-axis-line`,x1:0,x2:u?r:0,y1:0,y2:u?0:r});e.appendChild(g);let _=t.ticks(p(n,r,i)),v=n.tickFormat??f;for(let n of _){let r=d(t,n),i=o(`line`,{"aria-hidden":`true`,class:`prism-axis-tick`,x1:u?r:0,x2:u?r:6*h,y1:u?0:r,y2:u?6*h:r});e.appendChild(i);let a=l(v(n),{"aria-hidden":`true`,class:`prism-axis-label`,"dominant-baseline":u?m?`auto`:`hanging`:`middle`,"text-anchor":u?`middle`:m?`end`:`start`,x:u?r:6*h*1.5,y:u?6*h*1.5:r});e.appendChild(a)}if(n.label){let t=l(n.label,{class:`prism-axis-title`,"dominant-baseline":`middle`,"text-anchor":`middle`});u?s(t,{x:r/2,y:6*h*3.5}):s(t,{transform:`translate(${6*h*4}, ${r/2}) rotate(-90)`}),e.appendChild(t)}}function h(e,t,n,r,i,a=10){c(e);let s=n!==!0&&n.color||void 0,l=n!==!0&&n.dash||void 0,u=t.ticks(a);for(let n of u){let a=d(t,n),c={class:`prism-grid-line`,stroke:s??`var(--prism-grid-color)`,"stroke-dasharray":l,"stroke-opacity":`var(--prism-grid-opacity)`};i===`vertical`?Object.assign(c,{x1:a,x2:a,y1:0,y2:r}):Object.assign(c,{x1:0,x2:r,y1:a,y2:a}),e.appendChild(o(`line`,c))}}function g(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function _(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return[0,1];if(e>t&&([e,t]=[t,e]),e===t)return[e-1,t+1];let r=g(g(t-e,!1)/Math.max(1,n-1),!0);return[Math.floor(e/r)*r,Math.ceil(t/r)*r]}function v(e){let t=()=>e.nice===!1?e.domain:_(e.domain[0],e.domain[1],10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();return o===a?r:r+(e-a)/(o-a)*(i-r)},map(r){let[i,a]=t(),[o,s]=n();if(a===i)return o;let c=(r-i)/(a-i);return e.clamp&&(c=Math.max(0,Math.min(1,c))),o+c*(s-o)},get range(){return n()},ticks(e=10){if(e<=0)return[];let[n,r]=t();if(n===r||e===1)return[n];let i=Math.min(n,r),a=Math.max(n,r),o=g(g(a-i,!1)/(e-1),!0),s=Math.ceil(i/o)*o,c=Math.floor(a/o)*o,l=[];for(let e=s;e<=c+o*.5;e+=o)l.push(Math.round(e*0xe8d4a51000)/0xe8d4a51000);return l}}}var y=1e3,b=60*y,x=60*b,S=24*x,C=30*S,w=365*S,T=[y,5*y,15*y,30*y,b,5*b,15*b,30*b,x,3*x,6*x,12*x,S,7*S,C,3*C,6*C,w];function E(e,t){let n=Math.abs(e)/Math.max(1,t);for(let e of T)if(e>=n)return e;return w}function D(e,t){let[n,r]=e;n.getTime()>r.getTime()&&([n,r]=[r,n]);let i=E(r.getTime()-n.getTime(),t);return[new Date(Math.floor(n.getTime()/i)*i),new Date(Math.ceil(r.getTime()/i)*i)]}function O(e){let t=()=>e.nice===!1?e.domain:D(e.domain,10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();if(o===a)return r;let s=(e-a)/(o-a);return new Date(r.getTime()+s*(i.getTime()-r.getTime()))},map(e){let[r,i]=t(),[a,o]=n(),s=i.getTime()-r.getTime();return s===0?a:a+(e.getTime()-r.getTime())/s*(o-a)},get range(){return n()},ticks(e=10){let[n,r]=t(),i=E(r.getTime()-n.getTime(),e),a=Math.ceil(n.getTime()/i)*i,o=[];for(let e=a;e<=r.getTime();e+=i)o.push(new Date(e));return o}}}function k(e,t){if(e.length===0||e.some(e=>e==null)||e.some(e=>typeof e==`number`&&!Number.isFinite(e)))return v({domain:[0,1],range:[0,t]});if(e[0]instanceof Date){let n=e,r=Math.min(...n.map(Number)),i=Math.max(...n.map(Number));return O({domain:[new Date(r),new Date(r===i?i+1:i)],range:[0,t]})}let n=e,r=Math.min(...n),i=Math.max(...n);return v({domain:[r,r===i?i+1:i],nice:!1,range:[0,t]})}function A(e,t,n=!0){if(e.length===0||e.some(e=>e==null)||e.some(e=>!Number.isFinite(e)))return v({domain:[0,1],range:[t,0]});let r=Math.min(...e),i=n?Math.min(0,r):r,a=Math.max(...e);return v({domain:[i,i===a?a+1:a],range:[t,0]})}function j(e){return e===!0?`bottom`:e.position??`bottom`}function M(e,t){let n=j(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let i=()=>{r.remove()};return{dispose:i,el:r,[Symbol.dispose]:i,update(e){r.innerHTML=``;for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}function N(e,n){getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=document.createElement(`div`);r.className=`prism-tooltip`,r.style.position=`absolute`,r.style.pointerEvents=`none`,r.style.top=`0`,r.style.left=`0`,r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),e.appendChild(r);let i=n!==!0&&n?.offset||8,a=n===!0?void 0:n?.render,o=n===!0?void 0:n?.sanitize,s=()=>{r.remove()};return{dispose:s,el:r,hide(){r.style.opacity=`0`,r.textContent=``},show(n,s,c,l){if(!e.isConnected)return;if(a){let e=a(c,l);o?r.innerHTML=o(e):r.textContent=e}else r.textContent=`${l.name}: ${c.value}`;let{x:u,y:d}=(0,t.computePosition)({getBoundingClientRect:()=>{let t=e.getBoundingClientRect();return{bottom:t.top+s,height:0,left:t.left+n,right:t.left+n,top:t.top+s,width:0,x:t.left+n,y:t.top+s}}},r,{middleware:[(0,t.offset)(i),(0,t.flip)(),(0,t.shift)({padding:8})],placement:`top`}),f=e.getBoundingClientRect();r.style.left=`${u-f.left}px`,r.style.top=`${d-f.top}px`,r.style.opacity=`1`},[Symbol.dispose]:s}}var ee={bottom:40,left:50,right:20,top:20};function te(e){return{...ee,...e}}function P(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}function ne(e,t){let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}function F(t,n){if(!(typeof t==`object`&&t&&t.nodeType===1&&typeof t.appendChild==`function`&&typeof t.getBoundingClientRect==`function`)){let e=t;throw new i(`Invalid chart configuration: \`container\` must be a DOM Element, received ${e===null?`null`:typeof e==`object`?e.constructor?.name??`object`:typeof e}.`)}let r=te(n.margin),a=o(`svg`,{...n.ariaHidden?{"aria-hidden":`true`}:{...n.ariaLabel?{"aria-label":n.ariaLabel}:{},role:`img`},class:`prism-chart`,style:`display:block;width:100%;height:100%`}),c=o(`g`,{class:`prism-chart-area`,transform:`translate(${r.left},${r.top})`});a.appendChild(c);let l=t.getBoundingClientRect();l.width===0||l.height;let u=typeof getComputedStyle<`u`?getComputedStyle(t):null;u&&u.position;let d=(0,e.signal)({height:l.height||300,margin:r,width:l.width||600}),f=ne(t,(e,t)=>{d.value={height:t,margin:r,width:e},s(a,{height:t,viewBox:`0 0 ${e} ${t}`,width:e})}),p=l.width||600,m=l.height||300;return s(a,{height:m,viewBox:`0 0 ${p} ${m}`,width:p}),t.appendChild(a),{chartArea:c,dimensions:d,dispose(){f(),a.remove()},svg:a}}function I(e,t,n,r){c(e.series),c(e.grid),c(e.xAxis),c(e.yAxis),t?.update([]),n?.hide(),r?.hide()}function re(t,n,r,i){let a=F(t,{ariaLabel:n.ariaLabel,margin:n.margin}),o=n.tooltip?N(t,n.tooltip):null,s=n.legend?M(t,n.legend):null,c=new AbortController,l=r(a,o,s,c.signal),u=!1,d=ie(a.svg),f=(0,e.createScope)();f.run(()=>{(0,e.effect)(()=>{u||d.attach(i(l))},{scheduler:`microtask`})});let p=[];if(n.plugins){let e={container:t,dimensions:a.dimensions,disposalSignal:c.signal,svg:a.svg};for(let t of n.plugins)try{t.install(e),p.push(t)}catch{}}return{get disposalSignal(){return c.signal},dispose(){if(!u){u=!0,c.abort(),d.detach();for(let e of p)try{e.dispose()}catch{}o?.dispose(),s?.dispose(),f.dispose(),a.dispose()}},get disposed(){return u},el:a.svg,[Symbol.dispose](){this.dispose()}}}function ie(e){let t=null;return{attach(n){t&&=(t.onMouseMove&&e.removeEventListener(`mousemove`,t.onMouseMove),t.onMouseLeave&&e.removeEventListener(`mouseleave`,t.onMouseLeave),t.onClick&&e.removeEventListener(`click`,t.onClick),null),n&&(t=n,n.onMouseMove&&e.addEventListener(`mousemove`,n.onMouseMove),n.onMouseLeave&&e.addEventListener(`mouseleave`,n.onMouseLeave),n.onClick&&e.addEventListener(`click`,n.onClick))},detach(){this.attach(void 0)}}}function L(e,t,n){return re(e,t,(t,n,r,i)=>{let a={grid:o(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:o(`g`,{class:`prism-series`}),xAxis:o(`g`,{class:`prism-x-axis`}),yAxis:o(`g`,{class:`prism-y-axis`})};return t.chartArea.appendChild(a.grid),t.chartArea.appendChild(a.xAxis),t.chartArea.appendChild(a.yAxis),t.chartArea.appendChild(a.series),{chartArea:t.chartArea,container:e,dimensions:t.dimensions,disposalSignal:i,groups:a,legend:r,svg:t.svg,tooltip:n}},n)}function ae(e,t,n){return re(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n)}function oe(e,t){let n=t===!0||t?.vertical!==!1,r=t!==!0&&t?.horizontal===!0,i=t===!0||t?.snap!==!1,a=o(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),c=n?o(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,l=r?o(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;c&&a.appendChild(c),l&&a.appendChild(l),e.appendChild(a);let u=o(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return e.appendChild(u),{hide(){a.style.display=`none`,u.textContent=``},show(e,t,n,r,i){a.style.display=``,c&&s(c,{x1:e,x2:e,y1:0,y2:r}),l&&s(l,{x1:0,x2:n,y1:t,y2:t}),i!==void 0&&(u.textContent=i)},snap:i}}function R(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}function se(e,t){if(e.length===0)return-1;let n=1/0,r=0;for(let i=0;i<e.length;i++){let a=Math.abs(e[i].x-t);a<n&&(n=a,r=i)}return r}function ce(e,t,n){let r=0,i=1/0;for(let a=0;a<e.length;a++){let o=e[a]?.[t];if(o){let e=Math.abs(o.y-n);e<i&&(i=e,r=a)}}return r}function le(e){return{onClick:t=>{if(!e.onClick)return;let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=R(e.svg,t,r.margin.left,r.margin.top),a=P(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=se(n[0],i.x);if(o<0)return;let s=ce(n,o,i.y),c=e.getData()[s]?.[o],l=e.getSeriesList()[s];c&&l&&e.onClick({datum:c,originalEvent:t,series:l})},onMouseLeave:()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null)},onMouseMove:t=>{let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=R(e.svg,t,r.margin.left,r.margin.top),a=P(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height){e.crosshair?.hide(),e.tooltip?.hide();return}let o=n[0]??[],s=se(o,i.x);if(s<0)return;let c=o[s],l=e.crosshair?.snap===!1?i.x:c.x,u=e.crosshair?.snap===!1?i.y:c.y,d=ce(n,s,i.y),f=n[d]?.[s],p=e.getData()[d]?.[s],m=e.getSeriesList()[d];e.crosshair?.show(l,u,a.width,a.height,m&&p?`${m.name}: ${p.value}`:void 0),f&&p&&m&&(e.tooltip?.show(f.x+r.margin.left,f.y+r.margin.top,p,m),e.onHover?.({datum:p,originalEvent:t,series:m}))}}}var z=8;function ue(e){let t=document.documentElement;if(e.colors)for(let n=0;n<z;n++){let r=e.colors[n];r?t.style.setProperty(`--prism-color-${n+1}`,r):t.style.removeProperty(`--prism-color-${n+1}`)}e.fontFamily&&t.style.setProperty(`--prism-font-family`,e.fontFamily),e.gridColor&&t.style.setProperty(`--prism-grid-color`,e.gridColor),e.gridOpacity!==void 0&&t.style.setProperty(`--prism-grid-opacity`,String(e.gridOpacity))}function de(){let e=document.documentElement;for(let t=1;t<=z;t++)e.style.removeProperty(`--prism-color-${t}`);e.style.removeProperty(`--prism-font-family`),e.style.removeProperty(`--prism-grid-color`),e.style.removeProperty(`--prism-grid-opacity`)}function B(e,t){return t??`var(--prism-color-${e%z+1})`}var V={"ease-in":e=>e*e,"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"ease-out":e=>1-(1-e)*(1-e),linear:e=>e};function H(e){return typeof e==`function`?e:e!==void 0&&Object.hasOwn(V,e)?V[e]:V[`ease-out`]}function U(e,t,n){return e+(t-e)*n}function W(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++)t+=`L${e[n].x},${e[n].y}`;return t}function G(e){if(e.length<3)return W(e);let t=e.length,n=[];for(let r=0;r<t;r++)r===0?n.push({x:e[1].x-e[0].x,y:e[1].y-e[0].y}):r===t-1?n.push({x:e[t-1].x-e[t-2].x,y:e[t-1].y-e[t-2].y}):n.push({x:(e[r+1].x-e[r-1].x)/2,y:(e[r+1].y-e[r-1].y)/2});let r=`M${e[0].x},${e[0].y}`;for(let i=0;i<t-1;i++){let t=e[i],a=e[i+1],o=n[i],s=n[i+1],c=(a.x-t.x)/3;r+=`C${t.x+c},${t.y+o.y/3},${a.x-c},${a.y-s.y/3},${a.x},${a.y}`}return r}function K(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++){let r=(e[n-1].x+e[n].x)/2;t+=`H${r}V${e[n].y}H${e[n].x}`}return t}function q(e,t,n=`linear`){if(e.length===0)return``;let r=n===`monotone`?G(e):n===`step`?K(e):W(e),i=[...t].reverse();if(i.length>0){r+=`L${i[0].x},${i[0].y}`;for(let e=1;e<i.length;e++)r+=`L${i[e].x},${i[e].y}`}return r+=`Z`,r}var J=new WeakMap,Y=new WeakMap;function fe(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function pe(e,t,n,r){let i=r.transition?.duration??(r.transition?300:0),a=H(r.transition?.easing),c=e.querySelector(`.prism-area-fill`);c||(c=o(`path`,{class:`prism-area-fill`}),e.appendChild(c)),s(c,{fill:r.color,"fill-opacity":r.fillOpacity,stroke:`none`});let l=null;if(r.showLine?(l=e.querySelector(`.prism-area-line`),l||(l=o(`path`,{class:`prism-area-line`,fill:`none`}),e.appendChild(l)),s(l,{stroke:r.color,"stroke-width":2})):e.querySelector(`.prism-area-line`)?.remove(),i===0){let e=t.map(e=>({x:e.x,y:n}));s(c,{d:q(t,e,r.curve)}),l&&s(l,{d:fe(t,r.curve)});return}if(J.get(e)?.(),!c.hasAttribute(`d`)){let i=t.map(e=>({x:e.x,y:n}));s(c,{d:q(t,i,r.curve)}),l&&s(l,{d:fe(t,r.curve)}),Y.set(e,t);return}let u=Y.get(e)??t,d=t.map((e,n)=>u[n]??u[u.length-1]??t[n]),f=null;function p(o){if(r.disposalSignal?.aborted){J.delete(e);return}f===null&&(f=o);let u=Math.min(1,(o-f)/i),m=a(u),h=t.map((e,t)=>({x:U(d[t].x,e.x,m),y:U(d[t].y,e.y,m)})),g=h.map(e=>({x:e.x,y:n}));if(s(c,{d:q(h,g,r.curve)}),l&&s(l,{d:fe(h,r.curve)}),u<1){let t=requestAnimationFrame(p);J.set(e,()=>cancelAnimationFrame(t))}else J.delete(e),Y.set(e,t)}Y.set(e,d);let m=requestAnimationFrame(p);J.set(e,()=>cancelAnimationFrame(m))}function me(e,t,n){return e.some(e=>e.key==null)||e.some(e=>typeof e.key==`string`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function he(t,n){let r=null;return L(t,n,t=>{let{groups:i,legend:a,tooltip:s}=t,c=t.dimensions.value,l=P(c.width,c.height,c.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),g=d.flat().map(e=>e.value);if(f.length===0){I(i,a,s,r);return}n.crosshair&&!r&&(r=oe(t.chartArea,n.crosshair));let _=k(f,l.width),v=A(g,l.height),y=v.map(0);for(n.yAxis?.grid&&h(i.grid,v,n.yAxis.grid,l.width,`horizontal`,p(n.yAxis,l.height,`left`)),n.xAxis?.grid&&h(i.grid,_,n.xAxis.grid,l.height,`vertical`,p(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),m(i.xAxis,_,n.xAxis,l.width,`bottom`)),n.yAxis&&m(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let b=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=o(`g`,{class:`prism-area-series`}),i.series.appendChild(a));let s=me(d[e],_,v);b.push(s),pe(a,s,y,{color:B(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,fillOpacity:r.fillOpacity??.3,showLine:r.showLine!==!1,transition:n.transition})}return a?.update(u.map((e,t)=>({color:B(t,e.color),name:e.name}))),s?.hide(),le({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>b,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:s})})}function ge(e){let t=()=>e.domain,n=()=>e.range,r=()=>{let r=t().length;if(r===0)return 0;let[i,a]=n(),o=e.padding??.1;return(a-i)/(r+(r-1)*o+(e.paddingOuter??o)*2)};return{bandwidth:r,get domain(){return t()},gap(){let t=e.padding??.1;return r()*t},map(i){let a=t().indexOf(i);if(a===-1)return`${i}`,0;let[o]=n(),s=r(),c=e.padding??.1;return o+(e.paddingOuter??c)*s+a*(s+s*c)},get range(){return n()},ticks(e){let n=t();if(e===void 0||e>=n.length)return[...n];if(e<=0)return[];let r=Math.ceil(n.length/e);return n.filter((e,t)=>t%r===0)}}}function _e(e,t,n){for(let r=0;r<t.length;r++){let i=n.bandCenter(t[r])-n.bandwidth/2;if(e>=i&&e<i+n.bandwidth)return r}return-1}function ve(e,t,n,r,i){if(r.stacked)if(r.horizontal){for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)>=e.x)return n;return i-1}else{for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)<=e.y)return n;return i-1}{let a=r.bandwidth/i,o=r.bandCenter(n[t])-r.bandwidth/2,s=r.horizontal?e.y-o:e.x-o,c=Math.floor(s/a);return Math.max(0,Math.min(i-1,c))}}function ye(e,t,n,r,i){let a=i-1,o=r.stacked?r.stackedTops[a]?.[t]??0:Math.max(...Array.from({length:i},(e,r)=>n[r]?.[t]?.value??0)),s=r.valueScale.map(o);return r.horizontal?e.x>s:e.y<s}function be(e,t,n,r){let i=t?.duration??300,a=H(t?.easing),o=Math.max(0,t?.stagger??0);if(i===0||e.length===0){for(let t of e)for(let[e,{to:n}]of Object.entries(t.attrs))t.el.setAttribute(e,String(n));return n?.(),()=>{}}let s=null,c=!1,l=Math.max(i,i+o*(e.length-1));function u(t){if(c||r?.aborted)return;s===null&&(s=t);let d=t-s;for(let t=0;t<e.length;t++){let n=e[t],r=o*t,s=Math.max(0,d-r),c=Math.min(1,s/i),l=a(c);for(let[e,{from:t,to:r}]of Object.entries(n.attrs))n.el.setAttribute(e,String(U(t,r,l)))}d<l?requestAnimationFrame(u):n?.()}return requestAnimationFrame(u),()=>{c=!0}}var xe=new WeakMap;function Se(e,t,n,r,i,a){for(;e.children.length>t.length;){let t=e.lastElementChild;t&&e.removeChild(t)}let c=n.bandwidth(),l=a.stacked?c:c/a.seriesCount,u=a.stacked?0:l*a.seriesIndex,d=a.horizontal??!1,f=[],p=[];for(let c=0;c<t.length;c++){let m=t[c],h=n.map(m.key)+u,g=a.baselineYs?a.baselineYs[c]:i,_=r.map(m.y),v=e.children[c],y=!v;if(v||(v=o(`rect`,{class:`prism-bar`}),e.appendChild(v)),d){let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);s(v,{fill:a.color,height:Math.max(0,l-1),rx:a.borderRadius,ry:a.borderRadius,y:h}),a.transition?y?(s(v,{width:0,x:g}),f.push({attrs:{width:{from:0,to:e},x:{from:g,to:t}},el:v})):p.push({attrs:{width:{from:Number(v.getAttribute(`width`)??e),to:e},x:{from:Number(v.getAttribute(`x`)??t),to:t}},el:v}):s(v,{width:e,x:t})}else{let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);s(v,{fill:a.color,rx:a.borderRadius,ry:a.borderRadius,width:Math.max(0,l-1),x:h}),a.transition?y?(s(v,{height:0,y:g}),f.push({attrs:{height:{from:0,to:e},y:{from:g,to:t}},el:v})):p.push({attrs:{height:{from:Number(v.getAttribute(`height`)??e),to:e},y:{from:Number(v.getAttribute(`y`)??t),to:t}},el:v}):s(v,{height:e,y:t})}}if(a.transition){xe.get(e)?.();let t=[];f.length>0&&t.push(be(f,a.transition,void 0,a.disposalSignal)),p.length>0&&t.push(be(p,{...a.transition,stagger:0},void 0,a.disposalSignal)),xe.set(e,()=>{for(let e of t)e()})}}function Ce(e){return{horizontal:e===`grouped-horizontal`||e===`stacked-horizontal`,stacked:e===`stacked`||e===`stacked-horizontal`}}function we(t,n){return L(t,n,t=>{let{groups:r,legend:i,tooltip:a}=t,s=t.dimensions.value,c=P(s.width,s.height,s.margin),l=(0,e.isReactive)(n.series)?n.series.value:n.series,u=l.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),d=[...new Set(u.flat().map(e=>String(e.key)))];if(d.length===0){I(r,i,a);return}let{horizontal:f,stacked:g}=Ce(n.variant??`grouped`),_,y;if(g){u.some(e=>e.some(e=>e.value<0));let e=d.map(e=>u.reduce((t,n)=>{let r=n.find(t=>String(t.key)===e);return t+(r?Math.max(0,r.value):0)},0));_=Math.max(...e),y=0}else{let e=u.flat().map(e=>e.value);_=Math.max(...e),y=Math.min(0,...e)}let b=ge(f?{domain:d,range:[0,c.height]}:{domain:d,range:[0,c.width]}),x=v(f?{domain:[y,_],range:[0,c.width]}:{domain:[y,_],range:[c.height,0]}),S=[],C=Object.create(null);for(let e of d)C[e]=0;let w={bandCenter:e=>b.map(e)+b.bandwidth()/2,bandwidth:b.bandwidth(),baselinePx:x.map(0),horizontal:f,stacked:g,stackedTops:S,valueScale:x};for(f?(n.xAxis?.grid&&h(r.grid,x,n.xAxis.grid,c.height,`vertical`,p(n.xAxis,c.width,`bottom`)),n.yAxis&&m(r.yAxis,b,n.yAxis,c.height,`left`),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${c.height})`),m(r.xAxis,x,n.xAxis,c.width,`bottom`))):(n.yAxis?.grid&&h(r.grid,x,n.yAxis.grid,c.width,`horizontal`,p(n.yAxis,c.height,`left`)),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${c.height})`),m(r.xAxis,b,n.xAxis,c.width,`bottom`)),n.yAxis&&m(r.yAxis,x,n.yAxis,c.height,`left`));r.series.children.length>l.length;){let e=r.series.lastElementChild;e&&r.series.removeChild(e)}for(let e=0;e<l.length;e++){let i=l[e],a=r.series.children[e];a||(a=o(`g`,{class:`prism-bar-series`}),r.series.appendChild(a));let s=u[e].map(e=>{let t=String(e.key);if(g){let n=C[t]??0,r=n+Math.max(0,e.value);return C[t]=r,{base:n,key:t,y:r}}return{base:0,key:t,y:e.value}});S[e]=s.map(e=>e.y);let c=g?s.map(e=>x.map(e.base)):void 0;Se(a,s,b,x,w.baselinePx,{baselineYs:c,borderRadius:i.borderRadius??0,color:B(e,i.color),disposalSignal:t.disposalSignal,horizontal:f,seriesCount:l.length,seriesIndex:e,stacked:g,transition:n.transition})}return i?.update(l.map((e,t)=>({color:B(t,e.color),name:e.name}))),a?.hide(),{onClick:e=>{if(!n.onClick)return;let r=t.dimensions.value,i=R(t.svg,e,r.margin.left,r.margin.top),a=P(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=_e(f?i.y:i.x,d,w);if(o===-1)return;let s=ve(i,o,d,w,l.length),c=u[s]?.[o];c&&n.onClick({datum:c,originalEvent:e,series:l[s]})},onMouseLeave:()=>{a?.hide(),n.onHover?.(null)},onMouseMove:e=>{let r=t.dimensions.value,i=R(t.svg,e,r.margin.left,r.margin.top),o=P(r.width,r.height,r.margin);if(i.x<0||i.x>o.width||i.y<0||i.y>o.height){a?.hide();return}let s=_e(f?i.y:i.x,d,w);if(s===-1){a?.hide();return}if(ye(i,s,u,w,l.length)){a?.hide();return}let c=ve(i,s,d,w,l.length),p=u[c]?.[s];if(p){let t=w.bandCenter(d[s]),i=g?S[c]?.[s]??p.value:p.value,o=x.map(i),u=f?o+r.margin.left:t+r.margin.left,m=f?t+r.margin.top:o+r.margin.top;a?.show(u,m,p,l[c]),n.onHover?.({datum:p,originalEvent:e,series:l[c]})}}}})}var X=new WeakMap;function Te(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function Ee(e,t,n){let r=n.transition?.duration??(n.transition?300:0),i=H(n.transition?.easing),a=e.querySelector(`.prism-line-path`);a||(a=o(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(a)),s(a,{stroke:n.color,"stroke-width":n.strokeWidth});let c=e.querySelector(`.prism-line-dots`);if(n.showPoints?c||(c=o(`g`,{class:`prism-line-dots`}),e.appendChild(c)):c&&=(c.remove(),null),r===0){if(s(a,{d:Te(t,n.curve)}),c){for(;c.children.length>t.length;)c.removeChild(c.lastChild);for(let e=0;e<t.length;e++){let r=c.children[e];r||(r=o(`circle`,{class:`prism-line-dot`}),c.appendChild(r)),s(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius})}}return}X.get(e)?.();let l=!!a.getAttribute(`d`),u=[],d=null;if(c){let e=c.children.length;for(let t=0;t<e;t++){let e=c.children[t],n={x:Number(e.getAttribute(`cx`)),y:Number(e.getAttribute(`cy`))};u.push(n),d=n}for(;c.children.length>t.length;)c.removeChild(c.lastChild);for(let e=c.children.length;e<t.length;e++){let r=o(`circle`,{class:`prism-line-dot`});s(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius}),c.appendChild(r)}}for(let e=u.length;e<t.length;e++)u.push(d??t[e]);let f=null;function p(o){if(n.disposalSignal?.aborted){X.delete(e);return}f===null&&(f=o);let l=Math.min(1,(o-f)/r),d=i(l),m=t.map((e,t)=>{let n=u[t]??e;return{x:U(n.x,e.x,d),y:U(n.y,e.y,d)}});if(s(a,{d:Te(m,n.curve)}),c)for(let e=0;e<t.length;e++){let t=c.children[e];t&&s(t,{cx:m[e].x,cy:m[e].y})}if(l<1){let t=requestAnimationFrame(p);X.set(e,()=>cancelAnimationFrame(t))}else X.delete(e)}if(!l)s(a,{d:Te(t,n.curve)});else{let t=requestAnimationFrame(p);X.set(e,()=>cancelAnimationFrame(t))}}function De(e,t,n){return e.some(e=>e.key==null)||e.some(e=>typeof e.key==`string`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function Oe(t,n){let r=null;return L(t,n,t=>{let{groups:i,legend:a,tooltip:s}=t,c=t.dimensions.value,l=P(c.width,c.height,c.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),g=d.flat().map(e=>e.value);if(f.length===0){I(i,a,s,r);return}n.crosshair&&!r&&(r=oe(t.chartArea,n.crosshair));let _=k(f,l.width),v=A(g,l.height);for(n.yAxis?.grid&&h(i.grid,v,n.yAxis.grid,l.width,`horizontal`,p(n.yAxis,l.height,`left`)),n.xAxis?.grid&&h(i.grid,_,n.xAxis.grid,l.height,`vertical`,p(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),m(i.xAxis,_,n.xAxis,l.width,`bottom`)),n.yAxis&&m(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let y=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=o(`g`,{class:`prism-line-series`}),i.series.appendChild(a));let s=De(d[e],_,v);y.push(s),Ee(a,s,{color:B(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,pointRadius:r.pointRadius??3,showPoints:r.showPoints??!1,strokeWidth:r.strokeWidth??2,transition:n.transition})}return a?.update(u.map((e,t)=>({color:B(t,e.color),name:e.name}))),s?.hide(),le({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>y,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:s})})}function ke(e,t,n,r,i,a,o,s,c,l,u=!1){let d=e.reduce((e,t)=>e+Math.max(0,t.value),0);if(d===0)return[];let f=o-a,p=r>0?Math.asin(Math.min(1,s/2/r)):0,m=a,h=e.length;return e.map((e,a)=>{let o=Math.max(0,e.value)/d*f,s=m,g=m+o;m+=o;let _=Math.min(p,o/2);return{capEnd:u&&a===h-1,capStart:u&&a===0,centerX:t,centerY:n,color:e.color??l(a),cornerRadius:c,endAngle:g,index:a,innerRadius:i,outerRadius:r,padAngle:_,slice:e,startAngle:s}})}function Z(e,t,n,r){return`${e+n*Math.sin(r)},${t-n*Math.cos(r)}`}function Q(e,t,n){return e+t*Math.sin(n)}function $(e,t,n){return e-t*Math.cos(n)}function Ae(e){let{capEnd:t,capStart:n,centerX:r,centerY:i,cornerRadius:a,endAngle:o,innerRadius:s,outerRadius:c,padAngle:l,startAngle:u}=e,d=o-u;if(d<=0)return``;if(d>=2*Math.PI-1e-6){let e=u+Math.PI;return s<=0?`M${Z(r,i,c,u)}A${c},${c},0,1,1,${Z(r,i,c,e)}A${c},${c},0,1,1,${Z(r,i,c,u)}Z`:[`M${Z(r,i,c,u)}`,`A${c},${c},0,1,1,${Z(r,i,c,e)}`,`A${c},${c},0,1,1,${Z(r,i,c,u)}`,`M${Z(r,i,s,u)}`,`A${s},${s},0,1,0,${Z(r,i,s,e)}`,`A${s},${s},0,1,0,${Z(r,i,s,u)}`,`Z`].join(``)}let f=n?u:u+l,p=t?o:o-l;if(p<=f)return``;let m=p-f;if(a<=0){let e=+(m>Math.PI);return s<=0?`M${r},${i}L${Z(r,i,c,f)}A${c},${c},0,${e},1,${Z(r,i,c,p)}Z`:[`M${Z(r,i,c,f)}`,`A${c},${c},0,${e},1,${Z(r,i,c,p)}`,`L${Z(r,i,s,p)}`,`A${s},${s},0,${e},0,${Z(r,i,s,f)}`,`Z`].join(``)}let h=Math.min(a/c,m/2),g=Math.min(a/s,m/2),_=Math.min(a,(c-s)/2),v=(c-s)/2,y=f+(n?0:h),b=p-(t?0:h),x=f+(n?0:g),S=p-(t?0:g),C=+(b-y>Math.PI),w=+(S-x>Math.PI),T=Q(r,c,f),E=$(i,c,f),D=Q(r,c,p),O=$(i,c,p),k=Q(r,s,f),A=$(i,s,f),j=Q(r,s,p),M=$(i,s,p),N=_/(c-s),ee=`${T+(k-T)*N},${E+(A-E)*N}`,te=`${D+(j-D)*N},${O+(M-O)*N}`,P=`${k+(T-k)*N},${A+(E-A)*N}`,ne=`${j+(D-j)*N},${M+(O-M)*N}`,F=[];return n?F.push(`M${Z(r,i,c,f)}`):(F.push(`M${ee}`),F.push(`Q${T},${E},${Z(r,i,c,y)}`)),F.push(`A${c},${c},0,${C},1,${Z(r,i,c,b)}`),t?F.push(`A${v},${v},0,0,1,${Z(r,i,s,p)}`):(F.push(`Q${D},${O},${te}`),F.push(`L${ne}`),F.push(`Q${j},${M},${Z(r,i,s,S)}`)),F.push(`A${s},${s},0,${w},0,${Z(r,i,s,x)}`),n?F.push(`A${v},${v},0,0,0,${Z(r,i,c,f)}`):F.push(`Q${k},${A},${P}`),F.push(`Z`),F.join(``)}function je(e){let t=(e.startAngle+e.endAngle)/2,n=(e.outerRadius+e.innerRadius)/2;return{x:e.centerX+n*Math.sin(t),y:e.centerY-n*Math.cos(t)}}var Me=2*Math.PI,Ne=-Math.PI/2,Pe=Math.PI/2;function Fe(e){return e===`semi`?{end:Pe,start:Ne}:{end:Me,start:0}}function Ie(t,n){let r=n.variant??`pie`,i=n.padPixels??(r===`pie`?0:8),a=n.cornerRadius??(r===`pie`?0:8),c=o(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),l=o(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),u=o(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),d=[],f=null;function p(e){for(;u.children.length>d.length;)u.removeChild(u.lastChild);for(let t=0;t<d.length;t++){let n=d[t],r=e[t];if(!r?.label)continue;let{x:i,y:a}=je(n),c=u.children[t];c||(c=o(`text`,{class:`prism-pie-label`}),u.appendChild(c)),s(c,{"dominant-baseline":`middle`,fill:`var(--prism-pie-label-color, #fff)`,"font-family":`var(--prism-font-family, system-ui)`,"font-size":`var(--prism-pie-label-size, 12px)`,"text-anchor":`middle`,x:i,y:a}),c.textContent=r.label}}let m=ae(t,{ariaLabel:n.ariaLabel,legend:n.legend,plugins:n.plugins,tooltip:n.tooltip},m=>{let{legend:h,svg:g,tooltip:_}=m;g.contains(c)||(g.appendChild(c),g.appendChild(l),g.appendChild(u));let{height:v,width:y}=m.dimensions.value,b=r===`semi`,x=y/2,S=b?v*.85:v/2,C=b?Math.min(x,S)-8:Math.min(y,v)/2-8,w=r===`pie`?0:Math.round(C*.55),T=n.innerRadius===void 0?w:n.innerRadius,E=Math.max(T+1,C),D=(0,e.isReactive)(n.data)?n.data.value:n.data,{end:O,start:k}=Fe(r);for(d=ke(D,x,S,E,T,k,O,i,a,e=>B(e),!1),s(c,{cx:x,cy:S,r:T>0?T:0}),c.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);l.children.length>d.length;)l.removeChild(l.lastChild);for(;u.children.length>d.length;)u.removeChild(u.lastChild);let A=n.transition?.duration??400,j=H(n.transition?.easing);for(let e=0;e<d.length;e++){let t=d[e],r=l.children[e];r||(r=o(`path`,{class:`prism-pie-slice`}),l.appendChild(r)),r.setAttribute(`fill`,t.color),r.setAttribute(`stroke`,`none`),r.style.cursor=n.onClick||n.onHover?`pointer`:``}if(f!==null&&(cancelAnimationFrame(f),f=null),A>0){let e=null,t=n=>{e===null&&(e=n);let r=j(Math.min(1,(n-e)/A)),i=U(k,O,r);for(let e=0;e<d.length;e++){let t=d[e],n=l.children[e];if(n)if(i<=t.startAngle)s(n,{d:``});else{let e=Math.min(t.endAngle,i);s(n,{d:Ae({...t,endAngle:e})})}}r<1?f=requestAnimationFrame(t):(f=null,p(D))};f=requestAnimationFrame(t)}else{for(let e=0;e<d.length;e++){let t=d[e],n=l.children[e];n&&s(n,{d:Ae(t)})}p(D)}return h?.update(d.map(e=>({color:e.color,name:e.slice.label??``}))),_?.hide(),{onClick:e=>{if(!n.onClick)return;let t=g.getBoundingClientRect(),i=e.clientX-t.left,a=e.clientY-t.top,o=Le(d,i,a,r);o>=0&&n.onClick(d[o].slice,o)},onMouseLeave:()=>{n.onHover?.(null,null),_?.hide()},onMouseMove:e=>{let i=g.getBoundingClientRect(),a=e.clientX-i.left,o=e.clientY-i.top,s=Le(d,a,o,r);if(s>=0){let e=d[s];n.onHover?.(e.slice,s);let{x:r,y:a}=je(e),o=t.getBoundingClientRect();_?.show(r+(i.left-o.left),a+(i.top-o.top),{key:s,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else n.onHover?.(null,null),_?.hide()}}});return{get disposalSignal(){return m.disposalSignal},dispose(){f!==null&&(cancelAnimationFrame(f),f=null),m.dispose()},get disposed(){return m.disposed},el:m.el,[Symbol.dispose](){this.dispose()}}}function Le(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i],o=t-a.centerX,s=n-a.centerY,c=Math.sqrt(o*o+s*s);if(c<a.outerRadius&&c>=a.innerRadius){let e=Math.atan2(o,-s);if(r===`semi`){if(e>=a.startAngle-1e-9&&e<=a.endAngle+1e-9)return i}else{let t=e<0?e+Me:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}function Re(e,t,n){if(e.length===0)return[];let r=t/Math.max(1,e.length-1),i=Math.min(...e),a=Math.max(...e)-i||1;return e.map((e,t)=>({x:t*r,y:n-(e-i)/a*n}))}function ze(e,t,n,r=`linear`){if(e.length===0)return``;let i=Re(e,t,n);return q(i,i.map(e=>({x:e.x,y:n})),r??`linear`)}function Be(e,t,n,r){if(e.length===0)return``;let i=Re(e,t,n);return r===`monotone`?G(i):r===`step`?K(i):W(i)}function Ve(e,t,n,r,i,a,c){let l=t.length,u=Math.max(1,n/l-1),d=n/l,f=Math.min(0,...t),p=Math.max(...t)-f||1,m=a?.duration??0,h=H(a?.easing);for(;e.children.length>l;){let t=e.lastElementChild;t&&e.removeChild(t)}for(let n=0;n<l;n++){let a=Math.max(1,(t[n]-f)/p*r),l=r-a,g=e.children[n];if(g||(g=o(`rect`,{class:`prism-spark-bar`}),e.appendChild(g)),s(g,{fill:i,width:u,x:n*d}),m>0&&!g.hasAttribute(`data-init`)){g.setAttribute(`data-init`,`1`),s(g,{height:0,y:r});let e=null,t={h:0,y:r},n={h:a,y:l},i=r=>{if(c?.aborted)return;e===null&&(e=r);let a=h(Math.min(1,(r-e)/m));s(g,{height:U(t.h,n.h,a),y:U(t.y,n.y,a)}),a<1&&requestAnimationFrame(i)};requestAnimationFrame(i)}else g.setAttribute(`data-init`,`1`),s(g,{height:a,y:l})}}function He(e){return e.length>0&&e[0]!==null&&typeof e[0]==`object`}function Ue(e,t,n,r,i,a,o){let s=Math.min(i,n/2,r/2),c=a?s:0,l=a?s:0,u=o?s:0,d=o?s:0;return[`M${e+c},${t}`,`H${e+n-u}`,u?`Q${e+n},${t} ${e+n},${t+u}`:``,`V${t+r-d}`,d?`Q${e+n},${t+r} ${e+n-d},${t+r}`:``,`H${e+l}`,l?`Q${e},${t+r} ${e},${t+r-l}`:``,`V${t+c}`,c?`Q${e},${t} ${e+c},${t}`:``,`Z`].filter(Boolean).join(``)}function We(e){return`var(--prism-color-${e%8+1})`}function Ge(t,n){let r=n.variant??`line`,i=n.color??`var(--prism-color-1)`,a=n.curve??`linear`,c=n.strokeWidth??1.5,l=n.fillOpacity??.2,u=F(t,{...n.ariaLabel?{ariaLabel:n.ariaLabel}:{ariaHidden:!0},margin:{bottom:0,left:0,right:0,top:0}}),{svg:d}=u;d.classList.add(`prism-sparkline`);let f=o(`g`,{class:`prism-spark-inner`});d.appendChild(f);let p;function m(){let{height:t,width:d}=u.dimensions.value,p=(0,e.isReactive)(n.data)?n.data.value:n.data;for(;f.firstChild;)f.removeChild(f.firstChild);if(p.length!==0){if(r===`stack`&&He(p)){let e=o(`g`,{class:`prism-spark-stack`});f.appendChild(e);let r=n.cornerRadius??4,i=p,a=i.reduce((e,t)=>e+Math.max(0,t.value),0);if(a>0){let c=(n.padPixels??0)/2,l=0;i.forEach((n,u)=>{let f=Math.round(l);l+=Math.max(0,n.value)/a*d;let p=u===i.length-1?d:Math.round(l),m=u===0,h=u===i.length-1,g=Ue(f+(m?0:c),0,Math.max(0,p-f-(m?0:c)-(h?0:c)),t,r,m,h),_=o(`path`,{class:`prism-spark-stack-segment`});s(_,{d:g,fill:n.color??We(u)}),e.appendChild(_)})}}else if(r===`bar`){let e=o(`g`,{class:`prism-spark-bars`});f.appendChild(e),Ve(e,p,d,t,i,n.transition,g.signal)}else{if(r===`area`){let e=o(`path`,{class:`prism-spark-fill`});s(e,{d:ze(p,d,t,a),fill:i,"fill-opacity":l,stroke:`none`}),f.appendChild(e)}let e=o(`path`,{class:`prism-spark-line`});s(e,{d:Be(p,d,t,a),fill:`none`,stroke:i,"stroke-width":c}),f.appendChild(e)}He(p)||h(p)}}function h(e){if(p?.(),p=void 0,!n.onHover&&!n.onClick||e.length<=1)return;let{width:t}=u.dimensions.value;d.style.cursor=`crosshair`;let r=t/(e.length-1),i=t=>{let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onHover?.(o,e[o])},a=()=>n.onHover?.(null,null),o=t=>{if(!n.onClick)return;let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onClick(o,e[o])};d.addEventListener(`mousemove`,i),d.addEventListener(`mouseleave`,a),d.addEventListener(`click`,o),p=()=>{d.removeEventListener(`mousemove`,i),d.removeEventListener(`mouseleave`,a),d.removeEventListener(`click`,o)}}let g=new AbortController,_=(0,e.createScope)();_.run(()=>{(0,e.effect)(()=>{m()},{scheduler:`microtask`})});let v=!1;return{get disposalSignal(){return g.signal},dispose(){v||(v=!0,g.abort(),p?.(),_.dispose(),u.dispose())},get disposed(){return v},el:d,[Symbol.dispose](){this.dispose()}}}exports.PrismDisposedError=r,exports.PrismError=n,exports.PrismRenderError=i,exports.animate=be,exports.bandScale=ge,exports.createAreaChart=he,exports.createBarChart=we,exports.createLineChart=Oe,exports.createPieChart=Ie,exports.createSparkline=Ge,exports.linearScale=v,exports.resetTheme=de,exports.seriesColor=B,exports.setTheme=ue,exports.timeScale=O;
2
2
  //# sourceMappingURL=prism.cjs.map