@logicflow/core 2.0.0-beta.1 → 2.0.0-beta.3

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 (260) hide show
  1. package/.turbo/turbo-build$colon$dev.log +2 -2
  2. package/.turbo/turbo-build.log +8 -8
  3. package/dist/index.min.js +9 -3
  4. package/es/LogicFlow.d.ts +37 -20
  5. package/es/LogicFlow.js +27 -24
  6. package/es/LogicFlow.js.map +1 -1
  7. package/es/common/drag.d.ts +51 -0
  8. package/es/common/drag.js +145 -0
  9. package/es/common/drag.js.map +1 -0
  10. package/es/common/history.d.ts +28 -0
  11. package/es/common/history.js +92 -0
  12. package/es/common/history.js.map +1 -0
  13. package/es/common/index.d.ts +5 -0
  14. package/es/common/index.js +6 -0
  15. package/es/common/index.js.map +1 -0
  16. package/es/common/keyboard.d.ts +34 -0
  17. package/es/common/keyboard.js +80 -0
  18. package/es/common/keyboard.js.map +1 -0
  19. package/es/common/matrix.d.ts +30 -0
  20. package/es/common/matrix.js +155 -0
  21. package/es/common/matrix.js.map +1 -0
  22. package/es/common/vector.d.ts +23 -0
  23. package/es/common/vector.js +97 -0
  24. package/es/common/vector.js.map +1 -0
  25. package/es/event/eventEmitter.js +1 -1
  26. package/es/event/eventEmitter.js.map +1 -1
  27. package/es/index.d.ts +1 -1
  28. package/es/index.js +1 -1
  29. package/es/index.js.map +1 -1
  30. package/es/model/SnaplineModel.d.ts +2 -0
  31. package/es/model/edge/BaseEdgeModel.d.ts +5 -9
  32. package/es/model/edge/BaseEdgeModel.js +26 -23
  33. package/es/model/edge/BaseEdgeModel.js.map +1 -1
  34. package/es/model/edge/BezierEdgeModel.d.ts +2 -0
  35. package/es/model/edge/LineEdgeModel.d.ts +2 -0
  36. package/es/model/edge/PolylineEdgeModel.d.ts +2 -0
  37. package/es/model/node/BaseNodeModel.js +22 -21
  38. package/es/model/node/BaseNodeModel.js.map +1 -1
  39. package/es/model/node/CircleNodeModel.d.ts +2 -0
  40. package/es/model/node/CircleNodeModel.js +2 -2
  41. package/es/model/node/CircleNodeModel.js.map +1 -1
  42. package/es/model/node/DiamondNodeModel.d.ts +2 -0
  43. package/es/model/node/DiamondNodeModel.js +2 -1
  44. package/es/model/node/DiamondNodeModel.js.map +1 -1
  45. package/es/model/node/EllipseNodeModel.d.ts +2 -0
  46. package/es/model/node/EllipseNodeModel.js +2 -1
  47. package/es/model/node/EllipseNodeModel.js.map +1 -1
  48. package/es/model/node/HtmlNodeModel.d.ts +2 -2
  49. package/es/model/node/HtmlNodeModel.js.map +1 -1
  50. package/es/model/node/PolygonNodeModel.d.ts +2 -0
  51. package/es/model/node/PolygonNodeModel.js +2 -2
  52. package/es/model/node/PolygonNodeModel.js.map +1 -1
  53. package/es/model/node/RectNodeModel.d.ts +3 -0
  54. package/es/model/node/RectNodeModel.js +8 -2
  55. package/es/model/node/RectNodeModel.js.map +1 -1
  56. package/es/model/node/TextNodeModel.d.ts +4 -2
  57. package/es/options.d.ts +2 -2
  58. package/es/options.js +2 -11
  59. package/es/options.js.map +1 -1
  60. package/es/tool/tool.js.map +1 -1
  61. package/es/util/edge.d.ts +6 -0
  62. package/es/util/edge.js +15 -1
  63. package/es/util/edge.js.map +1 -1
  64. package/es/util/node.d.ts +6 -2
  65. package/es/util/node.js +22 -7
  66. package/es/util/node.js.map +1 -1
  67. package/es/view/Anchor.d.ts +1 -1
  68. package/es/view/Anchor.js +3 -3
  69. package/es/view/Anchor.js.map +1 -1
  70. package/es/view/Control.js +14 -2
  71. package/es/view/Control.js.map +1 -1
  72. package/es/view/Graph.d.ts +3 -0
  73. package/es/view/Graph.js +38 -3
  74. package/es/view/Graph.js.map +1 -1
  75. package/es/view/edge/AdjustPoint.js +3 -3
  76. package/es/view/edge/AdjustPoint.js.map +1 -1
  77. package/es/view/edge/BaseEdge.d.ts +2 -2
  78. package/es/view/edge/BaseEdge.js +5 -5
  79. package/es/view/node/BaseNode.d.ts +2 -2
  80. package/es/view/node/BaseNode.js +5 -5
  81. package/es/view/node/TextNode.js +1 -1
  82. package/es/view/node/TextNode.js.map +1 -1
  83. package/es/view/shape/Circle.d.ts +9 -1
  84. package/es/view/shape/Circle.js +5 -5
  85. package/es/view/shape/Circle.js.map +1 -1
  86. package/es/view/shape/Ellipse.d.ts +10 -1
  87. package/es/view/shape/Ellipse.js +5 -5
  88. package/es/view/shape/Ellipse.js.map +1 -1
  89. package/es/view/shape/Line.d.ts +14 -1
  90. package/es/view/shape/Line.js +5 -7
  91. package/es/view/shape/Line.js.map +1 -1
  92. package/es/view/shape/Path.d.ts +3 -2
  93. package/es/view/shape/Path.js +3 -3
  94. package/es/view/shape/Path.js.map +1 -1
  95. package/es/view/shape/Polygon.d.ts +5 -3
  96. package/es/view/shape/Polygon.js +6 -6
  97. package/es/view/shape/Polygon.js.map +1 -1
  98. package/es/view/shape/Polyline.d.ts +7 -1
  99. package/es/view/shape/Polyline.js +8 -6
  100. package/es/view/shape/Polyline.js.map +1 -1
  101. package/es/view/shape/Rect.d.ts +11 -13
  102. package/es/view/shape/Rect.js +6 -9
  103. package/es/view/shape/Rect.js.map +1 -1
  104. package/es/view/shape/Text.d.ts +19 -1
  105. package/es/view/shape/Text.js +28 -21
  106. package/es/view/shape/Text.js.map +1 -1
  107. package/es/view/text/BaseText.d.ts +12 -15
  108. package/es/view/text/BaseText.js +37 -27
  109. package/es/view/text/BaseText.js.map +1 -1
  110. package/es/view/text/LineText.d.ts +19 -7
  111. package/es/view/text/LineText.js +62 -54
  112. package/es/view/text/LineText.js.map +1 -1
  113. package/lib/LogicFlow.d.ts +37 -20
  114. package/lib/LogicFlow.js +26 -23
  115. package/lib/LogicFlow.js.map +1 -1
  116. package/lib/common/drag.d.ts +51 -0
  117. package/lib/common/drag.js +148 -0
  118. package/lib/common/drag.js.map +1 -0
  119. package/lib/common/history.d.ts +28 -0
  120. package/lib/common/history.js +95 -0
  121. package/lib/common/history.js.map +1 -0
  122. package/lib/common/index.d.ts +5 -0
  123. package/lib/common/index.js +22 -0
  124. package/lib/common/index.js.map +1 -0
  125. package/lib/common/keyboard.d.ts +34 -0
  126. package/lib/common/keyboard.js +86 -0
  127. package/lib/common/keyboard.js.map +1 -0
  128. package/lib/common/matrix.d.ts +30 -0
  129. package/lib/common/matrix.js +158 -0
  130. package/lib/common/matrix.js.map +1 -0
  131. package/lib/common/vector.d.ts +23 -0
  132. package/lib/common/vector.js +101 -0
  133. package/lib/common/vector.js.map +1 -0
  134. package/lib/event/eventEmitter.js +1 -1
  135. package/lib/event/eventEmitter.js.map +1 -1
  136. package/lib/index.d.ts +1 -1
  137. package/lib/index.js +2 -2
  138. package/lib/index.js.map +1 -1
  139. package/lib/model/SnaplineModel.d.ts +2 -0
  140. package/lib/model/edge/BaseEdgeModel.d.ts +5 -9
  141. package/lib/model/edge/BaseEdgeModel.js +25 -22
  142. package/lib/model/edge/BaseEdgeModel.js.map +1 -1
  143. package/lib/model/edge/BezierEdgeModel.d.ts +2 -0
  144. package/lib/model/edge/LineEdgeModel.d.ts +2 -0
  145. package/lib/model/edge/PolylineEdgeModel.d.ts +2 -0
  146. package/lib/model/node/BaseNodeModel.js +21 -20
  147. package/lib/model/node/BaseNodeModel.js.map +1 -1
  148. package/lib/model/node/CircleNodeModel.d.ts +2 -0
  149. package/lib/model/node/CircleNodeModel.js +2 -2
  150. package/lib/model/node/CircleNodeModel.js.map +1 -1
  151. package/lib/model/node/DiamondNodeModel.d.ts +2 -0
  152. package/lib/model/node/DiamondNodeModel.js +2 -1
  153. package/lib/model/node/DiamondNodeModel.js.map +1 -1
  154. package/lib/model/node/EllipseNodeModel.d.ts +2 -0
  155. package/lib/model/node/EllipseNodeModel.js +2 -1
  156. package/lib/model/node/EllipseNodeModel.js.map +1 -1
  157. package/lib/model/node/HtmlNodeModel.d.ts +2 -2
  158. package/lib/model/node/HtmlNodeModel.js.map +1 -1
  159. package/lib/model/node/PolygonNodeModel.d.ts +2 -0
  160. package/lib/model/node/PolygonNodeModel.js +2 -2
  161. package/lib/model/node/PolygonNodeModel.js.map +1 -1
  162. package/lib/model/node/RectNodeModel.d.ts +3 -0
  163. package/lib/model/node/RectNodeModel.js +8 -2
  164. package/lib/model/node/RectNodeModel.js.map +1 -1
  165. package/lib/model/node/TextNodeModel.d.ts +4 -2
  166. package/lib/options.d.ts +2 -2
  167. package/lib/options.js +2 -11
  168. package/lib/options.js.map +1 -1
  169. package/lib/tool/tool.js.map +1 -1
  170. package/lib/util/edge.d.ts +6 -0
  171. package/lib/util/edge.js +16 -1
  172. package/lib/util/edge.js.map +1 -1
  173. package/lib/util/node.d.ts +6 -2
  174. package/lib/util/node.js +24 -9
  175. package/lib/util/node.js.map +1 -1
  176. package/lib/view/Anchor.d.ts +1 -1
  177. package/lib/view/Anchor.js +2 -2
  178. package/lib/view/Anchor.js.map +1 -1
  179. package/lib/view/Control.js +14 -2
  180. package/lib/view/Control.js.map +1 -1
  181. package/lib/view/Graph.d.ts +3 -0
  182. package/lib/view/Graph.js +37 -2
  183. package/lib/view/Graph.js.map +1 -1
  184. package/lib/view/edge/AdjustPoint.js +2 -2
  185. package/lib/view/edge/AdjustPoint.js.map +1 -1
  186. package/lib/view/edge/BaseEdge.d.ts +2 -2
  187. package/lib/view/edge/BaseEdge.js +5 -5
  188. package/lib/view/node/BaseNode.d.ts +2 -2
  189. package/lib/view/node/BaseNode.js +5 -5
  190. package/lib/view/node/TextNode.js +1 -1
  191. package/lib/view/node/TextNode.js.map +1 -1
  192. package/lib/view/shape/Circle.d.ts +9 -1
  193. package/lib/view/shape/Circle.js +5 -5
  194. package/lib/view/shape/Circle.js.map +1 -1
  195. package/lib/view/shape/Ellipse.d.ts +10 -1
  196. package/lib/view/shape/Ellipse.js +5 -5
  197. package/lib/view/shape/Ellipse.js.map +1 -1
  198. package/lib/view/shape/Line.d.ts +14 -1
  199. package/lib/view/shape/Line.js +5 -7
  200. package/lib/view/shape/Line.js.map +1 -1
  201. package/lib/view/shape/Path.d.ts +3 -2
  202. package/lib/view/shape/Path.js +3 -3
  203. package/lib/view/shape/Path.js.map +1 -1
  204. package/lib/view/shape/Polygon.d.ts +5 -3
  205. package/lib/view/shape/Polygon.js +6 -6
  206. package/lib/view/shape/Polygon.js.map +1 -1
  207. package/lib/view/shape/Polyline.d.ts +7 -1
  208. package/lib/view/shape/Polyline.js +8 -6
  209. package/lib/view/shape/Polyline.js.map +1 -1
  210. package/lib/view/shape/Rect.d.ts +11 -13
  211. package/lib/view/shape/Rect.js +6 -9
  212. package/lib/view/shape/Rect.js.map +1 -1
  213. package/lib/view/shape/Text.d.ts +19 -1
  214. package/lib/view/shape/Text.js +29 -21
  215. package/lib/view/shape/Text.js.map +1 -1
  216. package/lib/view/text/BaseText.d.ts +12 -15
  217. package/lib/view/text/BaseText.js +40 -27
  218. package/lib/view/text/BaseText.js.map +1 -1
  219. package/lib/view/text/LineText.d.ts +19 -7
  220. package/lib/view/text/LineText.js +62 -57
  221. package/lib/view/text/LineText.js.map +1 -1
  222. package/package.json +2 -1
  223. package/src/LogicFlow.tsx +97 -55
  224. package/src/common/drag.ts +205 -0
  225. package/src/common/history.ts +108 -0
  226. package/src/common/index.ts +6 -0
  227. package/src/common/keyboard.ts +108 -0
  228. package/src/common/matrix.ts +122 -0
  229. package/src/common/vector.ts +93 -0
  230. package/src/event/eventEmitter.ts +1 -1
  231. package/src/index.ts +1 -1
  232. package/src/model/edge/BaseEdgeModel.ts +31 -21
  233. package/src/model/node/BaseNodeModel.ts +27 -19
  234. package/src/model/node/CircleNodeModel.ts +2 -2
  235. package/src/model/node/DiamondNodeModel.ts +2 -0
  236. package/src/model/node/EllipseNodeModel.ts +2 -0
  237. package/src/model/node/HtmlNodeModel.ts +2 -2
  238. package/src/model/node/PolygonNodeModel.ts +2 -2
  239. package/src/model/node/RectNodeModel.ts +9 -2
  240. package/src/options.ts +4 -13
  241. package/src/tool/tool.ts +1 -1
  242. package/src/util/edge.ts +26 -1
  243. package/src/util/node.ts +29 -8
  244. package/src/view/Anchor.tsx +4 -4
  245. package/src/view/Control.tsx +5 -2
  246. package/src/view/Graph.tsx +14 -2
  247. package/src/view/edge/AdjustPoint.tsx +3 -3
  248. package/src/view/edge/BaseEdge.tsx +7 -7
  249. package/src/view/node/BaseNode.tsx +7 -7
  250. package/src/view/node/TextNode.tsx +1 -1
  251. package/src/view/shape/Circle.tsx +21 -7
  252. package/src/view/shape/Ellipse.tsx +20 -6
  253. package/src/view/shape/Line.tsx +24 -9
  254. package/src/view/shape/Path.tsx +9 -6
  255. package/src/view/shape/Polygon.tsx +13 -10
  256. package/src/view/shape/Polyline.tsx +20 -8
  257. package/src/view/shape/Rect.tsx +19 -19
  258. package/src/view/shape/Text.tsx +64 -33
  259. package/src/view/text/BaseText.tsx +67 -41
  260. package/src/view/text/LineText.tsx +94 -80
