@logicflow/extension 2.0.21 → 2.1.0
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 +18 -17
- package/CHANGELOG.md +22 -0
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/components/mini-map/index.js +3 -0
- package/es/tools/label/index.js +10 -3
- package/es/tools/proximity-connect/index.js +1 -1
- package/es/tools/snapshot/index.d.ts +5 -0
- package/es/tools/snapshot/index.js +65 -8
- package/lib/components/mini-map/index.js +3 -0
- package/lib/tools/label/index.js +10 -3
- package/lib/tools/proximity-connect/index.js +1 -1
- package/lib/tools/snapshot/index.d.ts +5 -0
- package/lib/tools/snapshot/index.js +65 -8
- package/package.json +5 -3
- package/src/components/menu/index.ts +512 -204
- package/src/components/mini-map/index.ts +5 -0
- package/src/style/index.less +16 -4
- package/src/style/raw.ts +14 -4
- package/src/tools/label/index.ts +13 -5
- package/src/tools/proximity-connect/index.ts +1 -2
- package/src/tools/snapshot/index.ts +80 -9
- package/stats.html +1 -1
|
@@ -9,6 +9,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
9
9
|
};
|
|
10
10
|
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
11
|
};
|
|
12
|
+
import { createTeleportContainer } from '@logicflow/vue-node-registry';
|
|
12
13
|
var MiniMap = /** @class */ (function () {
|
|
13
14
|
function MiniMap(_a) {
|
|
14
15
|
var lf = _a.lf, LogicFlow = _a.LogicFlow, options = _a.options;
|
|
@@ -275,6 +276,8 @@ var MiniMap = /** @class */ (function () {
|
|
|
275
276
|
// minimap中禁用adapter。
|
|
276
277
|
// this.lfMap.adapterIn = (a) => a
|
|
277
278
|
// this.lfMap.adapterOut = (a) => a
|
|
279
|
+
// 创建teleport容器(vue3中生效)
|
|
280
|
+
createTeleportContainer(miniMapWrap, this.lfMap.graphModel.flowId);
|
|
278
281
|
this.miniMapWrap = miniMapWrap;
|
|
279
282
|
this.createViewPort();
|
|
280
283
|
miniMapWrap.addEventListener('click', this.mapClick);
|
package/es/tools/label/index.js
CHANGED
|
@@ -95,7 +95,7 @@ var Label = /** @class */ (function () {
|
|
|
95
95
|
var value = config.value, content = config.content, vertical = config.vertical, editable = config.editable, draggable = config.draggable, labelTextOverflowMode = config.textOverflowMode;
|
|
96
96
|
var textEdit = element.BaseType === 'node' ? nodeTextEdit : edgeTextEdit;
|
|
97
97
|
var textDraggable = element.BaseType === 'node' ? nodeTextDraggable : edgeTextDraggable;
|
|
98
|
-
return __assign(__assign({}, config), { zIndex: zIndex, labelWidth: labelWidth, content: content !== null && content !== void 0 ? content : value, vertical: vertical !== null && vertical !== void 0 ? vertical : false, editable: textEdit && editable, draggable: textDraggable && draggable, textOverflowMode: labelTextOverflowMode !== null && labelTextOverflowMode !== void 0 ? labelTextOverflowMode : textOverflowMode });
|
|
98
|
+
return __assign(__assign({}, config), { zIndex: zIndex, labelWidth: labelWidth, content: content !== null && content !== void 0 ? content : value, vertical: vertical !== null && vertical !== void 0 ? vertical : false, editable: Boolean(textEdit) && editable, draggable: Boolean(textDraggable) && draggable, textOverflowMode: labelTextOverflowMode !== null && labelTextOverflowMode !== void 0 ? labelTextOverflowMode : textOverflowMode });
|
|
99
99
|
});
|
|
100
100
|
};
|
|
101
101
|
/**
|
|
@@ -241,8 +241,15 @@ var Label = /** @class */ (function () {
|
|
|
241
241
|
var element = graphModel.getElement(data.id);
|
|
242
242
|
if (element) {
|
|
243
243
|
_this.rewriteInnerMethods(element);
|
|
244
|
-
|
|
245
|
-
|
|
244
|
+
// 检查_label是否已经是格式化后的数组格式,如果是则跳过格式化
|
|
245
|
+
// 这样可以避免在复制粘贴时重复处理已经格式化好的label数据
|
|
246
|
+
var currentLabel = element.properties._label;
|
|
247
|
+
if (!isArray(currentLabel) ||
|
|
248
|
+
currentLabel.length === 0 ||
|
|
249
|
+
!currentLabel[0].id) {
|
|
250
|
+
var formatedLabel = _this.formatConfig(graphModel, data);
|
|
251
|
+
element.setProperty('_label', formatedLabel);
|
|
252
|
+
}
|
|
246
253
|
}
|
|
247
254
|
});
|
|
248
255
|
};
|
|
@@ -79,7 +79,7 @@ var ProximityConnect = /** @class */ (function () {
|
|
|
79
79
|
var targetNodeId = edgeModel.targetNodeId;
|
|
80
80
|
var targetNodeModel = _this.lf.graphModel.getNodeModelById(targetNodeId);
|
|
81
81
|
if (targetNodeModel &&
|
|
82
|
-
isInNode({ x: eventX, y: eventY }, targetNodeModel)) {
|
|
82
|
+
isInNode({ x: eventX, y: eventY }, targetNodeModel, 10)) {
|
|
83
83
|
// 如果当前拖拽点在锚点上,就不触发插件的连线
|
|
84
84
|
_this.lf.deleteEdge(virtualEdgeId);
|
|
85
85
|
return;
|
|
@@ -101,6 +101,11 @@ export declare class Snapshot {
|
|
|
101
101
|
* @returns
|
|
102
102
|
*/
|
|
103
103
|
private getClassRules;
|
|
104
|
+
/**
|
|
105
|
+
* 根据浏览器类型获取Canvas尺寸限制
|
|
106
|
+
* @returns 包含最大主维度和次维度的对象
|
|
107
|
+
*/
|
|
108
|
+
private getCanvasDimensionsByBrowser;
|
|
104
109
|
/**
|
|
105
110
|
* 将 svg 转化为 canvas
|
|
106
111
|
* @param svg - svg 元素
|
|
@@ -344,6 +344,26 @@ var Snapshot = /** @class */ (function () {
|
|
|
344
344
|
}
|
|
345
345
|
return rules;
|
|
346
346
|
};
|
|
347
|
+
/**
|
|
348
|
+
* 根据浏览器类型获取Canvas尺寸限制
|
|
349
|
+
* @returns 包含最大主维度和次维度的对象
|
|
350
|
+
*/
|
|
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;
|
|
360
|
+
}
|
|
361
|
+
else if (userAgent.indexOf('Firefox') !== -1) {
|
|
362
|
+
maxCanvasDimension = 32767;
|
|
363
|
+
otherMaxCanvasDimension = 3814;
|
|
364
|
+
}
|
|
365
|
+
return { maxCanvasDimension: maxCanvasDimension, otherMaxCanvasDimension: otherMaxCanvasDimension };
|
|
366
|
+
};
|
|
347
367
|
/**
|
|
348
368
|
* 将 svg 转化为 canvas
|
|
349
369
|
* @param svg - svg 元素
|
|
@@ -352,14 +372,14 @@ var Snapshot = /** @class */ (function () {
|
|
|
352
372
|
*/
|
|
353
373
|
Snapshot.prototype.getCanvasData = function (svg, toImageOptions) {
|
|
354
374
|
return __awaiter(this, void 0, void 0, function () {
|
|
355
|
-
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, ctx, img, style, foreignObject;
|
|
356
|
-
return __generator(this, function (
|
|
357
|
-
switch (
|
|
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) {
|
|
358
378
|
case 0:
|
|
359
379
|
width = toImageOptions.width, height = toImageOptions.height, backgroundColor = toImageOptions.backgroundColor, _a = toImageOptions.padding, padding = _a === void 0 ? 40 : _a;
|
|
360
380
|
return [4 /*yield*/, this.cloneSvg(svg, false)];
|
|
361
381
|
case 1:
|
|
362
|
-
copy =
|
|
382
|
+
copy = _c.sent();
|
|
363
383
|
dpr = window.devicePixelRatio || 1;
|
|
364
384
|
if (dpr < 1) {
|
|
365
385
|
// https://github.com/didi/LogicFlow/issues/1222
|
|
@@ -388,7 +408,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
388
408
|
;
|
|
389
409
|
actualWidth = (bbox.width / SCALE_X) * safetyFactor;
|
|
390
410
|
actualHeight = (bbox.height / SCALE_Y) * safetyFactor;
|
|
391
|
-
copy.lastChild.style.transform = "matrix(1, 0, 0, 1, ".concat((-offsetX + TRANSLATE_X) * (1 / SCALE_X) + padding / dpr, ", ").concat((-offsetY + TRANSLATE_Y) * (1 / SCALE_Y) + padding / dpr, ")");
|
|
392
411
|
bboxWidth = Math.ceil(actualWidth);
|
|
393
412
|
bboxHeight = Math.ceil(actualHeight);
|
|
394
413
|
canvas = document.createElement('canvas');
|
|
@@ -396,13 +415,51 @@ var Snapshot = /** @class */ (function () {
|
|
|
396
415
|
canvas.style.height = "".concat(bboxHeight, "px");
|
|
397
416
|
safetyMargin = 40 // 额外的安全边距
|
|
398
417
|
;
|
|
399
|
-
|
|
400
|
-
|
|
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 //高 缩放
|
|
426
|
+
;
|
|
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);
|
|
449
|
+
}
|
|
450
|
+
// 将导出区域移动到左上角,canvas 绘制的时候是从左上角开始绘制的
|
|
451
|
+
// 在transform矩阵中加入padding值,确保左侧元素不会被截断
|
|
452
|
+
// 对这个矩阵进行缩放,否则会导致截断
|
|
453
|
+
;
|
|
454
|
+
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;
|
|
401
458
|
ctx = canvas.getContext('2d');
|
|
402
459
|
if (ctx) {
|
|
403
460
|
// 清空canvas
|
|
404
461
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
405
|
-
ctx.scale(dpr, dpr);
|
|
462
|
+
ctx.scale(dpr * scaleWidth, dpr * scaleHeight);
|
|
406
463
|
// 如果有背景色,设置流程图导出的背景色
|
|
407
464
|
if (backgroundColor) {
|
|
408
465
|
ctx.fillStyle = backgroundColor;
|
|
@@ -12,6 +12,7 @@ var __values = (this && this.__values) || function(o) {
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.MiniMap = void 0;
|
|
15
|
+
var vue_node_registry_1 = require("@logicflow/vue-node-registry");
|
|
15
16
|
var MiniMap = /** @class */ (function () {
|
|
16
17
|
function MiniMap(_a) {
|
|
17
18
|
var lf = _a.lf, LogicFlow = _a.LogicFlow, options = _a.options;
|
|
@@ -278,6 +279,8 @@ var MiniMap = /** @class */ (function () {
|
|
|
278
279
|
// minimap中禁用adapter。
|
|
279
280
|
// this.lfMap.adapterIn = (a) => a
|
|
280
281
|
// this.lfMap.adapterOut = (a) => a
|
|
282
|
+
// 创建teleport容器(vue3中生效)
|
|
283
|
+
(0, vue_node_registry_1.createTeleportContainer)(miniMapWrap, this.lfMap.graphModel.flowId);
|
|
281
284
|
this.miniMapWrap = miniMapWrap;
|
|
282
285
|
this.createViewPort();
|
|
283
286
|
miniMapWrap.addEventListener('click', this.mapClick);
|
package/lib/tools/label/index.js
CHANGED
|
@@ -101,7 +101,7 @@ var Label = /** @class */ (function () {
|
|
|
101
101
|
var value = config.value, content = config.content, vertical = config.vertical, editable = config.editable, draggable = config.draggable, labelTextOverflowMode = config.textOverflowMode;
|
|
102
102
|
var textEdit = element.BaseType === 'node' ? nodeTextEdit : edgeTextEdit;
|
|
103
103
|
var textDraggable = element.BaseType === 'node' ? nodeTextDraggable : edgeTextDraggable;
|
|
104
|
-
return __assign(__assign({}, config), { zIndex: zIndex, labelWidth: labelWidth, content: content !== null && content !== void 0 ? content : value, vertical: vertical !== null && vertical !== void 0 ? vertical : false, editable: textEdit && editable, draggable: textDraggable && draggable, textOverflowMode: labelTextOverflowMode !== null && labelTextOverflowMode !== void 0 ? labelTextOverflowMode : textOverflowMode });
|
|
104
|
+
return __assign(__assign({}, config), { zIndex: zIndex, labelWidth: labelWidth, content: content !== null && content !== void 0 ? content : value, vertical: vertical !== null && vertical !== void 0 ? vertical : false, editable: Boolean(textEdit) && editable, draggable: Boolean(textDraggable) && draggable, textOverflowMode: labelTextOverflowMode !== null && labelTextOverflowMode !== void 0 ? labelTextOverflowMode : textOverflowMode });
|
|
105
105
|
});
|
|
106
106
|
};
|
|
107
107
|
/**
|
|
@@ -247,8 +247,15 @@ var Label = /** @class */ (function () {
|
|
|
247
247
|
var element = graphModel.getElement(data.id);
|
|
248
248
|
if (element) {
|
|
249
249
|
_this.rewriteInnerMethods(element);
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
// 检查_label是否已经是格式化后的数组格式,如果是则跳过格式化
|
|
251
|
+
// 这样可以避免在复制粘贴时重复处理已经格式化好的label数据
|
|
252
|
+
var currentLabel = element.properties._label;
|
|
253
|
+
if (!(0, lodash_es_1.isArray)(currentLabel) ||
|
|
254
|
+
currentLabel.length === 0 ||
|
|
255
|
+
!currentLabel[0].id) {
|
|
256
|
+
var formatedLabel = _this.formatConfig(graphModel, data);
|
|
257
|
+
element.setProperty('_label', formatedLabel);
|
|
258
|
+
}
|
|
252
259
|
}
|
|
253
260
|
});
|
|
254
261
|
};
|
|
@@ -82,7 +82,7 @@ var ProximityConnect = /** @class */ (function () {
|
|
|
82
82
|
var targetNodeId = edgeModel.targetNodeId;
|
|
83
83
|
var targetNodeModel = _this.lf.graphModel.getNodeModelById(targetNodeId);
|
|
84
84
|
if (targetNodeModel &&
|
|
85
|
-
(0, core_1.isInNode)({ x: eventX, y: eventY }, targetNodeModel)) {
|
|
85
|
+
(0, core_1.isInNode)({ x: eventX, y: eventY }, targetNodeModel, 10)) {
|
|
86
86
|
// 如果当前拖拽点在锚点上,就不触发插件的连线
|
|
87
87
|
_this.lf.deleteEdge(virtualEdgeId);
|
|
88
88
|
return;
|
|
@@ -101,6 +101,11 @@ export declare class Snapshot {
|
|
|
101
101
|
* @returns
|
|
102
102
|
*/
|
|
103
103
|
private getClassRules;
|
|
104
|
+
/**
|
|
105
|
+
* 根据浏览器类型获取Canvas尺寸限制
|
|
106
|
+
* @returns 包含最大主维度和次维度的对象
|
|
107
|
+
*/
|
|
108
|
+
private getCanvasDimensionsByBrowser;
|
|
104
109
|
/**
|
|
105
110
|
* 将 svg 转化为 canvas
|
|
106
111
|
* @param svg - svg 元素
|
|
@@ -347,6 +347,26 @@ var Snapshot = /** @class */ (function () {
|
|
|
347
347
|
}
|
|
348
348
|
return rules;
|
|
349
349
|
};
|
|
350
|
+
/**
|
|
351
|
+
* 根据浏览器类型获取Canvas尺寸限制
|
|
352
|
+
* @returns 包含最大主维度和次维度的对象
|
|
353
|
+
*/
|
|
354
|
+
Snapshot.prototype.getCanvasDimensionsByBrowser = function () {
|
|
355
|
+
var userAgent = navigator.userAgent;
|
|
356
|
+
// 默认值
|
|
357
|
+
var maxCanvasDimension = 65535;
|
|
358
|
+
var otherMaxCanvasDimension = 4096;
|
|
359
|
+
if (userAgent.indexOf('Chrome') !== -1 ||
|
|
360
|
+
userAgent.indexOf('Edge') !== -1) {
|
|
361
|
+
maxCanvasDimension = 65535;
|
|
362
|
+
otherMaxCanvasDimension = 4096;
|
|
363
|
+
}
|
|
364
|
+
else if (userAgent.indexOf('Firefox') !== -1) {
|
|
365
|
+
maxCanvasDimension = 32767;
|
|
366
|
+
otherMaxCanvasDimension = 3814;
|
|
367
|
+
}
|
|
368
|
+
return { maxCanvasDimension: maxCanvasDimension, otherMaxCanvasDimension: otherMaxCanvasDimension };
|
|
369
|
+
};
|
|
350
370
|
/**
|
|
351
371
|
* 将 svg 转化为 canvas
|
|
352
372
|
* @param svg - svg 元素
|
|
@@ -355,14 +375,14 @@ var Snapshot = /** @class */ (function () {
|
|
|
355
375
|
*/
|
|
356
376
|
Snapshot.prototype.getCanvasData = function (svg, toImageOptions) {
|
|
357
377
|
return __awaiter(this, void 0, void 0, function () {
|
|
358
|
-
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, ctx, img, style, foreignObject;
|
|
359
|
-
return __generator(this, function (
|
|
360
|
-
switch (
|
|
378
|
+
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;
|
|
379
|
+
return __generator(this, function (_c) {
|
|
380
|
+
switch (_c.label) {
|
|
361
381
|
case 0:
|
|
362
382
|
width = toImageOptions.width, height = toImageOptions.height, backgroundColor = toImageOptions.backgroundColor, _a = toImageOptions.padding, padding = _a === void 0 ? 40 : _a;
|
|
363
383
|
return [4 /*yield*/, this.cloneSvg(svg, false)];
|
|
364
384
|
case 1:
|
|
365
|
-
copy =
|
|
385
|
+
copy = _c.sent();
|
|
366
386
|
dpr = window.devicePixelRatio || 1;
|
|
367
387
|
if (dpr < 1) {
|
|
368
388
|
// https://github.com/didi/LogicFlow/issues/1222
|
|
@@ -391,7 +411,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
391
411
|
;
|
|
392
412
|
actualWidth = (bbox.width / SCALE_X) * safetyFactor;
|
|
393
413
|
actualHeight = (bbox.height / SCALE_Y) * safetyFactor;
|
|
394
|
-
copy.lastChild.style.transform = "matrix(1, 0, 0, 1, ".concat((-offsetX + TRANSLATE_X) * (1 / SCALE_X) + padding / dpr, ", ").concat((-offsetY + TRANSLATE_Y) * (1 / SCALE_Y) + padding / dpr, ")");
|
|
395
414
|
bboxWidth = Math.ceil(actualWidth);
|
|
396
415
|
bboxHeight = Math.ceil(actualHeight);
|
|
397
416
|
canvas = document.createElement('canvas');
|
|
@@ -399,13 +418,51 @@ var Snapshot = /** @class */ (function () {
|
|
|
399
418
|
canvas.style.height = "".concat(bboxHeight, "px");
|
|
400
419
|
safetyMargin = 40 // 额外的安全边距
|
|
401
420
|
;
|
|
402
|
-
|
|
403
|
-
|
|
421
|
+
_b = this.getCanvasDimensionsByBrowser(), maxCanvasDimension = _b.maxCanvasDimension, otherMaxCanvasDimension = _b.otherMaxCanvasDimension;
|
|
422
|
+
MAX_CANVAS_DIMENSION = maxCanvasDimension;
|
|
423
|
+
OTHER_MAX_CANVAS_DIMENSION = otherMaxCanvasDimension;
|
|
424
|
+
targetWidth = bboxWidth * dpr + padding * 2 + safetyMargin;
|
|
425
|
+
targetHeight = bboxHeight * dpr + padding * 2 + safetyMargin;
|
|
426
|
+
scaleWidth = 1 //宽 缩放
|
|
427
|
+
;
|
|
428
|
+
scaleHeight = 1 //高 缩放
|
|
429
|
+
;
|
|
430
|
+
// 对宽和高分别进行缩放,如chrome,矩形单边最大宽度不超过65535,如宽超过65535,那么高不能超过4096,否则像素会超,也会显示不出。
|
|
431
|
+
if (targetWidth > MAX_CANVAS_DIMENSION &&
|
|
432
|
+
targetHeight > OTHER_MAX_CANVAS_DIMENSION) {
|
|
433
|
+
scaleWidth = MAX_CANVAS_DIMENSION / targetWidth;
|
|
434
|
+
scaleHeight = OTHER_MAX_CANVAS_DIMENSION / targetHeight;
|
|
435
|
+
}
|
|
436
|
+
else if (targetWidth > OTHER_MAX_CANVAS_DIMENSION &&
|
|
437
|
+
targetHeight > MAX_CANVAS_DIMENSION) {
|
|
438
|
+
scaleWidth = OTHER_MAX_CANVAS_DIMENSION / targetWidth;
|
|
439
|
+
scaleHeight = MAX_CANVAS_DIMENSION / targetHeight;
|
|
440
|
+
}
|
|
441
|
+
else if (targetWidth > MAX_CANVAS_DIMENSION &&
|
|
442
|
+
targetHeight < OTHER_MAX_CANVAS_DIMENSION) {
|
|
443
|
+
scaleHeight = scaleWidth = MAX_CANVAS_DIMENSION / targetWidth;
|
|
444
|
+
}
|
|
445
|
+
else if (targetWidth < OTHER_MAX_CANVAS_DIMENSION &&
|
|
446
|
+
targetHeight > MAX_CANVAS_DIMENSION) {
|
|
447
|
+
scaleHeight = scaleWidth = MAX_CANVAS_DIMENSION / targetHeight;
|
|
448
|
+
}
|
|
449
|
+
if (scaleWidth < 1 || scaleHeight < 1) {
|
|
450
|
+
targetWidth = Math.floor(targetWidth * scaleWidth);
|
|
451
|
+
targetHeight = Math.floor(targetHeight * scaleHeight);
|
|
452
|
+
}
|
|
453
|
+
// 将导出区域移动到左上角,canvas 绘制的时候是从左上角开始绘制的
|
|
454
|
+
// 在transform矩阵中加入padding值,确保左侧元素不会被截断
|
|
455
|
+
// 对这个矩阵进行缩放,否则会导致截断
|
|
456
|
+
;
|
|
457
|
+
copy.lastChild.style.transform =
|
|
458
|
+
"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, ")");
|
|
459
|
+
canvas.width = targetWidth;
|
|
460
|
+
canvas.height = targetHeight;
|
|
404
461
|
ctx = canvas.getContext('2d');
|
|
405
462
|
if (ctx) {
|
|
406
463
|
// 清空canvas
|
|
407
464
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
408
|
-
ctx.scale(dpr, dpr);
|
|
465
|
+
ctx.scale(dpr * scaleWidth, dpr * scaleHeight);
|
|
409
466
|
// 如果有背景色,设置流程图导出的背景色
|
|
410
467
|
if (backgroundColor) {
|
|
411
468
|
ctx.fillStyle = backgroundColor;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@logicflow/extension",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "LogicFlow Extensions",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"author": "Logicflow-Team",
|
|
21
21
|
"license": "Apache-2.0",
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"@logicflow/core": "2.0
|
|
23
|
+
"@logicflow/core": "2.1.0",
|
|
24
|
+
"@logicflow/vue-node-registry": "1.0.18"
|
|
24
25
|
},
|
|
25
26
|
"dependencies": {
|
|
26
27
|
"@antv/hierarchy": "^0.6.11",
|
|
@@ -31,7 +32,8 @@
|
|
|
31
32
|
"preact": "^10.17.1",
|
|
32
33
|
"rangy": "^1.3.1",
|
|
33
34
|
"vanilla-picker": "^2.12.3",
|
|
34
|
-
"@logicflow/core": "2.0
|
|
35
|
+
"@logicflow/core": "2.1.0",
|
|
36
|
+
"@logicflow/vue-node-registry": "1.0.18"
|
|
35
37
|
},
|
|
36
38
|
"devDependencies": {
|
|
37
39
|
"less": "^4.1.1",
|