@logicflow/extension 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 (125) hide show
  1. package/README.md +16 -0
  2. package/package.json +10 -7
  3. package/.turbo/turbo-build.log +0 -38
  4. package/CHANGELOG.md +0 -1829
  5. package/__test__/bpmn-adapter.test.js +0 -227
  6. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  7. package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
  8. package/jest.config.js +0 -198
  9. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  10. package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
  11. package/rollup.config.js +0 -52
  12. package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
  13. package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
  14. package/src/NodeResize/BasicShape/Rect.tsx +0 -44
  15. package/src/NodeResize/control/Control.tsx +0 -537
  16. package/src/NodeResize/control/ControlGroup.tsx +0 -76
  17. package/src/NodeResize/control/Util.ts +0 -206
  18. package/src/NodeResize/index.ts +0 -26
  19. package/src/NodeResize/node/DiamondResize.tsx +0 -149
  20. package/src/NodeResize/node/EllipseResize.tsx +0 -140
  21. package/src/NodeResize/node/HtmlResize.tsx +0 -125
  22. package/src/NodeResize/node/RectResize.tsx +0 -126
  23. package/src/NodeResize/node/index.ts +0 -4
  24. package/src/bpmn/constant.ts +0 -56
  25. package/src/bpmn/events/EndEvent.ts +0 -73
  26. package/src/bpmn/events/StartEvent.ts +0 -52
  27. package/src/bpmn/events/index.ts +0 -2
  28. package/src/bpmn/flow/SequenceFlow.ts +0 -25
  29. package/src/bpmn/flow/index.ts +0 -1
  30. package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
  31. package/src/bpmn/gateways/index.ts +0 -1
  32. package/src/bpmn/getBpmnId.ts +0 -31
  33. package/src/bpmn/index.ts +0 -60
  34. package/src/bpmn/tasks/ServiceTask.ts +0 -63
  35. package/src/bpmn/tasks/UserTask.ts +0 -64
  36. package/src/bpmn/tasks/index.ts +0 -2
  37. package/src/bpmn-adapter/bpmnIds.ts +0 -31
  38. package/src/bpmn-adapter/index.ts +0 -835
  39. package/src/bpmn-adapter/json2xml.ts +0 -127
  40. package/src/bpmn-adapter/xml2json.ts +0 -544
  41. package/src/bpmn-elements/README.md +0 -223
  42. package/src/bpmn-elements/__tests__/definition.test.js +0 -72
  43. package/src/bpmn-elements/index.d.ts +0 -26
  44. package/src/bpmn-elements/index.ts +0 -107
  45. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
  46. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
  47. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
  48. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
  49. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
  50. package/src/bpmn-elements/presets/Event/index.ts +0 -14
  51. package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
  52. package/src/bpmn-elements/presets/Flow/index.ts +0 -8
  53. package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
  54. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
  55. package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
  56. package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
  57. package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
  58. package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
  59. package/src/bpmn-elements/presets/Pool/index.ts +0 -89
  60. package/src/bpmn-elements/presets/Task/index.ts +0 -122
  61. package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
  62. package/src/bpmn-elements/presets/Task/task.ts +0 -193
  63. package/src/bpmn-elements/presets/icons.ts +0 -155
  64. package/src/bpmn-elements/utils.ts +0 -52
  65. package/src/bpmn-elements-adapter/README.md +0 -293
  66. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
  67. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
  68. package/src/bpmn-elements-adapter/constant.ts +0 -76
  69. package/src/bpmn-elements-adapter/index.ts +0 -1134
  70. package/src/bpmn-elements-adapter/json2xml.ts +0 -105
  71. package/src/bpmn-elements-adapter/xml2json.ts +0 -542
  72. package/src/components/context-menu/index.ts +0 -253
  73. package/src/components/control/index.ts +0 -155
  74. package/src/components/dnd-panel/index.ts +0 -137
  75. package/src/components/highlight/index.ts +0 -227
  76. package/src/components/menu/index.ts +0 -748
  77. package/src/components/mini-map/index.ts +0 -686
  78. package/src/components/selection-select/index.ts +0 -387
  79. package/src/dynamic-group/index.ts +0 -774
  80. package/src/dynamic-group/model.ts +0 -580
  81. package/src/dynamic-group/node.ts +0 -288
  82. package/src/dynamic-group/utils.ts +0 -46
  83. package/src/index.less +0 -1
  84. package/src/index.ts +0 -47
  85. package/src/insert-node-in-polyline/edge.ts +0 -175
  86. package/src/insert-node-in-polyline/index.ts +0 -193
  87. package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
  88. package/src/materials/curved-edge/index.ts +0 -217
  89. package/src/materials/group/GroupNode.ts +0 -437
  90. package/src/materials/group/index.ts +0 -542
  91. package/src/materials/node-selection/index.ts +0 -380
  92. package/src/mindmap/fakerRoot.ts +0 -19
  93. package/src/mindmap/index.ts +0 -328
  94. package/src/mindmap/markContent.ts +0 -81
  95. package/src/mindmap/markContentOption.ts +0 -81
  96. package/src/mindmap/markEntity.ts +0 -82
  97. package/src/mindmap/markRoot.ts +0 -83
  98. package/src/mindmap/theme.ts +0 -11
  99. package/src/pool/LaneModel.ts +0 -226
  100. package/src/pool/LaneView.ts +0 -220
  101. package/src/pool/PoolModel.ts +0 -631
  102. package/src/pool/PoolView.ts +0 -75
  103. package/src/pool/constant.ts +0 -19
  104. package/src/pool/index.ts +0 -621
  105. package/src/pool/utils.ts +0 -46
  106. package/src/rect-label-node/RectLabelNodeView.ts +0 -33
  107. package/src/rect-label-node/index.ts +0 -15
  108. package/src/style/index.less +0 -381
  109. package/src/style/raw.ts +0 -328
  110. package/src/tools/auto-layout/index.ts +0 -282
  111. package/src/tools/flow-path/index.ts +0 -233
  112. package/src/tools/label/Label.tsx +0 -357
  113. package/src/tools/label/LabelModel.ts +0 -83
  114. package/src/tools/label/LabelOverlay.tsx +0 -162
  115. package/src/tools/label/algorithm.ts +0 -42
  116. package/src/tools/label/index.ts +0 -479
  117. package/src/tools/label/mediumEditor.ts +0 -121
  118. package/src/tools/label/utils.ts +0 -395
  119. package/src/tools/proximity-connect/index.ts +0 -435
  120. package/src/tools/snapshot/README.md +0 -145
  121. package/src/tools/snapshot/index.ts +0 -701
  122. package/src/tools/snapshot/utils.ts +0 -163
  123. package/src/turbo-adapter/index.ts +0 -212
  124. package/stats.html +0 -4842
  125. package/tsconfig.json +0 -18
