@8btc/whiteboard 0.0.17 → 0.0.19-beta.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.
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,19 @@ 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);
108
116
  /**
109
117
  * 获取 CanvasStage 实例
110
118
  */
@@ -113,10 +121,6 @@ declare class CanvasCore extends CanvasState_2 {
113
121
  * 获取 CanvasTransformer 实例
114
122
  */
115
123
  getCanvasTransformer(): CanvasTransformer;
116
- /**
117
- * 发射事件(供内部类使用)
118
- */
119
- emitEvent<StageEvent extends keyof StateEvents>(event: StageEvent, data: StateEvents[StageEvent]): void;
120
124
  /**
121
125
  * 获取 Konva.Stage 实例
122
126
  */
@@ -137,18 +141,22 @@ declare class CanvasCore extends CanvasState_2 {
137
141
  * 设置当前工具类型(内部使用)
138
142
  */
139
143
  setToolType(type: ToolType): void;
144
+ /**
145
+ * 根据 ID 获取 Canvas 节点实例
146
+ */
147
+ getCanvasNodeById(id: string): ICanvasNode | null;
140
148
  /**
141
149
  * 设置是否可拖拽(内部使用)
142
150
  */
143
151
  protected setDraggable(draggable: boolean): void;
144
- /* Excluded from this release type: setCursor */
145
- /* Excluded from this release type: resetCursor */
152
+ /* Excluded from this release type: _setCursor */
153
+ /* Excluded from this release type: _resetCursor */
146
154
  /**
147
155
  * 获取当前 Stage 缩放比例
148
156
  */
149
157
  getStageScale(): number;
150
- /* Excluded from this release type: updateViewport */
151
- protected createNodes(nodes: INode[]): void;
158
+ /* Excluded from this release type: _updateViewport */
159
+ protected createNodes(nodes: INode[], addToHistory: boolean): void;
152
160
  /**
153
161
  * 创建图片标注节点(内部使用)
154
162
  */
@@ -164,26 +172,28 @@ declare class CanvasCore extends CanvasState_2 {
164
172
  width: number;
165
173
  height: number;
166
174
  }): 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 */
175
+ /* Excluded from this release type: _findImageAtPosition */
176
+ /* Excluded from this release type: _setDrawingPosition */
177
+ /* Excluded from this release type: _updateDrawingPosition */
178
+ /* Excluded from this release type: _createDraftNode */
179
+ /* Excluded from this release type: _updateDraftNode */
180
+ /* Excluded from this release type: _finalizeDraftNode */
181
+ /* Excluded from this release type: _createSelectRect */
182
+ _updateSelectRect(): void;
183
+ /* Excluded from this release type: _finalizeSelectRect */
184
+ /* Excluded from this release type: _selectNodes */
172
185
  /* Excluded from this release type: deleteNodes */
173
186
  /* Excluded from this release type: deleteSelectedNodes */
174
187
  /**
175
188
  * 销毁 canvas
176
189
  */
177
190
  dispose(): void;
178
- /**
179
- * 从元素同步节点数据(供节点类内部使用)
180
- */
181
- _syncNodeFromElement(nodeId: string, updates: Partial<INode>): void;
191
+ /* Excluded from this release type: _rebuildStateAfterNodeChange */
182
192
  /**
183
193
  * 实现父类的状态同步方法
184
194
  * 当 undo/redo 时被调用
185
195
  */
186
- protected _syncState(state: ICoreState): void;
196
+ protected _renderCanvas(state: ICoreState): void;
187
197
  }
188
198
 
189
199
  /**
@@ -227,11 +237,8 @@ declare class CanvasStage {
227
237
  * CanvasState 类负责管理画布的状态
228
238
  * 包括历史记录(past/present/future)和状态监听
229
239
  */