@@ -1 +1 @@
1
- {"version":3,"file":"LineText.js","sourceRoot":"","sources":["../../../src/view/text/LineText.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LineText.js","sourceRoot":"","sources":["../../../src/view/text/LineText.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicflow/core",
3
- "version": "2.0.0-beta.1",
3
+ "version": "2.0.0-beta.3",
4
4
  "description": "LogicFlow, help you quickly create flowcharts",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -24,6 +24,7 @@
24
24
  "author": "Logicflow-Team",
25
25
  "license": "Apache-2.0",
26
26
  "dependencies": {
27
+ "lodash-es": "^4.17.21",
27
28
  "classnames": "^2.3.2",
28
29
  "mobx": "^5.15.7",
29
30
  "mobx-preact": "^3.0.0",
package/src/LogicFlow.tsx CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ComponentType, createElement as h, render } from 'preact/compat'
2
- import { cloneDeep, forEach } from 'lodash-es'
2
+ import { cloneDeep, forEach, indexOf } from 'lodash-es'
3
3
  import { observer } from '.'
4
4
  import { Options as LFOptions } from './options'
5
5
  import * as _Model from './model'
@@ -24,8 +24,9 @@ import History from './history'
24
24
  import { EventCallback, CallbackArgs, EventArgs } from './event/eventEmitter'
25
25
  import { ElementType, EventType, SegmentDirection } from './constant'
26
26
  import { initDefaultShortcut } from './keyboard/shortcut'
27
+
27
28
  import Extension = LogicFlow.Extension
28
- import RegisteredExtension = LogicFlow.RegisteredExtension
29
+ import ExtensionConfig = LogicFlow.ExtensionConfig
29
30
  import ExtensionConstructor = LogicFlow.ExtensionConstructor
30
31
  import GraphConfigData = LogicFlow.GraphConfigData
31
32
  import NodeConfig = LogicFlow.NodeConfig
@@ -38,11 +39,13 @@ import RegisterParam = LogicFlow.RegisterParam
38
39
  import GraphElements = LogicFlow.GraphElements
39
40
  import Position = LogicFlow.Position
40
41
  import PointTuple = LogicFlow.PointTuple
41
- import ExtensionRender = LogicFlow.ExtensionRender
42
+ import ExtensionRenderFunc = LogicFlow.ExtensionRenderFunc
42
43
  import RegisterElementFunc = LogicFlow.RegisterElementFunc
43
44
  import PropertiesType = LogicFlow.PropertiesType
44
45
  import BaseNodeModelCtor = LogicFlow.BaseNodeModelCtor
45
46
  import ClientPosition = LogicFlow.ClientPosition
47
+ import ExtensionDefinition = LogicFlow.ExtensionDefinition
48
+ import ExtensionType = LogicFlow.ExtensionType
46
49
 
47
50
  const pluginFlag = Symbol('plugin registered by Logicflow.use')
48
51
 
@@ -61,13 +64,13 @@ export class LogicFlow {
61
64
  tool: Tool
62
65
  snaplineModel?: SnaplineModel
63
66
 
64
- components: ExtensionRender[] = []
67
+ components: ExtensionRenderFunc[] = []
65
68
  // 个性配置的插件,覆盖全局配置的插件
66
- readonly plugins: ExtensionConstructor[]
69
+ readonly plugins: ExtensionType[]
67
70
  // 全局配置的插件,所有的LogicFlow示例都会使用
68
- static extensions: Map<string, RegisteredExtension> = new Map()
71
+ static extensions: Map<string, ExtensionConfig> = new Map()
69
72
  // 插件扩展方法
70
- extension: Record<string, Extension> = {}
73
+ extension: Record<string, Extension | ExtensionDefinition> = {}
71
74
 
72
75
  readonly width?: number // 只读:画布宽度
73
76
  readonly height?: number // 只读:画布高度
@@ -78,19 +81,23 @@ export class LogicFlow {
78
81
  * 包括 adapterIn 和 adapterOut 两个方法
79
82
  */
80
83
  // TODO: 如何让用户执行时定义下面方法参数和返回值的类型
81
- private adapterIn?: (data: unknown) => GraphData
82
- private adapterOut?: (data: GraphData, ...rest: any) => unknown;
84
+ adapterIn?: (data: unknown) => GraphData
85
+ adapterOut?: (data: GraphData, ...rest: any) => unknown;
83
86
 
84
87
  // 支持插件在 LogicFlow 实例上增加自定义方法
85
88
  [propName: string]: any
86
89
 
87
- private initContainer(container: HTMLElement | HTMLDivElement) {
90
+ private initContainer(
91
+ container: HTMLElement | HTMLDivElement,
92
+ width?: number,
93
+ height?: number,
94
+ ) {
88
95
  // TODO: 确认是否需要,后续是否只要返回 container 即可(下面方法是为了解决事件绑定问题的)
89
96
  // fix: destroy keyboard events while destroy LogicFlow.(#1110)
90
97
  const lfContainer = document.createElement('div')
91
98
  lfContainer.style.position = 'relative'
92
- lfContainer.style.width = '100%'
93
- lfContainer.style.height = '100%'
99
+ lfContainer.style.width = width ? `${width}px` : '100%'
100
+ lfContainer.style.height = height ? `${height}px` : '100%'
94
101
  container.innerHTML = ''
95
102
  container.appendChild(lfContainer)
96
103
  return lfContainer
@@ -102,8 +109,9 @@ export class LogicFlow {
102
109
 
103
110
  constructor(options: LFOptions.Common) {
104
111
  const initOptions = LFOptions.get(options)
112
+ const { container, width, height } = initOptions
105
113
  this.options = initOptions
106
- this.container = this.initContainer(initOptions.container)
114
+ this.container = this.initContainer(container, width, height)
107
115
  this.graphModel = new GraphModel({
108
116
  ...initOptions,
109
117
  container: this.container, // TODO:测试该部分是否会有问题
@@ -1292,19 +1300,14 @@ export class LogicFlow {
1292
1300
  * @param props
1293
1301
  */
1294
1302
  static use(
1295
- extension: ExtensionConstructor,
1303
+ extension: ExtensionConstructor | ExtensionDefinition,
1296
1304
  props?: Record<string, unknown>,
1297
1305
  ): void {
1298
- let { pluginName } = extension
1306
+ const { pluginName } = extension
1299
1307
  if (!pluginName) {
1300
- console.warn(
1301
- `请给插件${
1302
- extension.name || extension.constructor.name
1303
- }指定pluginName!`,
1304
- )
1305
- pluginName = extension.name // 兼容以前name的情况,1.0版本去掉。
1308
+ throw new Error(`请给插件指定 pluginName!`)
1306
1309
  }
1307
- // TODO: 应该在何时进行插件的销毁
1310
+ // TODO: 应该在何时进行插件的销毁???
1308
1311
  // const preExtension = this.extensions.get(pluginName)?.extension
1309
1312
  // preExtension?.destroy?.() // 该代码应该有问题,因为 preExtension 直接用的是 Constructor,没有实例化。无法访问实例方法 destroy
1310
1313
 
@@ -1316,19 +1319,26 @@ export class LogicFlow {
1316
1319
  }
1317
1320
 
1318
1321
  private installPlugins(disabledPlugins: string[] = []) {
1322
+ const extensionsAddByUse = Array.from(
1323
+ LogicFlow.extensions,
1324
+ ([, extension]) => extension,
1325
+ )
1319
1326
  // 安装插件,优先使用个性插件
1320
- const extensions = this.plugins ?? LogicFlow.extensions
1321
- extensions.forEach((ext: any) => {
1322
- let extension: any
1323
- let props = null
1324
- if (ext[pluginFlag]) {
1327
+ const extensions = [...extensionsAddByUse, ...this.plugins]
1328
+ forEach(extensions, (ext) => {
1329
+ let extension: ExtensionConstructor | ExtensionDefinition
1330
+ let props: Record<string, any> | undefined
1331
+
1332
+ if (pluginFlag in ext) {
1325
1333
  extension = ext.extension
1326
1334
  props = ext.props
1327
1335
  } else {
1328
1336
  extension = ext
1329
1337
  }
1330
- const pluginName = extension?.pluginName || extension?.name
1331
- if (disabledPlugins.indexOf(pluginName) === -1) {
1338
+
1339
+ const pluginName = extension?.pluginName
1340
+
1341
+ if (indexOf(disabledPlugins, pluginName) === -1) {
1332
1342
  this.installPlugin(extension, props)
1333
1343
  }
1334
1344
  })
@@ -1337,31 +1347,38 @@ export class LogicFlow {
1337
1347
  /**
1338
1348
  * 加载插件-内部方法
1339
1349
  */
1340
- private installPlugin(extension: Extension, props: any) {
1341
- if (typeof extension === 'object') {
1342
- const { pluginName, install, render: renderComponent } = extension
1350
+ private installPlugin(
1351
+ extension: ExtensionConstructor | ExtensionDefinition,
1352
+ props?: Record<string, any>,
1353
+ ) {
1354
+ if ('pluginName' in extension && 'install' in extension) {
1355
+ const { pluginName, install, render } = extension
1343
1356
  if (pluginName) {
1344
1357
  install && install.call(extension, this, LogicFlow)
1345
- renderComponent && this.components.push(renderComponent.bind(extension))
1358
+ render && this.components.push(render.bind(extension))
1346
1359
  this.extension[pluginName] = extension
1347
1360
  }
1348
1361
  return
1349
1362
  }
1350
- const ExtensionCls = extension as ExtensionConstructor
1351
- const extensionInstance = new ExtensionCls({
1363
+
1364
+ const ExtensionCtor = extension as ExtensionConstructor
1365
+ const extensionIns = new ExtensionCtor({
1352
1366
  lf: this,
1353
1367
  LogicFlow,
1354
- options: this.options.pluginsOptions ?? {},
1355
1368
  props,
1369
+ options: this.options.pluginsOptions ?? {},
1356
1370
  })
1357
- extensionInstance.render &&
1358
- this.components.push(extensionInstance.render.bind(extensionInstance))
1359
- this.extension[ExtensionCls.pluginName] = extensionInstance
1371
+ extensionIns.render &&
1372
+ this.components.push(extensionIns.render.bind(extensionIns))
1373
+ this.extension[ExtensionCtor.pluginName] = extensionIns
1360
1374
  }
1361
1375
  }
1362
1376
 
1363
1377
  // Option
1364
1378
  export namespace LogicFlow {
1379
+ /**
1380
+ * LogicFlow init Options
1381
+ */
1365
1382
  export interface Options extends LFOptions.Common {}
1366
1383
 
1367
1384
  export type DomAttributes = {
@@ -1376,6 +1393,7 @@ export namespace LogicFlow {
1376
1393
  ry?: number
1377
1394
  } & Record<string, any>
1378
1395
  export type AttributesType = Record<string, any>
1396
+
1379
1397
  export type VectorData = {
1380
1398
  deltaX: number
1381
1399
  deltaY: number
@@ -1390,7 +1408,7 @@ export namespace LogicFlow {
1390
1408
  }
1391
1409
  export type Point = {
1392
1410
  id?: string
1393
- [key: string]: any
1411
+ [key: string]: any // TODO: 确认这个属性是干什么的呢?是有可以移除
1394
1412
  } & Position
1395
1413
  export type PointTuple = [number, number]
1396
1414
  export type ClientPosition = {
@@ -1420,9 +1438,12 @@ export namespace LogicFlow {
1420
1438
  }
1421
1439
  export type TextConfig = {
1422
1440
  value: string
1441
+ x: number
1442
+ y: number
1423
1443
  editable?: boolean
1424
1444
  draggable?: boolean
1425
- } & Point
1445
+ // overflowMode?: 'default' | 'autoWrap' | 'ellipsis'
1446
+ }
1426
1447
 
1427
1448
  export type AppendConfig = {
1428
1449
  startIndex: number
@@ -1553,6 +1574,8 @@ export namespace LogicFlow {
1553
1574
  radius?: number
1554
1575
  rx?: number
1555
1576
  ry?: number
1577
+ width?: number
1578
+ height?: number
1556
1579
  path?: string
1557
1580
  [key: string]: unknown
1558
1581
  }
@@ -1636,6 +1659,7 @@ export namespace LogicFlow {
1636
1659
  * ellipsis: 超出省略
1637
1660
  */
1638
1661
  overflowMode?: 'default' | 'autoWrap' | 'ellipsis'
1662
+ textWidth?: number
1639
1663
  background?: RectTheme
1640
1664
  /**
1641
1665
  * 背景区域 padding
@@ -1643,6 +1667,7 @@ export namespace LogicFlow {
1643
1667
  */
1644
1668
  wrapPadding?: string
1645
1669
  } & TextTheme
1670
+
1646
1671
  // 边上文本样式
1647
1672
  export type EdgeTextTheme = {
1648
1673
  textWidth: number
@@ -1755,8 +1780,14 @@ export namespace LogicFlow {
1755
1780
 
1756
1781
  // Render or Functions
1757
1782
  export namespace LogicFlow {
1758
- type FocusOnById = { id: string; coordinate?: never }
1759
- type FocusOnByCoordinate = { id?: string; coordinate: Position }
1783
+ type FocusOnById = {
1784
+ id: string
1785
+ coordinate?: never
1786
+ }
1787
+ type FocusOnByCoordinate = {
1788
+ id?: string
1789
+ coordinate: Position
1790
+ }
1760
1791
  export type FocusOnArgsType = FocusOnById | FocusOnByCoordinate
1761
1792
 
1762
1793
  export type BaseNodeModelCtor = typeof BaseNodeModel
@@ -1794,32 +1825,43 @@ export namespace LogicFlow {
1794
1825
  new (options: LFOptions.Definition): LogicFlow
1795
1826
  }
1796
1827
 
1797
- export type RegisteredExtension = {
1828
+ /**
1829
+ * Extension 插件类型
1830
+ */
1831
+ export type ExtensionType = ExtensionConstructor | ExtensionDefinition
1832
+ export type ExtensionConfig = {
1798
1833
  [pluginFlag]: symbol
1799
- extension: ExtensionConstructor
1800
- props?: Record<string, unknown>
1834
+ extension: ExtensionType
1835
+ props?: Record<string, any> // TODO: 看这类型是否可以更精确
1801
1836
  }
1802
1837
 
1803
- export type ExtensionProps = {
1838
+ export type IExtensionProps = {
1804
1839
  lf: LogicFlow
1805
1840
  LogicFlow: LogicFlowConstructor
1806
- options: Record<string, unknown>
1807
1841
  props?: Record<string, unknown>
1842
+ options: Record<string, unknown>
1808
1843
  }
1809
1844
 
1810
1845
  export interface ExtensionConstructor {
1811
1846
  pluginName: string
1812
-
1813
- new (props: ExtensionProps): Extension
1847
+ new (props: IExtensionProps): Extension
1814
1848
  }
1815
1849
 
1816
- export type ExtensionRender = (lf: LogicFlow, container: HTMLElement) => void
1850
+ export type ExtensionRenderFunc = (
1851
+ lf: LogicFlow,
1852
+ container: HTMLElement,
1853
+ ) => void
1854
+
1855
+ // 对象形式定义的插件
1856
+ export type ExtensionDefinition = {
1857
+ pluginName: string
1858
+ install?: (lf: LogicFlow, LFCtor: LogicFlowConstructor) => void
1859
+ render?: ExtensionRenderFunc
1860
+ }
1817
1861
 
1818
1862
  export interface Extension {
1819
- readonly pluginName?: string // 插件名称,只用用于插件覆盖和细粒度控制加载哪些插件
1820
- install?: (lf: LogicFlow, logicFlow: LogicFlowConstructor) => void
1821
- render?: ExtensionRender
1822
- destroy?: () => void
1863
+ render: ExtensionRenderFunc
1864
+ destroy?: () => void // TODO: 确认插件销毁函数参数类型
1823
1865
  }
1824
1866
  }
1825
1867
 
@@ -0,0 +1,205 @@
1
+ import { noop } from 'lodash-es'
2
+ import { Model } from '../model'
3
+ import { EventType } from '../constant'
4
+ import EventEmitter from '../event/eventEmitter'
5
+
6
+ // TODO:这种方式在同构项目中,会报错,该如何解决(是否要求用户控制在浏览器环境时才初始化)
7
+ // const DOC: any = window?.document
8
+ const LEFT_MOUSE_BUTTON_CODE = 0
9
+
10
+ export type IDragParams = {
11
+ deltaX: number
12
+ deltaY: number
13
+ event: MouseEvent | null
14
+ [key: string]: unknown
15
+ }
16
+
17
+ export type ICreateDragParams = {
18
+ onDragStart?: (params: Partial<IDragParams>) => void
19
+ onDragging?: (param: IDragParams) => void
20
+ onDragEnd?: (param: Partial<IDragParams>) => void
21
+ step?: number
22
+ isStopPropagation?: boolean
23
+ }
24
+
25
+ export type IStepperDragProps = {
26
+ eventType?: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
27
+ eventCenter?: EventEmitter
28
+ model?: Model.BaseModel
29
+ data?: Record<string, unknown>
30
+ [key: string]: unknown
31
+ } & Partial<ICreateDragParams>
32
+ /**
33
+ * 支持拖拽时按步长进行移动
34
+ * REMIND:在绘制的过程中因为放大缩小,移动的真实 step 是变化的
35
+ */
36
+ export class StepperDrag {
37
+ // 初始化
38
+ onDragStart: (params: Partial<IDragParams>) => void
39
+ onDragging: (params: IDragParams) => void
40
+ onDragEnd: (params: Partial<IDragParams>) => void
41
+
42
+ step: number
43
+ isStopPropagation: boolean
44
+ eventType: 'NODE' | 'BLANK' | 'SELECTION' | 'ADJUST_POINT' | ''
45
+ eventCenter?: EventEmitter
46
+ model?: Model.BaseModel
47
+ data?: Record<string, unknown>
48
+
49
+ // 运行时
50
+ isDragging: boolean = false
51
+ isStartDrag: boolean = false
52
+
53
+ startX: number = 0
54
+ startY: number = 0
55
+ totalDeltaX: number = 0
56
+ totalDeltaY: number = 0
57
+
58
+ startTime?: number
59
+ constructor({
60
+ onDragStart = noop,
61
+ onDragging = noop,
62
+ onDragEnd = noop,
63
+ step = 1,
64
+ eventType = '',
65
+ isStopPropagation = true,
66
+ eventCenter,
67
+ model,
68
+ data,
69
+ }: IStepperDragProps) {
70
+ this.onDragStart = onDragStart
71
+ this.onDragging = onDragging
72
+ this.onDragEnd = onDragEnd
73
+ this.step = step
74
+ this.eventType = eventType
75
+ this.isStopPropagation = isStopPropagation
76
+ this.eventCenter = eventCenter
77
+ this.model = model
78
+ this.data = data
79
+ }
80
+
81
+ setStep(step: number) {
82
+ this.step = step
83
+ }
84
+
85
+ handleMouseMove = (e: MouseEvent) => {
86
+ if (this.isStopPropagation) e.stopPropagation()
87
+ if (!this.isStartDrag) return
88
+
89
+ this.totalDeltaX += e.clientX - this.startX
90
+ this.totalDeltaY += e.clientY - this.startY
91
+ this.startX = e.clientX
92
+ this.startY = e.clientY
93
+
94
+ if (
95
+ this.step <= 1 ||
96
+ Math.abs(this.totalDeltaX) > this.step ||
97
+ Math.abs(this.totalDeltaY) > this.step
98
+ ) {
99
+ const remainderX = this.totalDeltaX % this.step
100
+ const remainderY = this.totalDeltaY % this.step
101
+
102
+ const deltaX = this.totalDeltaX - remainderX
103
+ const deltaY = this.totalDeltaY - remainderY
104
+
105
+ this.totalDeltaX = remainderX
106
+ this.totalDeltaY = remainderY
107
+
108
+ const elementData = this.model?.getData()
109
+ // REMIND: 为了区分点击和拖动,在鼠标没有拖动时,不触发 dragstart。
110
+ if (!this.isDragging) {
111
+ if (this.eventType) {
112
+ this.eventCenter?.emit(EventType[`${this.eventType}_DRAGSTART`], {
113
+ e,
114
+ data: this.data || elementData,
115
+ })
116
+ }
117
+ this.onDragStart({ event: e })
118
+ }
119
+
120
+ this.isDragging = true
121
+ // REMIND: 为了让 dragstart 和 drag 不在同一个事件循环中,将 drag 事件放在下一个任务队列中。
122
+ // TODO: 测试用例是否可覆盖???
123
+ Promise.resolve().then(() => {
124
+ this.onDragging({ deltaX, deltaY, event: e })
125
+ if (this.eventType) {
126
+ this.eventCenter?.emit(EventType[`${this.eventType}_MOUSEMOVE`], {
127
+ e,
128
+ data: this.data || elementData,
129
+ })
130
+ this.eventCenter?.emit(EventType[`${this.eventType}_DRAG`], {
131
+ e,
132
+ data: this.data || elementData,
133
+ })
134
+ }
135
+ })
136
+ }
137
+ }
138
+
139
+ handleMouseUp = (e: MouseEvent) => {
140
+ const DOC: any = window?.document
141
+
142
+ this.isStartDrag = false
143
+ if (this.isStopPropagation) e.stopPropagation()
144
+
145
+ // fix: issue#568, 如果 onDragging 在下一个时间循环中触发,而 drop 在当前事件循环,会出现问题
146
+ Promise.resolve().then(() => {
147
+ DOC?.removeEventListener('mousemove', this.handleMouseMove, true)
148
+ DOC?.removeEventListener('mouseup', this.handleMouseUp, true)
149
+
150
+ const elementData = this.model?.getData()
151
+ if (this.eventType) {
152
+ this.eventCenter?.emit(EventType[`${this.eventType}_MOUSEUP`], {
153
+ e,
154
+ data: this.data || elementData,
155
+ })
156
+ }
157
+
158
+ if (!this.isDragging) return
159
+ this.isDragging = false
160
+ this.onDragEnd({ event: e })
161
+ if (this.eventType) {
162
+ this.eventCenter?.emit(EventType[`${this.eventType}_DROP`], {
163
+ e,
164
+ data: this.data || elementData,
165
+ })
166
+ }
167
+ })
168
+ }
169
+
170
+ handleMouseDown = (e: MouseEvent) => {
171
+ const DOC: any = window?.document
172
+
173
+ // issue: LogicFlow交流群-3群 8.10 号抛出的事件相关的问题,是否是这引起的???
174
+ if (e.button !== LEFT_MOUSE_BUTTON_CODE) return
175
+ if (this.isStopPropagation) e.stopPropagation()
176
+
177
+ this.isStartDrag = true
178
+ this.startX = e.clientX
179
+ this.startY = e.clientY
180
+
181
+ DOC?.addEventListener('mousemove', this.handleMouseMove, true)
182
+ DOC?.addEventListener('mouseup', this.handleMouseUp, true)
183
+
184
+ const elementData = this.model?.getData()
185
+ if (this.eventType) {
186
+ this.eventCenter?.emit(EventType[`${this.eventType}_MOUSEDOWN`], {
187
+ e,
188
+ data: this.data || elementData,
189
+ })
190
+ }
191
+ this.startTime = new Date().getTime()
192
+ }
193
+
194
+ cancelDrag = () => {
195
+ const DOC: any = window?.document
196
+
197
+ DOC?.removeEventListener('mousemove', this.handleMouseMove, true)
198
+ DOC?.removeEventListener('mouseup', this.handleMouseUp, true)
199
+
200
+ this.onDragEnd({ event: null })
201
+ this.isDragging = false
202
+ }
203
+ }
204
+
205
+ export default StepperDrag
@@ -0,0 +1,108 @@
1
+ import { cloneDeep, debounce, isEqual, last } from 'lodash-es'
2
+ import { deepObserve, IDisposer } from 'mobx-utils'
3
+ import { LogicFlow } from '../LogicFlow'
4
+ // import { EventType } from '../constant'
5
+ import { GraphModel } from '../model'
6
+ import EventEmitter from '../event/eventEmitter'
7
+
8
+ export type HistoryData = LogicFlow.GraphConfigData
9
+
10
+ export class History {
11
+ undos: HistoryData[] = []
12
+ redos: HistoryData[] = []
13
+ stopWatch: IDisposer | null = null
14
+ curData: HistoryData | null = null
15
+ maxSize: number = 50
16
+ // 发生数据变化后,最多再等 500ms,把距离上次的数据变更存储起来。
17
+ // 所以 waitTime 值越小,History 对数据变化越敏感,存的 undos 数据就越细
18
+ waitTime: number = 100
19
+ eventCenter: EventEmitter
20
+
21
+ constructor(eventCenter: EventEmitter) {
22
+ this.eventCenter = eventCenter
23
+ }
24
+
25
+ add(data: HistoryData) {
26
+ if (isEqual(last(this.undos), data)) return
27
+ this.undos.push(data)
28
+
29
+ // 因为 undo 的时候会触发 add.
30
+ // 所以需要区分这个 add 是 undo 触发的还是用户正常操作触发的
31
+ // 如果是用户正常操作触发的,需要清空 redos
32
+ if (!isEqual(this.curData, data)) {
33
+ this.redos = []
34
+ }
35
+ // this.eventCenter.emit(EventType.HISTORY_CHANGE, {
36
+ // data: {
37
+ // undos: this.undos,
38
+ // redos: this.redos,
39
+ // undoAble: this.undos.length > 1,
40
+ // redoAble: this.redos.length > 0,
41
+ // },
42
+ // })
43
+
44
+ if (this.undos.length > this.maxSize) {
45
+ this.undos.shift()
46
+ }
47
+ }
48
+
49
+ undoAble() {
50
+ return this.undos.length > 1
51
+ }
52
+
53
+ /**
54
+ * undo 方法触发:
55
+ * graphModel 重新渲染 nodes 和 edges
56
+ * graphModel 发生变化,触发 watch
57
+ * watch 触发 add
58
+ */
59
+ undo() {
60
+ if (!this.undoAble()) return
61
+ const preData = this.undos.pop()
62
+ if (preData) {
63
+ this.redos.push(preData)
64
+ }
65
+ const curData = this.undos.pop()
66
+ if (curData) {
67
+ this.curData = cloneDeep(curData)
68
+ }
69
+ return curData
70
+ }
71
+
72
+ redoAble() {
73
+ return this.redos.length > 0
74
+ }
75
+
76
+ redo() {
77
+ if (!this.redoAble()) return
78
+ const curData = this.redos.pop()
79
+ if (curData) {
80
+ this.curData = cloneDeep(curData)
81
+ }
82
+ return curData
83
+ }
84
+
85
+ watch(model: GraphModel) {
86
+ this.stopWatch && this.stopWatch()
87
+
88
+ // 把当前 watch 的 model 转换一下数据存起来,无需清空 redos
89
+ const historyData = model.modelToHistoryData()
90
+ if (historyData) {
91
+ this.undos.push(historyData)
92
+ }
93
+
94
+ this.stopWatch = deepObserve(
95
+ model,
96
+ debounce(() => {
97
+ // 数据变更后,把最新的当前 model 数据存起来,并清空 redos
98
+ // 因为这个回调函数的触发,一般是用户交互而引起的,所以按照正常逻辑需要清空 redos
99
+ const data = model.modelToHistoryData()
100
+ if (data) {
101
+ this.add(data)
102
+ }
103
+ }, this.waitTime),
104
+ )
105
+ }
106
+ }
107
+
108
+ export default History