@logicflow/core 2.2.0 → 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 (236) hide show
  1. package/dist/index.css +3 -2
  2. package/dist/index.min.js +1 -1
  3. package/dist/index.min.js.map +1 -1
  4. package/es/LogicFlow.d.ts +9 -0
  5. package/es/LogicFlow.js +0 -1
  6. package/es/constant/index.d.ts +1 -1
  7. package/es/constant/index.js +1 -1
  8. package/es/constant/theme.d.ts +136 -0
  9. package/es/constant/theme.js +680 -0
  10. package/es/index.css +3 -2
  11. package/es/model/GraphModel.d.ts +10 -2
  12. package/es/model/GraphModel.js +48 -14
  13. package/es/model/TransformModel.js +9 -9
  14. package/es/model/edge/BaseEdgeModel.js +7 -2
  15. package/es/model/edge/PolylineEdgeModel.d.ts +7 -0
  16. package/es/model/edge/PolylineEdgeModel.js +136 -7
  17. package/es/model/node/BaseNodeModel.d.ts +12 -1
  18. package/es/model/node/BaseNodeModel.js +9 -2
  19. package/es/model/node/HtmlNodeModel.d.ts +12 -0
  20. package/es/model/node/HtmlNodeModel.js +19 -0
  21. package/es/model/node/PolygonNodeModel.js +3 -3
  22. package/es/options.d.ts +4 -2
  23. package/es/style/index.css +3 -2
  24. package/es/style/index.less +3 -2
  25. package/es/style/raw.d.ts +1 -1
  26. package/es/style/raw.js +1 -1
  27. package/es/tool/MultipleSelectTool.js +10 -5
  28. package/es/util/drag.js +0 -1
  29. package/es/util/edge.d.ts +40 -1
  30. package/es/util/edge.js +43 -9
  31. package/es/util/geometry.d.ts +8 -0
  32. package/es/util/geometry.js +79 -0
  33. package/es/util/theme.d.ts +2 -65
  34. package/es/util/theme.js +4 -281
  35. package/es/view/Anchor.d.ts +1 -0
  36. package/es/view/Anchor.js +24 -21
  37. package/es/view/Control.d.ts +5 -0
  38. package/es/view/Control.js +44 -57
  39. package/es/view/edge/BaseEdge.js +9 -0
  40. package/es/view/edge/PolylineEdge.js +13 -2
  41. package/es/view/node/BaseNode.d.ts +1 -0
  42. package/es/view/node/BaseNode.js +23 -11
  43. package/es/view/node/HtmlNode.js +2 -4
  44. package/es/view/overlay/CanvasOverlay.js +5 -2
  45. package/es/view/overlay/Grid.d.ts +12 -1
  46. package/es/view/overlay/Grid.js +85 -23
  47. package/es/view/overlay/OutlineOverlay.d.ts +1 -0
  48. package/es/view/overlay/OutlineOverlay.js +18 -17
  49. package/es/view/overlay/gridConfig.d.ts +46 -0
  50. package/es/view/overlay/gridConfig.js +99 -0
  51. package/es/view/shape/Polygon.d.ts +0 -7
  52. package/es/view/shape/Polygon.js +12 -43
  53. package/lib/LogicFlow.d.ts +9 -0
  54. package/lib/LogicFlow.js +0 -1
  55. package/lib/constant/index.d.ts +1 -1
  56. package/lib/constant/index.js +16 -2
  57. package/lib/constant/theme.d.ts +136 -0
  58. package/lib/constant/theme.js +683 -0
  59. package/lib/index.css +3 -2
  60. package/lib/model/GraphModel.d.ts +10 -2
  61. package/lib/model/GraphModel.js +49 -15
  62. package/lib/model/TransformModel.js +9 -9
  63. package/lib/model/edge/BaseEdgeModel.js +7 -2
  64. package/lib/model/edge/PolylineEdgeModel.d.ts +7 -0
  65. package/lib/model/edge/PolylineEdgeModel.js +136 -7
  66. package/lib/model/node/BaseNodeModel.d.ts +12 -1
  67. package/lib/model/node/BaseNodeModel.js +9 -2
  68. package/lib/model/node/HtmlNodeModel.d.ts +12 -0
  69. package/lib/model/node/HtmlNodeModel.js +19 -0
  70. package/lib/model/node/PolygonNodeModel.js +3 -3
  71. package/lib/options.d.ts +4 -2
  72. package/lib/style/index.css +3 -2
  73. package/lib/style/index.less +3 -2
  74. package/lib/style/raw.d.ts +1 -1
  75. package/lib/style/raw.js +1 -1
  76. package/lib/tool/MultipleSelectTool.js +10 -5
  77. package/lib/util/drag.js +0 -1
  78. package/lib/util/edge.d.ts +40 -1
  79. package/lib/util/edge.js +43 -9
  80. package/lib/util/geometry.d.ts +8 -0
  81. package/lib/util/geometry.js +81 -1
  82. package/lib/util/theme.d.ts +2 -65
  83. package/lib/util/theme.js +15 -292
  84. package/lib/view/Anchor.d.ts +1 -0
  85. package/lib/view/Anchor.js +24 -21
  86. package/lib/view/Control.d.ts +5 -0
  87. package/lib/view/Control.js +44 -57
  88. package/lib/view/edge/BaseEdge.js +9 -0
  89. package/lib/view/edge/PolylineEdge.js +13 -2
  90. package/lib/view/node/BaseNode.d.ts +1 -0
  91. package/lib/view/node/BaseNode.js +22 -10
  92. package/lib/view/node/HtmlNode.js +1 -3
  93. package/lib/view/overlay/CanvasOverlay.js +5 -2
  94. package/lib/view/overlay/Grid.d.ts +12 -1
  95. package/lib/view/overlay/Grid.js +83 -21
  96. package/lib/view/overlay/OutlineOverlay.d.ts +1 -0
  97. package/lib/view/overlay/OutlineOverlay.js +18 -17
  98. package/lib/view/overlay/gridConfig.d.ts +46 -0
  99. package/lib/view/overlay/gridConfig.js +104 -0
  100. package/lib/view/shape/Polygon.d.ts +0 -7
  101. package/lib/view/shape/Polygon.js +13 -45
  102. package/package.json +6 -1
  103. package/.turbo/turbo-build$colon$dev.log +0 -10
  104. package/.turbo/turbo-build.log +0 -33
  105. package/CHANGELOG.md +0 -1849
  106. package/__tests__/algorithm/egde.test.ts +0 -131
  107. package/__tests__/algorithm/index.test.ts +0 -74
  108. package/__tests__/algorithm/outline.test.ts +0 -43
  109. package/__tests__/bugs/1545-spec.test.ts +0 -42
  110. package/__tests__/event/event.test.ts +0 -22
  111. package/__tests__/history/history.test.ts +0 -28
  112. package/__tests__/logicflow.test.ts +0 -575
  113. package/__tests__/model/graphmodel.test.ts +0 -87
  114. package/__tests__/util/compatible.test.ts +0 -48
  115. package/__tests__/util/edge.test.ts +0 -224
  116. package/__tests__/util/geometry.test.ts +0 -14
  117. package/__tests__/util/graph.test.ts +0 -16
  118. package/__tests__/util/matrix.test.ts +0 -41
  119. package/__tests__/util/node.test.ts +0 -68
  120. package/__tests__/util/sampling.test.ts +0 -12
  121. package/__tests__/util/vector.test.ts +0 -50
  122. package/__tests__/util/zIndex.test.ts +0 -10
  123. package/src/LogicFlow.tsx +0 -2008
  124. package/src/algorithm/edge.ts +0 -67
  125. package/src/algorithm/index.ts +0 -70
  126. package/src/algorithm/outline.ts +0 -77
  127. package/src/algorithm/rotate.ts +0 -55
  128. package/src/common/drag.ts +0 -219
  129. package/src/common/history.ts +0 -108
  130. package/src/common/index.ts +0 -6
  131. package/src/common/keyboard.ts +0 -108
  132. package/src/common/matrix.ts +0 -122
  133. package/src/common/vector.ts +0 -93
  134. package/src/constant/index.ts +0 -179
  135. package/src/event/event.md +0 -66
  136. package/src/event/eventArgs.ts +0 -643
  137. package/src/event/eventEmitter.ts +0 -156
  138. package/src/history/index.ts +0 -119
  139. package/src/index.less +0 -1
  140. package/src/index.ts +0 -26
  141. package/src/keyboard/index.ts +0 -112
  142. package/src/keyboard/shortcut.ts +0 -200
  143. package/src/model/BaseModel.ts +0 -250
  144. package/src/model/EditConfigModel.ts +0 -334
  145. package/src/model/GraphModel.ts +0 -1788
  146. package/src/model/NestedTransformModel.ts +0 -121
  147. package/src/model/SnaplineModel.ts +0 -256
  148. package/src/model/TransformModel.ts +0 -258
  149. package/src/model/edge/BaseEdgeModel.ts +0 -777
  150. package/src/model/edge/BezierEdgeModel.ts +0 -197
  151. package/src/model/edge/LineEdgeModel.ts +0 -36
  152. package/src/model/edge/PolylineEdgeModel.ts +0 -672
  153. package/src/model/edge/index.ts +0 -4
  154. package/src/model/index.ts +0 -9
  155. package/src/model/node/BaseNodeModel.ts +0 -949
  156. package/src/model/node/CircleNodeModel.ts +0 -91
  157. package/src/model/node/DiamondNodeModel.ts +0 -132
  158. package/src/model/node/EllipseNodeModel.ts +0 -98
  159. package/src/model/node/HtmlNodeModel.ts +0 -50
  160. package/src/model/node/PolygonNodeModel.ts +0 -150
  161. package/src/model/node/RectNodeModel.ts +0 -69
  162. package/src/model/node/TextNodeModel.ts +0 -54
  163. package/src/model/node/index.ts +0 -8
  164. package/src/options.ts +0 -145
  165. package/src/style/index.less +0 -261
  166. package/src/style/raw.ts +0 -220
  167. package/src/tool/MultipleSelectTool.tsx +0 -132
  168. package/src/tool/TextEditTool.tsx +0 -193
  169. package/src/tool/index.ts +0 -101
  170. package/src/typings.d.ts +0 -5
  171. package/src/util/animation.ts +0 -29
  172. package/src/util/browser.ts +0 -4
  173. package/src/util/compatible.ts +0 -15
  174. package/src/util/drag.ts +0 -220
  175. package/src/util/edge.ts +0 -1060
  176. package/src/util/geometry.ts +0 -55
  177. package/src/util/graph.ts +0 -46
  178. package/src/util/index.ts +0 -17
  179. package/src/util/matrix.ts +0 -129
  180. package/src/util/mobx.ts +0 -23
  181. package/src/util/node.ts +0 -543
  182. package/src/util/raf.ts +0 -28
  183. package/src/util/resize.ts +0 -606
  184. package/src/util/sampling.ts +0 -85
  185. package/src/util/theme.ts +0 -375
  186. package/src/util/uuid.ts +0 -26
  187. package/src/util/vector.ts +0 -93
  188. package/src/util/zIndex.ts +0 -6
  189. package/src/view/Anchor.tsx +0 -445
  190. package/src/view/Control.tsx +0 -512
  191. package/src/view/Graph.tsx +0 -141
  192. package/src/view/Rotate.tsx +0 -113
  193. package/src/view/behavior/dnd.ts +0 -162
  194. package/src/view/behavior/index.ts +0 -2
  195. package/src/view/behavior/snapline.ts +0 -16
  196. package/src/view/edge/AdjustPoint.tsx +0 -425
  197. package/src/view/edge/Arrow.tsx +0 -54
  198. package/src/view/edge/BaseEdge.tsx +0 -650
  199. package/src/view/edge/BezierEdge.tsx +0 -101
  200. package/src/view/edge/LineEdge.tsx +0 -81
  201. package/src/view/edge/PolylineEdge.tsx +0 -299
  202. package/src/view/edge/index.ts +0 -6
  203. package/src/view/index.ts +0 -8
  204. package/src/view/node/BaseNode.tsx +0 -571
  205. package/src/view/node/CircleNode.tsx +0 -21
  206. package/src/view/node/DiamondNode.tsx +0 -24
  207. package/src/view/node/EllipseNode.tsx +0 -22
  208. package/src/view/node/HtmlNode.tsx +0 -95
  209. package/src/view/node/PolygonNode.tsx +0 -28
  210. package/src/view/node/RectNode.tsx +0 -30
  211. package/src/view/node/TextNode.tsx +0 -39
  212. package/src/view/node/index.ts +0 -8
  213. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  214. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  215. package/src/view/overlay/CanvasOverlay.tsx +0 -288
  216. package/src/view/overlay/Grid.tsx +0 -162
  217. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  218. package/src/view/overlay/OutlineOverlay.tsx +0 -170
  219. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  220. package/src/view/overlay/ToolOverlay.tsx +0 -65
  221. package/src/view/overlay/getTransformHoc.tsx +0 -50
  222. package/src/view/overlay/index.ts +0 -8
  223. package/src/view/shape/Circle.tsx +0 -41
  224. package/src/view/shape/Ellipse.tsx +0 -42
  225. package/src/view/shape/Line.tsx +0 -39
  226. package/src/view/shape/Path.tsx +0 -22
  227. package/src/view/shape/Polygon.tsx +0 -91
  228. package/src/view/shape/Polyline.tsx +0 -31
  229. package/src/view/shape/Rect.tsx +0 -44
  230. package/src/view/shape/Text.tsx +0 -169
  231. package/src/view/shape/index.ts +0 -8
  232. package/src/view/text/BaseText.tsx +0 -134
  233. package/src/view/text/LineText.tsx +0 -168
  234. package/src/view/text/index.ts +0 -2
  235. package/stats.html +0 -4842
  236. package/tsconfig.json +0 -18
