@logicflow/core 2.0.6 → 2.0.8
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$colon$dev.log +2 -2
- package/.turbo/turbo-build.log +3 -19
- package/CHANGELOG.md +31 -0
- package/__tests__/algorithm/egde.test.ts +36 -23
- package/dist/index.css +3 -0
- package/es/algorithm/edge.js +3 -5
- package/es/constant/index.d.ts +4 -0
- package/es/constant/index.js +4 -0
- package/es/event/eventArgs.d.ts +40 -30
- package/es/index.css +3 -0
- package/es/model/GraphModel.d.ts +13 -3
- package/es/model/GraphModel.js +54 -3
- package/es/model/edge/BaseEdgeModel.d.ts +1 -0
- package/es/model/edge/LineEdgeModel.d.ts +2 -0
- package/es/model/edge/LineEdgeModel.js +8 -0
- package/es/model/edge/PolylineEdgeModel.d.ts +1 -0
- package/es/model/edge/PolylineEdgeModel.js +4 -3
- package/es/model/node/BaseNodeModel.d.ts +2 -2
- package/es/model/node/BaseNodeModel.js +1 -1
- package/es/model/node/HtmlNodeModel.d.ts +2 -2
- package/es/model/node/TextNodeModel.d.ts +2 -2
- package/es/style/index.css +3 -0
- package/es/style/index.less +5 -0
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/util/drag.d.ts +1 -0
- package/es/util/drag.js +11 -0
- package/es/view/Anchor.js +6 -8
- package/es/view/Control.js +1 -1
- package/es/view/Graph.js +3 -15
- package/es/view/behavior/dnd.js +1 -0
- package/es/view/edge/BaseEdge.d.ts +5 -1
- package/es/view/edge/BaseEdge.js +20 -5
- package/es/view/node/BaseNode.d.ts +2 -0
- package/es/view/node/BaseNode.js +13 -1
- package/es/view/overlay/BackgroundOverlay.d.ts +4 -14
- package/es/view/overlay/BackgroundOverlay.js +12 -1
- package/es/view/overlay/Grid.d.ts +4 -3
- package/es/view/overlay/Grid.js +8 -31
- package/es/view/overlay/getTransformHoc.d.ts +1 -1
- package/es/view/text/BaseText.js +1 -1
- package/lib/algorithm/edge.js +3 -5
- package/lib/constant/index.d.ts +4 -0
- package/lib/constant/index.js +4 -0
- package/lib/event/eventArgs.d.ts +40 -30
- package/lib/index.css +3 -0
- package/lib/model/GraphModel.d.ts +13 -3
- package/lib/model/GraphModel.js +53 -2
- package/lib/model/edge/BaseEdgeModel.d.ts +1 -0
- package/lib/model/edge/LineEdgeModel.d.ts +2 -0
- package/lib/model/edge/LineEdgeModel.js +8 -0
- package/lib/model/edge/PolylineEdgeModel.d.ts +1 -0
- package/lib/model/edge/PolylineEdgeModel.js +4 -3
- package/lib/model/node/BaseNodeModel.d.ts +2 -2
- package/lib/model/node/BaseNodeModel.js +1 -1
- package/lib/model/node/HtmlNodeModel.d.ts +2 -2
- package/lib/model/node/TextNodeModel.d.ts +2 -2
- package/lib/style/index.css +3 -0
- package/lib/style/index.less +5 -0
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/util/drag.d.ts +1 -0
- package/lib/util/drag.js +11 -0
- package/lib/view/Anchor.js +6 -8
- package/lib/view/Control.js +1 -1
- package/lib/view/Graph.js +3 -15
- package/lib/view/behavior/dnd.js +1 -0
- package/lib/view/edge/BaseEdge.d.ts +5 -1
- package/lib/view/edge/BaseEdge.js +20 -5
- package/lib/view/node/BaseNode.d.ts +2 -0
- package/lib/view/node/BaseNode.js +13 -1
- package/lib/view/overlay/BackgroundOverlay.d.ts +4 -14
- package/lib/view/overlay/BackgroundOverlay.js +12 -1
- package/lib/view/overlay/Grid.d.ts +4 -3
- package/lib/view/overlay/Grid.js +8 -31
- package/lib/view/overlay/getTransformHoc.d.ts +1 -1
- package/lib/view/text/BaseText.js +1 -1
- package/package.json +1 -1
- package/src/LogicFlow.tsx +6 -0
- package/src/algorithm/edge.ts +3 -5
- package/src/algorithm/outline.ts +1 -1
- package/src/constant/index.ts +4 -0
- package/src/event/eventArgs.ts +50 -30
- package/src/model/GraphModel.ts +122 -3
- package/src/model/edge/BaseEdgeModel.ts +1 -0
- package/src/model/edge/LineEdgeModel.ts +8 -0
- package/src/model/edge/PolylineEdgeModel.ts +5 -3
- package/src/model/node/BaseNodeModel.ts +1 -1
- package/src/model/node/HtmlNodeModel.ts +1 -1
- package/src/style/index.less +5 -0
- package/src/style/raw.ts +3 -0
- package/src/util/drag.ts +12 -0
- package/src/view/Anchor.tsx +7 -8
- package/src/view/Control.tsx +1 -1
- package/src/view/Graph.tsx +5 -7
- package/src/view/behavior/dnd.ts +1 -0
- package/src/view/edge/BaseEdge.tsx +24 -3
- package/src/view/node/BaseNode.tsx +17 -1
- package/src/view/overlay/BackgroundOverlay.tsx +11 -16
- package/src/view/overlay/Grid.tsx +13 -9
- package/src/view/overlay/OutlineOverlay.tsx +1 -1
- package/src/view/text/BaseText.tsx +1 -1
- package/stats.html +1 -1
- package/dist/index.min.js +0 -2
- package/dist/index.min.js.map +0 -1
package/lib/event/eventArgs.d.ts
CHANGED
|
@@ -97,7 +97,7 @@ interface NodeEventArgs {
|
|
|
97
97
|
/**
|
|
98
98
|
* 删除节点
|
|
99
99
|
*/
|
|
100
|
-
'node:delete': NodeEventArgsPick<'data'>;
|
|
100
|
+
'node:delete': NodeEventArgsPick<'data' | 'model'>;
|
|
101
101
|
/**
|
|
102
102
|
* 添加外部拖入节点
|
|
103
103
|
*/
|
|
@@ -105,7 +105,7 @@ interface NodeEventArgs {
|
|
|
105
105
|
/**
|
|
106
106
|
* 拖拽外部拖入节点
|
|
107
107
|
*/
|
|
108
|
-
'node:dnd-drag': NodeEventArgsPick<'data'>;
|
|
108
|
+
'node:dnd-drag': NodeEventArgsPick<'data' | 'e'>;
|
|
109
109
|
/**
|
|
110
110
|
* 开始拖拽节点
|
|
111
111
|
*/
|
|
@@ -130,6 +130,35 @@ interface NodeEventArgs {
|
|
|
130
130
|
* 节点缩放
|
|
131
131
|
*/
|
|
132
132
|
'node:resize': NodeEventArgsPick<'preData' | 'data' | 'model' | 'deltaX' | 'deltaY' | 'index'>;
|
|
133
|
+
/**
|
|
134
|
+
* 元素的 properties 发生改变
|
|
135
|
+
*/
|
|
136
|
+
'node:properties-change': {
|
|
137
|
+
/**
|
|
138
|
+
* 元素的 id
|
|
139
|
+
*/
|
|
140
|
+
id: string;
|
|
141
|
+
/**
|
|
142
|
+
* 改变的 properties 的 key
|
|
143
|
+
*/
|
|
144
|
+
keys: string[];
|
|
145
|
+
/**
|
|
146
|
+
* 改变前的 properties
|
|
147
|
+
*/
|
|
148
|
+
preProperties: Record<string, any>;
|
|
149
|
+
/**
|
|
150
|
+
* 改变后的 properties
|
|
151
|
+
*/
|
|
152
|
+
properties: Record<string, any>;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* 节点获焦
|
|
156
|
+
*/
|
|
157
|
+
'node:focus': NodeEventArgsPick<'data'>;
|
|
158
|
+
/**
|
|
159
|
+
* 节点失焦
|
|
160
|
+
*/
|
|
161
|
+
'node:blur': NodeEventArgsPick<'data'>;
|
|
133
162
|
}
|
|
134
163
|
type EdgeEventArgsPick<T extends 'data' | 'e' | 'position'> = Pick<{
|
|
135
164
|
/**
|
|
@@ -196,6 +225,14 @@ interface EdgeEventArgs {
|
|
|
196
225
|
oldEdge: EdgeData;
|
|
197
226
|
};
|
|
198
227
|
};
|
|
228
|
+
/**
|
|
229
|
+
* 边获焦
|
|
230
|
+
*/
|
|
231
|
+
'edge:focus': EdgeEventArgsPick<'data'>;
|
|
232
|
+
/**
|
|
233
|
+
* 边失焦
|
|
234
|
+
*/
|
|
235
|
+
'edge:blur': EdgeEventArgsPick<'data'>;
|
|
199
236
|
}
|
|
200
237
|
/**
|
|
201
238
|
* 文本事件
|
|
@@ -275,33 +312,6 @@ interface CommonEventArgs {
|
|
|
275
312
|
*/
|
|
276
313
|
position: ClientPosition;
|
|
277
314
|
};
|
|
278
|
-
/**
|
|
279
|
-
* 元素的 properties 发生改变
|
|
280
|
-
*/
|
|
281
|
-
'properties:change': {
|
|
282
|
-
data: {
|
|
283
|
-
/**
|
|
284
|
-
* 元素的 id
|
|
285
|
-
*/
|
|
286
|
-
id: string;
|
|
287
|
-
/**
|
|
288
|
-
* 元素的类型
|
|
289
|
-
*/
|
|
290
|
-
type: string;
|
|
291
|
-
/**
|
|
292
|
-
* 改变的 properties 的 key
|
|
293
|
-
*/
|
|
294
|
-
keys: string[];
|
|
295
|
-
/**
|
|
296
|
-
* 改变前的 properties
|
|
297
|
-
*/
|
|
298
|
-
preProperties: Record<string, any>;
|
|
299
|
-
/**
|
|
300
|
-
* 改变后的 properties
|
|
301
|
-
*/
|
|
302
|
-
properties: Record<string, any>;
|
|
303
|
-
};
|
|
304
|
-
};
|
|
305
315
|
/**
|
|
306
316
|
* 进行画布平移或缩放等变化操作时触发
|
|
307
317
|
*/
|
|
@@ -356,7 +366,7 @@ type AnchorEventArgsPick<T extends 'data' | 'e' | 'nodeModel' | 'edgeModel'> = P
|
|
|
356
366
|
/**
|
|
357
367
|
* 通过拖动锚点连线添加的边的数据
|
|
358
368
|
*/
|
|
359
|
-
edgeModel
|
|
369
|
+
edgeModel?: BaseEdgeModel;
|
|
360
370
|
}, T>;
|
|
361
371
|
/**
|
|
362
372
|
* 锚点事件
|
package/lib/index.css
CHANGED
|
@@ -3,6 +3,7 @@ import { ElementState, EventType, OverlapMode, TextMode } from '../constant';
|
|
|
3
3
|
import LogicFlow from '../LogicFlow';
|
|
4
4
|
import { Options as LFOptions } from '../options';
|
|
5
5
|
import EventEmitter from '../event/eventEmitter';
|
|
6
|
+
import { Grid } from '../view/overlay';
|
|
6
7
|
import PointTuple = LogicFlow.PointTuple;
|
|
7
8
|
import GraphData = LogicFlow.GraphData;
|
|
8
9
|
import NodeConfig = LogicFlow.NodeConfig;
|
|
@@ -16,6 +17,7 @@ export declare class GraphModel {
|
|
|
16
17
|
width: number;
|
|
17
18
|
height: number;
|
|
18
19
|
theme: LogicFlow.Theme;
|
|
20
|
+
grid: Grid.GridOptions;
|
|
19
21
|
readonly eventCenter: EventEmitter;
|
|
20
22
|
readonly modelMap: Map<string, LogicFlow.GraphElementCtor>;
|
|
21
23
|
/**
|
|
@@ -68,15 +70,15 @@ export declare class GraphModel {
|
|
|
68
70
|
* 基于zIndex对元素进行排序。
|
|
69
71
|
* todo: 性能优化
|
|
70
72
|
*/
|
|
71
|
-
get sortElements(): (
|
|
73
|
+
get sortElements(): (BaseEdgeModel<LogicFlow.PropertiesType> | BaseNodeModel<LogicFlow.PropertiesType>)[];
|
|
72
74
|
/**
|
|
73
75
|
* 当前编辑的元素,低频操作,先循环找。
|
|
74
76
|
*/
|
|
75
|
-
get textEditElement():
|
|
77
|
+
get textEditElement(): BaseEdgeModel<LogicFlow.PropertiesType> | BaseNodeModel<LogicFlow.PropertiesType> | undefined;
|
|
76
78
|
/**
|
|
77
79
|
* 当前画布所有被选中的元素
|
|
78
80
|
*/
|
|
79
|
-
get selectElements(): Map<string,
|
|
81
|
+
get selectElements(): Map<string, BaseEdgeModel<LogicFlow.PropertiesType> | BaseNodeModel<LogicFlow.PropertiesType>>;
|
|
80
82
|
get selectNodes(): BaseNodeModel<LogicFlow.PropertiesType>[];
|
|
81
83
|
/**
|
|
82
84
|
* 获取指定区域内的所有元素
|
|
@@ -383,6 +385,14 @@ export declare class GraphModel {
|
|
|
383
385
|
* todo docs link
|
|
384
386
|
*/
|
|
385
387
|
setTheme(style: Partial<LogicFlow.Theme>): void;
|
|
388
|
+
/**
|
|
389
|
+
* 更新网格配置
|
|
390
|
+
*/
|
|
391
|
+
updateGridOptions(options: Partial<Grid.GridOptions>): void;
|
|
392
|
+
/**
|
|
393
|
+
* 更新网格配置
|
|
394
|
+
*/
|
|
395
|
+
updateBackgroundOptions(options: boolean | Partial<LFOptions.BackgroundConfig>): void;
|
|
386
396
|
/**
|
|
387
397
|
* 重新设置画布的宽高
|
|
388
398
|
*/
|
package/lib/model/GraphModel.js
CHANGED
|
@@ -52,6 +52,7 @@ var _1 = require(".");
|
|
|
52
52
|
var constant_1 = require("../constant");
|
|
53
53
|
var util_1 = require("../util");
|
|
54
54
|
var eventEmitter_1 = __importDefault(require("../event/eventEmitter"));
|
|
55
|
+
var overlay_1 = require("../view/overlay");
|
|
55
56
|
var GraphModel = /** @class */ (function () {
|
|
56
57
|
function GraphModel(options) {
|
|
57
58
|
// 维护所有节点和边类型对应的 model
|
|
@@ -94,6 +95,7 @@ var GraphModel = /** @class */ (function () {
|
|
|
94
95
|
this.gridSize = grid.size || 1; // 默认 gridSize 设置为 1
|
|
95
96
|
}
|
|
96
97
|
this.theme = (0, util_1.setupTheme)(options.style);
|
|
98
|
+
this.grid = overlay_1.Grid.getGridOptions(grid !== null && grid !== void 0 ? grid : false);
|
|
97
99
|
this.edgeType = options.edgeType || 'polyline';
|
|
98
100
|
this.animation = (0, util_1.setupAnimation)(animation);
|
|
99
101
|
this.overlapMode = options.overlapMode || constant_1.OverlapMode.DEFAULT;
|
|
@@ -379,6 +381,31 @@ var GraphModel = /** @class */ (function () {
|
|
|
379
381
|
throw new Error("\u627E\u4E0D\u5230".concat(edge.type, "\u5BF9\u5E94\u7684\u8FB9\u3002"));
|
|
380
382
|
}
|
|
381
383
|
var edgeModel = new Model(edge, _this);
|
|
384
|
+
// 根据edgeModel中存储的数据找到当前画布上的起终锚点坐标
|
|
385
|
+
// 判断当前起终锚点数据和Model中存储的起终点数据是否一致,不一致更新起终点信息
|
|
386
|
+
var sourceNodeId = edgeModel.sourceNodeId, targetNodeId = edgeModel.targetNodeId, _b = edgeModel.sourceAnchorId, sourceAnchorId = _b === void 0 ? '' : _b, _c = edgeModel.targetAnchorId, targetAnchorId = _c === void 0 ? '' : _c, startPoint = edgeModel.startPoint, endPoint = edgeModel.endPoint, text = edgeModel.text, textPosition = edgeModel.textPosition;
|
|
387
|
+
var updateAnchorPoint = function (node, anchorId, point, updatePoint) {
|
|
388
|
+
var anchor = node === null || node === void 0 ? void 0 : node.anchors.find(function (anchor) { return anchor.id === anchorId; });
|
|
389
|
+
if (anchor && !(0, lodash_es_1.isEqual)(anchor, point)) {
|
|
390
|
+
updatePoint(anchor);
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
var sourceNode = _this.getNodeModelById(sourceNodeId);
|
|
394
|
+
var targetNode = _this.getNodeModelById(targetNodeId);
|
|
395
|
+
updateAnchorPoint(sourceNode, sourceAnchorId, startPoint, edgeModel.updateStartPoint.bind(edgeModel));
|
|
396
|
+
updateAnchorPoint(targetNode, targetAnchorId, endPoint, edgeModel.updateEndPoint.bind(edgeModel));
|
|
397
|
+
// 而文本需要先算一下文本与默认文本位置之间的相对位置差
|
|
398
|
+
// 再计算新路径的文本默认位置,加上相对位置差,得到调整后边的文本的位置
|
|
399
|
+
if (text) {
|
|
400
|
+
var x = text.x, y = text.y;
|
|
401
|
+
var defaultX = textPosition.x, defaultY = textPosition.y;
|
|
402
|
+
if (x && y && defaultX && defaultY) {
|
|
403
|
+
var deltaX = x - defaultX;
|
|
404
|
+
var deltaY = y - defaultY;
|
|
405
|
+
edgeModel.resetTextPosition();
|
|
406
|
+
edgeModel.moveText(deltaX, deltaY);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
382
409
|
_this.edgeModelMap.set(edgeModel.id, edgeModel);
|
|
383
410
|
_this.elementsModelMap.set(edgeModel.id, edgeModel);
|
|
384
411
|
return edgeModel;
|
|
@@ -670,11 +697,15 @@ var GraphModel = /** @class */ (function () {
|
|
|
670
697
|
* @param {string} nodeId 节点Id
|
|
671
698
|
*/
|
|
672
699
|
GraphModel.prototype.deleteNode = function (nodeId) {
|
|
673
|
-
var
|
|
700
|
+
var nodeModel = this.nodesMap[nodeId].model;
|
|
701
|
+
var nodeData = nodeModel.getData();
|
|
674
702
|
this.deleteEdgeBySource(nodeId);
|
|
675
703
|
this.deleteEdgeByTarget(nodeId);
|
|
676
704
|
this.nodes.splice(this.nodesMap[nodeId].index, 1);
|
|
677
|
-
this.eventCenter.emit(constant_1.EventType.NODE_DELETE, {
|
|
705
|
+
this.eventCenter.emit(constant_1.EventType.NODE_DELETE, {
|
|
706
|
+
data: nodeData,
|
|
707
|
+
model: nodeModel,
|
|
708
|
+
});
|
|
678
709
|
};
|
|
679
710
|
/**
|
|
680
711
|
* 添加节点
|
|
@@ -1244,6 +1275,23 @@ var GraphModel = /** @class */ (function () {
|
|
|
1244
1275
|
GraphModel.prototype.setTheme = function (style) {
|
|
1245
1276
|
this.theme = (0, util_1.updateTheme)(__assign(__assign({}, this.theme), style));
|
|
1246
1277
|
};
|
|
1278
|
+
/**
|
|
1279
|
+
* 更新网格配置
|
|
1280
|
+
*/
|
|
1281
|
+
GraphModel.prototype.updateGridOptions = function (options) {
|
|
1282
|
+
(0, lodash_es_1.merge)(this.grid, options);
|
|
1283
|
+
};
|
|
1284
|
+
/**
|
|
1285
|
+
* 更新网格配置
|
|
1286
|
+
*/
|
|
1287
|
+
GraphModel.prototype.updateBackgroundOptions = function (options) {
|
|
1288
|
+
if ((0, lodash_es_1.isBoolean)(options) || (0, lodash_es_1.isBoolean)(this.background)) {
|
|
1289
|
+
this.background = options;
|
|
1290
|
+
}
|
|
1291
|
+
else {
|
|
1292
|
+
this.background = __assign(__assign({}, this.background), options);
|
|
1293
|
+
}
|
|
1294
|
+
};
|
|
1247
1295
|
/**
|
|
1248
1296
|
* 重新设置画布的宽高
|
|
1249
1297
|
*/
|
|
@@ -1371,6 +1419,9 @@ var GraphModel = /** @class */ (function () {
|
|
|
1371
1419
|
__decorate([
|
|
1372
1420
|
mobx_1.observable
|
|
1373
1421
|
], GraphModel.prototype, "height", void 0);
|
|
1422
|
+
__decorate([
|
|
1423
|
+
mobx_1.observable
|
|
1424
|
+
], GraphModel.prototype, "grid", void 0);
|
|
1374
1425
|
__decorate([
|
|
1375
1426
|
mobx_1.observable
|
|
1376
1427
|
], GraphModel.prototype, "edgeType", void 0);
|
|
@@ -16,6 +16,8 @@ export declare class LineEdgeModel extends BaseEdgeModel {
|
|
|
16
16
|
height?: number | undefined;
|
|
17
17
|
path?: string | undefined;
|
|
18
18
|
};
|
|
19
|
+
initEdgeData(data: LogicFlow.EdgeConfig): void;
|
|
20
|
+
getPath(points: Point[]): string;
|
|
19
21
|
getTextPosition(): Point;
|
|
20
22
|
}
|
|
21
23
|
export default LineEdgeModel;
|
|
@@ -71,6 +71,14 @@ var LineEdgeModel = /** @class */ (function (_super) {
|
|
|
71
71
|
var _a = this.properties.style, customStyle = _a === void 0 ? {} : _a;
|
|
72
72
|
return __assign(__assign(__assign({}, style), (0, lodash_es_1.cloneDeep)(line)), (0, lodash_es_1.cloneDeep)(customStyle));
|
|
73
73
|
};
|
|
74
|
+
LineEdgeModel.prototype.initEdgeData = function (data) {
|
|
75
|
+
_super.prototype.initEdgeData.call(this, data);
|
|
76
|
+
this.points = this.getPath([this.startPoint, this.endPoint]);
|
|
77
|
+
};
|
|
78
|
+
LineEdgeModel.prototype.getPath = function (points) {
|
|
79
|
+
var _a = __read(points, 2), start = _a[0], end = _a[1];
|
|
80
|
+
return "".concat(start.x, ",").concat(start.y, " ").concat(end.x, ",").concat(end.y);
|
|
81
|
+
};
|
|
74
82
|
LineEdgeModel.prototype.getTextPosition = function () {
|
|
75
83
|
return {
|
|
76
84
|
x: (this.startPoint.x + this.endPoint.x) / 2,
|
|
@@ -298,11 +298,12 @@ var PolylineEdgeModel = /** @class */ (function (_super) {
|
|
|
298
298
|
pointsList: pointsList,
|
|
299
299
|
});
|
|
300
300
|
};
|
|
301
|
+
PolylineEdgeModel.prototype.getPath = function (points) {
|
|
302
|
+
return points.map(function (point) { return "".concat(point.x, ",").concat(point.y); }).join(' ');
|
|
303
|
+
};
|
|
301
304
|
PolylineEdgeModel.prototype.initPoints = function () {
|
|
302
305
|
if (this.pointsList.length > 0) {
|
|
303
|
-
this.points = this.pointsList
|
|
304
|
-
.map(function (point) { return "".concat(point.x, ",").concat(point.y); })
|
|
305
|
-
.join(' ');
|
|
306
|
+
this.points = this.getPath(this.pointsList);
|
|
306
307
|
}
|
|
307
308
|
else {
|
|
308
309
|
this.updatePoints();
|
|
@@ -172,8 +172,8 @@ export declare class BaseNodeModel<P extends PropertiesType = PropertiesType> im
|
|
|
172
172
|
color?: string | undefined;
|
|
173
173
|
fontSize: number;
|
|
174
174
|
lineHeight?: number | undefined;
|
|
175
|
-
textAnchor?: "
|
|
176
|
-
dominantBaseline?: "middle" | "
|
|
175
|
+
textAnchor?: "start" | "end" | "middle" | undefined;
|
|
176
|
+
dominantBaseline?: "middle" | "auto" | "text-bottom" | "alphabetic" | "ideographic" | "central" | "mathematical" | "hanging" | "text-top" | undefined;
|
|
177
177
|
};
|
|
178
178
|
/**
|
|
179
179
|
* @overridable 支持重写
|
|
@@ -739,7 +739,7 @@ var BaseNodeModel = /** @class */ (function () {
|
|
|
739
739
|
var preProperties = (0, mobx_1.toJS)(this.properties);
|
|
740
740
|
this.properties = nextProperties;
|
|
741
741
|
this.setAttributes();
|
|
742
|
-
// 触发更新节点 properties
|
|
742
|
+
// 触发更新节点 node:properties-change 的事件
|
|
743
743
|
this.graphModel.eventCenter.emit(constant_1.EventType.NODE_PROPERTIES_CHANGE, {
|
|
744
744
|
id: this.id,
|
|
745
745
|
keys: updateKeys,
|
|
@@ -4,13 +4,13 @@ import { ModelType } from '../../constant';
|
|
|
4
4
|
import AnchorConfig = Model.AnchorConfig;
|
|
5
5
|
import LogicFlow from '../../LogicFlow';
|
|
6
6
|
import GraphModel from '../GraphModel';
|
|
7
|
-
export
|
|
7
|
+
export interface IHtmlNodeProperties {
|
|
8
8
|
width?: number;
|
|
9
9
|
height?: number;
|
|
10
10
|
style?: LogicFlow.CommonTheme;
|
|
11
11
|
textStyle?: LogicFlow.CommonTheme;
|
|
12
12
|
[key: string]: unknown;
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
14
|
export declare class HtmlNodeModel<P extends IHtmlNodeProperties = IHtmlNodeProperties> extends BaseNodeModel<P> {
|
|
15
15
|
modelType: ModelType;
|
|
16
16
|
constructor(data: LogicFlow.NodeConfig<P>, graphModel: GraphModel);
|
|
@@ -24,8 +24,8 @@ export declare class TextNodeModel<P extends ITextNodeProperties = ITextNodeProp
|
|
|
24
24
|
fontSize: number;
|
|
25
25
|
textWidth?: number | undefined;
|
|
26
26
|
lineHeight?: number | undefined;
|
|
27
|
-
textAnchor?: "
|
|
28
|
-
dominantBaseline?: "middle" | "
|
|
27
|
+
textAnchor?: "start" | "end" | "middle" | undefined;
|
|
28
|
+
dominantBaseline?: "middle" | "auto" | "text-bottom" | "alphabetic" | "ideographic" | "central" | "mathematical" | "hanging" | "text-top" | undefined;
|
|
29
29
|
overflowMode?: "default" | "autoWrap" | "ellipsis" | undefined;
|
|
30
30
|
wrapPadding?: string | undefined;
|
|
31
31
|
};
|
package/lib/style/index.css
CHANGED
package/lib/style/index.less
CHANGED
package/lib/style/raw.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto generated file, do not modify it!
|
|
3
3
|
*/
|
|
4
|
-
export declare const content = ".lf-graph {\n position: relative;\n z-index: 0;\n width: 100%;\n height: 100%;\n background: #fff;\n user-select: none;\n}\n.lf-element-text {\n cursor: text;\n}\n.lf-text-disabled {\n pointer-events: none;\n}\n.lf-text-draggable {\n cursor: move;\n}\n.lf-node-anchor {\n cursor: crosshair;\n}\n.lf-node-anchor-hover {\n visibility: hidden;\n}\n.lf-anchor:hover .lf-node-anchor-hover {\n visibility: visible;\n}\n.lf-edge.pointer-none {\n pointer-events: none;\n}\n.lf-edge-append {\n cursor: pointer;\n}\n.lf-edge-animation {\n stroke-dashoffset: 100%;\n animation: lf_animate_dash 5s linear infinite;\n}\n@keyframes lf_animate_dash {\n to {\n stroke-dashoffset: 0;\n }\n}\n/* node */\n.lf-node-not-allow {\n cursor: not-allowed;\n}\n.lf-polyline-append-ns-resize {\n cursor: ns-resize;\n}\n.lf-polyline-append-ew-resize {\n cursor: ew-resize;\n}\n.lf-dragging {\n cursor: move;\n}\n.lf-dragging .lf-element-text {\n cursor: move;\n}\n.lf-draggable {\n cursor: default;\n}\n.lf-bezier-adjust-anchor {\n cursor: pointer;\n}\n/* background */\n.lf-background,\n.lf-grid {\n position: absolute;\n inset: 0;\n z-index: -1;\n}\n.lf-background-area {\n width: 100%;\n height: 100%;\n}\n/* html-overlay */\n.lf-html-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n user-select: none;\n pointer-events: none;\n}\n.lf-html-overlay__transform > * {\n pointer-events: all;\n}\n.lf-text-editable {\n pointer-events: all;\n}\n.lf-text-input {\n position: absolute;\n box-sizing: border-box;\n min-width: 100px;\n min-height: 20px;\n padding: 5px;\n line-height: 1.2;\n white-space: pre;\n text-align: center;\n background: #fff;\n border: 1px solid #edefed;\n border-radius: 3px;\n outline: none;\n transform: translate(-50%, -50%);\n resize: none;\n}\n.lf-get-text-height {\n display: inline-block;\n box-sizing: border-box;\n word-break: break-all;\n /* \u4E3A\u4E86\u8DDF\u8F93\u5165\u6548\u679C\u4FDD\u6301\u4E00\u81F4\uFF0C\u8BBE\u7F6E\u900F\u660E\u8FB9\u6846\u5360\u4F4D */\n border: 1px solid transparent;\n}\n.lf-node-text-auto-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n /* border: 1px solid transparent; */\n}\n.lf-node-text-auto-wrap-content {\n width: 100%;\n line-height: 1.2;\n text-align: center;\n word-break: break-all;\n background: transparent;\n}\n.lf-node-text-ellipsis-content {\n width: 100%;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n background: transparent;\n /* overflow: hidden;\n text-overflow: ellipsis; */\n}\n.lf-node-text-ellipsis-content > div {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* tool-overlay */\n.lf-tool-overlay {\n position: absolute;\n inset: 0;\n z-index: 2;\n overflow: hidden;\n pointer-events: none;\n}\n.lf-tool-overlay > * {\n pointer-events: all;\n}\n/* modification-overlay */\n.modification-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n pointer-events: none;\n}\n.modification-overlay > * {\n pointer-events: all;\n}\n.lf-outline,\n.lf-snapline {\n pointer-events: none;\n}\n.lf-keyboard-tips {\n float: right;\n}\n.lf-node-select-decorate {\n position: absolute;\n border: 1px dashed #343435;\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n.lf-multiple-select {\n position: absolute;\n border: 2px dashed #187dffcc;\n box-shadow: 0 0 3px 0 #187dff80;\n cursor: move;\n}\n.lf-edge-adjust-point {\n cursor: move;\n}\n.lf-rotate-control {\n cursor: grabbing;\n}\n.lf-resize-control-nw {\n cursor: nw-resize;\n}\n.lf-resize-control-n {\n cursor: n-resize;\n}\n.lf-resize-control-ne {\n cursor: ne-resize;\n}\n.lf-resize-control-e {\n cursor: e-resize;\n}\n.lf-resize-control-se {\n cursor: se-resize;\n}\n.lf-resize-control-s {\n cursor: s-resize;\n}\n.lf-resize-control-sw {\n cursor: sw-resize;\n}\n.lf-resize-control-w {\n cursor: w-resize;\n}\n";
|
|
4
|
+
export declare const content = ".lf-graph {\n position: relative;\n z-index: 0;\n width: 100%;\n height: 100%;\n background: #fff;\n user-select: none;\n}\n.lf-element-text {\n cursor: text;\n}\n.lf-text-disabled {\n pointer-events: none;\n}\n.lf-text-draggable {\n cursor: move;\n}\n*:focus {\n outline: none;\n}\n.lf-node-anchor {\n cursor: crosshair;\n}\n.lf-node-anchor-hover {\n visibility: hidden;\n}\n.lf-anchor:hover .lf-node-anchor-hover {\n visibility: visible;\n}\n.lf-edge.pointer-none {\n pointer-events: none;\n}\n.lf-edge-append {\n cursor: pointer;\n}\n.lf-edge-animation {\n stroke-dashoffset: 100%;\n animation: lf_animate_dash 5s linear infinite;\n}\n@keyframes lf_animate_dash {\n to {\n stroke-dashoffset: 0;\n }\n}\n/* node */\n.lf-node-not-allow {\n cursor: not-allowed;\n}\n.lf-polyline-append-ns-resize {\n cursor: ns-resize;\n}\n.lf-polyline-append-ew-resize {\n cursor: ew-resize;\n}\n.lf-dragging {\n cursor: move;\n}\n.lf-dragging .lf-element-text {\n cursor: move;\n}\n.lf-draggable {\n cursor: default;\n}\n.lf-bezier-adjust-anchor {\n cursor: pointer;\n}\n/* background */\n.lf-background,\n.lf-grid {\n position: absolute;\n inset: 0;\n z-index: -1;\n}\n.lf-background-area {\n width: 100%;\n height: 100%;\n}\n/* html-overlay */\n.lf-html-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n user-select: none;\n pointer-events: none;\n}\n.lf-html-overlay__transform > * {\n pointer-events: all;\n}\n.lf-text-editable {\n pointer-events: all;\n}\n.lf-text-input {\n position: absolute;\n box-sizing: border-box;\n min-width: 100px;\n min-height: 20px;\n padding: 5px;\n line-height: 1.2;\n white-space: pre;\n text-align: center;\n background: #fff;\n border: 1px solid #edefed;\n border-radius: 3px;\n outline: none;\n transform: translate(-50%, -50%);\n resize: none;\n}\n.lf-get-text-height {\n display: inline-block;\n box-sizing: border-box;\n word-break: break-all;\n /* \u4E3A\u4E86\u8DDF\u8F93\u5165\u6548\u679C\u4FDD\u6301\u4E00\u81F4\uFF0C\u8BBE\u7F6E\u900F\u660E\u8FB9\u6846\u5360\u4F4D */\n border: 1px solid transparent;\n}\n.lf-node-text-auto-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n /* border: 1px solid transparent; */\n}\n.lf-node-text-auto-wrap-content {\n width: 100%;\n line-height: 1.2;\n text-align: center;\n word-break: break-all;\n background: transparent;\n}\n.lf-node-text-ellipsis-content {\n width: 100%;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n background: transparent;\n /* overflow: hidden;\n text-overflow: ellipsis; */\n}\n.lf-node-text-ellipsis-content > div {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* tool-overlay */\n.lf-tool-overlay {\n position: absolute;\n inset: 0;\n z-index: 2;\n overflow: hidden;\n pointer-events: none;\n}\n.lf-tool-overlay > * {\n pointer-events: all;\n}\n/* modification-overlay */\n.modification-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n pointer-events: none;\n}\n.modification-overlay > * {\n pointer-events: all;\n}\n.lf-outline,\n.lf-snapline {\n pointer-events: none;\n}\n.lf-keyboard-tips {\n float: right;\n}\n.lf-node-select-decorate {\n position: absolute;\n border: 1px dashed #343435;\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n.lf-multiple-select {\n position: absolute;\n border: 2px dashed #187dffcc;\n box-shadow: 0 0 3px 0 #187dff80;\n cursor: move;\n}\n.lf-edge-adjust-point {\n cursor: move;\n}\n.lf-rotate-control {\n cursor: grabbing;\n}\n.lf-resize-control-nw {\n cursor: nw-resize;\n}\n.lf-resize-control-n {\n cursor: n-resize;\n}\n.lf-resize-control-ne {\n cursor: ne-resize;\n}\n.lf-resize-control-e {\n cursor: e-resize;\n}\n.lf-resize-control-se {\n cursor: se-resize;\n}\n.lf-resize-control-s {\n cursor: s-resize;\n}\n.lf-resize-control-sw {\n cursor: sw-resize;\n}\n.lf-resize-control-w {\n cursor: w-resize;\n}\n";
|
package/lib/style/raw.js
CHANGED
|
@@ -5,4 +5,4 @@ exports.content = void 0;
|
|
|
5
5
|
/**
|
|
6
6
|
* Auto generated file, do not modify it!
|
|
7
7
|
*/
|
|
8
|
-
exports.content = ".lf-graph {\n position: relative;\n z-index: 0;\n width: 100%;\n height: 100%;\n background: #fff;\n user-select: none;\n}\n.lf-element-text {\n cursor: text;\n}\n.lf-text-disabled {\n pointer-events: none;\n}\n.lf-text-draggable {\n cursor: move;\n}\n.lf-node-anchor {\n cursor: crosshair;\n}\n.lf-node-anchor-hover {\n visibility: hidden;\n}\n.lf-anchor:hover .lf-node-anchor-hover {\n visibility: visible;\n}\n.lf-edge.pointer-none {\n pointer-events: none;\n}\n.lf-edge-append {\n cursor: pointer;\n}\n.lf-edge-animation {\n stroke-dashoffset: 100%;\n animation: lf_animate_dash 5s linear infinite;\n}\n@keyframes lf_animate_dash {\n to {\n stroke-dashoffset: 0;\n }\n}\n/* node */\n.lf-node-not-allow {\n cursor: not-allowed;\n}\n.lf-polyline-append-ns-resize {\n cursor: ns-resize;\n}\n.lf-polyline-append-ew-resize {\n cursor: ew-resize;\n}\n.lf-dragging {\n cursor: move;\n}\n.lf-dragging .lf-element-text {\n cursor: move;\n}\n.lf-draggable {\n cursor: default;\n}\n.lf-bezier-adjust-anchor {\n cursor: pointer;\n}\n/* background */\n.lf-background,\n.lf-grid {\n position: absolute;\n inset: 0;\n z-index: -1;\n}\n.lf-background-area {\n width: 100%;\n height: 100%;\n}\n/* html-overlay */\n.lf-html-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n user-select: none;\n pointer-events: none;\n}\n.lf-html-overlay__transform > * {\n pointer-events: all;\n}\n.lf-text-editable {\n pointer-events: all;\n}\n.lf-text-input {\n position: absolute;\n box-sizing: border-box;\n min-width: 100px;\n min-height: 20px;\n padding: 5px;\n line-height: 1.2;\n white-space: pre;\n text-align: center;\n background: #fff;\n border: 1px solid #edefed;\n border-radius: 3px;\n outline: none;\n transform: translate(-50%, -50%);\n resize: none;\n}\n.lf-get-text-height {\n display: inline-block;\n box-sizing: border-box;\n word-break: break-all;\n /* \u4E3A\u4E86\u8DDF\u8F93\u5165\u6548\u679C\u4FDD\u6301\u4E00\u81F4\uFF0C\u8BBE\u7F6E\u900F\u660E\u8FB9\u6846\u5360\u4F4D */\n border: 1px solid transparent;\n}\n.lf-node-text-auto-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n /* border: 1px solid transparent; */\n}\n.lf-node-text-auto-wrap-content {\n width: 100%;\n line-height: 1.2;\n text-align: center;\n word-break: break-all;\n background: transparent;\n}\n.lf-node-text-ellipsis-content {\n width: 100%;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n background: transparent;\n /* overflow: hidden;\n text-overflow: ellipsis; */\n}\n.lf-node-text-ellipsis-content > div {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* tool-overlay */\n.lf-tool-overlay {\n position: absolute;\n inset: 0;\n z-index: 2;\n overflow: hidden;\n pointer-events: none;\n}\n.lf-tool-overlay > * {\n pointer-events: all;\n}\n/* modification-overlay */\n.modification-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n pointer-events: none;\n}\n.modification-overlay > * {\n pointer-events: all;\n}\n.lf-outline,\n.lf-snapline {\n pointer-events: none;\n}\n.lf-keyboard-tips {\n float: right;\n}\n.lf-node-select-decorate {\n position: absolute;\n border: 1px dashed #343435;\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n.lf-multiple-select {\n position: absolute;\n border: 2px dashed #187dffcc;\n box-shadow: 0 0 3px 0 #187dff80;\n cursor: move;\n}\n.lf-edge-adjust-point {\n cursor: move;\n}\n.lf-rotate-control {\n cursor: grabbing;\n}\n.lf-resize-control-nw {\n cursor: nw-resize;\n}\n.lf-resize-control-n {\n cursor: n-resize;\n}\n.lf-resize-control-ne {\n cursor: ne-resize;\n}\n.lf-resize-control-e {\n cursor: e-resize;\n}\n.lf-resize-control-se {\n cursor: se-resize;\n}\n.lf-resize-control-s {\n cursor: s-resize;\n}\n.lf-resize-control-sw {\n cursor: sw-resize;\n}\n.lf-resize-control-w {\n cursor: w-resize;\n}\n";
|
|
8
|
+
exports.content = ".lf-graph {\n position: relative;\n z-index: 0;\n width: 100%;\n height: 100%;\n background: #fff;\n user-select: none;\n}\n.lf-element-text {\n cursor: text;\n}\n.lf-text-disabled {\n pointer-events: none;\n}\n.lf-text-draggable {\n cursor: move;\n}\n*:focus {\n outline: none;\n}\n.lf-node-anchor {\n cursor: crosshair;\n}\n.lf-node-anchor-hover {\n visibility: hidden;\n}\n.lf-anchor:hover .lf-node-anchor-hover {\n visibility: visible;\n}\n.lf-edge.pointer-none {\n pointer-events: none;\n}\n.lf-edge-append {\n cursor: pointer;\n}\n.lf-edge-animation {\n stroke-dashoffset: 100%;\n animation: lf_animate_dash 5s linear infinite;\n}\n@keyframes lf_animate_dash {\n to {\n stroke-dashoffset: 0;\n }\n}\n/* node */\n.lf-node-not-allow {\n cursor: not-allowed;\n}\n.lf-polyline-append-ns-resize {\n cursor: ns-resize;\n}\n.lf-polyline-append-ew-resize {\n cursor: ew-resize;\n}\n.lf-dragging {\n cursor: move;\n}\n.lf-dragging .lf-element-text {\n cursor: move;\n}\n.lf-draggable {\n cursor: default;\n}\n.lf-bezier-adjust-anchor {\n cursor: pointer;\n}\n/* background */\n.lf-background,\n.lf-grid {\n position: absolute;\n inset: 0;\n z-index: -1;\n}\n.lf-background-area {\n width: 100%;\n height: 100%;\n}\n/* html-overlay */\n.lf-html-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n user-select: none;\n pointer-events: none;\n}\n.lf-html-overlay__transform > * {\n pointer-events: all;\n}\n.lf-text-editable {\n pointer-events: all;\n}\n.lf-text-input {\n position: absolute;\n box-sizing: border-box;\n min-width: 100px;\n min-height: 20px;\n padding: 5px;\n line-height: 1.2;\n white-space: pre;\n text-align: center;\n background: #fff;\n border: 1px solid #edefed;\n border-radius: 3px;\n outline: none;\n transform: translate(-50%, -50%);\n resize: none;\n}\n.lf-get-text-height {\n display: inline-block;\n box-sizing: border-box;\n word-break: break-all;\n /* \u4E3A\u4E86\u8DDF\u8F93\u5165\u6548\u679C\u4FDD\u6301\u4E00\u81F4\uFF0C\u8BBE\u7F6E\u900F\u660E\u8FB9\u6846\u5360\u4F4D */\n border: 1px solid transparent;\n}\n.lf-node-text-auto-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n /* border: 1px solid transparent; */\n}\n.lf-node-text-auto-wrap-content {\n width: 100%;\n line-height: 1.2;\n text-align: center;\n word-break: break-all;\n background: transparent;\n}\n.lf-node-text-ellipsis-content {\n width: 100%;\n line-height: 1.2;\n white-space: nowrap;\n text-align: center;\n background: transparent;\n /* overflow: hidden;\n text-overflow: ellipsis; */\n}\n.lf-node-text-ellipsis-content > div {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* tool-overlay */\n.lf-tool-overlay {\n position: absolute;\n inset: 0;\n z-index: 2;\n overflow: hidden;\n pointer-events: none;\n}\n.lf-tool-overlay > * {\n pointer-events: all;\n}\n/* modification-overlay */\n.modification-overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n overflow: hidden;\n pointer-events: none;\n}\n.modification-overlay > * {\n pointer-events: all;\n}\n.lf-outline,\n.lf-snapline {\n pointer-events: none;\n}\n.lf-keyboard-tips {\n float: right;\n}\n.lf-node-select-decorate {\n position: absolute;\n border: 1px dashed #343435;\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n.lf-multiple-select {\n position: absolute;\n border: 2px dashed #187dffcc;\n box-shadow: 0 0 3px 0 #187dff80;\n cursor: move;\n}\n.lf-edge-adjust-point {\n cursor: move;\n}\n.lf-rotate-control {\n cursor: grabbing;\n}\n.lf-resize-control-nw {\n cursor: nw-resize;\n}\n.lf-resize-control-n {\n cursor: n-resize;\n}\n.lf-resize-control-ne {\n cursor: ne-resize;\n}\n.lf-resize-control-e {\n cursor: e-resize;\n}\n.lf-resize-control-se {\n cursor: se-resize;\n}\n.lf-resize-control-s {\n cursor: s-resize;\n}\n.lf-resize-control-sw {\n cursor: sw-resize;\n}\n.lf-resize-control-w {\n cursor: w-resize;\n}\n";
|
package/lib/util/drag.d.ts
CHANGED
package/lib/util/drag.js
CHANGED
|
@@ -124,6 +124,17 @@ var StepDrag = /** @class */ (function () {
|
|
|
124
124
|
_this.onDragEnd({ event: undefined });
|
|
125
125
|
_this.isDragging = false;
|
|
126
126
|
};
|
|
127
|
+
this.destroy = function () {
|
|
128
|
+
if (_this.isStartDragging) {
|
|
129
|
+
// https://github.com/didi/LogicFlow/issues/1934
|
|
130
|
+
// https://github.com/didi/LogicFlow/issues/1926
|
|
131
|
+
// cancelDrag()->onDragEnd()->updateEdgePointByAnchors()触发线的重新计算
|
|
132
|
+
// 我们的本意是为了防止mousemove和mouseup没有及时被移除
|
|
133
|
+
// 因此这里增加if(this.isStartDragging)的判断,isStartDragging=true代表没有触发handleMouseUp(),此时监听还没被移除
|
|
134
|
+
// 在拖拽情况下(isStartDragging=true),此时注册了监听,在组件突然销毁时,强制触发cancelDrag进行监听事件的移除
|
|
135
|
+
_this.cancelDrag();
|
|
136
|
+
}
|
|
137
|
+
};
|
|
127
138
|
this.onDragStart = onDragStart;
|
|
128
139
|
this.onDragging = onDragging;
|
|
129
140
|
this.onDragEnd = onDragEnd;
|
package/lib/view/Anchor.js
CHANGED
|
@@ -141,14 +141,12 @@ var Anchor = /** @class */ (function (_super) {
|
|
|
141
141
|
_this.sourceRuleResults.clear();
|
|
142
142
|
_this.targetRuleResults.clear();
|
|
143
143
|
var _b = _this.props, graphModel = _b.graphModel, nodeModel = _b.nodeModel, anchorData = _b.anchorData;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
});
|
|
151
|
-
}
|
|
144
|
+
graphModel.eventCenter.emit(constant_1.EventType.ANCHOR_DRAGEND, {
|
|
145
|
+
data: anchorData,
|
|
146
|
+
e: event,
|
|
147
|
+
nodeModel: nodeModel,
|
|
148
|
+
edgeModel: edgeModel !== null && edgeModel !== void 0 ? edgeModel : undefined,
|
|
149
|
+
});
|
|
152
150
|
};
|
|
153
151
|
_this.checkEnd = function (event) {
|
|
154
152
|
var _a;
|
package/lib/view/Control.js
CHANGED
|
@@ -319,7 +319,7 @@ var ResizeControl = /** @class */ (function (_super) {
|
|
|
319
319
|
return _this;
|
|
320
320
|
}
|
|
321
321
|
ResizeControl.prototype.componentWillUnmount = function () {
|
|
322
|
-
this.dragHandler.
|
|
322
|
+
this.dragHandler.destroy();
|
|
323
323
|
};
|
|
324
324
|
ResizeControl.prototype.render = function () {
|
|
325
325
|
var _a = this.props, x = _a.x, y = _a.y, direction = _a.direction, model = _a.model;
|
package/lib/view/Graph.js
CHANGED
|
@@ -14,17 +14,6 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
14
14
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
15
|
};
|
|
16
16
|
})();
|
|
17
|
-
var __assign = (this && this.__assign) || function () {
|
|
18
|
-
__assign = Object.assign || function(t) {
|
|
19
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
-
s = arguments[i];
|
|
21
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
-
t[p] = s[p];
|
|
23
|
-
}
|
|
24
|
-
return t;
|
|
25
|
-
};
|
|
26
|
-
return __assign.apply(this, arguments);
|
|
27
|
-
};
|
|
28
17
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
29
18
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
30
19
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -104,12 +93,11 @@ var Graph = /** @class */ (function (_super) {
|
|
|
104
93
|
if (options.height) {
|
|
105
94
|
style.height = "".concat(graphModel.height, "px");
|
|
106
95
|
}
|
|
107
|
-
var
|
|
108
|
-
var fakeNode = graphModel.fakeNode, editConfigModel = graphModel.editConfigModel;
|
|
96
|
+
var fakeNode = graphModel.fakeNode, editConfigModel = graphModel.editConfigModel, background = graphModel.background;
|
|
109
97
|
var adjustEdge = editConfigModel.adjustEdge;
|
|
110
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: "lf-graph", "flow-id": graphModel.flowId, children: [(0, jsx_runtime_1.jsxs)(overlay_1.CanvasOverlay, { graphModel: graphModel, dnd: dnd, children: [(0, jsx_runtime_1.jsx)("g", { className: "lf-base", children: (0, lodash_es_1.map)(graphModel.sortElements, function (nodeModel) {
|
|
98
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "lf-graph", "flow-id": graphModel.flowId, style: style, children: [(0, jsx_runtime_1.jsxs)(overlay_1.CanvasOverlay, { graphModel: graphModel, dnd: dnd, children: [(0, jsx_runtime_1.jsx)("g", { className: "lf-base", children: (0, lodash_es_1.map)(graphModel.sortElements, function (nodeModel) {
|
|
111
99
|
return _this.getComponent(nodeModel, graphModel);
|
|
112
|
-
}) }), fakeNode ? this.getComponent(fakeNode, graphModel) : ''] }), (0, jsx_runtime_1.jsxs)(overlay_1.ModificationOverlay, { graphModel: graphModel, children: [(0, jsx_runtime_1.jsx)(overlay_1.OutlineOverlay, { graphModel: graphModel }), adjustEdge ? (0, jsx_runtime_1.jsx)(overlay_1.BezierAdjustOverlay, { graphModel: graphModel }) : '', options.snapline !== false ? ((0, jsx_runtime_1.jsx)(overlay_1.SnaplineOverlay, { snaplineModel: snaplineModel })) : ('')] }), (0, jsx_runtime_1.jsx)(overlay_1.ToolOverlay, { graphModel: graphModel, tool: tool }),
|
|
100
|
+
}) }), fakeNode ? this.getComponent(fakeNode, graphModel) : ''] }), (0, jsx_runtime_1.jsxs)(overlay_1.ModificationOverlay, { graphModel: graphModel, children: [(0, jsx_runtime_1.jsx)(overlay_1.OutlineOverlay, { graphModel: graphModel }), adjustEdge ? (0, jsx_runtime_1.jsx)(overlay_1.BezierAdjustOverlay, { graphModel: graphModel }) : '', options.snapline !== false ? ((0, jsx_runtime_1.jsx)(overlay_1.SnaplineOverlay, { snaplineModel: snaplineModel })) : ('')] }), (0, jsx_runtime_1.jsx)(overlay_1.ToolOverlay, { graphModel: graphModel, tool: tool }), background && (0, jsx_runtime_1.jsx)(overlay_1.BackgroundOverlay, { background: background }), (0, jsx_runtime_1.jsx)(overlay_1.Grid, { graphModel: graphModel })] }));
|
|
113
101
|
};
|
|
114
102
|
Graph = __decorate([
|
|
115
103
|
__1.observer
|
package/lib/view/behavior/dnd.js
CHANGED
|
@@ -13,6 +13,7 @@ export type IEdgeState = {
|
|
|
13
13
|
export declare abstract class BaseEdge<P extends IProps> extends Component<P, IEdgeState> {
|
|
14
14
|
static isObserved: boolean;
|
|
15
15
|
static extendsKey?: string;
|
|
16
|
+
mouseUpDrag?: boolean;
|
|
16
17
|
startTime?: number;
|
|
17
18
|
contextMenuTime?: number;
|
|
18
19
|
clickTimer?: number;
|
|
@@ -127,10 +128,13 @@ export declare abstract class BaseEdge<P extends IProps> extends Component<P, IE
|
|
|
127
128
|
* 不支持重写
|
|
128
129
|
*/
|
|
129
130
|
handleMouseDown: (e: MouseEvent) => void;
|
|
131
|
+
handleMouseUp: () => void;
|
|
130
132
|
/**
|
|
131
133
|
* 不支持重写
|
|
132
134
|
*/
|
|
133
|
-
|
|
135
|
+
handleClick: (e: MouseEvent) => void;
|
|
136
|
+
handleFocus: () => void;
|
|
137
|
+
handleBlur: () => void;
|
|
134
138
|
/**
|
|
135
139
|
* @overridable 支持重写, 此方法为获取边的形状,如果需要自定义边的形状,请重写此方法。
|
|
136
140
|
* @example https://docs.logic-flow.cn/docs/#/zh/guide/basic/edge?id=%e5%9f%ba%e4%ba%8e-react-%e7%bb%84%e4%bb%b6%e8%87%aa%e5%ae%9a%e4%b9%89%e8%be%b9
|
|
@@ -149,15 +149,18 @@ var BaseEdge = /** @class */ (function (_super) {
|
|
|
149
149
|
e.stopPropagation();
|
|
150
150
|
_this.startTime = new Date().getTime();
|
|
151
151
|
};
|
|
152
|
+
_this.handleMouseUp = function () {
|
|
153
|
+
var model = _this.props.model;
|
|
154
|
+
_this.mouseUpDrag = model.isDragging;
|
|
155
|
+
};
|
|
152
156
|
/**
|
|
153
157
|
* 不支持重写
|
|
154
158
|
*/
|
|
155
|
-
_this.
|
|
159
|
+
_this.handleClick = function (e) {
|
|
156
160
|
if (!_this.startTime)
|
|
157
161
|
return;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
return; // 事件大于200ms,认为是拖拽。
|
|
162
|
+
if (_this.mouseUpDrag)
|
|
163
|
+
return; // 如果是拖拽,不触发click事件。
|
|
161
164
|
var isRightClick = e.button === 2;
|
|
162
165
|
if (isRightClick)
|
|
163
166
|
return;
|
|
@@ -217,6 +220,18 @@ var BaseEdge = /** @class */ (function (_super) {
|
|
|
217
220
|
graphModel.selectEdgeById(model.id, (0, util_1.isMultipleSelect)(e, editConfigModel));
|
|
218
221
|
_this.toFront();
|
|
219
222
|
};
|
|
223
|
+
_this.handleFocus = function () {
|
|
224
|
+
var _a = _this.props, model = _a.model, graphModel = _a.graphModel;
|
|
225
|
+
graphModel.eventCenter.emit(constant_1.EventType.EDGE_FOCUS, {
|
|
226
|
+
data: model.getData(),
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
_this.handleBlur = function () {
|
|
230
|
+
var _a = _this.props, model = _a.model, graphModel = _a.graphModel;
|
|
231
|
+
graphModel.eventCenter.emit(constant_1.EventType.EDGE_BLUR, {
|
|
232
|
+
data: model.getData(),
|
|
233
|
+
});
|
|
234
|
+
};
|
|
220
235
|
return _this;
|
|
221
236
|
}
|
|
222
237
|
/**
|
|
@@ -405,7 +420,7 @@ var BaseEdge = /** @class */ (function (_super) {
|
|
|
405
420
|
isSelected && 'lf-edge-selected',
|
|
406
421
|
]
|
|
407
422
|
.filter(Boolean)
|
|
408
|
-
.join(' '), onMouseDown: this.handleMouseDown, onMouseUp: this.handleMouseUp, onContextMenu: this.handleContextMenu, onMouseOver: this.setHoverOn, onMouseEnter: this.setHoverOn, onMouseLeave: this.setHoverOff, children: [this.getShape(), this.getAppend(), this.getText(), this.getArrow()] }), isShowAdjustPoint && isSelected ? this.getAdjustPoints() : ''] }));
|
|
423
|
+
.join(' '), onMouseDown: this.handleMouseDown, onMouseUp: this.handleMouseUp, onClick: this.handleClick, onContextMenu: this.handleContextMenu, onMouseOver: this.setHoverOn, onMouseEnter: this.setHoverOn, onMouseLeave: this.setHoverOff, onFocus: this.handleFocus, onBlur: this.handleBlur, children: [this.getShape(), this.getAppend(), this.getText(), this.getArrow()] }), isShowAdjustPoint && isSelected ? this.getAdjustPoints() : ''] }));
|
|
409
424
|
};
|
|
410
425
|
BaseEdge.isObserved = false;
|
|
411
426
|
return BaseEdge;
|
|
@@ -38,6 +38,8 @@ export declare abstract class BaseNode<P extends IProps = IProps> extends Compon
|
|
|
38
38
|
handleClick: (e: MouseEvent) => void;
|
|
39
39
|
handleContextMenu: (ev: MouseEvent) => void;
|
|
40
40
|
handleMouseDown: (ev: MouseEvent) => void;
|
|
41
|
+
handleFocus: () => void;
|
|
42
|
+
handleBlur: () => void;
|
|
41
43
|
setHoverOn: (ev: MouseEvent) => void;
|
|
42
44
|
setHoverOff: (ev: MouseEvent) => void;
|
|
43
45
|
/**
|