@vielzeug/prism 1.1.7 → 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,77 +1,77 @@
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 { linearScale as a } from "../../scales/linear.js";
6
- import { chartArea as o } from "../../core/layout.js";
7
- import { clearCartesianDom as s, createChartScaffold as c } from "../../core/chart-scaffold.js";
8
- import { getMousePosition as l } from "../../interaction/events.js";
9
- import { seriesColor as u } from "../../theme/index.js";
10
- import { bandScale as d } from "../../scales/band.js";
11
- import { findCatIdx as f, findSeriesIdx as p, isOutsideBars as m } from "./bar-hit-test.js";
12
- import { renderBars as h } from "./bar-renderer.js";
13
- import { isReactive as g } from "@vielzeug/ripple";
1
+ import "../../_dev.js";
2
+ import { createSvgElement as e } from "../../svg/element.js";
3
+ import { renderAxis as t, resolveTickCount as n } from "../../axes/axis.js";
4
+ import { renderGrid as r } from "../../axes/grid.js";
5
+ import { linearScale as i } from "../../scales/linear.js";
6
+ import { chartArea as a } from "../../core/layout.js";
7
+ import { clearCartesianDom as o, createChartScaffold as s } from "../../core/chart-scaffold.js";
8
+ import { getMousePosition as c } from "../../interaction/events.js";
9
+ import { seriesColor as l } from "../../theme/index.js";
10
+ import { bandScale as u } from "../../scales/band.js";
11
+ import { findCatIdx as d, findSeriesIdx as f, isOutsideBars as p } from "./bar-hit-test.js";
12
+ import { renderBars as m } from "./bar-renderer.js";
13
+ import { isReactive as h } from "@vielzeug/ripple";
14
14
  //#region src/charts/bar/bar-chart.ts
