@vielzeug/prism 1.1.1
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.
- package/README.md +83 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +12 -0
- package/dist/_dev.js.map +1 -0
- package/dist/animation/easing.cjs +2 -0
- package/dist/animation/easing.cjs.map +1 -0
- package/dist/animation/easing.d.ts +4 -0
- package/dist/animation/easing.d.ts.map +1 -0
- package/dist/animation/easing.js +14 -0
- package/dist/animation/easing.js.map +1 -0
- package/dist/animation/index.d.ts +6 -0
- package/dist/animation/index.d.ts.map +1 -0
- package/dist/animation/transition.cjs +2 -0
- package/dist/animation/transition.cjs.map +1 -0
- package/dist/animation/transition.d.ts +15 -0
- package/dist/animation/transition.d.ts.map +1 -0
- package/dist/animation/transition.js +28 -0
- package/dist/animation/transition.js.map +1 -0
- package/dist/animation/tween.cjs +2 -0
- package/dist/animation/tween.cjs.map +1 -0
- package/dist/animation/tween.d.ts +3 -0
- package/dist/animation/tween.d.ts.map +1 -0
- package/dist/animation/tween.js +8 -0
- package/dist/animation/tween.js.map +1 -0
- package/dist/axes/axis.cjs +2 -0
- package/dist/axes/axis.cjs.map +1 -0
- package/dist/axes/axis.d.ts +15 -0
- package/dist/axes/axis.d.ts.map +1 -0
- package/dist/axes/axis.js +60 -0
- package/dist/axes/axis.js.map +1 -0
- package/dist/axes/grid.cjs +2 -0
- package/dist/axes/grid.cjs.map +1 -0
- package/dist/axes/grid.d.ts +4 -0
- package/dist/axes/grid.d.ts.map +1 -0
- package/dist/axes/grid.js +30 -0
- package/dist/axes/grid.js.map +1 -0
- package/dist/axes/index.d.ts +3 -0
- package/dist/axes/index.d.ts.map +1 -0
- package/dist/axes/scale-utils.cjs +2 -0
- package/dist/axes/scale-utils.cjs.map +1 -0
- package/dist/axes/scale-utils.d.ts +17 -0
- package/dist/axes/scale-utils.d.ts.map +1 -0
- package/dist/axes/scale-utils.js +11 -0
- package/dist/axes/scale-utils.js.map +1 -0
- package/dist/axes/types.d.ts +2 -0
- package/dist/axes/types.d.ts.map +1 -0
- package/dist/charts/area/area-chart.cjs +2 -0
- package/dist/charts/area/area-chart.cjs.map +1 -0
- package/dist/charts/area/area-chart.d.ts +3 -0
- package/dist/charts/area/area-chart.d.ts.map +1 -0
- package/dist/charts/area/area-chart.js +58 -0
- package/dist/charts/area/area-chart.js.map +1 -0
- package/dist/charts/area/area-renderer.cjs +2 -0
- package/dist/charts/area/area-renderer.cjs.map +1 -0
- package/dist/charts/area/area-renderer.d.ts +14 -0
- package/dist/charts/area/area-renderer.d.ts.map +1 -0
- package/dist/charts/area/area-renderer.js +73 -0
- package/dist/charts/area/area-renderer.js.map +1 -0
- package/dist/charts/area/area-types.d.ts +2 -0
- package/dist/charts/area/area-types.d.ts.map +1 -0
- package/dist/charts/area/index.d.ts +2 -0
- package/dist/charts/area/index.d.ts.map +1 -0
- package/dist/charts/bar/bar-chart.cjs +2 -0
- package/dist/charts/bar/bar-chart.cjs.map +1 -0
- package/dist/charts/bar/bar-chart.d.ts +3 -0
- package/dist/charts/bar/bar-chart.d.ts.map +1 -0
- package/dist/charts/bar/bar-chart.js +151 -0
- package/dist/charts/bar/bar-chart.js.map +1 -0
- package/dist/charts/bar/bar-hit-test.cjs +2 -0
- package/dist/charts/bar/bar-hit-test.cjs.map +1 -0
- package/dist/charts/bar/bar-hit-test.d.ts +12 -0
- package/dist/charts/bar/bar-hit-test.d.ts.map +1 -0
- package/dist/charts/bar/bar-hit-test.js +29 -0
- package/dist/charts/bar/bar-hit-test.js.map +1 -0
- package/dist/charts/bar/bar-renderer.cjs +2 -0
- package/dist/charts/bar/bar-renderer.cjs.map +1 -0
- package/dist/charts/bar/bar-renderer.d.ts +19 -0
- package/dist/charts/bar/bar-renderer.d.ts.map +1 -0
- package/dist/charts/bar/bar-renderer.js +107 -0
- package/dist/charts/bar/bar-renderer.js.map +1 -0
- package/dist/charts/bar/bar-scale-context.d.ts +11 -0
- package/dist/charts/bar/bar-scale-context.d.ts.map +1 -0
- package/dist/charts/bar/bar-types.d.ts +2 -0
- package/dist/charts/bar/bar-types.d.ts.map +1 -0
- package/dist/charts/bar/index.d.ts +2 -0
- package/dist/charts/bar/index.d.ts.map +1 -0
- package/dist/charts/index.d.ts +6 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/line/index.d.ts +2 -0
- package/dist/charts/line/index.d.ts.map +1 -0
- package/dist/charts/line/line-chart.cjs +2 -0
- package/dist/charts/line/line-chart.cjs.map +1 -0
- package/dist/charts/line/line-chart.d.ts +3 -0
- package/dist/charts/line/line-chart.d.ts.map +1 -0
- package/dist/charts/line/line-chart.js +59 -0
- package/dist/charts/line/line-chart.js.map +1 -0
- package/dist/charts/line/line-renderer.cjs +2 -0
- package/dist/charts/line/line-renderer.cjs.map +1 -0
- package/dist/charts/line/line-renderer.d.ts +15 -0
- package/dist/charts/line/line-renderer.d.ts.map +1 -0
- package/dist/charts/line/line-renderer.js +100 -0
- package/dist/charts/line/line-renderer.js.map +1 -0
- package/dist/charts/line/line-types.d.ts +2 -0
- package/dist/charts/line/line-types.d.ts.map +1 -0
- package/dist/charts/pie/index.d.ts +2 -0
- package/dist/charts/pie/index.d.ts.map +1 -0
- package/dist/charts/pie/pie-chart.cjs +2 -0
- package/dist/charts/pie/pie-chart.cjs.map +1 -0
- package/dist/charts/pie/pie-chart.d.ts +3 -0
- package/dist/charts/pie/pie-chart.d.ts.map +1 -0
- package/dist/charts/pie/pie-chart.js +156 -0
- package/dist/charts/pie/pie-chart.js.map +1 -0
- package/dist/charts/pie/pie-renderer.cjs +2 -0
- package/dist/charts/pie/pie-renderer.cjs.map +1 -0
- package/dist/charts/pie/pie-renderer.d.ts +23 -0
- package/dist/charts/pie/pie-renderer.d.ts.map +1 -0
- package/dist/charts/pie/pie-renderer.js +77 -0
- package/dist/charts/pie/pie-renderer.js.map +1 -0
- package/dist/charts/sparkline/index.d.ts +2 -0
- package/dist/charts/sparkline/index.d.ts.map +1 -0
- package/dist/charts/sparkline/sparkline.cjs +2 -0
- package/dist/charts/sparkline/sparkline.cjs.map +1 -0
- package/dist/charts/sparkline/sparkline.d.ts +3 -0
- package/dist/charts/sparkline/sparkline.d.ts.map +1 -0
- package/dist/charts/sparkline/sparkline.js +187 -0
- package/dist/charts/sparkline/sparkline.js.map +1 -0
- package/dist/core/cartesian-scales.cjs +2 -0
- package/dist/core/cartesian-scales.cjs.map +1 -0
- package/dist/core/cartesian-scales.d.ts +4 -0
- package/dist/core/cartesian-scales.d.ts.map +1 -0
- package/dist/core/cartesian-scales.js +54 -0
- package/dist/core/cartesian-scales.js.map +1 -0
- package/dist/core/chart-base.cjs +2 -0
- package/dist/core/chart-base.cjs.map +1 -0
- package/dist/core/chart-base.d.ts +14 -0
- package/dist/core/chart-base.d.ts.map +1 -0
- package/dist/core/chart-base.js +60 -0
- package/dist/core/chart-base.js.map +1 -0
- package/dist/core/chart-scaffold.cjs +2 -0
- package/dist/core/chart-scaffold.cjs.map +1 -0
- package/dist/core/chart-scaffold.d.ts +54 -0
- package/dist/core/chart-scaffold.d.ts.map +1 -0
- package/dist/core/chart-scaffold.js +104 -0
- package/dist/core/chart-scaffold.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/layout.cjs +2 -0
- package/dist/core/layout.cjs.map +1 -0
- package/dist/core/layout.d.ts +7 -0
- package/dist/core/layout.d.ts.map +1 -0
- package/dist/core/layout.js +23 -0
- package/dist/core/layout.js.map +1 -0
- package/dist/core/responsive.cjs +2 -0
- package/dist/core/responsive.cjs.map +1 -0
- package/dist/core/responsive.d.ts +2 -0
- package/dist/core/responsive.d.ts.map +1 -0
- package/dist/core/responsive.js +20 -0
- package/dist/core/responsive.js.map +1 -0
- package/dist/devtools/index.d.ts +52 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools.cjs +2 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.js +19 -0
- package/dist/devtools.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/interaction/crosshair.cjs +2 -0
- package/dist/interaction/crosshair.cjs.map +1 -0
- package/dist/interaction/crosshair.d.ts +13 -0
- package/dist/interaction/crosshair.d.ts.map +1 -0
- package/dist/interaction/crosshair.js +46 -0
- package/dist/interaction/crosshair.js.map +1 -0
- package/dist/interaction/events.cjs +2 -0
- package/dist/interaction/events.cjs.map +1 -0
- package/dist/interaction/events.d.ts +3 -0
- package/dist/interaction/events.d.ts.map +1 -0
- package/dist/interaction/events.js +12 -0
- package/dist/interaction/events.js.map +1 -0
- package/dist/interaction/hit-test.cjs +2 -0
- package/dist/interaction/hit-test.cjs.map +1 -0
- package/dist/interaction/hit-test.d.ts +3 -0
- package/dist/interaction/hit-test.d.ts.map +1 -0
- package/dist/interaction/hit-test.js +14 -0
- package/dist/interaction/hit-test.js.map +1 -0
- package/dist/interaction/index.d.ts +9 -0
- package/dist/interaction/index.d.ts.map +1 -0
- package/dist/interaction/legend.cjs +2 -0
- package/dist/interaction/legend.cjs.map +1 -0
- package/dist/interaction/legend.d.ts +12 -0
- package/dist/interaction/legend.d.ts.map +1 -0
- package/dist/interaction/legend.js +31 -0
- package/dist/interaction/legend.js.map +1 -0
- package/dist/interaction/series-interaction.cjs +2 -0
- package/dist/interaction/series-interaction.cjs.map +1 -0
- package/dist/interaction/series-interaction.d.ts +18 -0
- package/dist/interaction/series-interaction.d.ts.map +1 -0
- package/dist/interaction/series-interaction.js +58 -0
- package/dist/interaction/series-interaction.js.map +1 -0
- package/dist/interaction/tooltip.cjs +2 -0
- package/dist/interaction/tooltip.cjs.map +1 -0
- package/dist/interaction/tooltip.d.ts +10 -0
- package/dist/interaction/tooltip.d.ts.map +1 -0
- package/dist/interaction/tooltip.js +53 -0
- package/dist/interaction/tooltip.js.map +1 -0
- package/dist/prism.cjs +2 -0
- package/dist/prism.cjs.map +1 -0
- package/dist/prism.iife.js +2 -0
- package/dist/prism.iife.js.map +1 -0
- package/dist/prism.js +2 -0
- package/dist/prism.js.map +1 -0
- package/dist/scales/band.cjs +2 -0
- package/dist/scales/band.cjs.map +1 -0
- package/dist/scales/band.d.ts +3 -0
- package/dist/scales/band.d.ts.map +1 -0
- package/dist/scales/band.js +40 -0
- package/dist/scales/band.js.map +1 -0
- package/dist/scales/index.d.ts +4 -0
- package/dist/scales/index.d.ts.map +1 -0
- package/dist/scales/linear.cjs +2 -0
- package/dist/scales/linear.cjs.map +1 -0
- package/dist/scales/linear.d.ts +4 -0
- package/dist/scales/linear.d.ts.map +1 -0
- package/dist/scales/linear.js +44 -0
- package/dist/scales/linear.js.map +1 -0
- package/dist/scales/time.cjs +2 -0
- package/dist/scales/time.cjs.map +1 -0
- package/dist/scales/time.d.ts +4 -0
- package/dist/scales/time.d.ts.map +1 -0
- package/dist/scales/time.js +62 -0
- package/dist/scales/time.js.map +1 -0
- package/dist/scales/types.d.ts +19 -0
- package/dist/scales/types.d.ts.map +1 -0
- package/dist/svg/element.cjs +2 -0
- package/dist/svg/element.cjs.map +1 -0
- package/dist/svg/element.d.ts +4 -0
- package/dist/svg/element.d.ts.map +1 -0
- package/dist/svg/element.js +23 -0
- package/dist/svg/element.js.map +1 -0
- package/dist/svg/index.d.ts +5 -0
- package/dist/svg/index.d.ts.map +1 -0
- package/dist/svg/path.cjs +2 -0
- package/dist/svg/path.cjs.map +1 -0
- package/dist/svg/path.d.ts +9 -0
- package/dist/svg/path.d.ts.map +1 -0
- package/dist/svg/path.js +49 -0
- package/dist/svg/path.js.map +1 -0
- package/dist/svg/text.cjs +2 -0
- package/dist/svg/text.cjs.map +1 -0
- package/dist/svg/text.d.ts +7 -0
- package/dist/svg/text.d.ts.map +1 -0
- package/dist/svg/text.js +10 -0
- package/dist/svg/text.js.map +1 -0
- package/dist/theme/index.cjs +2 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +20 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/prism.css +342 -0
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createSvgElement as e, setAttributes as t } from "../../svg/element.js";
|
|
2
|
+
import { animate as n } from "../../animation/transition.js";
|
|
3
|
+
//#region src/charts/bar/bar-renderer.ts
|
|
4
|
+
var r = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
function i(i, a, o, s, c, l) {
|
|
6
|
+
for (; i.children.length > a.length;) {
|
|
7
|
+
let e = i.lastElementChild;
|
|
8
|
+
e && i.removeChild(e);
|
|
9
|
+
}
|
|
10
|
+
let u = o.bandwidth(), d = l.stacked ? u : u / l.seriesCount, f = l.stacked ? 0 : d * l.seriesIndex, p = l.horizontal ?? !1, m = [], h = [];
|
|
11
|
+
for (let n = 0; n < a.length; n++) {
|
|
12
|
+
let r = a[n], u = o.map(r.key) + f, g = l.baselineYs ? l.baselineYs[n] : c, _ = s.map(r.y), v = i.children[n], y = !v;
|
|
13
|
+
if (v || (v = e("rect", { class: "prism-bar" }), i.appendChild(v)), p) {
|
|
14
|
+
let e = Math.max(0, Math.abs(g - _)), n = Math.min(_, g);
|
|
15
|
+
t(v, {
|
|
16
|
+
fill: l.color,
|
|
17
|
+
height: Math.max(0, d - 1),
|
|
18
|
+
rx: l.borderRadius,
|
|
19
|
+
ry: l.borderRadius,
|
|
20
|
+
y: u
|
|
21
|
+
}), l.transition ? y ? (t(v, {
|
|
22
|
+
width: 0,
|
|
23
|
+
x: g
|
|
24
|
+
}), m.push({
|
|
25
|
+
attrs: {
|
|
26
|
+
width: {
|
|
27
|
+
from: 0,
|
|
28
|
+
to: e
|
|
29
|
+
},
|
|
30
|
+
x: {
|
|
31
|
+
from: g,
|
|
32
|
+
to: n
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
el: v
|
|
36
|
+
})) : h.push({
|
|
37
|
+
attrs: {
|
|
38
|
+
width: {
|
|
39
|
+
from: Number(v.getAttribute("width") ?? e),
|
|
40
|
+
to: e
|
|
41
|
+
},
|
|
42
|
+
x: {
|
|
43
|
+
from: Number(v.getAttribute("x") ?? n),
|
|
44
|
+
to: n
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
el: v
|
|
48
|
+
}) : t(v, {
|
|
49
|
+
width: e,
|
|
50
|
+
x: n
|
|
51
|
+
});
|
|
52
|
+
} else {
|
|
53
|
+
let e = Math.max(0, Math.abs(g - _)), n = Math.min(_, g);
|
|
54
|
+
t(v, {
|
|
55
|
+
fill: l.color,
|
|
56
|
+
rx: l.borderRadius,
|
|
57
|
+
ry: l.borderRadius,
|
|
58
|
+
width: Math.max(0, d - 1),
|
|
59
|
+
x: u
|
|
60
|
+
}), l.transition ? y ? (t(v, {
|
|
61
|
+
height: 0,
|
|
62
|
+
y: g
|
|
63
|
+
}), m.push({
|
|
64
|
+
attrs: {
|
|
65
|
+
height: {
|
|
66
|
+
from: 0,
|
|
67
|
+
to: e
|
|
68
|
+
},
|
|
69
|
+
y: {
|
|
70
|
+
from: g,
|
|
71
|
+
to: n
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
el: v
|
|
75
|
+
})) : h.push({
|
|
76
|
+
attrs: {
|
|
77
|
+
height: {
|
|
78
|
+
from: Number(v.getAttribute("height") ?? e),
|
|
79
|
+
to: e
|
|
80
|
+
},
|
|
81
|
+
y: {
|
|
82
|
+
from: Number(v.getAttribute("y") ?? n),
|
|
83
|
+
to: n
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
el: v
|
|
87
|
+
}) : t(v, {
|
|
88
|
+
height: e,
|
|
89
|
+
y: n
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (l.transition) {
|
|
94
|
+
r.get(i)?.();
|
|
95
|
+
let e = [];
|
|
96
|
+
m.length > 0 && e.push(n(m, l.transition, void 0, l.disposalSignal)), h.length > 0 && e.push(n(h, {
|
|
97
|
+
...l.transition,
|
|
98
|
+
stagger: 0
|
|
99
|
+
}, void 0, l.disposalSignal)), r.set(i, () => {
|
|
100
|
+
for (let t of e) t();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { i as renderBars };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=bar-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-renderer.js","names":[],"sources":["../../../src/charts/bar/bar-renderer.ts"],"sourcesContent":["import type { AnimationTarget } from '../../animation/transition';\nimport type { BandScale, Scale, TransitionConfig } from '../../types';\n\nimport { animate } from '../../animation/transition';\nimport { createSvgElement, setAttributes } from '../../svg/element';\n\nexport interface BarRenderOptions {\n baselineYs?: number[];\n borderRadius: number;\n color: string;\n /** Aborted when the owning chart is disposed — stops in-flight transitions from rescheduling. */\n disposalSignal?: AbortSignal;\n horizontal?: boolean;\n seriesCount: number;\n seriesIndex: number;\n stacked?: boolean;\n transition?: TransitionConfig;\n}\n\nconst activeBarAnimations = new WeakMap<SVGGElement, () => void>();\n\nexport function renderBars(\n parent: SVGGElement,\n data: { base: number; key: string; y: number }[],\n xScale: BandScale,\n yScale: Scale<number>,\n baselineY: number,\n options: BarRenderOptions,\n): void {\n while (parent.children.length > data.length) {\n const last = parent.lastElementChild;\n\n if (last) parent.removeChild(last);\n }\n\n const bandwidth = xScale.bandwidth();\n const barBand = options.stacked ? bandwidth : bandwidth / options.seriesCount;\n const offset = options.stacked ? 0 : barBand * options.seriesIndex;\n const horizontal = options.horizontal ?? false;\n\n const enterTargets: AnimationTarget[] = [];\n const updateTargets: AnimationTarget[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const d = data[i];\n const bandPos = xScale.map(d.key) + offset;\n const barBaselineY = options.baselineYs ? options.baselineYs[i] : baselineY;\n const valuePx = yScale.map(d.y);\n\n let rect = parent.children[i] as SVGRectElement | undefined;\n\n const isNew = !rect;\n\n if (!rect) {\n rect = createSvgElement('rect', { class: 'prism-bar' });\n parent.appendChild(rect);\n }\n\n if (horizontal) {\n // Horizontal: category on Y axis, value on X axis\n // baselineY here is actually the baseline X (yScale.map(0) in value-space mapped to screen X)\n const finalWidth = Math.max(0, Math.abs(barBaselineY - valuePx));\n const finalX = Math.min(valuePx, barBaselineY);\n\n setAttributes(rect, {\n fill: options.color,\n height: Math.max(0, barBand - 1),\n rx: options.borderRadius,\n ry: options.borderRadius,\n y: bandPos,\n });\n\n if (options.transition) {\n if (isNew) {\n setAttributes(rect, { width: 0, x: barBaselineY });\n enterTargets.push({\n attrs: { width: { from: 0, to: finalWidth }, x: { from: barBaselineY, to: finalX } },\n el: rect,\n });\n } else {\n updateTargets.push({\n attrs: {\n width: { from: Number(rect.getAttribute('width') ?? finalWidth), to: finalWidth },\n x: { from: Number(rect.getAttribute('x') ?? finalX), to: finalX },\n },\n el: rect,\n });\n }\n } else {\n setAttributes(rect, { width: finalWidth, x: finalX });\n }\n } else {\n // Vertical (default)\n const finalHeight = Math.max(0, Math.abs(barBaselineY - valuePx));\n const finalY = Math.min(valuePx, barBaselineY);\n\n setAttributes(rect, {\n fill: options.color,\n rx: options.borderRadius,\n ry: options.borderRadius,\n width: Math.max(0, barBand - 1),\n x: bandPos,\n });\n\n if (options.transition) {\n if (isNew) {\n setAttributes(rect, { height: 0, y: barBaselineY });\n enterTargets.push({\n attrs: { height: { from: 0, to: finalHeight }, y: { from: barBaselineY, to: finalY } },\n el: rect,\n });\n } else {\n updateTargets.push({\n attrs: {\n height: { from: Number(rect.getAttribute('height') ?? finalHeight), to: finalHeight },\n y: { from: Number(rect.getAttribute('y') ?? finalY), to: finalY },\n },\n el: rect,\n });\n }\n } else {\n setAttributes(rect, { height: finalHeight, y: finalY });\n }\n }\n }\n\n if (options.transition) {\n activeBarAnimations.get(parent)?.();\n\n const cancels: (() => void)[] = [];\n\n if (enterTargets.length > 0) {\n cancels.push(animate(enterTargets, options.transition, undefined, options.disposalSignal));\n }\n\n if (updateTargets.length > 0) {\n cancels.push(animate(updateTargets, { ...options.transition, stagger: 0 }, undefined, options.disposalSignal));\n }\n\n activeBarAnimations.set(parent, () => {\n for (const cancel of cancels) cancel();\n });\n }\n}\n"],"mappings":";;;AAmBA,IAAM,oBAAsB,IAAI,QAAiC;AAEjE,SAAgB,EACd,GACA,GACA,GACA,GACA,GACA,GACM;CACN,OAAO,EAAO,SAAS,SAAS,EAAK,SAAQ;EAC3C,IAAM,IAAO,EAAO;EAEpB,AAAI,KAAM,EAAO,YAAY,CAAI;CACnC;CAEA,IAAM,IAAY,EAAO,UAAU,GAC7B,IAAU,EAAQ,UAAU,IAAY,IAAY,EAAQ,aAC5D,IAAS,EAAQ,UAAU,IAAI,IAAU,EAAQ,aACjD,IAAa,EAAQ,cAAc,IAEnC,IAAkC,CAAC,GACnC,IAAmC,CAAC;CAE1C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK;EACpC,IAAM,IAAI,EAAK,IACT,IAAU,EAAO,IAAI,EAAE,GAAG,IAAI,GAC9B,IAAe,EAAQ,aAAa,EAAQ,WAAW,KAAK,GAC5D,IAAU,EAAO,IAAI,EAAE,CAAC,GAE1B,IAAO,EAAO,SAAS,IAErB,IAAQ,CAAC;EAOf,IALK,MACH,IAAO,EAAiB,QAAQ,EAAE,OAAO,YAAY,CAAC,GACtD,EAAO,YAAY,CAAI,IAGrB,GAAY;GAGd,IAAM,IAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAe,CAAO,CAAC,GACzD,IAAS,KAAK,IAAI,GAAS,CAAY;GAU7C,AARA,EAAc,GAAM;IAClB,MAAM,EAAQ;IACd,QAAQ,KAAK,IAAI,GAAG,IAAU,CAAC;IAC/B,IAAI,EAAQ;IACZ,IAAI,EAAQ;IACZ,GAAG;GACL,CAAC,GAEG,EAAQ,aACN,KACF,EAAc,GAAM;IAAE,OAAO;IAAG,GAAG;GAAa,CAAC,GACjD,EAAa,KAAK;IAChB,OAAO;KAAE,OAAO;MAAE,MAAM;MAAG,IAAI;KAAW;KAAG,GAAG;MAAE,MAAM;MAAc,IAAI;KAAO;IAAE;IACnF,IAAI;GACN,CAAC,KAED,EAAc,KAAK;IACjB,OAAO;KACL,OAAO;MAAE,MAAM,OAAO,EAAK,aAAa,OAAO,KAAK,CAAU;MAAG,IAAI;KAAW;KAChF,GAAG;MAAE,MAAM,OAAO,EAAK,aAAa,GAAG,KAAK,CAAM;MAAG,IAAI;KAAO;IAClE;IACA,IAAI;GACN,CAAC,IAGH,EAAc,GAAM;IAAE,OAAO;IAAY,GAAG;GAAO,CAAC;EAExD,OAAO;GAEL,IAAM,IAAc,KAAK,IAAI,GAAG,KAAK,IAAI,IAAe,CAAO,CAAC,GAC1D,IAAS,KAAK,IAAI,GAAS,CAAY;GAU7C,AARA,EAAc,GAAM;IAClB,MAAM,EAAQ;IACd,IAAI,EAAQ;IACZ,IAAI,EAAQ;IACZ,OAAO,KAAK,IAAI,GAAG,IAAU,CAAC;IAC9B,GAAG;GACL,CAAC,GAEG,EAAQ,aACN,KACF,EAAc,GAAM;IAAE,QAAQ;IAAG,GAAG;GAAa,CAAC,GAClD,EAAa,KAAK;IAChB,OAAO;KAAE,QAAQ;MAAE,MAAM;MAAG,IAAI;KAAY;KAAG,GAAG;MAAE,MAAM;MAAc,IAAI;KAAO;IAAE;IACrF,IAAI;GACN,CAAC,KAED,EAAc,KAAK;IACjB,OAAO;KACL,QAAQ;MAAE,MAAM,OAAO,EAAK,aAAa,QAAQ,KAAK,CAAW;MAAG,IAAI;KAAY;KACpF,GAAG;MAAE,MAAM,OAAO,EAAK,aAAa,GAAG,KAAK,CAAM;MAAG,IAAI;KAAO;IAClE;IACA,IAAI;GACN,CAAC,IAGH,EAAc,GAAM;IAAE,QAAQ;IAAa,GAAG;GAAO,CAAC;EAE1D;CACF;CAEA,IAAI,EAAQ,YAAY;EACtB,EAAoB,IAAI,CAAM,CAAC,GAAG;EAElC,IAAM,IAA0B,CAAC;EAUjC,AARI,EAAa,SAAS,KACxB,EAAQ,KAAK,EAAQ,GAAc,EAAQ,YAAY,KAAA,GAAW,EAAQ,cAAc,CAAC,GAGvF,EAAc,SAAS,KACzB,EAAQ,KAAK,EAAQ,GAAe;GAAE,GAAG,EAAQ;GAAY,SAAS;EAAE,GAAG,KAAA,GAAW,EAAQ,cAAc,CAAC,GAG/G,EAAoB,IAAI,SAAc;GACpC,KAAK,IAAM,KAAU,GAAS,EAAO;EACvC,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Scale } from '../../types';
|
|
2
|
+
export interface BarScaleContext {
|
|
3
|
+
bandCenter: (cat: string) => number;
|
|
4
|
+
bandwidth: number;
|
|
5
|
+
baselinePx: number;
|
|
6
|
+
horizontal: boolean;
|
|
7
|
+
stacked: boolean;
|
|
8
|
+
stackedTops: number[][];
|
|
9
|
+
valueScale: Scale<number>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=bar-scale-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-scale-context.d.ts","sourceRoot":"","sources":["../../../src/charts/bar/bar-scale-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bar-types.d.ts","sourceRoot":"","sources":["../../../src/charts/bar/bar-types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/charts/bar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/charts/line/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../_dev.cjs"),t=require("../../svg/element.cjs"),n=require("../../axes/axis.cjs"),r=require("../../axes/grid.cjs"),i=require("../../core/cartesian-scales.cjs"),a=require("../../core/layout.cjs"),o=require("../../core/chart-scaffold.cjs"),s=require("../../interaction/crosshair.cjs"),c=require("../../interaction/series-interaction.cjs"),l=require("../../theme/index.cjs"),u=require("./line-renderer.cjs");let d=require("@vielzeug/ripple");function f(f,p){let m=null;return o.createChartScaffold(f,p,f=>{let{groups:h,legend:g,tooltip:_}=f,v=f.dimensions.value,y=a.chartArea(v.width,v.height,v.margin),b=(0,d.isReactive)(p.series)?p.series.value:p.series,x=b.map(e=>(0,d.isReactive)(e.data)?e.data.value:e.data),S=x.flat().map(e=>e.key),C=x.flat().map(e=>e.value);if(S.length===0){e.warn(`createLineChart: no data`),o.clearCartesianDom(h,g,_,m);return}p.crosshair&&!m&&(m=s.createCrosshair(f.chartArea,p.crosshair));let w=i.buildXScale(S,y.width),T=i.buildYScale(C,y.height);for(p.yAxis?.grid&&r.renderGrid(h.grid,T,p.yAxis.grid,y.width,`horizontal`,n.resolveTickCount(p.yAxis,y.height,`left`)),p.xAxis?.grid&&r.renderGrid(h.grid,w,p.xAxis.grid,y.height,`vertical`,n.resolveTickCount(p.xAxis,y.width,`bottom`)),p.xAxis&&(h.xAxis.setAttribute(`transform`,`translate(0,${y.height})`),n.renderAxis(h.xAxis,w,p.xAxis,y.width,`bottom`)),p.yAxis&&n.renderAxis(h.yAxis,T,p.yAxis,y.height,`left`);h.series.children.length>b.length;)h.series.removeChild(h.series.lastChild);let E=[];for(let e=0;e<b.length;e++){let n=b[e],r=h.series.children[e];r||(r=t.createSvgElement(`g`,{class:`prism-line-series`}),h.series.appendChild(r));let i=u.computePoints(x[e],w,T);E.push(i),u.renderLine(r,i,{color:l.seriesColor(e,n.color),curve:n.curve??`linear`,disposalSignal:f.disposalSignal,pointRadius:n.pointRadius??3,showPoints:n.showPoints??!1,strokeWidth:n.strokeWidth??2,transition:p.transition})}return g?.update(b.map((e,t)=>({color:l.seriesColor(t,e.color),name:e.name}))),_?.hide(),c.createSeriesInteraction({crosshair:m,dims:()=>f.dimensions.value,getData:()=>x,getPoints:()=>E,getSeriesList:()=>(0,d.isReactive)(p.series)?p.series.value:p.series,onClick:p.onClick,onHover:p.onHover,svg:f.svg,tooltip:_})})}exports.createLineChart=f;
|
|
2
|
+
//# sourceMappingURL=line-chart.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-chart.cjs","names":[],"sources":["../../../src/charts/line/line-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\n\nimport type { Point } from '../../svg/path';\nimport type { ChartHandle, LineChartConfig } from '../../types';\n\nimport { warn } from '../../_dev';\nimport { renderAxis, resolveTickCount } from '../../axes/axis';\nimport { renderGrid } from '../../axes/grid';\nimport { buildXScale, buildYScale } from '../../core/cartesian-scales';\nimport { clearCartesianDom, createChartScaffold } from '../../core/chart-scaffold';\nimport { chartArea } from '../../core/layout';\nimport { createCrosshair } from '../../interaction/crosshair';\nimport { createSeriesInteraction } from '../../interaction/series-interaction';\nimport { createSvgElement } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport { computePoints, renderLine } from './line-renderer';\n\nexport function createLineChart(container: HTMLElement, config: LineChartConfig): ChartHandle {\n let crosshair: ReturnType<typeof createCrosshair> | null = null;\n\n return createChartScaffold(container, config, (ctx) => {\n const { groups, legend, tooltip } = ctx;\n const dims = ctx.dimensions.value;\n const area = chartArea(dims.width, dims.height, dims.margin);\n const seriesList = isReactive(config.series) ? config.series.value : config.series;\n const allData = seriesList.map((s) => (isReactive(s.data) ? s.data.value : s.data));\n const allX = allData.flat().map((d) => d.key as Date | number);\n const allY = allData.flat().map((d) => d.value);\n\n if (allX.length === 0) {\n warn('createLineChart: no data');\n clearCartesianDom(groups, legend, tooltip, crosshair);\n\n return;\n }\n\n if (config.crosshair && !crosshair) {\n crosshair = createCrosshair(ctx.chartArea, config.crosshair);\n }\n\n const xScale = buildXScale(allX as (Date | number)[], area.width);\n const yScale = buildYScale(allY, area.height);\n\n if (config.yAxis?.grid) {\n renderGrid(\n groups.grid,\n yScale,\n config.yAxis.grid,\n area.width,\n 'horizontal',\n resolveTickCount(config.yAxis, area.height, 'left'),\n );\n }\n\n if (config.xAxis?.grid) {\n renderGrid(\n groups.grid,\n xScale,\n config.xAxis.grid,\n area.height,\n 'vertical',\n resolveTickCount(config.xAxis, area.width, 'bottom'),\n );\n }\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, xScale, config.xAxis, area.width, 'bottom');\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, yScale, config.yAxis, area.height, 'left');\n\n while (groups.series.children.length > seriesList.length) {\n groups.series.removeChild(groups.series.lastChild!);\n }\n\n const allPoints: Point[][] = [];\n\n for (let i = 0; i < seriesList.length; i++) {\n const series = seriesList[i];\n let group = groups.series.children[i] as SVGGElement | undefined;\n\n if (!group) {\n group = createSvgElement('g', { class: 'prism-line-series' });\n groups.series.appendChild(group);\n }\n\n const points = computePoints(allData[i], xScale, yScale);\n\n allPoints.push(points);\n\n renderLine(group, points, {\n color: seriesColor(i, series.color),\n curve: series.curve ?? 'linear',\n disposalSignal: ctx.disposalSignal,\n pointRadius: series.pointRadius ?? 3,\n showPoints: series.showPoints ?? false,\n strokeWidth: series.strokeWidth ?? 2,\n transition: config.transition,\n });\n }\n\n legend?.update(seriesList.map((s, i) => ({ color: seriesColor(i, s.color), name: s.name })));\n tooltip?.hide();\n\n return createSeriesInteraction({\n crosshair,\n dims: () => ctx.dimensions.value,\n getData: () => allData,\n getPoints: () => allPoints,\n getSeriesList: () => (isReactive(config.series) ? config.series.value : config.series),\n onClick: config.onClick,\n onHover: config.onHover,\n svg: ctx.svg,\n tooltip,\n });\n });\n}\n"],"mappings":"2cAiBA,SAAgB,EAAgB,EAAwB,EAAsC,CAC5F,IAAI,EAAuD,KAE3D,OAAO,EAAA,oBAAoB,EAAW,EAAS,GAAQ,CACrD,GAAM,CAAE,SAAQ,SAAQ,WAAY,EAC9B,EAAO,EAAI,WAAW,MACtB,EAAO,EAAA,UAAU,EAAK,MAAO,EAAK,OAAQ,EAAK,MAAM,EACrD,GAAA,EAAA,EAAA,WAAA,CAAwB,EAAO,MAAM,EAAI,EAAO,OAAO,MAAQ,EAAO,OACtE,EAAU,EAAW,IAAK,IAAA,EAAA,EAAA,WAAA,CAAkB,EAAE,IAAI,EAAI,EAAE,KAAK,MAAQ,EAAE,IAAK,EAC5E,EAAO,EAAQ,KAAK,CAAC,CAAC,IAAK,GAAM,EAAE,GAAoB,EACvD,EAAO,EAAQ,KAAK,CAAC,CAAC,IAAK,GAAM,EAAE,KAAK,EAE9C,GAAI,EAAK,SAAW,EAAG,CACrB,EAAA,KAAK,0BAA0B,EAC/B,EAAA,kBAAkB,EAAQ,EAAQ,EAAS,CAAS,EAEpD,MACF,CAEI,EAAO,WAAa,CAAC,IACvB,EAAY,EAAA,gBAAgB,EAAI,UAAW,EAAO,SAAS,GAG7D,IAAM,EAAS,EAAA,YAAY,EAA2B,EAAK,KAAK,EAC1D,EAAS,EAAA,YAAY,EAAM,EAAK,MAAM,EA+B5C,IA7BI,EAAO,OAAO,MAChB,EAAA,WACE,EAAO,KACP,EACA,EAAO,MAAM,KACb,EAAK,MACL,aACA,EAAA,iBAAiB,EAAO,MAAO,EAAK,OAAQ,MAAM,CACpD,EAGE,EAAO,OAAO,MAChB,EAAA,WACE,EAAO,KACP,EACA,EAAO,MAAM,KACb,EAAK,OACL,WACA,EAAA,iBAAiB,EAAO,MAAO,EAAK,MAAO,QAAQ,CACrD,EAGE,EAAO,QACT,EAAO,MAAM,aAAa,YAAa,eAAe,EAAK,OAAO,EAAE,EACpE,EAAA,WAAW,EAAO,MAAO,EAAQ,EAAO,MAAO,EAAK,MAAO,QAAQ,GAGjE,EAAO,OAAO,EAAA,WAAW,EAAO,MAAO,EAAQ,EAAO,MAAO,EAAK,OAAQ,MAAM,EAE7E,EAAO,OAAO,SAAS,OAAS,EAAW,QAChD,EAAO,OAAO,YAAY,EAAO,OAAO,SAAU,EAGpD,IAAM,EAAuB,CAAC,EAE9B,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAC1C,IAAM,EAAS,EAAW,GACtB,EAAQ,EAAO,OAAO,SAAS,GAE9B,IACH,EAAQ,EAAA,iBAAiB,IAAK,CAAE,MAAO,mBAAoB,CAAC,EAC5D,EAAO,OAAO,YAAY,CAAK,GAGjC,IAAM,EAAS,EAAA,cAAc,EAAQ,GAAI,EAAQ,CAAM,EAEvD,EAAU,KAAK,CAAM,EAErB,EAAA,WAAW,EAAO,EAAQ,CACxB,MAAO,EAAA,YAAY,EAAG,EAAO,KAAK,EAClC,MAAO,EAAO,OAAS,SACvB,eAAgB,EAAI,eACpB,YAAa,EAAO,aAAe,EACnC,WAAY,EAAO,YAAc,GACjC,YAAa,EAAO,aAAe,EACnC,WAAY,EAAO,UACrB,CAAC,CACH,CAKA,OAHA,GAAQ,OAAO,EAAW,KAAK,EAAG,KAAO,CAAE,MAAO,EAAA,YAAY,EAAG,EAAE,KAAK,EAAG,KAAM,EAAE,IAAK,EAAE,CAAC,EAC3F,GAAS,KAAK,EAEP,EAAA,wBAAwB,CAC7B,YACA,SAAY,EAAI,WAAW,MAC3B,YAAe,EACf,cAAiB,EACjB,mBAAA,EAAA,EAAA,WAAA,CAAiC,EAAO,MAAM,EAAI,EAAO,OAAO,MAAQ,EAAO,OAC/E,QAAS,EAAO,QAChB,QAAS,EAAO,QAChB,IAAK,EAAI,IACT,SACF,CAAC,CACH,CAAC,CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-chart.d.ts","sourceRoot":"","sources":["../../../src/charts/line/line-chart.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAchE,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,GAAG,WAAW,CAoG5F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { warn as e } from "../../_dev.js";
|
|
2
|
+
import { createSvgElement as t } from "../../svg/element.js";
|
|
3
|
+
import { renderAxis as n, resolveTickCount as r } from "../../axes/axis.js";
|
|
4
|
+
import { renderGrid as i } from "../../axes/grid.js";
|
|
5
|
+
import { buildXScale as a, buildYScale as o } from "../../core/cartesian-scales.js";
|
|
6
|
+
import { chartArea as s } from "../../core/layout.js";
|
|
7
|
+
import { clearCartesianDom as c, createChartScaffold as l } from "../../core/chart-scaffold.js";
|
|
8
|
+
import { createCrosshair as u } from "../../interaction/crosshair.js";
|
|
9
|
+
import { createSeriesInteraction as d } from "../../interaction/series-interaction.js";
|
|
10
|
+
import { seriesColor as f } from "../../theme/index.js";
|
|
11
|
+
import { computePoints as p, renderLine as m } from "./line-renderer.js";
|
|
12
|
+
import { isReactive as h } from "@vielzeug/ripple";
|
|
13
|
+
//#region src/charts/line/line-chart.ts
|
|
14
|
+
function g(g, _) {
|
|
15
|
+
let v = null;
|
|
16
|
+
return l(g, _, (l) => {
|
|
17
|
+
let { groups: g, legend: y, tooltip: b } = l, x = l.dimensions.value, S = s(x.width, x.height, x.margin), C = h(_.series) ? _.series.value : _.series, w = C.map((e) => h(e.data) ? e.data.value : e.data), T = w.flat().map((e) => e.key), E = w.flat().map((e) => e.value);
|
|
18
|
+
if (T.length === 0) {
|
|
19
|
+
e("createLineChart: no data"), c(g, y, b, v);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
_.crosshair && !v && (v = u(l.chartArea, _.crosshair));
|
|
23
|
+
let D = a(T, S.width), O = o(E, S.height);
|
|
24
|
+
for (_.yAxis?.grid && i(g.grid, O, _.yAxis.grid, S.width, "horizontal", r(_.yAxis, S.height, "left")), _.xAxis?.grid && i(g.grid, D, _.xAxis.grid, S.height, "vertical", r(_.xAxis, S.width, "bottom")), _.xAxis && (g.xAxis.setAttribute("transform", `translate(0,${S.height})`), n(g.xAxis, D, _.xAxis, S.width, "bottom")), _.yAxis && n(g.yAxis, O, _.yAxis, S.height, "left"); g.series.children.length > C.length;) g.series.removeChild(g.series.lastChild);
|
|
25
|
+
let k = [];
|
|
26
|
+
for (let e = 0; e < C.length; e++) {
|
|
27
|
+
let n = C[e], r = g.series.children[e];
|
|
28
|
+
r || (r = t("g", { class: "prism-line-series" }), g.series.appendChild(r));
|
|
29
|
+
let i = p(w[e], D, O);
|
|
30
|
+
k.push(i), m(r, i, {
|
|
31
|
+
color: f(e, n.color),
|
|
32
|
+
curve: n.curve ?? "linear",
|
|
33
|
+
disposalSignal: l.disposalSignal,
|
|
34
|
+
pointRadius: n.pointRadius ?? 3,
|
|
35
|
+
showPoints: n.showPoints ?? !1,
|
|
36
|
+
strokeWidth: n.strokeWidth ?? 2,
|
|
37
|
+
transition: _.transition
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return y?.update(C.map((e, t) => ({
|
|
41
|
+
color: f(t, e.color),
|
|
42
|
+
name: e.name
|
|
43
|
+
}))), b?.hide(), d({
|
|
44
|
+
crosshair: v,
|
|
45
|
+
dims: () => l.dimensions.value,
|
|
46
|
+
getData: () => w,
|
|
47
|
+
getPoints: () => k,
|
|
48
|
+
getSeriesList: () => h(_.series) ? _.series.value : _.series,
|
|
49
|
+
onClick: _.onClick,
|
|
50
|
+
onHover: _.onHover,
|
|
51
|
+
svg: l.svg,
|
|
52
|
+
tooltip: b
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//#endregion
|
|
57
|
+
export { g as createLineChart };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=line-chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-chart.js","names":[],"sources":["../../../src/charts/line/line-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\n\nimport type { Point } from '../../svg/path';\nimport type { ChartHandle, LineChartConfig } from '../../types';\n\nimport { warn } from '../../_dev';\nimport { renderAxis, resolveTickCount } from '../../axes/axis';\nimport { renderGrid } from '../../axes/grid';\nimport { buildXScale, buildYScale } from '../../core/cartesian-scales';\nimport { clearCartesianDom, createChartScaffold } from '../../core/chart-scaffold';\nimport { chartArea } from '../../core/layout';\nimport { createCrosshair } from '../../interaction/crosshair';\nimport { createSeriesInteraction } from '../../interaction/series-interaction';\nimport { createSvgElement } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport { computePoints, renderLine } from './line-renderer';\n\nexport function createLineChart(container: HTMLElement, config: LineChartConfig): ChartHandle {\n let crosshair: ReturnType<typeof createCrosshair> | null = null;\n\n return createChartScaffold(container, config, (ctx) => {\n const { groups, legend, tooltip } = ctx;\n const dims = ctx.dimensions.value;\n const area = chartArea(dims.width, dims.height, dims.margin);\n const seriesList = isReactive(config.series) ? config.series.value : config.series;\n const allData = seriesList.map((s) => (isReactive(s.data) ? s.data.value : s.data));\n const allX = allData.flat().map((d) => d.key as Date | number);\n const allY = allData.flat().map((d) => d.value);\n\n if (allX.length === 0) {\n warn('createLineChart: no data');\n clearCartesianDom(groups, legend, tooltip, crosshair);\n\n return;\n }\n\n if (config.crosshair && !crosshair) {\n crosshair = createCrosshair(ctx.chartArea, config.crosshair);\n }\n\n const xScale = buildXScale(allX as (Date | number)[], area.width);\n const yScale = buildYScale(allY, area.height);\n\n if (config.yAxis?.grid) {\n renderGrid(\n groups.grid,\n yScale,\n config.yAxis.grid,\n area.width,\n 'horizontal',\n resolveTickCount(config.yAxis, area.height, 'left'),\n );\n }\n\n if (config.xAxis?.grid) {\n renderGrid(\n groups.grid,\n xScale,\n config.xAxis.grid,\n area.height,\n 'vertical',\n resolveTickCount(config.xAxis, area.width, 'bottom'),\n );\n }\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, xScale, config.xAxis, area.width, 'bottom');\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, yScale, config.yAxis, area.height, 'left');\n\n while (groups.series.children.length > seriesList.length) {\n groups.series.removeChild(groups.series.lastChild!);\n }\n\n const allPoints: Point[][] = [];\n\n for (let i = 0; i < seriesList.length; i++) {\n const series = seriesList[i];\n let group = groups.series.children[i] as SVGGElement | undefined;\n\n if (!group) {\n group = createSvgElement('g', { class: 'prism-line-series' });\n groups.series.appendChild(group);\n }\n\n const points = computePoints(allData[i], xScale, yScale);\n\n allPoints.push(points);\n\n renderLine(group, points, {\n color: seriesColor(i, series.color),\n curve: series.curve ?? 'linear',\n disposalSignal: ctx.disposalSignal,\n pointRadius: series.pointRadius ?? 3,\n showPoints: series.showPoints ?? false,\n strokeWidth: series.strokeWidth ?? 2,\n transition: config.transition,\n });\n }\n\n legend?.update(seriesList.map((s, i) => ({ color: seriesColor(i, s.color), name: s.name })));\n tooltip?.hide();\n\n return createSeriesInteraction({\n crosshair,\n dims: () => ctx.dimensions.value,\n getData: () => allData,\n getPoints: () => allPoints,\n getSeriesList: () => (isReactive(config.series) ? config.series.value : config.series),\n onClick: config.onClick,\n onHover: config.onHover,\n svg: ctx.svg,\n tooltip,\n });\n });\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,EAAgB,GAAwB,GAAsC;CAC5F,IAAI,IAAuD;CAE3D,OAAO,EAAoB,GAAW,IAAS,MAAQ;EACrD,IAAM,EAAE,WAAQ,WAAQ,eAAY,GAC9B,IAAO,EAAI,WAAW,OACtB,IAAO,EAAU,EAAK,OAAO,EAAK,QAAQ,EAAK,MAAM,GACrD,IAAa,EAAW,EAAO,MAAM,IAAI,EAAO,OAAO,QAAQ,EAAO,QACtE,IAAU,EAAW,KAAK,MAAO,EAAW,EAAE,IAAI,IAAI,EAAE,KAAK,QAAQ,EAAE,IAAK,GAC5E,IAAO,EAAQ,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAoB,GACvD,IAAO,EAAQ,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK;EAE9C,IAAI,EAAK,WAAW,GAAG;GAErB,AADA,EAAK,0BAA0B,GAC/B,EAAkB,GAAQ,GAAQ,GAAS,CAAS;GAEpD;EACF;EAEA,AAAI,EAAO,aAAa,CAAC,MACvB,IAAY,EAAgB,EAAI,WAAW,EAAO,SAAS;EAG7D,IAAM,IAAS,EAAY,GAA2B,EAAK,KAAK,GAC1D,IAAS,EAAY,GAAM,EAAK,MAAM;EA+B5C,KA7BI,EAAO,OAAO,QAChB,EACE,EAAO,MACP,GACA,EAAO,MAAM,MACb,EAAK,OACL,cACA,EAAiB,EAAO,OAAO,EAAK,QAAQ,MAAM,CACpD,GAGE,EAAO,OAAO,QAChB,EACE,EAAO,MACP,GACA,EAAO,MAAM,MACb,EAAK,QACL,YACA,EAAiB,EAAO,OAAO,EAAK,OAAO,QAAQ,CACrD,GAGE,EAAO,UACT,EAAO,MAAM,aAAa,aAAa,eAAe,EAAK,OAAO,EAAE,GACpE,EAAW,EAAO,OAAO,GAAQ,EAAO,OAAO,EAAK,OAAO,QAAQ,IAGjE,EAAO,SAAO,EAAW,EAAO,OAAO,GAAQ,EAAO,OAAO,EAAK,QAAQ,MAAM,GAE7E,EAAO,OAAO,SAAS,SAAS,EAAW,SAChD,EAAO,OAAO,YAAY,EAAO,OAAO,SAAU;EAGpD,IAAM,IAAuB,CAAC;EAE9B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;GAC1C,IAAM,IAAS,EAAW,IACtB,IAAQ,EAAO,OAAO,SAAS;GAEnC,AAAK,MACH,IAAQ,EAAiB,KAAK,EAAE,OAAO,oBAAoB,CAAC,GAC5D,EAAO,OAAO,YAAY,CAAK;GAGjC,IAAM,IAAS,EAAc,EAAQ,IAAI,GAAQ,CAAM;GAIvD,AAFA,EAAU,KAAK,CAAM,GAErB,EAAW,GAAO,GAAQ;IACxB,OAAO,EAAY,GAAG,EAAO,KAAK;IAClC,OAAO,EAAO,SAAS;IACvB,gBAAgB,EAAI;IACpB,aAAa,EAAO,eAAe;IACnC,YAAY,EAAO,cAAc;IACjC,aAAa,EAAO,eAAe;IACnC,YAAY,EAAO;GACrB,CAAC;EACH;EAKA,OAHA,GAAQ,OAAO,EAAW,KAAK,GAAG,OAAO;GAAE,OAAO,EAAY,GAAG,EAAE,KAAK;GAAG,MAAM,EAAE;EAAK,EAAE,CAAC,GAC3F,GAAS,KAAK,GAEP,EAAwB;GAC7B;GACA,YAAY,EAAI,WAAW;GAC3B,eAAe;GACf,iBAAiB;GACjB,qBAAsB,EAAW,EAAO,MAAM,IAAI,EAAO,OAAO,QAAQ,EAAO;GAC/E,SAAS,EAAO;GAChB,SAAS,EAAO;GAChB,KAAK,EAAI;GACT;EACF,CAAC;CACH,CAAC;AACH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../_dev.cjs"),t=require("../../svg/element.cjs"),n=require("../../animation/easing.cjs"),r=require("../../animation/tween.cjs"),i=require("../../svg/path.cjs");var a=new WeakMap;function o(e,t){return t===`monotone`?i.monotonePath(e):t===`step`?i.stepPath(e):i.linePath(e)}function s(e,i,s){let c=s.transition?.duration??(s.transition?300:0),l=n.resolveEasing(s.transition?.easing),u=e.querySelector(`.prism-line-path`);u||(u=t.createSvgElement(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(u)),t.setAttributes(u,{stroke:s.color,"stroke-width":s.strokeWidth});let d=e.querySelector(`.prism-line-dots`);if(s.showPoints?d||(d=t.createSvgElement(`g`,{class:`prism-line-dots`}),e.appendChild(d)):d&&=(d.remove(),null),c===0){if(t.setAttributes(u,{d:o(i,s.curve)}),d){for(;d.children.length>i.length;)d.removeChild(d.lastChild);for(let e=0;e<i.length;e++){let n=d.children[e];n||(n=t.createSvgElement(`circle`,{class:`prism-line-dot`}),d.appendChild(n)),t.setAttributes(n,{cx:i[e].x,cy:i[e].y,fill:s.color,r:s.pointRadius})}}return}a.get(e)?.();let f=!!u.getAttribute(`d`),p=[],m=null;if(d){let e=d.children.length;for(let t=0;t<e;t++){let e=d.children[t],n={x:Number(e.getAttribute(`cx`)),y:Number(e.getAttribute(`cy`))};p.push(n),m=n}for(;d.children.length>i.length;)d.removeChild(d.lastChild);for(let e=d.children.length;e<i.length;e++){let n=t.createSvgElement(`circle`,{class:`prism-line-dot`});t.setAttributes(n,{cx:i[e].x,cy:i[e].y,fill:s.color,r:s.pointRadius}),d.appendChild(n)}}for(let e=p.length;e<i.length;e++)p.push(m??i[e]);let h=null;function g(n){if(s.disposalSignal?.aborted){a.delete(e);return}h===null&&(h=n);let f=Math.min(1,(n-h)/c),m=l(f),_=i.map((e,t)=>{let n=p[t]??e;return{x:r.tweenNumber(n.x,e.x,m),y:r.tweenNumber(n.y,e.y,m)}});if(t.setAttributes(u,{d:o(_,s.curve)}),d)for(let e=0;e<i.length;e++){let n=d.children[e];n&&t.setAttributes(n,{cx:_[e].x,cy:_[e].y})}if(f<1){let t=requestAnimationFrame(g);a.set(e,()=>cancelAnimationFrame(t))}else a.delete(e)}if(!f)t.setAttributes(u,{d:o(i,s.curve)});else{let t=requestAnimationFrame(g);a.set(e,()=>cancelAnimationFrame(t))}}function c(t,n,r){return t.some(e=>e.key==null)?e.warn(`computePoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?`):t.some(e=>typeof e.key==`string`)&&e.warn(`computePoints: string keys are not supported for line/area charts — use numeric or Date keys.`),t.map(e=>({x:n.map(e.key),y:r.map(e.value)}))}exports.computePoints=c,exports.renderLine=s;
|
|
2
|
+
//# sourceMappingURL=line-renderer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-renderer.cjs","names":[],"sources":["../../../src/charts/line/line-renderer.ts"],"sourcesContent":["import type { Point } from '../../svg/path';\nimport type { Datum, Scale, TransitionConfig } from '../../types';\n\nimport { warn } from '../../_dev';\nimport { resolveEasing } from '../../animation/easing';\nimport { tweenNumber } from '../../animation/tween';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { linePath, monotonePath, stepPath } from '../../svg/path';\n\nexport interface LineRenderOptions {\n color: string;\n curve: 'linear' | 'monotone' | 'step';\n /** Aborted when the owning chart is disposed — stops the transition's `requestAnimationFrame` loop from rescheduling. */\n disposalSignal?: AbortSignal;\n pointRadius: number;\n showPoints: boolean;\n strokeWidth: number;\n transition?: TransitionConfig;\n}\n\nconst activeAnimations = new WeakMap<SVGGElement, () => void>();\n\nfunction buildPath(pts: Point[], curve: LineRenderOptions['curve']): string {\n return curve === 'monotone' ? monotonePath(pts) : curve === 'step' ? stepPath(pts) : linePath(pts);\n}\n\nexport function renderLine(parent: SVGGElement, points: Point[], options: LineRenderOptions): void {\n const dur = options.transition?.duration ?? (options.transition ? 300 : 0);\n const easing = resolveEasing(options.transition?.easing);\n\n let path = parent.querySelector<SVGPathElement>('.prism-line-path');\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-line-path', fill: 'none' });\n parent.appendChild(path);\n }\n\n setAttributes(path, { stroke: options.color, 'stroke-width': options.strokeWidth });\n\n let dotsGroup = parent.querySelector<SVGGElement>('.prism-line-dots');\n\n if (options.showPoints) {\n if (!dotsGroup) {\n dotsGroup = createSvgElement('g', { class: 'prism-line-dots' });\n parent.appendChild(dotsGroup);\n }\n } else if (dotsGroup) {\n dotsGroup.remove();\n dotsGroup = null;\n }\n\n if (dur === 0) {\n setAttributes(path, { d: buildPath(points, options.curve) });\n\n if (dotsGroup) {\n while (dotsGroup.children.length > points.length) dotsGroup.removeChild(dotsGroup.lastChild!);\n\n for (let i = 0; i < points.length; i++) {\n let c = dotsGroup.children[i] as SVGCircleElement | undefined;\n\n if (!c) {\n c = createSvgElement('circle', { class: 'prism-line-dot' });\n dotsGroup.appendChild(c);\n }\n\n setAttributes(c, { cx: points[i].x, cy: points[i].y, fill: options.color, r: options.pointRadius });\n }\n }\n\n return;\n }\n\n activeAnimations.get(parent)?.();\n\n const hasExisting = !!path.getAttribute('d');\n\n const fromPts: Point[] = [];\n let lastKnown: Point | null = null;\n\n if (dotsGroup) {\n const existingCount = dotsGroup.children.length;\n\n for (let i = 0; i < existingCount; i++) {\n const c = dotsGroup.children[i] as SVGCircleElement;\n const pt = { x: Number(c.getAttribute('cx')), y: Number(c.getAttribute('cy')) };\n\n fromPts.push(pt);\n lastKnown = pt;\n }\n\n while (dotsGroup.children.length > points.length) dotsGroup.removeChild(dotsGroup.lastChild!);\n\n for (let i = dotsGroup.children.length; i < points.length; i++) {\n const c = createSvgElement('circle', { class: 'prism-line-dot' });\n\n setAttributes(c, { cx: points[i].x, cy: points[i].y, fill: options.color, r: options.pointRadius });\n dotsGroup.appendChild(c);\n }\n }\n\n for (let i = fromPts.length; i < points.length; i++) {\n fromPts.push(lastKnown ?? points[i]);\n }\n\n let startTime: number | null = null;\n\n function frame(ts: number) {\n if (options.disposalSignal?.aborted) {\n activeAnimations.delete(parent);\n\n return;\n }\n\n if (startTime === null) startTime = ts;\n\n const t = Math.min(1, (ts - startTime) / dur);\n const e = easing(t);\n const interpolated: Point[] = points.map((to, i) => {\n const from = fromPts[i] ?? to;\n\n return { x: tweenNumber(from.x, to.x, e), y: tweenNumber(from.y, to.y, e) };\n });\n\n setAttributes(path!, { d: buildPath(interpolated, options.curve) });\n\n if (dotsGroup) {\n for (let i = 0; i < points.length; i++) {\n const c = dotsGroup.children[i] as SVGCircleElement | undefined;\n\n if (c) setAttributes(c, { cx: interpolated[i].x, cy: interpolated[i].y });\n }\n }\n\n if (t < 1) {\n const id = requestAnimationFrame(frame);\n\n activeAnimations.set(parent, () => cancelAnimationFrame(id));\n } else {\n activeAnimations.delete(parent);\n }\n }\n\n if (!hasExisting) {\n setAttributes(path, { d: buildPath(points, options.curve) });\n } else {\n const id = requestAnimationFrame(frame);\n\n activeAnimations.set(parent, () => cancelAnimationFrame(id));\n }\n}\n\nexport function computePoints(data: Datum[], xScale: Scale<Date | number>, yScale: Scale<number>): Point[] {\n if (data.some((d) => d.key == null)) {\n warn(\n 'computePoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?',\n );\n } else if (data.some((d) => typeof d.key === 'string')) {\n warn('computePoints: string keys are not supported for line/area charts — use numeric or Date keys.');\n }\n\n return data.map((d) => ({\n x: xScale.map(d.key as Date | number),\n y: yScale.map(d.value),\n }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Point } from '../../svg/path';
|
|
2
|
+
import type { Datum, Scale, TransitionConfig } from '../../types';
|
|
3
|
+
export interface LineRenderOptions {
|
|
4
|
+
color: string;
|
|
5
|
+
curve: 'linear' | 'monotone' | 'step';
|
|
6
|
+
/** Aborted when the owning chart is disposed — stops the transition's `requestAnimationFrame` loop from rescheduling. */
|
|
7
|
+
disposalSignal?: AbortSignal;
|
|
8
|
+
pointRadius: number;
|
|
9
|
+
showPoints: boolean;
|
|
10
|
+
strokeWidth: number;
|
|
11
|
+
transition?: TransitionConfig;
|
|
12
|
+
}
|
|
13
|
+
export declare function renderLine(parent: SVGGElement, points: Point[], options: LineRenderOptions): void;
|
|
14
|
+
export declare function computePoints(data: Datum[], xScale: Scale<Date | number>, yScale: Scale<number>): Point[];
|
|
15
|
+
//# sourceMappingURL=line-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-renderer.d.ts","sourceRoot":"","sources":["../../../src/charts/line/line-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQlE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,yHAAyH;IACzH,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAQD,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CA2HjG;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CAazG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { warn as e } from "../../_dev.js";
|
|
2
|
+
import { createSvgElement as t, setAttributes as n } from "../../svg/element.js";
|
|
3
|
+
import { resolveEasing as r } from "../../animation/easing.js";
|
|
4
|
+
import { tweenNumber as i } from "../../animation/tween.js";
|
|
5
|
+
import { linePath as a, monotonePath as o, stepPath as s } from "../../svg/path.js";
|
|
6
|
+
//#region src/charts/line/line-renderer.ts
|
|
7
|
+
var c = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
function l(e, t) {
|
|
9
|
+
return t === "monotone" ? o(e) : t === "step" ? s(e) : a(e);
|
|
10
|
+
}
|
|
11
|
+
function u(e, a, o) {
|
|
12
|
+
let s = o.transition?.duration ?? (o.transition ? 300 : 0), u = r(o.transition?.easing), d = e.querySelector(".prism-line-path");
|
|
13
|
+
d || (d = t("path", {
|
|
14
|
+
class: "prism-line-path",
|
|
15
|
+
fill: "none"
|
|
16
|
+
}), e.appendChild(d)), n(d, {
|
|
17
|
+
stroke: o.color,
|
|
18
|
+
"stroke-width": o.strokeWidth
|
|
19
|
+
});
|
|
20
|
+
let f = e.querySelector(".prism-line-dots");
|
|
21
|
+
if (o.showPoints ? f || (f = t("g", { class: "prism-line-dots" }), e.appendChild(f)) : f &&= (f.remove(), null), s === 0) {
|
|
22
|
+
if (n(d, { d: l(a, o.curve) }), f) {
|
|
23
|
+
for (; f.children.length > a.length;) f.removeChild(f.lastChild);
|
|
24
|
+
for (let e = 0; e < a.length; e++) {
|
|
25
|
+
let r = f.children[e];
|
|
26
|
+
r || (r = t("circle", { class: "prism-line-dot" }), f.appendChild(r)), n(r, {
|
|
27
|
+
cx: a[e].x,
|
|
28
|
+
cy: a[e].y,
|
|
29
|
+
fill: o.color,
|
|
30
|
+
r: o.pointRadius
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
c.get(e)?.();
|
|
37
|
+
let p = !!d.getAttribute("d"), m = [], h = null;
|
|
38
|
+
if (f) {
|
|
39
|
+
let e = f.children.length;
|
|
40
|
+
for (let t = 0; t < e; t++) {
|
|
41
|
+
let e = f.children[t], n = {
|
|
42
|
+
x: Number(e.getAttribute("cx")),
|
|
43
|
+
y: Number(e.getAttribute("cy"))
|
|
44
|
+
};
|
|
45
|
+
m.push(n), h = n;
|
|
46
|
+
}
|
|
47
|
+
for (; f.children.length > a.length;) f.removeChild(f.lastChild);
|
|
48
|
+
for (let e = f.children.length; e < a.length; e++) {
|
|
49
|
+
let r = t("circle", { class: "prism-line-dot" });
|
|
50
|
+
n(r, {
|
|
51
|
+
cx: a[e].x,
|
|
52
|
+
cy: a[e].y,
|
|
53
|
+
fill: o.color,
|
|
54
|
+
r: o.pointRadius
|
|
55
|
+
}), f.appendChild(r);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (let e = m.length; e < a.length; e++) m.push(h ?? a[e]);
|
|
59
|
+
let g = null;
|
|
60
|
+
function _(t) {
|
|
61
|
+
if (o.disposalSignal?.aborted) {
|
|
62
|
+
c.delete(e);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
g === null && (g = t);
|
|
66
|
+
let r = Math.min(1, (t - g) / s), p = u(r), h = a.map((e, t) => {
|
|
67
|
+
let n = m[t] ?? e;
|
|
68
|
+
return {
|
|
69
|
+
x: i(n.x, e.x, p),
|
|
70
|
+
y: i(n.y, e.y, p)
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
if (n(d, { d: l(h, o.curve) }), f) for (let e = 0; e < a.length; e++) {
|
|
74
|
+
let t = f.children[e];
|
|
75
|
+
t && n(t, {
|
|
76
|
+
cx: h[e].x,
|
|
77
|
+
cy: h[e].y
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (r < 1) {
|
|
81
|
+
let t = requestAnimationFrame(_);
|
|
82
|
+
c.set(e, () => cancelAnimationFrame(t));
|
|
83
|
+
} else c.delete(e);
|
|
84
|
+
}
|
|
85
|
+
if (!p) n(d, { d: l(a, o.curve) });
|
|
86
|
+
else {
|
|
87
|
+
let t = requestAnimationFrame(_);
|
|
88
|
+
c.set(e, () => cancelAnimationFrame(t));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function d(t, n, r) {
|
|
92
|
+
return t.some((e) => e.key == null) ? e("computePoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?") : t.some((e) => typeof e.key == "string") && e("computePoints: string keys are not supported for line/area charts — use numeric or Date keys."), t.map((e) => ({
|
|
93
|
+
x: n.map(e.key),
|
|
94
|
+
y: r.map(e.value)
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
export { d as computePoints, u as renderLine };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=line-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-renderer.js","names":[],"sources":["../../../src/charts/line/line-renderer.ts"],"sourcesContent":["import type { Point } from '../../svg/path';\nimport type { Datum, Scale, TransitionConfig } from '../../types';\n\nimport { warn } from '../../_dev';\nimport { resolveEasing } from '../../animation/easing';\nimport { tweenNumber } from '../../animation/tween';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { linePath, monotonePath, stepPath } from '../../svg/path';\n\nexport interface LineRenderOptions {\n color: string;\n curve: 'linear' | 'monotone' | 'step';\n /** Aborted when the owning chart is disposed — stops the transition's `requestAnimationFrame` loop from rescheduling. */\n disposalSignal?: AbortSignal;\n pointRadius: number;\n showPoints: boolean;\n strokeWidth: number;\n transition?: TransitionConfig;\n}\n\nconst activeAnimations = new WeakMap<SVGGElement, () => void>();\n\nfunction buildPath(pts: Point[], curve: LineRenderOptions['curve']): string {\n return curve === 'monotone' ? monotonePath(pts) : curve === 'step' ? stepPath(pts) : linePath(pts);\n}\n\nexport function renderLine(parent: SVGGElement, points: Point[], options: LineRenderOptions): void {\n const dur = options.transition?.duration ?? (options.transition ? 300 : 0);\n const easing = resolveEasing(options.transition?.easing);\n\n let path = parent.querySelector<SVGPathElement>('.prism-line-path');\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-line-path', fill: 'none' });\n parent.appendChild(path);\n }\n\n setAttributes(path, { stroke: options.color, 'stroke-width': options.strokeWidth });\n\n let dotsGroup = parent.querySelector<SVGGElement>('.prism-line-dots');\n\n if (options.showPoints) {\n if (!dotsGroup) {\n dotsGroup = createSvgElement('g', { class: 'prism-line-dots' });\n parent.appendChild(dotsGroup);\n }\n } else if (dotsGroup) {\n dotsGroup.remove();\n dotsGroup = null;\n }\n\n if (dur === 0) {\n setAttributes(path, { d: buildPath(points, options.curve) });\n\n if (dotsGroup) {\n while (dotsGroup.children.length > points.length) dotsGroup.removeChild(dotsGroup.lastChild!);\n\n for (let i = 0; i < points.length; i++) {\n let c = dotsGroup.children[i] as SVGCircleElement | undefined;\n\n if (!c) {\n c = createSvgElement('circle', { class: 'prism-line-dot' });\n dotsGroup.appendChild(c);\n }\n\n setAttributes(c, { cx: points[i].x, cy: points[i].y, fill: options.color, r: options.pointRadius });\n }\n }\n\n return;\n }\n\n activeAnimations.get(parent)?.();\n\n const hasExisting = !!path.getAttribute('d');\n\n const fromPts: Point[] = [];\n let lastKnown: Point | null = null;\n\n if (dotsGroup) {\n const existingCount = dotsGroup.children.length;\n\n for (let i = 0; i < existingCount; i++) {\n const c = dotsGroup.children[i] as SVGCircleElement;\n const pt = { x: Number(c.getAttribute('cx')), y: Number(c.getAttribute('cy')) };\n\n fromPts.push(pt);\n lastKnown = pt;\n }\n\n while (dotsGroup.children.length > points.length) dotsGroup.removeChild(dotsGroup.lastChild!);\n\n for (let i = dotsGroup.children.length; i < points.length; i++) {\n const c = createSvgElement('circle', { class: 'prism-line-dot' });\n\n setAttributes(c, { cx: points[i].x, cy: points[i].y, fill: options.color, r: options.pointRadius });\n dotsGroup.appendChild(c);\n }\n }\n\n for (let i = fromPts.length; i < points.length; i++) {\n fromPts.push(lastKnown ?? points[i]);\n }\n\n let startTime: number | null = null;\n\n function frame(ts: number) {\n if (options.disposalSignal?.aborted) {\n activeAnimations.delete(parent);\n\n return;\n }\n\n if (startTime === null) startTime = ts;\n\n const t = Math.min(1, (ts - startTime) / dur);\n const e = easing(t);\n const interpolated: Point[] = points.map((to, i) => {\n const from = fromPts[i] ?? to;\n\n return { x: tweenNumber(from.x, to.x, e), y: tweenNumber(from.y, to.y, e) };\n });\n\n setAttributes(path!, { d: buildPath(interpolated, options.curve) });\n\n if (dotsGroup) {\n for (let i = 0; i < points.length; i++) {\n const c = dotsGroup.children[i] as SVGCircleElement | undefined;\n\n if (c) setAttributes(c, { cx: interpolated[i].x, cy: interpolated[i].y });\n }\n }\n\n if (t < 1) {\n const id = requestAnimationFrame(frame);\n\n activeAnimations.set(parent, () => cancelAnimationFrame(id));\n } else {\n activeAnimations.delete(parent);\n }\n }\n\n if (!hasExisting) {\n setAttributes(path, { d: buildPath(points, options.curve) });\n } else {\n const id = requestAnimationFrame(frame);\n\n activeAnimations.set(parent, () => cancelAnimationFrame(id));\n }\n}\n\nexport function computePoints(data: Datum[], xScale: Scale<Date | number>, yScale: Scale<number>): Point[] {\n if (data.some((d) => d.key == null)) {\n warn(\n 'computePoints: datum.key is null or undefined — data must use the Datum shape { key, value }. Did you pass { x, y } instead?',\n );\n } else if (data.some((d) => typeof d.key === 'string')) {\n warn('computePoints: string keys are not supported for line/area charts — use numeric or Date keys.');\n }\n\n return data.map((d) => ({\n x: xScale.map(d.key as Date | number),\n y: yScale.map(d.value),\n }));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-types.d.ts","sourceRoot":"","sources":["../../../src/charts/line/line-types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../svg/element.cjs"),t=require("../../core/chart-scaffold.cjs"),n=require("../../theme/index.cjs"),r=require("../../animation/easing.cjs"),i=require("../../animation/tween.cjs"),a=require("./pie-renderer.cjs");let o=require("@vielzeug/ripple");var s=2*Math.PI,c=-Math.PI/2,l=Math.PI/2;function u(e){return e===`semi`?{end:l,start:c}:{end:s,start:0}}function d(s,c){let l=c.variant??`pie`,d=c.padPixels??(l===`pie`?0:8),p=c.cornerRadius??(l===`pie`?0:8),m=e.createSvgElement(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),h=e.createSvgElement(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),g=e.createSvgElement(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),_=[],v=null;function y(t){for(;g.children.length>_.length;)g.removeChild(g.lastChild);for(let n=0;n<_.length;n++){let r=_[n],i=t[n];if(!i?.label)continue;let{x:o,y:s}=a.arcCentroid(r),c=g.children[n];c||(c=e.createSvgElement(`text`,{class:`prism-pie-label`}),g.appendChild(c)),e.setAttributes(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:o,y:s}),c.textContent=i.label}}let b=t.createRadialScaffold(s,{ariaLabel:c.ariaLabel,legend:c.legend,plugins:c.plugins,tooltip:c.tooltip},t=>{let{legend:b,svg:x,tooltip:S}=t;x.contains(m)||(x.appendChild(m),x.appendChild(h),x.appendChild(g));let{height:C,width:w}=t.dimensions.value,T=l===`semi`,E=w/2,D=T?C*.85:C/2,O=T?Math.min(E,D)-8:Math.min(w,C)/2-8,k=l===`pie`?0:Math.round(O*.55),A=c.innerRadius===void 0?k:c.innerRadius,j=Math.max(A+1,O),M=(0,o.isReactive)(c.data)?c.data.value:c.data,{end:N,start:P}=u(l);for(_=a.computeArcs(M,E,D,j,A,P,N,d,p,e=>n.seriesColor(e),!1),e.setAttributes(m,{cx:E,cy:D,r:A>0?A:0}),m.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);h.children.length>_.length;)h.removeChild(h.lastChild);for(;g.children.length>_.length;)g.removeChild(g.lastChild);let F=c.transition?.duration??400,I=r.resolveEasing(c.transition?.easing);for(let t=0;t<_.length;t++){let n=_[t],r=h.children[t];r||(r=e.createSvgElement(`path`,{class:`prism-pie-slice`}),h.appendChild(r)),r.setAttribute(`fill`,n.color),r.setAttribute(`stroke`,`none`),r.style.cursor=c.onClick||c.onHover?`pointer`:``}if(v!==null&&(cancelAnimationFrame(v),v=null),F>0){let t=null,n=r=>{t===null&&(t=r);let o=I(Math.min(1,(r-t)/F)),s=i.tweenNumber(P,N,o);for(let t=0;t<_.length;t++){let n=_[t],r=h.children[t];if(r)if(s<=n.startAngle)e.setAttributes(r,{d:``});else{let t=Math.min(n.endAngle,s);e.setAttributes(r,{d:a.arcPath({...n,endAngle:t})})}}o<1?v=requestAnimationFrame(n):(v=null,y(M))};v=requestAnimationFrame(n)}else{for(let t=0;t<_.length;t++){let n=_[t],r=h.children[t];r&&e.setAttributes(r,{d:a.arcPath(n)})}y(M)}return b?.update(_.map(e=>({color:e.color,name:e.slice.label??``}))),S?.hide(),{onClick:e=>{if(!c.onClick)return;let t=x.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=f(_,n,r,l);i>=0&&c.onClick(_[i].slice,i)},onMouseLeave:()=>{c.onHover?.(null,null),S?.hide()},onMouseMove:e=>{let t=x.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=f(_,n,r,l);if(i>=0){let e=_[i];c.onHover?.(e.slice,i);let{x:n,y:r}=a.arcCentroid(e),o=s.getBoundingClientRect();S?.show(n+(t.left-o.left),r+(t.top-o.top),{key:i,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else c.onHover?.(null,null),S?.hide()}}});return{get disposalSignal(){return b.disposalSignal},dispose(){v!==null&&(cancelAnimationFrame(v),v=null),b.dispose()},get disposed(){return b.disposed},el:b.el,[Symbol.dispose](){this.dispose()}}}function f(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i],o=t-a.centerX,c=n-a.centerY,l=Math.sqrt(o*o+c*c);if(l<a.outerRadius&&l>=a.innerRadius){let e=Math.atan2(o,-c);if(r===`semi`){if(e>=a.startAngle-1e-9&&e<=a.endAngle+1e-9)return i}else{let t=e<0?e+s:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}exports.createPieChart=d;
|
|
2
|
+
//# sourceMappingURL=pie-chart.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pie-chart.cjs","names":[],"sources":["../../../src/charts/pie/pie-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\n\nimport type { ChartEventHandlers } from '../../core/chart-scaffold';\nimport type { ChartHandle, PieChartConfig, PieSliceConfig } from '../../types';\n\nimport { resolveEasing } from '../../animation/easing';\nimport { tweenNumber } from '../../animation/tween';\nimport { createRadialScaffold } from '../../core/chart-scaffold';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport { type Arc, arcCentroid, arcPath, computeArcs } from './pie-renderer';\n\nconst TWO_PI = 2 * Math.PI;\n\nconst SEMI_START = -Math.PI / 2; // -90° = 9-o'clock (left)\nconst SEMI_END = Math.PI / 2; // +90° = 3-o'clock (right) → true 180° half-circle\n\nfunction semiAngles(variant: PieChartConfig['variant']): { end: number; start: number } {\n return variant === 'semi' ? { end: SEMI_END, start: SEMI_START } : { end: TWO_PI, start: 0 };\n}\n\nexport function createPieChart(container: HTMLElement, config: PieChartConfig): ChartHandle {\n const variant = config.variant ?? 'pie';\n const padPixels = config.padPixels ?? (variant === 'pie' ? 0 : 8);\n const cornerRadius = config.cornerRadius ?? (variant === 'pie' ? 0 : 8);\n\n // Pie SVG elements live directly on the SVG (not inside chartArea groups).\n // We create them once and reuse across renders.\n const bgCircle = createSvgElement('circle', { class: 'prism-pie-bg', 'pointer-events': 'none' });\n const pieGroup = createSvgElement('g', {\n class: 'prism-pie-slices',\n 'shape-rendering': 'geometricPrecision',\n });\n const labelGroup = createSvgElement('g', { class: 'prism-pie-labels', 'pointer-events': 'none' });\n\n // Current arcs shared between renderFn and event handlers via closure.\n let currentArcs: Arc[] = [];\n let activeRaf: number | null = null;\n\n function renderLabels(slices: PieSliceConfig[]): void {\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n const slice = slices[i];\n\n if (!slice?.label) continue;\n\n const { x, y } = arcCentroid(arc);\n let text = labelGroup.children[i] as SVGTextElement | undefined;\n\n if (!text) {\n text = createSvgElement('text', { class: 'prism-pie-label' });\n labelGroup.appendChild(text);\n }\n\n setAttributes(text, {\n 'dominant-baseline': 'middle',\n fill: 'var(--prism-pie-label-color, #fff)',\n 'font-family': 'var(--prism-font-family, system-ui)',\n 'font-size': 'var(--prism-pie-label-size, 12px)',\n 'text-anchor': 'middle',\n x,\n y,\n });\n\n text.textContent = slice.label;\n }\n }\n\n const handle = createRadialScaffold(\n container,\n { ariaLabel: config.ariaLabel, legend: config.legend, plugins: config.plugins, tooltip: config.tooltip },\n (ctx): ChartEventHandlers => {\n const { legend, svg, tooltip } = ctx;\n\n // Append pie groups to SVG on first render (idempotent).\n if (!svg.contains(bgCircle)) {\n svg.appendChild(bgCircle);\n svg.appendChild(pieGroup);\n svg.appendChild(labelGroup);\n }\n\n const { height: h, width: w } = ctx.dimensions.value;\n const isSemi = variant === 'semi';\n const cx = w / 2;\n const cy = isSemi ? h * 0.85 : h / 2;\n const padding = 8;\n const outer = isSemi ? Math.min(cx, cy) - padding : Math.min(w, h) / 2 - padding;\n const defaultInner = variant === 'pie' ? 0 : Math.round(outer * 0.55);\n const inner = config.innerRadius !== undefined ? config.innerRadius : defaultInner;\n const outerR = Math.max(inner + 1, outer);\n\n const slices = isReactive(config.data) ? config.data.value : config.data;\n const { end, start } = semiAngles(variant);\n\n currentArcs = computeArcs(\n slices,\n cx,\n cy,\n outerR,\n inner,\n start,\n end,\n padPixels,\n cornerRadius,\n (i) => seriesColor(i),\n false,\n );\n\n setAttributes(bgCircle, { cx, cy, r: inner > 0 ? inner : 0 });\n bgCircle.setAttribute('style', 'fill:var(--prism-bg,#fff)');\n\n while (pieGroup.children.length > currentArcs.length) pieGroup.removeChild(pieGroup.lastChild!);\n\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n const dur = config.transition?.duration ?? 400;\n const easing = resolveEasing(config.transition?.easing);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n let path = pieGroup.children[i] as SVGPathElement | undefined;\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-pie-slice' });\n pieGroup.appendChild(path);\n }\n\n path.setAttribute('fill', arc.color);\n path.setAttribute('stroke', 'none');\n path.style.cursor = config.onClick || config.onHover ? 'pointer' : '';\n }\n\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n if (dur > 0) {\n let rafStart: number | null = null;\n\n const frame = (ts: number) => {\n if (rafStart === null) rafStart = ts;\n\n const t = easing(Math.min(1, (ts - rafStart) / dur));\n const revealAngle = tweenNumber(start, end, t);\n\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (!el) continue;\n\n if (revealAngle <= a.startAngle) {\n setAttributes(el, { d: '' });\n } else {\n const visibleEnd = Math.min(a.endAngle, revealAngle);\n\n setAttributes(el, { d: arcPath({ ...a, endAngle: visibleEnd }) });\n }\n }\n\n if (t < 1) {\n activeRaf = requestAnimationFrame(frame);\n } else {\n activeRaf = null;\n renderLabels(slices);\n }\n };\n\n activeRaf = requestAnimationFrame(frame);\n } else {\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (el) setAttributes(el, { d: arcPath(a) });\n }\n\n renderLabels(slices);\n }\n\n legend?.update(currentArcs.map((arc) => ({ color: arc.color, name: arc.slice.label ?? '' })));\n tooltip?.hide();\n\n const onMouseMove = (e: MouseEvent): void => {\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) {\n const arc = currentArcs[hit];\n\n config.onHover?.(arc.slice, hit);\n\n const { x, y } = arcCentroid(arc);\n const contR = container.getBoundingClientRect();\n\n tooltip?.show(\n x + (svgRect.left - contR.left),\n y + (svgRect.top - contR.top),\n { key: hit, value: arc.slice.value },\n { color: arc.color, data: [], name: arc.slice.label ?? '' },\n );\n } else {\n config.onHover?.(null, null);\n tooltip?.hide();\n }\n };\n\n const onMouseLeave = (): void => {\n config.onHover?.(null, null);\n tooltip?.hide();\n };\n\n const onClick = (e: MouseEvent): void => {\n if (!config.onClick) return;\n\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) config.onClick(currentArcs[hit].slice, hit);\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n },\n );\n\n return {\n get disposalSignal(): AbortSignal {\n return handle.disposalSignal;\n },\n\n dispose() {\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n handle.dispose();\n },\n\n get disposed(): boolean {\n return handle.disposed;\n },\n\n el: handle.el,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction hitTestArc(arcs: Arc[], mx: number, my: number, variant: PieChartConfig['variant']): number {\n for (let i = 0; i < arcs.length; i++) {\n const arc = arcs[i];\n const dx = mx - arc.centerX;\n const dy = my - arc.centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n\n if (dist < arc.outerRadius && dist >= arc.innerRadius) {\n const rawAngle = Math.atan2(dx, -dy);\n\n if (variant === 'semi') {\n if (rawAngle >= arc.startAngle - 1e-9 && rawAngle <= arc.endAngle + 1e-9) return i;\n } else {\n const angle = rawAngle < 0 ? rawAngle + TWO_PI : rawAngle;\n\n if (angle >= arc.startAngle - 1e-9 && angle <= arc.endAngle + 1e-9) return i;\n }\n }\n }\n\n return -1;\n}\n"],"mappings":"wQAYA,IAAM,EAAS,EAAI,KAAK,GAElB,EAAa,CAAC,KAAK,GAAK,EACxB,EAAW,KAAK,GAAK,EAE3B,SAAS,EAAW,EAAoE,CACtF,OAAO,IAAY,OAAS,CAAE,IAAK,EAAU,MAAO,CAAW,EAAI,CAAE,IAAK,EAAQ,MAAO,CAAE,CAC7F,CAEA,SAAgB,EAAe,EAAwB,EAAqC,CAC1F,IAAM,EAAU,EAAO,SAAW,MAC5B,EAAY,EAAO,YAAc,IAAY,MAAQ,EAAI,GACzD,EAAe,EAAO,eAAiB,IAAY,MAAQ,EAAI,GAI/D,EAAW,EAAA,iBAAiB,SAAU,CAAE,MAAO,eAAgB,iBAAkB,MAAO,CAAC,EACzF,EAAW,EAAA,iBAAiB,IAAK,CACrC,MAAO,mBACP,kBAAmB,oBACrB,CAAC,EACK,EAAa,EAAA,iBAAiB,IAAK,CAAE,MAAO,mBAAoB,iBAAkB,MAAO,CAAC,EAG5F,EAAqB,CAAC,EACtB,EAA2B,KAE/B,SAAS,EAAa,EAAgC,CACpD,KAAO,EAAW,SAAS,OAAS,EAAY,QAAQ,EAAW,YAAY,EAAW,SAAU,EAEpG,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,IAAM,EAAM,EAAY,GAClB,EAAQ,EAAO,GAErB,GAAI,CAAC,GAAO,MAAO,SAEnB,GAAM,CAAE,IAAG,KAAM,EAAA,YAAY,CAAG,EAC5B,EAAO,EAAW,SAAS,GAE1B,IACH,EAAO,EAAA,iBAAiB,OAAQ,CAAE,MAAO,iBAAkB,CAAC,EAC5D,EAAW,YAAY,CAAI,GAG7B,EAAA,cAAc,EAAM,CAClB,oBAAqB,SACrB,KAAM,qCACN,cAAe,sCACf,YAAa,oCACb,cAAe,SACf,IACA,GACF,CAAC,EAED,EAAK,YAAc,EAAM,KAC3B,CACF,CAEA,IAAM,EAAS,EAAA,qBACb,EACA,CAAE,UAAW,EAAO,UAAW,OAAQ,EAAO,OAAQ,QAAS,EAAO,QAAS,QAAS,EAAO,OAAQ,EACtG,GAA4B,CAC3B,GAAM,CAAE,SAAQ,MAAK,WAAY,EAG5B,EAAI,SAAS,CAAQ,IACxB,EAAI,YAAY,CAAQ,EACxB,EAAI,YAAY,CAAQ,EACxB,EAAI,YAAY,CAAU,GAG5B,GAAM,CAAE,OAAQ,EAAG,MAAO,GAAM,EAAI,WAAW,MACzC,EAAS,IAAY,OACrB,EAAK,EAAI,EACT,EAAK,EAAS,EAAI,IAAO,EAAI,EAE7B,EAAQ,EAAS,KAAK,IAAI,EAAI,CAAE,EAAI,EAAU,KAAK,IAAI,EAAG,CAAC,EAAI,EAAI,EACnE,EAAe,IAAY,MAAQ,EAAI,KAAK,MAAM,EAAQ,GAAI,EAC9D,EAAQ,EAAO,cAAgB,IAAA,GAAiC,EAArB,EAAO,YAClD,EAAS,KAAK,IAAI,EAAQ,EAAG,CAAK,EAElC,GAAA,EAAA,EAAA,WAAA,CAAoB,EAAO,IAAI,EAAI,EAAO,KAAK,MAAQ,EAAO,KAC9D,CAAE,MAAK,SAAU,EAAW,CAAO,EAmBzC,IAjBA,EAAc,EAAA,YACZ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACC,GAAM,EAAA,YAAY,CAAC,EACpB,EACF,EAEA,EAAA,cAAc,EAAU,CAAE,KAAI,KAAI,EAAG,EAAQ,EAAI,EAAQ,CAAE,CAAC,EAC5D,EAAS,aAAa,QAAS,2BAA2B,EAEnD,EAAS,SAAS,OAAS,EAAY,QAAQ,EAAS,YAAY,EAAS,SAAU,EAE9F,KAAO,EAAW,SAAS,OAAS,EAAY,QAAQ,EAAW,YAAY,EAAW,SAAU,EAEpG,IAAM,EAAM,EAAO,YAAY,UAAY,IACrC,EAAS,EAAA,cAAc,EAAO,YAAY,MAAM,EAEtD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,IAAM,EAAM,EAAY,GACpB,EAAO,EAAS,SAAS,GAExB,IACH,EAAO,EAAA,iBAAiB,OAAQ,CAAE,MAAO,iBAAkB,CAAC,EAC5D,EAAS,YAAY,CAAI,GAG3B,EAAK,aAAa,OAAQ,EAAI,KAAK,EACnC,EAAK,aAAa,SAAU,MAAM,EAClC,EAAK,MAAM,OAAS,EAAO,SAAW,EAAO,QAAU,UAAY,EACrE,CAOA,GALI,IAAc,OAChB,qBAAqB,CAAS,EAC9B,EAAY,MAGV,EAAM,EAAG,CACX,IAAI,EAA0B,KAExB,EAAS,GAAe,CACxB,IAAa,OAAM,EAAW,GAElC,IAAM,EAAI,EAAO,KAAK,IAAI,GAAI,EAAK,GAAY,CAAG,CAAC,EAC7C,EAAc,EAAA,YAAY,EAAO,EAAK,CAAC,EAE7C,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,IAAM,EAAI,EAAY,GAChB,EAAK,EAAS,SAAS,GAExB,KAEL,GAAI,GAAe,EAAE,WACnB,EAAA,cAAc,EAAI,CAAE,EAAG,EAAG,CAAC,MACtB,CACL,IAAM,EAAa,KAAK,IAAI,EAAE,SAAU,CAAW,EAEnD,EAAA,cAAc,EAAI,CAAE,EAAG,EAAA,QAAQ,CAAE,GAAG,EAAG,SAAU,CAAW,CAAC,CAAE,CAAC,CAClE,CACF,CAEI,EAAI,EACN,EAAY,sBAAsB,CAAK,GAEvC,EAAY,KACZ,EAAa,CAAM,EAEvB,EAEA,EAAY,sBAAsB,CAAK,CACzC,KAAO,CACL,IAAK,IAAI,EAAI,EAAG,EAAI,EAAY,OAAQ,IAAK,CAC3C,IAAM,EAAI,EAAY,GAChB,EAAK,EAAS,SAAS,GAEzB,GAAI,EAAA,cAAc,EAAI,CAAE,EAAG,EAAA,QAAQ,CAAC,CAAE,CAAC,CAC7C,CAEA,EAAa,CAAM,CACrB,CA+CA,OA7CA,GAAQ,OAAO,EAAY,IAAK,IAAS,CAAE,MAAO,EAAI,MAAO,KAAM,EAAI,MAAM,OAAS,EAAG,EAAE,CAAC,EAC5F,GAAS,KAAK,EA4CP,CAAE,QAXQ,GAAwB,CACvC,GAAI,CAAC,EAAO,QAAS,OAErB,IAAM,EAAU,EAAI,sBAAsB,EACpC,EAAK,EAAE,QAAU,EAAQ,KACzB,EAAK,EAAE,QAAU,EAAQ,IACzB,EAAM,EAAW,EAAa,EAAI,EAAI,CAAO,EAE/C,GAAO,GAAG,EAAO,QAAQ,EAAY,EAAI,CAAC,MAAO,CAAG,CAC1D,EAEkB,iBAhBe,CAC/B,EAAO,UAAU,KAAM,IAAI,EAC3B,GAAS,KAAK,CAChB,EAagC,YA1CX,GAAwB,CAC3C,IAAM,EAAU,EAAI,sBAAsB,EACpC,EAAK,EAAE,QAAU,EAAQ,KACzB,EAAK,EAAE,QAAU,EAAQ,IACzB,EAAM,EAAW,EAAa,EAAI,EAAI,CAAO,EAEnD,GAAI,GAAO,EAAG,CACZ,IAAM,EAAM,EAAY,GAExB,EAAO,UAAU,EAAI,MAAO,CAAG,EAE/B,GAAM,CAAE,IAAG,KAAM,EAAA,YAAY,CAAG,EAC1B,EAAQ,EAAU,sBAAsB,EAE9C,GAAS,KACP,GAAK,EAAQ,KAAO,EAAM,MAC1B,GAAK,EAAQ,IAAM,EAAM,KACzB,CAAE,IAAK,EAAK,MAAO,EAAI,MAAM,KAAM,EACnC,CAAE,MAAO,EAAI,MAAO,KAAM,CAAC,EAAG,KAAM,EAAI,MAAM,OAAS,EAAG,CAC5D,CACF,MACE,EAAO,UAAU,KAAM,IAAI,EAC3B,GAAS,KAAK,CAElB,CAkB4C,CAC9C,CACF,EAEA,MAAO,CACL,IAAI,gBAA8B,CAChC,OAAO,EAAO,cAChB,EAEA,SAAU,CACJ,IAAc,OAChB,qBAAqB,CAAS,EAC9B,EAAY,MAGd,EAAO,QAAQ,CACjB,EAEA,IAAI,UAAoB,CACtB,OAAO,EAAO,QAChB,EAEA,GAAI,EAAO,GAEX,CAAC,OAAO,UAAW,CACjB,KAAK,QAAQ,CACf,CACF,CACF,CAEA,SAAS,EAAW,EAAa,EAAY,EAAY,EAA4C,CACnG,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,IAAM,EAAM,EAAK,GACX,EAAK,EAAK,EAAI,QACd,EAAK,EAAK,EAAI,QACd,EAAO,KAAK,KAAK,EAAK,EAAK,EAAK,CAAE,EAExC,GAAI,EAAO,EAAI,aAAe,GAAQ,EAAI,YAAa,CACrD,IAAM,EAAW,KAAK,MAAM,EAAI,CAAC,CAAE,EAEnC,GAAI,IAAY,WACV,GAAY,EAAI,WAAa,MAAQ,GAAY,EAAI,SAAW,KAAM,OAAO,CAAA,KAC5E,CACL,IAAM,EAAQ,EAAW,EAAI,EAAW,EAAS,EAEjD,GAAI,GAAS,EAAI,WAAa,MAAQ,GAAS,EAAI,SAAW,KAAM,OAAO,CAC7E,CACF,CACF,CAEA,MAAO,EACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pie-chart.d.ts","sourceRoot":"","sources":["../../../src/charts/pie/pie-chart.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAkB/E,wBAAgB,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,CA2O1F"}
|