@c2n/chart 0.0.7 → 0.0.9

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 (58) hide show
  1. package/README.md +44 -14
  2. package/dist/area-chart.js +2 -2
  3. package/dist/bar-chart.js +5 -4
  4. package/dist/candlestick-chart.js +139 -0
  5. package/dist/{chart-base-C4-1TyKq.js → chart-base-CEZvMKwW.js} +106 -13
  6. package/dist/chart-base.js +1 -1
  7. package/dist/chart-legend-DJE3HO7C.js +49 -0
  8. package/dist/chart-legend.js +2 -0
  9. package/dist/chart-link-C9vN9Y6c.js +75 -0
  10. package/dist/chart-series.js +75 -1
  11. package/dist/chart-theme.js +4 -2
  12. package/dist/chart-tooltip-J-oC2DKZ.js +130 -0
  13. package/dist/chart-tooltip.js +2 -0
  14. package/dist/chart.js +11 -5
  15. package/dist/decorate-BkO8ArQg.js +9 -0
  16. package/dist/{echarts-chart-base-LogCQN10.js → echarts-chart-base-CImXMzVk.js} +8 -5
  17. package/dist/echarts-chart-base.js +1 -1
  18. package/dist/gauge-chart.js +111 -0
  19. package/dist/line-chart.js +4 -3
  20. package/dist/pie-chart.js +26 -3
  21. package/dist/radar-chart.js +109 -0
  22. package/dist/scatter-chart.js +40 -0
  23. package/dist/sparkline.js +4 -4
  24. package/dist/{uplot-chart-base-BWr0zJE2.js → uplot-chart-base-CLhgOeM_.js} +21 -5
  25. package/dist/uplot-chart-base.js +1 -1
  26. package/dist/{uplot-paths-ChKohvIX.js → uplot-paths-D5HCEKRV.js} +9 -4
  27. package/package.json +31 -3
  28. package/react.d.ts +12 -0
  29. package/types/src/candlestick-chart.d.ts +52 -0
  30. package/types/src/candlestick-chart.d.ts.map +1 -0
  31. package/types/src/chart-base.d.ts +41 -4
  32. package/types/src/chart-base.d.ts.map +1 -1
  33. package/types/src/chart-legend.d.ts +37 -0
  34. package/types/src/chart-legend.d.ts.map +1 -0
  35. package/types/src/chart-link.d.ts +26 -0
  36. package/types/src/chart-link.d.ts.map +1 -0
  37. package/types/src/chart-theme.d.ts +2 -0
  38. package/types/src/chart-theme.d.ts.map +1 -1
  39. package/types/src/chart-tooltip.d.ts +42 -0
  40. package/types/src/chart-tooltip.d.ts.map +1 -0
  41. package/types/src/chart.d.ts +13 -1
  42. package/types/src/chart.d.ts.map +1 -1
  43. package/types/src/echarts-chart-base.d.ts.map +1 -1
  44. package/types/src/engines/echarts-loader.d.ts +1 -1
  45. package/types/src/engines/echarts-loader.d.ts.map +1 -1
  46. package/types/src/engines/uplot-adapter.d.ts.map +1 -1
  47. package/types/src/engines/uplot-paths.d.ts +1 -1
  48. package/types/src/engines/uplot-paths.d.ts.map +1 -1
  49. package/types/src/gauge-chart.d.ts +54 -0
  50. package/types/src/gauge-chart.d.ts.map +1 -0
  51. package/types/src/pie-chart.d.ts +6 -0
  52. package/types/src/pie-chart.d.ts.map +1 -1
  53. package/types/src/radar-chart.d.ts +55 -0
  54. package/types/src/radar-chart.d.ts.map +1 -0
  55. package/types/src/scatter-chart.d.ts +41 -0
  56. package/types/src/scatter-chart.d.ts.map +1 -0
  57. package/vue.d.ts +104 -0
  58. package/dist/chart-series-BnpHO3lm.js +0 -83
