@damoqiongqiu/ice-chart 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +530 -0
  3. package/dist/index.cjs +25 -0
  4. package/dist/index.mjs +25 -0
  5. package/dist/index.umd.js +25 -0
  6. package/dist/types/ICEChart.d.mts +330 -0
  7. package/dist/types/ICEChart.d.ts +330 -0
  8. package/dist/types/a11y.d.mts +85 -0
  9. package/dist/types/a11y.d.ts +85 -0
  10. package/dist/types/animation/motion.d.mts +11 -0
  11. package/dist/types/animation/motion.d.ts +11 -0
  12. package/dist/types/components/Axis.d.mts +60 -0
  13. package/dist/types/components/Axis.d.ts +60 -0
  14. package/dist/types/components/Brush.d.mts +19 -0
  15. package/dist/types/components/Brush.d.ts +19 -0
  16. package/dist/types/components/ChartComponent.d.mts +48 -0
  17. package/dist/types/components/ChartComponent.d.ts +48 -0
  18. package/dist/types/components/Crosshair.d.mts +40 -0
  19. package/dist/types/components/Crosshair.d.ts +40 -0
  20. package/dist/types/components/DataZoomSlider.d.mts +30 -0
  21. package/dist/types/components/DataZoomSlider.d.ts +30 -0
  22. package/dist/types/components/GridLines.d.mts +37 -0
  23. package/dist/types/components/GridLines.d.ts +37 -0
  24. package/dist/types/components/Highlight.d.mts +34 -0
  25. package/dist/types/components/Highlight.d.ts +34 -0
  26. package/dist/types/components/Legend.d.mts +26 -0
  27. package/dist/types/components/Legend.d.ts +26 -0
  28. package/dist/types/components/PlotArea.d.mts +21 -0
  29. package/dist/types/components/PlotArea.d.ts +21 -0
  30. package/dist/types/components/PolarGrid.d.mts +34 -0
  31. package/dist/types/components/PolarGrid.d.ts +34 -0
  32. package/dist/types/components/RadarGrid.d.mts +25 -0
  33. package/dist/types/components/RadarGrid.d.ts +25 -0
  34. package/dist/types/components/Title.d.mts +14 -0
  35. package/dist/types/components/Title.d.ts +14 -0
  36. package/dist/types/components/Tooltip.d.mts +48 -0
  37. package/dist/types/components/Tooltip.d.ts +48 -0
  38. package/dist/types/components/series/AreaSeries.d.mts +14 -0
  39. package/dist/types/components/series/AreaSeries.d.ts +14 -0
  40. package/dist/types/components/series/BarSeries.d.mts +39 -0
  41. package/dist/types/components/series/BarSeries.d.ts +39 -0
  42. package/dist/types/components/series/BoxplotSeries.d.mts +16 -0
  43. package/dist/types/components/series/BoxplotSeries.d.ts +16 -0
  44. package/dist/types/components/series/CandlestickSeries.d.mts +13 -0
  45. package/dist/types/components/series/CandlestickSeries.d.ts +13 -0
  46. package/dist/types/components/series/CurveSeriesBase.d.mts +58 -0
  47. package/dist/types/components/series/CurveSeriesBase.d.ts +58 -0
  48. package/dist/types/components/series/FunctionSeries.d.mts +22 -0
  49. package/dist/types/components/series/FunctionSeries.d.ts +22 -0
  50. package/dist/types/components/series/FunnelSeries.d.mts +38 -0
  51. package/dist/types/components/series/FunnelSeries.d.ts +38 -0
  52. package/dist/types/components/series/GaugeSeries.d.mts +45 -0
  53. package/dist/types/components/series/GaugeSeries.d.ts +45 -0
  54. package/dist/types/components/series/GraphSeries.d.mts +39 -0
  55. package/dist/types/components/series/GraphSeries.d.ts +39 -0
  56. package/dist/types/components/series/HeatmapSeries.d.mts +21 -0
  57. package/dist/types/components/series/HeatmapSeries.d.ts +21 -0
  58. package/dist/types/components/series/LineSeries.d.mts +31 -0
  59. package/dist/types/components/series/LineSeries.d.ts +31 -0
  60. package/dist/types/components/series/LiquidSeries.d.mts +55 -0
  61. package/dist/types/components/series/LiquidSeries.d.ts +55 -0
  62. package/dist/types/components/series/ParametricSeries.d.mts +30 -0
  63. package/dist/types/components/series/ParametricSeries.d.ts +30 -0
  64. package/dist/types/components/series/PieSeries.d.mts +44 -0
  65. package/dist/types/components/series/PieSeries.d.ts +44 -0
  66. package/dist/types/components/series/RadarSeries.d.mts +30 -0
  67. package/dist/types/components/series/RadarSeries.d.ts +30 -0
  68. package/dist/types/components/series/SankeySeries.d.mts +34 -0
  69. package/dist/types/components/series/SankeySeries.d.ts +34 -0
  70. package/dist/types/components/series/ScatterSeries.d.mts +11 -0
  71. package/dist/types/components/series/ScatterSeries.d.ts +11 -0
  72. package/dist/types/components/series/SeriesBase.d.mts +214 -0
  73. package/dist/types/components/series/SeriesBase.d.ts +214 -0
  74. package/dist/types/components/series/TreemapSeries.d.mts +48 -0
  75. package/dist/types/components/series/TreemapSeries.d.ts +48 -0
  76. package/dist/types/components/series/WaterfallSeries.d.mts +17 -0
  77. package/dist/types/components/series/WaterfallSeries.d.ts +17 -0
  78. package/dist/types/components/series/createSeries.d.mts +10 -0
  79. package/dist/types/components/series/createSeries.d.ts +10 -0
  80. package/dist/types/components/series/index.d.mts +29 -0
  81. package/dist/types/components/series/index.d.ts +29 -0
  82. package/dist/types/expr/diagnostics.d.mts +45 -0
  83. package/dist/types/expr/diagnostics.d.ts +45 -0
  84. package/dist/types/expr/expr.d.mts +44 -0
  85. package/dist/types/expr/expr.d.ts +44 -0
  86. package/dist/types/expr/sample.d.mts +34 -0
  87. package/dist/types/expr/sample.d.ts +34 -0
  88. package/dist/types/index.d.mts +80 -0
  89. package/dist/types/index.d.ts +80 -0
  90. package/dist/types/interaction/ChartLink.d.mts +16 -0
  91. package/dist/types/interaction/ChartLink.d.ts +16 -0
  92. package/dist/types/interaction/HitResolver.d.mts +44 -0
  93. package/dist/types/interaction/HitResolver.d.ts +44 -0
  94. package/dist/types/interaction/InteractionController.d.mts +147 -0
  95. package/dist/types/interaction/InteractionController.d.ts +147 -0
  96. package/dist/types/internal.d.mts +232 -0
  97. package/dist/types/internal.d.ts +232 -0
  98. package/dist/types/layout/force.d.mts +48 -0
  99. package/dist/types/layout/force.d.ts +48 -0
  100. package/dist/types/layout/layout.d.mts +9 -0
  101. package/dist/types/layout/layout.d.ts +9 -0
  102. package/dist/types/layout/sankey.d.mts +47 -0
  103. package/dist/types/layout/sankey.d.ts +47 -0
  104. package/dist/types/layout/treemap.d.mts +35 -0
  105. package/dist/types/layout/treemap.d.ts +35 -0
  106. package/dist/types/option/normalize.d.mts +68 -0
  107. package/dist/types/option/normalize.d.ts +68 -0
  108. package/dist/types/scale/BandScale.d.mts +36 -0
  109. package/dist/types/scale/BandScale.d.ts +36 -0
  110. package/dist/types/scale/LinearScale.d.mts +21 -0
  111. package/dist/types/scale/LinearScale.d.ts +21 -0
  112. package/dist/types/scale/LogScale.d.mts +24 -0
  113. package/dist/types/scale/LogScale.d.ts +24 -0
  114. package/dist/types/scale/Scale.d.mts +38 -0
  115. package/dist/types/scale/Scale.d.ts +38 -0
  116. package/dist/types/scale/TimeScale.d.mts +28 -0
  117. package/dist/types/scale/TimeScale.d.ts +28 -0
  118. package/dist/types/scale/format.d.mts +5 -0
  119. package/dist/types/scale/format.d.ts +5 -0
  120. package/dist/types/scale/index.d.mts +7 -0
  121. package/dist/types/scale/index.d.ts +7 -0
  122. package/dist/types/theme/chartTheme.d.mts +54 -0
  123. package/dist/types/theme/chartTheme.d.ts +54 -0
  124. package/dist/types/types.d.mts +689 -0
  125. package/dist/types/types.d.ts +689 -0
  126. package/dist/types/util/emitter.d.mts +11 -0
  127. package/dist/types/util/emitter.d.ts +11 -0
  128. package/dist/types/util/math.d.mts +14 -0
  129. package/dist/types/util/math.d.ts +14 -0
  130. package/dist/types/util/text.d.mts +10 -0
  131. package/dist/types/util/text.d.ts +10 -0
  132. package/package.json +100 -0
