@knotx/plugins-connection-line 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +44 -11
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +45 -12
- package/package.json +12 -10
package/dist/index.cjs
CHANGED
|
@@ -76,14 +76,14 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
76
76
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
77
77
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
78
78
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
79
|
-
var _destroy_dec, _init_dec, _createEdges_dec, _createNodeAndEdge_dec, _containerRender_dec, _registerCreator_dec, _getConnectHandleAttributes_dec, _selected_dec, _interaction_dec, _dispatchEdgeOperation_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
79
|
+
var _destroy_dec, _init_dec, _onTransform_dec, _onIsDragging_dec, _createEdges_dec, _createNodeAndEdge_dec, _containerRender_dec, _registerCreator_dec, _getConnectHandleAttributes_dec, _isDragging_dec, _selected_dec, _edgeScroll_dec, _transform_dec, _interaction_dec, _dispatchEdgeOperation_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
80
80
|
const DEFAULT_CONFIG = {
|
|
81
81
|
allowCreateNodeOnBlankArea: true,
|
|
82
82
|
edgeType: "bezier",
|
|
83
83
|
connectionLineClassName: core.bem("connection-line", "line"),
|
|
84
84
|
allowMultiDrag: true
|
|
85
85
|
};
|
|
86
|
-
class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _dispatchEdgeOperation_dec = [decorators.inject.dispatchEdgeOperation()], _interaction_dec = [decorators.inject.interaction()], _selected_dec = [decorators.inject.selection.selected()], _getConnectHandleAttributes_dec = [decorators.register("getConnectHandleAttributes")], _registerCreator_dec = [decorators.register("registerCreator")], _containerRender_dec = [decorators.layer(core.Layer.Nodes, 10)], _createNodeAndEdge_dec = [decorators.edgeOperator()], _createEdges_dec = [decorators.edgeOperator()], _init_dec = [decorators.OnInit], _destroy_dec = [decorators.OnDestroy], _a) {
|
|
86
|
+
class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.inject.getNode()], _dispatchNodeOperation_dec = [decorators.inject.dispatchNodeOperation()], _dispatchEdgeOperation_dec = [decorators.inject.dispatchEdgeOperation()], _interaction_dec = [decorators.inject.interaction()], _transform_dec = [decorators.inject.canvas.transform()], _edgeScroll_dec = [decorators.inject.canvas.edgeScroll()], _selected_dec = [decorators.inject.selection.selected()], _isDragging_dec = [decorators.register("isDragging")], _getConnectHandleAttributes_dec = [decorators.register("getConnectHandleAttributes")], _registerCreator_dec = [decorators.register("registerCreator")], _containerRender_dec = [decorators.layer(core.Layer.Nodes, 10)], _createNodeAndEdge_dec = [decorators.edgeOperator()], _createEdges_dec = [decorators.edgeOperator()], _onIsDragging_dec = [decorators.subscribe.connectionLine.isDragging()], _onTransform_dec = [decorators.subscribe.canvas.transform()], _init_dec = [decorators.OnInit], _destroy_dec = [decorators.OnDestroy], _a) {
|
|
87
87
|
constructor() {
|
|
88
88
|
super(...arguments);
|
|
89
89
|
__runInitializers(_init, 5, this);
|
|
@@ -92,8 +92,11 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
92
92
|
__publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
|
|
93
93
|
__publicField(this, "dispatchEdgeOperation", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
|
|
94
94
|
__publicField(this, "interaction", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
|
|
95
|
-
__publicField(this, "
|
|
96
|
-
__publicField(this, "
|
|
95
|
+
__publicField(this, "transform", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
|
|
96
|
+
__publicField(this, "edgeScroll", __runInitializers(_init, 28, this)), __runInitializers(_init, 31, this);
|
|
97
|
+
__publicField(this, "selected", __runInitializers(_init, 32, this, [])), __runInitializers(_init, 35, this);
|
|
98
|
+
__publicField(this, "isDragging", __runInitializers(_init, 36, this, false)), __runInitializers(_init, 39, this);
|
|
99
|
+
__publicField(this, "getConnectHandleAttributes", __runInitializers(_init, 40, this, ({ nodeId, type, index = 0, className = "" }) => {
|
|
97
100
|
return {
|
|
98
101
|
"className": `${className} ${this.classNames.connector} ${this.classNames[type]}`,
|
|
99
102
|
"data-plugin-id": this.pluginId,
|
|
@@ -101,7 +104,7 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
101
104
|
"data-connector-id": String(index),
|
|
102
105
|
"data-connector-type": type
|
|
103
106
|
};
|
|
104
|
-
})), __runInitializers(_init,
|
|
107
|
+
})), __runInitializers(_init, 43, this);
|
|
105
108
|
__publicField(this, "classNames", {
|
|
106
109
|
connector: core.bem("connection-line", "connector"),
|
|
107
110
|
source: core.bem("connection-line", "connector", "source"),
|
|
@@ -112,6 +115,8 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
112
115
|
__publicField(this, "connectionLines", /* @__PURE__ */ new Map());
|
|
113
116
|
// 拖拽起始缩放比例
|
|
114
117
|
__publicField(this, "startScale", 1);
|
|
118
|
+
// 记录拖拽开始时画布的位置
|
|
119
|
+
__publicField(this, "startTransformPosition", { x: 0, y: 0 });
|
|
115
120
|
// 用于存储当前触发拖拽事件的DOM元素对应的节点ID
|
|
116
121
|
__publicField(this, "currentDragNodeId", null);
|
|
117
122
|
__publicField(this, "dragInteractable");
|
|
@@ -120,7 +125,7 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
120
125
|
// 新节点创建器列表
|
|
121
126
|
__publicField(this, "creators$", new rxjs.BehaviorSubject([]));
|
|
122
127
|
__publicField(this, "config", DEFAULT_CONFIG);
|
|
123
|
-
__publicField(this, "registerCreator", __runInitializers(_init,
|
|
128
|
+
__publicField(this, "registerCreator", __runInitializers(_init, 44, this, (creator) => {
|
|
124
129
|
const creators = this.creators$.value;
|
|
125
130
|
creators.push(creator);
|
|
126
131
|
this.creators$.next(creators);
|
|
@@ -132,7 +137,7 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
132
137
|
this.creators$.next(currentCreators);
|
|
133
138
|
}
|
|
134
139
|
};
|
|
135
|
-
})), __runInitializers(_init,
|
|
140
|
+
})), __runInitializers(_init, 47, this);
|
|
136
141
|
}
|
|
137
142
|
containerRender() {
|
|
138
143
|
const size = this.getContainerSize();
|
|
@@ -233,13 +238,21 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
233
238
|
if (!currentDragConnectionLine) {
|
|
234
239
|
return;
|
|
235
240
|
}
|
|
236
|
-
|
|
237
|
-
|
|
241
|
+
const transformDeltaX = this.transform.positionX - this.startTransformPosition.x;
|
|
242
|
+
const transformDeltaY = this.transform.positionY - this.startTransformPosition.y;
|
|
243
|
+
const scaledDx = dx / this.transform.scale;
|
|
244
|
+
const scaledDy = dy / this.transform.scale;
|
|
245
|
+
currentDragConnectionLine.currentPosition.x += scaledDx - transformDeltaX / this.transform.scale;
|
|
246
|
+
currentDragConnectionLine.currentPosition.y += scaledDy - transformDeltaY / this.transform.scale;
|
|
238
247
|
this.connectionLines.forEach((state) => {
|
|
239
248
|
state.currentPosition.x = currentDragConnectionLine.currentPosition.x;
|
|
240
249
|
state.currentPosition.y = currentDragConnectionLine.currentPosition.y;
|
|
241
250
|
this.updateConnectionLine(state);
|
|
242
251
|
});
|
|
252
|
+
this.startTransformPosition = {
|
|
253
|
+
x: this.transform.positionX,
|
|
254
|
+
y: this.transform.positionY
|
|
255
|
+
};
|
|
243
256
|
}
|
|
244
257
|
/**
|
|
245
258
|
* 清除所有临时连接线
|
|
@@ -315,11 +328,17 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
315
328
|
}))
|
|
316
329
|
}];
|
|
317
330
|
}
|
|
331
|
+
onIsDragging(isDragging) {
|
|
332
|
+
this.edgeScroll.setConfig({ enabled: isDragging });
|
|
333
|
+
}
|
|
334
|
+
onTransform() {
|
|
335
|
+
this.updateAllConnectionLines(0, 0);
|
|
336
|
+
}
|
|
318
337
|
init(config) {
|
|
319
338
|
this.config = lodashEs.merge(DEFAULT_CONFIG, config);
|
|
320
339
|
this.dragInteractable = interact__default(`.${this.classNames.source}[data-plugin-id="${this.pluginId}"]`).draggable({
|
|
321
340
|
inertia: false,
|
|
322
|
-
autoScroll:
|
|
341
|
+
autoScroll: false,
|
|
323
342
|
listeners: {
|
|
324
343
|
start: (event) => {
|
|
325
344
|
var _a2;
|
|
@@ -333,7 +352,11 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
333
352
|
const x = (rect.left + rect.right) / 2;
|
|
334
353
|
const y = (rect.top + rect.bottom) / 2;
|
|
335
354
|
const { left: containerLeft, top: containerTop, width: containerWidth } = ((_a2 = this.getContainerElement()) == null ? void 0 : _a2.getBoundingClientRect()) || { left: 0, top: 0, width: 1 };
|
|
336
|
-
this.startScale = containerWidth / this.getContainerSize();
|
|
355
|
+
this.startScale = this.transform.scale || containerWidth / this.getContainerSize();
|
|
356
|
+
this.startTransformPosition = {
|
|
357
|
+
x: this.transform.positionX,
|
|
358
|
+
y: this.transform.positionY
|
|
359
|
+
};
|
|
337
360
|
const startPosition = {
|
|
338
361
|
x: (x - containerLeft) / this.startScale,
|
|
339
362
|
y: (y - containerTop) / this.startScale
|
|
@@ -360,6 +383,7 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
360
383
|
const state = this.createConnectionLine(sourceNodeId, nodeStartPosition);
|
|
361
384
|
this.connectionLines.set(sourceNodeId, state);
|
|
362
385
|
this.interaction.start(this.pluginId, "connect", core.InteractionPriority.EntityConnectDrag);
|
|
386
|
+
this.isDragging = true;
|
|
363
387
|
});
|
|
364
388
|
},
|
|
365
389
|
move: (event) => {
|
|
@@ -371,10 +395,13 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
371
395
|
this.clearAllConnectionLines();
|
|
372
396
|
this.currentDragNodeId = null;
|
|
373
397
|
this.interaction.end(this.pluginId, "connect");
|
|
398
|
+
this.isDragging = false;
|
|
374
399
|
}
|
|
375
400
|
}
|
|
376
401
|
});
|
|
402
|
+
interact__default.dynamicDrop(true);
|
|
377
403
|
this.dropInteractable = interact__default(`.${this.classNames.target}[data-plugin-id="${this.pluginId}"]`).dropzone({
|
|
404
|
+
autoScroll: { enabled: false },
|
|
378
405
|
ondragenter: (event) => {
|
|
379
406
|
event.target.classList.add(this.classNames.active);
|
|
380
407
|
},
|
|
@@ -400,6 +427,7 @@ class ConnectionLine extends (_a = core.BasePlugin, _getNode_dec = [decorators.i
|
|
|
400
427
|
});
|
|
401
428
|
if (this.config.allowCreateNodeOnBlankArea) {
|
|
402
429
|
this.blankAreaDropInteractable = interact__default(`.${core.bem("canvas", "wrapper")}`).dropzone({
|
|
430
|
+
autoScroll: { enabled: false },
|
|
403
431
|
ondrop: (event) => {
|
|
404
432
|
const element = event.target;
|
|
405
433
|
const isNode = !!element.closest(`[data-node-id]`);
|
|
@@ -426,13 +454,18 @@ _init = __decoratorStart(_a);
|
|
|
426
454
|
__decorateElement(_init, 1, "containerRender", _containerRender_dec, ConnectionLine);
|
|
427
455
|
__decorateElement(_init, 1, "createNodeAndEdge", _createNodeAndEdge_dec, ConnectionLine);
|
|
428
456
|
__decorateElement(_init, 1, "createEdges", _createEdges_dec, ConnectionLine);
|
|
457
|
+
__decorateElement(_init, 1, "onIsDragging", _onIsDragging_dec, ConnectionLine);
|
|
458
|
+
__decorateElement(_init, 1, "onTransform", _onTransform_dec, ConnectionLine);
|
|
429
459
|
__decorateElement(_init, 1, "init", _init_dec, ConnectionLine);
|
|
430
460
|
__decorateElement(_init, 1, "destroy", _destroy_dec, ConnectionLine);
|
|
431
461
|
__decorateElement(_init, 5, "getNode", _getNode_dec, ConnectionLine);
|
|
432
462
|
__decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, ConnectionLine);
|
|
433
463
|
__decorateElement(_init, 5, "dispatchEdgeOperation", _dispatchEdgeOperation_dec, ConnectionLine);
|
|
434
464
|
__decorateElement(_init, 5, "interaction", _interaction_dec, ConnectionLine);
|
|
465
|
+
__decorateElement(_init, 5, "transform", _transform_dec, ConnectionLine);
|
|
466
|
+
__decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, ConnectionLine);
|
|
435
467
|
__decorateElement(_init, 5, "selected", _selected_dec, ConnectionLine);
|
|
468
|
+
__decorateElement(_init, 5, "isDragging", _isDragging_dec, ConnectionLine);
|
|
436
469
|
__decorateElement(_init, 5, "getConnectHandleAttributes", _getConnectHandleAttributes_dec, ConnectionLine);
|
|
437
470
|
__decorateElement(_init, 5, "registerCreator", _registerCreator_dec, ConnectionLine);
|
|
438
471
|
__decoratorMetadata(_init, ConnectionLine);
|
package/dist/index.d.cts
CHANGED
|
@@ -28,6 +28,7 @@ interface ConnectionLineConfig {
|
|
|
28
28
|
declare module '@knotx/core' {
|
|
29
29
|
interface PluginData {
|
|
30
30
|
connectionLine: {
|
|
31
|
+
isDragging: boolean;
|
|
31
32
|
/**
|
|
32
33
|
* 注册新节点创建器
|
|
33
34
|
* @param creator 新节点创建器
|
|
@@ -70,11 +71,15 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
70
71
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
71
72
|
dispatchEdgeOperation: Engine['dispatchEdgeOperation'];
|
|
72
73
|
interaction: Engine['interaction'];
|
|
74
|
+
transform: PluginData['canvas']['transform'];
|
|
75
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
73
76
|
selected: PluginData['selection']['selected'];
|
|
77
|
+
isDragging: boolean;
|
|
74
78
|
getConnectHandleAttributes: PluginData['connectionLine']['getConnectHandleAttributes'];
|
|
75
79
|
private classNames;
|
|
76
80
|
private connectionLines;
|
|
77
81
|
private startScale;
|
|
82
|
+
private startTransformPosition;
|
|
78
83
|
private currentDragNodeId;
|
|
79
84
|
private dragInteractable?;
|
|
80
85
|
private dropInteractable?;
|
|
@@ -120,6 +125,8 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
120
125
|
* 批量创建新的边
|
|
121
126
|
*/
|
|
122
127
|
createEdges(sourceNodeIds: string[], targetNodeId: string): EdgeOperation[];
|
|
128
|
+
onIsDragging(isDragging: boolean): void;
|
|
129
|
+
onTransform(): void;
|
|
123
130
|
init(config: ConnectionLineConfig): void;
|
|
124
131
|
destroy(): void;
|
|
125
132
|
}
|
package/dist/index.d.mts
CHANGED
|
@@ -28,6 +28,7 @@ interface ConnectionLineConfig {
|
|
|
28
28
|
declare module '@knotx/core' {
|
|
29
29
|
interface PluginData {
|
|
30
30
|
connectionLine: {
|
|
31
|
+
isDragging: boolean;
|
|
31
32
|
/**
|
|
32
33
|
* 注册新节点创建器
|
|
33
34
|
* @param creator 新节点创建器
|
|
@@ -70,11 +71,15 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
70
71
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
71
72
|
dispatchEdgeOperation: Engine['dispatchEdgeOperation'];
|
|
72
73
|
interaction: Engine['interaction'];
|
|
74
|
+
transform: PluginData['canvas']['transform'];
|
|
75
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
73
76
|
selected: PluginData['selection']['selected'];
|
|
77
|
+
isDragging: boolean;
|
|
74
78
|
getConnectHandleAttributes: PluginData['connectionLine']['getConnectHandleAttributes'];
|
|
75
79
|
private classNames;
|
|
76
80
|
private connectionLines;
|
|
77
81
|
private startScale;
|
|
82
|
+
private startTransformPosition;
|
|
78
83
|
private currentDragNodeId;
|
|
79
84
|
private dragInteractable?;
|
|
80
85
|
private dropInteractable?;
|
|
@@ -120,6 +125,8 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
120
125
|
* 批量创建新的边
|
|
121
126
|
*/
|
|
122
127
|
createEdges(sourceNodeIds: string[], targetNodeId: string): EdgeOperation[];
|
|
128
|
+
onIsDragging(isDragging: boolean): void;
|
|
129
|
+
onTransform(): void;
|
|
123
130
|
init(config: ConnectionLineConfig): void;
|
|
124
131
|
destroy(): void;
|
|
125
132
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ interface ConnectionLineConfig {
|
|
|
28
28
|
declare module '@knotx/core' {
|
|
29
29
|
interface PluginData {
|
|
30
30
|
connectionLine: {
|
|
31
|
+
isDragging: boolean;
|
|
31
32
|
/**
|
|
32
33
|
* 注册新节点创建器
|
|
33
34
|
* @param creator 新节点创建器
|
|
@@ -70,11 +71,15 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
70
71
|
dispatchNodeOperation: Engine['dispatchNodeOperation'];
|
|
71
72
|
dispatchEdgeOperation: Engine['dispatchEdgeOperation'];
|
|
72
73
|
interaction: Engine['interaction'];
|
|
74
|
+
transform: PluginData['canvas']['transform'];
|
|
75
|
+
edgeScroll: PluginData['canvas']['edgeScroll'];
|
|
73
76
|
selected: PluginData['selection']['selected'];
|
|
77
|
+
isDragging: boolean;
|
|
74
78
|
getConnectHandleAttributes: PluginData['connectionLine']['getConnectHandleAttributes'];
|
|
75
79
|
private classNames;
|
|
76
80
|
private connectionLines;
|
|
77
81
|
private startScale;
|
|
82
|
+
private startTransformPosition;
|
|
78
83
|
private currentDragNodeId;
|
|
79
84
|
private dragInteractable?;
|
|
80
85
|
private dropInteractable?;
|
|
@@ -120,6 +125,8 @@ declare class ConnectionLine extends BasePlugin<'connectionLine', ConnectionLine
|
|
|
120
125
|
* 批量创建新的边
|
|
121
126
|
*/
|
|
122
127
|
createEdges(sourceNodeIds: string[], targetNodeId: string): EdgeOperation[];
|
|
128
|
+
onIsDragging(isDragging: boolean): void;
|
|
129
|
+
onTransform(): void;
|
|
123
130
|
init(config: ConnectionLineConfig): void;
|
|
124
131
|
destroy(): void;
|
|
125
132
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from '@knotx/jsx/jsx-runtime';
|
|
2
2
|
import { bem, Layer, generateId, InteractionPriority, BasePlugin } from '@knotx/core';
|
|
3
|
-
import { inject, register, layer, edgeOperator, OnInit, OnDestroy } from '@knotx/decorators';
|
|
3
|
+
import { inject, register, layer, edgeOperator, subscribe, OnInit, OnDestroy } from '@knotx/decorators';
|
|
4
4
|
import interact from 'interactjs';
|
|
5
5
|
import { merge } from 'lodash-es';
|
|
6
6
|
import { BehaviorSubject } from 'rxjs';
|
|
@@ -70,14 +70,14 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
70
70
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
71
71
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
72
72
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
73
|
-
var _destroy_dec, _init_dec, _createEdges_dec, _createNodeAndEdge_dec, _containerRender_dec, _registerCreator_dec, _getConnectHandleAttributes_dec, _selected_dec, _interaction_dec, _dispatchEdgeOperation_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
73
|
+
var _destroy_dec, _init_dec, _onTransform_dec, _onIsDragging_dec, _createEdges_dec, _createNodeAndEdge_dec, _containerRender_dec, _registerCreator_dec, _getConnectHandleAttributes_dec, _isDragging_dec, _selected_dec, _edgeScroll_dec, _transform_dec, _interaction_dec, _dispatchEdgeOperation_dec, _dispatchNodeOperation_dec, _getNode_dec, _a, _init;
|
|
74
74
|
const DEFAULT_CONFIG = {
|
|
75
75
|
allowCreateNodeOnBlankArea: true,
|
|
76
76
|
edgeType: "bezier",
|
|
77
77
|
connectionLineClassName: bem("connection-line", "line"),
|
|
78
78
|
allowMultiDrag: true
|
|
79
79
|
};
|
|
80
|
-
class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _dispatchEdgeOperation_dec = [inject.dispatchEdgeOperation()], _interaction_dec = [inject.interaction()], _selected_dec = [inject.selection.selected()], _getConnectHandleAttributes_dec = [register("getConnectHandleAttributes")], _registerCreator_dec = [register("registerCreator")], _containerRender_dec = [layer(Layer.Nodes, 10)], _createNodeAndEdge_dec = [edgeOperator()], _createEdges_dec = [edgeOperator()], _init_dec = [OnInit], _destroy_dec = [OnDestroy], _a) {
|
|
80
|
+
class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()], _dispatchNodeOperation_dec = [inject.dispatchNodeOperation()], _dispatchEdgeOperation_dec = [inject.dispatchEdgeOperation()], _interaction_dec = [inject.interaction()], _transform_dec = [inject.canvas.transform()], _edgeScroll_dec = [inject.canvas.edgeScroll()], _selected_dec = [inject.selection.selected()], _isDragging_dec = [register("isDragging")], _getConnectHandleAttributes_dec = [register("getConnectHandleAttributes")], _registerCreator_dec = [register("registerCreator")], _containerRender_dec = [layer(Layer.Nodes, 10)], _createNodeAndEdge_dec = [edgeOperator()], _createEdges_dec = [edgeOperator()], _onIsDragging_dec = [subscribe.connectionLine.isDragging()], _onTransform_dec = [subscribe.canvas.transform()], _init_dec = [OnInit], _destroy_dec = [OnDestroy], _a) {
|
|
81
81
|
constructor() {
|
|
82
82
|
super(...arguments);
|
|
83
83
|
__runInitializers(_init, 5, this);
|
|
@@ -86,8 +86,11 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
86
86
|
__publicField(this, "dispatchNodeOperation", __runInitializers(_init, 12, this)), __runInitializers(_init, 15, this);
|
|
87
87
|
__publicField(this, "dispatchEdgeOperation", __runInitializers(_init, 16, this)), __runInitializers(_init, 19, this);
|
|
88
88
|
__publicField(this, "interaction", __runInitializers(_init, 20, this)), __runInitializers(_init, 23, this);
|
|
89
|
-
__publicField(this, "
|
|
90
|
-
__publicField(this, "
|
|
89
|
+
__publicField(this, "transform", __runInitializers(_init, 24, this)), __runInitializers(_init, 27, this);
|
|
90
|
+
__publicField(this, "edgeScroll", __runInitializers(_init, 28, this)), __runInitializers(_init, 31, this);
|
|
91
|
+
__publicField(this, "selected", __runInitializers(_init, 32, this, [])), __runInitializers(_init, 35, this);
|
|
92
|
+
__publicField(this, "isDragging", __runInitializers(_init, 36, this, false)), __runInitializers(_init, 39, this);
|
|
93
|
+
__publicField(this, "getConnectHandleAttributes", __runInitializers(_init, 40, this, ({ nodeId, type, index = 0, className = "" }) => {
|
|
91
94
|
return {
|
|
92
95
|
"className": `${className} ${this.classNames.connector} ${this.classNames[type]}`,
|
|
93
96
|
"data-plugin-id": this.pluginId,
|
|
@@ -95,7 +98,7 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
95
98
|
"data-connector-id": String(index),
|
|
96
99
|
"data-connector-type": type
|
|
97
100
|
};
|
|
98
|
-
})), __runInitializers(_init,
|
|
101
|
+
})), __runInitializers(_init, 43, this);
|
|
99
102
|
__publicField(this, "classNames", {
|
|
100
103
|
connector: bem("connection-line", "connector"),
|
|
101
104
|
source: bem("connection-line", "connector", "source"),
|
|
@@ -106,6 +109,8 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
106
109
|
__publicField(this, "connectionLines", /* @__PURE__ */ new Map());
|
|
107
110
|
// 拖拽起始缩放比例
|
|
108
111
|
__publicField(this, "startScale", 1);
|
|
112
|
+
// 记录拖拽开始时画布的位置
|
|
113
|
+
__publicField(this, "startTransformPosition", { x: 0, y: 0 });
|
|
109
114
|
// 用于存储当前触发拖拽事件的DOM元素对应的节点ID
|
|
110
115
|
__publicField(this, "currentDragNodeId", null);
|
|
111
116
|
__publicField(this, "dragInteractable");
|
|
@@ -114,7 +119,7 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
114
119
|
// 新节点创建器列表
|
|
115
120
|
__publicField(this, "creators$", new BehaviorSubject([]));
|
|
116
121
|
__publicField(this, "config", DEFAULT_CONFIG);
|
|
117
|
-
__publicField(this, "registerCreator", __runInitializers(_init,
|
|
122
|
+
__publicField(this, "registerCreator", __runInitializers(_init, 44, this, (creator) => {
|
|
118
123
|
const creators = this.creators$.value;
|
|
119
124
|
creators.push(creator);
|
|
120
125
|
this.creators$.next(creators);
|
|
@@ -126,7 +131,7 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
126
131
|
this.creators$.next(currentCreators);
|
|
127
132
|
}
|
|
128
133
|
};
|
|
129
|
-
})), __runInitializers(_init,
|
|
134
|
+
})), __runInitializers(_init, 47, this);
|
|
130
135
|
}
|
|
131
136
|
containerRender() {
|
|
132
137
|
const size = this.getContainerSize();
|
|
@@ -227,13 +232,21 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
227
232
|
if (!currentDragConnectionLine) {
|
|
228
233
|
return;
|
|
229
234
|
}
|
|
230
|
-
|
|
231
|
-
|
|
235
|
+
const transformDeltaX = this.transform.positionX - this.startTransformPosition.x;
|
|
236
|
+
const transformDeltaY = this.transform.positionY - this.startTransformPosition.y;
|
|
237
|
+
const scaledDx = dx / this.transform.scale;
|
|
238
|
+
const scaledDy = dy / this.transform.scale;
|
|
239
|
+
currentDragConnectionLine.currentPosition.x += scaledDx - transformDeltaX / this.transform.scale;
|
|
240
|
+
currentDragConnectionLine.currentPosition.y += scaledDy - transformDeltaY / this.transform.scale;
|
|
232
241
|
this.connectionLines.forEach((state) => {
|
|
233
242
|
state.currentPosition.x = currentDragConnectionLine.currentPosition.x;
|
|
234
243
|
state.currentPosition.y = currentDragConnectionLine.currentPosition.y;
|
|
235
244
|
this.updateConnectionLine(state);
|
|
236
245
|
});
|
|
246
|
+
this.startTransformPosition = {
|
|
247
|
+
x: this.transform.positionX,
|
|
248
|
+
y: this.transform.positionY
|
|
249
|
+
};
|
|
237
250
|
}
|
|
238
251
|
/**
|
|
239
252
|
* 清除所有临时连接线
|
|
@@ -309,11 +322,17 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
309
322
|
}))
|
|
310
323
|
}];
|
|
311
324
|
}
|
|
325
|
+
onIsDragging(isDragging) {
|
|
326
|
+
this.edgeScroll.setConfig({ enabled: isDragging });
|
|
327
|
+
}
|
|
328
|
+
onTransform() {
|
|
329
|
+
this.updateAllConnectionLines(0, 0);
|
|
330
|
+
}
|
|
312
331
|
init(config) {
|
|
313
332
|
this.config = merge(DEFAULT_CONFIG, config);
|
|
314
333
|
this.dragInteractable = interact(`.${this.classNames.source}[data-plugin-id="${this.pluginId}"]`).draggable({
|
|
315
334
|
inertia: false,
|
|
316
|
-
autoScroll:
|
|
335
|
+
autoScroll: false,
|
|
317
336
|
listeners: {
|
|
318
337
|
start: (event) => {
|
|
319
338
|
var _a2;
|
|
@@ -327,7 +346,11 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
327
346
|
const x = (rect.left + rect.right) / 2;
|
|
328
347
|
const y = (rect.top + rect.bottom) / 2;
|
|
329
348
|
const { left: containerLeft, top: containerTop, width: containerWidth } = ((_a2 = this.getContainerElement()) == null ? void 0 : _a2.getBoundingClientRect()) || { left: 0, top: 0, width: 1 };
|
|
330
|
-
this.startScale = containerWidth / this.getContainerSize();
|
|
349
|
+
this.startScale = this.transform.scale || containerWidth / this.getContainerSize();
|
|
350
|
+
this.startTransformPosition = {
|
|
351
|
+
x: this.transform.positionX,
|
|
352
|
+
y: this.transform.positionY
|
|
353
|
+
};
|
|
331
354
|
const startPosition = {
|
|
332
355
|
x: (x - containerLeft) / this.startScale,
|
|
333
356
|
y: (y - containerTop) / this.startScale
|
|
@@ -354,6 +377,7 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
354
377
|
const state = this.createConnectionLine(sourceNodeId, nodeStartPosition);
|
|
355
378
|
this.connectionLines.set(sourceNodeId, state);
|
|
356
379
|
this.interaction.start(this.pluginId, "connect", InteractionPriority.EntityConnectDrag);
|
|
380
|
+
this.isDragging = true;
|
|
357
381
|
});
|
|
358
382
|
},
|
|
359
383
|
move: (event) => {
|
|
@@ -365,10 +389,13 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
365
389
|
this.clearAllConnectionLines();
|
|
366
390
|
this.currentDragNodeId = null;
|
|
367
391
|
this.interaction.end(this.pluginId, "connect");
|
|
392
|
+
this.isDragging = false;
|
|
368
393
|
}
|
|
369
394
|
}
|
|
370
395
|
});
|
|
396
|
+
interact.dynamicDrop(true);
|
|
371
397
|
this.dropInteractable = interact(`.${this.classNames.target}[data-plugin-id="${this.pluginId}"]`).dropzone({
|
|
398
|
+
autoScroll: { enabled: false },
|
|
372
399
|
ondragenter: (event) => {
|
|
373
400
|
event.target.classList.add(this.classNames.active);
|
|
374
401
|
},
|
|
@@ -394,6 +421,7 @@ class ConnectionLine extends (_a = BasePlugin, _getNode_dec = [inject.getNode()]
|
|
|
394
421
|
});
|
|
395
422
|
if (this.config.allowCreateNodeOnBlankArea) {
|
|
396
423
|
this.blankAreaDropInteractable = interact(`.${bem("canvas", "wrapper")}`).dropzone({
|
|
424
|
+
autoScroll: { enabled: false },
|
|
397
425
|
ondrop: (event) => {
|
|
398
426
|
const element = event.target;
|
|
399
427
|
const isNode = !!element.closest(`[data-node-id]`);
|
|
@@ -420,13 +448,18 @@ _init = __decoratorStart(_a);
|
|
|
420
448
|
__decorateElement(_init, 1, "containerRender", _containerRender_dec, ConnectionLine);
|
|
421
449
|
__decorateElement(_init, 1, "createNodeAndEdge", _createNodeAndEdge_dec, ConnectionLine);
|
|
422
450
|
__decorateElement(_init, 1, "createEdges", _createEdges_dec, ConnectionLine);
|
|
451
|
+
__decorateElement(_init, 1, "onIsDragging", _onIsDragging_dec, ConnectionLine);
|
|
452
|
+
__decorateElement(_init, 1, "onTransform", _onTransform_dec, ConnectionLine);
|
|
423
453
|
__decorateElement(_init, 1, "init", _init_dec, ConnectionLine);
|
|
424
454
|
__decorateElement(_init, 1, "destroy", _destroy_dec, ConnectionLine);
|
|
425
455
|
__decorateElement(_init, 5, "getNode", _getNode_dec, ConnectionLine);
|
|
426
456
|
__decorateElement(_init, 5, "dispatchNodeOperation", _dispatchNodeOperation_dec, ConnectionLine);
|
|
427
457
|
__decorateElement(_init, 5, "dispatchEdgeOperation", _dispatchEdgeOperation_dec, ConnectionLine);
|
|
428
458
|
__decorateElement(_init, 5, "interaction", _interaction_dec, ConnectionLine);
|
|
459
|
+
__decorateElement(_init, 5, "transform", _transform_dec, ConnectionLine);
|
|
460
|
+
__decorateElement(_init, 5, "edgeScroll", _edgeScroll_dec, ConnectionLine);
|
|
429
461
|
__decorateElement(_init, 5, "selected", _selected_dec, ConnectionLine);
|
|
462
|
+
__decorateElement(_init, 5, "isDragging", _isDragging_dec, ConnectionLine);
|
|
430
463
|
__decorateElement(_init, 5, "getConnectHandleAttributes", _getConnectHandleAttributes_dec, ConnectionLine);
|
|
431
464
|
__decorateElement(_init, 5, "registerCreator", _registerCreator_dec, ConnectionLine);
|
|
432
465
|
__decoratorMetadata(_init, ConnectionLine);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knotx/plugins-connection-line",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Connectionline Plugin for Knotx",
|
|
5
5
|
"author": "boenfu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,14 +33,15 @@
|
|
|
33
33
|
"@interactjs/modifiers": "^1.10.27",
|
|
34
34
|
"@interactjs/types": "^1.10.27",
|
|
35
35
|
"interactjs": "^1.10.27",
|
|
36
|
-
"@knotx/jsx": "0.4.
|
|
37
|
-
"@knotx/plugins-
|
|
36
|
+
"@knotx/jsx": "0.4.1",
|
|
37
|
+
"@knotx/plugins-canvas": "0.4.1",
|
|
38
|
+
"@knotx/plugins-selection": "0.4.1"
|
|
38
39
|
},
|
|
39
40
|
"dependencies": {
|
|
40
41
|
"lodash-es": "^4.17.21",
|
|
41
42
|
"rxjs": "^7.8.1",
|
|
42
|
-
"@knotx/core": "0.4.
|
|
43
|
-
"@knotx/decorators": "0.4.
|
|
43
|
+
"@knotx/core": "0.4.1",
|
|
44
|
+
"@knotx/decorators": "0.4.1"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
47
|
"@interactjs/actions": "^1.10.27",
|
|
@@ -49,11 +50,12 @@
|
|
|
49
50
|
"@interactjs/types": "^1.10.27",
|
|
50
51
|
"@types/lodash-es": "^4.17.12",
|
|
51
52
|
"interactjs": "^1.10.27",
|
|
52
|
-
"@knotx/build-config": "0.4.
|
|
53
|
-
"@knotx/eslint-config": "0.4.
|
|
54
|
-
"@knotx/jsx": "0.4.
|
|
55
|
-
"@knotx/plugins-
|
|
56
|
-
"@knotx/
|
|
53
|
+
"@knotx/build-config": "0.4.1",
|
|
54
|
+
"@knotx/eslint-config": "0.4.1",
|
|
55
|
+
"@knotx/jsx": "0.4.1",
|
|
56
|
+
"@knotx/plugins-canvas": "0.4.1",
|
|
57
|
+
"@knotx/plugins-selection": "0.4.1",
|
|
58
|
+
"@knotx/typescript-config": "0.4.1"
|
|
57
59
|
},
|
|
58
60
|
"scripts": {
|
|
59
61
|
"build": "unbuild",
|