@@ -1,163 +0,0 @@
1
- /**
2
- * 图片缓存, 已请求过的图片直接从缓存中获取
3
- */
4
- const imageCache: Record<string, string> = {}
5
-
6
- /**
7
- * 当获取图片失败时会返回失败信息,是 text/plain 类型的数据
8
- * @param str - 图片内容
9
- * @returns
10
- */
11
- export function isTextPlainBase64(str: string) {
12
- return str.startsWith('data:text/plain')
13
- }
14
-
15
- /**
16
- * 将网络图片转为 base64
17
- * @param url - 图片地址
18
- * @returns
19
- */
20
- export async function convertImageToBase64(url: string): Promise<string> {
21
- if (imageCache[url]) {
22
- return imageCache[url]
23
- }
24
- return new Promise((resolve, reject) => {
25
- try {
26
- fetch(url)
27
- .then((response) => response.blob())
28
- .then((blob) => {
29
- const reader = new FileReader()
30
- reader.onloadend = () => {
31
- resolve((imageCache[url] = reader.result as string))
32
- }
33
- reader.onerror = reject
34
- reader.readAsDataURL(blob)
35
- })
36
- .catch(() => {
37
- resolve((imageCache[url] = url))
38
- })
39
- } catch (error) {
40
- // 如果转换失败,后续大概率仍然会失败,因此直接缓存
41
- return (imageCache[url] = url)
42
- }
43
- })
44
- }
45
-
46
- /**
47
- * 使用 base64 的图片替换 img 标签的 src 或 image 标签的 href
48
- * @param node - html 节点或 svg 节点
49
- */
50
- export async function updateImageSrcOrHrefWithBase64Image(
51
- node: HTMLImageElement | SVGImageElement,
52
- attrName: 'src' | 'href',
53
- ) {
54
- try {
55
- const url = node.getAttribute(attrName) || ''
56
- // 已经是 base64 图片,不需要处理
57
- if (url.startsWith('data:')) {
58
- return
59
- }
60
- const base64Image = await convertImageToBase64(url)
61
- if (isTextPlainBase64(base64Image)) {
62
- return
63
- }
64
- node.setAttribute(attrName, base64Image)
65
- } catch (error) {
66
- console.error(error)
67
- }
68
- }
69
-
70
- /**
71
- * 使用 base64 的图片替换背景图片
72
- * @param node - html 节点
73
- * @param styleAttr - 样式属性名称
74
- */
75
- export async function updateBackgroundImageWithBase64Image(
76
- node: HTMLElement,
77
- url: string,
78
- ) {
79
- try {
80
- // 已经是 base64 图片,不需要处理
81
- if (url.startsWith('data:')) {
82
- return
83
- }
84
- const base64Image = await convertImageToBase64(url)
85
- if (isTextPlainBase64(base64Image)) {
86
- return
87
- }
88
- node.style.backgroundImage = `url(${base64Image})`
89
- } catch (error) {
90
- console.error(error)
91
- }
92
- }
93
-
94
- /**
95
- * 更新图片数据
96
- * @param node - 节点
97
- */
98
- export async function updateImageSource(node: HTMLElement | SVGElement) {
99
- const nodes = [node]
100
- let nodePtr
101
- const promises: any[] = []
102
- while (nodes.length) {
103
- nodePtr = nodes.shift()
104
- if (nodePtr.children.length) {
105
- nodes.push(...nodePtr.children)
106
- }
107
- if (nodePtr instanceof HTMLElement) {
108
- // 如果有 style 的 background, backgroundImage 属性中有 url(xxx), 尝试替换为 base64 图片
109
- const { background, backgroundImage } = nodePtr.style
110
- const backgroundUrlMatch = background.match(/url\(["']?(.*?)["']?\)/)
111
- if (backgroundUrlMatch && backgroundUrlMatch[1]) {
112
- const imageUrl = backgroundUrlMatch[1]
113
- promises.push(updateBackgroundImageWithBase64Image(nodePtr, imageUrl))
114
- }
115
- const backgroundImageUrlMatch = backgroundImage.match(
116
- /url\(["']?(.*?)["']?\)/,
117
- )
118
- if (backgroundImageUrlMatch && backgroundImageUrlMatch[1]) {
119
- const imageUrl = backgroundImageUrlMatch[1]
120
- promises.push(updateBackgroundImageWithBase64Image(nodePtr, imageUrl))
121
- }
122
- }
123
- // 如果有 img 和 image 标签,尝试将 src 和 href 替换为 base64 图片
124
- if (nodePtr instanceof HTMLImageElement) {
125
- promises.push(updateImageSrcOrHrefWithBase64Image(nodePtr, 'src'))
126
- } else if (nodePtr instanceof SVGImageElement) {
127
- promises.push(updateImageSrcOrHrefWithBase64Image(nodePtr, 'href'))
128
- }
129
- }
130
- await Promise.all(promises)
131
- }
132
-
133
- /**
134
- * 重新复制canvas 用于在不裁剪原canvas的基础上通过拉伸方式达到自定义宽高目的
135
- * @param originCanvas HTMLCanvasElement
136
- * @param targetWidth number
137
- * @param targetHeight number
138
- */
139
- export function copyCanvas(
140
- originCanvas: HTMLCanvasElement,
141
- targetWidth: number,
142
- targetHeight: number,
143
- ): HTMLCanvasElement {
144
- const newCanvas = document.createElement('canvas')
145
- newCanvas.width = targetWidth
146
- newCanvas.height = targetHeight
147
- const newCtx = newCanvas.getContext('2d')
148
- if (newCtx) {
149
- // 注意: 自定义宽高时,可能会拉伸图形,这时候padding也会被拉伸导致不准确
150
- newCtx.drawImage(
151
- originCanvas,
152
- 0,
153
- 0,
154
- originCanvas.width,
155
- originCanvas.height,
156
- 0,
157
- 0,
158
- targetWidth,
159
- targetHeight,
160
- )
161
- }
162
- return newCanvas
163
- }
@@ -1,212 +0,0 @@
1
- const TurboType = {
2
- SEQUENCE_FLOW: 1,
3
- START_EVENT: 2,
4
- END_EVENT: 3,
5
- USER_TASK: 4,
6
- // SERVICE_TASK = 5, 暂不支持
7
- EXCLUSIVE_GATEWAY: 6,
8
- }
9
-
10
- const TurboTypeMap = {
11
- 1: 'bpmn:sequenceFlow',
12
- 2: 'bpmn:startEvent',
13
- 3: 'bpmn:endEvent',
14
- 4: 'bpmn:userTask',
15
- 6: 'bpmn:exclusiveGateway',
16
- }
17
-
18
- // 转换Turbo识别的类型
19
- function getTurboType(type) {
20
- switch (type) {
21
- case 'bpmn:sequenceFlow':
22
- return TurboType.SEQUENCE_FLOW
23
- case 'bpmn:startEvent':
24
- return TurboType.START_EVENT
25
- case 'bpmn:endEvent':
26
- return TurboType.END_EVENT
27
- case 'bpmn:userTask':
28
- return TurboType.USER_TASK
29
- // case 'bpmn:serviceTask':
30
- // return TurboType.SERVICE_TASK;
31
- case 'bpmn:exclusiveGateway':
32
- return TurboType.EXCLUSIVE_GATEWAY
33
- default:
34
- return type
35
- }
36
- }
37
-
38
- // 将LogicFlow中的Node数据转换为Turbo元素数据
39
- function convertNodeToTurboElement(node) {
40
- const { id, type, x, y, text = '', properties } = node
41
- return {
42
- incoming: [],
43
- outgoing: [],
44
- dockers: [],
45
- type: getTurboType(type),
46
- properties: {
47
- ...properties,
48
- name: (text && text.value) || '',
49
- x,
50
- y,
51
- text,
52
- },
53
- key: id,
54
- }
55
- }
56
-
57
- // 将LogicFlow中的Edge数据转换为Turbo元素数据
58
- function convertEdgeToTurboElement(edge) {
59
- const {
60
- id,
61
- type,
62
- sourceNodeId,
63
- targetNodeId,
64
- startPoint,
65
- endPoint,
66
- pointsList,
67
- text = '',
68
- properties,
69
- } = edge
70
- return {
71
- incoming: [sourceNodeId],
72
- outgoing: [targetNodeId],
73
- type: getTurboType(type),
74
- dockers: [],
75
- properties: {
76
- ...properties,
77
- name: (text && text.value) || '',
78
- text,
79
- startPoint: JSON.stringify(startPoint),
80
- endPoint: JSON.stringify(endPoint),
81
- pointsList: JSON.stringify(pointsList),
82
- },
83
- key: id,
84
- }
85
- }
86
-
87
- // 将LogicFlow中数据转换为Turbo数据
88
- export function toTurboData(data) {
89
- const nodeMap = new Map()
90
- const turboData: any = {
91
- // TODO: 定义类型
92
- flowElementList: [],
93
- }
94
- data.nodes.forEach((node) => {
95
- const flowElement = convertNodeToTurboElement(node)
96
- turboData.flowElementList.push(flowElement)
97
- nodeMap.set(node.id, flowElement)
98
- })
99
- data.edges.forEach((edge) => {
100
- const flowElement = convertEdgeToTurboElement(edge)
101
- const sourceElement = nodeMap.get(edge.sourceNodeId)
102
- sourceElement.outgoing.push(flowElement.key)
103
- const targetElement = nodeMap.get(edge.targetNodeId)
104
- targetElement.incoming.push(flowElement.key)
105
- turboData.flowElementList.push(flowElement)
106
- })
107
- return turboData
108
- }
109
-
110
- // 将Turbo元素数据转换为LogicFlow中的Edge数据
111
- function convertFlowElementToEdge(element) {
112
- const { incoming, outgoing, properties, key, type } = element
113
- const { text, name, startPoint, endPoint, pointsList } = properties
114
- const edge: Record<string, any> = {
115
- id: key,
116
- type: TurboTypeMap[type],
117
- sourceNodeId: incoming[0],
118
- targetNodeId: outgoing[0],
119
- text: text || name,
120
- properties: {},
121
- }
122
- if (startPoint) {
123
- edge.startPoint = JSON.parse(startPoint)
124
- }
125
- if (endPoint) {
126
- edge.endPoint = JSON.parse(endPoint)
127
- }
128
- if (pointsList) {
129
- edge.pointsList = JSON.parse(pointsList)
130
- }
131
- // 这种转换方式,在自定义属性中不能与excludeProperties中的属性重名,否则将在转换过程中丢失
132
- const excludeProperties = ['startPoint', 'endPoint', 'pointsList', 'text']
133
- Object.keys(element.properties).forEach((property) => {
134
- if (excludeProperties.indexOf(property) === -1) {
135
- edge.properties[property] = element.properties[property]
136
- }
137
- })
138
- return edge
139
- }
140
-
141
- // 将Turbo元素数据转换为LogicFlow中的Node数据
142
- function convertFlowElementToNode(element) {
143
- const { properties, key, type, bounds } = element
144
- let { x, y } = properties
145
- const { text } = properties
146
- if (x === undefined) {
147
- const [{ x: x1, y: y1 }, { x: x2, y: y2 }] = bounds
148
- x = (x1 + x2) / 2
149
- y = (y1 + y2) / 2
150
- }
151
- const node = {
152
- id: key,
153
- type: TurboTypeMap[type],
154
- x,
155
- y,
156
- text,
157
- properties: {},
158
- }
159
- // 这种转换方式,在自定义属性中不能与excludeProperties中的属性重名,否则将在转换过程中丢失
160
- const excludeProperties = ['x', 'y', 'text']
161
- Object.keys(element.properties).forEach((property) => {
162
- if (excludeProperties.indexOf(property) === -1) {
163
- node.properties[property] = element.properties[property]
164
- }
165
- })
166
- return node
167
- }
168
-
169
- // 将Turbo元素数据转换为LogicFlow数据
170
- export function toLogicflowData(data) {
171
- const lfData: any = {
172
- // TODO: 定义类型
173
- nodes: [],
174
- edges: [],
175
- }
176
- const list = data.flowElementList
177
- list &&
178
- list.length > 0 &&
179
- list.forEach((element) => {
180
- if (element.type === TurboType.SEQUENCE_FLOW) {
181
- const edge = convertFlowElementToEdge(element)
182
- lfData.edges.push(edge)
183
- } else {
184
- const node = convertFlowElementToNode(element)
185
- lfData.nodes.push(node)
186
- }
187
- })
188
- return lfData
189
- }
190
-
191
- class TurboAdapter {
192
- static pluginName = 'turboAdapter'
193
-
194
- constructor({ lf }) {
195
- lf.adapterIn = this.adapterIn
196
- lf.adapterOut = this.adapterOut
197
- }
198
-
199
- adapterOut(logicflowData) {
200
- if (logicflowData) {
201
- return toTurboData(logicflowData)
202
- }
203
- }
204
-
205
- adapterIn(turboData) {
206
- if (turboData) {
207
- return toLogicflowData(turboData)
208
- }
209
- }
210
- }
211
-
212
- export default TurboAdapter