react-design-editor 0.0.61 → 0.0.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +7 -0
  2. package/dist/react-design-editor.js +176486 -168263
  3. package/dist/react-design-editor.min.js +1 -1
  4. package/dist/react-design-editor.min.js.LICENSE.txt +0 -9
  5. package/lib/Canvas.js +3 -3
  6. package/lib/CanvasObject.js +3 -0
  7. package/lib/constants/code.d.ts +1 -0
  8. package/lib/constants/code.js +2 -1
  9. package/lib/handlers/AbstractHandler.d.ts +6 -0
  10. package/lib/handlers/AbstractHandler.js +10 -0
  11. package/lib/handlers/DrawingHandler.js +5 -5
  12. package/lib/handlers/EventHandler.d.ts +1 -1
  13. package/lib/handlers/EventHandler.js +4 -7
  14. package/lib/handlers/GridHandler.d.ts +1 -1
  15. package/lib/handlers/GridHandler.js +44 -24
  16. package/lib/handlers/GuidelineHandler.d.ts +1 -1
  17. package/lib/handlers/Handler.d.ts +23 -2
  18. package/lib/handlers/Handler.js +56 -40
  19. package/lib/handlers/LayoutHandler.d.ts +15 -0
  20. package/lib/handlers/LayoutHandler.js +110 -0
  21. package/lib/handlers/LinkHandler.d.ts +3 -12
  22. package/lib/handlers/LinkHandler.js +19 -40
  23. package/lib/handlers/PortHandler.d.ts +1 -1
  24. package/lib/handlers/PortHandler.js +12 -30
  25. package/lib/handlers/ShortcutHandler.d.ts +1 -1
  26. package/lib/handlers/TransactionHandler.js +8 -15
  27. package/lib/handlers/ZoomHandler.d.ts +1 -1
  28. package/lib/handlers/index.d.ts +2 -22
  29. package/lib/handlers/index.js +5 -45
  30. package/lib/objects/LineLink.d.ts +15 -0
  31. package/lib/objects/LineLink.js +107 -0
  32. package/lib/objects/Link.d.ts +8 -1
  33. package/lib/objects/Link.js +152 -44
  34. package/lib/objects/Node.js +3 -3
  35. package/lib/objects/index.d.ts +4 -0
  36. package/lib/objects/index.js +3 -1
  37. package/package.json +22 -15
  38. package/lib/handlers/FiberHandler.d.ts +0 -6
  39. package/lib/handlers/FiberHandler.js +0 -23
@@ -1,4 +1,4 @@
1
- import { LinkObject } from '../objects/Link';
1
+ import { LinkObject } from '../objects';
2
2
  import { PortObject } from '../objects/Port';
3
3
  import Handler from './Handler';
