@logicflow/core 2.2.0-alpha.7 → 2.2.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.
Files changed (137) hide show
  1. package/package.json +6 -1
  2. package/.turbo/turbo-build$colon$dev.log +0 -10
  3. package/.turbo/turbo-build.log +0 -33
  4. package/CHANGELOG.md +0 -1901
  5. package/__tests__/algorithm/egde.test.ts +0 -131
  6. package/__tests__/algorithm/index.test.ts +0 -74
  7. package/__tests__/algorithm/outline.test.ts +0 -43
  8. package/__tests__/bugs/1545-spec.test.ts +0 -42
  9. package/__tests__/event/event.test.ts +0 -22
  10. package/__tests__/history/history.test.ts +0 -28
  11. package/__tests__/logicflow.test.ts +0 -575
  12. package/__tests__/model/graphmodel.test.ts +0 -87
  13. package/__tests__/util/compatible.test.ts +0 -48
  14. package/__tests__/util/edge.test.ts +0 -224
  15. package/__tests__/util/geometry.test.ts +0 -14
  16. package/__tests__/util/graph.test.ts +0 -16
  17. package/__tests__/util/matrix.test.ts +0 -41
  18. package/__tests__/util/node.test.ts +0 -68
  19. package/__tests__/util/sampling.test.ts +0 -12
  20. package/__tests__/util/vector.test.ts +0 -50
  21. package/__tests__/util/zIndex.test.ts +0 -10
  22. package/src/LogicFlow.tsx +0 -2017
  23. package/src/algorithm/edge.ts +0 -67
  24. package/src/algorithm/index.ts +0 -70
  25. package/src/algorithm/outline.ts +0 -77
  26. package/src/algorithm/rotate.ts +0 -55
  27. package/src/common/drag.ts +0 -219
  28. package/src/common/history.ts +0 -108
  29. package/src/common/index.ts +0 -6
  30. package/src/common/keyboard.ts +0 -108
  31. package/src/common/matrix.ts +0 -122
  32. package/src/common/vector.ts +0 -93
  33. package/src/constant/index.ts +0 -179
  34. package/src/constant/theme.ts +0 -708
  35. package/src/event/event.md +0 -66
  36. package/src/event/eventArgs.ts +0 -643
  37. package/src/event/eventEmitter.ts +0 -156
  38. package/src/history/index.ts +0 -119
  39. package/src/index.less +0 -1
  40. package/src/index.ts +0 -26
  41. package/src/keyboard/index.ts +0 -112
  42. package/src/keyboard/shortcut.ts +0 -200
  43. package/src/model/BaseModel.ts +0 -250
  44. package/src/model/EditConfigModel.ts +0 -334
  45. package/src/model/GraphModel.ts +0 -1824
  46. package/src/model/NestedTransformModel.ts +0 -121
  47. package/src/model/SnaplineModel.ts +0 -256
  48. package/src/model/TransformModel.ts +0 -258
  49. package/src/model/edge/BaseEdgeModel.ts +0 -785
  50. package/src/model/edge/BezierEdgeModel.ts +0 -197
  51. package/src/model/edge/LineEdgeModel.ts +0 -36
  52. package/src/model/edge/PolylineEdgeModel.ts +0 -817
  53. package/src/model/edge/index.ts +0 -4
  54. package/src/model/index.ts +0 -9
  55. package/src/model/node/BaseNodeModel.ts +0 -959
  56. package/src/model/node/CircleNodeModel.ts +0 -91
  57. package/src/model/node/DiamondNodeModel.ts +0 -132
  58. package/src/model/node/EllipseNodeModel.ts +0 -98
  59. package/src/model/node/HtmlNodeModel.ts +0 -64
  60. package/src/model/node/PolygonNodeModel.ts +0 -152
  61. package/src/model/node/RectNodeModel.ts +0 -69
  62. package/src/model/node/TextNodeModel.ts +0 -54
  63. package/src/model/node/index.ts +0 -8
  64. package/src/options.ts +0 -150
  65. package/src/style/index.less +0 -262
  66. package/src/style/raw.ts +0 -221
  67. package/src/tool/MultipleSelectTool.tsx +0 -140
  68. package/src/tool/TextEditTool.tsx +0 -193
  69. package/src/tool/index.ts +0 -101
  70. package/src/typings.d.ts +0 -5
  71. package/src/util/animation.ts +0 -29
  72. package/src/util/browser.ts +0 -4
  73. package/src/util/compatible.ts +0 -15
  74. package/src/util/drag.ts +0 -219
  75. package/src/util/edge.ts +0 -1094
  76. package/src/util/geometry.ts +0 -154
  77. package/src/util/graph.ts +0 -46
  78. package/src/util/index.ts +0 -17
  79. package/src/util/matrix.ts +0 -129
  80. package/src/util/mobx.ts +0 -23
  81. package/src/util/node.ts +0 -543
  82. package/src/util/raf.ts +0 -28
  83. package/src/util/resize.ts +0 -606
  84. package/src/util/sampling.ts +0 -85
  85. package/src/util/theme.ts +0 -84
  86. package/src/util/uuid.ts +0 -26
  87. package/src/util/vector.ts +0 -93
  88. package/src/util/zIndex.ts +0 -6
  89. package/src/view/Anchor.tsx +0 -462
  90. package/src/view/Control.tsx +0 -510
  91. package/src/view/Graph.tsx +0 -141
  92. package/src/view/Rotate.tsx +0 -113
  93. package/src/view/behavior/dnd.ts +0 -162
  94. package/src/view/behavior/index.ts +0 -2
  95. package/src/view/behavior/snapline.ts +0 -16
  96. package/src/view/edge/AdjustPoint.tsx +0 -425
  97. package/src/view/edge/Arrow.tsx +0 -54
  98. package/src/view/edge/BaseEdge.tsx +0 -660
  99. package/src/view/edge/BezierEdge.tsx +0 -101
  100. package/src/view/edge/LineEdge.tsx +0 -81
  101. package/src/view/edge/PolylineEdge.tsx +0 -311
  102. package/src/view/edge/index.ts +0 -6
  103. package/src/view/index.ts +0 -8
  104. package/src/view/node/BaseNode.tsx +0 -585
  105. package/src/view/node/CircleNode.tsx +0 -21
  106. package/src/view/node/DiamondNode.tsx +0 -24
  107. package/src/view/node/EllipseNode.tsx +0 -22
  108. package/src/view/node/HtmlNode.tsx +0 -112
  109. package/src/view/node/PolygonNode.tsx +0 -28
  110. package/src/view/node/RectNode.tsx +0 -30
  111. package/src/view/node/TextNode.tsx +0 -39
  112. package/src/view/node/index.ts +0 -8
  113. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  114. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  115. package/src/view/overlay/CanvasOverlay.tsx +0 -290
  116. package/src/view/overlay/Grid.tsx +0 -319
  117. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  118. package/src/view/overlay/OutlineOverlay.tsx +0 -158
  119. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  120. package/src/view/overlay/ToolOverlay.tsx +0 -65
  121. package/src/view/overlay/getTransformHoc.tsx +0 -50
  122. package/src/view/overlay/gridConfig.ts +0 -103
  123. package/src/view/overlay/index.ts +0 -8
  124. package/src/view/shape/Circle.tsx +0 -41
  125. package/src/view/shape/Ellipse.tsx +0 -42
  126. package/src/view/shape/Line.tsx +0 -39
  127. package/src/view/shape/Path.tsx +0 -22
  128. package/src/view/shape/Polygon.tsx +0 -54
  129. package/src/view/shape/Polyline.tsx +0 -31
  130. package/src/view/shape/Rect.tsx +0 -44
  131. package/src/view/shape/Text.tsx +0 -168
  132. package/src/view/shape/index.ts +0 -8
  133. package/src/view/text/BaseText.tsx +0 -134
  134. package/src/view/text/LineText.tsx +0 -168
  135. package/src/view/text/index.ts +0 -2
  136. package/stats.html +0 -4842
  137. package/tsconfig.json +0 -18
