modern-canvas 0.27.4 → 0.27.6

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.
@@ -159,6 +159,13 @@ export declare class Element2D extends Node2D implements Rectangulable {
159
159
  protected _endBatch(): void;
160
160
  onUpdateStyleProperty(key: string, value: any, oldValue: any): void;
161
161
  protected _updateStyleProperty(key: string, value: any, oldValue: any): void;
162
+ /** 语义色 token → 实际色(经所属 tree 的当前主题);无 tree / 非 token 时原样返回。 */
163
+ protected _resolveThemeColor(value: any): any;
164
+ /**
165
+ * 主题变更后重解析本元素的 token 色。仅当 style 里存的是 `@token` 才重设,
166
+ * 普通字面色不动(用户显式提供的色不受主题影响)。文字色走惰性解析,这里触发重排重栅格。
167
+ */
168
+ applyThemeColors(): void;
162
169
  requestLayout(): void;
163
170
  protected _process(delta: number): void;
164
171
  protected _updateConnection(): void;
@@ -46,6 +46,8 @@ export declare class Element2DText extends CoreObject implements NormalizedText
46
46
  protected _updateProperty(key: string, value: any, oldValue: any): void;
47
47
  load(): Promise<void>;
48
48
  update(): void;
49
+ /** fragment 颜色的语义色 token(`@token`)→ 当前主题实际色;非 token 原样返回。 */
50
+ protected _resolveThemeColor<T = any>(value: T): T | string;
49
51
  protected _rasterTexture(): void;
50
52
  protected _renderTiles(width: number, height: number, pixelRatio: number, maxTile: number): void;
51
53
  protected _releaseTiles(): void;
@@ -1,19 +1,20 @@
1
1
  import type { WebGLRenderer } from '../../core';
2
2
  import type { EffectProperties, Node, Viewport } from '../main';
3
3
  import type { Texture2D } from '../resources';
4
+ import { Color } from '../../core';
4
5
  import { Effect } from '../main/Effect';
5
6
  import { Material } from '../resources';
6
- export type CheckerboardStyle = 'grid' | 'gridDark' | 'dot' | 'dotDark';
7
+ export type CheckerboardStyle = 'grid' | 'dot';
7
8
  export interface DrawboardEffectProperties extends EffectProperties {
8
9
  checkerboard?: boolean;
9
10
  checkerboardStyle?: CheckerboardStyle;
10
11
  pixelGrid?: boolean;
11
- /** Override dot grid surface colour (0..1). Defaults to the dot/dotDark preset. */
12
- dotBaseColor?: number;
13
- /** Override dot fill colour at the zoomed-out limit (0..1). */
14
- dotColor?: number;
15
- /** Extra brightening of the dot when zooming in (0..1). */
16
- dotZoomDiff?: number;
12
+ /** 底纹底色(网格底格 / 点阵底)。颜色字符串,可为主题 token;缺省浅色。 */
13
+ checkerboardColor?: string;
14
+ /** 点阵圆点色。缺省浅灰。 */
15
+ checkerboardDotColor?: string;
16
+ /** 放大时圆点的额外提亮量(0..1)。 */
17
+ dotColorDiff?: number;
17
18
  watermark?: string;
18
19
  watermarkWidth?: number;
19
20
  watermarkAlpha?: number;
@@ -23,23 +24,20 @@ export declare class DrawboardEffect extends Effect {
23
24
  checkerboard: boolean;
24
25
  checkerboardStyle: CheckerboardStyle;
25
26
  pixelGrid: boolean;
26
- dotBaseColor?: number;
27
- dotColor?: number;
28
- dotZoomDiff?: number;
27
+ checkerboardColor: string;
28
+ checkerboardDotColor: string;
29
+ dotColorDiff: number;
29
30
  watermark?: string;
30
31
  watermarkWidth: number;
31
32
  watermarkAlpha: number;
32
33
  watermarkRotation: number;
33
34
  protected _watermark?: Texture2D;
35
+ protected _color: Color;
36
+ protected _dotColor: Color;
34
37
  static material: Material;
35
38
  constructor(properties?: Partial<DrawboardEffectProperties>, children?: Node[]);
36
39
  protected _updateProperty(key: string, value: any, oldValue: any): void;
37
40
  protected _loadWatermark(value?: string): Promise<void>;
38
41
  protected _checkerboardStyleMap: Record<CheckerboardStyle, number>;
39
- protected _dotColors: Record<'light' | 'dark', {
40
- base: number;
41
- zoomedOut: number;
42
- diff: number;
43
- }>;
44
42
  apply(renderer: WebGLRenderer, source: Viewport): void;
45
43
  }
@@ -24,12 +24,18 @@ export interface SceneTree {
24
24
  off: <K extends keyof SceneTreeEvents & string>(event: K, listener: (...args: SceneTreeEvents[K]) => void) => this;
25
25
  emit: <K extends keyof SceneTreeEvents & string>(event: K, ...args: SceneTreeEvents[K]) => this;
26
26
  }
27
+ /** 语义色 token 调色板:token 名 → 各主题实际色(如 { surface: { light: '#fff', dark: '#1e1e1e' } })。 */
28
+ export type ThemeTokens = Record<string, Record<string, string>>;
27
29
  export interface SceneTreeProperties extends MainLoopProperties {
28
30
  msaa: boolean;
29
31
  fxaa: boolean;
30
32
  pixelate: boolean;
31
33
  roundPixels: boolean;
32
34
  backgroundColor: Hex8Color;
35
+ /** 当前主题名(默认 'light')。元素颜色为 `@token` 时按此主题查 themeTokens 解析。 */
36
+ theme: string;
37
+ /** token 调色板;由宿主注入,引擎自身不含具体颜色。 */
38
+ themeTokens: ThemeTokens;
33
39
  debug: boolean;
34
40
  processPaused: boolean;
35
41
  fonts: Fonts;
@@ -46,6 +52,9 @@ export declare class SceneTree extends MainLoop {
46
52
  pixelate: boolean;
47
53
  roundPixels: boolean;
48
54
  backgroundColor?: Hex8Color;
55
+ /** 语义色主题;变更时重解析全树 token 色。见 resolveThemeColor。 */
56
+ theme: string;
57
+ themeTokens?: ThemeTokens;
49
58
  debug: boolean;
50
59
  processPaused: boolean;
51
60
  fonts: Fonts | undefined;
@@ -73,6 +82,13 @@ export declare class SceneTree extends MainLoop {
73
82
  getCurrentViewport(): Viewport | undefined;
74
83
  setCurrentViewport(viewport: Viewport | undefined): void;
75
84
  getNodeById<T extends Node = Node>(id: string): T | undefined;
85
+ /**
86
+ * 语义色 token 解析:`@token` → 当前主题下的实际色。
87
+ * 非 token(普通颜色字符串/数值)原样返回;token 未在调色板命中时也原样返回(安全回退)。
88
+ */
89
+ resolveThemeColor<T = any>(value: T): T | string;
90
+ /** 主题 / 调色板变更后,重解析全树元素的 token 色(bg/border 即时重设,文字重排重栅格)。 */
91
+ protected _applyThemeToTree(): void;
76
92
  constructor(properties?: Partial<SceneTreeProperties>);
77
93
  /** 订阅 fonts 的 load 事件,并在切换 fonts / 销毁时解绑,避免重复订阅与泄漏。 */
78
94
  protected _bindFonts(next?: Fonts): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-canvas",
3
3
  "type": "module",
4
- "version": "0.27.4",
4
+ "version": "0.27.6",
5
5
  "packageManager": "pnpm@10.19.0",
6
6
  "description": "A JavaScript WebGL rendering engine. only the ESM.",
7
7
  "author": "wxm",