@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,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Region map / filled map (OOXML chartex `<cx:regionMap>`) helpers.
|
|
4
|
+
*
|
|
5
|
+
* Excel's filled map paints a choropleth: values keyed by geography
|
|
6
|
+
* (country/state names) shade regions on a map. The spec reuses the
|
|
7
|
+
* existing series/domain data model — the category domain carries the
|
|
8
|
+
* region labels and the first series carries the values — plus an
|
|
9
|
+
* optional `geoScope` naming the registered echarts map ("world" by
|
|
10
|
+
* default).
|
|
11
|
+
*
|
|
12
|
+
* Everything here is pure: region-name normalization + alias matching,
|
|
13
|
+
* choropleth data assembly, and the sequential color ramp for the value
|
|
14
|
+
* scale. The geo asset loading lives in `region-map-loader.ts`.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.__resetRegionMapWarningsForTests = exports.warnOnceForUnmatchedRegions = exports.buildSequentialColorRamp = exports.mixHexColors = exports.buildRegionMapData = exports.buildRegionNameIndex = exports.REGION_NAME_ALIASES = exports.normalizeRegionKey = exports.resolveGeoScope = exports.isRegionMapSpec = exports.WORLD_GEO_SCOPE = void 0;
|
|
18
|
+
var tslib_1 = require("tslib");
|
|
19
|
+
/** Default geo scope — the lazily loaded world map. */
|
|
20
|
+
exports.WORLD_GEO_SCOPE = "world";
|
|
21
|
+
/**
|
|
22
|
+
* True when a basic-chart spec should render as a region-map
|
|
23
|
+
* choropleth: the first-class `"regionMap"` chart type, or any payload
|
|
24
|
+
* degraded to another `chartType` that preserves the authored class as
|
|
25
|
+
* `sourceChartType: "REGION_MAP"` (case-insensitive, mirroring
|
|
26
|
+
* `isParetoSpec` / `isOfPieChartSpec`).
|
|
27
|
+
*/
|
|
28
|
+
var isRegionMapSpec = function (spec) {
|
|
29
|
+
return (spec === null || spec === void 0 ? void 0 : spec.chartType) === "regionMap" ||
|
|
30
|
+
(typeof (spec === null || spec === void 0 ? void 0 : spec.sourceChartType) === "string" &&
|
|
31
|
+
spec.sourceChartType.toUpperCase() === "REGION_MAP");
|
|
32
|
+
};
|
|
33
|
+
exports.isRegionMapSpec = isRegionMapSpec;
|
|
34
|
+
/** Coerce a `geoScope` value to a usable map name (default "world"). */
|
|
35
|
+
var resolveGeoScope = function (raw) {
|
|
36
|
+
var scope = typeof raw === "string" ? raw.trim() : "";
|
|
37
|
+
return scope.length > 0 ? scope : exports.WORLD_GEO_SCOPE;
|
|
38
|
+
};
|
|
39
|
+
exports.resolveGeoScope = resolveGeoScope;
|
|
40
|
+
/**
|
|
41
|
+
* Normalize a region label for matching: trim, collapse whitespace,
|
|
42
|
+
* casefold, strip diacritics ("Côte d'Ivoire" → "cote d'ivoire"),
|
|
43
|
+
* unify curly apostrophes, and drop periods ("U.S." → "us").
|
|
44
|
+
*/
|
|
45
|
+
var normalizeRegionKey = function (name) {
|
|
46
|
+
return String(name !== null && name !== void 0 ? name : "")
|
|
47
|
+
.normalize("NFD")
|
|
48
|
+
// Combining diacritical marks left behind by NFD decomposition.
|
|
49
|
+
.replace(/[\u0300-\u036f]/g, "")
|
|
50
|
+
.replace(/[\u2018\u2019]/g, "'")
|
|
51
|
+
.replace(/\./g, "")
|
|
52
|
+
.replace(/\s+/g, " ")
|
|
53
|
+
.trim()
|
|
54
|
+
.toLowerCase();
|
|
55
|
+
};
|
|
56
|
+
exports.normalizeRegionKey = normalizeRegionKey;
|
|
57
|
+
/**
|
|
58
|
+
* Groups of equivalent region names. Members are matched through
|
|
59
|
+
* `normalizeRegionKey`, so casing/diacritics/periods don't matter.
|
|
60
|
+
* Each group binds only when one of its members actually exists on the
|
|
61
|
+
* loaded map, so the table is map-agnostic: the canonical spellings
|
|
62
|
+
* below cover both the bundled world map's Natural Earth names
|
|
63
|
+
* ("United States of America", "Dem. Rep. Congo", …) and the long-form
|
|
64
|
+
* names hosts commonly author.
|
|
65
|
+
*/
|
|
66
|
+
exports.REGION_NAME_ALIASES = [
|
|
67
|
+
["United States of America", "United States", "USA", "US", "America"],
|
|
68
|
+
["United Kingdom", "UK", "Great Britain", "Britain"],
|
|
69
|
+
["Russia", "Russian Federation"],
|
|
70
|
+
["South Korea", "Republic of Korea", "Korea, South", "Korea"],
|
|
71
|
+
[
|
|
72
|
+
"North Korea",
|
|
73
|
+
"Democratic People's Republic of Korea",
|
|
74
|
+
"Korea, North",
|
|
75
|
+
],
|
|
76
|
+
["Czechia", "Czech Republic"],
|
|
77
|
+
["Côte d'Ivoire", "Ivory Coast", "Cote d'Ivoire"],
|
|
78
|
+
[
|
|
79
|
+
"Dem. Rep. Congo",
|
|
80
|
+
"Democratic Republic of the Congo",
|
|
81
|
+
"DR Congo",
|
|
82
|
+
"DRC",
|
|
83
|
+
"Congo-Kinshasa",
|
|
84
|
+
"Congo (Kinshasa)",
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
"Congo",
|
|
88
|
+
"Republic of the Congo",
|
|
89
|
+
"Congo-Brazzaville",
|
|
90
|
+
"Congo (Brazzaville)",
|
|
91
|
+
],
|
|
92
|
+
["Myanmar", "Burma"],
|
|
93
|
+
["Vietnam", "Viet Nam"],
|
|
94
|
+
["Syria", "Syrian Arab Republic"],
|
|
95
|
+
["Iran", "Islamic Republic of Iran"],
|
|
96
|
+
["Laos", "Lao PDR", "Lao People's Democratic Republic"],
|
|
97
|
+
["Bolivia", "Plurinational State of Bolivia"],
|
|
98
|
+
["Venezuela", "Bolivarian Republic of Venezuela"],
|
|
99
|
+
["Tanzania", "United Republic of Tanzania"],
|
|
100
|
+
["Moldova", "Republic of Moldova"],
|
|
101
|
+
["Brunei", "Brunei Darussalam"],
|
|
102
|
+
["United Arab Emirates", "UAE"],
|
|
103
|
+
["Bahamas", "The Bahamas"],
|
|
104
|
+
["Gambia", "The Gambia"],
|
|
105
|
+
["Timor-Leste", "East Timor"],
|
|
106
|
+
["eSwatini", "Eswatini", "Swaziland"],
|
|
107
|
+
["Macedonia", "North Macedonia"],
|
|
108
|
+
["Bosnia and Herz.", "Bosnia and Herzegovina", "Bosnia"],
|
|
109
|
+
["Central African Rep.", "Central African Republic"],
|
|
110
|
+
["Dominican Rep.", "Dominican Republic"],
|
|
111
|
+
["Eq. Guinea", "Equatorial Guinea"],
|
|
112
|
+
["S. Sudan", "South Sudan"],
|
|
113
|
+
["Solomon Is.", "Solomon Islands"],
|
|
114
|
+
["W. Sahara", "Western Sahara"],
|
|
115
|
+
["Falkland Is.", "Falkland Islands"],
|
|
116
|
+
["Turkey", "Türkiye"],
|
|
117
|
+
["Netherlands", "The Netherlands", "Holland"],
|
|
118
|
+
["Palestine", "State of Palestine", "Palestinian Territories"],
|
|
119
|
+
];
|
|
120
|
+
/**
|
|
121
|
+
* Build a lookup from normalized label → the map's own region name.
|
|
122
|
+
* Exact (normalized) names always win; alias-group members resolve to
|
|
123
|
+
* whichever member exists on the map, and never shadow a real region
|
|
124
|
+
* name.
|
|
125
|
+
*/
|
|
126
|
+
var buildRegionNameIndex = function (regionNames) {
|
|
127
|
+
var e_1, _a, e_2, _b, e_3, _c, e_4, _d;
|
|
128
|
+
var index = new Map();
|
|
129
|
+
try {
|
|
130
|
+
for (var regionNames_1 = tslib_1.__values(regionNames), regionNames_1_1 = regionNames_1.next(); !regionNames_1_1.done; regionNames_1_1 = regionNames_1.next()) {
|
|
131
|
+
var name_1 = regionNames_1_1.value;
|
|
132
|
+
var key = (0, exports.normalizeRegionKey)(name_1);
|
|
133
|
+
if (key && !index.has(key)) {
|
|
134
|
+
index.set(key, name_1);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
139
|
+
finally {
|
|
140
|
+
try {
|
|
141
|
+
if (regionNames_1_1 && !regionNames_1_1.done && (_a = regionNames_1.return)) _a.call(regionNames_1);
|
|
142
|
+
}
|
|
143
|
+
finally { if (e_1) throw e_1.error; }
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
for (var REGION_NAME_ALIASES_1 = tslib_1.__values(exports.REGION_NAME_ALIASES), REGION_NAME_ALIASES_1_1 = REGION_NAME_ALIASES_1.next(); !REGION_NAME_ALIASES_1_1.done; REGION_NAME_ALIASES_1_1 = REGION_NAME_ALIASES_1.next()) {
|
|
147
|
+
var group = REGION_NAME_ALIASES_1_1.value;
|
|
148
|
+
// The group's target is the member that exists on the map.
|
|
149
|
+
var target = void 0;
|
|
150
|
+
try {
|
|
151
|
+
for (var group_1 = (e_3 = void 0, tslib_1.__values(group)), group_1_1 = group_1.next(); !group_1_1.done; group_1_1 = group_1.next()) {
|
|
152
|
+
var member = group_1_1.value;
|
|
153
|
+
var existing = index.get((0, exports.normalizeRegionKey)(member));
|
|
154
|
+
if (existing !== undefined) {
|
|
155
|
+
target = existing;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
161
|
+
finally {
|
|
162
|
+
try {
|
|
163
|
+
if (group_1_1 && !group_1_1.done && (_c = group_1.return)) _c.call(group_1);
|
|
164
|
+
}
|
|
165
|
+
finally { if (e_3) throw e_3.error; }
|
|
166
|
+
}
|
|
167
|
+
if (target === undefined)
|
|
168
|
+
continue;
|
|
169
|
+
try {
|
|
170
|
+
for (var group_2 = (e_4 = void 0, tslib_1.__values(group)), group_2_1 = group_2.next(); !group_2_1.done; group_2_1 = group_2.next()) {
|
|
171
|
+
var member = group_2_1.value;
|
|
172
|
+
var key = (0, exports.normalizeRegionKey)(member);
|
|
173
|
+
if (key && !index.has(key)) {
|
|
174
|
+
index.set(key, target);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
179
|
+
finally {
|
|
180
|
+
try {
|
|
181
|
+
if (group_2_1 && !group_2_1.done && (_d = group_2.return)) _d.call(group_2);
|
|
182
|
+
}
|
|
183
|
+
finally { if (e_4) throw e_4.error; }
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
188
|
+
finally {
|
|
189
|
+
try {
|
|
190
|
+
if (REGION_NAME_ALIASES_1_1 && !REGION_NAME_ALIASES_1_1.done && (_b = REGION_NAME_ALIASES_1.return)) _b.call(REGION_NAME_ALIASES_1);
|
|
191
|
+
}
|
|
192
|
+
finally { if (e_2) throw e_2.error; }
|
|
193
|
+
}
|
|
194
|
+
return index;
|
|
195
|
+
};
|
|
196
|
+
exports.buildRegionNameIndex = buildRegionNameIndex;
|
|
197
|
+
var toFiniteNumber = function (value) {
|
|
198
|
+
var n = typeof value === "number" ? value : Number(value);
|
|
199
|
+
return Number.isFinite(n) ? n : undefined;
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Assemble echarts `map`-series data from parallel label/value arrays
|
|
203
|
+
* (category domain = region labels, first series = values).
|
|
204
|
+
*
|
|
205
|
+
* - labels are matched exactly first, then through the normalization +
|
|
206
|
+
* alias layer; unmatched labels are collected (not thrown)
|
|
207
|
+
* - blank labels and non-finite values are skipped
|
|
208
|
+
* - duplicate labels collapse onto one region (last value wins)
|
|
209
|
+
* - min/max span the matched values; degenerate extents are widened so
|
|
210
|
+
* the visualMap ramp stays valid (no data → 0..1, all-equal → the
|
|
211
|
+
* value against 0, all-zero → 0..1)
|
|
212
|
+
*/
|
|
213
|
+
var buildRegionMapData = function (labels, values, regionNames) {
|
|
214
|
+
var _a;
|
|
215
|
+
var index = (0, exports.buildRegionNameIndex)(regionNames);
|
|
216
|
+
var byRegion = new Map();
|
|
217
|
+
var unmatched = [];
|
|
218
|
+
for (var i = 0; i < labels.length; i++) {
|
|
219
|
+
var label = String((_a = labels[i]) !== null && _a !== void 0 ? _a : "").trim();
|
|
220
|
+
if (!label)
|
|
221
|
+
continue;
|
|
222
|
+
var value = toFiniteNumber(values[i]);
|
|
223
|
+
if (value === undefined)
|
|
224
|
+
continue;
|
|
225
|
+
var region = index.get((0, exports.normalizeRegionKey)(label));
|
|
226
|
+
if (region === undefined) {
|
|
227
|
+
unmatched.push(label);
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
byRegion.set(region, value);
|
|
231
|
+
}
|
|
232
|
+
var data = [];
|
|
233
|
+
var min = Number.POSITIVE_INFINITY;
|
|
234
|
+
var max = Number.NEGATIVE_INFINITY;
|
|
235
|
+
byRegion.forEach(function (value, name) {
|
|
236
|
+
data.push({ name: name, value: value });
|
|
237
|
+
if (value < min)
|
|
238
|
+
min = value;
|
|
239
|
+
if (value > max)
|
|
240
|
+
max = value;
|
|
241
|
+
});
|
|
242
|
+
if (data.length === 0) {
|
|
243
|
+
min = 0;
|
|
244
|
+
max = 1;
|
|
245
|
+
}
|
|
246
|
+
else if (min === max) {
|
|
247
|
+
if (min > 0)
|
|
248
|
+
min = 0;
|
|
249
|
+
else if (max < 0)
|
|
250
|
+
max = 0;
|
|
251
|
+
else
|
|
252
|
+
max = 1;
|
|
253
|
+
}
|
|
254
|
+
return { data: data, unmatched: unmatched, min: min, max: max };
|
|
255
|
+
};
|
|
256
|
+
exports.buildRegionMapData = buildRegionMapData;
|
|
257
|
+
// ------------------------- Sequential ramp -------------------------
|
|
258
|
+
var HEX_COLOR_RE = /^#?([0-9a-f]{6})$/i;
|
|
259
|
+
var parseHexColor = function (color) {
|
|
260
|
+
var match = HEX_COLOR_RE.exec(String(color !== null && color !== void 0 ? color : "").trim());
|
|
261
|
+
if (!match)
|
|
262
|
+
return undefined;
|
|
263
|
+
var n = parseInt(match[1], 16);
|
|
264
|
+
return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff];
|
|
265
|
+
};
|
|
266
|
+
/** Linear RGB mix of two 6-digit hex colors; `t` 0 → a, 1 → b. */
|
|
267
|
+
var mixHexColors = function (a, b, t) {
|
|
268
|
+
var ca = parseHexColor(a);
|
|
269
|
+
var cb = parseHexColor(b);
|
|
270
|
+
if (!ca || !cb)
|
|
271
|
+
return b;
|
|
272
|
+
var clamped = Math.min(1, Math.max(0, t));
|
|
273
|
+
var channel = function (i) {
|
|
274
|
+
return Math.round(ca[i] + (cb[i] - ca[i]) * clamped);
|
|
275
|
+
};
|
|
276
|
+
return "#".concat([channel(0), channel(1), channel(2)]
|
|
277
|
+
.map(function (c) { return c.toString(16).padStart(2, "0"); })
|
|
278
|
+
.join(""));
|
|
279
|
+
};
|
|
280
|
+
exports.mixHexColors = mixHexColors;
|
|
281
|
+
/** Fallback hue when the theme accent isn't a parseable hex color. */
|
|
282
|
+
var DEFAULT_RAMP_ACCENT = "#4472c4";
|
|
283
|
+
var LIGHT_RAMP_BASE = "#ffffff";
|
|
284
|
+
var DARK_RAMP_BASE = "#1f2733";
|
|
285
|
+
/**
|
|
286
|
+
* Sequential (single-hue, light→dark) color ramp for the choropleth's
|
|
287
|
+
* value scale, derived from the theme accent. Dark mode gets its own
|
|
288
|
+
* steps mixed toward the dark chart surface rather than a flipped
|
|
289
|
+
* light ramp, so low values stay legible on a dark background.
|
|
290
|
+
*/
|
|
291
|
+
var buildSequentialColorRamp = function (accentColor, isDarkMode) {
|
|
292
|
+
var accent = parseHexColor(accentColor)
|
|
293
|
+
? String(accentColor).trim()
|
|
294
|
+
: DEFAULT_RAMP_ACCENT;
|
|
295
|
+
var base = isDarkMode ? DARK_RAMP_BASE : LIGHT_RAMP_BASE;
|
|
296
|
+
// Low end keeps a visible trace of the hue (never the bare surface,
|
|
297
|
+
// so "has a small value" and "has no data" read differently).
|
|
298
|
+
var stops = isDarkMode
|
|
299
|
+
? [0.25, 0.44, 0.63, 0.81, 1]
|
|
300
|
+
: [0.12, 0.34, 0.56, 0.78, 1];
|
|
301
|
+
return stops.map(function (t) { return (0, exports.mixHexColors)(base, accent, t); });
|
|
302
|
+
};
|
|
303
|
+
exports.buildSequentialColorRamp = buildSequentialColorRamp;
|
|
304
|
+
// --------------------------- Warn-once ---------------------------
|
|
305
|
+
var warnedUnmatched = new Set();
|
|
306
|
+
/**
|
|
307
|
+
* `console.warn` the unmatched region labels for a scope once — the
|
|
308
|
+
* chart re-renders on every data tick, so an unguarded warn would spam
|
|
309
|
+
* the console. Keyed by scope + label set; a different set of
|
|
310
|
+
* unmatched labels warns again.
|
|
311
|
+
*/
|
|
312
|
+
var warnOnceForUnmatchedRegions = function (scope, unmatched) {
|
|
313
|
+
if (unmatched.length === 0)
|
|
314
|
+
return;
|
|
315
|
+
var key = "".concat(scope, "|").concat(tslib_1.__spreadArray([], tslib_1.__read(unmatched), false).sort().join(""));
|
|
316
|
+
if (warnedUnmatched.has(key))
|
|
317
|
+
return;
|
|
318
|
+
warnedUnmatched.add(key);
|
|
319
|
+
// eslint-disable-next-line no-console
|
|
320
|
+
console.warn("[charts] Region map (\"".concat(scope, "\"): skipped ").concat(unmatched.length, " label(s) that match no region on the map:"), unmatched);
|
|
321
|
+
};
|
|
322
|
+
exports.warnOnceForUnmatchedRegions = warnOnceForUnmatchedRegions;
|
|
323
|
+
/** Test hook — resets the warn-once registry. */
|
|
324
|
+
var __resetRegionMapWarningsForTests = function () {
|
|
325
|
+
warnedUnmatched.clear();
|
|
326
|
+
};
|
|
327
|
+
exports.__resetRegionMapWarningsForTests = __resetRegionMapWarningsForTests;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stock-chart shaping shared by chart renderers.
|
|
3
|
+
*
|
|
4
|
+
* Excel stock charts come in four variants distinguished by the ordered
|
|
5
|
+
* set of value series they carry:
|
|
6
|
+
* - HLC : High, Low, Close
|
|
7
|
+
* - OHLC : Open, High, Low, Close
|
|
8
|
+
* - VHLC : Volume, High, Low, Close
|
|
9
|
+
* - VOHLC : Volume, Open, High, Low, Close
|
|
10
|
+
*
|
|
11
|
+
* We render stock as a "line-derived" chart: each price role becomes its
|
|
12
|
+
* own line series (volume is kept out of the price plot — it lives on a
|
|
13
|
+
* different scale and would flatten the price lines — and is instead
|
|
14
|
+
* surfaced via `toVolumeSeries` for renderers to draw as a column
|
|
15
|
+
* sub-pane on its own value axis). The candlestick transform is also
|
|
16
|
+
* provided for renderers that prefer a true OHLC body (echarts
|
|
17
|
+
* CandlestickChart / plotly candlestick).
|
|
18
|
+
*/
|
|
19
|
+
export type StockVariant = "HLC" | "OHLC" | "VHLC" | "VOHLC";
|
|
20
|
+
export type StockRole = "volume" | "open" | "high" | "low" | "close";
|
|
21
|
+
/**
|
|
22
|
+
* The ordered roles for each variant. Series are matched to roles by
|
|
23
|
+
* position — series[0] takes role[0], etc.
|
|
24
|
+
*/
|
|
25
|
+
export declare const STOCK_ROLES: Record<StockVariant, StockRole[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Map positional series to their stock roles for a given variant.
|
|
28
|
+
* Series beyond the variant's role count are ignored.
|
|
29
|
+
*/
|
|
30
|
+
export declare const assignStockRoles: (seriesValues: (number | null | undefined)[][], variant?: StockVariant) => Partial<Record<StockRole, (number | null)[]>>;
|
|
31
|
+
/**
|
|
32
|
+
* Line-derived view: emit one line series per PRICE role (open/high/low/
|
|
33
|
+
* close), preserving variant order and dropping volume. Each returned
|
|
34
|
+
* series carries a role-derived display name and its value vector.
|
|
35
|
+
*/
|
|
36
|
+
export declare const toLineSeries: (seriesValues: (number | null | undefined)[][], variant?: StockVariant) => Array<{
|
|
37
|
+
role: StockRole;
|
|
38
|
+
name: string;
|
|
39
|
+
values: (number | null)[];
|
|
40
|
+
}>;
|
|
41
|
+
export interface StockVolumePoint {
|
|
42
|
+
/** Volume value at the category index (null when missing). */
|
|
43
|
+
value: number | null;
|
|
44
|
+
/** True on an up day — used to color the volume column. */
|
|
45
|
+
up: boolean;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Volume view: extract the volume series for the V-variants and flag
|
|
49
|
+
* each point as an up/down day so renderers can color the columns to
|
|
50
|
+
* match the price plot. Up/down follows convention: close vs open where
|
|
51
|
+
* the point carries an open, otherwise close vs the previous close. A
|
|
52
|
+
* point with nothing to compare against (e.g. the first) counts as up.
|
|
53
|
+
* Returns null for variants without a volume role (HLC / OHLC) or when
|
|
54
|
+
* the volume series is absent.
|
|
55
|
+
*/
|
|
56
|
+
export declare const toVolumeSeries: (seriesValues: (number | null | undefined)[][], variant?: StockVariant) => StockVolumePoint[] | null;
|
|
57
|
+
/**
|
|
58
|
+
* Candlestick view: produce [open, close, low, high] tuples (echarts'
|
|
59
|
+
* candlestick data order) per category index. When the variant has no
|
|
60
|
+
* `open` (HLC / VHLC) the close value is used as the open so the body
|
|
61
|
+
* collapses to a tick — matching how Excel renders HLC stock bars.
|
|
62
|
+
*/
|
|
63
|
+
export declare const toCandlestick: (seriesValues: (number | null | undefined)[][], variant?: StockVariant) => Array<[number, number, number, number]>;
|
|
64
|
+
//# sourceMappingURL=stock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock.d.ts","sourceRoot":"","sources":["../../../utils/stock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,CAKzD,CAAC;AAQF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC7C,UAAS,YAAoB,KAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAS9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC7C,UAAS,YAAoB,KAC5B,KAAK,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;CAAE,CAoBpE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2DAA2D;IAC3D,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC7C,UAAS,YAAoB,KAC5B,gBAAgB,EAAE,GAAG,IAkBvB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GACxB,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,EAC7C,UAAS,YAAoB,KAC5B,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAgBxC,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stock-chart shaping shared by chart renderers.
|
|
4
|
+
*
|
|
5
|
+
* Excel stock charts come in four variants distinguished by the ordered
|
|
6
|
+
* set of value series they carry:
|
|
7
|
+
* - HLC : High, Low, Close
|
|
8
|
+
* - OHLC : Open, High, Low, Close
|
|
9
|
+
* - VHLC : Volume, High, Low, Close
|
|
10
|
+
* - VOHLC : Volume, Open, High, Low, Close
|
|
11
|
+
*
|
|
12
|
+
* We render stock as a "line-derived" chart: each price role becomes its
|
|
13
|
+
* own line series (volume is kept out of the price plot — it lives on a
|
|
14
|
+
* different scale and would flatten the price lines — and is instead
|
|
15
|
+
* surfaced via `toVolumeSeries` for renderers to draw as a column
|
|
16
|
+
* sub-pane on its own value axis). The candlestick transform is also
|
|
17
|
+
* provided for renderers that prefer a true OHLC body (echarts
|
|
18
|
+
* CandlestickChart / plotly candlestick).
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.toCandlestick = exports.toVolumeSeries = exports.toLineSeries = exports.assignStockRoles = exports.STOCK_ROLES = void 0;
|
|
22
|
+
var tslib_1 = require("tslib");
|
|
23
|
+
/**
|
|
24
|
+
* The ordered roles for each variant. Series are matched to roles by
|
|
25
|
+
* position — series[0] takes role[0], etc.
|
|
26
|
+
*/
|
|
27
|
+
exports.STOCK_ROLES = {
|
|
28
|
+
HLC: ["high", "low", "close"],
|
|
29
|
+
OHLC: ["open", "high", "low", "close"],
|
|
30
|
+
VHLC: ["volume", "high", "low", "close"],
|
|
31
|
+
VOHLC: ["volume", "open", "high", "low", "close"],
|
|
32
|
+
};
|
|
33
|
+
var isFiniteNum = function (v) {
|
|
34
|
+
return typeof v === "number" && Number.isFinite(v);
|
|
35
|
+
};
|
|
36
|
+
var toNumber = function (v) {
|
|
37
|
+
return isFiniteNum(v) ? v : null;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Map positional series to their stock roles for a given variant.
|
|
41
|
+
* Series beyond the variant's role count are ignored.
|
|
42
|
+
*/
|
|
43
|
+
var assignStockRoles = function (seriesValues, variant) {
|
|
44
|
+
var _a;
|
|
45
|
+
if (variant === void 0) { variant = "HLC"; }
|
|
46
|
+
var roles = (_a = exports.STOCK_ROLES[variant]) !== null && _a !== void 0 ? _a : exports.STOCK_ROLES.HLC;
|
|
47
|
+
var result = {};
|
|
48
|
+
for (var i = 0; i < roles.length; i++) {
|
|
49
|
+
var role = roles[i];
|
|
50
|
+
var values = seriesValues[i];
|
|
51
|
+
if (values)
|
|
52
|
+
result[role] = values.map(toNumber);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
};
|
|
56
|
+
exports.assignStockRoles = assignStockRoles;
|
|
57
|
+
/**
|
|
58
|
+
* Line-derived view: emit one line series per PRICE role (open/high/low/
|
|
59
|
+
* close), preserving variant order and dropping volume. Each returned
|
|
60
|
+
* series carries a role-derived display name and its value vector.
|
|
61
|
+
*/
|
|
62
|
+
var toLineSeries = function (seriesValues, variant) {
|
|
63
|
+
var e_1, _a;
|
|
64
|
+
if (variant === void 0) { variant = "HLC"; }
|
|
65
|
+
var byRole = (0, exports.assignStockRoles)(seriesValues, variant);
|
|
66
|
+
var order = ["open", "high", "low", "close"];
|
|
67
|
+
var labels = {
|
|
68
|
+
volume: "Volume",
|
|
69
|
+
open: "Open",
|
|
70
|
+
high: "High",
|
|
71
|
+
low: "Low",
|
|
72
|
+
close: "Close",
|
|
73
|
+
};
|
|
74
|
+
var out = [];
|
|
75
|
+
try {
|
|
76
|
+
for (var order_1 = tslib_1.__values(order), order_1_1 = order_1.next(); !order_1_1.done; order_1_1 = order_1.next()) {
|
|
77
|
+
var role = order_1_1.value;
|
|
78
|
+
var values = byRole[role];
|
|
79
|
+
if (values)
|
|
80
|
+
out.push({ role: role, name: labels[role], values: values });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
84
|
+
finally {
|
|
85
|
+
try {
|
|
86
|
+
if (order_1_1 && !order_1_1.done && (_a = order_1.return)) _a.call(order_1);
|
|
87
|
+
}
|
|
88
|
+
finally { if (e_1) throw e_1.error; }
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
};
|
|
92
|
+
exports.toLineSeries = toLineSeries;
|
|
93
|
+
/**
|
|
94
|
+
* Volume view: extract the volume series for the V-variants and flag
|
|
95
|
+
* each point as an up/down day so renderers can color the columns to
|
|
96
|
+
* match the price plot. Up/down follows convention: close vs open where
|
|
97
|
+
* the point carries an open, otherwise close vs the previous close. A
|
|
98
|
+
* point with nothing to compare against (e.g. the first) counts as up.
|
|
99
|
+
* Returns null for variants without a volume role (HLC / OHLC) or when
|
|
100
|
+
* the volume series is absent.
|
|
101
|
+
*/
|
|
102
|
+
var toVolumeSeries = function (seriesValues, variant) {
|
|
103
|
+
var _a, _b, _c, _d, _e;
|
|
104
|
+
if (variant === void 0) { variant = "HLC"; }
|
|
105
|
+
var byRole = (0, exports.assignStockRoles)(seriesValues, variant);
|
|
106
|
+
var volume = byRole.volume;
|
|
107
|
+
if (!volume)
|
|
108
|
+
return null;
|
|
109
|
+
var open = (_a = byRole.open) !== null && _a !== void 0 ? _a : [];
|
|
110
|
+
var close = (_b = byRole.close) !== null && _b !== void 0 ? _b : [];
|
|
111
|
+
var prevClose = null;
|
|
112
|
+
var out = [];
|
|
113
|
+
for (var i = 0; i < volume.length; i++) {
|
|
114
|
+
var c = (_c = close[i]) !== null && _c !== void 0 ? _c : null;
|
|
115
|
+
var o = (_d = open[i]) !== null && _d !== void 0 ? _d : null;
|
|
116
|
+
var up = true;
|
|
117
|
+
if (o !== null && c !== null)
|
|
118
|
+
up = c >= o;
|
|
119
|
+
else if (prevClose !== null && c !== null)
|
|
120
|
+
up = c >= prevClose;
|
|
121
|
+
out.push({ value: (_e = volume[i]) !== null && _e !== void 0 ? _e : null, up: up });
|
|
122
|
+
if (c !== null)
|
|
123
|
+
prevClose = c;
|
|
124
|
+
}
|
|
125
|
+
return out;
|
|
126
|
+
};
|
|
127
|
+
exports.toVolumeSeries = toVolumeSeries;
|
|
128
|
+
/**
|
|
129
|
+
* Candlestick view: produce [open, close, low, high] tuples (echarts'
|
|
130
|
+
* candlestick data order) per category index. When the variant has no
|
|
131
|
+
* `open` (HLC / VHLC) the close value is used as the open so the body
|
|
132
|
+
* collapses to a tick — matching how Excel renders HLC stock bars.
|
|
133
|
+
*/
|
|
134
|
+
var toCandlestick = function (seriesValues, variant) {
|
|
135
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
136
|
+
if (variant === void 0) { variant = "HLC"; }
|
|
137
|
+
var byRole = (0, exports.assignStockRoles)(seriesValues, variant);
|
|
138
|
+
var high = (_a = byRole.high) !== null && _a !== void 0 ? _a : [];
|
|
139
|
+
var low = (_b = byRole.low) !== null && _b !== void 0 ? _b : [];
|
|
140
|
+
var close = (_c = byRole.close) !== null && _c !== void 0 ? _c : [];
|
|
141
|
+
var open = (_d = byRole.open) !== null && _d !== void 0 ? _d : [];
|
|
142
|
+
var len = Math.max(high.length, low.length, close.length, open.length);
|
|
143
|
+
var result = [];
|
|
144
|
+
for (var i = 0; i < len; i++) {
|
|
145
|
+
var c = (_e = close[i]) !== null && _e !== void 0 ? _e : 0;
|
|
146
|
+
var o = (_f = open[i]) !== null && _f !== void 0 ? _f : c;
|
|
147
|
+
var l = (_g = low[i]) !== null && _g !== void 0 ? _g : 0;
|
|
148
|
+
var h = (_h = high[i]) !== null && _h !== void 0 ? _h : 0;
|
|
149
|
+
result.push([o, c, l, h]);
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
};
|
|
153
|
+
exports.toCandlestick = toCandlestick;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 3-D / surface chart helpers.
|
|
3
|
+
*
|
|
4
|
+
* Excel's 3-D chart classes (Bar3D / Line3D / Pie3D / Area3D / Surface /
|
|
5
|
+
* Surface3D) degrade to a 2-D fallback `chartType` when imported, with the
|
|
6
|
+
* authored type preserved verbatim on the spec as `sourceChartType`. These
|
|
7
|
+
* helpers gate the renderer's 3-D pipeline off that token and shape the
|
|
8
|
+
* category/series value matrix into the data layouts the echarts-gl
|
|
9
|
+
* `bar3D` / `line3D` / `surface` series expect.
|
|
10
|
+
*
|
|
11
|
+
* Everything in this module is pure and independent of echarts-gl so it can
|
|
12
|
+
* be unit-tested without loading (or even installing a working) WebGL stack.
|
|
13
|
+
*
|
|
14
|
+
* Mapping decisions (see also basic-chart.tsx):
|
|
15
|
+
* - BAR_3D -> `bar3D` (x = category, y = series index, z = value)
|
|
16
|
+
* - LINE_3D -> `line3D` (one polyline per series at its series-index depth)
|
|
17
|
+
* - AREA_3D -> `line3D` (echarts-gl has no area3D; the polyline keeps the
|
|
18
|
+
* authored depth layout)
|
|
19
|
+
* - SURFACE / SURFACE_3D -> `surface` (values grid as z-heights over the
|
|
20
|
+
* categories × series plane)
|
|
21
|
+
* - PIE_3D -> null (echarts-gl has no pie3D; the renderer keeps the
|
|
22
|
+
* existing 2-D pie fallback rather than faking it)
|
|
23
|
+
*/
|
|
24
|
+
declare const THREE_D_TOKENS: readonly ["BAR_3D", "LINE_3D", "PIE_3D", "AREA_3D", "SURFACE", "SURFACE_3D"];
|
|
25
|
+
export type ThreeDSourceType = (typeof THREE_D_TOKENS)[number];
|
|
26
|
+
/** The echarts-gl series type a 3-D spec renders as. */
|
|
27
|
+
export type ThreeDRenderKind = "bar3D" | "line3D" | "surface";
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a raw `sourceChartType` value to one of the known 3-D tokens.
|
|
30
|
+
* Matching is case-insensitive and whitespace-tolerant; anything else
|
|
31
|
+
* (including null/undefined) returns null.
|
|
32
|
+
*/
|
|
33
|
+
export declare const normalize3DSourceType: (sourceChartType?: string | null) => ThreeDSourceType | null;
|
|
34
|
+
/**
|
|
35
|
+
* True when the spec was authored as one of the six 3-D / surface chart
|
|
36
|
+
* classes (its `sourceChartType` is one of the degraded-payload tokens).
|
|
37
|
+
* Note PIE_3D is included here even though it renders as the 2-D pie —
|
|
38
|
+
* use `resolve3DRenderKind` to decide whether the 3-D pipeline runs.
|
|
39
|
+
*/
|
|
40
|
+
export declare const is3DSpec: (spec: {
|
|
41
|
+
sourceChartType?: string | null;
|
|
42
|
+
} | null | undefined) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Map a `sourceChartType` token to the echarts-gl series kind it renders
|
|
45
|
+
* as, or null when the 3-D pipeline should not run:
|
|
46
|
+
* - PIE_3D — echarts-gl has no pie3D, so the 2-D pie fallback stays.
|
|
47
|
+
* - AREA_3D — echarts-gl has no area3D; rendered as line3D.
|
|
48
|
+
* - non-3-D / unknown tokens.
|
|
49
|
+
*/
|
|
50
|
+
export declare const resolve3DRenderKind: (sourceChartType?: string | null) => ThreeDRenderKind | null;
|
|
51
|
+
export type ThreeDSeriesInput = {
|
|
52
|
+
/** Resolved series display name (legend / y-axis label). */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Sanitized numeric values, one per category (gaps allowed). */
|
|
55
|
+
values: (number | null | undefined)[];
|
|
56
|
+
};
|
|
57
|
+
/** [x = category index, y = series index, z = value] */
|
|
58
|
+
export type ThreeDPoint = [number, number, number];
|
|
59
|
+
/** Number of categories = the longest series' value count. */
|
|
60
|
+
export declare const getCategoryCount: (series: ThreeDSeriesInput[]) => number;
|
|
61
|
+
/**
|
|
62
|
+
* Shape series values into a single bar3D data array: one point per
|
|
63
|
+
* (category, series) cell — x is the category index, y the series index
|
|
64
|
+
* (depth row), z the value. Non-finite values are skipped (no bar).
|
|
65
|
+
*/
|
|
66
|
+
export declare const buildBar3DData: (series: ThreeDSeriesInput[]) => ThreeDPoint[];
|
|
67
|
+
/**
|
|
68
|
+
* Shape series values into one line3D polyline per series, laid out at the
|
|
69
|
+
* series' index on the depth (y) axis. Non-finite values are skipped, so
|
|
70
|
+
* the polyline simply bridges gaps.
|
|
71
|
+
*/
|
|
72
|
+
export declare const buildLine3DSeries: (series: ThreeDSeriesInput[]) => {
|
|
73
|
+
name: string;
|
|
74
|
+
data: ThreeDPoint[];
|
|
75
|
+
}[];
|
|
76
|
+
/**
|
|
77
|
+
* Shape series values into a complete surface grid over the categories (x)
|
|
78
|
+
* × series (y) plane with the values as z-heights. Surfaces require a
|
|
79
|
+
* complete grid, so ragged series are padded and non-finite values are
|
|
80
|
+
* flattened to 0. Points are emitted row-major (per series row, categories
|
|
81
|
+
* in order), the layout echarts-gl's surface parser expects.
|
|
82
|
+
*/
|
|
83
|
+
export declare const buildSurfaceData: (series: ThreeDSeriesInput[]) => ThreeDPoint[];
|
|
84
|
+
/**
|
|
85
|
+
* [min, max] of the z values, for the surface visualMap range. Returns
|
|
86
|
+
* [0, 1] for an empty grid and pads a flat grid (min === max) by 1 so the
|
|
87
|
+
* visualMap never has a zero-width range.
|
|
88
|
+
*/
|
|
89
|
+
export declare const getValueExtent: (points: ThreeDPoint[]) => [number, number];
|
|
90
|
+
/**
|
|
91
|
+
* Default z-height color ramp for surface plots (the classic echarts-gl
|
|
92
|
+
* blue → yellow → red diverging ramp). Used via visualMap.inRange.
|
|
93
|
+
*/
|
|
94
|
+
export declare const SURFACE_COLOR_RAMP: readonly string[];
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=three-d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three-d.d.ts","sourceRoot":"","sources":["../../../utils/three-d.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,QAAA,MAAM,cAAc,8EAOV,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,kBAAkB,MAAM,GAAG,IAAI,KAC9B,gBAAgB,GAAG,IAIrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM;IAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,OAAgE,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,kBAAkB,MAAM,GAAG,IAAI,KAC9B,gBAAgB,GAAG,IAcrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAKnD,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,EAAE,KAAG,MACO,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,iBAAiB,EAAE,KAAG,WAAW,EAUvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,iBAAiB,EAAE,KAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,EASpC,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,iBAAiB,EAAE,KAC1B,WAAW,EAcb,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,CASrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAY/C,CAAC"}
|