@@ -0,0 +1,109 @@
1
+ import { columnValue } from "./chart-data.js";
2
+ import { t as __decorate } from "./decorate-BkO8ArQg.js";
3
+ import "./chart-series.js";
4
+ import { t as EchartsChartBase } from "./echarts-chart-base-CImXMzVk.js";
5
+ import { property } from "lit/decorators.js";
6
+ import { customElement } from "@c2n/core/element-helper.js";
7
+ //#region src/radar-chart.ts
8
+ var RadarChart = class RadarChart extends EchartsChartBase {
9
+ constructor() {
10
+ super();
11
+ this.features = ["radar"];
12
+ this.min = 0;
13
+ this.shape = "polygon";
14
+ this.startAngle = 90;
15
+ this.splitNumber = 5;
16
+ this.points = "show";
17
+ this.xType = "category";
18
+ this.tooltip = "item";
19
+ }
20
+ coordinateSystem(context) {
21
+ const { theme } = context;
22
+ return { radar: {
23
+ indicator: this.indicators(),
24
+ shape: this.shape,
25
+ startAngle: this.startAngle,
26
+ splitNumber: Math.max(1, Math.trunc(this.splitNumber)),
27
+ radius: "68%",
28
+ axisName: {
29
+ color: theme.axisColor,
30
+ fontSize: theme.fontSize
31
+ },
32
+ axisLine: { lineStyle: { color: theme.gridColor } },
33
+ splitLine: { lineStyle: { color: theme.gridColor } },
34
+ splitArea: { show: false }
35
+ } };
36
+ }
37
+ seriesOption(index, context) {
38
+ const series = context.series[index] ?? { field: "" };
39
+ const color = this.colorOf(series, index, context.theme);
40
+ return {
41
+ type: "radar",
42
+ symbol: this.points === "show" ? "circle" : "none",
43
+ symbolSize: context.theme.pointRadius * 2,
44
+ lineStyle: {
45
+ color,
46
+ width: series.lineWidth ?? context.theme.lineWidth
47
+ },
48
+ itemStyle: { color },
49
+ areaStyle: {
50
+ color,
51
+ opacity: this.fillOpacity ?? this.areaOpacity()
52
+ }
53
+ };
54
+ }
55
+ projectData(frame, context) {
56
+ return context.series.map((series, seriesIndex) => {
57
+ const column = frame.columns[seriesIndex];
58
+ const values = new Array(frame.length);
59
+ for (let index = 0; index < frame.length; index += 1) values[index] = column ? columnValue(column, index) : null;
60
+ return [{
61
+ name: series.label ?? series.field,
62
+ value: values
63
+ }];
64
+ });
65
+ }
66
+ indicators() {
67
+ const frame = this.frame;
68
+ if (!frame) return [];
69
+ return Array.from({ length: frame.length }, (_, indicatorIndex) => ({
70
+ name: frame.labels?.[indicatorIndex] ?? String(indicatorIndex + 1),
71
+ min: this.min,
72
+ max: this.max ?? this.indicatorMax(frame, indicatorIndex)
73
+ }));
74
+ }
75
+ indicatorMax(frame, indicatorIndex) {
76
+ let largest = this.min;
77
+ for (const column of frame.columns) {
78
+ const value = columnValue(column, indicatorIndex);
79
+ if (value !== null) largest = Math.max(largest, value);
80
+ }
81
+ if (largest <= this.min) return this.min + 1;
82
+ const padded = largest + (largest - this.min) * .1;
83
+ const magnitude = 10 ** Math.floor(Math.log10(Math.abs(padded)));
84
+ return Math.ceil(padded / magnitude) * magnitude;
85
+ }
86
+ areaOpacity() {
87
+ const raw = parseFloat(getComputedStyle(this).getPropertyValue("--c2-chart__area--opacity"));
88
+ return Number.isFinite(raw) ? raw : .15;
89
+ }
90
+ };
91
+ __decorate([property({ type: Number })], RadarChart.prototype, "min", void 0);
92
+ __decorate([property({ type: Number })], RadarChart.prototype, "max", void 0);
93
+ __decorate([property({ type: String })], RadarChart.prototype, "shape", void 0);
94
+ __decorate([property({
95
+ type: Number,
96
+ attribute: "start-angle"
97
+ })], RadarChart.prototype, "startAngle", void 0);
98
+ __decorate([property({
99
+ type: Number,
100
+ attribute: "split-number"
101
+ })], RadarChart.prototype, "splitNumber", void 0);
102
+ __decorate([property({ type: String })], RadarChart.prototype, "points", void 0);
103
+ __decorate([property({
104
+ type: Number,
105
+ attribute: "fill-opacity"
106
+ })], RadarChart.prototype, "fillOpacity", void 0);
107
+ RadarChart = __decorate([customElement("c2-radar-chart")], RadarChart);
108
+ //#endregion
109
+ export { RadarChart };
@@ -0,0 +1,40 @@
1
+ import { t as __decorate } from "./decorate-BkO8ArQg.js";
2
+ import "./chart-series.js";
3
+ import { t as EchartsChartBase } from "./echarts-chart-base-CImXMzVk.js";
4
+ import { property } from "lit/decorators.js";
5
+ import { customElement } from "@c2n/core/element-helper.js";
6
+ //#region src/scatter-chart.ts
7
+ var ScatterChart = class ScatterChart extends EchartsChartBase {
8
+ constructor() {
9
+ super();
10
+ this.features = ["scatter", "grid"];
11
+ this.symbolSize = 10;
12
+ this.symbol = "circle";
13
+ this.large = false;
14
+ this.largeThreshold = 2e3;
15
+ this.tooltip = "item";
16
+ }
17
+ seriesOption(index, context) {
18
+ return {
19
+ type: "scatter",
20
+ symbol: this.symbol,
21
+ symbolSize: this.symbolSize,
22
+ large: this.large,
23
+ largeThreshold: this.largeThreshold,
24
+ itemStyle: { color: this.colorOf(context.series[index] ?? { field: "" }, index, context.theme) }
25
+ };
26
+ }
27
+ };
28
+ __decorate([property({
29
+ type: Number,
30
+ attribute: "symbol-size"
31
+ })], ScatterChart.prototype, "symbolSize", void 0);
32
+ __decorate([property({ type: String })], ScatterChart.prototype, "symbol", void 0);
33
+ __decorate([property({ type: Boolean })], ScatterChart.prototype, "large", void 0);
34
+ __decorate([property({
35
+ type: Number,
36
+ attribute: "large-threshold"
37
+ })], ScatterChart.prototype, "largeThreshold", void 0);
38
+ ScatterChart = __decorate([customElement("c2-scatter-chart")], ScatterChart);
39
+ //#endregion
40
+ export { ScatterChart };
package/dist/sparkline.js CHANGED
@@ -1,7 +1,7 @@
1
- import { n as chart_default } from "./chart-base-C4-1TyKq.js";
2
- import { i as __decorate } from "./chart-series-BnpHO3lm.js";
3
- import { t as UplotChartBase } from "./uplot-chart-base-BWr0zJE2.js";
4
- import { n as linePaths, r as withAlpha } from "./uplot-paths-ChKohvIX.js";
1
+ import { n as chart_default } from "./chart-base-CEZvMKwW.js";
2
+ import { t as __decorate } from "./decorate-BkO8ArQg.js";
3
+ import { t as UplotChartBase } from "./uplot-chart-base-CLhgOeM_.js";
4
+ import { n as linePaths, r as withAlpha } from "./uplot-paths-D5HCEKRV.js";
5
5
  import { property } from "lit/decorators.js";