package/lib/util/theme.js CHANGED
@@ -1,289 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateTheme = exports.clearThemeMode = exports.removeThemeMode = exports.addThemeMode = exports.setupTheme = exports.gridModeMap = exports.defaultGrid = exports.colorfulGrid = exports.darkGrid = exports.backgroundModeMap = exports.defaultBackground = exports.colorfulBackground = exports.darkBackground = exports.themeModeMap = exports.colorfulMode = exports.darkMode = exports.radiusMode = exports.defaultTheme = void 0;
3
+ exports.updateTheme = exports.clearThemeMode = exports.removeThemeMode = exports.addThemeMode = exports.setupTheme = void 0;
4
4
  var lodash_es_1 = require("lodash-es");
5
- exports.defaultTheme = {
6
- baseNode: {
7
- fill: '#fff',
8
- stroke: '#000',
9
- strokeWidth: 2,
10
- },
11
- baseEdge: {
12
- stroke: '#000',
13
- strokeWidth: 2,
14
- },
15
- rect: {},
16
- circle: {},
17
- diamond: {},
18
- ellipse: {},
19
- polygon: {},
20
- text: {
21
- color: '#000',
22
- stroke: 'none',
23
- fontSize: 12,
24
- background: {
25
- fill: 'transparent',
26
- },
27
- },
28
- anchor: {
29
- stroke: '#000',
30
- fill: '#fff',
31
- r: 4,
32
- hover: {
33
- r: 10,
34
- fill: '#949494',
35
- fillOpacity: 0.5,
36
- stroke: '#949494',
37
- },
38
- },
39
- anchorLine: {
40
- stroke: '#000',
41
- strokeWidth: 2,
42
- strokeDasharray: '3,2',
43
- },
44
- nodeText: {
45
- color: '#000',
46
- overflowMode: 'default',
47
- fontSize: 12,
48
- lineHeight: 1.2,
49
- },
50
- edgeText: {
51
- textWidth: 100,
52
- overflowMode: 'default',
53
- fontSize: 12,
54
- background: {
55
- fill: '#fff',
56
- },
57
- },
58
- line: {},
59
- polyline: {},
60
- bezier: {
61
- fill: 'none',
62
- adjustLine: {
63
- stroke: '#949494',
64
- },
65
- adjustAnchor: {
66
- r: 4,
67
- fill: '#949494',
68
- fillOpacity: 1,
69
- stroke: '#949494',
70
- },
71
- },
72
- arrow: {
73
- offset: 10,
74
- verticalLength: 5, // 箭头垂直于边的距离
75
- },
76
- snapline: {
77
- stroke: '#949494',
78
- strokeWidth: 1,
79
- },
80
- edgeAdjust: {
81
- r: 4,
82
- fill: '#fff',
83
- stroke: '#949494',
84
- strokeWidth: 2,
85
- },
86
- outline: {
87
- fill: 'transparent',
88
- stroke: '#949494',
89
- strokeDasharray: '3,3',
90
- hover: {
91
- stroke: '#949494',
92
- },
93
- },
94
- edgeAnimation: {
95
- stroke: 'red',
96
- strokeDasharray: '10,10',
97
- strokeDashoffset: '100%',
98
- animationName: 'lf_animate_dash',
99
- animationDuration: '20s',
100
- animationIterationCount: 'infinite',
101
- animationTimingFunction: 'linear',
102
- animationDirection: 'normal',
103
- },
104
- rotateControl: {
105
- stroke: '#000',
106
- fill: '#fff',
107
- strokeWidth: 1.5,
108
- },
109
- resizeControl: {
110
- width: 7,
111
- height: 7,
112
- fill: '#fff',
113
- stroke: '#000',
114
- },
115
- resizeOutline: {
116
- fill: 'none',
117
- stroke: 'transparent', // 矩形默认不显示调整边框
118
- strokeWidth: 1,
119
- strokeDasharray: '3,3',
120
- },
121
- };
122
- exports.radiusMode = {
123
- rect: { radius: 8 },
124
- diamond: { radius: 8 },
125
- polygon: { radius: 8 },
126
- polyline: { radius: 8 },
127
- arrow: {
128
- strokeLinecap: 'round',
129
- strokeLinejoin: 'round',
130
- offset: 10,
131
- verticalLength: 5, // 箭头垂直于边的距离
132
- },
133
- snapline: {
134
- strokeLinecap: 'round',
135
- strokeLinejoin: 'round',
136
- stroke: '#949494',
137
- strokeWidth: 1,
138
- },
139
- outline: {
140
- radius: 8,
141
- fill: 'transparent',
142
- stroke: '#949494',
143
- strokeDasharray: '3,3',
144
- hover: {
145
- stroke: '#949494',
146
- },
147
- },
148
- resizeOutline: {
149
- radius: 8,
150
- fill: 'none',
151
- stroke: 'transparent', // 矩形默认不显示调整边框
152
- strokeWidth: 1,
153
- strokeDasharray: '3,3',
154
- },
155
- };
156
- exports.darkMode = {
157
- baseNode: {
158
- fill: '#23272e',
159
- stroke: '#fefeff',
160
- },
161
- baseEdge: {
162
- stroke: '#fefeff',
163
- },
164
- rect: { radius: 8 },
165
- diamond: { radius: 8 },
166
- polygon: { radius: 8 },
167
- polyline: { radius: 8 },
168
- nodeText: {
169
- color: '#fefeff',
170
- overflowMode: 'default',
171
- fontSize: 12,
172
- lineHeight: 1.2,
173
- },
174
- arrow: {
175
- strokeLinecap: 'round',
176
- strokeLinejoin: 'round',
177
- offset: 10,
178
- verticalLength: 5, // 箭头垂直于边的距离
179
- },
180
- snapline: {
181
- strokeLinecap: 'round',
182
- strokeLinejoin: 'round',
183
- stroke: '#949494',
184
- strokeWidth: 1,
185
- },
186
- outline: {
187
- radius: 8,
188
- fill: 'transparent',
189
- stroke: '#949494',
190
- strokeDasharray: '3,3',
191
- hover: {
192
- stroke: '#949494',
193
- },
194
- },
195
- resizeOutline: {
196
- radius: 8,
197
- fill: 'none',
198
- stroke: 'transparent', // 矩形默认不显示调整边框
199
- strokeWidth: 1,
200
- strokeDasharray: '3,3',
201
- },
202
- };
203
- exports.colorfulMode = {
204
- rect: { fill: '#72CBFF', stroke: '#3ABDF9', radius: 8 },
205
- circle: { fill: '#FFE075', stroke: '#F9CE3A', radius: 8 },
206
- ellipse: { fill: '#FFA8A8', stroke: '#FF6B66', radius: 8 },
207
- text: { fill: '#72CBFF', radius: 8 },
208
- diamond: { fill: '#96F7AF', stroke: '#40EF7E', radius: 8 },
209
- polygon: { fill: '#E0A8FF', stroke: '#C271FF', radius: 8 },
210
- polyline: { radius: 8 },
211
- arrow: {
212
- strokeLinecap: 'round',
213
- strokeLinejoin: 'round',
214
- offset: 10,
215
- verticalLength: 5, // 箭头垂直于边的距离
216
- },
217
- snapline: {
218
- strokeLinecap: 'round',
219
- strokeLinejoin: 'round',
220
- stroke: '#949494',
221
- strokeWidth: 1,
222
- },
223
- outline: {
224
- radius: 8,
225
- fill: 'transparent',
226
- stroke: '#949494',
227
- strokeDasharray: '3,3',
228
- hover: {
229
- stroke: '#949494',
230
- },
231
- },
232
- resizeOutline: {
233
- radius: 8,
234
- fill: 'none',
235
- stroke: 'transparent', // 矩形默认不显示调整边框
236
- strokeWidth: 1,
237
- strokeDasharray: '3,3',
238
- },
239
- };
240
- exports.themeModeMap = {
241
- colorful: exports.colorfulMode,
242
- dark: exports.darkMode,
243
- radius: exports.radiusMode,
244
- default: exports.defaultTheme,
245
- };
246
- // 不同主题的背景色
247
- exports.darkBackground = {
248
- background: '#23272e',
249
- };
250
- exports.colorfulBackground = {
251
- background: '#fefeff',
252
- };
253
- exports.defaultBackground = {
254
- background: '#ffffff',
255
- };
256
- exports.backgroundModeMap = {
257
- colorful: exports.colorfulBackground,
258
- dark: exports.darkBackground,
259
- radius: exports.defaultBackground,
260
- default: exports.defaultBackground,
261
- };
262
- // 不同主题的网格样式
263
- exports.darkGrid = {
264
- color: '#66676a',
265
- thickness: 1,
266
- };
267
- exports.colorfulGrid = {
268
- color: '#dadada',
269
- thickness: 1,
270
- };
271
- exports.defaultGrid = {
272
- color: '#acacac',
273
- thickness: 1,
274
- };
275
- exports.gridModeMap = {
276
- colorful: exports.colorfulGrid,
277
- dark: exports.darkGrid,
278
- radius: exports.defaultGrid,
279
- default: exports.defaultGrid,
280
- };
5
+ var theme_1 = require("../constant/theme");
281
6
  /* 主题(全局样式)相关工具方法 */
