@meta2d/core 1.0.55 → 1.0.57

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 (223) hide show
  1. package/index.d.ts +9 -9
  2. package/index.js +9 -9
  3. package/package.json +38 -39
  4. package/src/canvas/canvas.d.ts +456 -456
  5. package/src/canvas/canvas.js +7583 -8186
  6. package/src/canvas/canvas.js.map +1 -1
  7. package/src/canvas/canvasImage.d.ts +27 -28
  8. package/src/canvas/canvasImage.js +440 -502
  9. package/src/canvas/canvasImage.js.map +1 -1
  10. package/src/canvas/canvasTemplate.d.ts +18 -19
  11. package/src/canvas/canvasTemplate.js +208 -228
  12. package/src/canvas/canvasTemplate.js.map +1 -1
  13. package/src/canvas/index.d.ts +2 -2
  14. package/src/canvas/index.js +2 -2
  15. package/src/canvas/magnifierCanvas.d.ts +19 -20
  16. package/src/canvas/magnifierCanvas.js +101 -100
  17. package/src/canvas/magnifierCanvas.js.map +1 -1
  18. package/src/canvas/offscreen.d.ts +1 -2
  19. package/src/canvas/offscreen.js +13 -13
  20. package/src/canvas/offscreen.js.map +1 -1
  21. package/src/core.d.ts +479 -479
  22. package/src/core.js +4589 -5198
  23. package/src/core.js.map +1 -1
  24. package/src/data.d.ts +34 -34
  25. package/src/data.js +84 -84
  26. package/src/data.js.map +1 -1
  27. package/src/diagrams/arrow.d.ts +4 -4
  28. package/src/diagrams/arrow.js +46 -46
  29. package/src/diagrams/arrow.js.map +1 -1
  30. package/src/diagrams/circle.d.ts +2 -2
  31. package/src/diagrams/circle.js +8 -8
  32. package/src/diagrams/circle.js.map +1 -1
  33. package/src/diagrams/cloud.d.ts +2 -2
  34. package/src/diagrams/cloud.js +11 -11
  35. package/src/diagrams/cloud.js.map +1 -1
  36. package/src/diagrams/cube.d.ts +2 -2
  37. package/src/diagrams/cube.js +67 -69
  38. package/src/diagrams/cube.js.map +1 -1
  39. package/src/diagrams/diamond.d.ts +2 -2
  40. package/src/diagrams/diamond.js +12 -12
  41. package/src/diagrams/diamond.js.map +1 -1
  42. package/src/diagrams/file.d.ts +2 -2
  43. package/src/diagrams/file.js +17 -17
  44. package/src/diagrams/file.js.map +1 -1
  45. package/src/diagrams/gif.d.ts +5 -5
  46. package/src/diagrams/gif.js +88 -89
  47. package/src/diagrams/gif.js.map +1 -1
  48. package/src/diagrams/hexagon.d.ts +2 -2
  49. package/src/diagrams/hexagon.js +54 -54
  50. package/src/diagrams/hexagon.js.map +1 -1
  51. package/src/diagrams/iframe.d.ts +2 -2
  52. package/src/diagrams/iframe.js +337 -355
  53. package/src/diagrams/iframe.js.map +1 -1
  54. package/src/diagrams/index.d.ts +71 -71
  55. package/src/diagrams/index.js +76 -76
  56. package/src/diagrams/index.js.map +1 -1
  57. package/src/diagrams/line/arrow.d.ts +2 -2
  58. package/src/diagrams/line/arrow.js +127 -127
  59. package/src/diagrams/line/arrow.js.map +1 -1
  60. package/src/diagrams/line/curve.d.ts +16 -16
  61. package/src/diagrams/line/curve.js +226 -235
  62. package/src/diagrams/line/curve.js.map +1 -1
  63. package/src/diagrams/line/index.d.ts +5 -5
  64. package/src/diagrams/line/index.js +5 -5
  65. package/src/diagrams/line/line.d.ts +42 -42
  66. package/src/diagrams/line/line.js +369 -430
  67. package/src/diagrams/line/line.js.map +1 -1
  68. package/src/diagrams/line/polyline.d.ts +10 -10
  69. package/src/diagrams/line/polyline.js +626 -656
  70. package/src/diagrams/line/polyline.js.map +1 -1
  71. package/src/diagrams/line/smooth.d.ts +3 -3
  72. package/src/diagrams/line/smooth.js +135 -173
  73. package/src/diagrams/line/smooth.js.map +1 -1
  74. package/src/diagrams/message.d.ts +2 -2
  75. package/src/diagrams/message.js +14 -14
  76. package/src/diagrams/message.js.map +1 -1
  77. package/src/diagrams/mindLine.d.ts +3 -3
  78. package/src/diagrams/mindLine.js +29 -30
  79. package/src/diagrams/mindLine.js.map +1 -1
  80. package/src/diagrams/mindNode.d.ts +3 -3
  81. package/src/diagrams/mindNode.js +160 -188
  82. package/src/diagrams/mindNode.js.map +1 -1
  83. package/src/diagrams/panel.d.ts +2 -2
  84. package/src/diagrams/panel.js +130 -130
  85. package/src/diagrams/panel.js.map +1 -1
  86. package/src/diagrams/pentagon.d.ts +3 -3
  87. package/src/diagrams/pentagon.js +44 -45
  88. package/src/diagrams/pentagon.js.map +1 -1
  89. package/src/diagrams/pentagram.d.ts +3 -3
  90. package/src/diagrams/pentagram.js +50 -76
  91. package/src/diagrams/pentagram.js.map +1 -1
  92. package/src/diagrams/people.d.ts +2 -2
  93. package/src/diagrams/people.js +18 -18
  94. package/src/diagrams/people.js.map +1 -1
  95. package/src/diagrams/rectangle.d.ts +3 -3
  96. package/src/diagrams/rectangle.js +25 -25
  97. package/src/diagrams/rectangle.js.map +1 -1
  98. package/src/diagrams/svg/parse.d.ts +15 -15
  99. package/src/diagrams/svg/parse.js +278 -325
  100. package/src/diagrams/svg/parse.js.map +1 -1
  101. package/src/diagrams/svgPath.d.ts +2 -2
  102. package/src/diagrams/svgPath.js +28 -29
  103. package/src/diagrams/svgPath.js.map +1 -1
  104. package/src/diagrams/triangle.d.ts +3 -3
  105. package/src/diagrams/triangle.js +39 -40
  106. package/src/diagrams/triangle.js.map +1 -1
  107. package/src/diagrams/video.d.ts +5 -5
  108. package/src/diagrams/video.js +183 -184
  109. package/src/diagrams/video.js.map +1 -1
  110. package/src/dialog/dialog.d.ts +21 -21
  111. package/src/dialog/dialog.js +156 -97
  112. package/src/dialog/dialog.js.map +1 -1
  113. package/src/dialog/index.d.ts +1 -1
  114. package/src/dialog/index.js +1 -1
  115. package/src/event/event.d.ts +102 -102
  116. package/src/event/event.js +21 -21
  117. package/src/event/index.d.ts +1 -1
  118. package/src/event/index.js +1 -1
  119. package/src/map/index.d.ts +1 -1
  120. package/src/map/index.js +1 -1
  121. package/src/map/map.d.ts +21 -21
  122. package/src/map/map.js +211 -209
  123. package/src/map/map.js.map +1 -1
  124. package/src/options.d.ts +130 -130
  125. package/src/options.js +79 -79
  126. package/src/options.js.map +1 -1
  127. package/src/pen/arrow.d.ts +4 -4
  128. package/src/pen/arrow.js +187 -187
  129. package/src/pen/arrow.js.map +1 -1
  130. package/src/pen/index.d.ts +6 -6
  131. package/src/pen/index.js +6 -6
  132. package/src/pen/math.d.ts +28 -28
  133. package/src/pen/math.js +212 -303
  134. package/src/pen/math.js.map +1 -1
  135. package/src/pen/model.d.ts +514 -514
  136. package/src/pen/model.js +209 -209
  137. package/src/pen/model.js.map +1 -1
  138. package/src/pen/plugin.d.ts +5 -5
  139. package/src/pen/plugin.js +57 -87
  140. package/src/pen/plugin.js.map +1 -1
  141. package/src/pen/render.d.ts +146 -147
  142. package/src/pen/render.js +3233 -3235
  143. package/src/pen/render.js.map +1 -1
  144. package/src/pen/text.d.ts +8 -8
  145. package/src/pen/text.js +315 -374
  146. package/src/pen/text.js.map +1 -1
  147. package/src/pen/utils.d.ts +2 -2
  148. package/src/pen/utils.js +18 -40
  149. package/src/pen/utils.js.map +1 -1
  150. package/src/point/index.d.ts +1 -1
  151. package/src/point/index.js +1 -1
  152. package/src/point/point.d.ts +65 -65
  153. package/src/point/point.js +177 -178
  154. package/src/point/point.js.map +1 -1
  155. package/src/rect/index.d.ts +1 -1
  156. package/src/rect/index.js +1 -1
  157. package/src/rect/rect.d.ts +52 -52
  158. package/src/rect/rect.js +426 -485
  159. package/src/rect/rect.js.map +1 -1
  160. package/src/rect/triangle.d.ts +2 -2
  161. package/src/rect/triangle.js +9 -9
  162. package/src/rect/triangle.js.map +1 -1
  163. package/src/scroll/index.d.ts +1 -1
  164. package/src/scroll/index.js +1 -1
  165. package/src/scroll/scroll.d.ts +35 -35
  166. package/src/scroll/scroll.js +233 -220
  167. package/src/scroll/scroll.js.map +1 -1
  168. package/src/store/global.d.ts +25 -25
  169. package/src/store/global.js +17 -17
  170. package/src/store/global.js.map +1 -1
  171. package/src/store/index.d.ts +2 -2
  172. package/src/store/index.js +2 -2
  173. package/src/store/store.d.ts +228 -228
  174. package/src/store/store.js +86 -120
  175. package/src/store/store.js.map +1 -1
  176. package/src/theme.d.ts +13 -13
  177. package/src/theme.js +22 -22
  178. package/src/theme.js.map +1 -1
  179. package/src/title/index.d.ts +1 -1
  180. package/src/title/index.js +1 -1
  181. package/src/title/title.d.ts +30 -30
  182. package/src/title/title.js +98 -98
  183. package/src/title/title.js.map +1 -1
  184. package/src/tooltip/index.d.ts +1 -1
  185. package/src/tooltip/index.js +1 -1
  186. package/src/tooltip/tooltip.d.ts +40 -40
  187. package/src/tooltip/tooltip.js +171 -166
  188. package/src/tooltip/tooltip.js.map +1 -1
  189. package/src/utils/clone.d.ts +8 -8
  190. package/src/utils/clone.js +83 -87
  191. package/src/utils/clone.js.map +1 -1
  192. package/src/utils/color.d.ts +3 -3
  193. package/src/utils/color.js +109 -125
  194. package/src/utils/color.js.map +1 -1
  195. package/src/utils/error.d.ts +2 -2
  196. package/src/utils/error.js +5 -5
  197. package/src/utils/error.js.map +1 -1
  198. package/src/utils/file.d.ts +3 -3
  199. package/src/utils/file.js +39 -91
  200. package/src/utils/file.js.map +1 -1
  201. package/src/utils/index.d.ts +9 -8
  202. package/src/utils/index.js +9 -8
  203. package/src/utils/index.js.map +1 -1
  204. package/src/utils/math.d.ts +18 -18
  205. package/src/utils/math.js +113 -151
  206. package/src/utils/math.js.map +1 -1
  207. package/src/utils/object.d.ts +2 -2
  208. package/src/utils/object.js +20 -20
  209. package/src/utils/object.js.map +1 -1
  210. package/src/utils/padding.d.ts +7 -7
  211. package/src/utils/padding.js +46 -46
  212. package/src/utils/padding.js.map +1 -1
  213. package/src/utils/time.d.ts +1 -1
  214. package/src/utils/time.js +16 -16
  215. package/src/utils/time.js.map +1 -1
  216. package/src/utils/url.d.ts +4 -4
  217. package/src/utils/url.js +26 -26
  218. package/src/utils/url.js.map +1 -1
  219. package/src/utils/uuid.d.ts +4 -4
  220. package/src/utils/uuid.js +12 -12
  221. package/src/utils/browser.d.ts +0 -1
  222. package/src/utils/browser.js +0 -4
  223. package/src/utils/browser.js.map +0 -1