6
6
  import { customElement } from "@c2n/core/element-helper.js";
7
7
  import { css, unsafeCSS } from "lit";
@@ -1,5 +1,5 @@
1
- import { t as ChartBase } from "./chart-base-C4-1TyKq.js";
2
- import { i as __decorate } from "./chart-series-BnpHO3lm.js";
1
+ import { t as ChartBase } from "./chart-base-CEZvMKwW.js";
2
+ import { t as __decorate } from "./decorate-BkO8ArQg.js";
3
3
  import { property } from "lit/decorators.js";
4
4
  //#region src/engines/uplot-loader.ts
5
5
  var pending;
@@ -44,11 +44,27 @@ async function createUplotAdapter() {
44
44
  events?.hover(null);
45
45
  return;
46
46
  }
47
+ let nearestSeriesIndex = 0;
48
+ let nearestDistance = Number.POSITIVE_INFINITY;
49
+ const cursorY = self.cursor.top ?? 0;
50
+ for (let engineIndex = 1; engineIndex < self.series.length; engineIndex += 1) {
51
+ const series = self.series[engineIndex];
52
+ const value = data[engineIndex]?.[index];
53
+ if (!series?.show || value === null || value === void 0 || !Number.isFinite(value)) continue;
54
+ const pointY = self.valToPos(value, series.scale ?? "y", true);
55
+ const distance = Math.abs(pointY - cursorY);
56
+ if (distance < nearestDistance) {
57
+ nearestDistance = distance;
58
+ nearestSeriesIndex = engineIndex - 1;
59
+ }
60
+ }
61
+ const pointer = self.cursor.event;
62
+ const bounds = container?.getBoundingClientRect();
47
63
  events?.hover({
48
64
  index,
49
- seriesIndex: Math.max(1, self.cursor.idxs?.findIndex((value) => value !== null && value !== void 0) ?? 1) - 1,
50
- px: self.cursor.left ?? 0,
51
- py: self.cursor.top ?? 0
65
+ seriesIndex: nearestSeriesIndex,
66
+ px: pointer && bounds ? pointer.clientX - bounds.left : self.cursor.left ?? 0,
67
+ py: pointer && bounds ? pointer.clientY - bounds.top : self.cursor.top ?? 0
52
68
  });
53
69
  }],
54
70
  setSelect: [(self) => {
@@ -1,2 +1,2 @@
1
- import { t as UplotChartBase } from "./uplot-chart-base-BWr0zJE2.js";
1
+ import { t as UplotChartBase } from "./uplot-chart-base-CLhgOeM_.js";
2
2
  export { UplotChartBase };
@@ -1,4 +1,4 @@
1
- import { n as loadedUplot } from "./uplot-chart-base-BWr0zJE2.js";
1
+ import { n as loadedUplot } from "./uplot-chart-base-CLhgOeM_.js";
2
2
  //#region src/engines/uplot-paths.ts
3
3
  var cache = /* @__PURE__ */ new Map();
4
4
  /**
@@ -45,8 +45,8 @@ var SCALE_VALUE = 1;
45
45
  * Grouping is therefore ours to do: `disp` gives uPlot an explicit left edge and width per bar — in data
46
46
  * units, which is what it reads when no `unit` is set — placing each series in its own slot of the band.
47
47
  */
48
- function barPaths(width, gap, index, count) {
49
- const key = `${width}:${gap}:${index}:${count}`;
48
+ function barPaths(width, gap, index, count, radius = 0) {
49
+ const key = `${width}:${gap}:${index}:${count}:${radius}`;
50
50
  if (barCache.has(key)) return barCache.get(key);
51
51
  const paths = loadedUplot()?.paths;
52
52
  if (!paths) return void 0;
@@ -55,8 +55,10 @@ function barPaths(width, gap, index, count) {
55
55
  Infinity,
56
56
  1
57
57
  ];
58
+ const roundedEnd = [radius, 0];
58
59
  const builder = count > 1 ? paths.bars?.({
59
60
  size,
61
+ radius: roundedEnd,
60
62
  disp: {
61
63
  x0: {
62
64
  unit: SCALE_VALUE,
@@ -67,7 +69,10 @@ function barPaths(width, gap, index, count) {
67
69
  values: (self) => [layout(self, width, gap, count).barWidth]
68
70
  }
69
71
  }
70
- }) : paths.bars?.({ size });
72
+ }) : paths.bars?.({
73
+ size,
74
+ radius: roundedEnd
75
+ });
71
76
  barCache.set(key, builder);
72
77
  return builder;
73
78
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c2n/chart",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "type": "module",
5
5
  "main": "dist/chart.js",
6
6
  "exports": {
@@ -28,10 +28,34 @@
28
28
  "types": "./types/src/pie-chart.d.ts",
29
29
  "default": "./dist/pie-chart.js"
30
30
  },
31
+ "./gauge-chart.js": {
32
+ "types": "./types/src/gauge-chart.d.ts",
33
+ "default": "./dist/gauge-chart.js"
34
+ },
35
+ "./radar-chart.js": {
36
+ "types": "./types/src/radar-chart.d.ts",
37
+ "default": "./dist/radar-chart.js"
38
+ },
39
+ "./scatter-chart.js": {
40
+ "types": "./types/src/scatter-chart.d.ts",
41
+ "default": "./dist/scatter-chart.js"
42
+ },
43
+ "./candlestick-chart.js": {
44
+ "types": "./types/src/candlestick-chart.d.ts",
45
+ "default": "./dist/candlestick-chart.js"
46
+ },
31
47
  "./chart-series.js": {
32
48
  "types": "./types/src/chart-series.d.ts",
33
49
  "default": "./dist/chart-series.js"
34
50
  },
51
+ "./chart-legend.js": {
52
+ "types": "./types/src/chart-legend.d.ts",
53
+ "default": "./dist/chart-legend.js"
54
+ },
55
+ "./chart-tooltip.js": {
56
+ "types": "./types/src/chart-tooltip.d.ts",
57
+ "default": "./dist/chart-tooltip.js"
58
+ },
35
59
  "./chart-base.js": {
36
60
  "types": "./types/src/chart-base.d.ts",
37
61
  "default": "./dist/chart-base.js"
@@ -84,6 +108,10 @@
84
108
  "graph",
85
109
  "data visualization",
86
110
  "line chart",
111
+ "gauge chart",
112
+ "radar chart",
113
+ "scatter plot",
114
+ "candlestick chart",
87
115
  "sparkline",
88
116
  "uplot",
89
117
  "echarts",
@@ -121,7 +149,7 @@
121
149
  }
122
150
  },
123
151
  "dependencies": {
124
- "@c2n/core": "0.0.7",
152
+ "@c2n/core": "0.0.9",
125
153
  "lit": "3.3.3"
126
154
  },
127
155
  "devDependencies": {
@@ -142,5 +170,5 @@
142
170
  "optional": true
143
171
  }
144
172
  },
145
- "gitHead": "c8db398a27f7cd417d665fdf5da455fee2d4e910"
173
+ "gitHead": "e4768cce5e0fbd5bc3165cd493a1e8d57cf0fff4"
146
174
  }