282
7
  var setupTheme = function (customTheme, themeMode) {
283
- var theme = (0, lodash_es_1.cloneDeep)(exports.defaultTheme);
284
- if (themeMode) {
285
- theme = (0, lodash_es_1.merge)(theme, exports.themeModeMap[themeMode]);
286
- }
8
+ var theme = (0, lodash_es_1.cloneDeep)(theme_1.themeModeMap[themeMode || 'default']) ||
9
+ (0, lodash_es_1.cloneDeep)(theme_1.themeModeMap.default);
287
10
  if (customTheme) {
288
11
  /**
289
12
  * 为了不让默认样式被覆盖,使用 merge 方法
@@ -318,31 +41,31 @@ var setupTheme = function (customTheme, themeMode) {
318
41
  };
319
42
  exports.setupTheme = setupTheme;
320
43
  var addThemeMode = function (themeMode, style) {
321
- if (exports.themeModeMap[themeMode]) {
44
+ if (theme_1.themeModeMap[themeMode]) {
322
45
  console.warn("theme mode ".concat(themeMode, " already exists"));
323
46
  return;
324
47
  }
325
- exports.themeModeMap[themeMode] = style;
326
- exports.backgroundModeMap[themeMode] = style.background || exports.defaultBackground;
327
- exports.gridModeMap[themeMode] = style.grid || exports.defaultGrid;
48
+ theme_1.themeModeMap[themeMode] = style;
49
+ theme_1.backgroundModeMap[themeMode] = style.background || theme_1.defaultBackground;
50
+ theme_1.gridModeMap[themeMode] = style.grid || theme_1.defaultGrid;
328
51
  };
329
52
  exports.addThemeMode = addThemeMode;
330
53
  var removeThemeMode = function (themeMode) {
331
- delete exports.themeModeMap[themeMode];
332
- delete exports.backgroundModeMap[themeMode];
333
- delete exports.gridModeMap[themeMode];
54
+ delete theme_1.themeModeMap[themeMode];
55
+ delete theme_1.backgroundModeMap[themeMode];
56
+ delete theme_1.gridModeMap[themeMode];
334
57
  };
335
58
  exports.removeThemeMode = removeThemeMode;
336
59
  var clearThemeMode = function () {
337
60
  var resetTheme = {
338
61
  colorful: {},
339
62
  dark: {},
340
- radius: {},
63
+ retro: {},
341
64
  default: {},
342
65
  };
343
- (0, lodash_es_1.assign)(exports.themeModeMap, resetTheme);
344
- (0, lodash_es_1.assign)(exports.backgroundModeMap, resetTheme);
345
- (0, lodash_es_1.assign)(exports.gridModeMap, resetTheme);
66
+ (0, lodash_es_1.assign)(theme_1.themeModeMap, resetTheme);
67
+ (0, lodash_es_1.assign)(theme_1.backgroundModeMap, resetTheme);
68
+ (0, lodash_es_1.assign)(theme_1.gridModeMap, resetTheme);
346
69
  };
347
70
  exports.clearThemeMode = clearThemeMode;
348
71
  /* 更新 theme 方法 */
@@ -40,6 +40,7 @@ declare class Anchor extends Component<IProps, IState> {
40
40
  };
41
41
  checkEnd: (event: PointerEvent | null | undefined) => import("../model").BaseEdgeModel<LogicFlow.PropertiesType> | null | undefined;
42
42
  moveAnchorEnd(endX: number, endY: number, event?: PointerEvent): void;
43
+ validateAndSetState(targetNode: BaseNodeModel, anchorId: string | undefined, targetAnchor: AnchorConfig, nodeModel: BaseNodeModel, anchorData: AnchorConfig): void;
43
44
  isShowLine(): boolean;
44
45
  render(): import("preact/compat").JSX.Element;
45
46
  }
@@ -250,8 +250,7 @@ var Anchor = /** @class */ (function (_super) {
250
250
  configurable: true
251
251
  });
252
252
  Anchor.prototype.moveAnchorEnd = function (endX, endY, event) {
253
- var _a, _b;
254
- var _c = this.props, graphModel = _c.graphModel, nodeModel = _c.nodeModel, anchorData = _c.anchorData;
253
+ var _a = this.props, graphModel = _a.graphModel, nodeModel = _a.nodeModel, anchorData = _a.anchorData;
255
254
  var info = (0, util_1.targetNodeInfo)({
256
255
  x: endX,
257
256
  y: endY,
@@ -267,25 +266,7 @@ var Anchor = /** @class */ (function (_super) {
267
266
  return;
268
267
  }
269
268
  this.preTargetNode = targetNode;
270
- // 支持节点的每个锚点单独设置是否可连接,因此规则key去nodeId + anchorId作为唯一值
271
- var targetInfoId = "".concat(nodeModel.id, "_").concat(targetNode.id, "_").concat(anchorId, "_").concat(anchorData.id);
272
- // 查看鼠标是否进入过target,若有检验结果,表示进入过, 就不重复计算了。
273
- if (!this.targetRuleResults.has(targetInfoId)) {
274
- var targetAnchor = info.anchor;
275
- var sourceRuleResult = nodeModel.isAllowConnectedAsSource(targetNode, anchorData, targetAnchor);
276
- var targetRuleResult = targetNode.isAllowConnectedAsTarget(nodeModel, anchorData, targetAnchor);
277
- this.sourceRuleResults.set(targetInfoId, (0, util_1.formatAnchorConnectValidateData)(sourceRuleResult));
278
- this.targetRuleResults.set(targetInfoId, (0, util_1.formatAnchorConnectValidateData)(targetRuleResult));
279
- }
280
- var isSourcePass = ((_a = this.sourceRuleResults.get(targetInfoId)) !== null && _a !== void 0 ? _a : {}).isAllPass;
281
- var isTargetPass = ((_b = this.targetRuleResults.get(targetInfoId)) !== null && _b !== void 0 ? _b : {}).isAllPass;
282
- // 实时提示出即将链接的锚点
283
- if (isSourcePass && isTargetPass) {
284
- targetNode.setElementState(constant_1.ElementState.ALLOW_CONNECT);
285
- }
286
- else {
287
- targetNode.setElementState(constant_1.ElementState.NOT_ALLOW_CONNECT);
288
- }
269
+ this.validateAndSetState(targetNode, anchorId, info.anchor, nodeModel, anchorData);
289
270
  // 人工触发进入目标节点事件,同步设置 hovered 以驱动锚点显隐和样式
290
271
  if (!targetNode.isHovered) {
291
272
  var nodeData = targetNode.getData();
@@ -314,6 +295,28 @@ var Anchor = /** @class */ (function (_super) {
314
295
  this.preTargetNode = undefined;
315
296
  }
316
297
  };
298
+ // 校验 source/target 连接规则并设置目标节点状态
299
+ Anchor.prototype.validateAndSetState = function (targetNode, anchorId, targetAnchor, nodeModel, anchorData) {
300
+ var _a, _b;
301
+ var targetInfoId = "".concat(nodeModel.id, "_").concat(targetNode.id, "_").concat(anchorId, "_").concat(anchorData.id);
302
+ if (!this.targetRuleResults.has(targetInfoId)) {
303
+ // 首次计算并缓存源/目标两侧的规则校验结果
304
+ var sourceRuleResult = nodeModel.isAllowConnectedAsSource(targetNode, anchorData, targetAnchor);
305
+ var targetRuleResult = targetNode.isAllowConnectedAsTarget(nodeModel, anchorData, targetAnchor);
306
+ this.sourceRuleResults.set(targetInfoId, (0, util_1.formatAnchorConnectValidateData)(sourceRuleResult));
307
+ this.targetRuleResults.set(targetInfoId, (0, util_1.formatAnchorConnectValidateData)(targetRuleResult));
308
+ }
309
+ // 读取缓存的校验结果
310
+ var isSourcePass = ((_a = this.sourceRuleResults.get(targetInfoId)) !== null && _a !== void 0 ? _a : {}).isAllPass;
311
+ var isTargetPass = ((_b = this.targetRuleResults.get(targetInfoId)) !== null && _b !== void 0 ? _b : {}).isAllPass;
312
+ // 两侧都通过则允许连接,否则标记为不允许连接
313
+ if (isSourcePass && isTargetPass) {
314
+ targetNode.setElementState(constant_1.ElementState.ALLOW_CONNECT);
315
+ }
316
+ else {
317
+ targetNode.setElementState(constant_1.ElementState.NOT_ALLOW_CONNECT);
318
+ }
319
+ };
317
320
  Anchor.prototype.isShowLine = function () {
318
321
  var _a = this.state, startX = _a.startX, startY = _a.startY, endX = _a.endX, endY = _a.endY;
319
322
  var v = (0, util_1.distance)(startX, startY, endX, endY);
@@ -50,6 +50,11 @@ export declare class ResizeControl extends Component<IResizeControlProps, IResiz
50
50
  onDragStart: () => void;
51
51
  onDragging: ({ deltaX, deltaY }: IDragParams) => void;
52
52
  onDragEnd: () => void;
53
+ onPointerDown: (e: PointerEvent) => void;
54
+ getViewPosition(direction: any, x: any, y: any): {
55
+ x: any;
56
+ y: any;
57
+ };
53
58
  render(): h.JSX.Element;
54
59
  }
55
60
  interface IResizeControlGroupProps {
@@ -246,61 +246,6 @@ var ResizeControl = /** @class */ (function (_super) {
246
246
  _this.dragHandler.cancelDrag();
247
247
  },
248
248
  });
249
- // 1. 计算当前 Control 的一些信息,
250
- // const {
251
- // r, // circle
252
- // rx, // ellipse/diamond
253
- // ry,
254
- // width, // rect/html
255
- // height,
256
- // PCTResizeInfo,
257
- //
258
- // minWidth,
259
- // minHeight,
260
- // maxWidth,
261
- // maxHeight,
262
- // } = this.nodeModel
263
- // const isFreezeWidth = minWidth === maxWidth
264
- // const isFreezeHeight = minHeight === maxHeight
265
- //
266
- // const resizeInfo = {
267
- // width: r || rx || width,
268
- // height: r || ry || height,
269
- // deltaX,
270
- // deltaY,
271
- // PCTResizeInfo,
272
- // }
273
- //
274
- // const pct = r || (rx && ry) ? 1 / 2 : 1
275
- // const nextSize = this.recalcResizeInfo(
276
- // this.index,
277
- // resizeInfo,
278
- // pct,
279
- // isFreezeWidth,
280
- // isFreezeHeight,
281
- // )
282
- //
283
- // // 限制放大缩小的最大最小范围
284
- // if (
285
- // nextSize.width < minWidth ||
286
- // nextSize.width > maxWidth ||
287
- // nextSize.height < minHeight ||
288
- // nextSize.height > maxHeight
289
- // ) {
290
- // this.dragHandler.cancelDrag()
291
- // return
292
- // }
293
- // // 如果限制了宽高不变,对应的 x/y 不产生位移
294
- // nextSize.deltaX = isFreezeWidth ? 0 : nextSize.deltaX
295
- // nextSize.deltaY = isFreezeWidth ? 0 : nextSize.deltaY
296
- //
297
- // const preNodeData = this.nodeModel.getData()
298
- // const curNodeData = this.nodeModel.resize(nextSize)
299
- //
300
- // // 更新边
301
- // this.updateEdgePointByAnchors()
302
- // // 触发 resize 事件
303
- // this.triggerResizeEvent(preNodeData, curNodeData, deltaX, deltaY, this.index, this.nodeModel)
304
249
  };
305
250
  _this.onDragStart = function () {
306
251
  _this.graphModel.selectNodeById(_this.nodeModel.id);
@@ -328,6 +273,10 @@ var ResizeControl = /** @class */ (function (_super) {
328
273
  // 此时拿到的 anchors 是最新的
329
274
  _this.updateEdgePointByAnchors();
330
275
  };
276
+ _this.onPointerDown = function (e) {
277
+ e.stopPropagation();
278
+ _this.dragHandler.handleMouseDown(e);
279
+ };
331
280
  var index = props.index, model = props.model, graphModel = props.graphModel;
332
281
  _this.index = index;
333
282
  _this.nodeModel = model;
@@ -346,10 +295,46 @@ var ResizeControl = /** @class */ (function (_super) {
346
295
  document.removeEventListener('keydown', this.handleKeyDown);
347
296
  document.removeEventListener('keyup', this.handleKeyUp);
348
297
  };
298
+ ResizeControl.prototype.getViewPosition = function (direction, x, y) {
299
+ var _a = this.props.model.getResizeControlStyle(), _b = _a.width, width = _b === void 0 ? 8 : _b, _c = _a.height, height = _c === void 0 ? 8 : _c;
300
+ switch (direction) {
301
+ case 'nw':
302
+ return {
303
+ x: x - width / 2,
304
+ y: y - height / 2,
305
+ };
306
+ case 'ne': {
307
+ return {
308
+ x: x + width / 2,
309
+ y: y - height / 2,
310
+ };
311
+ }
312
+ case 'se': {
313
+ return {
314
+ x: x + width / 2,
315
+ y: y + height / 2,
316
+ };
317
+ }
318
+ case 'sw': {
319
+ return {
320
+ x: x - width / 2,
321
+ y: y + height / 2,
322
+ };
323
+ }
324
+ default: {
325
+ return {
326
+ x: x,
327
+ y: y,
328
+ };
329
+ }
330
+ }
331
+ };
349
332
  ResizeControl.prototype.render = function () {
350
333
  var _a = this.props, x = _a.x, y = _a.y, direction = _a.direction, model = _a.model;
351
334
  var _b = model.getResizeControlStyle(), width = _b.width, height = _b.height, restStyle = __rest(_b, ["width", "height"]);
352
- return ((0, jsx_runtime_1.jsxs)("g", { className: "lf-resize-control lf-resize-control-".concat(direction), children: [(0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({ className: "lf-resize-control-content", x: x, y: y, width: width !== null && width !== void 0 ? width : 7, height: height !== null && height !== void 0 ? height : 7 }, restStyle)), (0, jsx_runtime_1.jsx)(shape_1.Rect, { className: "lf-resize-control-content", x: x, y: y, width: 25, height: 25, fill: "transparent", stroke: "transparent", onPointerDown: this.dragHandler.handleMouseDown })] }));
335
+ // 为了让调整点在视觉上在调整外框的中间,因此在渲染时转换一下
336
+ var _c = this.getViewPosition(direction, x, y), viewX = _c.x, viewY = _c.y;
337
+ return ((0, jsx_runtime_1.jsxs)("g", { className: "lf-resize-control lf-resize-control-".concat(direction), children: [(0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({ className: "lf-resize-control-content", x: viewX, y: viewY, width: width !== null && width !== void 0 ? width : 7, height: height !== null && height !== void 0 ? height : 7 }, restStyle)), (0, jsx_runtime_1.jsx)(shape_1.Rect, { className: "lf-resize-control-content", x: viewX, y: viewY, width: width ? width + 5 : 25, height: width ? width + 5 : 25, fill: "transparent", stroke: "transparent", onPointerDown: this.onPointerDown })] }));
353
338
  };
354
339
  return ResizeControl;
355
340
  }(compat_1.Component));
@@ -394,7 +379,9 @@ var ResizeControlGroup = /** @class */ (function (_super) {
394
379
  var model = this.props.model;
395
380
  var x = model.x, y = model.y, width = model.width, height = model.height;
396
381
  var style = model.getResizeOutlineStyle();
397
- return (0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({}, style, { x: x, y: y, width: width, height: height }));
382
+ return ((0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({}, style, { "pointer-events": "none", x: x, y: y,
383
+ // TODO:宽高padding后续改成配置化的
384
+ width: width + 10, height: height + 10 })));
398
385
  };
399
386
  ResizeControlGroup.prototype.render = function () {
400
387
  return ((0, jsx_runtime_1.jsxs)("g", { className: "lf-resize-control-group", children: [this.getResizeOutline(), this.getResizeControl()] }));
@@ -68,6 +68,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
68
68
  exports.BaseEdge = void 0;
69
69
  var jsx_runtime_1 = require("preact/jsx-runtime");
70
70
  var compat_1 = require("preact/compat");
71
+ var lodash_es_1 = require("lodash-es");
71
72
  var shape_1 = require("../shape");
72
73
  var text_1 = require("../text");
73
74
  var constant_1 = require("../../constant");
@@ -233,6 +234,14 @@ var BaseEdge = /** @class */ (function (_super) {
233
234
  e: e,
234
235
  position: position,
235
236
  });
237
+ // 复制粘贴后会出现点击边时,边会失去焦点的问题,这里手动让边获焦以解决这个问题
238
+ var el_1 = e.currentTarget;
239
+ var rAF = !(0, lodash_es_1.isNil)(window) && (0, lodash_es_1.isFunction)(window.requestAnimationFrame)
240
+ ? window.requestAnimationFrame.bind(window)
241
+ : function (fn) { return setTimeout(fn, 0); };
242
+ rAF(function () {
243
+ el_1.focus();
244
+ });
236
245
  }
237
246
  var editConfigModel = graphModel.editConfigModel;
238
247
  graphModel.selectEdgeById(model.id, (0, util_1.isMultipleSelect)(e, editConfigModel));
@@ -51,6 +51,7 @@ var BaseEdge_1 = __importDefault(require("./BaseEdge"));
51
51
  var shape_1 = require("../shape");
52
52
  var constant_1 = require("../../constant");
53
53
  var util_1 = require("../../util");
54
+ var geometry_1 = require("../../util/geometry");
54
55
  var algorithm_1 = require("../../algorithm");
55
56
  var PolylineEdge = /** @class */ (function (_super) {
56
57
  __extends(PolylineEdge, _super);
@@ -131,12 +132,22 @@ var PolylineEdge = /** @class */ (function (_super) {
131
132
  * @example https://docs.logic-flow.cn/docs/#/zh/guide/basic/edge?id=%e5%9f%ba%e4%ba%8e-react-%e7%bb%84%e4%bb%b6%e8%87%aa%e5%ae%9a%e4%b9%89%e8%be%b9
132
133
  */
133
134
  PolylineEdge.prototype.getEdge = function () {
135
+ var _a, _b;
134
136
  var model = this.props.model;
135
- var points = model.points, isAnimation = model.isAnimation, arrowConfig = model.arrowConfig;
137
+ var points = model.points, isAnimation = model.isAnimation, arrowConfig = model.arrowConfig, properties = model.properties;
136
138
  var style = model.getEdgeStyle();
137
139
  var animationStyle = model.getEdgeAnimationStyle();
138
140
  var strokeDasharray = animationStyle.strokeDasharray, stroke = animationStyle.stroke, strokeDashoffset = animationStyle.strokeDashoffset, animationName = animationStyle.animationName, animationDuration = animationStyle.animationDuration, animationIterationCount = animationStyle.animationIterationCount, animationTimingFunction = animationStyle.animationTimingFunction, animationDirection = animationStyle.animationDirection;
139
- return ((0, jsx_runtime_1.jsx)(shape_1.Polyline, __assign({ points: points }, style, arrowConfig, (isAnimation
141
+ // 应用通用圆角:当存在样式半径时,为折线拐点生成圆角
142
+ var radius = ((_b = (_a = properties === null || properties === void 0 ? void 0 : properties.radius) !== null && _a !== void 0 ? _a : style === null || style === void 0 ? void 0 : style.radius) !== null && _b !== void 0 ? _b : 0);
143
+ var roundedPointsStr = (function () {
144
+ if (!radius || radius <= 0)
145
+ return points;
146
+ var list = (0, util_1.points2PointsList)(points);
147
+ var rounded = (0, geometry_1.generateRoundedCorners)(list, radius, false);
148
+ return rounded.map(function (p) { return "".concat(p.x, ",").concat(p.y); }).join(' ');
149
+ })();
150
+ return ((0, jsx_runtime_1.jsx)(shape_1.Polyline, __assign({ points: roundedPointsStr }, style, arrowConfig, (isAnimation
140
151
  ? {
141
152
  strokeDasharray: strokeDasharray,
142
153
  stroke: stroke,
@@ -20,6 +20,7 @@ export declare abstract class BaseNode<P extends IProps = IProps> extends Compon
20
20
  startTime?: number;
21
21
  modelDisposer: IReactionDisposer;
22
22
  longPressTimer?: number;
23
+ mouseDownPosition?: LogicFlow.Position;
23
24
  constructor(props: IProps);
24
25
  componentWillUnmount(): void;
25
26
  componentDidMount(): void;