@logicflow/extension 2.0.0-beta.0 → 2.0.0-beta.10
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.
- package/.turbo/turbo-build.log +146 -491
- package/dist/index.css +63 -0
- package/dist/index.min.js +42 -0
- package/dist/index.min.js.map +1 -0
- package/es/NodeResize/control/Control.d.ts +3 -3
- package/es/NodeResize/control/Control.js +13 -3
- package/es/NodeResize/control/Control.js.map +1 -1
- package/es/NodeResize/index.d.ts +4 -0
- package/es/NodeResize/index.js.map +1 -1
- package/es/NodeResize/node/DiamondResize.d.ts +1 -0
- package/es/NodeResize/node/DiamondResize.js +2 -1
- package/es/NodeResize/node/DiamondResize.js.map +1 -1
- package/es/NodeResize/node/EllipseResize.d.ts +1 -0
- package/es/NodeResize/node/EllipseResize.js +2 -1
- package/es/NodeResize/node/EllipseResize.js.map +1 -1
- package/es/NodeResize/node/HtmlResize.d.ts +1 -0
- package/es/NodeResize/node/HtmlResize.js +2 -1
- package/es/NodeResize/node/HtmlResize.js.map +1 -1
- package/es/bpmn/constant.d.ts +1 -1
- package/es/bpmn/constant.js +3 -0
- package/es/bpmn/constant.js.map +1 -1
- package/es/bpmn/index.d.ts +3 -6
- package/es/bpmn/index.js +5 -7
- package/es/bpmn/index.js.map +1 -1
- package/es/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
- package/es/components/control/index.d.ts +4 -4
- package/es/components/control/index.js.map +1 -1
- package/es/components/highlight/index.d.ts +6 -4
- package/es/components/highlight/index.js +32 -5
- package/es/components/highlight/index.js.map +1 -1
- package/es/components/menu/index.d.ts +1 -1
- package/es/components/menu/index.js +9 -10
- package/es/components/menu/index.js.map +1 -1
- package/es/components/mini-map/index.d.ts +1 -1
- package/es/components/mini-map/index.js +2 -2
- package/es/components/mini-map/index.js.map +1 -1
- package/es/components/selection-select/index.d.ts +1 -1
- package/es/components/selection-select/index.js.map +1 -1
- package/es/dynamic-group/index.d.ts +106 -0
- package/es/dynamic-group/index.js +536 -0
- package/es/dynamic-group/index.js.map +1 -0
- package/es/dynamic-group/model.d.ts +135 -0
- package/es/dynamic-group/model.js +413 -0
- package/es/dynamic-group/model.js.map +1 -0
- package/es/dynamic-group/node.d.ts +16 -0
- package/es/dynamic-group/node.js +143 -0
- package/es/dynamic-group/node.js.map +1 -0
- package/es/dynamic-group/utils.d.ts +17 -0
- package/es/dynamic-group/utils.js +27 -0
- package/es/dynamic-group/utils.js.map +1 -0
- package/es/index.css +63 -0
- package/es/index.d.ts +16 -8
- package/es/index.js +24 -8
- package/es/index.js.map +1 -1
- package/es/insert-node-in-polyline/index.js +3 -3
- package/es/insert-node-in-polyline/index.js.map +1 -1
- package/es/materials/group/GroupNode.d.ts +6 -10
- package/es/materials/group/GroupNode.js +8 -6
- package/es/materials/group/GroupNode.js.map +1 -1
- package/es/materials/group/index.d.ts +5 -5
- package/es/materials/group/index.js +25 -26
- package/es/materials/group/index.js.map +1 -1
- package/es/materials/node-selection/index.d.ts +6 -1
- package/es/materials/node-selection/index.js +64 -56
- package/es/materials/node-selection/index.js.map +1 -1
- package/es/mindmap/index.d.ts +2 -2
- package/es/style/index.css +63 -0
- package/es/style/index.less +73 -0
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/style/raw.js.map +1 -1
- package/es/tools/flow-path/index.js +0 -1
- package/es/tools/flow-path/index.js.map +1 -1
- package/es/tools/label/Label.d.ts +30 -0
- package/es/tools/label/Label.js +241 -0
- package/es/tools/label/Label.js.map +1 -0
- package/es/tools/label/LabelModel.d.ts +26 -0
- package/es/tools/label/LabelModel.js +86 -0
- package/es/tools/label/LabelModel.js.map +1 -0
- package/es/tools/label/LabelOverlay.d.ts +28 -0
- package/es/tools/label/LabelOverlay.js +161 -0
- package/es/tools/label/LabelOverlay.js.map +1 -0
- package/es/tools/label/algorithm.d.ts +16 -0
- package/es/tools/label/algorithm.js +27 -0
- package/es/tools/label/algorithm.js.map +1 -0
- package/es/tools/label/index.d.ts +59 -0
- package/es/tools/label/index.js +292 -0
- package/es/tools/label/index.js.map +1 -0
- package/es/tools/label/mediumEditor.d.ts +17 -0
- package/es/tools/label/mediumEditor.js +92 -0
- package/es/tools/label/mediumEditor.js.map +1 -0
- package/es/tools/label/utils.d.ts +64 -0
- package/es/tools/label/utils.js +336 -0
- package/es/tools/label/utils.js.map +1 -0
- package/es/tools/snapshot/index.d.ts +107 -11
- package/es/tools/snapshot/index.js +366 -149
- package/es/tools/snapshot/index.js.map +1 -1
- package/es/tools/snapshot/utils.d.ts +35 -0
- package/es/tools/snapshot/utils.js +238 -0
- package/es/tools/snapshot/utils.js.map +1 -0
- package/lib/NodeResize/control/Control.d.ts +3 -3
- package/lib/NodeResize/control/Control.js +13 -3
- package/lib/NodeResize/control/Control.js.map +1 -1
- package/lib/NodeResize/index.d.ts +4 -0
- package/lib/NodeResize/index.js.map +1 -1
- package/lib/NodeResize/node/DiamondResize.d.ts +1 -0
- package/lib/NodeResize/node/DiamondResize.js +2 -1
- package/lib/NodeResize/node/DiamondResize.js.map +1 -1
- package/lib/NodeResize/node/EllipseResize.d.ts +1 -0
- package/lib/NodeResize/node/EllipseResize.js +2 -1
- package/lib/NodeResize/node/EllipseResize.js.map +1 -1
- package/lib/NodeResize/node/HtmlResize.d.ts +1 -0
- package/lib/NodeResize/node/HtmlResize.js +2 -1
- package/lib/NodeResize/node/HtmlResize.js.map +1 -1
- package/lib/bpmn/constant.d.ts +1 -1
- package/lib/bpmn/constant.js +3 -0
- package/lib/bpmn/constant.js.map +1 -1
- package/lib/bpmn/index.d.ts +3 -6
- package/lib/bpmn/index.js +5 -7
- package/lib/bpmn/index.js.map +1 -1
- package/lib/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
- package/lib/components/control/index.d.ts +4 -4
- package/lib/components/control/index.js.map +1 -1
- package/lib/components/highlight/index.d.ts +6 -4
- package/lib/components/highlight/index.js +32 -5
- package/lib/components/highlight/index.js.map +1 -1
- package/lib/components/menu/index.d.ts +1 -1
- package/lib/components/menu/index.js +9 -10
- package/lib/components/menu/index.js.map +1 -1
- package/lib/components/mini-map/index.d.ts +1 -1
- package/lib/components/mini-map/index.js +2 -2
- package/lib/components/mini-map/index.js.map +1 -1
- package/lib/components/selection-select/index.d.ts +1 -1
- package/lib/components/selection-select/index.js.map +1 -1
- package/lib/dynamic-group/index.d.ts +106 -0
- package/lib/dynamic-group/index.js +553 -0
- package/lib/dynamic-group/index.js.map +1 -0
- package/lib/dynamic-group/model.d.ts +135 -0
- package/lib/dynamic-group/model.js +416 -0
- package/lib/dynamic-group/model.js.map +1 -0
- package/lib/dynamic-group/node.d.ts +16 -0
- package/lib/dynamic-group/node.js +146 -0
- package/lib/dynamic-group/node.js.map +1 -0
- package/lib/dynamic-group/utils.d.ts +17 -0
- package/lib/dynamic-group/utils.js +32 -0
- package/lib/dynamic-group/utils.js.map +1 -0
- package/lib/index.css +63 -0
- package/lib/index.d.ts +16 -8
- package/lib/index.js +24 -8
- package/lib/index.js.map +1 -1
- package/lib/insert-node-in-polyline/index.js +2 -2
- package/lib/insert-node-in-polyline/index.js.map +1 -1
- package/lib/materials/group/GroupNode.d.ts +6 -10
- package/lib/materials/group/GroupNode.js +8 -6
- package/lib/materials/group/GroupNode.js.map +1 -1
- package/lib/materials/group/index.d.ts +5 -5
- package/lib/materials/group/index.js +24 -25
- package/lib/materials/group/index.js.map +1 -1
- package/lib/materials/node-selection/index.d.ts +6 -1
- package/lib/materials/node-selection/index.js +63 -55
- package/lib/materials/node-selection/index.js.map +1 -1
- package/lib/mindmap/index.d.ts +2 -2
- package/lib/style/index.css +63 -0
- package/lib/style/index.less +73 -0
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/style/raw.js.map +1 -1
- package/lib/tools/flow-path/index.js +0 -1
- package/lib/tools/flow-path/index.js.map +1 -1
- package/lib/tools/label/Label.d.ts +30 -0
- package/lib/tools/label/Label.js +247 -0
- package/lib/tools/label/Label.js.map +1 -0
- package/lib/tools/label/LabelModel.d.ts +26 -0
- package/lib/tools/label/LabelModel.js +89 -0
- package/lib/tools/label/LabelModel.js.map +1 -0
- package/lib/tools/label/LabelOverlay.d.ts +28 -0
- package/lib/tools/label/LabelOverlay.js +167 -0
- package/lib/tools/label/LabelOverlay.js.map +1 -0
- package/lib/tools/label/algorithm.d.ts +16 -0
- package/lib/tools/label/algorithm.js +32 -0
- package/lib/tools/label/algorithm.js.map +1 -0
- package/lib/tools/label/index.d.ts +59 -0
- package/lib/tools/label/index.js +298 -0
- package/lib/tools/label/index.js.map +1 -0
- package/lib/tools/label/mediumEditor.d.ts +17 -0
- package/lib/tools/label/mediumEditor.js +98 -0
- package/lib/tools/label/mediumEditor.js.map +1 -0
- package/lib/tools/label/utils.d.ts +64 -0
- package/lib/tools/label/utils.js +349 -0
- package/lib/tools/label/utils.js.map +1 -0
- package/lib/tools/snapshot/index.d.ts +107 -11
- package/lib/tools/snapshot/index.js +366 -149
- package/lib/tools/snapshot/index.js.map +1 -1
- package/lib/tools/snapshot/utils.d.ts +35 -0
- package/lib/tools/snapshot/utils.js +247 -0
- package/lib/tools/snapshot/utils.js.map +1 -0
- package/package.json +20 -3
- package/rollup.config.js +1 -1
- package/src/NodeResize/control/Control.tsx +13 -3
- package/src/NodeResize/index.ts +4 -0
- package/src/NodeResize/node/DiamondResize.tsx +2 -1
- package/src/NodeResize/node/EllipseResize.tsx +2 -1
- package/src/NodeResize/node/HtmlResize.tsx +2 -1
- package/src/bpmn/constant.ts +4 -1
- package/src/bpmn/index.ts +7 -4
- package/src/bpmn-elements-adapter/README.md +1 -3
- package/src/components/control/index.ts +4 -4
- package/src/components/highlight/index.ts +33 -6
- package/src/components/menu/index.ts +16 -13
- package/src/components/mini-map/index.ts +3 -3
- package/src/components/selection-select/index.ts +6 -2
- package/src/dynamic-group/index.ts +609 -0
- package/src/dynamic-group/model.ts +503 -0
- package/src/dynamic-group/node.ts +140 -0
- package/src/dynamic-group/utils.ts +33 -0
- package/src/index.ts +30 -8
- package/src/insert-node-in-polyline/index.ts +3 -3
- package/src/materials/group/GroupNode.ts +12 -12
- package/src/materials/group/index.ts +40 -40
- package/src/materials/node-selection/index.ts +78 -70
- package/src/style/index.less +73 -0
- package/src/style/raw.ts +64 -1
- package/src/tools/flow-path/index.ts +0 -1
- package/src/tools/label/Label.tsx +297 -0
- package/src/tools/label/LabelModel.ts +82 -0
- package/src/tools/label/LabelOverlay.tsx +159 -0
- package/src/tools/label/algorithm.ts +42 -0
- package/src/tools/label/index.ts +401 -0
- package/src/tools/label/mediumEditor.ts +94 -0
- package/src/tools/label/utils.ts +395 -0
- package/src/tools/snapshot/README.md +141 -5
- package/src/tools/snapshot/index.ts +288 -101
- package/src/tools/snapshot/utils.ts +163 -0
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 当获取图片失败时会返回失败信息,是 text/plain 类型的数据
|
|
3
|
+
* @param str - 图片内容
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
export declare function isTextPlainBase64(str: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* 将网络图片转为 base64
|
|
9
|
+
* @param url - 图片地址
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function convertImageToBase64(url: string): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* 使用 base64 的图片替换 img 标签的 src 或 image 标签的 href
|
|
15
|
+
* @param node - html 节点或 svg 节点
|
|
16
|
+
*/
|
|
17
|
+
export declare function updateImageSrcOrHrefWithBase64Image(node: HTMLImageElement | SVGImageElement, attrName: 'src' | 'href'): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* 使用 base64 的图片替换背景图片
|
|
20
|
+
* @param node - html 节点
|
|
21
|
+
* @param styleAttr - 样式属性名称
|
|
22
|
+
*/
|
|
23
|
+
export declare function updateBackgroundImageWithBase64Image(node: HTMLElement, url: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* 更新图片数据
|
|
26
|
+
* @param node - 节点
|
|
27
|
+
*/
|
|
28
|
+
export declare function updateImageSource(node: HTMLElement | SVGElement): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* 重新复制canvas 用于在不裁剪原canvas的基础上通过拉伸方式达到自定义宽高目的
|
|
31
|
+
* @param originCanvas HTMLCanvasElement
|
|
32
|
+
* @param targetWidth number
|
|
33
|
+
* @param targetHeight number
|
|
34
|
+
*/
|
|
35
|
+
export declare function copyCanvas(originCanvas: HTMLCanvasElement, targetWidth: number, targetHeight: number): HTMLCanvasElement;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
39
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
40
|
+
if (!m) return o;
|
|
41
|
+
var i = m.call(o), r, ar = [], e;
|
|
42
|
+
try {
|
|
43
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
44
|
+
}
|
|
45
|
+
catch (error) { e = { error: error }; }
|
|
46
|
+
finally {
|
|
47
|
+
try {
|
|
48
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
49
|
+
}
|
|
50
|
+
finally { if (e) throw e.error; }
|
|
51
|
+
}
|
|
52
|
+
return ar;
|
|
53
|
+
};
|
|
54
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
55
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
56
|
+
if (ar || !(i in from)) {
|
|
57
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
58
|
+
ar[i] = from[i];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
62
|
+
};
|
|
63
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
+
exports.copyCanvas = exports.updateImageSource = exports.updateBackgroundImageWithBase64Image = exports.updateImageSrcOrHrefWithBase64Image = exports.convertImageToBase64 = exports.isTextPlainBase64 = void 0;
|
|
65
|
+
/**
|
|
66
|
+
* 图片缓存, 已请求过的图片直接从缓存中获取
|
|
67
|
+
*/
|
|
68
|
+
var imageCache = {};
|
|
69
|
+
/**
|
|
70
|
+
* 当获取图片失败时会返回失败信息,是 text/plain 类型的数据
|
|
71
|
+
* @param str - 图片内容
|
|
72
|
+
* @returns
|
|
73
|
+
*/
|
|
74
|
+
function isTextPlainBase64(str) {
|
|
75
|
+
return str.startsWith('data:text/plain');
|
|
76
|
+
}
|
|
77
|
+
exports.isTextPlainBase64 = isTextPlainBase64;
|
|
78
|
+
/**
|
|
79
|
+
* 将网络图片转为 base64
|
|
80
|
+
* @param url - 图片地址
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
function convertImageToBase64(url) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
85
|
+
return __generator(this, function (_a) {
|
|
86
|
+
if (imageCache[url]) {
|
|
87
|
+
return [2 /*return*/, imageCache[url]];
|
|
88
|
+
}
|
|
89
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
90
|
+
try {
|
|
91
|
+
fetch(url)
|
|
92
|
+
.then(function (response) { return response.blob(); })
|
|
93
|
+
.then(function (blob) {
|
|
94
|
+
var reader = new FileReader();
|
|
95
|
+
reader.onloadend = function () {
|
|
96
|
+
resolve((imageCache[url] = reader.result));
|
|
97
|
+
};
|
|
98
|
+
reader.onerror = reject;
|
|
99
|
+
reader.readAsDataURL(blob);
|
|
100
|
+
})
|
|
101
|
+
.catch(function () {
|
|
102
|
+
resolve((imageCache[url] = url));
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
// 如果转换失败,后续大概率仍然会失败,因此直接缓存
|
|
107
|
+
return (imageCache[url] = url);
|
|
108
|
+
}
|
|
109
|
+
})];
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
exports.convertImageToBase64 = convertImageToBase64;
|
|
114
|
+
/**
|
|
115
|
+
* 使用 base64 的图片替换 img 标签的 src 或 image 标签的 href
|
|
116
|
+
* @param node - html 节点或 svg 节点
|
|
117
|
+
*/
|
|
118
|
+
function updateImageSrcOrHrefWithBase64Image(node, attrName) {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
120
|
+
var url, base64Image, error_1;
|
|
121
|
+
return __generator(this, function (_a) {
|
|
122
|
+
switch (_a.label) {
|
|
123
|
+
case 0:
|
|
124
|
+
_a.trys.push([0, 2, , 3]);
|
|
125
|
+
url = node.getAttribute(attrName) || '';
|
|
126
|
+
// 已经是 base64 图片,不需要处理
|
|
127
|
+
if (url.startsWith('data:')) {
|
|
128
|
+
return [2 /*return*/];
|
|
129
|
+
}
|
|
130
|
+
return [4 /*yield*/, convertImageToBase64(url)];
|
|
131
|
+
case 1:
|
|
132
|
+
base64Image = _a.sent();
|
|
133
|
+
if (isTextPlainBase64(base64Image)) {
|
|
134
|
+
return [2 /*return*/];
|
|
135
|
+
}
|
|
136
|
+
node.setAttribute(attrName, base64Image);
|
|
137
|
+
return [3 /*break*/, 3];
|
|
138
|
+
case 2:
|
|
139
|
+
error_1 = _a.sent();
|
|
140
|
+
console.error(error_1);
|
|
141
|
+
return [3 /*break*/, 3];
|
|
142
|
+
case 3: return [2 /*return*/];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
exports.updateImageSrcOrHrefWithBase64Image = updateImageSrcOrHrefWithBase64Image;
|
|
148
|
+
/**
|
|
149
|
+
* 使用 base64 的图片替换背景图片
|
|
150
|
+
* @param node - html 节点
|
|
151
|
+
* @param styleAttr - 样式属性名称
|
|
152
|
+
*/
|
|
153
|
+
function updateBackgroundImageWithBase64Image(node, url) {
|
|
154
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
155
|
+
var base64Image, error_2;
|
|
156
|
+
return __generator(this, function (_a) {
|
|
157
|
+
switch (_a.label) {
|
|
158
|
+
case 0:
|
|
159
|
+
_a.trys.push([0, 2, , 3]);
|
|
160
|
+
// 已经是 base64 图片,不需要处理
|
|
161
|
+
if (url.startsWith('data:')) {
|
|
162
|
+
return [2 /*return*/];
|
|
163
|
+
}
|
|
164
|
+
return [4 /*yield*/, convertImageToBase64(url)];
|
|
165
|
+
case 1:
|
|
166
|
+
base64Image = _a.sent();
|
|
167
|
+
if (isTextPlainBase64(base64Image)) {
|
|
168
|
+
return [2 /*return*/];
|
|
169
|
+
}
|
|
170
|
+
node.style.backgroundImage = "url(".concat(base64Image, ")");
|
|
171
|
+
return [3 /*break*/, 3];
|
|
172
|
+
case 2:
|
|
173
|
+
error_2 = _a.sent();
|
|
174
|
+
console.error(error_2);
|
|
175
|
+
return [3 /*break*/, 3];
|
|
176
|
+
case 3: return [2 /*return*/];
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
exports.updateBackgroundImageWithBase64Image = updateBackgroundImageWithBase64Image;
|
|
182
|
+
/**
|
|
183
|
+
* 更新图片数据
|
|
184
|
+
* @param node - 节点
|
|
185
|
+
*/
|
|
186
|
+
function updateImageSource(node) {
|
|
187
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
188
|
+
var nodes, nodePtr, promises, _a, background, backgroundImage, backgroundUrlMatch, imageUrl, backgroundImageUrlMatch, imageUrl;
|
|
189
|
+
return __generator(this, function (_b) {
|
|
190
|
+
switch (_b.label) {
|
|
191
|
+
case 0:
|
|
192
|
+
nodes = [node];
|
|
193
|
+
promises = [];
|
|
194
|
+
while (nodes.length) {
|
|
195
|
+
nodePtr = nodes.shift();
|
|
196
|
+
if (nodePtr.children.length) {
|
|
197
|
+
nodes.push.apply(nodes, __spreadArray([], __read(nodePtr.children), false));
|
|
198
|
+
}
|
|
199
|
+
if (nodePtr instanceof HTMLElement) {
|
|
200
|
+
_a = nodePtr.style, background = _a.background, backgroundImage = _a.backgroundImage;
|
|
201
|
+
backgroundUrlMatch = background.match(/url\(["']?(.*?)["']?\)/);
|
|
202
|
+
if (backgroundUrlMatch && backgroundUrlMatch[1]) {
|
|
203
|
+
imageUrl = backgroundUrlMatch[1];
|
|
204
|
+
promises.push(updateBackgroundImageWithBase64Image(nodePtr, imageUrl));
|
|
205
|
+
}
|
|
206
|
+
backgroundImageUrlMatch = backgroundImage.match(/url\(["']?(.*?)["']?\)/);
|
|
207
|
+
if (backgroundImageUrlMatch && backgroundImageUrlMatch[1]) {
|
|
208
|
+
imageUrl = backgroundImageUrlMatch[1];
|
|
209
|
+
promises.push(updateBackgroundImageWithBase64Image(nodePtr, imageUrl));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// 如果有 img 和 image 标签,尝试将 src 和 href 替换为 base64 图片
|
|
213
|
+
if (nodePtr instanceof HTMLImageElement) {
|
|
214
|
+
promises.push(updateImageSrcOrHrefWithBase64Image(nodePtr, 'src'));
|
|
215
|
+
}
|
|
216
|
+
else if (nodePtr instanceof SVGImageElement) {
|
|
217
|
+
promises.push(updateImageSrcOrHrefWithBase64Image(nodePtr, 'href'));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
221
|
+
case 1:
|
|
222
|
+
_b.sent();
|
|
223
|
+
return [2 /*return*/];
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
exports.updateImageSource = updateImageSource;
|
|
229
|
+
/**
|
|
230
|
+
* 重新复制canvas 用于在不裁剪原canvas的基础上通过拉伸方式达到自定义宽高目的
|
|
231
|
+
* @param originCanvas HTMLCanvasElement
|
|
232
|
+
* @param targetWidth number
|
|
233
|
+
* @param targetHeight number
|
|
234
|
+
*/
|
|
235
|
+
function copyCanvas(originCanvas, targetWidth, targetHeight) {
|
|
236
|
+
var newCanvas = document.createElement('canvas');
|
|
237
|
+
newCanvas.width = targetWidth;
|
|
238
|
+
newCanvas.height = targetHeight;
|
|
239
|
+
var newCtx = newCanvas.getContext('2d');
|
|
240
|
+
if (newCtx) {
|
|
241
|
+
// 注意: 自定义宽高时,可能会拉伸图形,这时候padding也会被拉伸导致不准确
|
|
242
|
+
newCtx.drawImage(originCanvas, 0, 0, originCanvas.width, originCanvas.height, 0, 0, targetWidth, targetHeight);
|
|
243
|
+
}
|
|
244
|
+
return newCanvas;
|
|
245
|
+
}
|
|
246
|
+
exports.copyCanvas = copyCanvas;
|
|
247
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/snapshot/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logicflow/extension",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.10",
|
|
4
4
|
"description": "LogicFlow Extensions",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
8
|
+
"unpkg": "dist/index.min.js",
|
|
9
|
+
"jsdelivr": "dist/index.min.js",
|
|
10
|
+
"homepage": "https://site.logic-flow.cn",
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/didi/LogicFlow",
|
|
14
|
+
"directory": "packages/extension"
|
|
15
|
+
},
|
|
8
16
|
"keywords": [
|
|
9
17
|
"@logicflow/extension",
|
|
10
18
|
"LogicFlow"
|
|
11
19
|
],
|
|
12
20
|
"author": "Logicflow-Team",
|
|
13
21
|
"license": "Apache-2.0",
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"@logicflow/core": "2.0.0-beta.10"
|
|
24
|
+
},
|
|
14
25
|
"dependencies": {
|
|
15
26
|
"@antv/hierarchy": "^0.6.11",
|
|
27
|
+
"classnames": "^2.3.2",
|
|
28
|
+
"lodash-es": "^4.17.21",
|
|
29
|
+
"medium-editor": "^5.23.3",
|
|
30
|
+
"mobx": "^5.15.7",
|
|
16
31
|
"preact": "^10.17.1",
|
|
17
|
-
"
|
|
32
|
+
"rangy": "^1.3.1",
|
|
33
|
+
"vanilla-picker": "^2.12.3",
|
|
34
|
+
"@logicflow/core": "2.0.0-beta.10"
|
|
18
35
|
},
|
|
19
36
|
"scripts": {
|
|
20
37
|
"clean:turbo": "rss",
|
package/rollup.config.js
CHANGED
|
@@ -307,6 +307,8 @@ class Control extends Component<IControlProps, IControlState> {
|
|
|
307
307
|
// 更新边
|
|
308
308
|
this.updateEdgePointByAnchors()
|
|
309
309
|
this.eventEmit({
|
|
310
|
+
deltaX,
|
|
311
|
+
deltaY,
|
|
310
312
|
beforeNode,
|
|
311
313
|
afterNode,
|
|
312
314
|
})
|
|
@@ -373,6 +375,8 @@ class Control extends Component<IControlProps, IControlState> {
|
|
|
373
375
|
// 更新边
|
|
374
376
|
this.updateEdgePointByAnchors()
|
|
375
377
|
this.eventEmit({
|
|
378
|
+
deltaX,
|
|
379
|
+
deltaY,
|
|
376
380
|
beforeNode: {
|
|
377
381
|
...beforeNode,
|
|
378
382
|
rx,
|
|
@@ -444,11 +448,13 @@ class Control extends Component<IControlProps, IControlState> {
|
|
|
444
448
|
// 更新边
|
|
445
449
|
this.updateEdgePointByAnchors()
|
|
446
450
|
this.eventEmit({
|
|
451
|
+
deltaX,
|
|
452
|
+
deltaY,
|
|
447
453
|
beforeNode,
|
|
448
454
|
afterNode,
|
|
449
455
|
})
|
|
450
456
|
}
|
|
451
|
-
eventEmit = ({ beforeNode, afterNode }: any) => {
|
|
457
|
+
eventEmit = ({ deltaX, deltaY, beforeNode, afterNode }: any) => {
|
|
452
458
|
const { id, modelType, type } = this.nodeModel
|
|
453
459
|
const oldNodeSize = {
|
|
454
460
|
id,
|
|
@@ -463,8 +469,12 @@ class Control extends Component<IControlProps, IControlState> {
|
|
|
463
469
|
...afterNode,
|
|
464
470
|
}
|
|
465
471
|
this.graphModel.eventCenter.emit('node:resize', {
|
|
466
|
-
oldNodeSize,
|
|
467
|
-
newNodeSize,
|
|
472
|
+
preData: oldNodeSize,
|
|
473
|
+
data: newNodeSize,
|
|
474
|
+
deltaX,
|
|
475
|
+
deltaY,
|
|
476
|
+
index: this.index,
|
|
477
|
+
model: this.nodeModel,
|
|
468
478
|
})
|
|
469
479
|
}
|
|
470
480
|
onDragging = ({ deltaX, deltaY }: VectorData) => {
|
package/src/NodeResize/index.ts
CHANGED
package/src/bpmn/constant.ts
CHANGED
|
@@ -25,7 +25,7 @@ export const UserTaskConfig = {
|
|
|
25
25
|
height: 80,
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
export const theme: LogicFlow.
|
|
28
|
+
export const theme: Partial<LogicFlow.Theme> = {
|
|
29
29
|
rect: {
|
|
30
30
|
radius: 5,
|
|
31
31
|
stroke: 'rgb(24, 125, 255)',
|
|
@@ -43,6 +43,9 @@ export const theme: LogicFlow.CommonTheme = {
|
|
|
43
43
|
selectedStroke: 'rgb(24, 125, 255)',
|
|
44
44
|
},
|
|
45
45
|
edgeText: {
|
|
46
|
+
textWidth: 100,
|
|
47
|
+
overflowMode: 'default',
|
|
48
|
+
fontSize: 12,
|
|
46
49
|
background: {
|
|
47
50
|
fill: 'white',
|
|
48
51
|
height: 14,
|
package/src/bpmn/index.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import LogicFlow from '@logicflow/core'
|
|
1
2
|
import { theme } from './constant'
|
|
2
3
|
import {
|
|
3
4
|
StartEvent,
|
|
@@ -22,10 +23,12 @@ import {
|
|
|
22
23
|
ServiceTaskModel,
|
|
23
24
|
} from './tasks'
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
static pluginName = 'bpmnElement'
|
|
26
|
+
import ExtensionDefinition = LogicFlow.ExtensionDefinition
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const BpmnElement: ExtensionDefinition = {
|
|
29
|
+
pluginName: 'bpmnElement',
|
|
30
|
+
|
|
31
|
+
install(lf) {
|
|
29
32
|
lf.setTheme(theme)
|
|
30
33
|
lf.register(StartEvent)
|
|
31
34
|
lf.register(EndEvent)
|
|
@@ -37,7 +40,7 @@ class BpmnElement {
|
|
|
37
40
|
lf.register(SequenceFlow)
|
|
38
41
|
lf.setDefaultEdgeType('bpmn:sequenceFlow')
|
|
39
42
|
}
|
|
40
|
-
}
|
|
43
|
+
},
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
export {
|
|
@@ -5,9 +5,9 @@ type ControlItem = {
|
|
|
5
5
|
iconClass: string
|
|
6
6
|
title: string
|
|
7
7
|
text: string
|
|
8
|
-
onClick?: (lf: LogicFlow) => void
|
|
9
|
-
onMouseEnter?: (lf: LogicFlow) => void
|
|
10
|
-
onMouseLeave?: (lf: LogicFlow) => void
|
|
8
|
+
onClick?: (lf: LogicFlow, e: MouseEvent) => void
|
|
9
|
+
onMouseEnter?: (lf: LogicFlow, e: MouseEvent) => void
|
|
10
|
+
onMouseLeave?: (lf: LogicFlow, e: MouseEvent) => void
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export class Control {
|
|
@@ -64,7 +64,7 @@ export class Control {
|
|
|
64
64
|
private domContainer?: HTMLElement
|
|
65
65
|
private toolEl?: HTMLElement
|
|
66
66
|
|
|
67
|
-
constructor({ lf }: LogicFlow.
|
|
67
|
+
constructor({ lf }: LogicFlow.IExtensionProps) {
|
|
68
68
|
this.lf = lf
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import LogicFlow, { BaseNodeModel } from '@logicflow/core'
|
|
2
|
+
import { concat } from 'lodash-es'
|
|
2
3
|
|
|
3
4
|
// 后续并入FlowPath
|
|
4
5
|
const getPath = (id: string, lf: LogicFlow) => {
|
|
@@ -80,25 +81,28 @@ const getNodePath = (node, lf: LogicFlow) => {
|
|
|
80
81
|
return [...new Set([...incomingPaths.flat(), ...outgoingPaths.flat()])]
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
type IMode = 'single' | 'path'
|
|
84
|
+
type IMode = 'single' | 'path' | 'neighbour'
|
|
84
85
|
|
|
85
86
|
export class Highlight {
|
|
86
87
|
lf: LogicFlow
|
|
87
88
|
static pluginName = 'highlight'
|
|
88
89
|
mode: IMode = 'path'
|
|
89
|
-
|
|
90
|
+
enable = true
|
|
90
91
|
tempStyles = {}
|
|
91
92
|
|
|
92
|
-
constructor({ lf }) {
|
|
93
|
+
constructor({ lf, options }) {
|
|
94
|
+
const { mode = 'path', enable = true } = options
|
|
93
95
|
this.lf = lf
|
|
96
|
+
this.mode = mode
|
|
97
|
+
this.enable = enable
|
|
94
98
|
}
|
|
95
99
|
|
|
96
100
|
setMode(mode: IMode) {
|
|
97
101
|
this.mode = mode
|
|
98
102
|
}
|
|
99
103
|
|
|
100
|
-
|
|
101
|
-
this.
|
|
104
|
+
setEnable(enable: boolean) {
|
|
105
|
+
this.enable = enable
|
|
102
106
|
}
|
|
103
107
|
|
|
104
108
|
private highlightSingle(id: string) {
|
|
@@ -115,6 +119,28 @@ export class Highlight {
|
|
|
115
119
|
}
|
|
116
120
|
}
|
|
117
121
|
|
|
122
|
+
private highlightNeighbours(id: string) {
|
|
123
|
+
const model = this.lf.getModelById(id)
|
|
124
|
+
|
|
125
|
+
if (model?.BaseType === 'node') {
|
|
126
|
+
// 高亮节点
|
|
127
|
+
model.updateStyles(this.tempStyles[id])
|
|
128
|
+
const { nodes: incomingNodes, edges: incomingEdges } = model.incoming
|
|
129
|
+
const { nodes: outgoingNodes, edges: outgoingEdges } = model.outgoing
|
|
130
|
+
concat(incomingNodes, outgoingNodes).forEach((node) => {
|
|
131
|
+
node.updateStyles(this.tempStyles[node.id])
|
|
132
|
+
})
|
|
133
|
+
concat(incomingEdges, outgoingEdges).forEach((edge) => {
|
|
134
|
+
edge.updateStyles(this.tempStyles[edge.id])
|
|
135
|
+
})
|
|
136
|
+
} else if (model?.BaseType === 'edge') {
|
|
137
|
+
// 高亮边及对应的节点
|
|
138
|
+
model.updateStyles(this.tempStyles[id])
|
|
139
|
+
model.sourceNode.updateStyles(this.tempStyles[model.sourceNode.id])
|
|
140
|
+
model.targetNode.updateStyles(this.tempStyles[model.targetNode.id])
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
118
144
|
private highlightPath(id: string) {
|
|
119
145
|
const path = getPath(id, this.lf)
|
|
120
146
|
path.forEach((_id) => {
|
|
@@ -124,7 +150,7 @@ export class Highlight {
|
|
|
124
150
|
}
|
|
125
151
|
|
|
126
152
|
highlight(id: string, mode: IMode = this.mode) {
|
|
127
|
-
if (this.
|
|
153
|
+
if (!this.enable) return
|
|
128
154
|
if (Object.keys(this.tempStyles).length) {
|
|
129
155
|
this.restoreHighlight()
|
|
130
156
|
}
|
|
@@ -141,6 +167,7 @@ export class Highlight {
|
|
|
141
167
|
|
|
142
168
|
const modeTrigger = {
|
|
143
169
|
single: this.highlightSingle.bind(this),
|
|
170
|
+
neighbour: this.highlightNeighbours.bind(this),
|
|
144
171
|
path: this.highlightPath.bind(this),
|
|
145
172
|
}
|
|
146
173
|
|