@logicflow/extension 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 (201) hide show
  1. package/README.md +16 -0
  2. package/dist/index.css +1 -1
  3. package/dist/index.min.js +1 -1
  4. package/dist/index.min.js.map +1 -1
  5. package/es/NodeResize/node/RectResize.d.ts +0 -6
  6. package/es/NodeResize/node/RectResize.js +2 -11
  7. package/es/bpmn-elements-adapter/json2xml.d.ts +2 -1
  8. package/es/bpmn-elements-adapter/json2xml.js +18 -4
  9. package/es/bpmn-elements-adapter/xml2json.js +2 -7
  10. package/es/components/control/index.d.ts +1 -0
  11. package/es/components/control/index.js +24 -11
  12. package/es/components/mini-map/index.js +1 -1
  13. package/es/dynamic-group/model.d.ts +2 -1
  14. package/es/dynamic-group/model.js +28 -11
  15. package/es/dynamic-group/node.js +1 -0
  16. package/es/index.css +1 -1
  17. package/es/index.d.ts +1 -0
  18. package/es/index.js +2 -0
  19. package/es/insert-node-in-polyline/index.js +11 -35
  20. package/es/materials/curved-edge/index.js +49 -21
  21. package/es/materials/group/GroupNode.d.ts +0 -6
  22. package/es/materials/group/GroupNode.js +1 -6
  23. package/es/pool/LaneModel.d.ts +90 -0
  24. package/es/pool/LaneModel.js +252 -0
  25. package/es/pool/LaneView.d.ts +40 -0
  26. package/es/pool/LaneView.js +202 -0
  27. package/es/pool/PoolModel.d.ts +120 -0
  28. package/es/pool/PoolModel.js +586 -0
  29. package/es/pool/PoolView.d.ts +17 -0
  30. package/es/pool/PoolView.js +76 -0
  31. package/es/pool/constant.d.ts +15 -0
  32. package/es/pool/constant.js +17 -0
  33. package/es/pool/index.d.ts +89 -0
  34. package/es/pool/index.js +524 -0
  35. package/es/pool/utils.d.ts +19 -0
  36. package/es/pool/utils.js +33 -0
  37. package/es/style/index.css +1 -1
  38. package/es/style/raw.d.ts +1 -1
  39. package/es/style/raw.js +1 -1
  40. package/es/tools/label/LabelOverlay.js +3 -3
  41. package/es/tools/label/mediumEditor.d.ts +1 -1
  42. package/es/tools/label/mediumEditor.js +89 -52
  43. package/es/tools/snapshot/index.d.ts +7 -3
  44. package/es/tools/snapshot/index.js +72 -77
  45. package/lib/NodeResize/node/RectResize.d.ts +0 -6
  46. package/lib/NodeResize/node/RectResize.js +1 -10
  47. package/lib/bpmn-elements-adapter/json2xml.d.ts +2 -1
  48. package/lib/bpmn-elements-adapter/json2xml.js +19 -4
  49. package/lib/bpmn-elements-adapter/xml2json.js +2 -7
  50. package/lib/components/control/index.d.ts +1 -0
  51. package/lib/components/control/index.js +24 -11
  52. package/lib/components/mini-map/index.js +1 -1
  53. package/lib/dynamic-group/model.d.ts +2 -1
  54. package/lib/dynamic-group/model.js +28 -11
  55. package/lib/dynamic-group/node.js +1 -0
  56. package/lib/index.css +1 -1
  57. package/lib/index.d.ts +1 -0
  58. package/lib/index.js +2 -0
  59. package/lib/insert-node-in-polyline/index.js +10 -34
  60. package/lib/materials/curved-edge/index.js +49 -21
  61. package/lib/materials/group/GroupNode.d.ts +0 -6
  62. package/lib/materials/group/GroupNode.js +1 -6
  63. package/lib/pool/LaneModel.d.ts +90 -0
  64. package/lib/pool/LaneModel.js +255 -0
  65. package/lib/pool/LaneView.d.ts +40 -0
  66. package/lib/pool/LaneView.js +205 -0
  67. package/lib/pool/PoolModel.d.ts +120 -0
  68. package/lib/pool/PoolModel.js +589 -0
  69. package/lib/pool/PoolView.d.ts +17 -0
  70. package/lib/pool/PoolView.js +79 -0
  71. package/lib/pool/constant.d.ts +15 -0
  72. package/lib/pool/constant.js +20 -0
  73. package/lib/pool/index.d.ts +89 -0
  74. package/lib/pool/index.js +527 -0
  75. package/lib/pool/utils.d.ts +19 -0
  76. package/lib/pool/utils.js +38 -0
  77. package/lib/style/index.css +1 -1
  78. package/lib/style/raw.d.ts +1 -1
  79. package/lib/style/raw.js +1 -1
  80. package/lib/tools/label/LabelOverlay.js +2 -2
  81. package/lib/tools/label/mediumEditor.d.ts +1 -1
  82. package/lib/tools/label/mediumEditor.js +91 -53
  83. package/lib/tools/snapshot/index.d.ts +7 -3
  84. package/lib/tools/snapshot/index.js +72 -77
  85. package/package.json +10 -7
  86. package/.turbo/turbo-build.log +0 -38
  87. package/CHANGELOG.md +0 -1766
  88. package/__test__/bpmn-adapter.test.js +0 -227
  89. package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  90. package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
  91. package/jest.config.js +0 -198
  92. package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
  93. package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
  94. package/rollup.config.js +0 -52
  95. package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
  96. package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
  97. package/src/NodeResize/BasicShape/Rect.tsx +0 -44
  98. package/src/NodeResize/control/Control.tsx +0 -537
  99. package/src/NodeResize/control/ControlGroup.tsx +0 -76
  100. package/src/NodeResize/control/Util.ts +0 -206
  101. package/src/NodeResize/index.ts +0 -26
  102. package/src/NodeResize/node/DiamondResize.tsx +0 -149
  103. package/src/NodeResize/node/EllipseResize.tsx +0 -140
  104. package/src/NodeResize/node/HtmlResize.tsx +0 -125
  105. package/src/NodeResize/node/RectResize.tsx +0 -146
  106. package/src/NodeResize/node/index.ts +0 -4
  107. package/src/bpmn/constant.ts +0 -56
  108. package/src/bpmn/events/EndEvent.ts +0 -73
  109. package/src/bpmn/events/StartEvent.ts +0 -52
  110. package/src/bpmn/events/index.ts +0 -2
  111. package/src/bpmn/flow/SequenceFlow.ts +0 -25
  112. package/src/bpmn/flow/index.ts +0 -1
  113. package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
  114. package/src/bpmn/gateways/index.ts +0 -1
  115. package/src/bpmn/getBpmnId.ts +0 -31
  116. package/src/bpmn/index.ts +0 -60
  117. package/src/bpmn/tasks/ServiceTask.ts +0 -63
  118. package/src/bpmn/tasks/UserTask.ts +0 -64
  119. package/src/bpmn/tasks/index.ts +0 -2
  120. package/src/bpmn-adapter/bpmnIds.ts +0 -31
  121. package/src/bpmn-adapter/index.ts +0 -835
  122. package/src/bpmn-adapter/json2xml.ts +0 -127
  123. package/src/bpmn-adapter/xml2json.ts +0 -544
  124. package/src/bpmn-elements/README.md +0 -223
  125. package/src/bpmn-elements/__tests__/definition.test.js +0 -72
  126. package/src/bpmn-elements/index.d.ts +0 -26
  127. package/src/bpmn-elements/index.ts +0 -107
  128. package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
  129. package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
  130. package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
  131. package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
  132. package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
  133. package/src/bpmn-elements/presets/Event/index.ts +0 -14
  134. package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
  135. package/src/bpmn-elements/presets/Flow/index.ts +0 -8
  136. package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
  137. package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
  138. package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
  139. package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
  140. package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
  141. package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
  142. package/src/bpmn-elements/presets/Pool/index.ts +0 -89
  143. package/src/bpmn-elements/presets/Task/index.ts +0 -122
  144. package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
  145. package/src/bpmn-elements/presets/Task/task.ts +0 -193
  146. package/src/bpmn-elements/presets/icons.ts +0 -155
  147. package/src/bpmn-elements/utils.ts +0 -52
  148. package/src/bpmn-elements-adapter/README.md +0 -293
  149. package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
  150. package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
  151. package/src/bpmn-elements-adapter/constant.ts +0 -76
  152. package/src/bpmn-elements-adapter/index.ts +0 -1134
  153. package/src/bpmn-elements-adapter/json2xml.ts +0 -91
  154. package/src/bpmn-elements-adapter/xml2json.ts +0 -548
  155. package/src/components/context-menu/index.ts +0 -253
  156. package/src/components/control/index.ts +0 -141
  157. package/src/components/dnd-panel/index.ts +0 -137
  158. package/src/components/highlight/index.ts +0 -227
  159. package/src/components/menu/index.ts +0 -748
  160. package/src/components/mini-map/index.ts +0 -686
  161. package/src/components/selection-select/index.ts +0 -387
  162. package/src/dynamic-group/index.ts +0 -775
  163. package/src/dynamic-group/model.ts +0 -562
  164. package/src/dynamic-group/node.ts +0 -288
  165. package/src/dynamic-group/utils.ts +0 -46
  166. package/src/index.less +0 -1
  167. package/src/index.ts +0 -45
  168. package/src/insert-node-in-polyline/edge.ts +0 -175
  169. package/src/insert-node-in-polyline/index.ts +0 -187
  170. package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
  171. package/src/materials/curved-edge/index.ts +0 -185
  172. package/src/materials/group/GroupNode.ts +0 -442
  173. package/src/materials/group/index.ts +0 -542
  174. package/src/materials/node-selection/index.ts +0 -380
  175. package/src/mindmap/fakerRoot.ts +0 -19
  176. package/src/mindmap/index.ts +0 -328
  177. package/src/mindmap/markContent.ts +0 -81
  178. package/src/mindmap/markContentOption.ts +0 -81
  179. package/src/mindmap/markEntity.ts +0 -82
  180. package/src/mindmap/markRoot.ts +0 -83
  181. package/src/mindmap/theme.ts +0 -11
  182. package/src/rect-label-node/RectLabelNodeView.ts +0 -33
  183. package/src/rect-label-node/index.ts +0 -15
  184. package/src/style/index.less +0 -342
  185. package/src/style/raw.ts +0 -295
  186. package/src/tools/auto-layout/index.ts +0 -282
  187. package/src/tools/flow-path/index.ts +0 -233
  188. package/src/tools/label/Label.tsx +0 -357
  189. package/src/tools/label/LabelModel.ts +0 -83
  190. package/src/tools/label/LabelOverlay.tsx +0 -158
  191. package/src/tools/label/algorithm.ts +0 -42
  192. package/src/tools/label/index.ts +0 -479
  193. package/src/tools/label/mediumEditor.ts +0 -94
  194. package/src/tools/label/utils.ts +0 -395
  195. package/src/tools/proximity-connect/index.ts +0 -435
  196. package/src/tools/snapshot/README.md +0 -145
  197. package/src/tools/snapshot/index.ts +0 -718
  198. package/src/tools/snapshot/utils.ts +0 -163
  199. package/src/turbo-adapter/index.ts +0 -212
  200. package/stats.html +0 -4842
  201. package/tsconfig.json +0 -18