package/react.d.ts CHANGED
@@ -10,9 +10,15 @@
10
10
  import type { DetailedHTMLProps, HTMLAttributes } from 'react'
11
11
  import type { AreaChart } from '@c2n/chart/area-chart.js'
12
12
  import type { BarChart } from '@c2n/chart/bar-chart.js'
13
+ import type { CandlestickChart } from '@c2n/chart/candlestick-chart.js'
14
+ import type { ChartLegend } from '@c2n/chart/chart-legend.js'
13
15
  import type { ChartSeries } from '@c2n/chart/chart-series.js'
16
+ import type { ChartTooltip } from '@c2n/chart/chart-tooltip.js'
17
+ import type { GaugeChart } from '@c2n/chart/gauge-chart.js'
14
18
  import type { LineChart } from '@c2n/chart/line-chart.js'
15
19
  import type { PieChart } from '@c2n/chart/pie-chart.js'
20
+ import type { RadarChart } from '@c2n/chart/radar-chart.js'
21
+ import type { ScatterChart } from '@c2n/chart/scatter-chart.js'
16
22
  import type { Sparkline } from '@c2n/chart/sparkline.js'
17
23
 
18
24
  /** Standard React host-element attributes plus the element's own public properties. */
@@ -23,9 +29,15 @@ declare module 'react' {
23
29
  interface IntrinsicElements {
24
30
  'c2-area-chart': C2Props<AreaChart>
25
31
  'c2-bar-chart': C2Props<BarChart>
32
+ 'c2-candlestick-chart': C2Props<CandlestickChart>
33
+ 'c2-chart-legend': C2Props<ChartLegend>
26
34
  'c2-chart-series': C2Props<ChartSeries>
35
+ 'c2-chart-tooltip': C2Props<ChartTooltip>
36
+ 'c2-gauge-chart': C2Props<GaugeChart>
27
37
  'c2-line-chart': C2Props<LineChart>
28
38
  'c2-pie-chart': C2Props<PieChart>
39
+ 'c2-radar-chart': C2Props<RadarChart>
40
+ 'c2-scatter-chart': C2Props<ScatterChart>
29
41
  'c2-sparkline': C2Props<Sparkline>
30
42
  }
31
43
  }