@@ -1,575 +0,0 @@
1
- import { BaseNode, BaseNodeModel, Keyboard } from '../src'
2
- import LogicFlow from '../src/LogicFlow'
3
- // import Tool from '../src/tool'
4
- /**
5
- * @jest-environment jsdom
6
- */
7
- describe('logicflow/initialize', () => {
8
- test('init', () => {
9
- const initContainerSpy = jest.spyOn(
10
- LogicFlow.prototype as any,
11
- 'initContainer' as any,
12
- )
13
- const dom = document.createElement('div')
14
- dom.id = 'main-graph'
15
- document.body.appendChild(dom)
16
- const lf = new LogicFlow({
17
- container: dom,
18
- })
19
- expect(initContainerSpy).toBeCalled()
20
- expect(lf).toBeDefined()
21
- })
22
-
23
- test('elements register', () => {
24
- const defaultRegister = jest.fn()
25
- jest
26
- .spyOn(LogicFlow.prototype as any, 'defaultRegister')
27
- .mockImplementation(defaultRegister)
28
-
29
- const dom = document.createElement('div')
30
- dom.id = 'main-graph'
31
- document.body.appendChild(dom)
32
- const lf = new LogicFlow({
33
- container: dom,
34
- })
35
- lf.register({
36
- type: 'test',
37
- view: BaseNode,
38
- model: BaseNodeModel,
39
- })
40
-
41
- lf.register('custom', ({ RectNode, RectNodeModel }) => {
42
- class CustomView extends RectNode {}
43
- class CustomModel extends RectNodeModel {}
44
- return {
45
- view: CustomView,
46
- model: CustomModel,
47
- }
48
- })
49
-
50
- expect(defaultRegister).toBeCalled()
51
- expect(lf.getView('test')).toBeDefined()
52
- expect(lf.getView('custom')).toBeDefined()
53
- expect(lf.graphModel.getModel('test')).toBeDefined()
54
- expect(lf.graphModel.getModel('custom')).toBeDefined()
55
- })
56
-
57
- test('register plugin by Logicflow.use', () => {
58
- class Plugin {
59
- static pluginName = 'test-use'
60
- lf: LogicFlow
61
- constructor(lf: LogicFlow) {
62
- this.lf = lf
63
- }
64
- init() {}
65
- }
66
- LogicFlow.use(Plugin)
67
- expect(LogicFlow.extensions.get('test-use')).toBeDefined()
68
- })
69
-
70
- test('shortcut', () => {
71
- const initShortcuts = jest.fn()
72
- const on = jest.fn()
73
- Keyboard.prototype.initShortcuts = initShortcuts
74
- Keyboard.prototype.on = on
75
- const dom = document.createElement('div')
76
- dom.id = 'main-graph'
77
- document.body.appendChild(dom)
78
-
79
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
80
- const lf = new LogicFlow({
81
- container: dom,
82
- })
83
- expect(initShortcuts).toBeCalled()
84
- expect(on).toBeCalledTimes(5)
85
- })
86
-
87
- test('not silent mode', () => {
88
- const initShortcuts = jest.fn()
89
- Keyboard.prototype.initShortcuts = initShortcuts
90
- const dom = document.createElement('div')
91
- dom.id = 'main-graph'
92
- document.body.appendChild(dom)
93
-
94
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
95
- const lf = new LogicFlow({
96
- container: dom,
97
- isSilentMode: false,
98
- })
99
- expect(initShortcuts).toBeCalledTimes(1)
100
- })
101
- })
102
-
103
- describe('logicflow/apis', () => {
104
- const rawData = {
105
- nodes: [
106
- {
107
- id: 'node1',
108
- type: 'circle',
109
- x: 100,
110
- y: 100,
111
- text: 'node1',
112
- },
113
- {
114
- id: 'node2',
115
- type: 'rect',
116
- x: 200,
117
- y: 200,
118
- text: 'node2',
119
- },
120
- {
121
- id: 'node3',
122
- type: 'ellipse',
123
- x: 300,
124
- y: 300,
125
- rx: 10,
126
- ry: 5,
127
- text: 'node3',
128
- },
129
- {
130
- id: 'node4',
131
- type: 'polygon',
132
- x: 400,
133
- y: 400,
134
- text: 'node4',
135
- },
136
- ],
137
- edges: [
138
- {
139
- id: 'edge1',
140
- type: 'line',
141
- sourceNodeId: 'node1',
142
- targetNodeId: 'node2',
143
- },
144
- {
145
- id: 'edge2',
146
- type: 'polyline',
147
- sourceNodeId: 'node2',
148
- targetNodeId: 'node3',
149
- },
150
- {
151
- id: 'edge3',
152
- type: 'bezier',
153
- sourceNodeId: 'node2',
154
- targetNodeId: 'node4',
155
- },
156
- ],
157
- }
158
-
159
- describe('operations on node/edge model ', () => {
160
- const dom = document.createElement('div')
161
- dom.id = 'main-graph'
162
- document.body.appendChild(dom)
163
- const lf = new LogicFlow({
164
- container: dom,
165
- width: 1000,
166
- height: 1000,
167
- keyboard: {
168
- enabled: true,
169
- },
170
- allowRotation: true,
171
- metaKeyMultipleSelected: true,
172
- grid: {
173
- size: 10,
174
- type: 'dot',
175
- },
176
- snapline: true,
177
- guards: {
178
- beforeClone: (data: any) => !['node1'].includes(data.id),
179
- beforeDelete: (data: any) => !['node1', 'edge1'].includes(data.id),
180
- },
181
- })
182
-
183
- test('render', () => {
184
- lf.render(rawData)
185
- expect(lf.graphModel.nodes.length).toBe(4)
186
- expect(lf.graphModel.edges.length).toBe(3)
187
- })
188
-
189
- test('set default edge type', () => {
190
- lf.setDefaultEdgeType('line')
191
- expect(lf.graphModel.edgeType).toBe('line')
192
- })
193
-
194
- test('delete elements with guards', () => {
195
- lf.render(rawData)
196
- expect(lf.deleteElement('node1')).toBeFalsy()
197
- expect(lf.deleteElement('node2')).toBeTruthy()
198
- expect(lf.deleteElement('node5')).toBeFalsy()
199
-
200
- expect(lf.graphModel.nodes.length).toBe(3)
201
- })
202
-
203
- test('add elements', () => {
204
- lf.render(rawData)
205
- lf.addElements({
206
- nodes: [
207
- {
208
- id: 'node_1_1',
209
- type: 'rect',
210
- x: 100,
211
- y: 100,
212
- },
213
- {
214
- id: 'node_2_1',
215
- type: 'rect',
216
- x: 200,
217
- y: 300,
218
- },
219
- ],
220
- edges: [
221
- {
222
- id: 'edge_3_1',
223
- type: 'polyline',
224
- sourceNodeId: 'node_1_1',
225
- targetNodeId: 'node_2_1',
226
- },
227
- ],
228
- })
229
- expect(lf.graphModel.nodes.length).toBe(6)
230
- expect(lf.graphModel.edges.length).toBe(4)
231
- })
232
-
233
- test('add node', () => {
234
- lf.render(rawData)
235
- lf.addNode({
236
- id: 'node5',
237
- type: 'text',
238
- x: 100,
239
- y: 100,
240
- text: 'node5',
241
- })
242
- expect(lf.graphModel.nodes.length).toBe(5)
243
- lf.updateText('node5', 'node5_1')
244
- lf.updateText('edge1', 'edge1')
245
- expect(lf.getNodeModelById('node5').text.value).toBe('node5_1')
246
- expect(lf.getEdgeModelById('edge1').text.value).toBe('edge1')
247
- })
248
-
249
- test('change node id', () => {
250
- lf.render(rawData)
251
- expect(lf.changeNodeId('node1', 'node1_1')).toBe('node1_1')
252
- expect(lf.changeNodeId('node1_1', 'node2')).toBeFalsy()
253
- expect(lf.changeNodeId('node1_1_1', 'node1_1_2')).toBeFalsy()
254
- })
255
-
256
- test('clone node with guards', () => {
257
- lf.render(rawData)
258
- expect(lf.cloneNode('node1')).toBeFalsy()
259
- expect(lf.cloneNode('node2')).toBeTruthy()
260
- expect(lf.graphModel.nodes.length).toBe(5)
261
- })
262
-
263
- test('get data by id', () => {
264
- lf.render(rawData)
265
- expect(lf.getDataById('node1')).toBeDefined()
266
- expect(lf.getDataById('edge1')).toBeDefined()
267
- })
268
-
269
- test('get node data by id', () => {
270
- lf.render(rawData)
271
- expect(lf.getNodeDataById('node1')).toBeDefined()
272
- expect(lf.getNodeDataById('node6')).toBeUndefined()
273
- })
274
-
275
- test('get edge data by id', () => {
276
- lf.render(rawData)
277
- expect(lf.getEdgeDataById('edge1')).toBeDefined()
278
- expect(lf.getEdgeDataById('edge4')).toBeUndefined()
279
- })
280
-
281
- test('add edge', () => {
282
- lf.render(rawData)
283
- lf.addEdge({
284
- id: 'edge4',
285
- type: 'polyline',
286
- sourceNodeId: 'node1',
287
- targetNodeId: 'node2',
288
- })
289
- expect(lf.graphModel.edges.length).toBe(4)
290
- })
291
-
292
- test('delete edge with guards', () => {
293
- lf.render(rawData)
294
- expect(lf.deleteEdge('edge1')).toBeFalsy()
295
- expect(lf.deleteEdge('edge2')).toBeTruthy()
296
- expect(lf.graphModel.edges.length).toBe(2)
297
- })
298
-
299
- test('delete edge by nodeId', () => {
300
- lf.render({
301
- nodes: [
302
- {
303
- id: 'node1',
304
- type: 'rect',
305
- x: 100,
306
- y: 100,
307
- text: 'node1',
308
- },
309
- {
310
- id: 'node2',
311
- type: 'rect',
312
- x: 200,
313
- y: 200,
314
- text: 'node2',
315
- },
316
- {
317
- id: 'node3',
318
- type: 'rect',
319
- x: 300,
320
- y: 300,
321
- text: 'node3',
322
- },
323
- {
324
- id: 'node4',
325
- type: 'diamond',
326
- x: 400,
327
- y: 400,
328
- text: 'node4',
329
- },
330
- {
331
- id: 'node5',
332
- type: 'diamond',
333
- x: 500,
334
- y: 500,
335
- text: 'node5',
336
- },
337
- ],
338
- edges: [
339
- {
340
- id: 'edge1',
341
- type: 'polyline',
342
- sourceNodeId: 'node1',
343
- targetNodeId: 'node2',
344
- },
345
- {
346
- id: 'edge2',
347
- type: 'polyline',
348
- sourceNodeId: 'node2',
349
- targetNodeId: 'node3',
350
- },
351
- {
352
- id: 'edge3',
353
- type: 'polyline',
354
- sourceNodeId: 'node2',
355
- targetNodeId: 'node4',
356
- },
357
- {
358
- id: 'edge4',
359
- type: 'polyline',
360
- sourceNodeId: 'node2',
361
- targetNodeId: 'node5',
362
- },
363
- ],
364
- })
365
-
366
- lf.deleteEdgeByNodeId({
367
- targetNodeId: 'node3',
368
- })
369
- expect(lf.graphModel.edges.length).toBe(3)
370
- lf.deleteEdgeByNodeId({
371
- sourceNodeId: 'node1',
372
- targetNodeId: 'node2',
373
- })
374
- expect(lf.graphModel.edges.length).toBe(2)
375
- lf.deleteEdgeByNodeId({
376
- sourceNodeId: 'node2',
377
- })
378
- expect(lf.graphModel.edges.length).toBe(0)
379
- })
380
-
381
- test('change node type', () => {
382
- lf.render(rawData)
383
- lf.changeNodeType('node1', 'circle')
384
- expect(lf.getNodeModelById('node1').type).toBe('circle')
385
- })
386
-
387
- test('change edge type', () => {
388
- lf.render(rawData)
389
- lf.changeEdgeType('edge1', 'line')
390
- expect(lf.getEdgeModelById('edge1').type).toBe('line')
391
- })
392
-
393
- test('get incoming and outgoing edges of node', () => {
394
- lf.render(rawData)
395
- expect(lf.getNodeEdges('node2').length).toBe(3)
396
- })
397
-
398
- test('get incoming edges', () => {
399
- lf.render(rawData)
400
- expect(lf.getNodeIncomingEdge('node2').length).toBe(1)
401
- })
402
-
403
- test('get outgoing edges', () => {
404
- lf.renderRawData(rawData)
405
- expect(lf.getNodeOutgoingEdge('node2').length).toBe(2)
406
- })
407
-
408
- test('get incoming node', () => {
409
- lf.renderRawData(rawData)
410
- expect(lf.getNodeIncomingNode('node2').length).toBe(1)
411
- })
412
-
413
- test('get outgoing node', () => {
414
- lf.renderRawData(rawData)
415
- expect(lf.getNodeOutgoingNode('node2').length).toBe(2)
416
- })
417
-
418
- test('get edge model by filter', () => {
419
- lf.render(rawData)
420
- expect(
421
- lf.getEdgeModels({
422
- sourceNodeId: 'node2',
423
- }).length,
424
- ).toBe(2)
425
-
426
- expect(
427
- lf.getEdgeModels({
428
- targetNodeId: 'node2',
429
- }).length,
430
- ).toBe(1)
431
-
432
- expect(
433
- lf.getEdgeModels({
434
- sourceNodeId: 'node2',
435
- targetNodeId: 'node3',
436
- }).length,
437
- ).toBe(1)
438
- })
439
-
440
- test('get elements in certain area', () => {
441
- lf.render(rawData)
442
- expect(lf.getAreaElement([0, 0], [1000, 1000]).length).toBe(7)
443
- })
444
-
445
- test('set properties', () => {
446
- lf.renderRawData(rawData)
447
- lf.setProperties('node1', {
448
- a: {
449
- b: undefined,
450
- c: [],
451
- d: {
452
- e: 1,
453
- f: null,
454
- },
455
- },
456
- })
457
- expect((lf.getProperties('node1') as any).a).toEqual({
458
- b: undefined,
459
- c: [],
460
- d: {
461
- e: 1,
462
- f: null,
463
- },
464
- })
465
- })
466
-
467
- test('delete properties', () => {
468
- lf.renderRawData(rawData)
469
- lf.deleteProperty('node1', 'a')
470
- expect(lf.getNodeModelById('node1').properties.a).toBeUndefined()
471
- })
472
-
473
- test('select and to front in overlapMode 0', () => {
474
- lf.render(rawData)
475
- lf.selectElementById('node1')
476
- lf.selectElementById('node2', true)
477
- const selectElements = lf.getSelectElements()
478
- expect(selectElements.nodes.length).toBe(2)
479
- expect(selectElements.nodes[0].id).toBe('node1')
480
- expect(lf.getNodeModelById('node1').zIndex).toBe(9999)
481
- lf.clearSelectElements()
482
- expect(lf.getNodeModelById('node1').zIndex).toBe(1)
483
- })
484
-
485
- test('to front in overlapMode 0', () => {
486
- lf.render(rawData)
487
- lf.toFront('node1')
488
- expect(lf.getNodeModelById('node1').zIndex).toBe(9999)
489
- })
490
-
491
- test('get graph data', () => {
492
- lf.render(rawData)
493
- const graphData = lf.getGraphData()
494
- expect(lf.getGraphData()).toBeDefined()
495
- expect(graphData.nodes.length).toBe(4)
496
- expect(graphData.edges.length).toBe(3)
497
- })
498
-
499
- test('clear graph data', () => {
500
- lf.render(rawData)
501
- lf.clearData()
502
- expect(lf.getGraphData()).toEqual({
503
- nodes: [],
504
- edges: [],
505
- })
506
- })
507
- })
508
-
509
- describe('transform', () => {
510
- const resize = jest.fn()
511
- const dom = document.createElement('div')
512
- dom.id = 'main-graph'
513
- document.body.appendChild(dom)
514
- const lf = new LogicFlow({
515
- container: dom,
516
- stopScrollGraph: true,
517
- stopZoomGraph: true,
518
- metaKeyMultipleSelected: true,
519
- width: 1000,
520
- height: 1000,
521
- overlapMode: 1,
522
- })
523
- lf.graphModel.resize = resize
524
-
525
- test('get transform information', () => {
526
- expect(lf.getTransform()).toEqual({
527
- SCALE_X: 1,
528
- SCALE_Y: 1,
529
- TRANSLATE_X: 0,
530
- TRANSLATE_Y: 0,
531
- })
532
- })
533
-
534
- test('resize', () => {
535
- lf.resize(100, 100)
536
- expect(resize).toBeCalled()
537
- setTimeout(() => {
538
- expect(lf.graphModel.width).toBe(100)
539
- expect(lf.graphModel.height).toBe(100)
540
- })
541
- })
542
-
543
- test('zoom', () => {
544
- lf.zoom(0.5)
545
- expect(lf.graphModel.transformModel.SCALE_X).toBe(0.5)
546
- expect(lf.graphModel.transformModel.SCALE_Y).toBe(0.5)
547
- lf.resetZoom()
548
- expect(lf.graphModel.transformModel.SCALE_X).toBe(1)
549
- expect(lf.graphModel.transformModel.SCALE_Y).toBe(1)
550
- })
551
-
552
- test('translate', () => {
553
- lf.translate(100, 100)
554
- expect(lf.graphModel.transformModel.TRANSLATE_X).toBe(100)
555
- expect(lf.graphModel.transformModel.TRANSLATE_Y).toBe(100)
556
- lf.resetTranslate()
557
- expect(lf.graphModel.transformModel.TRANSLATE_X).toBe(0)
558
- expect(lf.graphModel.transformModel.TRANSLATE_Y).toBe(0)
559
- })
560
-
561
- test('select and to front in overlapMode 1', () => {
562
- lf.render(rawData)
563
- lf.selectElementById('node1')
564
- expect(lf.getNodeModelById('node1').zIndex).toBe(1008)
565
- lf.clearSelectElements()
566
- expect(lf.getNodeModelById('node1').zIndex).toBe(1008)
567
- })
568
-
569
- test('to front in overlapMode 1', () => {
570
- lf.render(rawData)
571
- lf.toFront('node1')
572
- expect(lf.getNodeModelById('node1').zIndex).toBe(1016)
573
- })
574
- })
575
- })
@@ -1,87 +0,0 @@
1
- import type { NodeConfig, TextConfig } from '../../src/index'
2
- import { LogicFlow } from '../../src/index'
3
-
4
- type NodeConfigTextObj = NodeConfig & { text: TextConfig }
5
- describe('graphmodel', () => {
6
- const dom = document.createElement('div')
7
- dom.id = 'main-graph'
8
- document.body.appendChild(dom)
9
- const lf = new LogicFlow({
10
- container: dom,
11
- width: 1000,
12
- height: 1000,
13
- keyboard: {
14
- enabled: true,
15
- },
16
- allowRotation: true,
17
- metaKeyMultipleSelected: true,
18
- grid: true,
19
- snapline: true,
20
- })
21
-
22
- // 将node节点位置进行grid修正,同时处理node内文字的偏移量,返回一个位置修正过的复制节点NodeModel
23
- test('getModelAfterSnapToGrid', () => {
24
- const rawData = {
25
- nodes: [
26
- {
27
- id: 'node1',
28
- type: 'rect',
29
- x: 111,
30
- y: 123,
31
- text: {
32
- x: 32,
33
- y: 19,
34
- value: '文本1',
35
- },
36
- },
37
- ],
38
- }
39
- lf.render(rawData)
40
-
41
- const originNode = lf.getDataById('node1') as NodeConfigTextObj
42
-
43
- // grid=true 默认 gridSize=20
44
- const newNode = lf.graphModel.getModelAfterSnapToGrid(
45
- originNode,
46
- ) as NodeConfigTextObj
47
- expect(originNode.x - originNode.text.x).toEqual(newNode.x - newNode.text.x)
48
- expect(originNode.y - originNode.text.y).toEqual(newNode.y - newNode.text.y)
49
- expect(originNode.text.value).toEqual(newNode.text.value)
50
-
51
- lf.graphModel.gridSize = 40
52
- const newNode1 = lf.graphModel.getModelAfterSnapToGrid(
53
- originNode,
54
- ) as NodeConfigTextObj
55
- expect(originNode.x - originNode.text.x).toEqual(
56
- newNode1.x - newNode1.text.x,
57
- )
58
- expect(originNode.y - originNode.text.y).toEqual(
59
- newNode1.y - newNode1.text.y,
60
- )
61
- expect(originNode.text.value).toEqual(newNode1.text.value)
62
-
63
- lf.graphModel.gridSize = 1
64
- const newNode2 = lf.graphModel.getModelAfterSnapToGrid(
65
- originNode,
66
- ) as NodeConfigTextObj
67
- expect(originNode.x - originNode.text.x).toEqual(
68
- newNode2.x - newNode2.text.x,
69
- )
70
- expect(originNode.y - originNode.text.y).toEqual(
71
- newNode2.y - newNode2.text.y,
72
- )
73
- expect(originNode.text.value).toEqual(newNode2.text.value)
74
-
75
- lf.graphModel.gridSize = 17
76
- const newNode3 = lf.graphModel.getModelAfterSnapToGrid(
77
- originNode,
78
- ) as NodeConfigTextObj
79
- expect(originNode.x - originNode.text.x).toEqual(
80
- newNode3.x - newNode3.text.x,
81
- )
82
- expect(originNode.y - originNode.text.y).toEqual(
83
- newNode3.y - newNode3.text.y,
84
- )
85
- expect(originNode.text.value).toEqual(newNode3.text.value)
86
- })
87
- })
@@ -1,48 +0,0 @@
1
- import { formatData } from '../../src/util/compatible'
2
-
3
- describe('util/compatible', () => {
4
- test('formatData', () => {
5
- const data = {
6
- nodes: [
7
- {
8
- id: 'node1',
9
- x: 100,
10
- y: 100,
11
- },
12
- ],
13
- edges: [
14
- {
15
- id: 'edge1',
16
- source: 'node1',
17
- target: 'node2',
18
- },
19
- ],
20
- a: undefined,
21
- b: {
22
- c: null,
23
- d: [],
24
- },
25
- }
26
- expect(formatData(data)).toEqual({
27
- nodes: [
28
- {
29
- id: 'node1',
30
- x: 100,
31
- y: 100,
32
- },
33
- ],
34
- edges: [
35
- {
36
- id: 'edge1',
37
- source: 'node1',
38
- target: 'node2',
39
- },
40
- ],
41
- a: undefined,
42
- b: {
43
- c: null,
44
- d: [],
45
- },
46
- })
47
- })
48
- })