15
- function _(e) {
15
+ function g(e) {
16
16
  return {
17
17
  horizontal: e === "grouped-horizontal" || e === "stacked-horizontal",
18
18
  stacked: e === "stacked" || e === "stacked-horizontal"
19
19
  };
20
20
  }
21
- function v(v, y) {
22
- return c(v, y, (c) => {
23
- let { groups: v, legend: b, tooltip: x } = c, S = c.dimensions.value, C = o(S.width, S.height, S.margin), w = g(y.series) ? y.series.value : y.series, T = w.map((e) => g(e.data) ? e.data.value : e.data), E = [...new Set(T.flat().map((e) => String(e.key)))];
24
- if (E.length === 0) {
25
- e("createBarChart: no data"), s(v, b, x);
21
+ function _(_, v) {
22
+ return s(_, v, (s) => {
23
+ let { groups: _, legend: y, tooltip: b } = s, x = s.dimensions.value, S = a(x.width, x.height, x.margin), C = h(v.series) ? v.series.value : v.series, w = C.map((e) => h(e.data) ? e.data.value : e.data), T = [...new Set(w.flat().map((e) => String(e.key)))];
24
+ if (T.length === 0) {
25
+ o(_, y, b);
26
26
  return;
27
27
  }
28
- let { horizontal: D, stacked: O } = _(y.variant ?? "grouped"), k, A;
29
- if (O) {
30
- T.some((e) => e.some((e) => e.value < 0)) && e("createBarChart: negative values in a stacked/stacked-horizontal series are clamped to 0 — stacking mixed-sign data is not supported.");
31
- let t = E.map((e) => T.reduce((t, n) => {
28
+ let { horizontal: E, stacked: D } = g(v.variant ?? "grouped"), O, k;
29
+ if (D) {
30
+ w.some((e) => e.some((e) => e.value < 0));
31
+ let e = T.map((e) => w.reduce((t, n) => {
32
32
  let r = n.find((t) => String(t.key) === e);
33
33
  return t + (r ? Math.max(0, r.value) : 0);
34
34
  }, 0));
35
- k = Math.max(...t), A = 0;
35
+ O = Math.max(...e), k = 0;
36
36
  } else {
37
- let e = T.flat().map((e) => e.value);
38
- k = Math.max(...e), A = Math.min(0, ...e);
37
+ let e = w.flat().map((e) => e.value);
38
+ O = Math.max(...e), k = Math.min(0, ...e);
39
39
  }
40
- let j = d(D ? {
41
- domain: E,
42
- range: [0, C.height]
40
+ let A = u(E ? {
41
+ domain: T,
42
+ range: [0, S.height]
43
43
  } : {
44
- domain: E,
45
- range: [0, C.width]
46
- }), M = a(D ? {
47
- domain: [A, k],
48
- range: [0, C.width]
44
+ domain: T,
45
+ range: [0, S.width]
46
+ }), j = i(E ? {
47
+ domain: [k, O],
48
+ range: [0, S.width]
49
49
  } : {
50
- domain: [A, k],
51
- range: [C.height, 0]
52
- }), N = [], P = Object.create(null);
53
- for (let e of E) P[e] = 0;
54
- let F = {
55
- bandCenter: (e) => j.map(e) + j.bandwidth() / 2,
56
- bandwidth: j.bandwidth(),
57
- baselinePx: M.map(0),
58
- horizontal: D,
59
- stacked: O,
60
- stackedTops: N,
61
- valueScale: M
50
+ domain: [k, O],
51
+ range: [S.height, 0]
52
+ }), M = [], N = Object.create(null);
53
+ for (let e of T) N[e] = 0;
54
+ let P = {
55
+ bandCenter: (e) => A.map(e) + A.bandwidth() / 2,
56
+ bandwidth: A.bandwidth(),
57
+ baselinePx: j.map(0),
58
+ horizontal: E,
59
+ stacked: D,
60
+ stackedTops: M,
61
+ valueScale: j
62
62
  };
63
- for (D ? (y.xAxis?.grid && i(v.grid, M, y.xAxis.grid, C.height, "vertical", r(y.xAxis, C.width, "bottom")), y.yAxis && n(v.yAxis, j, y.yAxis, C.height, "left"), y.xAxis && (v.xAxis.setAttribute("transform", `translate(0,${C.height})`), n(v.xAxis, M, y.xAxis, C.width, "bottom"))) : (y.yAxis?.grid && i(v.grid, M, y.yAxis.grid, C.width, "horizontal", r(y.yAxis, C.height, "left")), y.xAxis && (v.xAxis.setAttribute("transform", `translate(0,${C.height})`), n(v.xAxis, j, y.xAxis, C.width, "bottom")), y.yAxis && n(v.yAxis, M, y.yAxis, C.height, "left")); v.series.children.length > w.length;) {
64
- let e = v.series.lastElementChild;
65
- e && v.series.removeChild(e);
63
+ for (E ? (v.xAxis?.grid && r(_.grid, j, v.xAxis.grid, S.height, "vertical", n(v.xAxis, S.width, "bottom")), v.yAxis && t(_.yAxis, A, v.yAxis, S.height, "left"), v.xAxis && (_.xAxis.setAttribute("transform", `translate(0,${S.height})`), t(_.xAxis, j, v.xAxis, S.width, "bottom"))) : (v.yAxis?.grid && r(_.grid, j, v.yAxis.grid, S.width, "horizontal", n(v.yAxis, S.height, "left")), v.xAxis && (_.xAxis.setAttribute("transform", `translate(0,${S.height})`), t(_.xAxis, A, v.xAxis, S.width, "bottom")), v.yAxis && t(_.yAxis, j, v.yAxis, S.height, "left")); _.series.children.length > C.length;) {
64
+ let e = _.series.lastElementChild;
65
+ e && _.series.removeChild(e);
66
66
  }
67
- for (let e = 0; e < w.length; e++) {
68
- let n = w[e], r = v.series.children[e];
69
- r || (r = t("g", { class: "prism-bar-series" }), v.series.appendChild(r));
70
- let i = T[e].map((e) => {
67
+ for (let t = 0; t < C.length; t++) {
68
+ let n = C[t], r = _.series.children[t];
69
+ r || (r = e("g", { class: "prism-bar-series" }), _.series.appendChild(r));
70
+ let i = w[t].map((e) => {
71
71
  let t = String(e.key);
72
- if (O) {
73
- let n = P[t] ?? 0, r = n + Math.max(0, e.value);
74
- return P[t] = r, {
72
+ if (D) {
73
+ let n = N[t] ?? 0, r = n + Math.max(0, e.value);
74
+ return N[t] = r, {
75
75
  base: n,
76
76
  key: t,
77
77
  y: r
@@ -83,62 +83,62 @@ function v(v, y) {
83
83
  y: e.value
84
84
  };
85
85
  });
86
- N[e] = i.map((e) => e.y);
87
- let a = O ? i.map((e) => M.map(e.base)) : void 0;
88
- h(r, i, j, M, F.baselinePx, {
86
+ M[t] = i.map((e) => e.y);
87
+ let a = D ? i.map((e) => j.map(e.base)) : void 0;
88
+ m(r, i, A, j, P.baselinePx, {
89
89
  baselineYs: a,
90
90
  borderRadius: n.borderRadius ?? 0,
91
- color: u(e, n.color),
92
- disposalSignal: c.disposalSignal,
93
- horizontal: D,
94
- seriesCount: w.length,
95
- seriesIndex: e,
96
- stacked: O,
97
- transition: y.transition
91
+ color: l(t, n.color),
92
+ disposalSignal: s.disposalSignal,
93
+ horizontal: E,
94
+ seriesCount: C.length,
95
+ seriesIndex: t,
96
+ stacked: D,
97
+ transition: v.transition
98
98
  });
99
99
  }
100
- return b?.update(w.map((e, t) => ({
101
- color: u(t, e.color),
100
+ return y?.update(C.map((e, t) => ({
101
+ color: l(t, e.color),
102
102
  name: e.name
103
- }))), x?.hide(), {
103
+ }))), b?.hide(), {
104
104
  onClick: (e) => {
105
- if (!y.onClick) return;
106
- let t = c.dimensions.value, n = l(c.svg, e, t.margin.left, t.margin.top), r = o(t.width, t.height, t.margin);
105
+ if (!v.onClick) return;
106
+ let t = s.dimensions.value, n = c(s.svg, e, t.margin.left, t.margin.top), r = a(t.width, t.height, t.margin);
107
107
  if (n.x < 0 || n.x > r.width || n.y < 0 || n.y > r.height) return;
108
- let i = f(D ? n.y : n.x, E, F);
109
- if (i === -1) return;
110
- let a = p(n, i, E, F, w.length), s = T[a]?.[i];
111
- s && y.onClick({
112
- datum: s,
108
+ let i = E ? n.y : n.x, o = d(i, T, P);
109
+ if (o === -1) return;
110
+ let l = f(n, o, T, P, C.length), u = w[l]?.[o];
111
+ u && v.onClick({
112
+ datum: u,
113
113
  originalEvent: e,
114
- series: w[a]
114
+ series: C[l]
115
115
  });
116
116
  },
117
117
  onMouseLeave: () => {
118
- x?.hide(), y.onHover?.(null);
118
+ b?.hide(), v.onHover?.(null);
119
119
  },
120
120
  onMouseMove: (e) => {
121
- let t = c.dimensions.value, n = l(c.svg, e, t.margin.left, t.margin.top), r = o(t.width, t.height, t.margin);
121
+ let t = s.dimensions.value, n = c(s.svg, e, t.margin.left, t.margin.top), r = a(t.width, t.height, t.margin);
122
122
  if (n.x < 0 || n.x > r.width || n.y < 0 || n.y > r.height) {
123
- x?.hide();
123
+ b?.hide();
124
124
  return;
125
125
  }
126
- let i = f(D ? n.y : n.x, E, F);
127
- if (i === -1) {
128
- x?.hide();
126
+ let i = E ? n.y : n.x, o = d(i, T, P);
127
+ if (o === -1) {
128
+ b?.hide();
129
129
  return;
130
130
  }
131
- if (m(n, i, T, F, w.length)) {
132
- x?.hide();
131
+ if (p(n, o, w, P, C.length)) {
132
+ b?.hide();
133
133
  return;
134
134
  }
135
- let a = p(n, i, E, F, w.length), s = T[a]?.[i];
136
- if (s) {
137
- let n = F.bandCenter(E[i]), r = O ? N[a]?.[i] ?? s.value : s.value, o = M.map(r), c = D ? o + t.margin.left : n + t.margin.left, l = D ? n + t.margin.top : o + t.margin.top;
138
- x?.show(c, l, s, w[a]), y.onHover?.({
139
- datum: s,
135
+ let l = f(n, o, T, P, C.length), u = w[l]?.[o];
136
+ if (u) {
137
+ let n = P.bandCenter(T[o]), r = D ? M[l]?.[o] ?? u.value : u.value, i = j.map(r), a = E ? i + t.margin.left : n + t.margin.left, s = E ? n + t.margin.top : i + t.margin.top;
138
+ b?.show(a, s, u, C[l]), v.onHover?.({
139
+ datum: u,
140
140
  originalEvent: e,
141
- series: w[a]
141
+ series: C[l]
142
142
  });
143
143
  }
144
144
  }
@@ -146,6 +146,6 @@ function v(v, y) {
146
146
  });
147
147
  }
148
148
  //#endregion
149
- export { v as createBarChart };
149
+ export { _ as createBarChart };
150
150
 
151
151
  //# sourceMappingURL=bar-chart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bar-chart.js","names":[],"sources":["../../../src/charts/bar/bar-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\n\nimport type { BarChartConfig, BarVariant, ChartHandle } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nimport { warn } from '../../_dev';\nimport { renderAxis, resolveTickCount } from '../../axes/axis';\nimport { renderGrid } from '../../axes/grid';\nimport { clearCartesianDom, createChartScaffold } from '../../core/chart-scaffold';\nimport { chartArea } from '../../core/layout';\nimport { getMousePosition } from '../../interaction/events';\nimport { bandScale } from '../../scales/band';\nimport { linearScale } from '../../scales/linear';\nimport { createSvgElement } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport { findCatIdx, findSeriesIdx, isOutsideBars } from './bar-hit-test';\nimport { renderBars } from './bar-renderer';\n\nfunction variantFlags(variant: BarVariant): { horizontal: boolean; stacked: boolean } {\n return {\n horizontal: variant === 'grouped-horizontal' || variant === 'stacked-horizontal',\n stacked: variant === 'stacked' || variant === 'stacked-horizontal',\n };\n}\n\n// ─── Chart ────────────────────────────────────────────────────────────────────\n\nexport function createBarChart(container: HTMLElement, config: BarChartConfig): ChartHandle {\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 categories = [...new Set(allData.flat().map((d) => String(d.key)))];\n\n if (categories.length === 0) {\n warn('createBarChart: no data');\n clearCartesianDom(groups, legend, tooltip);\n\n return;\n }\n\n const { horizontal, stacked } = variantFlags(config.variant ?? 'grouped');\n\n // Value domain\n let vMax: number;\n let vMin: number;\n\n if (stacked) {\n if (allData.some((sd) => sd.some((d) => d.value < 0))) {\n warn(\n 'createBarChart: negative values in a stacked/stacked-horizontal series are clamped to 0 — stacking mixed-sign data is not supported.',\n );\n }\n\n const sums = categories.map((cat) =>\n allData.reduce((sum, sd) => {\n const pt = sd.find((d) => String(d.key) === cat);\n\n return sum + (pt ? Math.max(0, pt.value) : 0);\n }, 0),\n );\n\n vMax = Math.max(...sums);\n vMin = 0;\n } else {\n const allY = allData.flat().map((d) => d.value);\n\n vMax = Math.max(...allY);\n vMin = Math.min(0, ...allY);\n }\n\n // Build uniform scale context\n const catScale = horizontal\n ? bandScale({ domain: categories, range: [0, area.height] })\n : bandScale({ domain: categories, range: [0, area.width] });\n\n const valScale = horizontal\n ? linearScale({ domain: [vMin, vMax], range: [0, area.width] })\n : linearScale({ domain: [vMin, vMax], range: [area.height, 0] });\n\n const stackedTops: number[][] = [];\n const stackTops = Object.create(null) as Record<string, number>;\n\n for (const cat of categories) stackTops[cat] = 0;\n\n const sc: BarScaleContext = {\n bandCenter: (cat) => catScale.map(cat) + catScale.bandwidth() / 2,\n bandwidth: catScale.bandwidth(),\n baselinePx: valScale.map(0),\n horizontal,\n stacked,\n stackedTops,\n valueScale: valScale,\n };\n\n // Axes & grid\n if (horizontal) {\n if (config.xAxis?.grid) {\n renderGrid(\n groups.grid,\n valScale,\n config.xAxis.grid,\n area.height,\n 'vertical',\n resolveTickCount(config.xAxis, area.width, 'bottom'),\n );\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, catScale, config.yAxis, area.height, 'left');\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, valScale, config.xAxis, area.width, 'bottom');\n }\n } else {\n if (config.yAxis?.grid) {\n renderGrid(\n groups.grid,\n valScale,\n config.yAxis.grid,\n area.width,\n 'horizontal',\n resolveTickCount(config.yAxis, area.height, 'left'),\n );\n }\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, catScale, config.xAxis, area.width, 'bottom');\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, valScale, config.yAxis, area.height, 'left');\n }\n\n // Series groups\n while (groups.series.children.length > seriesList.length) {\n const last = groups.series.lastElementChild;\n\n if (last) groups.series.removeChild(last);\n }\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-bar-series' });\n groups.series.appendChild(group);\n }\n\n const barData = allData[i].map((d) => {\n const key = String(d.key);\n\n if (stacked) {\n const base = stackTops[key] ?? 0;\n const top = base + Math.max(0, d.value);\n\n stackTops[key] = top;\n\n return { base, key, y: top };\n }\n\n return { base: 0, key, y: d.value };\n });\n\n stackedTops[i] = barData.map((d) => d.y);\n\n const baselineYs = stacked ? barData.map((d) => valScale.map(d.base)) : undefined;\n\n renderBars(group, barData, catScale, valScale, sc.baselinePx, {\n baselineYs,\n borderRadius: series.borderRadius ?? 0,\n color: seriesColor(i, series.color),\n disposalSignal: ctx.disposalSignal,\n horizontal,\n seriesCount: seriesList.length,\n seriesIndex: i,\n stacked,\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 // ─── Event handlers (close over render-derived state) ─────────────────────\n\n const onMouseMove = (event: MouseEvent) => {\n const d = ctx.dimensions.value;\n const pos = getMousePosition(ctx.svg, event, d.margin.left, d.margin.top);\n const a = chartArea(d.width, d.height, d.margin);\n\n if (pos.x < 0 || pos.x > a.width || pos.y < 0 || pos.y > a.height) {\n tooltip?.hide();\n\n return;\n }\n\n const posBand = horizontal ? pos.y : pos.x;\n const catIdx = findCatIdx(posBand, categories, sc);\n\n if (catIdx === -1) {\n tooltip?.hide();\n\n return;\n }\n\n if (isOutsideBars(pos, catIdx, allData, sc, seriesList.length)) {\n tooltip?.hide();\n\n return;\n }\n\n const seriesIdx = findSeriesIdx(pos, catIdx, categories, sc, seriesList.length);\n const point = allData[seriesIdx]?.[catIdx];\n\n if (point) {\n const bandCenterPx = sc.bandCenter(categories[catIdx]);\n const stackedTop = stacked ? (stackedTops[seriesIdx]?.[catIdx] ?? point.value) : point.value;\n const valuePx = valScale.map(stackedTop);\n\n const tooltipX = horizontal ? valuePx + d.margin.left : bandCenterPx + d.margin.left;\n const tooltipY = horizontal ? bandCenterPx + d.margin.top : valuePx + d.margin.top;\n\n tooltip?.show(tooltipX, tooltipY, point, seriesList[seriesIdx]);\n config.onHover?.({ datum: point, originalEvent: event, series: seriesList[seriesIdx] });\n }\n };\n\n const onMouseLeave = () => {\n tooltip?.hide();\n config.onHover?.(null);\n };\n\n const onClick = (event: MouseEvent) => {\n if (!config.onClick) return;\n\n const d = ctx.dimensions.value;\n const pos = getMousePosition(ctx.svg, event, d.margin.left, d.margin.top);\n const a = chartArea(d.width, d.height, d.margin);\n\n if (pos.x < 0 || pos.x > a.width || pos.y < 0 || pos.y > a.height) return;\n\n const posBand = horizontal ? pos.y : pos.x;\n const catIdx = findCatIdx(posBand, categories, sc);\n\n if (catIdx === -1) return;\n\n const seriesIdx = findSeriesIdx(pos, catIdx, categories, sc, seriesList.length);\n const point = allData[seriesIdx]?.[catIdx];\n\n if (point) {\n config.onClick({ datum: point, originalEvent: event, series: seriesList[seriesIdx] });\n }\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bar-chart.js","names":[],"sources":["../../../src/charts/bar/bar-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\n\nimport type { BarChartConfig, BarVariant, ChartHandle } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nimport { warn } from '../../_dev';\nimport { renderAxis, resolveTickCount } from '../../axes/axis';\nimport { renderGrid } from '../../axes/grid';\nimport { clearCartesianDom, createChartScaffold } from '../../core/chart-scaffold';\nimport { chartArea } from '../../core/layout';\nimport { getMousePosition } from '../../interaction/events';\nimport { bandScale } from '../../scales/band';\nimport { linearScale } from '../../scales/linear';\nimport { createSvgElement } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport { findCatIdx, findSeriesIdx, isOutsideBars } from './bar-hit-test';\nimport { renderBars } from './bar-renderer';\n\nfunction variantFlags(variant: BarVariant): { horizontal: boolean; stacked: boolean } {\n return {\n horizontal: variant === 'grouped-horizontal' || variant === 'stacked-horizontal',\n stacked: variant === 'stacked' || variant === 'stacked-horizontal',\n };\n}\n\n// ─── Chart ────────────────────────────────────────────────────────────────────\n\nexport function createBarChart(container: HTMLElement, config: BarChartConfig): ChartHandle {\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 categories = [...new Set(allData.flat().map((d) => String(d.key)))];\n\n if (categories.length === 0) {\n warn('createBarChart: no data');\n clearCartesianDom(groups, legend, tooltip);\n\n return;\n }\n\n const { horizontal, stacked } = variantFlags(config.variant ?? 'grouped');\n\n // Value domain\n let vMax: number;\n let vMin: number;\n\n if (stacked) {\n if (allData.some((sd) => sd.some((d) => d.value < 0))) {\n warn(\n 'createBarChart: negative values in a stacked/stacked-horizontal series are clamped to 0 — stacking mixed-sign data is not supported.',\n );\n }\n\n const sums = categories.map((cat) =>\n allData.reduce((sum, sd) => {\n const pt = sd.find((d) => String(d.key) === cat);\n\n return sum + (pt ? Math.max(0, pt.value) : 0);\n }, 0),\n );\n\n vMax = Math.max(...sums);\n vMin = 0;\n } else {\n const allY = allData.flat().map((d) => d.value);\n\n vMax = Math.max(...allY);\n vMin = Math.min(0, ...allY);\n }\n\n // Build uniform scale context\n const catScale = horizontal\n ? bandScale({ domain: categories, range: [0, area.height] })\n : bandScale({ domain: categories, range: [0, area.width] });\n\n const valScale = horizontal\n ? linearScale({ domain: [vMin, vMax], range: [0, area.width] })\n : linearScale({ domain: [vMin, vMax], range: [area.height, 0] });\n\n const stackedTops: number[][] = [];\n const stackTops = Object.create(null) as Record<string, number>;\n\n for (const cat of categories) stackTops[cat] = 0;\n\n const sc: BarScaleContext = {\n bandCenter: (cat) => catScale.map(cat) + catScale.bandwidth() / 2,\n bandwidth: catScale.bandwidth(),\n baselinePx: valScale.map(0),\n horizontal,\n stacked,\n stackedTops,\n valueScale: valScale,\n };\n\n // Axes & grid\n if (horizontal) {\n if (config.xAxis?.grid) {\n renderGrid(\n groups.grid,\n valScale,\n config.xAxis.grid,\n area.height,\n 'vertical',\n resolveTickCount(config.xAxis, area.width, 'bottom'),\n );\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, catScale, config.yAxis, area.height, 'left');\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, valScale, config.xAxis, area.width, 'bottom');\n }\n } else {\n if (config.yAxis?.grid) {\n renderGrid(\n groups.grid,\n valScale,\n config.yAxis.grid,\n area.width,\n 'horizontal',\n resolveTickCount(config.yAxis, area.height, 'left'),\n );\n }\n\n if (config.xAxis) {\n groups.xAxis.setAttribute('transform', `translate(0,${area.height})`);\n renderAxis(groups.xAxis, catScale, config.xAxis, area.width, 'bottom');\n }\n\n if (config.yAxis) renderAxis(groups.yAxis, valScale, config.yAxis, area.height, 'left');\n }\n\n // Series groups\n while (groups.series.children.length > seriesList.length) {\n const last = groups.series.lastElementChild;\n\n if (last) groups.series.removeChild(last);\n }\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-bar-series' });\n groups.series.appendChild(group);\n }\n\n const barData = allData[i].map((d) => {\n const key = String(d.key);\n\n if (stacked) {\n const base = stackTops[key] ?? 0;\n const top = base + Math.max(0, d.value);\n\n stackTops[key] = top;\n\n return { base, key, y: top };\n }\n\n return { base: 0, key, y: d.value };\n });\n\n stackedTops[i] = barData.map((d) => d.y);\n\n const baselineYs = stacked ? barData.map((d) => valScale.map(d.base)) : undefined;\n\n renderBars(group, barData, catScale, valScale, sc.baselinePx, {\n baselineYs,\n borderRadius: series.borderRadius ?? 0,\n color: seriesColor(i, series.color),\n disposalSignal: ctx.disposalSignal,\n horizontal,\n seriesCount: seriesList.length,\n seriesIndex: i,\n stacked,\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 // ─── Event handlers (close over render-derived state) ─────────────────────\n\n const onMouseMove = (event: MouseEvent) => {\n const d = ctx.dimensions.value;\n const pos = getMousePosition(ctx.svg, event, d.margin.left, d.margin.top);\n const a = chartArea(d.width, d.height, d.margin);\n\n if (pos.x < 0 || pos.x > a.width || pos.y < 0 || pos.y > a.height) {\n tooltip?.hide();\n\n return;\n }\n\n const posBand = horizontal ? pos.y : pos.x;\n const catIdx = findCatIdx(posBand, categories, sc);\n\n if (catIdx === -1) {\n tooltip?.hide();\n\n return;\n }\n\n if (isOutsideBars(pos, catIdx, allData, sc, seriesList.length)) {\n tooltip?.hide();\n\n return;\n }\n\n const seriesIdx = findSeriesIdx(pos, catIdx, categories, sc, seriesList.length);\n const point = allData[seriesIdx]?.[catIdx];\n\n if (point) {\n const bandCenterPx = sc.bandCenter(categories[catIdx]);\n const stackedTop = stacked ? (stackedTops[seriesIdx]?.[catIdx] ?? point.value) : point.value;\n const valuePx = valScale.map(stackedTop);\n\n const tooltipX = horizontal ? valuePx + d.margin.left : bandCenterPx + d.margin.left;\n const tooltipY = horizontal ? bandCenterPx + d.margin.top : valuePx + d.margin.top;\n\n tooltip?.show(tooltipX, tooltipY, point, seriesList[seriesIdx]);\n config.onHover?.({ datum: point, originalEvent: event, series: seriesList[seriesIdx] });\n }\n };\n\n const onMouseLeave = () => {\n tooltip?.hide();\n config.onHover?.(null);\n };\n\n const onClick = (event: MouseEvent) => {\n if (!config.onClick) return;\n\n const d = ctx.dimensions.value;\n const pos = getMousePosition(ctx.svg, event, d.margin.left, d.margin.top);\n const a = chartArea(d.width, d.height, d.margin);\n\n if (pos.x < 0 || pos.x > a.width || pos.y < 0 || pos.y > a.height) return;\n\n const posBand = horizontal ? pos.y : pos.x;\n const catIdx = findCatIdx(posBand, categories, sc);\n\n if (catIdx === -1) return;\n\n const seriesIdx = findSeriesIdx(pos, catIdx, categories, sc, seriesList.length);\n const point = allData[seriesIdx]?.[catIdx];\n\n if (point) {\n config.onClick({ datum: point, originalEvent: event, series: seriesList[seriesIdx] });\n }\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n });\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- 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 t(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 n(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}exports.findCatIdx=e,exports.findSeriesIdx=t,exports.isOutsideBars=n;
1
+ 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 t(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 n(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}exports.findCatIdx=e,exports.findSeriesIdx=t,exports.isOutsideBars=n;
2
2
  //# sourceMappingURL=bar-hit-test.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"bar-hit-test.cjs","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: Datum[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":"AAGA,SAAgB,EAAW,EAAa,EAAsB,EAA6B,CACzF,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAE1C,IAAM,EADS,EAAG,WAAW,EAAW,EAC1B,EAAS,EAAG,UAAY,EAEtC,GAAI,GAAO,GAAS,EAAM,EAAQ,EAAG,UAAW,OAAO,CACzD,CAEA,MAAO,EACT,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACQ,CACR,GAAI,EAAG,QACL,GAAI,EAAG,WAAY,CACjB,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE7D,GAAU,EAAI,EAAG,OAAO,EAG9B,OAAO,EAAc,CACvB,KAAO,CACL,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE3D,GAAQ,EAAI,EAAG,OAAO,EAG5B,OAAO,EAAc,CACvB,KACK,CACL,IAAM,EAAU,EAAG,UAAY,EACzB,EAAY,EAAG,WAAW,EAAW,EAAO,EAAI,EAAG,UAAY,EAC/D,EAAS,EAAG,WAAa,EAAI,EAAI,EAAY,EAAI,EAAI,EACrD,EAAS,KAAK,MAAM,EAAS,CAAO,EAE1C,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAc,EAAG,CAAM,CAAC,CACtD,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACS,CACT,IAAM,EAAS,EAAc,EACvB,EAAS,EAAG,QACb,EAAG,YAAY,EAAO,GAAG,IAAW,EACrC,KAAK,IAAI,GAAG,MAAM,KAAK,CAAE,OAAQ,CAAY,GAAI,EAAG,IAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,OAAS,CAAC,CAAC,EAC3F,EAAQ,EAAG,WAAW,IAAI,CAAM,EAEtC,OAAO,EAAG,WAAa,EAAI,EAAI,EAAQ,EAAI,EAAI,CACjD"}
1
+ {"version":3,"file":"bar-hit-test.cjs","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: Datum[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":"AAGA,SAAgB,EAAW,EAAa,EAAsB,EAA6B,CACzF,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAE1C,IAAM,EADS,EAAG,WAAW,EAAW,EAC1B,EAAS,EAAG,UAAY,EAEtC,GAAI,GAAO,GAAS,EAAM,EAAQ,EAAG,UAAW,OAAO,CACzD,CAEA,MAAO,EACT,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACQ,CACR,GAAI,EAAG,QACL,GAAI,EAAG,WAAY,CACjB,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE7D,GAAU,EAAI,EAAG,OAAO,EAG9B,OAAO,EAAc,CACvB,KAAO,CACL,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE3D,GAAQ,EAAI,EAAG,OAAO,EAG5B,OAAO,EAAc,CACvB,CACK,CACL,IAAM,EAAU,EAAG,UAAY,EACzB,EAAY,EAAG,WAAW,EAAW,EAAO,EAAI,EAAG,UAAY,EAC/D,EAAS,EAAG,WAAa,EAAI,EAAI,EAAY,EAAI,EAAI,EACrD,EAAS,KAAK,MAAM,EAAS,CAAO,EAE1C,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAc,EAAG,CAAM,CAAC,CACtD,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACS,CACT,IAAM,EAAS,EAAc,EACvB,EAAS,EAAG,QACb,EAAG,YAAY,EAAO,GAAG,IAAW,EACrC,KAAK,IAAI,GAAG,MAAM,KAAK,CAAE,OAAQ,CAAY,GAAI,EAAG,IAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,OAAS,CAAC,CAAC,EAC3F,EAAQ,EAAG,WAAW,IAAI,CAAM,EAEtC,OAAO,EAAG,WAAa,EAAI,EAAI,EAAQ,EAAI,EAAI,CACjD"}
@@ -14,7 +14,7 @@ function t(e, t, n, r, i) {
14
14
  for (let n = 0; n < i; n++) if (r.valueScale.map(r.stackedTops[n]?.[t] ?? 0) <= e.y) return n;
15
15
  return i - 1;
16
16
  }
17
- else {
17
+ {
18
18
  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);
19
19
  return Math.max(0, Math.min(i - 1, c));
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bar-hit-test.js","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: Datum[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":";AAGA,SAAgB,EAAW,GAAa,GAAsB,GAA6B;CACzF,KAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAE1C,IAAM,IADS,EAAG,WAAW,EAAW,EAC1B,IAAS,EAAG,YAAY;EAEtC,IAAI,KAAO,KAAS,IAAM,IAAQ,EAAG,WAAW,OAAO;CACzD;CAEA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI,EAAG,SACL,IAAI,EAAG,YAAY;EACjB,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE7D,KAAU,EAAI,GAAG,OAAO;EAG9B,OAAO,IAAc;CACvB,OAAO;EACL,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE3D,KAAQ,EAAI,GAAG,OAAO;EAG5B,OAAO,IAAc;CACvB;MACK;EACL,IAAM,IAAU,EAAG,YAAY,GACzB,IAAY,EAAG,WAAW,EAAW,EAAO,IAAI,EAAG,YAAY,GAC/D,IAAS,EAAG,aAAa,EAAI,IAAI,IAAY,EAAI,IAAI,GACrD,IAAS,KAAK,MAAM,IAAS,CAAO;EAE1C,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAc,GAAG,CAAM,CAAC;CACtD;AACF;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACS;CACT,IAAM,IAAS,IAAc,GACvB,IAAS,EAAG,UACb,EAAG,YAAY,EAAO,GAAG,MAAW,IACrC,KAAK,IAAI,GAAG,MAAM,KAAK,EAAE,QAAQ,EAAY,IAAI,GAAG,MAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,SAAS,CAAC,CAAC,GAC3F,IAAQ,EAAG,WAAW,IAAI,CAAM;CAEtC,OAAO,EAAG,aAAa,EAAI,IAAI,IAAQ,EAAI,IAAI;AACjD"}
1
+ {"version":3,"file":"bar-hit-test.js","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: Datum[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":";AAGA,SAAgB,EAAW,GAAa,GAAsB,GAA6B;CACzF,KAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAE1C,IAAM,IADS,EAAG,WAAW,EAAW,EAC1B,IAAS,EAAG,YAAY;EAEtC,IAAI,KAAO,KAAS,IAAM,IAAQ,EAAG,WAAW,OAAO;CACzD;CAEA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI,EAAG,SACL,IAAI,EAAG,YAAY;EACjB,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE7D,KAAU,EAAI,GAAG,OAAO;EAG9B,OAAO,IAAc;CACvB,OAAO;EACL,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE3D,KAAQ,EAAI,GAAG,OAAO;EAG5B,OAAO,IAAc;CACvB;CACK;EACL,IAAM,IAAU,EAAG,YAAY,GACzB,IAAY,EAAG,WAAW,EAAW,EAAO,IAAI,EAAG,YAAY,GAC/D,IAAS,EAAG,aAAa,EAAI,IAAI,IAAY,EAAI,IAAI,GACrD,IAAS,KAAK,MAAM,IAAS,CAAO;EAE1C,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAc,GAAG,CAAM,CAAC;CACtD;AACF;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACS;CACT,IAAM,IAAS,IAAc,GACvB,IAAS,EAAG,UACb,EAAG,YAAY,EAAO,GAAG,MAAW,IACrC,KAAK,IAAI,GAAG,MAAM,KAAK,EAAE,QAAQ,EAAY,IAAI,GAAG,MAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,SAAS,CAAC,CAAC,GAC3F,IAAQ,EAAG,WAAW,IAAI,CAAM;CAEtC,OAAO,EAAG,aAAa,EAAI,IAAI,IAAQ,EAAI,IAAI;AACjD"}
@@ -1,2 +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;
1
+ require("../../_dev.cjs");const e=require("../../svg/element.cjs"),t=require("../../axes/axis.cjs"),n=require("../../axes/grid.cjs"),r=require("../../core/cartesian-scales.cjs"),i=require("../../core/layout.cjs"),a=require("../../core/chart-scaffold.cjs"),o=require("../../interaction/crosshair.cjs"),s=require("../../interaction/series-interaction.cjs"),c=require("../../theme/index.cjs"),l=require("./line-renderer.cjs");let u=require("@vielzeug/ripple");function d(d,f){let p=null;return a.createChartScaffold(d,f,d=>{let{groups:m,legend:h,tooltip:g}=d,_=d.dimensions.value,v=i.chartArea(_.width,_.height,_.margin),y=(0,u.isReactive)(f.series)?f.series.value:f.series,b=y.map(e=>(0,u.isReactive)(e.data)?e.data.value:e.data),x=b.flat().map(e=>e.key),S=b.flat().map(e=>e.value);if(x.length===0){a.clearCartesianDom(m,h,g,p);return}f.crosshair&&!p&&(p=o.createCrosshair(d.chartArea,f.crosshair));let C=r.buildXScale(x,v.width),w=r.buildYScale(S,v.height);for(f.yAxis?.grid&&n.renderGrid(m.grid,w,f.yAxis.grid,v.width,`horizontal`,t.resolveTickCount(f.yAxis,v.height,`left`)),f.xAxis?.grid&&n.renderGrid(m.grid,C,f.xAxis.grid,v.height,`vertical`,t.resolveTickCount(f.xAxis,v.width,`bottom`)),f.xAxis&&(m.xAxis.setAttribute(`transform`,`translate(0,${v.height})`),t.renderAxis(m.xAxis,C,f.xAxis,v.width,`bottom`)),f.yAxis&&t.renderAxis(m.yAxis,w,f.yAxis,v.height,`left`);m.series.children.length>y.length;)m.series.removeChild(m.series.lastChild);let T=[];for(let t=0;t<y.length;t++){let n=y[t],r=m.series.children[t];r||(r=e.createSvgElement(`g`,{class:`prism-line-series`}),m.series.appendChild(r));let i=l.computePoints(b[t],C,w);T.push(i),l.renderLine(r,i,{color:c.seriesColor(t,n.color),curve:n.curve??`linear`,disposalSignal:d.disposalSignal,pointRadius:n.pointRadius??3,showPoints:n.showPoints??!1,strokeWidth:n.strokeWidth??2,transition:f.transition})}return h?.update(y.map((e,t)=>({color:c.seriesColor(t,e.color),name:e.name}))),g?.hide(),s.createSeriesInteraction({crosshair:p,dims:()=>d.dimensions.value,getData:()=>b,getPoints:()=>T,getSeriesList:()=>(0,u.isReactive)(f.series)?f.series.value:f.series,onClick:f.onClick,onHover:f.onHover,svg:d.svg,tooltip:g})})}exports.createLineChart=d;
2
2
  //# sourceMappingURL=line-chart.cjs.map
@@ -1 +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"}
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":"ycAiBA,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,CAAW,EAAO,MAAM,EAAI,EAAO,OAAO,MAAQ,EAAO,OACtE,EAAU,EAAW,IAAK,IAAA,EAAO,EAAA,WAAA,CAAW,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,CAErB,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,EAAsB,EAAA,WAAA,CAAW,EAAO,MAAM,EAAI,EAAO,OAAO,MAAQ,EAAO,OAC/E,QAAS,EAAO,QAChB,QAAS,EAAO,QAChB,IAAK,EAAI,IACT,SACF,CAAC,CACH,CAAC,CACH"}
@@ -1,59 +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";
1
+ import "../../_dev.js";
2
+ import { createSvgElement as e } from "../../svg/element.js";
3
+ import { renderAxis as t, resolveTickCount as n } from "../../axes/axis.js";
4
+ import { renderGrid as r } from "../../axes/grid.js";
5
+ import { buildXScale as i, buildYScale as a } from "../../core/cartesian-scales.js";
6
+ import { chartArea as o } from "../../core/layout.js";
7
+ import { clearCartesianDom as s, createChartScaffold as c } from "../../core/chart-scaffold.js";
8
+ import { createCrosshair as l } from "../../interaction/crosshair.js";
9
+ import { createSeriesInteraction as u } from "../../interaction/series-interaction.js";
10
+ import { seriesColor as d } from "../../theme/index.js";
11
+ import { computePoints as f, renderLine as p } from "./line-renderer.js";
12
+ import { isReactive as m } from "@vielzeug/ripple";
13
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);
14
+ function h(h, g) {
15
+ let _ = null;
16
+ return c(h, g, (c) => {
17
+ let { groups: h, legend: v, tooltip: y } = c, b = c.dimensions.value, x = o(b.width, b.height, b.margin), S = m(g.series) ? g.series.value : g.series, C = S.map((e) => m(e.data) ? e.data.value : e.data), w = C.flat().map((e) => e.key), T = C.flat().map((e) => e.value);
18
+ if (w.length === 0) {
19
+ s(h, v, y, _);
20
20
  return;
21
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),
22
+ g.crosshair && !_ && (_ = l(c.chartArea, g.crosshair));
23
+ let E = i(w, x.width), D = a(T, x.height);
24
+ for (g.yAxis?.grid && r(h.grid, D, g.yAxis.grid, x.width, "horizontal", n(g.yAxis, x.height, "left")), g.xAxis?.grid && r(h.grid, E, g.xAxis.grid, x.height, "vertical", n(g.xAxis, x.width, "bottom")), g.xAxis && (h.xAxis.setAttribute("transform", `translate(0,${x.height})`), t(h.xAxis, E, g.xAxis, x.width, "bottom")), g.yAxis && t(h.yAxis, D, g.yAxis, x.height, "left"); h.series.children.length > S.length;) h.series.removeChild(h.series.lastChild);
25
+ let O = [];
26
+ for (let t = 0; t < S.length; t++) {
27
+ let n = S[t], r = h.series.children[t];
28
+ r || (r = e("g", { class: "prism-line-series" }), h.series.appendChild(r));
29
+ let i = f(C[t], E, D);
30
+ O.push(i), p(r, i, {
31
+ color: d(t, n.color),
32
32
  curve: n.curve ?? "linear",
33
- disposalSignal: l.disposalSignal,
33
+ disposalSignal: c.disposalSignal,
34
34
  pointRadius: n.pointRadius ?? 3,
35
35
  showPoints: n.showPoints ?? !1,
36
36
  strokeWidth: n.strokeWidth ?? 2,
37
- transition: _.transition
37
+ transition: g.transition
38
38
  });
39
39
  }
40
- return y?.update(C.map((e, t) => ({
41
- color: f(t, e.color),
40
+ return v?.update(S.map((e, t) => ({
41
+ color: d(t, e.color),
42
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
43
+ }))), y?.hide(), u({
44
+ crosshair: _,
45
+ dims: () => c.dimensions.value,
46
+ getData: () => C,
47
+ getPoints: () => O,
48
+ getSeriesList: () => m(g.series) ? g.series.value : g.series,
49
+ onClick: g.onClick,
50
+ onHover: g.onHover,
51
+ svg: c.svg,
52
+ tooltip: y
53
53
  });
54
54
  });
55
55
  }
56
56
  //#endregion
57
- export { g as createLineChart };
57
+ export { h as createLineChart };
58
58
 
59
59
  //# sourceMappingURL=line-chart.js.map
@@ -1 +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"}
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,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"}
@@ -1,2 +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;
1
+ require("../../_dev.cjs");const e=require("../../svg/element.cjs"),t=require("../../animation/easing.cjs"),n=require("../../animation/tween.cjs"),r=require("../../svg/path.cjs");var i=new WeakMap;function a(e,t){return t===`monotone`?r.monotonePath(e):t===`step`?r.stepPath(e):r.linePath(e)}function o(r,o,s){let c=s.transition?.duration??(s.transition?300:0),l=t.resolveEasing(s.transition?.easing),u=r.querySelector(`.prism-line-path`);u||(u=e.createSvgElement(`path`,{class:`prism-line-path`,fill:`none`}),r.appendChild(u)),e.setAttributes(u,{stroke:s.color,"stroke-width":s.strokeWidth});let d=r.querySelector(`.prism-line-dots`);if(s.showPoints?d||(d=e.createSvgElement(`g`,{class:`prism-line-dots`}),r.appendChild(d)):d&&=(d.remove(),null),c===0){if(e.setAttributes(u,{d:a(o,s.curve)}),d){for(;d.children.length>o.length;)d.removeChild(d.lastChild);for(let t=0;t<o.length;t++){let n=d.children[t];n||(n=e.createSvgElement(`circle`,{class:`prism-line-dot`}),d.appendChild(n)),e.setAttributes(n,{cx:o[t].x,cy:o[t].y,fill:s.color,r:s.pointRadius})}}return}i.get(r)?.();let f=!!u.getAttribute(`d`),p=[],m=null;if(d){let t=d.children.length;for(let e=0;e<t;e++){let t=d.children[e],n={x:Number(t.getAttribute(`cx`)),y:Number(t.getAttribute(`cy`))};p.push(n),m=n}for(;d.children.length>o.length;)d.removeChild(d.lastChild);for(let t=d.children.length;t<o.length;t++){let n=e.createSvgElement(`circle`,{class:`prism-line-dot`});e.setAttributes(n,{cx:o[t].x,cy:o[t].y,fill:s.color,r:s.pointRadius}),d.appendChild(n)}}for(let e=p.length;e<o.length;e++)p.push(m??o[e]);let h=null;function g(t){if(s.disposalSignal?.aborted){i.delete(r);return}h===null&&(h=t);let f=Math.min(1,(t-h)/c),m=l(f),_=o.map((e,t)=>{let r=p[t]??e;return{x:n.tweenNumber(r.x,e.x,m),y:n.tweenNumber(r.y,e.y,m)}});if(e.setAttributes(u,{d:a(_,s.curve)}),d)for(let t=0;t<o.length;t++){let n=d.children[t];n&&e.setAttributes(n,{cx:_[t].x,cy:_[t].y})}if(f<1){let e=requestAnimationFrame(g);i.set(r,()=>cancelAnimationFrame(e))}else i.delete(r)}if(!f)e.setAttributes(u,{d:a(o,s.curve)});else{let e=requestAnimationFrame(g);i.set(r,()=>cancelAnimationFrame(e))}}function s(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)}))}exports.computePoints=s,exports.renderLine=o;
2
2
  //# sourceMappingURL=line-renderer.cjs.map