@@ -0,0 +1,52 @@
1
+ import type { TypedAddEventListener, TypedRemoveEventListener } from '@c2n/core/event-helper.js';
2
+ import { EchartsChartBase } from './echarts-chart-base.js';
3
+ import type { ChartEventMap, ChartLegendItem } from './chart-base.js';
4
+ import type { ChartBuildContext } from './chart-adapter.js';
5
+ import type { EchartsOptions } from './engines/echarts-adapter.js';
6
+ import type { EchartsFeature } from './engines/echarts-loader.js';
7
+ import type { ChartFrame, ChartSeriesConfig } from './chart-types.js';
8
+ import './chart-series.js';
9
+ export interface CandlestickChart {
10
+ addEventListener: TypedAddEventListener<CandlestickChart, ChartEventMap>;
11
+ removeEventListener: TypedRemoveEventListener<CandlestickChart, ChartEventMap>;
12
+ }
13
+ /**
14
+ * An OHLC candlestick chart drawn by ECharts. With no series children it reads the `open`, `close`, `low`
15
+ * and `high` fields; the four `*-field` attributes rename that convention. Four explicit series children
16
+ * can instead supply those columns in the same order.
17
+ *
18
+ * ```html
19
+ * <c2-candlestick-chart label-field="date"
20
+ * data='[{ "date": "Mon", "open": 182, "close": 187, "low": 180, "high": 189 }]'>
21
+ * </c2-candlestick-chart>
22
+ * ```
23
+ *
24
+ * @tag c2-candlestick-chart
25
+ */
26
+ export declare class CandlestickChart extends EchartsChartBase {
27
+ protected readonly features: readonly EchartsFeature[];
28
+ /** Row field containing the opening value. */
29
+ openField: string;
30
+ /** Row field containing the closing value. */
31
+ closeField: string;
32
+ /** Row field containing the lowest value. */
33
+ lowField: string;
34
+ /** Row field containing the highest value. */
35
+ highField: string;
36
+ /** Name shown by an enabled legend for the complete OHLC series. */
37
+ name: string;
38
+ constructor();
39
+ protected inferredSeries(): ChartSeriesConfig[];
40
+ protected coordinateSystem(context: ChartBuildContext): Record<string, unknown>;
41
+ protected projectData(frame: ChartFrame): unknown[];
42
+ protected buildOptions(context: ChartBuildContext): EchartsOptions;
43
+ protected seriesOption(_index: number, context: ChartBuildContext): Record<string, unknown>;
44
+ protected legendItems(): ChartLegendItem[];
45
+ private xLabels;
46
+ }
47
+ declare global {
48
+ interface HTMLElementTagNameMap {
49
+ 'c2-candlestick-chart': CandlestickChart;
50
+ }
51
+ }
52
+ //# sourceMappingURL=candlestick-chart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candlestick-chart.d.ts","sourceRoot":"","sources":["../../src/candlestick-chart.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,mBAAmB,CAAA;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;IACxE,mBAAmB,EAAE,wBAAwB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;CAC/E;AAED;;;;;;;;;;;;GAYG;AACH,qBACa,gBAAiB,SAAQ,gBAAgB;IACpD,mBAA4B,QAAQ,EAAE,SAAS,cAAc,EAAE,CAA0B;IAEzF,8CAA8C;IACO,SAAS,SAAS;IAEvE,8CAA8C;IACQ,UAAU,SAAU;IAE1E,6CAA6C;IACO,QAAQ,SAAQ;IAEpE,8CAA8C;IACO,SAAS,SAAS;IAEvE,oEAAoE;IACxC,IAAI,SAAU;;cASvB,cAAc,IAAI,iBAAiB,EAAE;cASrC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAUrE,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,EAAE;cAWzC,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc;cAKxD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAYjF,WAAW,IAAI,eAAe,EAAE;IAcnD,OAAO,CAAC,OAAO;CAKhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,gBAAgB,CAAA;KACzC;CACF"}
@@ -14,6 +14,10 @@ export interface ChartLegendItem {
14
14
  series: ChartSeriesConfig;
15
15
  index: number;
16
16
  }
17
+ /** Detail emitted whenever the component-owned legend model changes. */
18
+ export interface ChartLegendChangeEventDetail {
19
+ items: ChartLegendItem[];
20
+ }
17
21
  /** Events fired by every chart, keyed for `addEventListener`. */
