@8btc/whiteboard 0.0.18 → 0.0.19-beta.1

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/dist/index.d.ts CHANGED
@@ -18,7 +18,7 @@ export declare class CanvasApi extends CanvasCore {
18
18
  * 手动创建多个节点
19
19
  * 如果你不知道自己在干什么,请使用更高层的封装方法,如 createImageNode
20
20
  */
21
- createNodes(nodes: INode[]): void;
21
+ createNodes(nodes: INode[], addToHistory: boolean): void;
22
22
  /**
23
23
  * 根据 ID 获取节点
24
24
  */
@@ -100,11 +100,27 @@ export declare class CanvasApi extends CanvasCore {
100
100
  scale?: boolean;
101
101
  nodeIds?: string[];
102
102
  }): void;
103
+ /**
104
+ * 导出当前状态
105
+ */
106
+ save(): ICoreState;
107
+ /**
108
+ * 从状态中恢复画布
109
+ */
110
+ restore(state: ICoreState): void;
103
111
  }
104
112
 
105
113
  declare class CanvasCore extends CanvasState_2 {
106
114
  #private;
107
- constructor(el: HTMLDivElement);
115
+ constructor(el: HTMLDivElement, state?: ICoreState);
116
+ /**
117
+ * 注册全局主题
118
+ */
119
+ static registerTheme(theme: Theme): void;
120
+ /**
121
+ * 获取主题,如果没有注册过返回默认主题
122
+ */
123
+ getTheme(): Theme;
108
124
  /**
109
125
  * 获取 CanvasStage 实例
110
126
  */
@@ -113,10 +129,6 @@ declare class CanvasCore extends CanvasState_2 {
113
129
  * 获取 CanvasTransformer 实例
114
130
  */
115
131
  getCanvasTransformer(): CanvasTransformer;
116
- /**
117
- * 发射事件(供内部类使用)
118
- */
119
- emitEvent<StageEvent extends keyof StateEvents>(event: StageEvent, data: StateEvents[StageEvent]): void;
120
132
  /**
121
133
  * 获取 Konva.Stage 实例
122
134
  */
@@ -137,18 +149,22 @@ declare class CanvasCore extends CanvasState_2 {
137
149
  * 设置当前工具类型(内部使用)
138
150
  */
139
151
  setToolType(type: ToolType): void;
152
+ /**
153
+ * 根据 ID 获取 Canvas 节点实例
154
+ */
155
+ getCanvasNodeById(id: string): ICanvasNode | null;
140
156
  /**
141
157
  * 设置是否可拖拽(内部使用)
142
158
  */
143
159
  protected setDraggable(draggable: boolean): void;
144
- /* Excluded from this release type: setCursor */
145
- /* Excluded from this release type: resetCursor */
160
+ /* Excluded from this release type: _setCursor */
161
+ /* Excluded from this release type: _resetCursor */
146
162
  /**
147
163
  * 获取当前 Stage 缩放比例
148
164
  */
149
165
  getStageScale(): number;
150
- /* Excluded from this release type: updateViewport */
151
- protected createNodes(nodes: INode[]): void;
166
+ /* Excluded from this release type: _updateViewport */
167
+ protected createNodes(nodes: INode[], addToHistory: boolean): void;
152
168
  /**
153
169
  * 创建图片标注节点(内部使用)
154
170
  */
@@ -164,26 +180,28 @@ declare class CanvasCore extends CanvasState_2 {
164
180
  width: number;
165
181
  height: number;
166
182
  }): void;
167
- /* Excluded from this release type: findImageAtPosition */
168
- /* Excluded from this release type: createDraftNode */
169
- /* Excluded from this release type: updateDraftNode */
170
- /* Excluded from this release type: finalizeDraftNode */
171
- /* Excluded from this release type: selectNode */
183
+ /* Excluded from this release type: _findImageAtPosition */
184
+ /* Excluded from this release type: _setDrawingPosition */
185
+ /* Excluded from this release type: _updateDrawingPosition */
186
+ /* Excluded from this release type: _createDraftNode */
187
+ /* Excluded from this release type: _updateDraftNode */
188
+ /* Excluded from this release type: _finalizeDraftNode */
189
+ /* Excluded from this release type: _createSelectRect */
190
+ _updateSelectRect(): void;
191
+ /* Excluded from this release type: _finalizeSelectRect */
192
+ /* Excluded from this release type: _selectNodes */
172
193
  /* Excluded from this release type: deleteNodes */
173
194
  /* Excluded from this release type: deleteSelectedNodes */
174
195
  /**
175
196
  * 销毁 canvas
176
197
  */
177
198
  dispose(): void;
178
- /**
179
- * 从元素同步节点数据(供节点类内部使用)
180
- */
181
- _syncNodeFromElement(nodeId: string, updates: Partial<INode>): void;
199
+ /* Excluded from this release type: _rebuildStateAfterNodeChange */
182
200
  /**
183
201
  * 实现父类的状态同步方法
184
202
  * 当 undo/redo 时被调用
185
203
  */
186
- protected _syncState(state: ICoreState): void;
204
+ protected _renderCanvas(state: ICoreState): void;
187
205
  }
188
206
 
189
207
  /**
@@ -227,11 +245,8 @@ declare class CanvasStage {
227
245
  * CanvasState 类负责管理画布的状态
228
246
  * 包括历史记录(past/present/future)和状态监听
229
247
  */
230
- declare class CanvasState_2 {
231
- private _past;
232
- private _present;
233
- private _future;
234
- private _emitter;
248
+ declare abstract class CanvasState_2 {
249
+ #private;
235
250
  constructor(initialState: ICoreState);
236
251
  /**
237
252
  * 获取当前状态
@@ -257,10 +272,7 @@ declare class CanvasState_2 {
257
272
  * 取消订阅状态事件
258
273
  */
259
274
  off<K extends keyof StateEvents>(event: K, handler: (data: StateEvents[K]) => void): void;
260
- /**
261
- * 发送事件
262
- */
263
- protected emit<K extends keyof StateEvents>(event: K, data: StateEvents[K]): void;
275
+ /* Excluded from this release type: _emit */
264
276
  /**
265
277
  * 撤销操作
266
278
  */
@@ -278,12 +290,12 @@ declare class CanvasState_2 {
278
290
  * @param partial - 部分状态更新
279
291
  * @param addToHistory - 是否添加到历史记录
280
292
  */
281
- protected _updateState(partial: Partial<ICoreState>, addToHistory?: boolean): void;
293
+ protected _updateState(partial: Partial<ICoreState>, addToHistory: boolean): void;
282
294
  /**
283
- * 同步状态到外部系统(由子类实现)
295
+ * 同步状态到 canvas 系统(由子类实现)
284
296
  * @param _state - 要同步的状态
285
297
  */
286
- protected _syncState(_state: ICoreState): void;
298
+ protected abstract _renderCanvas(_state: ICoreState): void;
287
299
  /**
288
300
  * 清理资源
289
301
  */
@@ -327,6 +339,17 @@ declare class CanvasTransformer {
327
339
  destroy(): void;
328
340
  }
329
341
 
342
+ declare interface CommonNodeConfig<T = NodeType> extends Partial<NodeStyle> {
343
+ $_type: T;
344
+ $_line?: "solid" | "dashed" | "dotted";
345
+ $_size?: "small" | "medium" | "large" | "extra-large";
346
+ $_fill?: "none" | "semi" | "solid";
347
+ $_animated?: boolean;
348
+ $_arrowStartHead?: "none" | "arrow";
349
+ $_arrowEndHead?: "none" | "arrow";
350
+ $_parentId?: string;
351
+ }
352
+
330
353
  declare type HistoryState<T> = {
331
354
  past: T[];
332
355
  present: T;
@@ -334,8 +357,9 @@ declare type HistoryState<T> = {
334
357
  };
335
358
 
336
359
  export declare interface ICanvasNode {
360
+ getID(): string;
337
361
  getElement(): default_2.Shape | default_2.Group;
338
- getNode(): INode;
362
+ getConfig(): INode;
339
363
  updateNode(node: Partial<INode>): void;
340
364
  destroy(): void;
341
365
  }
@@ -343,41 +367,37 @@ export declare interface ICanvasNode {
343
367
  export declare interface ICoreState {
344
368
  viewport: IViewport;
345
369
  toolType: ToolType;
346
- nodes?: INode[];
347
370
  selectedNodeIds?: string[];
371
+ nodes?: INode[];
348
372
  }
349
373
 
350
- export declare interface INode<T = NodeType> {
374
+ export declare interface INode<T = NodeType> extends default_2.ShapeConfig, CommonNodeConfig<T> {
351
375
  id: string;
352
- type: T;
353
- text?: string | null;
354
- props: {
376
+ x: number;
377
+ y: number;
378
+ $_imageUrl?: string;
379
+ $_markerNumber?: number;
380
+ $_bounds?: {
355
381
  x: number;
356
382
  y: number;
357
- width?: number;
358
- height?: number;
359
- rotation?: number;
360
- visible?: boolean;
361
- points?: [number, number][];
383
+ width: number;
384
+ height: number;
362
385
  };
363
- style: {
364
- color: string;
365
- line: "solid" | "dashed" | "dotted";
366
- size: "small" | "medium" | "large" | "extra-large";
367
- opacity: number;
368
- fill?: "none" | "semi" | "solid";
369
- animated?: boolean;
370
- arrowStartHead?: "none" | "arrow";
371
- arrowEndHead?: "none" | "arrow";
386
+ $_relativeBox?: {
387
+ start: {
388
+ ratioX: number;
389
+ ratioY: number;
390
+ };
391
+ end: {
392
+ ratioX: number;
393
+ ratioY: number;
394
+ };
372
395
  };
373
- meta: Record<string, any>;
374
396
  }
375
397
 
376
398
  declare interface IViewport {
377
399
  x: number;
378
400
  y: number;
379
- width: number;
380
- height: number;
381
401
  scale: number;
382
402
  }
383
403
 
@@ -389,14 +409,13 @@ export declare const NODE_NAMES: {
389
409
  imageMarker: string;
390
410
  };
391
411
 
392
- export declare type NodeType = "rectangle" | "image" | "image-marker";
393
-
394
- export declare function PureCanvas({ setApi }: PureCanvasProps): JSX.Element;
395
-
396
- declare interface PureCanvasProps {
397
- setApi?: (core: CanvasApi) => void;
412
+ declare interface NodeStyle {
413
+ $_strokeColor: "theme.stroke-color.1" | "theme.stroke-color.2" | "theme.stroke-color.3";
414
+ $_fillColor: "theme.fill-color.1" | "theme.fill-color.2" | "theme.fill-color.3";
398
415
  }
399
416
 
417
+ export declare type NodeType = "rectangle" | "image" | "image-marker";
418
+
400
419
  declare type StageConfig = {
401
420
  container: HTMLDivElement;
402
421
  width: number;
@@ -417,11 +436,23 @@ declare type StateEvents = {
417
436
  "viewport:scale:change": number;
418
437
  "transformer:positionChange": TransformerPosition | null;
419
438
  "toolType:change": ICoreState["toolType"];
420
- "nodes:created": ICoreState["nodes"];
439
+ "nodes:created": INode[];
421
440
  "nodes:deleted": INode[];
422
441
  "nodes:selected": string[];
423
442
  };
424
443
 
444
+ export declare interface Theme {
445
+ "theme.select-rect-border": string;
446
+ "theme.select-rect-fill": string;
447
+ "theme.image-marker-color": string;
448
+ "theme.stroke-color.1": string;
449
+ "theme.stroke-color.2": string;
450
+ "theme.stroke-color.3": string;
451
+ "theme.fill-color.1": string;
452
+ "theme.fill-color.2": string;
453
+ "theme.fill-color.3": string;
454
+ }
455
+
425
456
  export declare type ToolType = "select" | "hand" | "rectangle" | "image-marker";
426
457
 
427
458
  declare type TransformerConfig = {
@@ -452,4 +483,10 @@ declare type ViewportState = {
452
483
  height?: number;
453
484
  };
454
485
 
486
+ export declare function Whiteboard({ setApi }: WhiteboardProps): JSX.Element;
487
+
488
+ declare interface WhiteboardProps {
489
+ setApi?: (core: CanvasApi) => void;
490
+ }
491
+
455
492
  export { }