@@ -36,56 +36,93 @@ export var defaultOptions = {
36
36
  },
37
37
  disableEditing: true,
38
38
  };
39
- export var ColorPickerButton = MediumEditor.extensions.button.extend({
40
- name: 'colorpicker',
41
- tagNames: ['mark'],
42
- contentDefault: '<b>Color</b>',
43
- aria: 'Color Picker',
44
- action: 'colorPicker',
45
- init: function () {
46
- var _this = this;
47
- rangy.init();
48
- MediumEditor.extensions.button.prototype.init.call(this);
49
- this.colorPicker = new Picker({
50
- parent: this.button,
51
- color: '#000',
52
- onDone: function (res) {
53
- if (_this.coloredText && _this.coloredText.isAppliedToSelection()) {
54
- _this.coloredText.undoToSelection();
55
- }
56
- _this.coloredText = rangy.createClassApplier('colored', {
57
- elementTagName: 'span',
58
- elementProperties: {
59
- style: {
60
- color: res.hex,
61
- },
62
- },
63
- normalize: true,
64
- });
65
- _this.coloredText.toggleSelection();
66
- _this.base.checkContentChanged();
67
- _this.setInactive();
68
- },
69
- });
70
- },
71
- getButton: function () {
72
- return this.button;
73
- },
74
- handleClick: function () {
75
- this.setActive();
76
- this.colorPicker.show();
77
- },
78
- isAlreadyApplied: function (node) {
79
- return node.nodeName.toLowerCase() === 'mark';
80
- },
81
- isActive: function () {
82
- return this.button.classList.contains('medium-editor-button-active');
83
- },
84
- setInactive: function () {
85
- this.button.classList.remove('medium-editor-button-active');
86
- },
87
- setActive: function () {
88
- this.button.classList.add('medium-editor-button-active');
89
- },
90
- });
39
+ export function createColorPickerButtonClass(MediumEditor) {
40
+ var _a, _b;
41
+ var ButtonBase = ((_a = MediumEditor === null || MediumEditor === void 0 ? void 0 : MediumEditor.extensions) === null || _a === void 0 ? void 0 : _a.button) || ((_b = MediumEditor === null || MediumEditor === void 0 ? void 0 : MediumEditor.extensions) === null || _b === void 0 ? void 0 : _b.button);
42
+ var ExtensionBase = (MediumEditor === null || MediumEditor === void 0 ? void 0 : MediumEditor.Extension) || (MediumEditor === null || MediumEditor === void 0 ? void 0 : MediumEditor.Extension);
43
+ // Button 扩展基类不可用时,回退到 Extension 基类,避免在模块加载阶段抛错
44
+ var Base = ButtonBase || ExtensionBase;
45
+ if (!Base) {
46
+ console.warn('MediumEditor button/extension base not available; using noop extension');
47
+ return /** @class */ (function () {
48
+ function class_1() {
49
+ }
50
+ return class_1;
51
+ }());
52
+ }
53
+ return Base.extend({
54
+ name: 'colorpicker',
55
+ tagNames: ['mark'],
56
+ contentDefault: '<b>Color</b>',
57
+ aria: 'Color Picker',
58
+ action: 'colorPicker',
59
+ init: function () {
60
+ var _this = this;
61
+ var _a, _b;
62
+ try {
63
+ rangy.init();
64
+ }
65
+ catch (_c) {
66
+ console.error('rangy.init failed');
67
+ }
68
+ // 初始化按钮(ButtonBase 才有 prototype.init)
69
+ try {
70
+ ;
71
+ (_b = (_a = ButtonBase === null || ButtonBase === void 0 ? void 0 : ButtonBase.prototype) === null || _a === void 0 ? void 0 : _a.init) === null || _b === void 0 ? void 0 : _b.call(this);
72
+ }
73
+ catch (_d) {
74
+ console.error('ButtonBase.init failed');
75
+ }
76
+ this.colorPicker = new Picker({
77
+ parent: this.button || undefined,
78
+ color: '#000',
79
+ onDone: function (res) {
80
+ var _a, _b, _c, _d, _e;
81
+ try {
82
+ if (_this.coloredText && ((_b = (_a = _this.coloredText).isAppliedToSelection) === null || _b === void 0 ? void 0 : _b.call(_a))) {
83
+ _this.coloredText.undoToSelection();
84
+ }
85
+ _this.coloredText = rangy.createClassApplier('colored', {
86
+ elementTagName: 'span',
87
+ elementProperties: { style: { color: res.hex } },
88
+ normalize: true,
89
+ });
90
+ _this.coloredText.toggleSelection();
91
+ (_d = (_c = _this.base) === null || _c === void 0 ? void 0 : _c.checkContentChanged) === null || _d === void 0 ? void 0 : _d.call(_c);
92
+ (_e = _this.setInactive) === null || _e === void 0 ? void 0 : _e.call(_this);
93
+ }
94
+ catch (_f) {
95
+ console.error('Picker.onDone failed');
96
+ }
97
+ },
98
+ });
99
+ },
100
+ getButton: function () {
101
+ return this.button;
102
+ },
103
+ handleClick: function () {
104
+ var _a, _b, _c;
105
+ (_a = this.setActive) === null || _a === void 0 ? void 0 : _a.call(this);
106
+ (_c = (_b = this.colorPicker) === null || _b === void 0 ? void 0 : _b.show) === null || _c === void 0 ? void 0 : _c.call(_b);
107
+ },
108
+ isAlreadyApplied: function (node) {
109
+ var _a, _b;
110
+ return ((_b = (_a = node === null || node === void 0 ? void 0 : node.nodeName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a)) === 'mark';
111
+ },
112
+ isActive: function () {
113
+ var _a, _b;
114
+ return (_b = (_a = this.button) === null || _a === void 0 ? void 0 : _a.classList) === null || _b === void 0 ? void 0 : _b.contains('medium-editor-button-active');
115
+ },
116
+ setInactive: function () {
117
+ var _a, _b;
118
+ ;
119
+ (_b = (_a = this.button) === null || _a === void 0 ? void 0 : _a.classList) === null || _b === void 0 ? void 0 : _b.remove('medium-editor-button-active');
120
+ },
121
+ setActive: function () {
122
+ var _a, _b;
123
+ ;
124
+ (_b = (_a = this.button) === null || _a === void 0 ? void 0 : _a.classList) === null || _b === void 0 ? void 0 : _b.add('medium-editor-button-active');
125
+ },
126
+ });
127
+ }
91
128
  export { MediumEditor };
@@ -110,10 +110,14 @@ export declare class Snapshot {
110
110
  */
111
111
  private getClassRules;
112
112
  /**
113
- * 根据浏览器类型获取Canvas尺寸限制
114
- * @returns 包含最大主维度和次维度的对象
113
+ * 根据浏览器对 canvas 的大小限制,计算等比缩放比例
114
+ * - 参考 MDN 最大的画布尺寸:
115
+ * https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/canvas#最大的画布尺寸
116
+ *
117
+ * @param width
118
+ * @param height
115
119
  */
116
- private getCanvasDimensionsByBrowser;
120
+ private getCanvasScaleRatio;
117
121
  /**
118
122
  * 将 svg 转化为 canvas
119
123
  * @param svg - svg 元素
@@ -345,24 +345,28 @@ var Snapshot = /** @class */ (function () {
345
345
  return rules;
346
346
  };
347
347
  /**
348
- * 根据浏览器类型获取Canvas尺寸限制
349
- * @returns 包含最大主维度和次维度的对象
348
+ * 根据浏览器对 canvas 的大小限制,计算等比缩放比例
349
+ * - 参考 MDN 最大的画布尺寸:
350
+ * https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/canvas#最大的画布尺寸
351
+ *
352
+ * @param width
353
+ * @param height
350
354
  */
351
- Snapshot.prototype.getCanvasDimensionsByBrowser = function () {
352
- var userAgent = navigator.userAgent;
353
- // 默认值
354
- var maxCanvasDimension = 65535;
355
- var otherMaxCanvasDimension = 4096;
356
- if (userAgent.indexOf('Chrome') !== -1 ||
357
- userAgent.indexOf('Edge') !== -1) {
358
- maxCanvasDimension = 65535;
359
- otherMaxCanvasDimension = 4096;
355
+ Snapshot.prototype.getCanvasScaleRatio = function (width, height) {
356
+ /* 单边最大像素 */
357
+ var maxCanvasSide = 32767;
358
+ /* 最大像素面积 */
359
+ var maxCanvasArea = 268435456;
360
+ var area = width * height;
361
+ if (width <= maxCanvasSide &&
362
+ height <= maxCanvasSide &&
363
+ area <= maxCanvasArea) {
364
+ return 1;
360
365
  }
361
- else if (userAgent.indexOf('Firefox') !== -1) {
362
- maxCanvasDimension = 32767;
363
- otherMaxCanvasDimension = 3814;
364
- }
365
- return { maxCanvasDimension: maxCanvasDimension, otherMaxCanvasDimension: otherMaxCanvasDimension };
366
+ var widthScale = maxCanvasSide / width;
367
+ var heightScale = maxCanvasSide / height;
368
+ var areaScale = maxCanvasArea / area;
369
+ return Math.min(widthScale, heightScale, areaScale);
366
370
  };
367
371
  /**
368
372
  * 将 svg 转化为 canvas
@@ -372,14 +376,14 @@ var Snapshot = /** @class */ (function () {
372
376
  */
373
377
  Snapshot.prototype.getCanvasData = function (svg, toImageOptions) {
374
378
  return __awaiter(this, void 0, void 0, function () {
375
- var width, height, backgroundColor, _a, padding, copy, dpr, base, bbox, layoutCanvas, layout, offsetX, offsetY, graphModel, transformModel, SCALE_X, SCALE_Y, TRANSLATE_X, TRANSLATE_Y, safetyFactor, actualWidth, actualHeight, bboxWidth, bboxHeight, canvas, safetyMargin, _b, maxCanvasDimension, otherMaxCanvasDimension, MAX_CANVAS_DIMENSION, OTHER_MAX_CANVAS_DIMENSION, targetWidth, targetHeight, scaleWidth, scaleHeight, ctx, img, style, foreignObject;
376
- return __generator(this, function (_c) {
377
- switch (_c.label) {
379
+ var width, height, backgroundColor, _a, padding, copy, dpr, base, bbox, layoutCanvas, layout, offsetX, offsetY, graphModel, transformModel, SCALE_X, SCALE_Y, TRANSLATE_X, TRANSLATE_Y, safetyFactor, actualWidth, actualHeight, factorWidth, factorHeight, bboxWidth, bboxHeight, canvas, safetyMargin, targetWidth, targetHeight, scaleRatio, ctx, img, style, foreignObject;
380
+ return __generator(this, function (_b) {
381
+ switch (_b.label) {
378
382
  case 0:
379
383
  width = toImageOptions.width, height = toImageOptions.height, backgroundColor = toImageOptions.backgroundColor, _a = toImageOptions.padding, padding = _a === void 0 ? 40 : _a;
380
384
  return [4 /*yield*/, this.cloneSvg(svg, false)];
381
385
  case 1:
382
- copy = _c.sent();
386
+ copy = _b.sent();
383
387
  dpr = window.devicePixelRatio || 1;
384
388
  if (dpr < 1) {
385
389
  // https://github.com/didi/LogicFlow/issues/1222
@@ -404,62 +408,42 @@ var Snapshot = /** @class */ (function () {
404
408
  graphModel = this.lf.graphModel;
405
409
  transformModel = graphModel.transformModel;
406
410
  SCALE_X = transformModel.SCALE_X, SCALE_Y = transformModel.SCALE_Y, TRANSLATE_X = transformModel.TRANSLATE_X, TRANSLATE_Y = transformModel.TRANSLATE_Y;
407
- safetyFactor = toImageOptions.safetyFactor || 1.1 // 安全系数,增加10%的空间
411
+ safetyFactor = toImageOptions.safetyFactor || 1 // 安全系数,增加10%的空间
408
412
  ;
409
- actualWidth = (bbox.width / SCALE_X) * safetyFactor;
410
- actualHeight = (bbox.height / SCALE_Y) * safetyFactor;
411
- bboxWidth = Math.ceil(actualWidth);
412
- bboxHeight = Math.ceil(actualHeight);
413
+ actualWidth = bbox.width / SCALE_X;
414
+ actualHeight = bbox.height / SCALE_Y;
415
+ factorWidth = actualWidth * (safetyFactor - 1);
416
+ factorHeight = actualHeight * (safetyFactor - 1);
417
+ bboxWidth = Math.ceil(actualWidth + factorWidth);
418
+ bboxHeight = Math.ceil(actualHeight + factorHeight);
413
419
  canvas = document.createElement('canvas');
414
420
  canvas.style.width = "".concat(bboxWidth, "px");
415
421
  canvas.style.height = "".concat(bboxHeight, "px");
416
- safetyMargin = toImageOptions.safetyMargin || 40 // 额外的安全边距
417
- ;
418
- _b = this.getCanvasDimensionsByBrowser(), maxCanvasDimension = _b.maxCanvasDimension, otherMaxCanvasDimension = _b.otherMaxCanvasDimension;
419
- MAX_CANVAS_DIMENSION = maxCanvasDimension;
420
- OTHER_MAX_CANVAS_DIMENSION = otherMaxCanvasDimension;
421
- targetWidth = bboxWidth * dpr + padding * 2 + safetyMargin;
422
- targetHeight = bboxHeight * dpr + padding * 2 + safetyMargin;
423
- scaleWidth = 1 //宽 缩放
424
- ;
425
- scaleHeight = 1 //高 缩放
422
+ safetyMargin = toImageOptions.safetyMargin || 0 // 额外的安全边距
426
423
  ;
427
- // 对宽和高分别进行缩放,如chrome,矩形单边最大宽度不超过65535,如宽超过65535,那么高不能超过4096,否则像素会超,也会显示不出。
428
- if (targetWidth > MAX_CANVAS_DIMENSION &&
429
- targetHeight > OTHER_MAX_CANVAS_DIMENSION) {
430
- scaleWidth = MAX_CANVAS_DIMENSION / targetWidth;
431
- scaleHeight = OTHER_MAX_CANVAS_DIMENSION / targetHeight;
432
- }
433
- else if (targetWidth > OTHER_MAX_CANVAS_DIMENSION &&
434
- targetHeight > MAX_CANVAS_DIMENSION) {
435
- scaleWidth = OTHER_MAX_CANVAS_DIMENSION / targetWidth;
436
- scaleHeight = MAX_CANVAS_DIMENSION / targetHeight;
437
- }
438
- else if (targetWidth > MAX_CANVAS_DIMENSION &&
439
- targetHeight < OTHER_MAX_CANVAS_DIMENSION) {
440
- scaleHeight = scaleWidth = MAX_CANVAS_DIMENSION / targetWidth;
441
- }
442
- else if (targetWidth < OTHER_MAX_CANVAS_DIMENSION &&
443
- targetHeight > MAX_CANVAS_DIMENSION) {
444
- scaleHeight = scaleWidth = MAX_CANVAS_DIMENSION / targetHeight;
445
- }
446
- if (scaleWidth < 1 || scaleHeight < 1) {
447
- targetWidth = Math.floor(targetWidth * scaleWidth);
448
- targetHeight = Math.floor(targetHeight * scaleHeight);
424
+ targetWidth = bboxWidth * dpr;
425
+ targetHeight = bboxHeight * dpr;
426
+ scaleRatio = this.getCanvasScaleRatio(targetWidth, targetHeight);
427
+ if (scaleRatio < 1) {
428
+ targetWidth = Math.floor(targetWidth * scaleRatio);
429
+ targetHeight = Math.floor(targetHeight * scaleRatio);
449
430
  }
450
431
  // 将导出区域移动到左上角,canvas 绘制的时候是从左上角开始绘制的
451
432
  // 在transform矩阵中加入padding值,确保左侧元素不会被截断
452
433
  // 对这个矩阵进行缩放,否则会导致截断
453
434
  ;
454
435
  copy.lastChild.style.transform =
455
- "matrix(".concat(scaleWidth, ", 0, 0, ").concat(scaleHeight, ", ").concat((-offsetX + TRANSLATE_X) * (1 / SCALE_X) * scaleWidth + padding / dpr, ", ").concat((-offsetY + TRANSLATE_Y) * (1 / SCALE_Y) * scaleHeight + padding / dpr, ")");
456
- canvas.width = targetWidth;
457
- canvas.height = targetHeight;
436
+ "matrix(".concat(scaleRatio, ", 0, 0, ").concat(scaleRatio, ", ").concat((-offsetX + TRANSLATE_X) * (1 / SCALE_X) * scaleRatio +
437
+ padding +
438
+ factorWidth / 2 +
439
+ safetyMargin, ", ").concat((-offsetY + TRANSLATE_Y) * (1 / SCALE_Y) * scaleRatio + padding + factorHeight / 2 + safetyMargin, ")");
440
+ canvas.width = targetWidth + (padding + safetyMargin) * 2 * dpr;
441
+ canvas.height = targetHeight + (padding + safetyMargin) * 2 * dpr;
458
442
  ctx = canvas.getContext('2d');
459
443
  if (ctx) {
460
444
  // 清空canvas
461
445
  ctx.clearRect(0, 0, canvas.width, canvas.height);
462
- ctx.scale(dpr * scaleWidth, dpr * scaleHeight);
446
+ ctx.scale(dpr, dpr);
463
447
  // 如果有背景色,设置流程图导出的背景色
464
448
  if (backgroundColor) {
465
449
  ctx.fillStyle = backgroundColor;
@@ -666,7 +650,7 @@ var Snapshot = /** @class */ (function () {
666
650
  // 内部方法处理blob转换
667
651
  Snapshot.prototype.snapshotBlob = function (toImageOptions, baseFileType, backgroundColor) {
668
652
  return __awaiter(this, void 0, void 0, function () {
669
- var _a, fileType, svg;
653
+ var _a, fileType, svg, copy, svgString, blob;
670
654
  var _this = this;
671
655
  return __generator(this, function (_b) {
672
656
  switch (_b.label) {
@@ -676,18 +660,31 @@ var Snapshot = /** @class */ (function () {
676
660
  return [4 /*yield*/, updateImageSource(svg)];
677
661
  case 1:
678
662
  _b.sent();
679
- return [2 /*return*/, new Promise(function (resolve) {
680
- _this.getCanvasData(svg, __assign({ backgroundColor: backgroundColor }, (toImageOptions !== null && toImageOptions !== void 0 ? toImageOptions : {}))).then(function (canvas) {
681
- canvas.toBlob(function (blob) {
682
- // 输出图片数据以及图片宽高
683
- resolve({
684
- data: blob,
685
- width: canvas.width,
686
- height: canvas.height,
687
- });
688
- }, "image/".concat(fileType !== null && fileType !== void 0 ? fileType : 'png'));
689
- });
690
- })];
663
+ if (!(fileType === 'svg')) return [3 /*break*/, 3];
664
+ return [4 /*yield*/, this.cloneSvg(svg)];
665
+ case 2:
666
+ copy = _b.sent();
667
+ svgString = new XMLSerializer().serializeToString(copy);
668
+ blob = new Blob([svgString], {
669
+ type: 'image/svg+xml;charset=utf-8',
670
+ });
671
+ return [2 /*return*/, {
672
+ data: blob,
673
+ width: 0,
674
+ height: 0,
675
+ }];
676
+ case 3: return [2 /*return*/, new Promise(function (resolve) {
677
+ _this.getCanvasData(svg, __assign({ backgroundColor: backgroundColor }, (toImageOptions !== null && toImageOptions !== void 0 ? toImageOptions : {}))).then(function (canvas) {
678
+ canvas.toBlob(function (blob) {
679
+ // 输出图片数据以及图片宽高
680
+ resolve({
681
+ data: blob,
682
+ width: canvas.width,
683
+ height: canvas.height,
684
+ });
685
+ }, "image/".concat(fileType !== null && fileType !== void 0 ? fileType : 'png'));
686
+ });
687
+ })];
691
688
  }
692
689
  });
693
690
  });
@@ -704,9 +701,7 @@ var Snapshot = /** @class */ (function () {
704
701
  var _this = this;
705
702
  return __generator(this, function (_a) {
706
703
  switch (_a.label) {
707
- case 0:
708
- console.log('getSnapshotBase64---------------', backgroundColor, fileType, toImageOptions);
709
- return [4 /*yield*/, this.withExportPreparation(function () { return _this._getSnapshotBase64(backgroundColor, fileType, toImageOptions); }, toImageOptions)];
704
+ case 0: return [4 /*yield*/, this.withExportPreparation(function () { return _this._getSnapshotBase64(backgroundColor, fileType, toImageOptions); }, toImageOptions)];
710
705
  case 1: return [2 /*return*/, _a.sent()];
711
706
  }
712
707
  });
@@ -31,12 +31,6 @@ export declare class RectResizeModel extends RectNodeModel {
31
31
  constructor(data: ResizeNodeConfig, graphModel: GraphModel);
32
32
  initNodeData(data: any): void;
33
33
  getOutlineStyle(): LogicFlow.OutlineTheme;
34
- getResizeOutlineStyle(): {
35
- fill: string;
36
- stroke: string;
37
- strokeWidth: number;
38
- strokeDasharray: string;
39
- };
40
34
  getControlPointStyle(): {
41
35
  width: number;
42
36
  height: number;
@@ -51,14 +51,6 @@ var RectResizeModel = /** @class */ (function (_super) {
51
51
  }
52
52
  return style;
53
53
  };
54
- RectResizeModel.prototype.getResizeOutlineStyle = function () {
55
- return {
56
- fill: 'none',
57
- stroke: 'transparent', // 矩形默认不显示调整边框
58
- strokeWidth: 1,
59
- strokeDasharray: '3,3',
60
- };
61
- };
62
54
  RectResizeModel.prototype.getControlPointStyle = function () {
63
55
  return {
64
56
  width: 7,
@@ -110,8 +102,7 @@ var RectResizeView = /** @class */ (function (_super) {
110
102
  return _super.prototype.getShape.call(this);
111
103
  };
112
104
  RectResizeView.prototype.getShape = function () {
113
- var _a = this.props, isSelected = _a.model.isSelected, isSilentMode = _a.graphModel.editConfigModel.isSilentMode;
114
- return ((0, jsx_runtime_1.jsxs)("g", { children: [this.getResizeShape(), isSelected && !isSilentMode ? this.getControlGroup() : ''] }));
105
+ return (0, jsx_runtime_1.jsx)("g", { children: this.getResizeShape() });
115
106
  };
116
107
  return RectResizeView;
117
108
  }(core_1.RectNode));
@@ -1,3 +1,4 @@
1
1
  declare function handleAttributes(obj: any): any;
2
+ declare function escapeXml(text: string): string;
2
3
  declare function lfJson2Xml(obj: any): string;
3
- export { lfJson2Xml, handleAttributes };
4
+ export { lfJson2Xml, handleAttributes, escapeXml };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.handleAttributes = exports.lfJson2Xml = void 0;
3
+ exports.escapeXml = exports.handleAttributes = exports.lfJson2Xml = void 0;
4
4
  /* eslint-disable guard-for-in */
5
5
  function type(obj) {
6
6
  return Object.prototype.toString.call(obj);
@@ -25,6 +25,18 @@ function handleAttributes(obj) {
25
25
  return obj;
26
26
  }
27
27
  exports.handleAttributes = handleAttributes;
28
+ function escapeXml(text) {
29
+ if (text == null)
30
+ return '';
31
+ return text
32
+ .toString()
33
+ .replace(/&/g, '&amp;')
34
+ .replace(/</g, '&lt;')
35
+ .replace(/>/g, '&gt;')
36
+ .replace(/"/g, '&quot;')
37
+ .replace(/'/g, '&apos;');
38
+ }
39
+ exports.escapeXml = escapeXml;
28
40
  function getAttributes(obj) {
29
41
  var tmp = obj;
30
42
  try {
@@ -35,7 +47,7 @@ function getAttributes(obj) {
35
47
  catch (error) {
36
48
  tmp = JSON.stringify(handleAttributes(obj)).replace(/"/g, "'");
37
49
  }
38
- return tmp;
50
+ return escapeXml(String(tmp));
39
51
  }
40
52
  var tn = '\t\n';
41
53
  // @see issue https://github.com/didi/LogicFlow/issues/718, refactoring of function toXml
@@ -45,8 +57,11 @@ function toXml(obj, name, depth) {
45
57
  var prefix = tn + frontSpace;
46
58
  if (name === '-json')
47
59
  return '';
60
+ if (obj !== 0 && obj !== false && !obj) {
61
+ return "".concat(prefix, "<").concat(name, " />");
62
+ }
48
63
  if (name === '#text') {
49
- return prefix + obj;
64
+ return prefix + escapeXml(String(obj));
50
65
  }
51
66
  if (name === '#cdata-section') {
52
67
  return "".concat(prefix, "<![CDATA[").concat(obj, "]]>");
@@ -74,7 +89,7 @@ function toXml(obj, name, depth) {
74
89
  attributes_1 + (children_1 !== '' ? ">".concat(children_1).concat(prefix, "</").concat(name, ">") : ' />');
75
90
  }
76
91
  else {
77
- str += "".concat(prefix, "<").concat(name, ">").concat(obj.toString(), "</").concat(name, ">");
92
+ str += "".concat(prefix, "<").concat(name, ">").concat(escapeXml(String(obj)), "</").concat(name, ">");
78
93
  }
79
94
  return str;
80
95
  }
@@ -8,6 +8,7 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.lfXml2Json = void 0;
10
10
  var lodash_es_1 = require("lodash-es");
11
+ var json2xml_1 = require("./json2xml");
11
12
  // ========================================================================
12
13
  // XML.ObjTree -- XML source code from/to JavaScript object like E4X
13
14
  // ========================================================================
@@ -298,13 +299,7 @@ XML.ObjTree.prototype.scalar_to_xml = function (name, text) {
298
299
  return "<".concat(name, ">").concat(this.xml_escape(text), "</").concat(name, ">\n");
299
300
  };
300
301
  // method: xml_escape( text )
301
- XML.ObjTree.prototype.xml_escape = function (text) {
302
- return text
303
- .replace(/&/g, '&')
304
- .replace(/</g, '<')
305
- .replace(/>/g, '>')
306
- .replace(/"/g, '"');
307
- };
302
+ XML.ObjTree.prototype.xml_escape = json2xml_1.escapeXml;
308
303
  /*
309
304
  // ========================================================================
310
305
 
@@ -4,6 +4,7 @@ type ControlItem = {
4
4
  iconClass: string;
5
5
  title: string;
6
6
  text: string;
7
+ hideText?: boolean;
7
8
  onClick?: (lf: LogicFlow, e: MouseEvent) => void;
8
9
  onMouseEnter?: (lf: LogicFlow, e: MouseEvent) => void;
9
10
  onMouseLeave?: (lf: LogicFlow, e: MouseEvent) => void;
@@ -26,6 +26,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
28
  exports.Control = void 0;
29
+ var lodash_es_1 = require("lodash-es");
29
30
  var Control = /** @class */ (function () {
30
31
  function Control(_a) {
31
32
  var lf = _a.lf;
@@ -36,6 +37,7 @@ var Control = /** @class */ (function () {
36
37
  iconClass: 'lf-control-zoomOut',
37
38
  title: '缩小流程图',
38
39
  text: '缩小',
40
+ hideText: false,
39
41
  onClick: function () {
40
42
  _this.lf.zoom(false);
41
43
  },
@@ -45,6 +47,7 @@ var Control = /** @class */ (function () {
45
47
  iconClass: 'lf-control-zoomIn',
46
48
  title: '放大流程图',
47
49
  text: '放大',
50
+ hideText: false,
48
51
  onClick: function () {
49
52
  _this.lf.zoom(true);
50
53
  },
@@ -54,6 +57,7 @@ var Control = /** @class */ (function () {
54
57
  iconClass: 'lf-control-fit',
55
58
  title: '恢复流程原有尺寸',
56
59
  text: '适应',
60
+ hideText: false,
57
61
  onClick: function () {
58
62
  _this.lf.resetZoom();
59
63
  },
@@ -63,6 +67,7 @@ var Control = /** @class */ (function () {
63
67
  iconClass: 'lf-control-undo',
64
68
  title: '回到上一步',
65
69
  text: '上一步',
70
+ hideText: false,
66
71
  onClick: function () {
67
72
  _this.lf.undo();
68
73
  },
@@ -72,6 +77,7 @@ var Control = /** @class */ (function () {
72
77
  iconClass: 'lf-control-redo',
73
78
  title: '移到下一步',
74
79
  text: '下一步',
80
+ hideText: false,
75
81
  onClick: function () {
76
82
  _this.lf.redo();
77
83
  },
@@ -102,15 +108,16 @@ var Control = /** @class */ (function () {
102
108
  };
103
109
  Control.prototype.getControlTool = function () {
104
110
  var _this = this;
105
- var NORMAL = 'lf-control-item';
111
+ var themeMode = this.lf.graphModel.themeMode;
112
+ var NORMAL = "lf-control-item-".concat(themeMode, " lf-control-item");
106
113
  var DISABLED = 'lf-control-item disabled';
107
114
  var controlTool = document.createElement('div');
108
115
  var controlElements = [];
109
- controlTool.className = 'lf-control';
110
- this.controlItems.forEach(function (item) {
116
+ controlTool.className = "lf-control-".concat(themeMode, " lf-control");
117
+ var itemsToRender = __spreadArray([], __read(this.controlItems), false);
118
+ itemsToRender.forEach(function (item) {
111
119
  var itemContainer = document.createElement('div');
112
120
  var icon = document.createElement('i');
113
- var text = document.createElement('span');
114
121
  itemContainer.className = DISABLED;
115
122
  item.onClick && (itemContainer.onclick = item.onClick.bind(null, _this.lf));
116
123
  item.onMouseEnter &&
@@ -118,18 +125,24 @@ var Control = /** @class */ (function () {
118
125
  item.onMouseLeave &&
119
126
  (itemContainer.onmouseleave = item.onMouseLeave.bind(null, _this.lf));
120
127
  icon.className = item.iconClass;
121
- text.className = 'lf-control-text';
122
- text.title = item.title;
123
- text.innerText = item.text;
124
- itemContainer.append(icon, text);
125
- switch (item.text) {
126
- case '上一步':
128
+ if ((0, lodash_es_1.isNil)(item.hideText) || item.hideText !== true) {
129
+ var text = document.createElement('span');
130
+ text.className = "lf-control-text-".concat(themeMode, " lf-control-text");
131
+ text.title = item.title;
132
+ text.innerText = item.text;
133
+ itemContainer.append(icon, text);
134
+ }
135
+ else {
136
+ itemContainer.append(icon);
137
+ }
138
+ switch (item.key) {
139
+ case 'undo':
127
140
  _this.lf.on('history:change', function (_a) {
128
141
  var undoAble = _a.data.undoAble;
129
142
  itemContainer.className = undoAble ? NORMAL : DISABLED;
130
143
  });
131
144
  break;
132
- case '下一步':
145
+ case 'redo':
133
146
  _this.lf.on('history:change', function (_a) {
134
147
  var redoAble = _a.data.redoAble;
135
148
  itemContainer.className = redoAble ? NORMAL : DISABLED;
@@ -248,7 +248,7 @@ var MiniMap = /** @class */ (function () {
248
248
  * @param options
249
249
  */
250
250
  MiniMap.prototype.setOption = function (options) {
251
- var _a = options.width, width = _a === void 0 ? 150 : _a, _b = options.height, height = _b === void 0 ? 220 : _b, _c = options.showEdge, showEdge = _c === void 0 ? false : _c, _d = options.isShowHeader, isShowHeader = _d === void 0 ? false : _d, _e = options.isShowCloseIcon, isShowCloseIcon = _e === void 0 ? false : _e, leftPosition = options.leftPosition, topPosition = options.topPosition, _f = options.rightPosition, rightPosition = _f === void 0 ? 0 : _f, _g = options.bottomPosition, bottomPosition = _g === void 0 ? 0 : _g, _h = options.headerTitle, headerTitle = _h === void 0 ? '导航' : _h;
251
+ var _a = options.width, width = _a === void 0 ? 200 : _a, _b = options.height, height = _b === void 0 ? 150 : _b, _c = options.showEdge, showEdge = _c === void 0 ? false : _c, _d = options.isShowHeader, isShowHeader = _d === void 0 ? false : _d, _e = options.isShowCloseIcon, isShowCloseIcon = _e === void 0 ? false : _e, leftPosition = options.leftPosition, topPosition = options.topPosition, _f = options.rightPosition, rightPosition = _f === void 0 ? 0 : _f, _g = options.bottomPosition, bottomPosition = _g === void 0 ? 0 : _g, _h = options.headerTitle, headerTitle = _h === void 0 ? '导航' : _h;
252
252
  this.width = width;
253
253
  this.height = height;
254
254
  this.showEdge = showEdge;