18
22
  export interface ChartEventMap {
19
23
  'chart-ready': CustomEvent<{
@@ -24,6 +28,8 @@ export interface ChartEventMap {
24
28
  }>;
25
29
  'point-click': CustomEvent<ChartPointEventDetail>;
26
30
  'point-hover': CustomEvent<ChartPointEventDetail | null>;
31
+ 'tooltip-change': CustomEvent<ChartTooltipContext | null>;
32
+ 'legend-change': CustomEvent<ChartLegendChangeEventDetail>;
27
33
  'range-change': CustomEvent<ChartRangeEventDetail>;
28
34
  'series-toggle': CustomEvent<ChartSeriesToggleEventDetail>;
29
35
  }
@@ -59,7 +65,9 @@ export interface ChartBase {
59
65
  * @event {CustomEvent<{ engine: string }>} chart-ready - Fired after the engine has loaded and drawn for the first time. The host also gains `data-chart-ready`, which is what a test should wait on.
60
66
  * @event {CustomEvent<{ error: unknown }>} chart-error - Fired when the engine fails to load or to draw. `detail.error` is the underlying failure.
61
67
  * @event {CustomEvent<ChartPointEventDetail>} point-click - Fired when a datum is clicked. Does not bubble: several components fire point events, so a listener belongs on the element itself.
62
- * @event {CustomEvent<ChartPointEventDetail>} point-hover - Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.
68
+ * @event {CustomEvent<ChartPointEventDetail | null>} point-hover - Fired as the pointer moves between data points, and with a `null` detail when it leaves the plot. Does not bubble.
69
+ * @event {CustomEvent<ChartTooltipContext | null>} tooltip-change - Fired with the complete tooltip model as the pointer moves, and with `null` when it leaves. Used by `c2-chart-tooltip`.
70
+ * @event {CustomEvent<ChartLegendChangeEventDetail>} legend-change - Fired when legend entries or visibility change. Used by `c2-chart-legend`.
63
71
  * @event {CustomEvent<ChartRangeEventDetail>} range-change - Fired after the user zooms or brushes. `detail.min` and `detail.max` are the new x bounds. Does not bubble.
64
72
  * @event {CustomEvent<ChartSeriesToggleEventDetail>} series-toggle - Fired when a legend entry is toggled. Does not bubble.
65
73
  *
@@ -103,6 +111,7 @@ export interface ChartBase {
103
111
  * @cssproperty {pixel} [--c2-chart__line--width=2px] - Stroke width of a line series.
104
112
  * @cssproperty {pixel} [--c2-chart__point--radius=2.5px] - Radius of a data point marker.
105
113
  * @cssproperty {opacity} [--c2-chart__area--opacity=0.15] - Opacity of the fill under an area series.
114
+ * @cssproperty {number} [--c2-chart__bar--border-radius=0] - Roundedness of a bar's value end, from 0 (square) to 0.5 (fully rounded).
106
115
  *
107
116
  * @cssproperty {color} [--c2-chart__axis--color=#71717a] - Colour of the axis lines and tick labels.
108
117
  * @cssproperty {font-size} [--c2-chart__axis--font-size=12px] - Font size of the tick labels.
@@ -165,9 +174,10 @@ export declare abstract class ChartBase extends LitElement {
165
174
  /** Whether the tooltip follows the whole x position or only the hovered datum. */
166
175
  tooltip: 'none' | 'item' | 'axis';
167
176
  /**
168
- * Whether the engine animates entry and updates. `none` by default: a chart fed by a live source should
169
- * not animate every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a
170
- * method every element already has, and shadowing it breaks the Web Animations API on the host.
177
+ * Whether the chart animates its initial draw. ECharts uses its native shape animation and uPlot uses a
178
+ * lightweight plot reveal; subsequent data updates stay immediate so a live source does not animate
179
+ * every tick. Named `animation` rather than `animate` because `HTMLElement.animate()` is a method every
180
+ * element already has, and shadowing it breaks the Web Animations API on the host.
171
181
  */
172
182
  animation: 'none' | 'auto';
173
183
  /** BCP 47 locale for the axis and tooltip formatting. Defaults to the browser locale. */
@@ -190,6 +200,8 @@ export declare abstract class ChartBase extends LitElement {
190
200
  protected hiddenSeries: Set<number>;
191
201
  protected hoverContext: ChartTooltipContext | null;
192
202
  private engineFailed;
203
+ private hasLinkedLegend;
204
+ private hasLinkedTooltip;
193
205
  protected themeController: ChartThemeController;
194
206
  protected frameBuilder: ChartFrameBuilder;
195
207
  protected frame?: ChartFrame;
@@ -202,7 +214,16 @@ export declare abstract class ChartBase extends LitElement {
202
214
  protected abstract buildOptions(context: ChartBuildContext): unknown;
203
215
  /** Projects the normalised frame into the shape this engine consumes. */
204
216
  protected abstract projectData(frame: ChartFrame, context: ChartBuildContext): unknown;
217
+ /** Restores interaction state after an engine instance is created or replaced. */
218
+ protected restoreVisibility(adapter: ChartAdapter): void;
219
+ /** Whether changing chart data can change the legend model. Pie charts use row labels as entries. */
220
+ protected get legendDependsOnData(): boolean;
205
221
  connectedCallback(): void;
222
+ /**
223
+ * Client-rendered charts connect before Lit creates their plot node. Observe it after the first render as
224
+ * well, so a chart whose initial layout is zero-sized still draws when its container becomes measurable.
225
+ */
226
+ protected firstUpdated(): void;
206
227
  disconnectedCallback(): void;
207
228
  /**
208
229
  * The fast path. A change confined to `data`/`revision` on a live chart is pushed into the engine here
@@ -223,6 +244,22 @@ export declare abstract class ChartBase extends LitElement {
223
244
  appendPoint(x: number, values: readonly (number | null)[]): void;
224
245
  /** Shows or hides one series, as the legend does. */
225
246
  setSeriesVisible(index: number, visible: boolean): void;
247
+ /** Current entries for a linked `c2-chart-legend`. */
248
+ getLegendItems(): ChartLegendItem[];
249
+ /** Current hover model for a linked `c2-chart-tooltip`. */
250
+ getTooltipContext(): ChartTooltipContext | null;
251
+ /** Plot bounds used to place a linked floating tooltip in viewport coordinates. */
252
+ getPlotBounds(): DOMRect;
253
+ /** Registers an external legend and suppresses the built-in legend until it disconnects. */
254
+ registerLegendPresenter(presenter: HTMLElement): void;
255
+ /** Removes an external legend registration. */
256
+ unregisterLegendPresenter(presenter: HTMLElement): void;
257
+ /** Registers an external tooltip and suppresses the built-in tooltip until it disconnects. */
258
+ registerTooltipPresenter(presenter: HTMLElement): void;
259
+ /** Removes an external tooltip registration. */
260
+ unregisterTooltipPresenter(presenter: HTMLElement): void;
261
+ /** Notifies linked legends after a subclass changes a data-shaped legend such as pie slices. */
262
+ protected notifyLegendChange(): void;
226
263
  /** The series in draw order: `c2-chart-series` children when present, otherwise the `series` property. */
227
264
  get resolvedSeries(): ChartSeriesConfig[];
228
265
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chart-base.d.ts","sourceRoot":"","sources":["../../src/chart-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsC,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAGnI,OAAO,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AAEhG,OAAO,EAAE,iBAAiB,EAAe,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvF,OAAO,EAAE,oBAAoB,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,mBAAmB,EAEpB,MAAM,kBAAkB,CAAA;AA+BzB,kGAAkG;AAClG,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,iBAAiB,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd;AAYD,iEAAiE;AACjE,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,WAAW,CAAC;QAAE,MAAM,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,CAAC,CAAA;IAC3D,aAAa,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC9C,aAAa,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAA;IACjD,aAAa,EAAE,WAAW,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAA;IACxD,cAAc,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAA;IAClD,eAAe,EAAE,WAAW,CAAC,4BAA4B,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IACjE,mBAAmB,EAAE,wBAAwB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;CACxE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuGG;AACH,8BAAsB,SAAU,SAAQ,UAAU;;IAChD,OAAgB,MAAM,EAAE,cAAc,CAAoB;IAE1C,SAAS,CAAC,WAAW,EAAG,WAAW,GAAG,IAAI,CAAA;IACvC,OAAO,CAAC,cAAc,CAAqB;IAI9D;;;OAGG;IAC6C,IAAI,CAAC,EAAE,UAAU,CAAA;IAEjE,8FAA8F;IAClE,QAAQ,SAAI;IAExC,sEAAsE;IACtC,UAAU,CAAC,EAAE,eAAe,CAAA;IAI5D,2GAA2G;IAC3D,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAE5E,sFAAsF;IACpC,MAAM,SAAK;IAE7D,+EAA+E;IACzB,UAAU,SAAK;IAErE,mFAAmF;IAClC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAW;IAEjG;;;OAGG;IACyB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAW;IAE1F,kFAAkF;IACtD,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAS;IAEtE;;;;OAIG;IACyB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAS;IAE/D,yFAAyF;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IAE3C,mDAAmD;IACP,OAAO,UAAQ;IAE3D,kDAAkD;IACtB,KAAK,SAAK;IAEtC,4CAA4C;IACY,YAAY,SAAY;IAEhF,2GAA2G;IACtD,SAAS,SAAI;IAElE,wEAAwE;IACjB,UAAU,UAAQ;IAEzE,6FAA6F;IAC7D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAA;IAEzF,4FAA4F;IAC5D,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IAI/F,SAAS,CAAC,cAAc,EAAE,WAAW,EAAE,CAAK;IAC5C,SAAS,CAAC,YAAY,cAAoB;IAC1C,SAAS,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAO;IACzD,OAAO,CAAC,YAAY,CAAQ;IAErC,SAAS,CAAC,eAAe,uBAAiE;IAC1F,SAAS,CAAC,YAAY,oBAA0B;IAChD,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAE5B,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAehC,0CAA0C;IAC1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;IAE3D,oDAAoD;IACpD,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC;IAEzD,6FAA6F;IAC7F,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAEpE,yEAAyE;IACzE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAI7E,iBAAiB,IAAI,IAAI;IA0BzB,oBAAoB,IAAI,IAAI;IAarC;;;OAGG;cACgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;cAQ9C,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;cAkBzC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAQzD;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAMlC;;;OAGG;IACH,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI;IAUhE,qDAAqD;IACrD,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAgBvD,0GAA0G;IAC1G,IAAI,cAAc,IAAI,iBAAiB,EAAE,CAMxC;IAED;;;;;;;;OAQG;IACH,SAAS,CAAC,cAAc,IAAI,iBAAiB,EAAE;IAkB/C,8EAA8E;IAC9E,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAAuC,GAAG,MAAM;IAMnH,SAAS,CAAC,gBAAgB,IAAI,gBAAgB;IAU9C,SAAS,CAAC,YAAY,IAAI,iBAAiB;IAoF3C,OAAO,CAAC,iBAAiB;IA0IzB,4FAA4F;IAC5F,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOxC;;;OAGG;IACH,SAAS,CAAC,KAAK,IAAI,MAAM;IAQzB,iEAAiE;IACjE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;cAMzB,MAAM,IAAI,cAAc;IAyB3C,2GAA2G;IAC3G,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,WAAW;IASnB;;;;OAIG;IACH,SAAS,CAAC,WAAW,IAAI,eAAe,EAAE;IAW1C,OAAO,CAAC,YAAY;CAqBrB"}
1
+ {"version":3,"file":"chart-base.d.ts","sourceRoot":"","sources":["../../src/chart-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type CSSResultGroup, type TemplateResult } from 'lit';
2
+ import { ChartLinkedElement, type ChartLinkTarget } from './chart-link.js';
3
+ import type { ChartLegendItem } from './chart-base.js';
4
+ /**
5
+ * A legend linked to a chart by id. Place it anywhere in the document to control the legend's layout
6
+ * independently from the chart.
7
+ *
8
+ * @tag c2-chart-legend
9
+ * @slot - Replaces the generated legend. Use `renderLegend` or `renderLegendItem` for data-driven custom content.
10
+ * @csspart item - One interactive legend entry.
11
+ * @csspart marker - The colour swatch inside an entry.
12
+ * @cssproperty {pixel} [--c2-chart__legend--gap=12px] - Gap between legend entries.
13
+ * @cssproperty {padding} [--c2-chart__legend--padding=0] - Padding around the legend.
14
+ * @cssproperty {color} [--c2-chart__legend--color=#71717a] - Legend text colour.
15
+ * @cssproperty {font-size} [--c2-chart__legend--font-size=12px] - Legend font size.
16
+ * @cssproperty {opacity} [--c2-chart__legend__disabled--opacity=0.38] - Opacity of a disabled entry.
17
+ * @cssproperty {pixel} [--c2-chart__legend-marker--size=10px] - Size of the colour swatch.
18
+ * @cssproperty {border-radius} [--c2-chart__legend-marker--border-radius=999px] - Radius of the colour swatch.
19
+ */
20
+ export declare class ChartLegend extends ChartLinkedElement {
21
+ #private;
22
+ static styles: CSSResultGroup;
23
+ /** Renders the complete legend. Property only. */
24
+ renderLegend?: (items: ChartLegendItem[]) => unknown;
25
+ /** Renders the content of one generated toggle button. Property only. */
26
+ renderLegendItem?: (item: ChartLegendItem) => unknown;
27
+ private items;
28
+ protected chartConnected(chart: ChartLinkTarget): void;
29
+ protected chartDisconnected(chart: ChartLinkTarget): void;
30
+ protected render(): TemplateResult;
31
+ }
32
+ declare global {
33
+ interface HTMLElementTagNameMap {
34
+ 'c2-chart-legend': ChartLegend;
35
+ }
36
+ }
37
+ //# sourceMappingURL=chart-legend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-legend.d.ts","sourceRoot":"","sources":["../../src/chart-legend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAG/E,OAAO,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,KAAK,EAAgC,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGpF;;;;;;;;;;;;;;;GAeG;AACH,qBACa,WAAY,SAAQ,kBAAkB;;IACjD,OAAgB,MAAM,EAAE,cAAc,CAAoB;IAE1D,kDAAkD;IAClB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,OAAO,CAAA;IAEpF,yEAAyE;IACzC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAA;IAE5E,OAAO,CAAC,KAAK,CAAwB;cAM3B,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;cAM5C,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;cAM/C,MAAM,IAAI,cAAc;CAkB5C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,WAAW,CAAA;KAC/B;CACF"}
@@ -0,0 +1,26 @@
1
+ import { LitElement, type PropertyValues } from 'lit';
2
+ import type { ChartLegendItem } from './chart-base.js';
3
+ import type { ChartTooltipContext } from './chart-types.js';
4
+ /** The small public surface companion elements consume without depending on a concrete chart type. */
5
+ export interface ChartLinkTarget extends HTMLElement {
6
+ getLegendItems(): ChartLegendItem[];
7
+ getTooltipContext(): ChartTooltipContext | null;
8
+ getPlotBounds(): DOMRect;
9
+ registerLegendPresenter(presenter: HTMLElement): void;
10
+ unregisterLegendPresenter(presenter: HTMLElement): void;
11
+ registerTooltipPresenter(presenter: HTMLElement): void;
12
+ unregisterTooltipPresenter(presenter: HTMLElement): void;
13
+ }
14
+ /** Resolves and follows a chart by id within the companion's document or shadow root. */
15
+ export declare abstract class ChartLinkedElement extends LitElement {
16
+ #private;
17
+ /** Id of the chart this element presents. */
18
+ for: string;
19
+ protected chart?: ChartLinkTarget;
20
+ connectedCallback(): void;
21
+ disconnectedCallback(): void;
22
+ protected willUpdate(changed: PropertyValues): void;
23
+ protected chartConnected(_chart: ChartLinkTarget): void;
24
+ protected chartDisconnected(_chart: ChartLinkTarget): void;
25
+ }
26
+ //# sourceMappingURL=chart-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-link.d.ts","sourceRoot":"","sources":["../../src/chart-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,sGAAsG;AACtG,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,cAAc,IAAI,eAAe,EAAE,CAAA;IACnC,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAAA;IAC/C,aAAa,IAAI,OAAO,CAAA;IACxB,uBAAuB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAA;IACrD,yBAAyB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAA;IACvD,wBAAwB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAA;IACtD,0BAA0B,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAA;CACzD;AAED,yFAAyF;AACzF,8BAAsB,kBAAmB,SAAQ,UAAU;;IACzD,6CAA6C;IACF,GAAG,SAAK;IAEnD,SAAS,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAIxB,iBAAiB,IAAI,IAAI;IAkBzB,oBAAoB,IAAI,IAAI;cAclB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI5D,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAEvD,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;CA0B3D"}
@@ -42,6 +42,8 @@ export interface ChartTheme {
42
42
  fontSize: number;
43
43
  lineWidth: number;
44
44
  pointRadius: number;
45
+ /** Roundedness of a bar's value end, expressed as a 0–0.5 share of its width. */
46
+ barRadius: number;
45
47
  }
46
48
  /**
47
49
  * Resolves and caches the host's chart theme, and invalidates it whenever the page's colour scheme moves.
@@ -1 +1 @@
1
- {"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../src/chart-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAY,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,KAAK,CAAA;AAEpF,mGAAmG;AACnG,KAAK,SAAS,GAAG,sBAAsB,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,CAAA;AAE5F,wFAAwF;AACxF,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B;;;GAGG;AACH,eAAO,MAAM,YAAY,kOAmBf,CAAA;AAEV,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAoBD;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;;gBAOjD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI;IAMjD,0EAA0E;IAC1E,IAAI,KAAK,IAAI,UAAU,CAGtB;IAED,+EAA+E;IAC/E,UAAU,IAAI,IAAI;IAKlB,aAAa,IAAI,IAAI;IAarB,gBAAgB,IAAI,IAAI;CAiDzB"}
1
+ {"version":3,"file":"chart-theme.d.ts","sourceRoot":"","sources":["../../src/chart-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAY,KAAK,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,KAAK,CAAA;AAEpF,mGAAmG;AACnG,KAAK,SAAS,GAAG,sBAAsB,GAAG,WAAW,GAAG;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,CAAA;AAE5F,wFAAwF;AACxF,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B;;;GAGG;AACH,eAAO,MAAM,YAAY,kOAmBf,CAAA;AAEV,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,qFAAqF;IACrF,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAA;CAClB;AAqBD;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;;gBAOjD,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI;IAMjD,0EAA0E;IAC1E,IAAI,KAAK,IAAI,UAAU,CAGtB;IAED,+EAA+E;IAC/E,UAAU,IAAI,IAAI;IAKlB,aAAa,IAAI,IAAI;IAarB,gBAAgB,IAAI,IAAI;CAkDzB"}