@damoqiongqiu/ice-chart 0.30.2 → 0.30.3

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.
@@ -23,6 +23,23 @@ export declare class Highlight extends ChartComponent {
23
23
  theme: ChartTheme | null;
24
24
  hoverItems: HighlightItem[];
25
25
  selectionItems: HighlightItem[];
26
+ /**
27
+ * 只许画在这个矩形里(画布坐标)—— 一般就是绘图区,`null` = 不裁剪。
28
+ *
29
+ * 为什么必须有(2026-09-23,审计 `ink-over-right-axis` 的那个缺陷):
30
+ * 标记环是**以数据点为中心**画的,而滑动窗口 / 缩放之后最常见的状态就是
31
+ * 「当前点正好落在绘图区边界上」—— 环半径那几个像素就必然画到轴带里去。
32
+ * 实测在 40px 宽的轴带里量到 44~58 个饱和像素,就是半颗环。
33
+ *
34
+ * 裁剪盒与 `item.x / item.y` **同一个坐标系**(都由图表按绘图区矩形给出),
35
+ * 所以这里直接用 `ctx.rect(clipBox)`,不需要再做任何换算。
36
+ */
37
+ clipBox: {
38
+ x: number;
39
+ y: number;
40
+ width: number;
41
+ height: number;
42
+ } | null;
26
43
  constructor(props: {
27
44
  width: number;
28
45
  height: number;
@@ -30,5 +47,12 @@ export declare class Highlight extends ChartComponent {
30
47
  });
31
48
  setHover(items: HighlightItem[]): this;
32
49
  setSelection(items: HighlightItem[]): this;
50
+ /** 设置裁剪盒;**没变就不置脏**(否则每帧重建都会把高亮层标脏,局部重绘的收益就没了)。 */
51
+ setClipBox(box: {
52
+ x: number;
53
+ y: number;
54
+ width: number;
55
+ height: number;
56
+ } | null): this;
33
57
  protected doRender(): void;
34
58
  }
@@ -23,6 +23,23 @@ export declare class Highlight extends ChartComponent {
23
23
  theme: ChartTheme | null;
24
24
  hoverItems: HighlightItem[];
25
25
  selectionItems: HighlightItem[];
26
+ /**
27
+ * 只许画在这个矩形里(画布坐标)—— 一般就是绘图区,`null` = 不裁剪。
28
+ *
29
+ * 为什么必须有(2026-09-23,审计 `ink-over-right-axis` 的那个缺陷):
30
+ * 标记环是**以数据点为中心**画的,而滑动窗口 / 缩放之后最常见的状态就是
31
+ * 「当前点正好落在绘图区边界上」—— 环半径那几个像素就必然画到轴带里去。
32
+ * 实测在 40px 宽的轴带里量到 44~58 个饱和像素,就是半颗环。
33
+ *
34
+ * 裁剪盒与 `item.x / item.y` **同一个坐标系**(都由图表按绘图区矩形给出),
35
+ * 所以这里直接用 `ctx.rect(clipBox)`,不需要再做任何换算。
36
+ */
37
+ clipBox: {
38
+ x: number;
39
+ y: number;
40
+ width: number;
41
+ height: number;
42
+ } | null;
26
43
  constructor(props: {
27
44
  width: number;
28
45
  height: number;
@@ -30,5 +47,12 @@ export declare class Highlight extends ChartComponent {
30
47
  });
31
48
  setHover(items: HighlightItem[]): this;
32
49
  setSelection(items: HighlightItem[]): this;
50
+ /** 设置裁剪盒;**没变就不置脏**(否则每帧重建都会把高亮层标脏,局部重绘的收益就没了)。 */
51
+ setClipBox(box: {
52
+ x: number;
53
+ y: number;
54
+ width: number;
55
+ height: number;
56
+ } | null): this;
33
57
  protected doRender(): void;
34
58
  }
@@ -424,6 +424,15 @@ export interface AxisLayout {
424
424
  formatLabel?: (index: number) => string;
425
425
  /** 布局那一趟按样本量到的最大标签宽度(惰性格式化时 `labels` 里只有样本,不能再抽样)。 */
426
426
  sampledLabelWidth?: number;
427
+ /**
428
+ * **抽稀之后仍然要画的那些刻度的原下标**(升序)。
429
+ *
430
+ * `undefined` = 没有抽稀(整张 `ticks` 都要画)。给定之后,热路径只该按这张表走:
431
+ * `Axis` 不再遍历整条 `ticks`(10 万类目里只有十几颗要画),`GridLines` 的竖线
432
+ * 也直接按它取位置。`ticks` / `labels` 的长度与下标对齐关系**保持不变** ——
433
+ * 它们仍然是「整条轴」的事实来源,只是没人再逐项扫一遍了。
434
+ */
435
+ visible?: number[];
427
436
  /** 该轴相对绘图区边缘外扩的像素距离(多轴时同侧的轴逐层外移)。 */
428
437
  offset: number;
429
438
  /** 刻度标签的最大宽度 / 高度(像素)。 */
@@ -424,6 +424,15 @@ export interface AxisLayout {
424
424
  formatLabel?: (index: number) => string;
425
425
  /** 布局那一趟按样本量到的最大标签宽度(惰性格式化时 `labels` 里只有样本,不能再抽样)。 */
426
426
  sampledLabelWidth?: number;
427
+ /**
428
+ * **抽稀之后仍然要画的那些刻度的原下标**(升序)。
429
+ *
430
+ * `undefined` = 没有抽稀(整张 `ticks` 都要画)。给定之后,热路径只该按这张表走:
431
+ * `Axis` 不再遍历整条 `ticks`(10 万类目里只有十几颗要画),`GridLines` 的竖线
432
+ * 也直接按它取位置。`ticks` / `labels` 的长度与下标对齐关系**保持不变** ——
433
+ * 它们仍然是「整条轴」的事实来源,只是没人再逐项扫一遍了。
434
+ */
435
+ visible?: number[];
427
436
  /** 该轴相对绘图区边缘外扩的像素距离(多轴时同侧的轴逐层外移)。 */
428
437
  offset: number;
429
438
  /** 刻度标签的最大宽度 / 高度(像素)。 */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "大漠穷秋",
3
3
  "name": "@damoqiongqiu/ice-chart",
4
- "version": "0.30.2",
4
+ "version": "0.30.3",
5
5
  "license": "MIT",
6
6
  "description": "基于 ice-render Canvas 引擎的交互式图表库:命中测试与事件派发由引擎承担,图表层只做「数据 ↔ 像素 ↔ 语义事件」。",
7
7
  "keywords": [