@@ -1,456 +1,456 @@
1
- import { Pen, IValue } from '../pen';
2
- import { Point } from '../point';
3
- import { Rect } from '../rect';
4
- import { EditAction, Fit, Meta2dStore } from '../store';
5
- import { Padding } from '../utils';
6
- import { HotkeyType, HoverType, MouseRight } from '../data';
7
- import { curve, mind, lineSegment } from '../diagrams';
8
- import { polyline } from '../diagrams/line/polyline';
9
- import { Tooltip } from '../tooltip';
10
- import { Scroll } from '../scroll';
11
- import { CanvasImage } from './canvasImage';
12
- import { MagnifierCanvas } from './magnifierCanvas';
13
- import { Meta2d } from '../core';
14
- import { Dialog } from '../dialog';
15
- import { Title } from '../title';
16
- import { CanvasTemplate } from './canvasTemplate';
17
- export declare const movingSuffix: "-moving";
18
- export declare class Canvas {
19
- parent: Meta2d;
20
- parentElement: HTMLElement;
21
- store: Meta2dStore;
22
- canvas: HTMLCanvasElement;
23
- offscreen: HTMLCanvasElement;
24
- width: number;
25
- height: number;
26
- externalElements: HTMLDivElement;
27
- clientRect?: DOMRect;
28
- canvasRect: Rect;
29
- activeRect: Rect;
30
- initActiveRect: Rect;
31
- dragRect: Rect;
32
- lastRotate: number;
33
- sizeCPs: Point[];
34
- activeInitPos: Point[];
35
- hoverType: HoverType;
36
- resizeIndex: number;
37
- mouseDown: {
38
- x: number;
39
- y: number;
40
- restore?: boolean;
41
- };
42
- hotkeyType: HotkeyType;
43
- mouseRight: MouseRight;
44
- addCaches: Pen[];
45
- touchCenter?: Point;
46
- initTouchDis?: number;
47
- initScale?: number;
48
- touchScaling?: boolean;
49
- touchMoving?: boolean;
50
- startTouches?: TouchList;
51
- lastOffsetX: number;
52
- lastOffsetY: number;
53
- drawingLineName?: string;
54
- drawLineFns: string[];
55
- drawingLine?: Pen;
56
- pencil?: boolean;
57
- pencilLine?: Pen;
58
- movingPens: Pen[];
59
- patchFlagsLines?: Set<Pen>;
60
- dock: {
61
- xDock: Point;
62
- yDock: Point;
63
- };
64
- prevAnchor: Point;
65
- nextAnchor: Point;
66
- private lastMouseTime;
67
- private hoverTimer;
68
- private fitTimer;
69
- private willInactivePen;
70
- patchFlags: boolean;
71
- lastRender: number;
72
- touchStart: number;
73
- touchStartTimer: any;
74
- timer: any;
75
- private lastAnimateRender;
76
- animateRendering: boolean;
77
- renderTimer: number;
78
- initPens?: Pen[];
79
- pointSize: 8;
80
- pasteOffset: boolean;
81
- opening: boolean;
82
- maxZindex: number;
83
- canMoveLine: boolean;
84
- randomIdObj: object;
85
- keyOptions?: {
86
- shiftKey?: boolean;
87
- altKey?: boolean;
88
- ctrlKey?: boolean;
89
- metaKey?: boolean;
90
- };
91
- /**
92
- * @deprecated 改用 beforeAddPens
93
- */
94
- beforeAddPen: (pen: Pen) => boolean;
95
- beforeAddPens: (pens: Pen[]) => Promise<boolean>;
96
- beforeAddAnchor: (pen: Pen, anchor: Point) => Promise<boolean>;
97
- beforeRemovePens: (pens: Pen[]) => Promise<boolean>;
98
- beforeRemoveAnchor: (pen: Pen, anchor: Point) => Promise<boolean>;
99
- customResizeDock: (store: Meta2dStore, rect: Rect, pens: Pen[], resizeIndex: number) => {
100
- xDock: Point;
101
- yDock: Point;
102
- };
103
- customMoveDock: (store: Meta2dStore, rect: Rect, pens: Pen[], offset: Point) => {
104
- xDock: Point;
105
- yDock: Point;
106
- };
107
- inputParent: HTMLDivElement;
108
- inputDiv: HTMLDivElement;
109
- inputRight: HTMLDivElement;
110
- dropdown: HTMLUListElement;
111
- tooltip: Tooltip;
112
- title: Title;
113
- mousePos: Point;
114
- scroll: Scroll;
115
- movingAnchor: Point;
116
- canvasTemplate: CanvasTemplate;
117
- canvasImage: CanvasImage;
118
- canvasImageBottom: CanvasImage;
119
- magnifierCanvas: MagnifierCanvas;
120
- dialog: Dialog;
121
- autoPolylineFlag: boolean;
122
- stopPropagation: (e: MouseEvent) => void;
123
- constructor(parent: Meta2d, parentElement: HTMLElement, store: Meta2dStore);
124
- curve: typeof curve;
125
- polyline: typeof polyline;
126
- mind: typeof mind;
127
- line: typeof lineSegment;
128
- listen(): void;
129
- onCopy: (event: ClipboardEvent) => void;
130
- onCut: (event: ClipboardEvent) => void;
131
- onPaste: (event: ClipboardEvent) => void;
132
- onMessage: (e: MessageEvent) => void;
133
- onwheel: (e: WheelEvent) => void;
134
- onkeydown: (e: KeyboardEvent) => void;
135
- /**
136
- * 分割连线的锚点,变成两条线
137
- * @param line 连线
138
- * @param anchor 锚点,连线的某个锚点,引用相同
139
- */
140
- splitLine(line: Pen, anchor: Point): void;
141
- private translateAnchor;
142
- onkeyup: (e: KeyboardEvent) => void;
143
- fileToPen(file: File, isGif: boolean): Promise<Pen>;
144
- ondrop: (event: DragEvent) => Promise<void>;
145
- dropPens(pens: Pen[], e: Point): Promise<void>;
146
- randomCombineId(pen: Pen, pens: Pen[], parentId?: string): Pen;
147
- addPens(pens: Pen[], history?: boolean): Promise<Pen[]>;
148
- ontouchstart: (e: TouchEvent) => void;
149
- ontouchmove: (event: TouchEvent) => void;
150
- ontouchend: (event: TouchEvent) => void;
151
- onGesturestart: (e: any) => void;
152
- /**
153
- * 获取初始化的 pencilLine
154
- * @param pt 需包含 penId
155
- */
156
- private getInitPencilLine;
157
- /**
158
- * 获取初始化的 drawingLine
159
- * @param pt 需包含 penId
160
- */
161
- private createDrawingLine;
162
- onMouseDown: (e: {
163
- x: number;
164
- y: number;
165
- clientX: number;
166
- clientY: number;
167
- pageX: number;
168
- pageY: number;
169
- buttons?: number;
170
- ctrlKey?: boolean;
171
- shiftKey?: boolean;
172
- altKey?: boolean;
173
- }) => void;
174
- onMouseMove: (e: {
175
- x: number;
176
- y: number;
177
- clientX: number;
178
- clientY: number;
179
- pageX: number;
180
- pageY: number;
181
- buttons?: number;
182
- ctrlKey?: boolean;
183
- shiftKey?: boolean;
184
- altKey?: boolean;
185
- }) => void;
186
- onMouseUp: (e: {
187
- x: number;
188
- y: number;
189
- clientX: number;
190
- clientY: number;
191
- pageX: number;
192
- pageY: number;
193
- buttons?: number;
194
- ctrlKey?: boolean;
195
- shiftKey?: boolean;
196
- altKey?: boolean;
197
- button?: number;
198
- }) => void;
199
- private addRuleLine;
200
- clearRuleLines(): void;
201
- get ruleLines(): Pen[];
202
- /**
203
- * @description 调整pen的坐标,让pen按照网格自动对齐
204
- * @author Joseph Ho
205
- * @date 14/11/2023
206
- * @memberof Canvas
207
- */
208
- alignPenToGrid(pen: Pen): void;
209
- /**
210
- * 拖拽结束,数据更新到 active.pens
211
- */
212
- private movedActivePens;
213
- /**
214
- * 复制移动后的笔
215
- */
216
- private copyMovedPens;
217
- /**
218
- * 若本次改变的画笔存在图片,并且在上层 or 下层,需要擦除上层 or 下层
219
- * 子节点中包含图片,也需要重绘
220
- * @param pens 本次改变的 pens
221
- */
222
- initImageCanvas(pens: Pen[]): void;
223
- initTemplateCanvas(pens: Pen[]): void;
224
- private hasImage;
225
- private clearDock;
226
- inactive(drawing?: boolean): void;
227
- active(pens: Pen[], emit?: boolean): void;
228
- getSizeCPs(): void;
229
- getSpecialAngle(to: Point, last: Point): void;
230
- onResize: () => void;
231
- onScroll: () => void;
232
- calibrateMouse: (pt: Point) => Point;
233
- clearHover(): void;
234
- private getContainerHover;
235
- private getHover;
236
- private inPens;
237
- private dockInAnchor;
238
- inAnchor(pt: Point, pen: Pen, anchor: Point): HoverType;
239
- resize(w?: number, h?: number): void;
240
- clearCanvas(): void;
241
- addPen(pen: Pen, history?: boolean, emit?: boolean): Promise<Pen>;
242
- pushHistory(action: EditAction): void;
243
- undo(): void;
244
- redo(): void;
245
- activeHistory(): void;
246
- doEditAction(action: EditAction, undo: boolean): void;
247
- makePen(pen: Pen): void;
248
- drawline(mouse?: Point): void;
249
- initLineRect(pen: Pen): void;
250
- drawingPencil(): void;
251
- stopPencil(): void;
252
- finishDrawline(end?: boolean): Promise<void>;
253
- finishPencil(): Promise<void>;
254
- /**
255
- * 火狐浏览器无法绘制 svg 不存在 width height 的问题
256
- * 此方法手动添加 width 和 height 解决火狐浏览器绘制 svg
257
- * @param pen
258
- */
259
- private firefoxLoadSvg;
260
- loadImage(pen: Pen): void;
261
- private imageTimer;
262
- imageLoaded(): void;
263
- private templateImageTimer;
264
- templateImageLoaded(): void;
265
- setCalculativeByScale(pen: Pen): void;
266
- updatePenRect(pen: Pen, { worldRectIsReady, playingAnimate, }?: {
267
- worldRectIsReady?: boolean;
268
- playingAnimate?: boolean;
269
- noChildren?: boolean;
270
- }): void;
271
- render: (patchFlags?: number | boolean) => void;
272
- renderPens: () => void;
273
- private renderPenContainChild;
274
- renderBorder: () => void;
275
- renderHoverPoint: () => void;
276
- translate(x?: number, y?: number): void;
277
- onMovePens(): void;
278
- /**
279
- * 缩放整个画布
280
- * @param scale 缩放比例,最终的 data.scale
281
- * @param center 中心点,引用类型,存在副作用,会更改原值
282
- */
283
- scale(scale: number, center?: {
284
- x: number;
285
- y: number;
286
- }): void;
287
- templateScale(scale: number, center?: {
288
- x: number;
289
- y: number;
290
- }): void;
291
- rotatePens(e: Point): void;
292
- resizePens(e: Point): void;
293
- movePens(e: {
294
- x: number;
295
- y: number;
296
- ctrlKey?: boolean;
297
- shiftKey?: boolean;
298
- altKey?: boolean;
299
- }): void;
300
- /**
301
- * 初始化移动,更改画笔的 id parentId 等关联关系
302
- * @param pen 要修改的画笔
303
- * @param pens 本次操作的画笔们,包含子画笔
304
- */
305
- private changeIdsByMoving;
306
- /**
307
- * 初始化 this.movingPens
308
- * 修改 ids (id parentId children 等)
309
- * 半透明,去图片
310
- */
311
- initMovingPens(): void;
312
- moveLineAnchor(pt: {
313
- x: number;
314
- y: number;
315
- }, keyOptions: {
316
- ctrlKey?: boolean;
317
- shiftKey?: boolean;
318
- altKey?: boolean;
319
- }): void;
320
- moveLineAnchorPrev(e: {
321
- x: number;
322
- y: number;
323
- }): void;
324
- moveLineAnchorNext(e: {
325
- x: number;
326
- y: number;
327
- }): void;
328
- setAnchor(e: {
329
- x: number;
330
- y: number;
331
- }): Promise<void>;
332
- /**
333
- * 连线允许移动,若与其它图形有连接,但其它图形不在此次移动中,会断开连接
334
- * @param line 连线
335
- * @param pens 本次移动的全部图形,包含子节点
336
- */
337
- private checkDisconnect;
338
- /**
339
- * 移动 画笔们
340
- * @param pens 画笔们,不包含子节点
341
- * @param x 偏移 x
342
- * @param y 偏移 y
343
- * @param doing 是否持续移动
344
- */
345
- translatePens(pens: Pen[], x: number, y: number, doing?: boolean): void;
346
- /**
347
- * 移动 画笔们
348
- * @param pens 画笔们,不包含子节点
349
- * @param x 偏移 x
350
- * @param y 偏移 y
351
- * @param doing 是否持续移动
352
- */
353
- templateTranslatePens(pens: Pen[], x: number, y: number): void;
354
- private calcAutoAnchor;
355
- restoreNodeAnimate(pen: Pen): void;
356
- updateLines(pen: Pen, change?: boolean): void;
357
- calcActiveRect(): void;
358
- /**
359
- * 旋转当前画笔包括子节点
360
- * @param pen 旋转的画笔
361
- * @param angle 本次的旋转值,加到 pen.calculative.rotate 上
362
- */
363
- rotatePen(pen: Pen, angle: number, rect: Rect): void;
364
- nextAnimate(pen: Pen): void;
365
- getFrameProps(pen: Pen): {};
366
- animate(): void;
367
- get clipboardName(): string;
368
- copy(pens?: Pen[], emit?: boolean): Promise<void>;
369
- cut(pens?: Pen[]): void;
370
- paste(): Promise<void>;
371
- /**
372
- * 获取 pens 列表中的所有节点(包含子节点)
373
- * @param pens 不包含子节点
374
- */
375
- getAllByPens(pens: Pen[]): Pen[];
376
- getAllFollowersByPens(pens: Pen[], deep?: boolean): Pen[];
377
- setFollowers(pens?: Pen[]): void;
378
- /**
379
- *
380
- * @param pen 当前复制的画笔
381
- * @param parentId 父节点 id
382
- * @param clipboard 本次复制的全部画笔,包含子节点, 以及 origin 和 scale
383
- * @returns 复制后的画笔
384
- */
385
- private pastePen;
386
- /**
387
- * 修改对应连线的 anchors
388
- * @param oldId 老 id
389
- * @param pen 节点
390
- * @param pastePens 本次复制的 pens 包含子节点
391
- */
392
- changeLineAnchors(oldId: string, pen: Pen, pastePens: Pen[]): void;
393
- /**
394
- * 复制连线的过程,修改 与 此线连接 node 的 connectedLines
395
- * @param oldId 线原 id
396
- * @param line 线
397
- * @param pastePens 此处复制的全部 pens (包含子节点)
398
- */
399
- changeNodeConnectedLine(oldId: string, line: Pen, pastePens: Pen[]): void;
400
- delete(pens?: Pen[], canDelLocked?: boolean, history?: boolean): Promise<void>;
401
- private _del;
402
- getDelPens(pen: Pen, delPens: Pen[]): void;
403
- private getLockedParent;
404
- delForce(pen: Pen): void;
405
- private delConnectedLines;
406
- private ondblclick;
407
- showInput: (pen: Pen, rect?: Rect, background?: string) => void;
408
- setInputStyle: (pen: Pen) => void;
409
- convertSpecialCharacter(str: any): any;
410
- hideInput: () => void;
411
- private createInput;
412
- clearDropdownList(): void;
413
- private setDropdownList;
414
- /**
415
- * 添加一个选项到 dropdown dom 中
416
- * @param text 选项文字
417
- * @param index 选项索引
418
- */
419
- private dropdownAppendOption;
420
- private selectDropdown;
421
- find(idOrTag: string): Pen[];
422
- findOne(idOrTag: string): Pen | undefined;
423
- changePenId(oldId: string, newId: string): void;
424
- updateValue(pen: Pen, data: IValue): void;
425
- /**
426
- * 执行 pen ,以及 pen 的子孙节点的 onResize 生命周期函数
427
- */
428
- private execPenResize;
429
- setPenRect(pen: Pen, rect: Rect, render?: boolean): void;
430
- getPenRect(pen: Pen, origin?: Point, scale?: number): {
431
- x: number;
432
- y: number;
433
- width: number;
434
- height: number;
435
- };
436
- toPng(padding?: Padding, callback?: BlobCallback, containBkImg?: boolean, maxWidth?: number): string;
437
- activeToPng(padding?: Padding, maxWidth?: number): string;
438
- pensToPng(pens?: Pen[], padding?: Padding, maxWidth?: number): string;
439
- toggleAnchorMode(): void;
440
- addAnchorHand(): void;
441
- removeAnchorHand(): void;
442
- toggleAnchorHand(): void;
443
- gotoView(x: number, y: number): void;
444
- showMagnifier(): void;
445
- hideMagnifier(): void;
446
- private inFitBorder;
447
- showFit(): void;
448
- hideFit(): void;
449
- makeFit(): void;
450
- updateFit(e: any): void;
451
- updateFitRect(fit?: Fit): void;
452
- deleteFit(fit?: Fit): void;
453
- calcuActiveFit(): void;
454
- toggleMagnifier(): void;
455
- destroy(): void;
456
- }
1
+ import { Pen, IValue } from '../pen';
2
+ import { Point } from '../point';
3
+ import { Rect } from '../rect';
4
+ import { EditAction, Fit, Meta2dStore } from '../store';
5
+ import { Padding } from '../utils';
6
+ import { HotkeyType, HoverType, MouseRight } from '../data';
7
+ import { curve, mind, lineSegment } from '../diagrams';
8
+ import { polyline } from '../diagrams/line/polyline';
9
+ import { Tooltip } from '../tooltip';
10
+ import { Scroll } from '../scroll';
11
+ import { CanvasImage } from './canvasImage';
12
+ import { MagnifierCanvas } from './magnifierCanvas';
13
+ import { Meta2d } from '../core';
14
+ import { Dialog } from '../dialog';
15
+ import { Title } from '../title';
16
+ import { CanvasTemplate } from './canvasTemplate';
17
+ export declare const movingSuffix: "-moving";
18
+ export declare class Canvas {
19
+ parent: Meta2d;
20
+ parentElement: HTMLElement;
21
+ store: Meta2dStore;
22
+ canvas: HTMLCanvasElement;
23
+ offscreen: HTMLCanvasElement;
24
+ width: number;
25
+ height: number;
26
+ externalElements: HTMLDivElement;
27
+ clientRect?: DOMRect;
28
+ canvasRect: Rect;
29
+ activeRect: Rect;
30
+ initActiveRect: Rect;
31
+ dragRect: Rect;
32
+ lastRotate: number;
33
+ sizeCPs: Point[];
34
+ activeInitPos: Point[];
35
+ hoverType: HoverType;
36
+ resizeIndex: number;
37
+ mouseDown: {
38
+ x: number;
39
+ y: number;
40
+ restore?: boolean;
41
+ };
42
+ hotkeyType: HotkeyType;
43
+ mouseRight: MouseRight;
44
+ addCaches: Pen[];
45
+ touchCenter?: Point;
46
+ initTouchDis?: number;
47
+ initScale?: number;
48
+ touchScaling?: boolean;
49
+ touchMoving?: boolean;
50
+ startTouches?: TouchList;
51
+ lastOffsetX: number;
52
+ lastOffsetY: number;
53
+ drawingLineName?: string;
54
+ drawLineFns: string[];
55
+ drawingLine?: Pen;
56
+ pencil?: boolean;
57
+ pencilLine?: Pen;
58
+ movingPens: Pen[];
59
+ patchFlagsLines?: Set<Pen>;
60
+ dock: {
61
+ xDock: Point;
62
+ yDock: Point;
63
+ };
64
+ prevAnchor: Point;
65
+ nextAnchor: Point;
66
+ private lastMouseTime;
67
+ private hoverTimer;
68
+ private fitTimer;
69
+ private willInactivePen;
70
+ patchFlags: boolean;
71
+ lastRender: number;
72
+ touchStart: number;
73
+ touchStartTimer: any;
74
+ timer: any;
75
+ private lastAnimateRender;
76
+ animateRendering: boolean;
77
+ renderTimer: number;
78
+ initPens?: Pen[];
79
+ pointSize: 8;
80
+ pasteOffset: boolean;
81
+ opening: boolean;
82
+ maxZindex: number;
83
+ canMoveLine: boolean;
84
+ randomIdObj: object;
85
+ keyOptions?: {
86
+ shiftKey?: boolean;
87
+ altKey?: boolean;
88
+ ctrlKey?: boolean;
89
+ metaKey?: boolean;
90
+ };
91
+ /**
92
+ * @deprecated 改用 beforeAddPens
93
+ */
94
+ beforeAddPen: (pen: Pen) => boolean;
95
+ beforeAddPens: (pens: Pen[]) => Promise<boolean>;
96
+ beforeAddAnchor: (pen: Pen, anchor: Point) => Promise<boolean>;
97
+ beforeRemovePens: (pens: Pen[]) => Promise<boolean>;
98
+ beforeRemoveAnchor: (pen: Pen, anchor: Point) => Promise<boolean>;
99
+ customResizeDock: (store: Meta2dStore, rect: Rect, pens: Pen[], resizeIndex: number) => {
100
+ xDock: Point;
101
+ yDock: Point;
102
+ };
103
+ customMoveDock: (store: Meta2dStore, rect: Rect, pens: Pen[], offset: Point) => {
104
+ xDock: Point;
105
+ yDock: Point;
106
+ };
107
+ inputParent: HTMLDivElement;
108
+ inputDiv: HTMLDivElement;
109
+ inputRight: HTMLDivElement;
110
+ dropdown: HTMLUListElement;
111
+ tooltip: Tooltip;
112
+ title: Title;
113
+ mousePos: Point;
114
+ scroll: Scroll;
115
+ movingAnchor: Point;
116
+ canvasTemplate: CanvasTemplate;
117
+ canvasImage: CanvasImage;
118
+ canvasImageBottom: CanvasImage;
119
+ magnifierCanvas: MagnifierCanvas;
120
+ dialog: Dialog;
121
+ autoPolylineFlag: boolean;
122
+ stopPropagation: (e: MouseEvent) => void;
123
+ constructor(parent: Meta2d, parentElement: HTMLElement, store: Meta2dStore);
124
+ curve: typeof curve;
125
+ polyline: typeof polyline;
126
+ mind: typeof mind;
127
+ line: typeof lineSegment;
128
+ listen(): void;
129
+ onCopy: (event: ClipboardEvent) => void;
130
+ onCut: (event: ClipboardEvent) => void;
131
+ onPaste: (event: ClipboardEvent) => void;
132
+ onMessage: (e: MessageEvent) => void;
133
+ onwheel: (e: WheelEvent) => void;
134
+ onkeydown: (e: KeyboardEvent) => void;
135
+ /**
136
+ * 分割连线的锚点,变成两条线
137
+ * @param line 连线
138
+ * @param anchor 锚点,连线的某个锚点,引用相同
139
+ */
140
+ splitLine(line: Pen, anchor: Point): void;
141
+ private translateAnchor;
142
+ onkeyup: (e: KeyboardEvent) => void;
143
+ fileToPen(file: File, isGif: boolean): Promise<Pen>;
144
+ ondrop: (event: DragEvent) => Promise<void>;
145
+ dropPens(pens: Pen[], e: Point): Promise<void>;
146
+ randomCombineId(pen: Pen, pens: Pen[], parentId?: string): Pen;
147
+ addPens(pens: Pen[], history?: boolean): Promise<Pen[]>;
148
+ ontouchstart: (e: TouchEvent) => void;
149
+ ontouchmove: (event: TouchEvent) => void;
150
+ ontouchend: (event: TouchEvent) => void;
151
+ onGesturestart: (e: any) => void;
152
+ /**
153
+ * 获取初始化的 pencilLine
154
+ * @param pt 需包含 penId
155
+ */
156
+ private getInitPencilLine;
157
+ /**
158
+ * 获取初始化的 drawingLine
159
+ * @param pt 需包含 penId
160
+ */
161
+ private createDrawingLine;
162
+ onMouseDown: (e: {
163
+ x: number;
164
+ y: number;
165
+ clientX: number;
166
+ clientY: number;
167
+ pageX: number;
168
+ pageY: number;
169
+ buttons?: number;
170
+ ctrlKey?: boolean;
171
+ shiftKey?: boolean;
172
+ altKey?: boolean;
173
+ }) => void;
174
+ onMouseMove: (e: {
175
+ x: number;
176
+ y: number;
177
+ clientX: number;
178
+ clientY: number;
179
+ pageX: number;
180
+ pageY: number;
181
+ buttons?: number;
182
+ ctrlKey?: boolean;
183
+ shiftKey?: boolean;
184
+ altKey?: boolean;
185
+ }) => void;
186
+ onMouseUp: (e: {
187
+ x: number;
188
+ y: number;
189
+ clientX: number;
190
+ clientY: number;
191
+ pageX: number;
192
+ pageY: number;
193
+ buttons?: number;
194
+ ctrlKey?: boolean;
195
+ shiftKey?: boolean;
196
+ altKey?: boolean;
197
+ button?: number;
198
+ }) => void;
199
+ private addRuleLine;
200
+ clearRuleLines(): void;
201
+ get ruleLines(): Pen[];
202
+ /**
203
+ * @description 调整pen的坐标,让pen按照网格自动对齐
204
+ * @author Joseph Ho
205
+ * @date 14/11/2023
206
+ * @memberof Canvas
207
+ */
208
+ alignPenToGrid(pen: Pen): void;
209
+ /**
210
+ * 拖拽结束,数据更新到 active.pens
211
+ */
212
+ private movedActivePens;
213
+ /**
214
+ * 复制移动后的笔
215
+ */
216
+ private copyMovedPens;
217
+ /**
218
+ * 若本次改变的画笔存在图片,并且在上层 or 下层,需要擦除上层 or 下层
219
+ * 子节点中包含图片,也需要重绘
220
+ * @param pens 本次改变的 pens
221
+ */
222
+ initImageCanvas(pens: Pen[]): void;
223
+ initTemplateCanvas(pens: Pen[]): void;
224
+ private hasImage;
225
+ private clearDock;
226
+ inactive(drawing?: boolean): void;
227
+ active(pens: Pen[], emit?: boolean): void;
228
+ getSizeCPs(): void;
229
+ getSpecialAngle(to: Point, last: Point): void;
230
+ onResize: () => void;
231
+ onScroll: () => void;
232
+ calibrateMouse: (pt: Point) => Point;
233
+ clearHover(): void;
234
+ private getContainerHover;
235
+ private getHover;
236
+ private inPens;
237
+ private dockInAnchor;
238
+ inAnchor(pt: Point, pen: Pen, anchor: Point): HoverType;
239
+ resize(w?: number, h?: number): void;
240
+ clearCanvas(): void;
241
+ addPen(pen: Pen, history?: boolean, emit?: boolean): Promise<Pen>;
242
+ pushHistory(action: EditAction): void;
243
+ undo(): void;
244
+ redo(): void;
245
+ activeHistory(): void;
246
+ doEditAction(action: EditAction, undo: boolean): void;
247
+ makePen(pen: Pen): void;
248
+ drawline(mouse?: Point): void;
249
+ initLineRect(pen: Pen): void;
250
+ drawingPencil(): void;
251
+ stopPencil(): void;
252
+ finishDrawline(end?: boolean): Promise<void>;
253
+ finishPencil(): Promise<void>;
254
+ /**
255
+ * 火狐浏览器无法绘制 svg 不存在 width height 的问题
256
+ * 此方法手动添加 width 和 height 解决火狐浏览器绘制 svg
257
+ * @param pen
258
+ */
259
+ private firefoxLoadSvg;
260
+ loadImage(pen: Pen): void;
261
+ private imageTimer;
262
+ imageLoaded(): void;
263
+ private templateImageTimer;
264
+ templateImageLoaded(): void;
265
+ setCalculativeByScale(pen: Pen): void;
266
+ updatePenRect(pen: Pen, { worldRectIsReady, playingAnimate, }?: {
267
+ worldRectIsReady?: boolean;
268
+ playingAnimate?: boolean;
269
+ noChildren?: boolean;
270
+ }): void;
271
+ render: (patchFlags?: number | boolean) => void;
272
+ renderPens: () => void;
273
+ private renderPenContainChild;
274
+ renderBorder: () => void;
275
+ renderHoverPoint: () => void;
276
+ translate(x?: number, y?: number): void;
277
+ onMovePens(): void;
278
+ /**
279
+ * 缩放整个画布
280
+ * @param scale 缩放比例,最终的 data.scale
281
+ * @param center 中心点,引用类型,存在副作用,会更改原值
282
+ */
283
+ scale(scale: number, center?: {
284
+ x: number;
285
+ y: number;
286
+ }): void;
287
+ templateScale(scale: number, center?: {
288
+ x: number;
289
+ y: number;
290
+ }): void;
291
+ rotatePens(e: Point): void;
292
+ resizePens(e: Point): void;
293
+ movePens(e: {
294
+ x: number;
295
+ y: number;
296
+ ctrlKey?: boolean;
297
+ shiftKey?: boolean;
298
+ altKey?: boolean;
299
+ }): void;
300
+ /**
301
+ * 初始化移动,更改画笔的 id parentId 等关联关系
302
+ * @param pen 要修改的画笔
303
+ * @param pens 本次操作的画笔们,包含子画笔
304
+ */
305
+ private changeIdsByMoving;
306
+ /**
307
+ * 初始化 this.movingPens
308
+ * 修改 ids (id parentId children 等)
309
+ * 半透明,去图片
310
+ */
311
+ initMovingPens(): void;
312
+ moveLineAnchor(pt: {
313
+ x: number;
314
+ y: number;
315
+ }, keyOptions: {
316
+ ctrlKey?: boolean;
317
+ shiftKey?: boolean;
318
+ altKey?: boolean;
319
+ }): void;
320
+ moveLineAnchorPrev(e: {
321
+ x: number;
322
+ y: number;
323
+ }): void;
324
+ moveLineAnchorNext(e: {
325
+ x: number;
326
+ y: number;
327
+ }): void;
328
+ setAnchor(e: {
329
+ x: number;
330
+ y: number;
331
+ }): Promise<void>;
332
+ /**
333
+ * 连线允许移动,若与其它图形有连接,但其它图形不在此次移动中,会断开连接
334
+ * @param line 连线
335
+ * @param pens 本次移动的全部图形,包含子节点
336
+ */
337
+ private checkDisconnect;
338
+ /**
339
+ * 移动 画笔们
340
+ * @param pens 画笔们,不包含子节点
341
+ * @param x 偏移 x
342
+ * @param y 偏移 y
343
+ * @param doing 是否持续移动
344
+ */
345
+ translatePens(pens: Pen[], x: number, y: number, doing?: boolean): void;
346
+ /**
347
+ * 移动 画笔们
348
+ * @param pens 画笔们,不包含子节点
349
+ * @param x 偏移 x
350
+ * @param y 偏移 y
351
+ * @param doing 是否持续移动
352
+ */
353
+ templateTranslatePens(pens: Pen[], x: number, y: number): void;
354
+ private calcAutoAnchor;
355
+ restoreNodeAnimate(pen: Pen): void;
356
+ updateLines(pen: Pen, change?: boolean): void;
357
+ calcActiveRect(): void;
358
+ /**
359
+ * 旋转当前画笔包括子节点
360
+ * @param pen 旋转的画笔
361
+ * @param angle 本次的旋转值,加到 pen.calculative.rotate 上
362
+ */
363
+ rotatePen(pen: Pen, angle: number, rect: Rect): void;
364
+ nextAnimate(pen: Pen): void;
365
+ getFrameProps(pen: Pen): {};
366
+ animate(): void;
367
+ get clipboardName(): string;
368
+ copy(pens?: Pen[], emit?: boolean): Promise<void>;
369
+ cut(pens?: Pen[]): void;
370
+ paste(): Promise<void>;
371
+ /**
372
+ * 获取 pens 列表中的所有节点(包含子节点)
373
+ * @param pens 不包含子节点
374
+ */
375
+ getAllByPens(pens: Pen[]): Pen[];
376
+ getAllFollowersByPens(pens: Pen[], deep?: boolean): Pen[];
377
+ setFollowers(pens?: Pen[]): void;
378
+ /**
379
+ *
380
+ * @param pen 当前复制的画笔
381
+ * @param parentId 父节点 id
382
+ * @param clipboard 本次复制的全部画笔,包含子节点, 以及 origin 和 scale
383
+ * @returns 复制后的画笔
384
+ */
385
+ private pastePen;
386
+ /**
387
+ * 修改对应连线的 anchors
388
+ * @param oldId 老 id
389
+ * @param pen 节点
390
+ * @param pastePens 本次复制的 pens 包含子节点
391
+ */
392
+ changeLineAnchors(oldId: string, pen: Pen, pastePens: Pen[]): void;
393
+ /**
394
+ * 复制连线的过程,修改 与 此线连接 node 的 connectedLines
395
+ * @param oldId 线原 id
396
+ * @param line 线
397
+ * @param pastePens 此处复制的全部 pens (包含子节点)
398
+ */
399
+ changeNodeConnectedLine(oldId: string, line: Pen, pastePens: Pen[]): void;
400
+ delete(pens?: Pen[], canDelLocked?: boolean, history?: boolean): Promise<void>;
401
+ private _del;
402
+ getDelPens(pen: Pen, delPens: Pen[]): void;
403
+ private getLockedParent;
404
+ delForce(pen: Pen): void;
405
+ private delConnectedLines;
406
+ private ondblclick;
407
+ showInput: (pen: Pen, rect?: Rect, background?: string) => void;
408
+ setInputStyle: (pen: Pen) => void;
409
+ convertSpecialCharacter(str: any): any;
410
+ hideInput: () => void;
411
+ private createInput;
412
+ clearDropdownList(): void;
413
+ private setDropdownList;
414
+ /**
415
+ * 添加一个选项到 dropdown dom 中
416
+ * @param text 选项文字
417
+ * @param index 选项索引
418
+ */
419
+ private dropdownAppendOption;
420
+ private selectDropdown;
421
+ find(idOrTag: string): Pen[];
422
+ findOne(idOrTag: string): Pen | undefined;
423
+ changePenId(oldId: string, newId: string): void;
424
+ updateValue(pen: Pen, data: IValue): void;
425
+ /**
426
+ * 执行 pen ,以及 pen 的子孙节点的 onResize 生命周期函数
427
+ */
428
+ private execPenResize;
429
+ setPenRect(pen: Pen, rect: Rect, render?: boolean): void;
430
+ getPenRect(pen: Pen, origin?: Point, scale?: number): {
431
+ x: number;
432
+ y: number;
433
+ width: number;
434
+ height: number;
435
+ };
436
+ toPng(padding?: Padding, callback?: BlobCallback, containBkImg?: boolean, maxWidth?: number): string;
437
+ activeToPng(padding?: Padding, maxWidth?: number): string;
438
+ pensToPng(pens?: Pen[], padding?: Padding, maxWidth?: number): string;
439
+ toggleAnchorMode(): void;
440
+ addAnchorHand(): void;
441
+ removeAnchorHand(): void;
442
+ toggleAnchorHand(): void;
443
+ gotoView(x: number, y: number): void;
444
+ showMagnifier(): void;
445
+ hideMagnifier(): void;
446
+ private inFitBorder;
447
+ showFit(): void;
448
+ hideFit(): void;
449
+ makeFit(): void;
450
+ updateFit(e: any): void;
451
+ updateFitRect(fit?: Fit): void;
452
+ deleteFit(fit?: Fit): void;
453
+ calcuActiveFit(): void;
454
+ toggleMagnifier(): void;
455
+ destroy(): void;
456
+ }