@rowsncolumns/charts 27.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +100 -0
- package/Readme.md +81 -0
- package/dist/cjs/atoms/editing-chart.atom.d.ts +13 -0
- package/dist/cjs/atoms/editing-chart.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/editing-chart.atom.js +26 -0
- package/dist/cjs/basic-chart/basic-chart.d.ts +5 -0
- package/dist/cjs/basic-chart/basic-chart.d.ts.map +1 -0
- package/dist/cjs/basic-chart/basic-chart.js +2250 -0
- package/dist/cjs/basic-chart/helpers.d.ts +12 -0
- package/dist/cjs/basic-chart/helpers.d.ts.map +1 -0
- package/dist/cjs/basic-chart/helpers.js +105 -0
- package/dist/cjs/basic-chart/index.d.ts +5 -0
- package/dist/cjs/basic-chart/index.d.ts.map +1 -0
- package/dist/cjs/basic-chart/index.js +12 -0
- package/dist/cjs/components/dialogs/chart-editor-dialog.d.ts +5 -0
- package/dist/cjs/components/dialogs/chart-editor-dialog.d.ts.map +1 -0
- package/dist/cjs/components/dialogs/chart-editor-dialog.js +25 -0
- package/dist/cjs/components/editors/chart-editor.d.ts +10 -0
- package/dist/cjs/components/editors/chart-editor.d.ts.map +1 -0
- package/dist/cjs/components/editors/chart-editor.js +631 -0
- package/dist/cjs/components/editors/chart-range-input.d.ts +17 -0
- package/dist/cjs/components/editors/chart-range-input.d.ts.map +1 -0
- package/dist/cjs/components/editors/chart-range-input.js +16 -0
- package/dist/cjs/config.d.ts +19 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +196 -0
- package/dist/cjs/hooks/use-chart-editor.d.ts +8 -0
- package/dist/cjs/hooks/use-chart-editor.d.ts.map +1 -0
- package/dist/cjs/hooks/use-chart-editor.js +29 -0
- package/dist/cjs/hooks/use-charts.d.ts +35 -0
- package/dist/cjs/hooks/use-charts.d.ts.map +1 -0
- package/dist/cjs/hooks/use-charts.js +67 -0
- package/dist/cjs/hooks/use-on-create-chart.d.ts +13 -0
- package/dist/cjs/hooks/use-on-create-chart.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-create-chart.js +24 -0
- package/dist/cjs/hooks/use-on-delete-chart.d.ts +8 -0
- package/dist/cjs/hooks/use-on-delete-chart.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-delete-chart.js +19 -0
- package/dist/cjs/hooks/use-on-move-chart.d.ts +8 -0
- package/dist/cjs/hooks/use-on-move-chart.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-move-chart.js +15 -0
- package/dist/cjs/hooks/use-on-resize-chart.d.ts +8 -0
- package/dist/cjs/hooks/use-on-resize-chart.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-resize-chart.js +15 -0
- package/dist/cjs/hooks/use-on-update-chart.d.ts +9 -0
- package/dist/cjs/hooks/use-on-update-chart.d.ts.map +1 -0
- package/dist/cjs/hooks/use-on-update-chart.js +15 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/interface/create-chart.d.ts +9 -0
- package/dist/cjs/interface/create-chart.d.ts.map +1 -0
- package/dist/cjs/interface/create-chart.js +110 -0
- package/dist/cjs/interface/delete-chart.d.ts +4 -0
- package/dist/cjs/interface/delete-chart.d.ts.map +1 -0
- package/dist/cjs/interface/delete-chart.js +26 -0
- package/dist/cjs/interface/move-chart.d.ts +5 -0
- package/dist/cjs/interface/move-chart.d.ts.map +1 -0
- package/dist/cjs/interface/move-chart.js +28 -0
- package/dist/cjs/interface/resize-chart.d.ts +5 -0
- package/dist/cjs/interface/resize-chart.d.ts.map +1 -0
- package/dist/cjs/interface/resize-chart.js +30 -0
- package/dist/cjs/interface/update-chart.d.ts +4 -0
- package/dist/cjs/interface/update-chart.d.ts.map +1 -0
- package/dist/cjs/interface/update-chart.js +29 -0
- package/dist/cjs/plotly/basic-chart/basic-chart.d.ts +5 -0
- package/dist/cjs/plotly/basic-chart/basic-chart.d.ts.map +1 -0
- package/dist/cjs/plotly/basic-chart/basic-chart.js +1586 -0
- package/dist/cjs/plotly/basic-chart/helpers.d.ts +20 -0
- package/dist/cjs/plotly/basic-chart/helpers.d.ts.map +1 -0
- package/dist/cjs/plotly/basic-chart/helpers.js +114 -0
- package/dist/cjs/plotly/basic-chart/index.d.ts +5 -0
- package/dist/cjs/plotly/basic-chart/index.d.ts.map +1 -0
- package/dist/cjs/plotly/basic-chart/index.js +12 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/cjs/types.d.ts +27 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/utils/aggregation.d.ts +6 -0
- package/dist/cjs/utils/aggregation.d.ts.map +1 -0
- package/dist/cjs/utils/aggregation.js +127 -0
- package/dist/cjs/utils/bar-layout.d.ts +57 -0
- package/dist/cjs/utils/bar-layout.d.ts.map +1 -0
- package/dist/cjs/utils/bar-layout.js +81 -0
- package/dist/cjs/utils/boxplot.d.ts +62 -0
- package/dist/cjs/utils/boxplot.d.ts.map +1 -0
- package/dist/cjs/utils/boxplot.js +105 -0
- package/dist/cjs/utils/bubble.d.ts +52 -0
- package/dist/cjs/utils/bubble.d.ts.map +1 -0
- package/dist/cjs/utils/bubble.js +139 -0
- package/dist/cjs/utils/chart-spec-utils.d.ts +67 -0
- package/dist/cjs/utils/chart-spec-utils.d.ts.map +1 -0
- package/dist/cjs/utils/chart-spec-utils.js +355 -0
- package/dist/cjs/utils/echarts-gl-loader.d.ts +11 -0
- package/dist/cjs/utils/echarts-gl-loader.d.ts.map +1 -0
- package/dist/cjs/utils/echarts-gl-loader.js +59 -0
- package/dist/cjs/utils/error-bars.d.ts +58 -0
- package/dist/cjs/utils/error-bars.d.ts.map +1 -0
- package/dist/cjs/utils/error-bars.js +154 -0
- package/dist/cjs/utils/gradient.d.ts +52 -0
- package/dist/cjs/utils/gradient.d.ts.map +1 -0
- package/dist/cjs/utils/gradient.js +93 -0
- package/dist/cjs/utils/hierarchy.d.ts +28 -0
- package/dist/cjs/utils/hierarchy.d.ts.map +1 -0
- package/dist/cjs/utils/hierarchy.js +186 -0
- package/dist/cjs/utils/histogram.d.ts +46 -0
- package/dist/cjs/utils/histogram.d.ts.map +1 -0
- package/dist/cjs/utils/histogram.js +125 -0
- package/dist/cjs/utils/of-pie.d.ts +101 -0
- package/dist/cjs/utils/of-pie.d.ts.map +1 -0
- package/dist/cjs/utils/of-pie.js +159 -0
- package/dist/cjs/utils/overrides.d.ts +12 -0
- package/dist/cjs/utils/overrides.d.ts.map +1 -0
- package/dist/cjs/utils/overrides.js +171 -0
- package/dist/cjs/utils/radar.d.ts +37 -0
- package/dist/cjs/utils/radar.d.ts.map +1 -0
- package/dist/cjs/utils/radar.js +70 -0
- package/dist/cjs/utils/region-map-loader.d.ts +22 -0
- package/dist/cjs/utils/region-map-loader.d.ts.map +1 -0
- package/dist/cjs/utils/region-map-loader.js +174 -0
- package/dist/cjs/utils/region-map.d.ts +100 -0
- package/dist/cjs/utils/region-map.d.ts.map +1 -0
- package/dist/cjs/utils/region-map.js +327 -0
- package/dist/cjs/utils/stock.d.ts +64 -0
- package/dist/cjs/utils/stock.d.ts.map +1 -0
- package/dist/cjs/utils/stock.js +153 -0
- package/dist/cjs/utils/three-d.d.ts +96 -0
- package/dist/cjs/utils/three-d.d.ts.map +1 -0
- package/dist/cjs/utils/three-d.js +191 -0
- package/dist/cjs/utils/trendline.d.ts +41 -0
- package/dist/cjs/utils/trendline.d.ts.map +1 -0
- package/dist/cjs/utils/trendline.js +303 -0
- package/dist/cjs/utils/waterfall.d.ts +24 -0
- package/dist/cjs/utils/waterfall.d.ts.map +1 -0
- package/dist/cjs/utils/waterfall.js +61 -0
- package/dist/cjs/utils/webgl.d.ts +12 -0
- package/dist/cjs/utils/webgl.d.ts.map +1 -0
- package/dist/cjs/utils/webgl.js +36 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +9 -0
- package/dist/esm/atoms/editing-chart.atom.d.ts +13 -0
- package/dist/esm/atoms/editing-chart.atom.d.ts.map +1 -0
- package/dist/esm/atoms/editing-chart.atom.js +12 -0
- package/dist/esm/basic-chart/basic-chart.d.ts +5 -0
- package/dist/esm/basic-chart/basic-chart.d.ts.map +1 -0
- package/dist/esm/basic-chart/basic-chart.js +2343 -0
- package/dist/esm/basic-chart/helpers.d.ts +12 -0
- package/dist/esm/basic-chart/helpers.d.ts.map +1 -0
- package/dist/esm/basic-chart/helpers.js +98 -0
- package/dist/esm/basic-chart/index.d.ts +5 -0
- package/dist/esm/basic-chart/index.d.ts.map +1 -0
- package/dist/esm/basic-chart/index.js +7 -0
- package/dist/esm/components/dialogs/chart-editor-dialog.d.ts +5 -0
- package/dist/esm/components/dialogs/chart-editor-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/chart-editor-dialog.js +19 -0
- package/dist/esm/components/editors/chart-editor.d.ts +10 -0
- package/dist/esm/components/editors/chart-editor.d.ts.map +1 -0
- package/dist/esm/components/editors/chart-editor.js +550 -0
- package/dist/esm/components/editors/chart-range-input.d.ts +17 -0
- package/dist/esm/components/editors/chart-range-input.d.ts.map +1 -0
- package/dist/esm/components/editors/chart-range-input.js +10 -0
- package/dist/esm/config.d.ts +19 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +161 -0
- package/dist/esm/hooks/use-chart-editor.d.ts +8 -0
- package/dist/esm/hooks/use-chart-editor.d.ts.map +1 -0
- package/dist/esm/hooks/use-chart-editor.js +32 -0
- package/dist/esm/hooks/use-charts.d.ts +35 -0
- package/dist/esm/hooks/use-charts.d.ts.map +1 -0
- package/dist/esm/hooks/use-charts.js +62 -0
- package/dist/esm/hooks/use-on-create-chart.d.ts +13 -0
- package/dist/esm/hooks/use-on-create-chart.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-create-chart.js +19 -0
- package/dist/esm/hooks/use-on-delete-chart.d.ts +8 -0
- package/dist/esm/hooks/use-on-delete-chart.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-delete-chart.js +14 -0
- package/dist/esm/hooks/use-on-move-chart.d.ts +8 -0
- package/dist/esm/hooks/use-on-move-chart.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-move-chart.js +10 -0
- package/dist/esm/hooks/use-on-resize-chart.d.ts +8 -0
- package/dist/esm/hooks/use-on-resize-chart.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-resize-chart.js +10 -0
- package/dist/esm/hooks/use-on-update-chart.d.ts +9 -0
- package/dist/esm/hooks/use-on-update-chart.d.ts.map +1 -0
- package/dist/esm/hooks/use-on-update-chart.js +10 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/interface/create-chart.d.ts +9 -0
- package/dist/esm/interface/create-chart.d.ts.map +1 -0
- package/dist/esm/interface/create-chart.js +126 -0
- package/dist/esm/interface/delete-chart.d.ts +4 -0
- package/dist/esm/interface/delete-chart.d.ts.map +1 -0
- package/dist/esm/interface/delete-chart.js +20 -0
- package/dist/esm/interface/move-chart.d.ts +5 -0
- package/dist/esm/interface/move-chart.d.ts.map +1 -0
- package/dist/esm/interface/move-chart.js +22 -0
- package/dist/esm/interface/resize-chart.d.ts +5 -0
- package/dist/esm/interface/resize-chart.d.ts.map +1 -0
- package/dist/esm/interface/resize-chart.js +24 -0
- package/dist/esm/interface/update-chart.d.ts +4 -0
- package/dist/esm/interface/update-chart.d.ts.map +1 -0
- package/dist/esm/interface/update-chart.js +26 -0
- package/dist/esm/plotly/basic-chart/basic-chart.d.ts +5 -0
- package/dist/esm/plotly/basic-chart/basic-chart.d.ts.map +1 -0
- package/dist/esm/plotly/basic-chart/basic-chart.js +1682 -0
- package/dist/esm/plotly/basic-chart/helpers.d.ts +20 -0
- package/dist/esm/plotly/basic-chart/helpers.d.ts.map +1 -0
- package/dist/esm/plotly/basic-chart/helpers.js +107 -0
- package/dist/esm/plotly/basic-chart/index.d.ts +5 -0
- package/dist/esm/plotly/basic-chart/index.d.ts.map +1 -0
- package/dist/esm/plotly/basic-chart/index.js +7 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +27 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/utils/aggregation.d.ts +6 -0
- package/dist/esm/utils/aggregation.d.ts.map +1 -0
- package/dist/esm/utils/aggregation.js +96 -0
- package/dist/esm/utils/bar-layout.d.ts +57 -0
- package/dist/esm/utils/bar-layout.d.ts.map +1 -0
- package/dist/esm/utils/bar-layout.js +70 -0
- package/dist/esm/utils/boxplot.d.ts +62 -0
- package/dist/esm/utils/boxplot.d.ts.map +1 -0
- package/dist/esm/utils/boxplot.js +91 -0
- package/dist/esm/utils/bubble.d.ts +52 -0
- package/dist/esm/utils/bubble.d.ts.map +1 -0
- package/dist/esm/utils/bubble.js +122 -0
- package/dist/esm/utils/chart-spec-utils.d.ts +67 -0
- package/dist/esm/utils/chart-spec-utils.d.ts.map +1 -0
- package/dist/esm/utils/chart-spec-utils.js +270 -0
- package/dist/esm/utils/echarts-gl-loader.d.ts +11 -0
- package/dist/esm/utils/echarts-gl-loader.d.ts.map +1 -0
- package/dist/esm/utils/echarts-gl-loader.js +51 -0
- package/dist/esm/utils/error-bars.d.ts +58 -0
- package/dist/esm/utils/error-bars.d.ts.map +1 -0
- package/dist/esm/utils/error-bars.js +134 -0
- package/dist/esm/utils/gradient.d.ts +52 -0
- package/dist/esm/utils/gradient.d.ts.map +1 -0
- package/dist/esm/utils/gradient.js +84 -0
- package/dist/esm/utils/hierarchy.d.ts +28 -0
- package/dist/esm/utils/hierarchy.d.ts.map +1 -0
- package/dist/esm/utils/hierarchy.js +150 -0
- package/dist/esm/utils/histogram.d.ts +46 -0
- package/dist/esm/utils/histogram.d.ts.map +1 -0
- package/dist/esm/utils/histogram.js +95 -0
- package/dist/esm/utils/of-pie.d.ts +101 -0
- package/dist/esm/utils/of-pie.d.ts.map +1 -0
- package/dist/esm/utils/of-pie.js +141 -0
- package/dist/esm/utils/overrides.d.ts +12 -0
- package/dist/esm/utils/overrides.d.ts.map +1 -0
- package/dist/esm/utils/overrides.js +159 -0
- package/dist/esm/utils/radar.d.ts +37 -0
- package/dist/esm/utils/radar.d.ts.map +1 -0
- package/dist/esm/utils/radar.js +49 -0
- package/dist/esm/utils/region-map-loader.d.ts +22 -0
- package/dist/esm/utils/region-map-loader.d.ts.map +1 -0
- package/dist/esm/utils/region-map-loader.js +141 -0
- package/dist/esm/utils/region-map.d.ts +100 -0
- package/dist/esm/utils/region-map.d.ts.map +1 -0
- package/dist/esm/utils/region-map.js +266 -0
- package/dist/esm/utils/stock.d.ts +64 -0
- package/dist/esm/utils/stock.d.ts.map +1 -0
- package/dist/esm/utils/stock.js +123 -0
- package/dist/esm/utils/three-d.d.ts +96 -0
- package/dist/esm/utils/three-d.d.ts.map +1 -0
- package/dist/esm/utils/three-d.js +162 -0
- package/dist/esm/utils/trendline.d.ts +41 -0
- package/dist/esm/utils/trendline.d.ts.map +1 -0
- package/dist/esm/utils/trendline.js +257 -0
- package/dist/esm/utils/waterfall.d.ts +24 -0
- package/dist/esm/utils/waterfall.d.ts.map +1 -0
- package/dist/esm/utils/waterfall.js +55 -0
- package/dist/esm/utils/webgl.d.ts +12 -0
- package/dist/esm/utils/webgl.d.ts.map +1 -0
- package/dist/esm/utils/webgl.js +30 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +7 -0
- package/package.json +96 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const toLabelString: (value: unknown) => string;
|
|
2
|
+
export declare const toNumericValue: (value: unknown) => number | null;
|
|
3
|
+
export declare const createBubbleSizeScale: (values: number[]) => (value: number) => number;
|
|
4
|
+
export type BubbleSeriesInput = {
|
|
5
|
+
name?: string | null;
|
|
6
|
+
values: (string | number | boolean | null | undefined)[];
|
|
7
|
+
/**
|
|
8
|
+
* Per-series X values. Excel's scatter charts always carry per-series
|
|
9
|
+
* `xVal` (each series has its own x/y pair). Excel's bubble charts
|
|
10
|
+
* typically share an X axis but the OOXML format allows per-series.
|
|
11
|
+
* When omitted, the shared `xValues` arg on `PrepareBubbleSeriesArgs`
|
|
12
|
+
* is used — preserves the old shared-X behaviour for fixtures that
|
|
13
|
+
* pass a single domain.
|
|
14
|
+
*/
|
|
15
|
+
xValues?: (string | number | boolean | null | undefined)[];
|
|
16
|
+
/**
|
|
17
|
+
* Per-series bubble sizes. Bubble charts may carry one `bubbleSize`
|
|
18
|
+
* per series; falls back to the shared `sizeValues` when omitted.
|
|
19
|
+
*/
|
|
20
|
+
sizeValues?: (string | number | boolean | null | undefined)[];
|
|
21
|
+
};
|
|
22
|
+
export type BubbleSeriesPoint = {
|
|
23
|
+
value: [number, number, number];
|
|
24
|
+
name: string;
|
|
25
|
+
xLabel?: string;
|
|
26
|
+
};
|
|
27
|
+
export type PreparedBubbleSeries = {
|
|
28
|
+
name: string;
|
|
29
|
+
points: BubbleSeriesPoint[];
|
|
30
|
+
};
|
|
31
|
+
export type PrepareBubbleSeriesArgs = {
|
|
32
|
+
/**
|
|
33
|
+
* Shared X values across all series. Used as the fallback when a
|
|
34
|
+
* series doesn't carry its own `xValues`. For pure-scatter charts
|
|
35
|
+
* (per-series xVal) this is typically `[]` and each series provides
|
|
36
|
+
* its own.
|
|
37
|
+
*/
|
|
38
|
+
xValues: (string | number | boolean | null | undefined)[];
|
|
39
|
+
labelValues: (string | number | boolean | null | undefined)[];
|
|
40
|
+
/**
|
|
41
|
+
* Shared size values. Same fallback semantics as `xValues`.
|
|
42
|
+
*/
|
|
43
|
+
sizeValues: (string | number | boolean | null | undefined)[];
|
|
44
|
+
series: BubbleSeriesInput[];
|
|
45
|
+
};
|
|
46
|
+
export type BubbleSeriesResult = {
|
|
47
|
+
categories: string[];
|
|
48
|
+
series: PreparedBubbleSeries[];
|
|
49
|
+
sizeValues: number[];
|
|
50
|
+
};
|
|
51
|
+
export declare const prepareBubbleSeriesData: ({ xValues, labelValues, sizeValues, series, }: PrepareBubbleSeriesArgs) => BubbleSeriesResult;
|
|
52
|
+
//# sourceMappingURL=bubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bubble.d.ts","sourceRoot":"","sources":["../../../utils/bubble.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MACU,CAAC;AAE1D,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,IAYxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,aAQrC,MAAM,WAOtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IACzD;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC3D;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC9D;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC7D,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAwCF,eAAO,MAAM,uBAAuB,GAAI,+CAKrC,uBAAuB,KAAG,kBAsF5B,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareBubbleSeriesData = exports.createBubbleSizeScale = exports.toNumericValue = exports.toLabelString = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var toLabelString = function (value) {
|
|
6
|
+
return value === null || value === undefined ? "" : "".concat(value);
|
|
7
|
+
};
|
|
8
|
+
exports.toLabelString = toLabelString;
|
|
9
|
+
var toNumericValue = function (value) {
|
|
10
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
if (typeof value === "string") {
|
|
14
|
+
var parsed = Number(value);
|
|
15
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
16
|
+
}
|
|
17
|
+
if (typeof value === "boolean") {
|
|
18
|
+
return value ? 1 : 0;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
exports.toNumericValue = toNumericValue;
|
|
23
|
+
var createBubbleSizeScale = function (values) {
|
|
24
|
+
var valid = values.filter(function (value) { return Number.isFinite(value); });
|
|
25
|
+
if (valid.length === 0) {
|
|
26
|
+
return function () { return 24; };
|
|
27
|
+
}
|
|
28
|
+
var min = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(valid), false));
|
|
29
|
+
var max = Math.max.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(valid), false));
|
|
30
|
+
var range = max - min || 1;
|
|
31
|
+
return function (value) {
|
|
32
|
+
if (!Number.isFinite(value)) {
|
|
33
|
+
return 24;
|
|
34
|
+
}
|
|
35
|
+
var ratio = (value - min) / range;
|
|
36
|
+
return 12 + ratio * 42;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.createBubbleSizeScale = createBubbleSizeScale;
|
|
40
|
+
/**
|
|
41
|
+
* Build the X-coordinate index for a series. Numeric values map to
|
|
42
|
+
* their own coordinate; string values become categorical (deduped into
|
|
43
|
+
* the shared `categories` array with stable indices so multiple series
|
|
44
|
+
* agree on which integer maps to which label).
|
|
45
|
+
*/
|
|
46
|
+
var buildXCoordinates = function (xValues, categories, categoryIndex) {
|
|
47
|
+
var xCoordinates = [];
|
|
48
|
+
xValues.forEach(function (value, idx) {
|
|
49
|
+
var _a;
|
|
50
|
+
var numeric = (0, exports.toNumericValue)(value);
|
|
51
|
+
if (numeric !== null) {
|
|
52
|
+
xCoordinates[idx] = { coordinate: numeric };
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
var label = (0, exports.toLabelString)(value);
|
|
56
|
+
if (!label) {
|
|
57
|
+
xCoordinates[idx] = { coordinate: idx };
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!categoryIndex.has(label)) {
|
|
61
|
+
categoryIndex.set(label, categories.length);
|
|
62
|
+
categories.push(label);
|
|
63
|
+
}
|
|
64
|
+
xCoordinates[idx] = {
|
|
65
|
+
coordinate: (_a = categoryIndex.get(label)) !== null && _a !== void 0 ? _a : idx,
|
|
66
|
+
label: label,
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
return xCoordinates;
|
|
70
|
+
};
|
|
71
|
+
var prepareBubbleSeriesData = function (_a) {
|
|
72
|
+
var xValues = _a.xValues, labelValues = _a.labelValues, sizeValues = _a.sizeValues, series = _a.series;
|
|
73
|
+
var normalizedLabels = labelValues.map(exports.toLabelString);
|
|
74
|
+
var sharedNormalizedSizeValues = sizeValues.map(function (value) {
|
|
75
|
+
return value === undefined || value === null ? null : (0, exports.toNumericValue)(value);
|
|
76
|
+
});
|
|
77
|
+
var categories = [];
|
|
78
|
+
var categoryIndex = new Map();
|
|
79
|
+
// Shared X coordinates — used when a series doesn't carry its own
|
|
80
|
+
// `xValues`. Categories built here populate the shared category
|
|
81
|
+
// table so per-series string-X series stay in sync.
|
|
82
|
+
var sharedXCoordinates = buildXCoordinates(xValues, categories, categoryIndex);
|
|
83
|
+
var allSizeValues = [];
|
|
84
|
+
var preparedSeries = series.map(function (serie, seriesIndex) {
|
|
85
|
+
var _a, _b, _c;
|
|
86
|
+
// Per-series X values (scatter always; bubble may) override the
|
|
87
|
+
// shared X for this series only. Categories are still pooled.
|
|
88
|
+
var seriesXCoordinates = serie.xValues
|
|
89
|
+
? buildXCoordinates(serie.xValues, categories, categoryIndex)
|
|
90
|
+
: sharedXCoordinates;
|
|
91
|
+
var seriesXValues = (_a = serie.xValues) !== null && _a !== void 0 ? _a : xValues;
|
|
92
|
+
// Per-series sizes — bubble charts can carry one bubbleSize per
|
|
93
|
+
// series. Falls back to the shared array.
|
|
94
|
+
var seriesNormalizedSizeValues = serie.sizeValues
|
|
95
|
+
? serie.sizeValues.map(function (value) {
|
|
96
|
+
return value === undefined || value === null
|
|
97
|
+
? null
|
|
98
|
+
: (0, exports.toNumericValue)(value);
|
|
99
|
+
})
|
|
100
|
+
: sharedNormalizedSizeValues;
|
|
101
|
+
var points = [];
|
|
102
|
+
var yValues = serie.values.map(function (value) { return (0, exports.toNumericValue)(value); });
|
|
103
|
+
var pointCount = Math.max(yValues.length, seriesXCoordinates.length);
|
|
104
|
+
for (var i = 0; i < pointCount; i++) {
|
|
105
|
+
var y = yValues[i];
|
|
106
|
+
var coordinate = seriesXCoordinates[i];
|
|
107
|
+
if (y === null || y === undefined || !coordinate) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
var sizeSource = seriesNormalizedSizeValues[i];
|
|
111
|
+
var resolvedSize = typeof sizeSource === "number" && Number.isFinite(sizeSource)
|
|
112
|
+
? sizeSource
|
|
113
|
+
: y;
|
|
114
|
+
var sizeValue = typeof resolvedSize === "number" && Number.isFinite(resolvedSize)
|
|
115
|
+
? resolvedSize
|
|
116
|
+
: 0;
|
|
117
|
+
allSizeValues.push(sizeValue);
|
|
118
|
+
var label = (_b = normalizedLabels[i]) !== null && _b !== void 0 ? _b : "";
|
|
119
|
+
var coordinateLabel = categories.length > 0
|
|
120
|
+
? (_c = coordinate.label) !== null && _c !== void 0 ? _c : (0, exports.toLabelString)(seriesXValues[i])
|
|
121
|
+
: undefined;
|
|
122
|
+
points.push({
|
|
123
|
+
value: [coordinate.coordinate, y, sizeValue],
|
|
124
|
+
name: label,
|
|
125
|
+
xLabel: coordinateLabel,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
var name = serie.name && serie.name.trim()
|
|
129
|
+
? serie.name
|
|
130
|
+
: "Series ".concat(seriesIndex + 1);
|
|
131
|
+
return { name: name, points: points };
|
|
132
|
+
});
|
|
133
|
+
return {
|
|
134
|
+
categories: categories,
|
|
135
|
+
series: preparedSeries,
|
|
136
|
+
sizeValues: allSizeValues,
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
exports.prepareBubbleSeriesData = prepareBubbleSeriesData;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { BasicChartSpec, ChartData, EmbeddedChart, SheetRange, TreemapChart } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
type ChartType = EmbeddedChart["spec"]["chartType"];
|
|
3
|
+
type ChartCategory = "basic" | "bubble" | "hierarchy";
|
|
4
|
+
type ChartSpec = EmbeddedChart["spec"];
|
|
5
|
+
export declare const BASIC_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
|
|
6
|
+
export declare const BUBBLE_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
|
|
7
|
+
export declare const HIERARCHY_CHART_TYPES: Set<"bar" | "column" | "line" | "pie" | "area" | "doughnut" | "radar" | "stock" | "histogram" | "boxplot" | "waterfall" | "funnel" | "combo" | "regionMap" | "treemap" | "sunburst" | "bubble" | "scatter">;
|
|
8
|
+
/**
|
|
9
|
+
* Returns the category of a chart type.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getChartCategory: (chartType: ChartType) => ChartCategory;
|
|
12
|
+
/**
|
|
13
|
+
* Type guards for chart specs
|
|
14
|
+
*/
|
|
15
|
+
export declare const isBasicChartSpec: (spec: ChartSpec) => spec is ChartSpec & BasicChartSpec;
|
|
16
|
+
export type BubbleChartEditorSpec = {
|
|
17
|
+
chartType: "bubble" | "scatter";
|
|
18
|
+
domains: ChartData[];
|
|
19
|
+
series: ChartData[];
|
|
20
|
+
bubbleLabels?: ChartData[];
|
|
21
|
+
bubbleSizes?: ChartData[];
|
|
22
|
+
useFirstRowAsHeaders?: boolean;
|
|
23
|
+
/** Scatter only — line/marker mix (mirrors OOXML `<c:scatterStyle>`). */
|
|
24
|
+
scatterStyle?: "line" | "marker" | "lineMarker" | "smoothMarker" | "smooth" | "none" | null;
|
|
25
|
+
};
|
|
26
|
+
export declare const isBubbleChartSpec: (spec: ChartSpec) => spec is ChartSpec & BubbleChartEditorSpec;
|
|
27
|
+
export type HierarchyChartSpec = TreemapChart & {
|
|
28
|
+
useFirstRowAsHeaders?: boolean;
|
|
29
|
+
};
|
|
30
|
+
export declare const isHierarchyChartSpec: (spec: ChartSpec) => spec is ChartSpec & HierarchyChartSpec;
|
|
31
|
+
/**
|
|
32
|
+
* Returns the default spec for a given chart type.
|
|
33
|
+
*/
|
|
34
|
+
export declare const getDefaultChartTypeSpec: (chartType: ChartType) => Partial<ChartSpec>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns the properties that should be removed when transitioning
|
|
37
|
+
* from one chart type to another.
|
|
38
|
+
*/
|
|
39
|
+
export declare const getPropertiesToRemove: (fromType: ChartType, toType: ChartType) => string[];
|
|
40
|
+
/**
|
|
41
|
+
* Checks if chart data array is empty or contains only placeholder entries.
|
|
42
|
+
*/
|
|
43
|
+
export declare const isPlaceholderChartData: (data?: ChartData[]) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Merges chart data arrays, preserving current data if incoming is placeholder.
|
|
46
|
+
*/
|
|
47
|
+
export declare const mergeChartDataArray: (current?: ChartData[], incoming?: ChartData[]) => ChartData[];
|
|
48
|
+
/**
|
|
49
|
+
* Merges chart specs, handling chart type transitions by clearing
|
|
50
|
+
* type-specific properties when the chart type changes.
|
|
51
|
+
* Also handles special merging for chart data arrays.
|
|
52
|
+
*/
|
|
53
|
+
export declare const mergeChartSpec: (existingSpec: ChartSpec, incomingSpec: Partial<ChartSpec>) => ChartSpec;
|
|
54
|
+
/**
|
|
55
|
+
* Extracts all SheetRange objects from a ChartSpec.
|
|
56
|
+
* Useful for subscribing to data changes across all chart data sources.
|
|
57
|
+
*/
|
|
58
|
+
export declare const getChartDataRanges: (spec: ChartSpec) => SheetRange[];
|
|
59
|
+
/**
|
|
60
|
+
* Coerce an `onRequestCalculate` result into a chart label. Formula
|
|
61
|
+
* errors (#NAME?, #REF!, …) resolve as FormulaError values, and array
|
|
62
|
+
* previews aren't printable — both blank the label instead of
|
|
63
|
+
* rendering an error object in the legend.
|
|
64
|
+
*/
|
|
65
|
+
export declare const coerceCalculatedLabel: (result: unknown) => string;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=chart-spec-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-spec-utils.d.ts","sourceRoot":"","sources":["../../../utils/chart-spec-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;AACpD,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvC,eAAO,MAAM,iBAAiB,6MAe5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,6MAA4C,CAAC;AAE5E,eAAO,MAAM,qBAAqB,6MAGhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,SAAS,KAAG,aAKvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,cAAuD,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EACT,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,MAAM,GACN,IAAI,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,qBACiB,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,kBACoB,CAAC;AAwC5C;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,KACnB,OAAO,CAAC,SAAS,CAEnB,CAAC;AA2DF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,EACnB,QAAQ,SAAS,KAChB,MAAM,EAoBR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,EAAE,KAAG,OAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,SAAS,EAAE,EACrB,WAAW,SAAS,EAAE,KACrB,SAAS,EAKX,CAAC;AA+BF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,cAAc,SAAS,EACvB,cAAc,OAAO,CAAC,SAAS,CAAC,KAC/B,SAmDF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,KAAG,UAAU,EAsB9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO,KAAG,MAQvD,CAAC"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.coerceCalculatedLabel = exports.getChartDataRanges = exports.mergeChartSpec = exports.mergeChartDataArray = exports.isPlaceholderChartData = exports.getPropertiesToRemove = exports.getDefaultChartTypeSpec = exports.isHierarchyChartSpec = exports.isBubbleChartSpec = exports.isBasicChartSpec = exports.getChartCategory = exports.HIERARCHY_CHART_TYPES = exports.BUBBLE_CHART_TYPES = exports.BASIC_CHART_TYPES = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
exports.BASIC_CHART_TYPES = new Set([
|
|
6
|
+
"bar",
|
|
7
|
+
"column",
|
|
8
|
+
"line",
|
|
9
|
+
"pie",
|
|
10
|
+
"area",
|
|
11
|
+
"doughnut",
|
|
12
|
+
"radar",
|
|
13
|
+
"stock",
|
|
14
|
+
"histogram",
|
|
15
|
+
"boxplot",
|
|
16
|
+
"waterfall",
|
|
17
|
+
"funnel",
|
|
18
|
+
"combo",
|
|
19
|
+
"regionMap",
|
|
20
|
+
]);
|
|
21
|
+
exports.BUBBLE_CHART_TYPES = new Set(["bubble", "scatter"]);
|
|
22
|
+
exports.HIERARCHY_CHART_TYPES = new Set([
|
|
23
|
+
"treemap",
|
|
24
|
+
"sunburst",
|
|
25
|
+
]);
|
|
26
|
+
/**
|
|
27
|
+
* Returns the category of a chart type.
|
|
28
|
+
*/
|
|
29
|
+
var getChartCategory = function (chartType) {
|
|
30
|
+
if (exports.BASIC_CHART_TYPES.has(chartType))
|
|
31
|
+
return "basic";
|
|
32
|
+
if (exports.BUBBLE_CHART_TYPES.has(chartType))
|
|
33
|
+
return "bubble";
|
|
34
|
+
if (exports.HIERARCHY_CHART_TYPES.has(chartType))
|
|
35
|
+
return "hierarchy";
|
|
36
|
+
return "basic";
|
|
37
|
+
};
|
|
38
|
+
exports.getChartCategory = getChartCategory;
|
|
39
|
+
/**
|
|
40
|
+
* Type guards for chart specs
|
|
41
|
+
*/
|
|
42
|
+
var isBasicChartSpec = function (spec) { return exports.BASIC_CHART_TYPES.has(spec.chartType); };
|
|
43
|
+
exports.isBasicChartSpec = isBasicChartSpec;
|
|
44
|
+
var isBubbleChartSpec = function (spec) {
|
|
45
|
+
return exports.BUBBLE_CHART_TYPES.has(spec.chartType);
|
|
46
|
+
};
|
|
47
|
+
exports.isBubbleChartSpec = isBubbleChartSpec;
|
|
48
|
+
var isHierarchyChartSpec = function (spec) {
|
|
49
|
+
return exports.HIERARCHY_CHART_TYPES.has(spec.chartType);
|
|
50
|
+
};
|
|
51
|
+
exports.isHierarchyChartSpec = isHierarchyChartSpec;
|
|
52
|
+
/**
|
|
53
|
+
* Default specs for each chart type.
|
|
54
|
+
* These provide sensible defaults when creating new charts.
|
|
55
|
+
*/
|
|
56
|
+
var DEFAULT_CHART_TYPE_SPECS = {
|
|
57
|
+
line: { chartType: "line", smooth: false },
|
|
58
|
+
bar: { chartType: "bar", stackedType: "UNSTACKED" },
|
|
59
|
+
column: { chartType: "column", stackedType: "UNSTACKED" },
|
|
60
|
+
pie: { chartType: "pie", stackedType: "UNSTACKED", radius: [0, "75%"] },
|
|
61
|
+
area: { chartType: "area" },
|
|
62
|
+
doughnut: {
|
|
63
|
+
chartType: "doughnut",
|
|
64
|
+
stackedType: "UNSTACKED",
|
|
65
|
+
doughnutHoleSize: 0.5,
|
|
66
|
+
},
|
|
67
|
+
radar: { chartType: "radar" },
|
|
68
|
+
stock: { chartType: "stock" },
|
|
69
|
+
histogram: { chartType: "histogram" },
|
|
70
|
+
boxplot: { chartType: "boxplot" },
|
|
71
|
+
waterfall: { chartType: "waterfall" },
|
|
72
|
+
funnel: { chartType: "funnel" },
|
|
73
|
+
combo: { chartType: "combo" },
|
|
74
|
+
regionMap: { chartType: "regionMap", geoScope: "world" },
|
|
75
|
+
bubble: {
|
|
76
|
+
chartType: "bubble",
|
|
77
|
+
bubbleLabels: [{ sources: [] }],
|
|
78
|
+
useFirstRowAsHeaders: true,
|
|
79
|
+
},
|
|
80
|
+
scatter: {
|
|
81
|
+
chartType: "scatter",
|
|
82
|
+
bubbleLabels: [{ sources: [] }],
|
|
83
|
+
useFirstRowAsHeaders: true,
|
|
84
|
+
},
|
|
85
|
+
treemap: { chartType: "treemap", useFirstRowAsHeaders: true },
|
|
86
|
+
sunburst: { chartType: "sunburst", useFirstRowAsHeaders: true },
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Returns the default spec for a given chart type.
|
|
90
|
+
*/
|
|
91
|
+
var getDefaultChartTypeSpec = function (chartType) {
|
|
92
|
+
var _a;
|
|
93
|
+
return (_a = DEFAULT_CHART_TYPE_SPECS[chartType]) !== null && _a !== void 0 ? _a : { chartType: chartType };
|
|
94
|
+
};
|
|
95
|
+
exports.getDefaultChartTypeSpec = getDefaultChartTypeSpec;
|
|
96
|
+
/**
|
|
97
|
+
* Properties specific to individual chart types within the basic category.
|
|
98
|
+
* These should be cleared when switching between chart types within basic charts.
|
|
99
|
+
*/
|
|
100
|
+
var BASIC_CHART_TYPE_PROPERTIES = {
|
|
101
|
+
line: ["smooth"],
|
|
102
|
+
// `doughnutHoleSize` is deliberately NOT cleared when leaving pie so
|
|
103
|
+
// upgrading a legacy pie-based doughnut (pie + doughnutHoleSize) to
|
|
104
|
+
// the first-class doughnut token keeps the authored hole size.
|
|
105
|
+
pie: [
|
|
106
|
+
"radius",
|
|
107
|
+
// Of-pie composite fields (pie-of-pie / bar-of-pie) — meaningless
|
|
108
|
+
// on any other chart type, so drop them on transition.
|
|
109
|
+
"sourceChartType",
|
|
110
|
+
"ofPieType",
|
|
111
|
+
"splitType",
|
|
112
|
+
"splitPos",
|
|
113
|
+
"secondPieSize",
|
|
114
|
+
],
|
|
115
|
+
doughnut: ["doughnutHoleSize"],
|
|
116
|
+
waterfall: ["totalIndices"],
|
|
117
|
+
boxplot: ["quartileMethod", "showOutliers", "showMeanMarker"],
|
|
118
|
+
// Region map (filled map / choropleth) — the geo scope and the
|
|
119
|
+
// authored-class marker are meaningless on any other chart type.
|
|
120
|
+
regionMap: ["sourceChartType", "geoScope"],
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Properties specific to each chart category.
|
|
124
|
+
* These should be cleared when switching between categories.
|
|
125
|
+
*/
|
|
126
|
+
var CATEGORY_SPECIFIC_PROPERTIES = {
|
|
127
|
+
basic: [
|
|
128
|
+
"smooth",
|
|
129
|
+
"radius",
|
|
130
|
+
"stackedType",
|
|
131
|
+
"doughnutHoleSize",
|
|
132
|
+
"totalIndices",
|
|
133
|
+
"sourceChartType",
|
|
134
|
+
"ofPieType",
|
|
135
|
+
"splitType",
|
|
136
|
+
"splitPos",
|
|
137
|
+
"secondPieSize",
|
|
138
|
+
"quartileMethod",
|
|
139
|
+
"showOutliers",
|
|
140
|
+
"showMeanMarker",
|
|
141
|
+
"geoScope",
|
|
142
|
+
],
|
|
143
|
+
bubble: [
|
|
144
|
+
"bubbleLabels",
|
|
145
|
+
"bubbleSizes",
|
|
146
|
+
"useFirstRowAsHeaders",
|
|
147
|
+
"scatterStyle",
|
|
148
|
+
],
|
|
149
|
+
hierarchy: ["labels", "parentLabels", "sizeData", "useFirstRowAsHeaders"],
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Returns the properties that should be removed when transitioning
|
|
153
|
+
* from one chart type to another.
|
|
154
|
+
*/
|
|
155
|
+
var getPropertiesToRemove = function (fromType, toType) {
|
|
156
|
+
var _a;
|
|
157
|
+
// No changes needed if same chart type
|
|
158
|
+
if (fromType === toType) {
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
var fromCategory = (0, exports.getChartCategory)(fromType);
|
|
162
|
+
var toCategory = (0, exports.getChartCategory)(toType);
|
|
163
|
+
if (fromCategory !== toCategory) {
|
|
164
|
+
// Switching between categories - remove all category-specific properties
|
|
165
|
+
return CATEGORY_SPECIFIC_PROPERTIES[fromCategory];
|
|
166
|
+
}
|
|
167
|
+
// Switching within basic charts - only remove chart-specific properties
|
|
168
|
+
if (fromCategory === "basic") {
|
|
169
|
+
return (_a = BASIC_CHART_TYPE_PROPERTIES[fromType]) !== null && _a !== void 0 ? _a : [];
|
|
170
|
+
}
|
|
171
|
+
return [];
|
|
172
|
+
};
|
|
173
|
+
exports.getPropertiesToRemove = getPropertiesToRemove;
|
|
174
|
+
/**
|
|
175
|
+
* Checks if chart data array is empty or contains only placeholder entries.
|
|
176
|
+
*/
|
|
177
|
+
var isPlaceholderChartData = function (data) {
|
|
178
|
+
if (!data || data.length === 0)
|
|
179
|
+
return true;
|
|
180
|
+
return data.every(function (entry) {
|
|
181
|
+
var _a;
|
|
182
|
+
var sources = (_a = entry === null || entry === void 0 ? void 0 : entry.sources) !== null && _a !== void 0 ? _a : [];
|
|
183
|
+
return sources.length === 0 || sources.every(function (source) { return !source; });
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
exports.isPlaceholderChartData = isPlaceholderChartData;
|
|
187
|
+
/**
|
|
188
|
+
* Merges chart data arrays, preserving current data if incoming is placeholder.
|
|
189
|
+
*/
|
|
190
|
+
var mergeChartDataArray = function (current, incoming) {
|
|
191
|
+
var _a;
|
|
192
|
+
if (!incoming || (0, exports.isPlaceholderChartData)(incoming)) {
|
|
193
|
+
return (_a = current !== null && current !== void 0 ? current : incoming) !== null && _a !== void 0 ? _a : [];
|
|
194
|
+
}
|
|
195
|
+
return incoming;
|
|
196
|
+
};
|
|
197
|
+
exports.mergeChartDataArray = mergeChartDataArray;
|
|
198
|
+
/**
|
|
199
|
+
* Chart data fields specific to each category.
|
|
200
|
+
*/
|
|
201
|
+
var CATEGORY_DATA_FIELDS = {
|
|
202
|
+
basic: ["domains", "series"],
|
|
203
|
+
bubble: ["domains", "series", "bubbleLabels", "bubbleSizes"],
|
|
204
|
+
hierarchy: ["labels", "parentLabels", "sizeData"],
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Merges chart specs, handling chart type transitions by clearing
|
|
208
|
+
* type-specific properties when the chart type changes.
|
|
209
|
+
* Also handles special merging for chart data arrays.
|
|
210
|
+
*/
|
|
211
|
+
var mergeChartSpec = function (existingSpec, incomingSpec) {
|
|
212
|
+
var e_1, _a, e_2, _b, e_3, _c;
|
|
213
|
+
var incomingChartType = incomingSpec.chartType;
|
|
214
|
+
var existingChartType = existingSpec.chartType;
|
|
215
|
+
var existingCategory = (0, exports.getChartCategory)(existingChartType);
|
|
216
|
+
var targetCategory = incomingChartType
|
|
217
|
+
? (0, exports.getChartCategory)(incomingChartType)
|
|
218
|
+
: existingCategory;
|
|
219
|
+
var isCategoryChange = incomingChartType && existingCategory !== targetCategory;
|
|
220
|
+
// Start with a copy of existing spec
|
|
221
|
+
var merged = tslib_1.__assign({}, existingSpec);
|
|
222
|
+
// Handle chart type changes - remove type-specific properties
|
|
223
|
+
if (incomingChartType && incomingChartType !== existingChartType) {
|
|
224
|
+
var propertiesToRemove = (0, exports.getPropertiesToRemove)(existingChartType, incomingChartType);
|
|
225
|
+
try {
|
|
226
|
+
for (var propertiesToRemove_1 = tslib_1.__values(propertiesToRemove), propertiesToRemove_1_1 = propertiesToRemove_1.next(); !propertiesToRemove_1_1.done; propertiesToRemove_1_1 = propertiesToRemove_1.next()) {
|
|
227
|
+
var prop = propertiesToRemove_1_1.value;
|
|
228
|
+
delete merged[prop];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
232
|
+
finally {
|
|
233
|
+
try {
|
|
234
|
+
if (propertiesToRemove_1_1 && !propertiesToRemove_1_1.done && (_a = propertiesToRemove_1.return)) _a.call(propertiesToRemove_1);
|
|
235
|
+
}
|
|
236
|
+
finally { if (e_1) throw e_1.error; }
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// When switching categories, remove data fields from old category
|
|
240
|
+
if (isCategoryChange) {
|
|
241
|
+
var oldCategoryDataFields = CATEGORY_DATA_FIELDS[existingCategory];
|
|
242
|
+
try {
|
|
243
|
+
for (var oldCategoryDataFields_1 = tslib_1.__values(oldCategoryDataFields), oldCategoryDataFields_1_1 = oldCategoryDataFields_1.next(); !oldCategoryDataFields_1_1.done; oldCategoryDataFields_1_1 = oldCategoryDataFields_1.next()) {
|
|
244
|
+
var field = oldCategoryDataFields_1_1.value;
|
|
245
|
+
delete merged[field];
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
249
|
+
finally {
|
|
250
|
+
try {
|
|
251
|
+
if (oldCategoryDataFields_1_1 && !oldCategoryDataFields_1_1.done && (_b = oldCategoryDataFields_1.return)) _b.call(oldCategoryDataFields_1);
|
|
252
|
+
}
|
|
253
|
+
finally { if (e_2) throw e_2.error; }
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Apply incoming spec properties
|
|
257
|
+
Object.assign(merged, incomingSpec);
|
|
258
|
+
// Handle chart data array merging - preserve existing if incoming is placeholder
|
|
259
|
+
// Only merge data fields that belong to the target category
|
|
260
|
+
var existingWithData = existingSpec;
|
|
261
|
+
var incomingWithData = incomingSpec;
|
|
262
|
+
var targetDataFields = CATEGORY_DATA_FIELDS[targetCategory];
|
|
263
|
+
try {
|
|
264
|
+
for (var targetDataFields_1 = tslib_1.__values(targetDataFields), targetDataFields_1_1 = targetDataFields_1.next(); !targetDataFields_1_1.done; targetDataFields_1_1 = targetDataFields_1.next()) {
|
|
265
|
+
var field = targetDataFields_1_1.value;
|
|
266
|
+
var existingData = isCategoryChange ? undefined : existingWithData[field];
|
|
267
|
+
var incomingData = incomingWithData[field];
|
|
268
|
+
if (existingData !== undefined || incomingData !== undefined) {
|
|
269
|
+
merged[field] = (0, exports.mergeChartDataArray)(existingData, incomingData);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
274
|
+
finally {
|
|
275
|
+
try {
|
|
276
|
+
if (targetDataFields_1_1 && !targetDataFields_1_1.done && (_c = targetDataFields_1.return)) _c.call(targetDataFields_1);
|
|
277
|
+
}
|
|
278
|
+
finally { if (e_3) throw e_3.error; }
|
|
279
|
+
}
|
|
280
|
+
return merged;
|
|
281
|
+
};
|
|
282
|
+
exports.mergeChartSpec = mergeChartSpec;
|
|
283
|
+
/**
|
|
284
|
+
* Extracts all SheetRange objects from a ChartSpec.
|
|
285
|
+
* Useful for subscribing to data changes across all chart data sources.
|
|
286
|
+
*/
|
|
287
|
+
var getChartDataRanges = function (spec) {
|
|
288
|
+
var e_4, _a, e_5, _b, e_6, _c;
|
|
289
|
+
var ranges = [];
|
|
290
|
+
var category = (0, exports.getChartCategory)(spec.chartType);
|
|
291
|
+
var dataFields = CATEGORY_DATA_FIELDS[category];
|
|
292
|
+
var specWithData = spec;
|
|
293
|
+
try {
|
|
294
|
+
for (var dataFields_1 = tslib_1.__values(dataFields), dataFields_1_1 = dataFields_1.next(); !dataFields_1_1.done; dataFields_1_1 = dataFields_1.next()) {
|
|
295
|
+
var field = dataFields_1_1.value;
|
|
296
|
+
var chartDataArray = specWithData[field];
|
|
297
|
+
if (chartDataArray) {
|
|
298
|
+
try {
|
|
299
|
+
for (var chartDataArray_1 = (e_5 = void 0, tslib_1.__values(chartDataArray)), chartDataArray_1_1 = chartDataArray_1.next(); !chartDataArray_1_1.done; chartDataArray_1_1 = chartDataArray_1.next()) {
|
|
300
|
+
var chartData = chartDataArray_1_1.value;
|
|
301
|
+
if (chartData === null || chartData === void 0 ? void 0 : chartData.sources) {
|
|
302
|
+
try {
|
|
303
|
+
for (var _d = (e_6 = void 0, tslib_1.__values(chartData.sources)), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
304
|
+
var source = _e.value;
|
|
305
|
+
if (source) {
|
|
306
|
+
ranges.push(source);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
311
|
+
finally {
|
|
312
|
+
try {
|
|
313
|
+
if (_e && !_e.done && (_c = _d.return)) _c.call(_d);
|
|
314
|
+
}
|
|
315
|
+
finally { if (e_6) throw e_6.error; }
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
321
|
+
finally {
|
|
322
|
+
try {
|
|
323
|
+
if (chartDataArray_1_1 && !chartDataArray_1_1.done && (_b = chartDataArray_1.return)) _b.call(chartDataArray_1);
|
|
324
|
+
}
|
|
325
|
+
finally { if (e_5) throw e_5.error; }
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
331
|
+
finally {
|
|
332
|
+
try {
|
|
333
|
+
if (dataFields_1_1 && !dataFields_1_1.done && (_a = dataFields_1.return)) _a.call(dataFields_1);
|
|
334
|
+
}
|
|
335
|
+
finally { if (e_4) throw e_4.error; }
|
|
336
|
+
}
|
|
337
|
+
return ranges;
|
|
338
|
+
};
|
|
339
|
+
exports.getChartDataRanges = getChartDataRanges;
|
|
340
|
+
/**
|
|
341
|
+
* Coerce an `onRequestCalculate` result into a chart label. Formula
|
|
342
|
+
* errors (#NAME?, #REF!, …) resolve as FormulaError values, and array
|
|
343
|
+
* previews aren't printable — both blank the label instead of
|
|
344
|
+
* rendering an error object in the legend.
|
|
345
|
+
*/
|
|
346
|
+
var coerceCalculatedLabel = function (result) {
|
|
347
|
+
if (typeof result === "string") {
|
|
348
|
+
return result;
|
|
349
|
+
}
|
|
350
|
+
if (typeof result === "number" || typeof result === "boolean") {
|
|
351
|
+
return String(result);
|
|
352
|
+
}
|
|
353
|
+
return "";
|
|
354
|
+
};
|
|
355
|
+
exports.coerceCalculatedLabel = coerceCalculatedLabel;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type EchartsGlLoadState = "unloaded" | "loading" | "ready" | "failed";
|
|
2
|
+
export declare const getEchartsGlState: () => EchartsGlLoadState;
|
|
3
|
+
/**
|
|
4
|
+
* Kick off (or join) the echarts-gl dynamic import and register the 3-D
|
|
5
|
+
* charts/components the renderer uses. Resolves true when 3-D rendering is
|
|
6
|
+
* available, false when the import failed (renderer keeps the 2-D fallback).
|
|
7
|
+
*/
|
|
8
|
+
export declare const loadEchartsGl: () => Promise<boolean>;
|
|
9
|
+
/** Test hook — resets the module-level load state. */
|
|
10
|
+
export declare const __resetEchartsGlLoaderForTests: () => void;
|
|
11
|
+
//# sourceMappingURL=echarts-gl-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"echarts-gl-loader.d.ts","sourceRoot":"","sources":["../../../utils/echarts-gl-loader.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAK7E,eAAO,MAAM,iBAAiB,QAAO,kBAA2B,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,OAAO,CAyB/C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,QAAO,IAGjD,CAAC"}
|