230
- declare class CanvasState_2 {
231
- private _past;
232
- private _present;
233
- private _future;
234
- private _emitter;
240
+ declare abstract class CanvasState_2 {
241
+ #private;
235
242
  constructor(initialState: ICoreState);
236
243
  /**
237
244
  * 获取当前状态
@@ -257,10 +264,7 @@ declare class CanvasState_2 {
257
264
  * 取消订阅状态事件
258
265
  */
259
266
  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;
267
+ /* Excluded from this release type: _emit */
264
268
  /**
265
269
  * 撤销操作
266
270
  */
@@ -278,12 +282,12 @@ declare class CanvasState_2 {
278
282
  * @param partial - 部分状态更新
279
283
  * @param addToHistory - 是否添加到历史记录
280
284
  */
281
- protected _updateState(partial: Partial<ICoreState>, addToHistory?: boolean): void;
285
+ protected _updateState(partial: Partial<ICoreState>, addToHistory: boolean): void;
282
286
  /**
283
- * 同步状态到外部系统(由子类实现)
287
+ * 同步状态到 canvas 系统(由子类实现)
284
288
  * @param _state - 要同步的状态
285
289
  */
286
- protected _syncState(_state: ICoreState): void;
290
+ protected abstract _renderCanvas(_state: ICoreState): void;
287
291
  /**
288
292
  * 清理资源
289
293
  */
@@ -327,6 +331,17 @@ declare class CanvasTransformer {
327
331
  destroy(): void;
328
332
  }
329
333
 
334
+ declare interface CommonNodeConfig<T = NodeType> {
335
+ $_type: T;
336
+ $_line?: "solid" | "dashed" | "dotted";
337
+ $_size?: "small" | "medium" | "large" | "extra-large";
338
+ $_fill?: "none" | "semi" | "solid";
339
+ $_animated?: boolean;
340
+ $_arrowStartHead?: "none" | "arrow";
341
+ $_arrowEndHead?: "none" | "arrow";
342
+ $_parentId?: string;
343
+ }
344
+
330
345
  declare type HistoryState<T> = {
331
346
  past: T[];
332
347
  present: T;
@@ -334,8 +349,9 @@ declare type HistoryState<T> = {
334
349
  };
335
350
 
336
351
  export declare interface ICanvasNode {
352
+ getID(): string;
337
353
  getElement(): default_2.Shape | default_2.Group;
338
- getNode(): INode;
354
+ getConfig(): INode;
339
355
  updateNode(node: Partial<INode>): void;
340
356
  destroy(): void;
341
357
  }
@@ -343,34 +359,32 @@ export declare interface ICanvasNode {
343
359
  export declare interface ICoreState {
344
360
  viewport: IViewport;
345
361
  toolType: ToolType;
346
- nodes?: INode[];
347
362
  selectedNodeIds?: string[];
363
+ nodes?: INode[];
348
364
  }
349
365
 
350
- export declare interface INode<T = NodeType> {
366
+ export declare interface INode<T = NodeType> extends default_2.ShapeConfig, CommonNodeConfig<T> {
351
367
  id: string;
352
- type: T;
353
- text?: string | null;
354
- props: {
368
+ x: number;
369
+ y: number;
370
+ $_imageUrl?: string;
371
+ $_markerNumber?: number;
372
+ $_bounds?: {
355
373
  x: number;
356
374
  y: number;
357
- width?: number;
358
- height?: number;
359
- rotation?: number;
360
- visible?: boolean;
361
- points?: [number, number][];
375
+ width: number;
376
+ height: number;
362
377
  };
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";
378
+ $_relativeBox?: {
379
+ start: {
380
+ ratioX: number;
381
+ ratioY: number;
382
+ };
383
+ end: {
384
+ ratioX: number;
385
+ ratioY: number;
386
+ };
372
387
  };
373
- meta: Record<string, any>;
374
388
  }
375
389
 
376
390
  declare interface IViewport {
@@ -391,12 +405,6 @@ export declare const NODE_NAMES: {
391
405
 
392
406
  export declare type NodeType = "rectangle" | "image" | "image-marker";
393
407
 
394
- export declare function PureCanvas({ setApi }: PureCanvasProps): JSX.Element;
395
-
396
- declare interface PureCanvasProps {
397
- setApi?: (core: CanvasApi) => void;
398
- }
399
-
400
408
  declare type StageConfig = {
401
409
  container: HTMLDivElement;
402
410
  width: number;
@@ -417,7 +425,7 @@ declare type StateEvents = {
417
425
  "viewport:scale:change": number;
418
426
  "transformer:positionChange": TransformerPosition | null;
419
427
  "toolType:change": ICoreState["toolType"];
420
- "nodes:created": ICoreState["nodes"];
428
+ "nodes:created": INode[];
421
429
  "nodes:deleted": INode[];
422
430
  "nodes:selected": string[];
423
431
  };
@@ -452,4 +460,10 @@ declare type ViewportState = {
452
460
  height?: number;
453
461
  };
454
462
 
463
+ export declare function Whiteboard({ setApi }: WhiteboardProps): JSX.Element;
464
+
465
+ declare interface WhiteboardProps {
466
+ setApi?: (core: CanvasApi) => void;
467
+ }
468
+
455
469
  export { }