@@ -0,0 +1,58 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { Rect } from '../../internal.mjs';
3
+ /**
4
+ * 「函数曲线」类系列的公共基座(`function` / `parametric`)。
5
+ *
6
+ * 与普通折线的根本区别:**几何不是从数据点来的,而是从表达式算出来的**。
7
+ * 于是有三件事必须由组件自己负责:
8
+ *
9
+ * 1. **采样**:按当前可视区间重新采样(缩放后要看到更多细节),
10
+ * 并在曲率大的地方自适应加点(见 `src/expr/sample.ts`);
11
+ * 2. **参数扫动**:某个参数随时间变化时每帧重算 —— 曲线因此是「连续变形」,
12
+ * 这正是引擎持续重绘能力最自然的用法(`keepAnimating`);
13
+ * 3. **断点**:极点(tan / 1x)不能连成竖直假线,采样阶段就写成 NaN,
14
+ * 渲染时按 NaN 分段。
15
+ *
16
+ * 锚点(`series.points`)仍然保留:提示框、高亮环、键盘导航都按锚点索引工作,
17
+ * 而锚点的像素位置同样是**用表达式现场算出来的**,所以「看到的曲线」与
18
+ * 「点得到的点」始终一致。
19
+ */
20
+ export declare abstract class CurveSeriesBase extends SeriesBase {
21
+ /** 折线采样点(图表坐标系,[x,y] 交替),NaN 表示断点。 */
22
+ protected curve: number[];
23
+ protected curveKey: string;
24
+ /** 曲线必须裁剪:缩放后窗口外的部分不能画到坐标轴上。 */
25
+ protected clipToBox: boolean;
26
+ /** 不需要 LTTB:采样点数本来就可控,而且抽稀会破坏曲线形状。 */
27
+ protected supportsSampling: boolean;
28
+ /** 参数曲线的 x 不单调,二分查找会失效。 */
29
+ protected monotonicX: boolean;
30
+ /** 取值范围内的采样点(参数空间 → 数据空间 [x, y])。 */
31
+ protected abstract evaluateAt(parameter: number, params: Record<string, number>): [number, number];
32
+ /** 采样的参数区间(function 是可视 x 区间,parametric 是 t 区间)。 */
33
+ protected abstract parameterRange(rect: Rect): [number, number];
34
+ /** 基础采样点数(自适应细分在此之上加点)。 */
35
+ protected abstract baseSampleCount(): number;
36
+ /** 采样整条曲线(数据空间)。 */
37
+ protected abstract sampleCurve(params: Record<string, number>, rect: Rect): Array<[number, number]>;
38
+ /** 当前参数值:配置里的 params + 扫动动画的实时值。 */
39
+ resolvedParams(): Record<string, number>;
40
+ /** 扫动相位 0~1:用真实时间算,掉帧也不会走样。 */
41
+ sweepPhase(): number;
42
+ /** 扫动参数当前值(测试 / 调试用)。 */
43
+ paramValue(name: string): number | null;
44
+ /** 有扫动配置时就持续重绘(每帧重算曲线),没有就停掉,别白占帧循环。 */
45
+ protected syncSweep(): void;
46
+ protected rebuildPixels(): void;
47
+ /** 参数指纹:扫动时每帧都不同,缓存必须失效(否则曲线会冻在第一帧)。 */
48
+ private paramKey;
49
+ /** 采样点数(测试 / 调试用)。 */
50
+ sampleCount(): number;
51
+ /** 命中:曲线上离指针最近的锚点(锚点密度 = 采样密度,缩放后依然密)。 */
52
+ hitTestIndex(localX: number, localY: number): number;
53
+ /** 悬停时线宽略粗一点:函数曲线是一条线,用粗细表达「选中了这条」。 */
54
+ protected hoverLineScale(): number;
55
+ protected doRender(): void;
56
+ /** 曲线的当前绘制点(测试用:验证「画出来的」与「算出来的」一致)。 */
57
+ curvePoints(): number[];
58
+ }
@@ -0,0 +1,58 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { Rect } from '../../internal';
3
+ /**
4
+ * 「函数曲线」类系列的公共基座(`function` / `parametric`)。
5
+ *
6
+ * 与普通折线的根本区别:**几何不是从数据点来的,而是从表达式算出来的**。
7
+ * 于是有三件事必须由组件自己负责:
8
+ *
9
+ * 1. **采样**:按当前可视区间重新采样(缩放后要看到更多细节),
10
+ * 并在曲率大的地方自适应加点(见 `src/expr/sample.ts`);
11
+ * 2. **参数扫动**:某个参数随时间变化时每帧重算 —— 曲线因此是「连续变形」,
12
+ * 这正是引擎持续重绘能力最自然的用法(`keepAnimating`);
13
+ * 3. **断点**:极点(tan / 1x)不能连成竖直假线,采样阶段就写成 NaN,
14
+ * 渲染时按 NaN 分段。
15
+ *
16
+ * 锚点(`series.points`)仍然保留:提示框、高亮环、键盘导航都按锚点索引工作,
17
+ * 而锚点的像素位置同样是**用表达式现场算出来的**,所以「看到的曲线」与
18
+ * 「点得到的点」始终一致。
19
+ */
20
+ export declare abstract class CurveSeriesBase extends SeriesBase {
21
+ /** 折线采样点(图表坐标系,[x,y] 交替),NaN 表示断点。 */
22
+ protected curve: number[];
23
+ protected curveKey: string;
24
+ /** 曲线必须裁剪:缩放后窗口外的部分不能画到坐标轴上。 */
25
+ protected clipToBox: boolean;
26
+ /** 不需要 LTTB:采样点数本来就可控,而且抽稀会破坏曲线形状。 */
27
+ protected supportsSampling: boolean;
28
+ /** 参数曲线的 x 不单调,二分查找会失效。 */
29
+ protected monotonicX: boolean;
30
+ /** 取值范围内的采样点(参数空间 → 数据空间 [x, y])。 */
31
+ protected abstract evaluateAt(parameter: number, params: Record<string, number>): [number, number];
32
+ /** 采样的参数区间(function 是可视 x 区间,parametric 是 t 区间)。 */
33
+ protected abstract parameterRange(rect: Rect): [number, number];
34
+ /** 基础采样点数(自适应细分在此之上加点)。 */
35
+ protected abstract baseSampleCount(): number;
36
+ /** 采样整条曲线(数据空间)。 */
37
+ protected abstract sampleCurve(params: Record<string, number>, rect: Rect): Array<[number, number]>;
38
+ /** 当前参数值:配置里的 params + 扫动动画的实时值。 */
39
+ resolvedParams(): Record<string, number>;
40
+ /** 扫动相位 0~1:用真实时间算,掉帧也不会走样。 */
41
+ sweepPhase(): number;
42
+ /** 扫动参数当前值(测试 / 调试用)。 */
43
+ paramValue(name: string): number | null;
44
+ /** 有扫动配置时就持续重绘(每帧重算曲线),没有就停掉,别白占帧循环。 */
45
+ protected syncSweep(): void;
46
+ protected rebuildPixels(): void;
47
+ /** 参数指纹:扫动时每帧都不同,缓存必须失效(否则曲线会冻在第一帧)。 */
48
+ private paramKey;
49
+ /** 采样点数(测试 / 调试用)。 */
50
+ sampleCount(): number;
51
+ /** 命中:曲线上离指针最近的锚点(锚点密度 = 采样密度,缩放后依然密)。 */
52
+ hitTestIndex(localX: number, localY: number): number;
53
+ /** 悬停时线宽略粗一点:函数曲线是一条线,用粗细表达「选中了这条」。 */
54
+ protected hoverLineScale(): number;
55
+ protected doRender(): void;
56
+ /** 曲线的当前绘制点(测试用:验证「画出来的」与「算出来的」一致)。 */
57
+ curvePoints(): number[];
58
+ }
@@ -0,0 +1,22 @@
1
+ import { CurveSeriesBase } from './CurveSeriesBase.mjs';
2
+ import type { SeriesType } from '../../types.mjs';
3
+ import type { Rect } from '../../internal.mjs';
4
+ /**
5
+ * 函数绘图:`y = f(x)`(迷你 MATLAB 的主力图类型)。
6
+ *
7
+ * - x 轴范围来自 `series.option.domain`(默认 [-10, 10]),缩放后按**可视区间**重新采样;
8
+ * - y 轴数据域由**可视区间内的采样值**决定(自适应 + 稳健分位数),
9
+ * 所以放大到某个局部时 y 轴会自动贴到那条曲线附近(像 fplot 一样);
10
+ * - 表达式见 `src/expr/expr.ts`:`sin(x)/x`、`x^2*exp(-x)`、`2x+1`、`sin(a*x)` 都行。
11
+ */
12
+ export declare class FunctionSeries extends CurveSeriesBase {
13
+ seriesType: SeriesType;
14
+ /** 表达式编译结果按「表达式 + 参数集合」缓存,参数扫动时不会每帧重新解析。 */
15
+ private cachedSource;
16
+ private sampler;
17
+ private samplerFor;
18
+ protected evaluateAt(parameter: number, params: Record<string, number>): [number, number];
19
+ protected parameterRange(rect: Rect): [number, number];
20
+ protected baseSampleCount(): number;
21
+ protected sampleCurve(params: Record<string, number>, rect: Rect): Array<[number, number]>;
22
+ }
@@ -0,0 +1,22 @@
1
+ import { CurveSeriesBase } from './CurveSeriesBase';
2
+ import type { SeriesType } from '../../types';
3
+ import type { Rect } from '../../internal';
4
+ /**
5
+ * 函数绘图:`y = f(x)`(迷你 MATLAB 的主力图类型)。
6
+ *
7
+ * - x 轴范围来自 `series.option.domain`(默认 [-10, 10]),缩放后按**可视区间**重新采样;
8
+ * - y 轴数据域由**可视区间内的采样值**决定(自适应 + 稳健分位数),
9
+ * 所以放大到某个局部时 y 轴会自动贴到那条曲线附近(像 fplot 一样);
10
+ * - 表达式见 `src/expr/expr.ts`:`sin(x)/x`、`x^2*exp(-x)`、`2x+1`、`sin(a*x)` 都行。
11
+ */
12
+ export declare class FunctionSeries extends CurveSeriesBase {
13
+ seriesType: SeriesType;
14
+ /** 表达式编译结果按「表达式 + 参数集合」缓存,参数扫动时不会每帧重新解析。 */
15
+ private cachedSource;
16
+ private sampler;
17
+ private samplerFor;
18
+ protected evaluateAt(parameter: number, params: Record<string, number>): [number, number];
19
+ protected parameterRange(rect: Rect): [number, number];
20
+ protected baseSampleCount(): number;
21
+ protected sampleCurve(params: Record<string, number>, rect: Rect): Array<[number, number]>;
22
+ }
@@ -0,0 +1,38 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { FunnelOption, SeriesType } from '../../types.mjs';
3
+ import type { Rect } from '../../internal.mjs';
4
+ export interface FunnelSeriesCoord {
5
+ plot: Rect;
6
+ canvas: Rect;
7
+ options: FunnelOption;
8
+ }
9
+ /**
10
+ * 漏斗图:从上到下逐级收窄,每级宽度按数值映射。
11
+ *
12
+ * 相邻两级之间画梯形(本级宽度 → 下一级宽度),这是转化漏斗最常见的形态;
13
+ * `trapezoid: false` 时退化成每一级独立的矩形。
14
+ */
15
+ export declare class FunnelSeries extends SeriesBase {
16
+ seriesType: SeriesType;
17
+ funnel: FunnelSeriesCoord | null;
18
+ protected clipToBox: boolean;
19
+ /** 每个数据下标对应的梯形几何(本地坐标)。 */
20
+ private stageGeom;
21
+ private stageRects;
22
+ private funnelKey;
23
+ /** 阶段显隐切换时的起点几何(按数据下标对齐):其余阶段「挪过去」而不是跳过去。 */
24
+ private stageFrom;
25
+ setHiddenSlices(indexes: number[]): this;
26
+ setCoord(coord: any): this;
27
+ protected paintPad(): number;
28
+ highlightRectAt(index: number): Rect | null;
29
+ private widthAt;
30
+ protected rebuildPixels(): void;
31
+ /**
32
+ * 阶段显隐切换的过渡:从旧几何插值到新几何,阶段的高度与宽度一起变化。
33
+ * 被隐藏的阶段直接不再绘制(它已经从 `visible` 里移除)。
34
+ */
35
+ private blendStageMorph;
36
+ hitTestIndex(localX: number, localY: number): number;
37
+ protected doRender(): void;
38
+ }
@@ -0,0 +1,38 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { FunnelOption, SeriesType } from '../../types';
3
+ import type { Rect } from '../../internal';
4
+ export interface FunnelSeriesCoord {
5
+ plot: Rect;
6
+ canvas: Rect;
7
+ options: FunnelOption;
8
+ }
9
+ /**
10
+ * 漏斗图:从上到下逐级收窄,每级宽度按数值映射。
11
+ *
12
+ * 相邻两级之间画梯形(本级宽度 → 下一级宽度),这是转化漏斗最常见的形态;
13
+ * `trapezoid: false` 时退化成每一级独立的矩形。
14
+ */
15
+ export declare class FunnelSeries extends SeriesBase {
16
+ seriesType: SeriesType;
17
+ funnel: FunnelSeriesCoord | null;
18
+ protected clipToBox: boolean;
19
+ /** 每个数据下标对应的梯形几何(本地坐标)。 */
20
+ private stageGeom;
21
+ private stageRects;
22
+ private funnelKey;
23
+ /** 阶段显隐切换时的起点几何(按数据下标对齐):其余阶段「挪过去」而不是跳过去。 */
24
+ private stageFrom;
25
+ setHiddenSlices(indexes: number[]): this;
26
+ setCoord(coord: any): this;
27
+ protected paintPad(): number;
28
+ highlightRectAt(index: number): Rect | null;
29
+ private widthAt;
30
+ protected rebuildPixels(): void;
31
+ /**
32
+ * 阶段显隐切换的过渡:从旧几何插值到新几何,阶段的高度与宽度一起变化。
33
+ * 被隐藏的阶段直接不再绘制(它已经从 `visible` 里移除)。
34
+ */
35
+ private blendStageMorph;
36
+ hitTestIndex(localX: number, localY: number): number;
37
+ protected doRender(): void;
38
+ }
@@ -0,0 +1,45 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { GaugeOption, SeriesType } from '../../types.mjs';
3
+ import type { PolarLayout, Rect } from '../../internal.mjs';
4
+ export interface GaugeSeriesCoord {
5
+ polar: PolarLayout;
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ options: GaugeOption;
9
+ }
10
+ /**
11
+ * 仪表盘。
12
+ *
13
+ * 角度约定:配置里的角度沿用 ECharts 习惯(0° = 3 点方向、逆时针为正、90° = 12 点方向),
14
+ * 内部换算成 canvas 角度时取负号(canvas 的 y 轴向下,角度顺时针为正)。
15
+ * 默认 225° → -45°,即从左下扫到右下、经过正上方,共 270°。
16
+ */
17
+ export declare class GaugeSeries extends SeriesBase {
18
+ seriesType: SeriesType;
19
+ gauge: GaugeSeriesCoord | null;
20
+ private gaugeKey;
21
+ /** 更新动画的起点数值(占「当前渲染值」,不是最小值 —— 高频 setData 才不会每次从头扫)。 */
22
+ private fromValue;
23
+ setCoord(coord: any): this;
24
+ protected paintPad(): number;
25
+ /**
26
+ * 数据更新时把「此刻指针指向的数值」记为动画起点(理由同 LiquidSeries)。
27
+ *
28
+ * 刻意**不看** `preserveAnimation`:那个参数是给「值插值」(fromEffective)用的,
29
+ * 域过渡期间每帧的同步会带 `animate=false`,真正的数据更新(animate 为真)必须捕获起点,
30
+ * 否则高频 setData 下指针每次都从最小值重扫(实测 CPU 79.9% 指针停在 27%)。
31
+ */
32
+ updateSeries(series: any, animate: boolean, preserveAnimation?: boolean): this;
33
+ /** 当前**渲染**的数值(不是源数据):测试与外观审计断言用。 */
34
+ renderedValue(): number;
35
+ private angles;
36
+ private range;
37
+ /** 数值 → canvas 角度。 */
38
+ private angleFor;
39
+ private localCenter;
40
+ /** 锚点放在指针尖端,提示框与高亮都跟指针走。 */
41
+ protected rebuildPixels(): void;
42
+ /** 整个表盘都是命中区(只有一个数值,点哪里都命中它)。 */
43
+ hitTestIndex(localX: number, localY: number): number;
44
+ protected doRender(): void;
45
+ }
@@ -0,0 +1,45 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { GaugeOption, SeriesType } from '../../types';
3
+ import type { PolarLayout, Rect } from '../../internal';
4
+ export interface GaugeSeriesCoord {
5
+ polar: PolarLayout;
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ options: GaugeOption;
9
+ }
10
+ /**
11
+ * 仪表盘。
12
+ *
13
+ * 角度约定:配置里的角度沿用 ECharts 习惯(0° = 3 点方向、逆时针为正、90° = 12 点方向),
14
+ * 内部换算成 canvas 角度时取负号(canvas 的 y 轴向下,角度顺时针为正)。
15
+ * 默认 225° → -45°,即从左下扫到右下、经过正上方,共 270°。
16
+ */
17
+ export declare class GaugeSeries extends SeriesBase {
18
+ seriesType: SeriesType;
19
+ gauge: GaugeSeriesCoord | null;
20
+ private gaugeKey;
21
+ /** 更新动画的起点数值(占「当前渲染值」,不是最小值 —— 高频 setData 才不会每次从头扫)。 */
22
+ private fromValue;
23
+ setCoord(coord: any): this;
24
+ protected paintPad(): number;
25
+ /**
26
+ * 数据更新时把「此刻指针指向的数值」记为动画起点(理由同 LiquidSeries)。
27
+ *
28
+ * 刻意**不看** `preserveAnimation`:那个参数是给「值插值」(fromEffective)用的,
29
+ * 域过渡期间每帧的同步会带 `animate=false`,真正的数据更新(animate 为真)必须捕获起点,
30
+ * 否则高频 setData 下指针每次都从最小值重扫(实测 CPU 79.9% 指针停在 27%)。
31
+ */
32
+ updateSeries(series: any, animate: boolean, preserveAnimation?: boolean): this;
33
+ /** 当前**渲染**的数值(不是源数据):测试与外观审计断言用。 */
34
+ renderedValue(): number;
35
+ private angles;
36
+ private range;
37
+ /** 数值 → canvas 角度。 */
38
+ private angleFor;
39
+ private localCenter;
40
+ /** 锚点放在指针尖端,提示框与高亮都跟指针走。 */
41
+ protected rebuildPixels(): void;
42
+ /** 整个表盘都是命中区(只有一个数值,点哪里都命中它)。 */
43
+ hitTestIndex(localX: number, localY: number): number;
44
+ protected doRender(): void;
45
+ }
@@ -0,0 +1,39 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { GraphOption, SeriesType } from '../../types.mjs';
3
+ import type { Rect } from '../../internal.mjs';
4
+ import { type ForceLayoutResult } from '../../layout/force.mjs';
5
+ export interface GraphSeriesCoord {
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ layout: ForceLayoutResult;
9
+ options: GraphOption;
10
+ }
11
+ /**
12
+ * 力导向关系图:节点 + 连线。
13
+ *
14
+ * - 布局是纯函数(`forceLayout`),组件只负责绘制与命中;
15
+ * - 命中返回节点下标(0..n-1)或 `节点数 + 连线下标`,与桑基图约定一致;
16
+ * - 节点可拖拽:拖动时直接改坐标并重绘,松手后跑少量迭代让邻居跟随(`settle()`)。
17
+ */
18
+ export declare class GraphSeries extends SeriesBase {
19
+ seriesType: SeriesType;
20
+ graph: GraphSeriesCoord | null;
21
+ protected clipToBox: boolean;
22
+ private graphKey;
23
+ setCoord(coord: any): this;
24
+ protected paintPad(): number;
25
+ get nodeCount(): number;
26
+ /** 拖动节点:入参是组件本地坐标。 */
27
+ moveNode(index: number, localX: number, localY: number): boolean;
28
+ /**
29
+ * 松手后让邻居跟随:以当前坐标为起点跑少量迭代(被拖的节点保持固定)。
30
+ * 迭代次数刻意小(默认 40),保证松手是「即时」的。
31
+ */
32
+ settle(iterations?: number): void;
33
+ /** 像素缓存:节点中心 + 连线中点(与 sankey 相同的约定)。 */
34
+ protected rebuildPixels(): void;
35
+ hitTestIndex(localX: number, localY: number): number;
36
+ protected doRender(): void;
37
+ /** 高亮节点时用圆环(基类的默认形态),这里给出节点直径。 */
38
+ nodeSizeAt(index: number): number;
39
+ }
@@ -0,0 +1,39 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { GraphOption, SeriesType } from '../../types';
3
+ import type { Rect } from '../../internal';
4
+ import { type ForceLayoutResult } from '../../layout/force';
5
+ export interface GraphSeriesCoord {
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ layout: ForceLayoutResult;
9
+ options: GraphOption;
10
+ }
11
+ /**
12
+ * 力导向关系图:节点 + 连线。
13
+ *
14
+ * - 布局是纯函数(`forceLayout`),组件只负责绘制与命中;
15
+ * - 命中返回节点下标(0..n-1)或 `节点数 + 连线下标`,与桑基图约定一致;
16
+ * - 节点可拖拽:拖动时直接改坐标并重绘,松手后跑少量迭代让邻居跟随(`settle()`)。
17
+ */
18
+ export declare class GraphSeries extends SeriesBase {
19
+ seriesType: SeriesType;
20
+ graph: GraphSeriesCoord | null;
21
+ protected clipToBox: boolean;
22
+ private graphKey;
23
+ setCoord(coord: any): this;
24
+ protected paintPad(): number;
25
+ get nodeCount(): number;
26
+ /** 拖动节点:入参是组件本地坐标。 */
27
+ moveNode(index: number, localX: number, localY: number): boolean;
28
+ /**
29
+ * 松手后让邻居跟随:以当前坐标为起点跑少量迭代(被拖的节点保持固定)。
30
+ * 迭代次数刻意小(默认 40),保证松手是「即时」的。
31
+ */
32
+ settle(iterations?: number): void;
33
+ /** 像素缓存:节点中心 + 连线中点(与 sankey 相同的约定)。 */
34
+ protected rebuildPixels(): void;
35
+ hitTestIndex(localX: number, localY: number): number;
36
+ protected doRender(): void;
37
+ /** 高亮节点时用圆环(基类的默认形态),这里给出节点直径。 */
38
+ nodeSizeAt(index: number): number;
39
+ }
@@ -0,0 +1,21 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { SeriesType } from '../../types.mjs';
3
+ /** 热力图:数据项是 [x类目, y类目, 数值],x/y 都是类目轴。 */
4
+ export declare class HeatmapSeries extends SeriesBase {
5
+ seriesType: SeriesType;
6
+ protected supportsSampling: boolean;
7
+ protected clipToBox: boolean;
8
+ private heatCacheKey;
9
+ /**
10
+ * 覆盖基类的像素缓存:热力图每个点的「位置」是单元格中心,
11
+ * 而不是「x 比例尺 + y 比例尺」直接映射出来的坐标(y 轴是类目带)。
12
+ */
13
+ protected rebuildPixels(): void;
14
+ private valueRange;
15
+ private cellRectAt;
16
+ protected doRender(): void;
17
+ hitTestIndex(localX: number, localY: number): number;
18
+ protected paintPad(): number;
19
+ }
20
+ /** 两个十六进制颜色之间做线性插值。 */
21
+ export declare function mixColors(from: string, to: string, ratio: number): string;
@@ -0,0 +1,21 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { SeriesType } from '../../types';
3
+ /** 热力图:数据项是 [x类目, y类目, 数值],x/y 都是类目轴。 */
4
+ export declare class HeatmapSeries extends SeriesBase {
5
+ seriesType: SeriesType;
6
+ protected supportsSampling: boolean;
7
+ protected clipToBox: boolean;
8
+ private heatCacheKey;
9
+ /**
10
+ * 覆盖基类的像素缓存:热力图每个点的「位置」是单元格中心,
11
+ * 而不是「x 比例尺 + y 比例尺」直接映射出来的坐标(y 轴是类目带)。
12
+ */
13
+ protected rebuildPixels(): void;
14
+ private valueRange;
15
+ private cellRectAt;
16
+ protected doRender(): void;
17
+ hitTestIndex(localX: number, localY: number): number;
18
+ protected paintPad(): number;
19
+ }
20
+ /** 两个十六进制颜色之间做线性插值。 */
21
+ export declare function mixColors(from: string, to: string, ratio: number): string;
@@ -0,0 +1,31 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { SeriesType } from '../../types.mjs';
3
+ /** 折线 / 面积图。fillArea 为 true 时在折线下方填充到基线(堆叠时基线为前序堆叠值)。 */
4
+ export declare class LineSeries extends SeriesBase {
5
+ seriesType: SeriesType;
6
+ /** 折线/面积必须裁剪到绘图区:缩放后窗口外的点会被映射到画布之外 */
7
+ protected clipToBox: boolean;
8
+ /** 面积填充(面积系列恒为 true)。 */
9
+ fillArea: boolean;
10
+ protected doRender(): void;
11
+ /**
12
+ * 取本次要绘制的点。
13
+ *
14
+ * 降采样后点集可能少于原始数据(LTTB 保留下标),绘制与「折线在哪」始终一致;
15
+ * 命中判定则走全量像素缓存,因此不会因为抽稀而点不到某个数据点。
16
+ */
17
+ protected renderPoints(): Array<[number, number]>;
18
+ /** 当前实际绘制的点数(测试与调试用:入场动画会随时间从左到右增加)。 */
19
+ revealedPointCount(): number;
20
+ private drawStraightLine;
21
+ /** 基数样条:以相邻四点的差分构造贝塞尔控制点,smooth ∈ (0,1]。 */
22
+ private drawSmoothLine;
23
+ /** 面积填充:折线 → 基线 → 闭合。堆叠时基线为 base 的像素位置。 */
24
+ private drawArea;
25
+ private baselineYFor;
26
+ hitTestIndex(localX: number, localY: number): number;
27
+ }
28
+ /** 点到线段距离。 */
29
+ export declare function distanceToSegment(px: number, py: number, x0: number, y0: number, x1: number, y1: number): number;
30
+ /** #RRGGBB / rgb() 颜色 → rgba 字符串。 */
31
+ export declare function hexToRgba(color: string, alpha: number): string;
@@ -0,0 +1,31 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { SeriesType } from '../../types';
3
+ /** 折线 / 面积图。fillArea 为 true 时在折线下方填充到基线(堆叠时基线为前序堆叠值)。 */
4
+ export declare class LineSeries extends SeriesBase {
5
+ seriesType: SeriesType;
6
+ /** 折线/面积必须裁剪到绘图区:缩放后窗口外的点会被映射到画布之外 */
7
+ protected clipToBox: boolean;
8
+ /** 面积填充(面积系列恒为 true)。 */
9
+ fillArea: boolean;
10
+ protected doRender(): void;
11
+ /**
12
+ * 取本次要绘制的点。
13
+ *
14
+ * 降采样后点集可能少于原始数据(LTTB 保留下标),绘制与「折线在哪」始终一致;
15
+ * 命中判定则走全量像素缓存,因此不会因为抽稀而点不到某个数据点。
16
+ */
17
+ protected renderPoints(): Array<[number, number]>;
18
+ /** 当前实际绘制的点数(测试与调试用:入场动画会随时间从左到右增加)。 */
19
+ revealedPointCount(): number;
20
+ private drawStraightLine;
21
+ /** 基数样条:以相邻四点的差分构造贝塞尔控制点,smooth ∈ (0,1]。 */
22
+ private drawSmoothLine;
23
+ /** 面积填充:折线 → 基线 → 闭合。堆叠时基线为 base 的像素位置。 */
24
+ private drawArea;
25
+ private baselineYFor;
26
+ hitTestIndex(localX: number, localY: number): number;
27
+ }
28
+ /** 点到线段距离。 */
29
+ export declare function distanceToSegment(px: number, py: number, x0: number, y0: number, x1: number, y1: number): number;
30
+ /** #RRGGBB / rgb() 颜色 → rgba 字符串。 */
31
+ export declare function hexToRgba(color: string, alpha: number): string;
@@ -0,0 +1,55 @@
1
+ import { SeriesBase } from './SeriesBase.mjs';
2
+ import type { LiquidOption, SeriesType } from '../../types.mjs';
3
+ import type { PolarLayout, Rect } from '../../internal.mjs';
4
+ export interface LiquidSeriesCoord {
5
+ polar: PolarLayout;
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ options: LiquidOption;
9
+ }
10
+ /**
11
+ * 水位图(液位球):一个圆里装水,水位随数值升降,水面是持续起伏的波浪。
12
+ *
13
+ * 这是数据大屏里最有辨识度的一张图,
14
+ * 引擎这边两个能力刚好都用上:
15
+ * - **补间**:水位随 `progress()` 升降(入场从 0 涨上来、更新时涨落到位);
16
+ * - **持续重绘**:波相位用 `Date.now()` 算(`keepAnimating`),和蚂蚁线同一套路。
17
+ *
18
+ * 动效偏好为 `instant`(无障碍 / 截图)时相位固定为 0 —— 画面确定、可做像素比对。
19
+ */
20
+ export declare class LiquidSeries extends SeriesBase {
21
+ seriesType: SeriesType;
22
+ liquid: LiquidSeriesCoord | null;
23
+ private liquidKey;
24
+ /** 更新动画的起点水位(占「当前渲染值」,不是 0 —— 高频 setData 才不会每次从空涨起)。 */
25
+ private fromRatio;
26
+ setCoord(coord: any): this;
27
+ protected paintPad(): number;
28
+ private localCenter;
29
+ private range;
30
+ /** 目标值 → 水位比例(0~1)。 */
31
+ private targetRatio;
32
+ /** 当前水位比例:入场从 0 涨上来,更新时从旧值涨落(和 gauge 的指针同一个套路)。 */
33
+ private currentRatio;
34
+ /** 当前**渲染**的水位比例(0~1):测试与外观审计断言用,不是源数据。 */
35
+ levelRatio(): number;
36
+ /**
37
+ * 数据更新时把「此刻正在渲染的水位」记为动画起点。
38
+ *
39
+ * 仪表盘 / 水位图这类**只由 progress 和目标值推导几何**的图,如果起点恒为 0,
40
+ * 高频 setData(监控大屏每 130ms 一次)会让动画永远跑不完 —— 实测 CPU 已经 79.9%,
41
+ * 水面还停在 27%。从当前渲染值接着走,看到的才是「水位跟着数据涨落」。
42
+ */
43
+ updateSeries(series: any, animate: boolean, preserveAnimation?: boolean): this;
44
+ /** 波相位:用真实时间算,掉帧也不会走样;静止模式固定 0。 */
45
+ private phase;
46
+ /** 水位在动(0 < 比例 < 1)时持续重绘;满/空/静止模式就停掉,别白占帧循环。 */
47
+ private syncWave;
48
+ /** 锚点放在圆心:提示框与高亮都落在球心。 */
49
+ protected rebuildPixels(): void;
50
+ /** 整个液位球都是命中区(只有一个数值,点哪里都命中它)。 */
51
+ hitTestIndex(localX: number, localY: number): number;
52
+ /** 一条波浪的路径(从左到右的波面)。 */
53
+ private wavePath;
54
+ protected doRender(): void;
55
+ }
@@ -0,0 +1,55 @@
1
+ import { SeriesBase } from './SeriesBase';
2
+ import type { LiquidOption, SeriesType } from '../../types';
3
+ import type { PolarLayout, Rect } from '../../internal';
4
+ export interface LiquidSeriesCoord {
5
+ polar: PolarLayout;
6
+ plot: Rect;
7
+ canvas: Rect;
8
+ options: LiquidOption;
9
+ }
10
+ /**
11
+ * 水位图(液位球):一个圆里装水,水位随数值升降,水面是持续起伏的波浪。
12
+ *
13
+ * 这是数据大屏里最有辨识度的一张图,
14
+ * 引擎这边两个能力刚好都用上:
15
+ * - **补间**:水位随 `progress()` 升降(入场从 0 涨上来、更新时涨落到位);
16
+ * - **持续重绘**:波相位用 `Date.now()` 算(`keepAnimating`),和蚂蚁线同一套路。
17
+ *
18
+ * 动效偏好为 `instant`(无障碍 / 截图)时相位固定为 0 —— 画面确定、可做像素比对。
19
+ */
20
+ export declare class LiquidSeries extends SeriesBase {
21
+ seriesType: SeriesType;
22
+ liquid: LiquidSeriesCoord | null;
23
+ private liquidKey;
24
+ /** 更新动画的起点水位(占「当前渲染值」,不是 0 —— 高频 setData 才不会每次从空涨起)。 */
25
+ private fromRatio;
26
+ setCoord(coord: any): this;
27
+ protected paintPad(): number;
28
+ private localCenter;
29
+ private range;
30
+ /** 目标值 → 水位比例(0~1)。 */
31
+ private targetRatio;
32
+ /** 当前水位比例:入场从 0 涨上来,更新时从旧值涨落(和 gauge 的指针同一个套路)。 */
33
+ private currentRatio;
34
+ /** 当前**渲染**的水位比例(0~1):测试与外观审计断言用,不是源数据。 */
35
+ levelRatio(): number;
36
+ /**
37
+ * 数据更新时把「此刻正在渲染的水位」记为动画起点。
38
+ *
39
+ * 仪表盘 / 水位图这类**只由 progress 和目标值推导几何**的图,如果起点恒为 0,
40
+ * 高频 setData(监控大屏每 130ms 一次)会让动画永远跑不完 —— 实测 CPU 已经 79.9%,
41
+ * 水面还停在 27%。从当前渲染值接着走,看到的才是「水位跟着数据涨落」。
42
+ */
43
+ updateSeries(series: any, animate: boolean, preserveAnimation?: boolean): this;
44
+ /** 波相位:用真实时间算,掉帧也不会走样;静止模式固定 0。 */
45
+ private phase;
46
+ /** 水位在动(0 < 比例 < 1)时持续重绘;满/空/静止模式就停掉,别白占帧循环。 */
47
+ private syncWave;
48
+ /** 锚点放在圆心:提示框与高亮都落在球心。 */
49
+ protected rebuildPixels(): void;
50
+ /** 整个液位球都是命中区(只有一个数值,点哪里都命中它)。 */
51
+ hitTestIndex(localX: number, localY: number): number;
52
+ /** 一条波浪的路径(从左到右的波面)。 */
53
+ private wavePath;
54
+ protected doRender(): void;
55
+ }