4
4
  export interface LinkOption {
@@ -53,20 +53,11 @@ declare class LinkHandler {
53
53
  generate: (port: PortObject) => void;
54
54
  /**
55
55
  * Add link in Canvas
56
- * @param {LinkOption} link
56
+ * @param {LinkOption} option
57
57
  * @param {boolean} [loaded=false]
58
58
  * @returns
59
59
  */
60
- create: (link: LinkOption, loaded?: boolean) => LinkObject;
61
- /**
62
- * Set coordinate of link
63
- * @param {number} x1
64
- * @param {number} y1
65
- * @param {number} x2
66
- * @param {number} y2
67
- * @param {LinkObject} link
68
- */
69
- setCoords: (x1: number, y1: number, x2: number, y2: number, link: LinkObject) => void;
60
+ create: (option: LinkOption, loaded?: boolean) => LinkObject;
70
61
  /**
71
62
  * When the link is deleted, linked FromNode delete
72
63
  * @param {LinkObject} link
@@ -25,15 +25,13 @@ class LinkHandler {
25
25
  return;
26
26
  }
27
27
  this.port = port;
28
- this.port.set({
29
- fill: port.selectFill,
30
- });
28
+ this.port.set({ fill: port.selectFill });
31
29
  this.handler.interactionHandler.linking();
32
30
  const { left, top, nodeId, id } = port;
33
31
  const fromPort = { left, top, id };
34
32
  const toPort = { left, top };
35
33
  const fromNode = this.handler.objectMap[nodeId];
36
- this.handler.activeLine = new objects_1.CurvedLink(fromNode, fromPort, null, toPort, {
34
+ this.handler.activeLine = new objects_1.Link(fromNode, fromPort, toPort, toPort, {
37
35
  strokeWidth: 4,
38
36
  fill: '#999999',
39
37
  stroke: '#999999',
@@ -52,9 +50,7 @@ class LinkHandler {
52
50
  */
53
51
  this.finish = (link) => {
54
52
  if (!link) {
55
- this.port.set({
56
- fill: this.port.originFill,
57
- });
53
+ this.port.set({ fill: this.port.originFill });
58
54
  }
59
55
  this.handler.interactionHandler.selection();
60
56
  this.handler.canvas.remove(this.handler.activeLine);
@@ -76,15 +72,14 @@ class LinkHandler {
76
72
  if (this.isSameNode(port)) {
77
73
  return;
78
74
  }
79
- const link = {
80
- type: 'curvedLink',
75
+ const link = this.create({
76
+ type: 'link',
81
77
  fromNodeId: this.handler.activeLine.fromNode.id,
82
78
  fromPortId: this.handler.activeLine.fromPort.id,
83
79
  toNodeId: port.nodeId,
84
80
  toPortId: port.id,
85
- };
86
- const createdLink = this.create(link);
87
- this.finish(createdLink);
81
+ });
82
+ this.finish(link);
88
83
  // TODO...
89
84
  // Save transactions unconditionally
90
85
  if (!this.handler.transactionHandler.active) {
@@ -93,47 +88,31 @@ class LinkHandler {
93
88
  };
94
89
  /**
95
90
  * Add link in Canvas
96
- * @param {LinkOption} link
91
+ * @param {LinkOption} option
97
92
  * @param {boolean} [loaded=false]
98
93
  * @returns
99
94
  */
100
- this.create = (link, loaded = false) => {
101
- const fromNode = this.handler.objectMap[link.fromNodeId];
102
- const fromPort = fromNode.fromPort.filter(port => port.id === link.fromPortId || !port.id)[0];
103
- const toNode = this.handler.objectMap[link.toNodeId];
95
+ this.create = (option, loaded = false) => {
96
+ const fromNode = this.handler.objectMap[option.fromNodeId];
97
+ const fromPort = fromNode.fromPort.filter(port => port.id === option.fromPortId || !port.id)[0];
98
+ const toNode = this.handler.objectMap[option.toNodeId];
104
99
  const { toPort } = toNode;
105
- const createdObj = this.handler.fabricObjects[link.type].create(fromNode, fromPort, toNode, toPort, {
106
- ...link,
100
+ const link = this.handler.fabricObjects[option.type].create(fromNode, fromPort, toNode, toPort, {
101
+ ...option,
107
102
  });
108
- this.handler.canvas.add(createdObj);
103
+ this.handler.canvas.add(link);
109
104
  this.handler.objects = this.handler.getObjects();
110
105
  const { editable } = this.handler;
111
106
  if (this.handler.onAdd && editable && !loaded) {
112
- this.handler.onAdd(createdObj);
107
+ this.handler.onAdd(link);
113
108
  }
114
109
  this.handler.canvas.renderAll();
115
- createdObj.setPort(fromNode, fromPort, toNode, toPort);
110
+ link.setPort(fromNode, fromPort, toNode, toPort);
116
111
  this.handler.portHandler.setCoords(fromNode);
117
112
  this.handler.portHandler.setCoords(toNode);
118
113
  this.handler.canvas.requestRenderAll();
119
- return createdObj;
120
- };
121
- /**
122
- * Set coordinate of link
123
- * @param {number} x1
124
- * @param {number} y1
125
- * @param {number} x2
126
- * @param {number} y2
127
- * @param {LinkObject} link
128
- */
129
- this.setCoords = (x1, y1, x2, y2, link) => {
130
- link.set({
131
- x1,
132
- y1,
133
- x2,
134
- y2,
135
- });
136
- link.setCoords();
114
+ this.handler.canvas.sendToBack(link);
115
+ return link;
137
116
  };
138
117
  /**
139
118
  * When the link is deleted, linked FromNode delete
@@ -1,5 +1,5 @@
1
- import Handler from './Handler';
2
1
  import { NodeObject } from '../objects/Node';
2
+ import Handler from './Handler';
3
3
  declare class PortHandler {
4
4
  handler?: Handler;
5
5
  constructor(handler: Handler);
@@ -17,22 +17,16 @@ class PortHandler {
17
17
  this.handler.activeLine &&
18
18
  this.handler.activeLine.class === 'line') {
19
19
  if (toPort.links.some(link => link.fromNode === this.handler.activeLine.fromNode)) {
20
- toPort.set({
21
- fill: 'red',
22
- });
20
+ toPort.set({ fill: 'red' });
23
21
  this.handler.canvas.renderAll();
24
22
  return;
25
23
  }
26
- toPort.set({
27
- fill: 'green',
28
- });
24
+ toPort.set({ fill: 'green' });
29
25
  this.handler.canvas.renderAll();
30
26
  }
31
27
  });
32
28
  toPort.on('mouseout', () => {
33
- toPort.set({
34
- fill: toPort.originFill,
35
- });
29
+ toPort.set({ fill: toPort.originFill });
36
30
  this.handler.canvas.renderAll();
37
31
  });
38
32
  this.handler.canvas.add(toPort);
@@ -47,29 +41,21 @@ class PortHandler {
47
41
  if (this.handler.interactionMode !== 'link') {
48
42
  if (port.enabled) {
49
43
  if (this.handler.activeLine) {
50
- port.set({
51
- fill: 'red',
52
- });
44
+ port.set({ fill: 'red' });
53
45
  this.handler.canvas.renderAll();
54
46
  return;
55
47
  }
56
- port.set({
57
- fill: 'green',
58
- });
48
+ port.set({ fill: 'green' });
59
49
  this.handler.canvas.renderAll();
60
50
  return;
61
51
  }
62
- port.set({
63
- fill: 'red',
64
- });
52
+ port.set({ fill: 'red' });
65
53
  this.handler.canvas.renderAll();
66
54
  }
67
55
  });
68
56
  port.on('mouseout', () => {
69
57
  if (this.handler.interactionMode !== 'link') {
70
- port.set({
71
- fill: port.enabled ? port.originFill : port.hoverFill,
72
- });
58
+ port.set({ fill: port.enabled ? port.originFill : port.hoverFill });
73
59
  }
74
60
  this.handler.canvas.renderAll();
75
61
  });
@@ -90,14 +76,12 @@ class PortHandler {
90
76
  left: target.left + target.width / 2,
91
77
  top: target.top,
92
78
  };
93
- target.toPort.set({
94
- ...toCoords,
95
- });
79
+ target.toPort.set({ ...toCoords });
96
80
  target.toPort.setCoords();
97
81
  if (target.toPort.links.length) {
98
82
  target.toPort.links.forEach(link => {
99
83
  const fromPort = link.fromNode.fromPort.filter(port => port.id === link.fromPort.id)[0];
100
- this.handler.linkHandler.setCoords(fromPort.left, fromPort.top, toCoords.left, toCoords.top, link);
84
+ link.update({ left: fromPort.left, top: fromPort.top }, { left: toCoords.left, top: toCoords.top });
101
85
  });
102
86
  }
103
87
  }
@@ -109,14 +93,12 @@ class PortHandler {
109
93
  target.fromPort.forEach(port => {
110
94
  const left = port.leftDiff ? fromCoords.left + port.leftDiff : fromCoords.left;
111
95
  const top = port.topDiff ? fromCoords.top + port.topDiff : fromCoords.top;
112
- port.set({
113
- left,
114
- top,
115
- });
96
+ port.set({ left, top });
116
97
  port.setCoords();
117
98
  if (port.links.length) {
99
+ console.log(port.links);
118
100
  port.links.forEach(link => {
119
- this.handler.linkHandler.setCoords(left, top, link.toNode.toPort.left, link.toNode.toPort.top, link);
101
+ link.update({ left, top }, { left: link.toNode.toPort.left, top: link.toNode.toPort.top });
120
102
  });
121
103
  }
122
104
  });
@@ -1,5 +1,5 @@
1
- import Handler from './Handler';
2
1
  import { KeyEvent } from '../utils';
2
+ import Handler from './Handler';
3
3
  /**
4
4
  * Shortcut Handler Class
5
5
  *
@@ -44,9 +44,6 @@ class TransactionHandler {
44
44
  if (obj.id === 'workarea') {
45
45
  return false;
46
46
  }
47
- else if (obj.id === 'grid') {
48
- return false;
49
- }
50
47
  else if (obj.superType === 'port') {
51
48
  return false;
52
49
  }
@@ -94,6 +91,7 @@ class TransactionHandler {
94
91
  */
95
92
  this.replay = (transaction) => {
96
93
  const objects = JSON.parse(transaction.json);
94
+ console.log(objects);
97
95
  this.state = objects;
98
96
  this.active = true;
99
97
  this.handler.canvas.renderOnAddRemove = false;
@@ -103,28 +101,23 @@ class TransactionHandler {
103
101
  enlivenObjects.forEach(obj => {
104
102
  const targetIndex = this.handler.canvas._objects.length;
105
103
  if (obj.superType === 'node') {
106
- this.handler.canvas.insertAt(obj, targetIndex, false);
107
- this.handler.portHandler.create(obj);
104
+ const node = obj;
105
+ this.handler.canvas.insertAt(node, targetIndex, false);
106
+ this.handler.portHandler.create(node);
107
+ this.handler.portHandler.setCoords(node);
108
108
  }
109
109
  else if (obj.superType === 'link') {
110
- const link = obj;
111
- this.handler.objects = this.handler.getObjects();
112
- this.handler.linkHandler.create({
113
- type: 'curvedLink',
114
- fromNodeId: link.fromNode?.id,
115
- fromPortId: link.fromPort?.id,
116
- toNodeId: link.toNode?.id,
117
- toPortId: link.toPort?.id,
118
- });
110
+ this.handler.canvas.insertAt(obj, targetIndex, false);
119
111
  }
120
112
  else {
121
113
  this.handler.canvas.insertAt(obj, targetIndex, false);
122
114
  }
123
115
  });
116
+ this.handler.objects = this.handler.getObjects();
117
+ 1;
124
118
  this.handler.canvas.renderOnAddRemove = true;
125
119
  this.active = false;
126
120
  this.handler.canvas.renderAll();
127
- this.handler.objects = this.handler.getObjects();
128
121
  if (this.handler.onTransaction) {
129
122
  this.handler.onTransaction(transaction);
130
123
  }
@@ -1,6 +1,6 @@
1
1
  import { fabric } from 'fabric';
2
2
  import { FabricObject } from '../utils';
3
- import Handler from './Handler';
3
+ import type Handler from './Handler';
4
4
  declare class ZoomHandler {
5
5
  handler?: Handler;
6
6
  private _zoomStep?;
@@ -1,23 +1,3 @@
1
- export { default as Handler } from './Handler';
2
- export { default as ImageHandler } from './ImageHandler';
3
- export { default as ChartHandler } from './ChartHandler';
4
- export { default as ElementHandler } from './ElementHandler';
5
- export { default as CropHandler } from './CropHandler';
6
- export { default as AnimationHandler } from './AnimationHandler';
7
- export { default as ContextmenuHandler } from './ContextmenuHandler';
8
- export { default as TooltipHandler } from './TooltipHandler';
9
- export { default as TransactionHandler } from './TransactionHandler';
10
- export { default as ZoomHandler } from './ZoomHandler';
11
- export { default as WorkareaHandler } from './WorkareaHandler';
12
- export { default as InteractionHandler } from './InteractionHandler';
13
- export { default as GridHandler } from './GridHandler';
14
- export { default as PortHandler } from './PortHandler';
15
- export { default as LinkHandler } from './LinkHandler';
16
- export { default as NodeHandler } from './NodeHandler';
17
- export { default as AlignmentHandler } from './AlignmentHandler';
18
- export { default as GuidelineHandler } from './GuidelineHandler';
19
- export { default as EventHandler } from './EventHandler';
20
- export { default as DrawingHandler } from './DrawingHandler';
21
- export { default as ShortcutHandler } from './ShortcutHandler';
22
- export { default as FiberHandler } from './FiberHandler';
1
+ export { default as AbstractHandler } from './AbstractHandler';
23
2
  export { default as CustomHandler } from './CustomHandler';
3
+ export { default as Handler } from './Handler';
@@ -3,50 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CustomHandler = exports.FiberHandler = exports.ShortcutHandler = exports.DrawingHandler = exports.EventHandler = exports.GuidelineHandler = exports.AlignmentHandler = exports.NodeHandler = exports.LinkHandler = exports.PortHandler = exports.GridHandler = exports.InteractionHandler = exports.WorkareaHandler = exports.ZoomHandler = exports.TransactionHandler = exports.TooltipHandler = exports.ContextmenuHandler = exports.AnimationHandler = exports.CropHandler = exports.ElementHandler = exports.ChartHandler = exports.ImageHandler = exports.Handler = void 0;
7
- var Handler_1 = require("./Handler");
8
- Object.defineProperty(exports, "Handler", { enumerable: true, get: function () { return __importDefault(Handler_1).default; } });
9
- var ImageHandler_1 = require("./ImageHandler");
10
- Object.defineProperty(exports, "ImageHandler", { enumerable: true, get: function () { return __importDefault(ImageHandler_1).default; } });
11
- var ChartHandler_1 = require("./ChartHandler");
12
- Object.defineProperty(exports, "ChartHandler", { enumerable: true, get: function () { return __importDefault(ChartHandler_1).default; } });
13
- var ElementHandler_1 = require("./ElementHandler");
14
- Object.defineProperty(exports, "ElementHandler", { enumerable: true, get: function () { return __importDefault(ElementHandler_1).default; } });
15
- var CropHandler_1 = require("./CropHandler");
16
- Object.defineProperty(exports, "CropHandler", { enumerable: true, get: function () { return __importDefault(CropHandler_1).default; } });
17
- var AnimationHandler_1 = require("./AnimationHandler");
18
- Object.defineProperty(exports, "AnimationHandler", { enumerable: true, get: function () { return __importDefault(AnimationHandler_1).default; } });
19
- var ContextmenuHandler_1 = require("./ContextmenuHandler");
20
- Object.defineProperty(exports, "ContextmenuHandler", { enumerable: true, get: function () { return __importDefault(ContextmenuHandler_1).default; } });
21
- var TooltipHandler_1 = require("./TooltipHandler");
22
- Object.defineProperty(exports, "TooltipHandler", { enumerable: true, get: function () { return __importDefault(TooltipHandler_1).default; } });
23
- var TransactionHandler_1 = require("./TransactionHandler");
24
- Object.defineProperty(exports, "TransactionHandler", { enumerable: true, get: function () { return __importDefault(TransactionHandler_1).default; } });
25
- var ZoomHandler_1 = require("./ZoomHandler");
26
- Object.defineProperty(exports, "ZoomHandler", { enumerable: true, get: function () { return __importDefault(ZoomHandler_1).default; } });
27
- var WorkareaHandler_1 = require("./WorkareaHandler");
28
- Object.defineProperty(exports, "WorkareaHandler", { enumerable: true, get: function () { return __importDefault(WorkareaHandler_1).default; } });
29
- var InteractionHandler_1 = require("./InteractionHandler");
30
- Object.defineProperty(exports, "InteractionHandler", { enumerable: true, get: function () { return __importDefault(InteractionHandler_1).default; } });
31
- var GridHandler_1 = require("./GridHandler");
32
- Object.defineProperty(exports, "GridHandler", { enumerable: true, get: function () { return __importDefault(GridHandler_1).default; } });
33
- var PortHandler_1 = require("./PortHandler");
34
- Object.defineProperty(exports, "PortHandler", { enumerable: true, get: function () { return __importDefault(PortHandler_1).default; } });
35
- var LinkHandler_1 = require("./LinkHandler");
36
- Object.defineProperty(exports, "LinkHandler", { enumerable: true, get: function () { return __importDefault(LinkHandler_1).default; } });
37
- var NodeHandler_1 = require("./NodeHandler");
38
- Object.defineProperty(exports, "NodeHandler", { enumerable: true, get: function () { return __importDefault(NodeHandler_1).default; } });
39
- var AlignmentHandler_1 = require("./AlignmentHandler");
40
- Object.defineProperty(exports, "AlignmentHandler", { enumerable: true, get: function () { return __importDefault(AlignmentHandler_1).default; } });
41
- var GuidelineHandler_1 = require("./GuidelineHandler");
42
- Object.defineProperty(exports, "GuidelineHandler", { enumerable: true, get: function () { return __importDefault(GuidelineHandler_1).default; } });
43
- var EventHandler_1 = require("./EventHandler");
44
- Object.defineProperty(exports, "EventHandler", { enumerable: true, get: function () { return __importDefault(EventHandler_1).default; } });
45
- var DrawingHandler_1 = require("./DrawingHandler");
46
- Object.defineProperty(exports, "DrawingHandler", { enumerable: true, get: function () { return __importDefault(DrawingHandler_1).default; } });
47
- var ShortcutHandler_1 = require("./ShortcutHandler");
48
- Object.defineProperty(exports, "ShortcutHandler", { enumerable: true, get: function () { return __importDefault(ShortcutHandler_1).default; } });
49
- var FiberHandler_1 = require("./FiberHandler");
50
- Object.defineProperty(exports, "FiberHandler", { enumerable: true, get: function () { return __importDefault(FiberHandler_1).default; } });
6
+ exports.Handler = exports.CustomHandler = exports.AbstractHandler = void 0;
7
+ var AbstractHandler_1 = require("./AbstractHandler");
8
+ Object.defineProperty(exports, "AbstractHandler", { enumerable: true, get: function () { return __importDefault(AbstractHandler_1).default; } });
51
9
  var CustomHandler_1 = require("./CustomHandler");
52
10
  Object.defineProperty(exports, "CustomHandler", { enumerable: true, get: function () { return __importDefault(CustomHandler_1).default; } });
11
+ var Handler_1 = require("./Handler");
12
+ Object.defineProperty(exports, "Handler", { enumerable: true, get: function () { return __importDefault(Handler_1).default; } });
@@ -0,0 +1,15 @@
1
+ import { fabric } from 'fabric';
2
+ import { FabricObject } from '../utils';
3
+ import { NodeObject } from './Node';
4
+ import { PortObject } from './Port';
5
+ export interface LineLinkObject extends FabricObject<fabric.Line> {
6
+ fromNode?: NodeObject;
7
+ toNode?: NodeObject;
8
+ fromPort?: PortObject;
9
+ toPort?: PortObject;
10
+ fromPortIndex?: number;
11
+ setPort?: (fromNode: NodeObject, fromPort: PortObject, toNode: NodeObject, toPort: PortObject) => void;
12
+ setPortEnabled?: (node: NodeObject, port: PortObject, enabled: boolean) => void;
13
+ }
14
+ declare const LineLink: any;
15
+ export default LineLink;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fabric_1 = require("fabric");
4
+ const uuid_1 = require("uuid");
5
+ const Node_1 = require("./Node");
6
+ const LineLink = fabric_1.fabric.util.createClass(fabric_1.fabric.Line, {
7
+ type: 'lineLink',
8
+ superType: 'link',
9
+ initialize(fromNode, fromPort, toNode, toPort, options) {
10
+ options = options || {};
11
+ const coords = [fromPort.left, fromPort.top, toPort.left, toPort.top];
12
+ Object.assign(options, {
13
+ strokeWidth: 4,
14
+ id: options.id || (0, uuid_1.v4)(),
15
+ originX: 'center',
16
+ originY: 'center',
17
+ lockScalingX: true,
18
+ lockScalingY: true,
19
+ lockRotation: true,
20
+ hasRotatingPoint: false,
21
+ hasControls: false,
22
+ hasBorders: false,
23
+ perPixelTargetFind: true,
24
+ lockMovementX: true,
25
+ lockMovementY: true,
26
+ selectable: false,
27
+ fromNode,
28
+ fromPort,
29
+ toNode,
30
+ toPort,
31
+ hoverCursor: 'pointer',
32
+ });
33
+ this.callSuper('initialize', coords, options);
34
+ },
35
+ setPort(fromNode, fromPort, _toNode, toPort) {
36
+ if (fromNode.type === 'BroadcastNode') {
37
+ fromPort = fromNode.fromPort[0];
38
+ }
39
+ fromPort.links.push(this);
40
+ toPort.links.push(this);
41
+ this.setPortEnabled(fromNode, fromPort, false);
42
+ },
43
+ setPortEnabled(node, port, enabled) {
44
+ if (node.descriptor.outPortType !== Node_1.OUT_PORT_TYPE.BROADCAST) {
45
+ port.set({
46
+ enabled,
47
+ fill: enabled ? port.originFill : port.selectFill,
48
+ });
49
+ }
50
+ else {
51
+ if (node.toPort.id === port.id) {
52
+ return;
53
+ }
54
+ port.links.forEach((link, index) => {
55
+ link.set({
56
+ fromPort: port,
57
+ fromPortIndex: index,
58
+ });
59
+ });
60
+ node.set({
61
+ configuration: {
62
+ outputCount: port.links.length,
63
+ },
64
+ });
65
+ }
66
+ },
67
+ toObject() {
68
+ return fabric_1.fabric.util.object.extend(this.callSuper('toObject'), {
69
+ id: this.get('id'),
70
+ name: this.get('name'),
71
+ superType: this.get('superType'),
72
+ configuration: this.get('configuration'),
73
+ fromNode: this.get('fromNode'),
74
+ fromPort: this.get('fromPort'),
75
+ toNode: this.get('toNode'),
76
+ toPort: this.get('toPort'),
77
+ });
78
+ },
79
+ _render(ctx) {
80
+ this.callSuper('_render', ctx);
81
+ ctx.save();
82
+ const xDiff = this.x2 - this.x1;
83
+ const yDiff = this.y2 - this.y1;
84
+ const angle = Math.atan2(yDiff, xDiff);
85
+ ctx.translate((this.x2 - this.x1) / 2, (this.y2 - this.y1) / 2);
86
+ ctx.rotate(angle);
87
+ ctx.beginPath();
88
+ if (this.arrow) {
89
+ // Move 5px in front of line to start the arrow so it does not have the square line end showing in front (0,0)
90
+ ctx.moveTo(5, 0);
91
+ ctx.lineTo(-5, 5);
92
+ ctx.lineTo(-5, -5);
93
+ }
94
+ ctx.closePath();
95
+ ctx.lineWidth = this.strokeWidth;
96
+ ctx.fillStyle = this.stroke;
97
+ ctx.fill();
98
+ ctx.restore();
99
+ },
100
+ });
101
+ LineLink.fromObject = (options, callback) => {
102
+ const { fromNode, fromPort, toNode, toPort } = options;
103
+ return callback(new LineLink(fromNode, fromPort, toNode, toPort, options));
104
+ };
105
+ // @ts-ignore
106
+ window.fabric.LineLink = LineLink;
107
+ exports.default = LineLink;
@@ -2,7 +2,13 @@ import { fabric } from 'fabric';
2
2
  import { FabricObject } from '../utils';
3
3
  import { NodeObject } from './Node';
4
4
  import { PortObject } from './Port';
5
- export interface LinkObject extends FabricObject<fabric.Line> {
5
+ export interface LinkedNodePropeties {
6
+ left: number;
7
+ top: number;
8
+ width?: number;
9
+ height?: number;
10
+ }
11
+ export interface LinkObject extends FabricObject<fabric.Path> {
6
12
  fromNode?: NodeObject;
7
13
  toNode?: NodeObject;
8
14
  fromPort?: PortObject;
@@ -10,6 +16,7 @@ export interface LinkObject extends FabricObject<fabric.Line> {
10
16
  fromPortIndex?: number;
11
17
  setPort?: (fromNode: NodeObject, fromPort: PortObject, toNode: NodeObject, toPort: PortObject) => void;
12
18
  setPortEnabled?: (node: NodeObject, port: PortObject, enabled: boolean) => void;
19
+ update?: (fromPort: Partial<PortObject>, toPort: Partial<PortObject>) => void;
13
20
  }
14
21
  declare const Link: any;
15
22
  export default Link;