@logicflow/core 2.0.11 → 2.0.12

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 (42) hide show
  1. package/.turbo/turbo-build$colon$dev.log +2 -2
  2. package/.turbo/turbo-build.log +7 -7
  3. package/CHANGELOG.md +9 -0
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/es/constant/index.d.ts +2 -0
  7. package/es/constant/index.js +2 -0
  8. package/es/event/eventArgs.d.ts +8 -0
  9. package/es/model/GraphModel.js +3 -0
  10. package/es/model/edge/BezierEdgeModel.js +3 -0
  11. package/es/model/edge/PolylineEdgeModel.js +3 -0
  12. package/es/view/Anchor.js +15 -2
  13. package/es/view/Control.d.ts +1 -0
  14. package/es/view/Control.js +4 -0
  15. package/es/view/Graph.d.ts +3 -0
  16. package/es/view/Graph.js +7 -3
  17. package/es/view/overlay/ToolOverlay.d.ts +3 -1
  18. package/es/view/overlay/ToolOverlay.js +39 -2
  19. package/lib/constant/index.d.ts +2 -0
  20. package/lib/constant/index.js +2 -0
  21. package/lib/event/eventArgs.d.ts +8 -0
  22. package/lib/model/GraphModel.js +3 -0
  23. package/lib/model/edge/BezierEdgeModel.js +3 -0
  24. package/lib/model/edge/PolylineEdgeModel.js +3 -0
  25. package/lib/view/Anchor.js +15 -2
  26. package/lib/view/Control.d.ts +1 -0
  27. package/lib/view/Control.js +4 -0
  28. package/lib/view/Graph.d.ts +3 -0
  29. package/lib/view/Graph.js +6 -2
  30. package/lib/view/overlay/ToolOverlay.d.ts +3 -1
  31. package/lib/view/overlay/ToolOverlay.js +39 -2
  32. package/package.json +1 -1
  33. package/src/constant/index.ts +2 -0
  34. package/src/event/eventArgs.ts +8 -0
  35. package/src/model/GraphModel.ts +1 -1
  36. package/src/model/edge/BezierEdgeModel.ts +1 -1
  37. package/src/model/edge/PolylineEdgeModel.ts +1 -1
  38. package/src/view/Anchor.tsx +15 -4
  39. package/src/view/Control.tsx +5 -0
  40. package/src/view/Graph.tsx +15 -3
  41. package/src/view/overlay/ToolOverlay.tsx +17 -2
  42. package/stats.html +1 -1
@@ -64,6 +64,8 @@ export declare enum EventType {
64
64
  EDGE_CONTEXTMENU = "edge:contextmenu",
65
65
  EDGE_ADJUST = "edge:adjust",
66
66
  EDGE_EXCHANGE_NODE = "edge:exchange-node",
67
+ ANCHOR_CLICK = "anchor:click",
68
+ ANCHOR_MOUSEDOWN = "anchor:mousedown",
67
69
  ANCHOR_DRAGSTART = "anchor:dragstart",
68
70
  ANCHOR_DRAG = "anchor:drag",
69
71
  ANCHOR_DROP = "anchor:drop",
@@ -72,6 +72,8 @@ export var EventType;
72
72
  EventType["EDGE_ADJUST"] = "edge:adjust";
73
73
  EventType["EDGE_EXCHANGE_NODE"] = "edge:exchange-node";
74
74
  // Anchor events
75
+ EventType["ANCHOR_CLICK"] = "anchor:click";
76
+ EventType["ANCHOR_MOUSEDOWN"] = "anchor:mousedown";
75
77
  EventType["ANCHOR_DRAGSTART"] = "anchor:dragstart";
76
78
  EventType["ANCHOR_DRAG"] = "anchor:drag";
77
79
  EventType["ANCHOR_DROP"] = "anchor:drop";
@@ -382,6 +382,14 @@ type AnchorEventArgsPick<T extends 'data' | 'e' | 'nodeModel' | 'edgeModel'> = P
382
382
  * 锚点事件
383
383
  */
384
384
  interface AnchorEventArgs {
385
+ /**
386
+ * anchor 锚点 click
387
+ */
388
+ 'anchor:click': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>;
389
+ /**
390
+ * anchor 锚点 mousedown
391
+ */
392
+ 'anchor:mousedown': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>;
385
393
  /**
386
394
  * 开始拖拽锚点
387
395
  */
@@ -1464,6 +1464,9 @@ var GraphModel = /** @class */ (function () {
1464
1464
  __decorate([
1465
1465
  observable
1466
1466
  ], GraphModel.prototype, "height", void 0);
1467
+ __decorate([
1468
+ observable
1469
+ ], GraphModel.prototype, "theme", void 0);
1467
1470
  __decorate([
1468
1471
  observable
1469
1472
  ], GraphModel.prototype, "grid", void 0);
@@ -208,6 +208,9 @@ var BezierEdgeModel = /** @class */ (function (_super) {
208
208
  this.pointsList = [startPoint, sNext, ePre, endPoint];
209
209
  this.initPoints();
210
210
  };
211
+ __decorate([
212
+ observable
213
+ ], BezierEdgeModel.prototype, "offset", void 0);
211
214
  __decorate([
212
215
  observable
213
216
  ], BezierEdgeModel.prototype, "path", void 0);
@@ -553,6 +553,9 @@ var PolylineEdgeModel = /** @class */ (function (_super) {
553
553
  }, sourceNode, targetNode, this.offset || 0);
554
554
  this.initPoints();
555
555
  };
556
+ __decorate([
557
+ observable
558
+ ], PolylineEdgeModel.prototype, "offset", void 0);
556
559
  __decorate([
557
560
  observable
558
561
  ], PolylineEdgeModel.prototype, "dbClickPosition", void 0);
package/es/view/Anchor.js CHANGED
@@ -294,10 +294,23 @@ var Anchor = /** @class */ (function (_super) {
294
294
  Anchor.prototype.render = function () {
295
295
  var _this = this;
296
296
  var _a = this.state, startX = _a.startX, startY = _a.startY, endX = _a.endX, endY = _a.endY;
297
- var _b = this.props, edgeAddable = _b.anchorData.edgeAddable, edgeStyle = _b.edgeStyle;
297
+ var _b = this.props, anchorData = _b.anchorData, edgeStyle = _b.edgeStyle, nodeModel = _b.nodeModel, graphModel = _b.graphModel;
298
+ var edgeAddable = anchorData.edgeAddable;
298
299
  return (
299
300
  // className="lf-anchor" 作为下载时,需要将锚点删除的依据,不要修改类名
300
- _jsxs("g", { className: "lf-anchor", children: [_jsx("g", { onMouseDown: function (ev) {
301
+ _jsxs("g", { className: "lf-anchor", children: [_jsx("g", { onClick: function (ev) {
302
+ ev.stopPropagation();
303
+ graphModel.eventCenter.emit(EventType.ANCHOR_CLICK, {
304
+ data: anchorData,
305
+ e: ev,
306
+ nodeModel: nodeModel,
307
+ });
308
+ }, onMouseDown: function (ev) {
309
+ graphModel.eventCenter.emit(EventType.ANCHOR_MOUSEDOWN, {
310
+ data: anchorData,
311
+ e: ev,
312
+ nodeModel: nodeModel,
313
+ });
301
314
  if (edgeAddable !== false) {
302
315
  _this.dragHandler.handleMouseDown(ev);
303
316
  }
@@ -43,6 +43,7 @@ export declare class ResizeControl extends Component<IResizeControlProps, IResiz
43
43
  */
44
44
  recalcResizeInfo: (index: ResizeControlIndex, resizeInfo: ResizeInfo, pct?: number, freezeWidth?: boolean, freezeHeight?: boolean) => ResizeInfo;
45
45
  resizeNode: ({ deltaX, deltaY }: VectorData) => void;
46
+ onDragStart: () => void;
46
47
  onDragging: ({ deltaX, deltaY }: IDragParams) => void;
47
48
  onDragEnd: () => void;
48
49
  render(): h.JSX.Element;
@@ -280,6 +280,9 @@ var ResizeControl = /** @class */ (function (_super) {
280
280
  // // 触发 resize 事件
281
281
  // this.triggerResizeEvent(preNodeData, curNodeData, deltaX, deltaY, this.index, this.nodeModel)
282
282
  };
283
+ _this.onDragStart = function () {
284
+ _this.graphModel.selectNodeById(_this.nodeModel.id);
285
+ };
283
286
  _this.onDragging = function (_a) {
284
287
  var deltaX = _a.deltaX, deltaY = _a.deltaY;
285
288
  var transformModel = _this.graphModel.transformModel;
@@ -309,6 +312,7 @@ var ResizeControl = /** @class */ (function (_super) {
309
312
  _this.graphModel = graphModel;
310
313
  // 初始化拖拽工具
311
314
  _this.dragHandler = new StepDrag({
315
+ onDragStart: _this.onDragStart,
312
316
  onDragging: _this.onDragging,
313
317
  onDragEnd: _this.onDragEnd,
314
318
  step: graphModel.gridSize,
@@ -1,4 +1,5 @@
1
1
  import { Component, ComponentType } from 'preact/compat';
2
+ import { CanvasOverlay } from './overlay';
2
3
  import DnD from './behavior/dnd';
3
4
  import Tool from '../tool';
4
5
  import { Options as LFOptions } from '../options';
@@ -12,6 +13,8 @@ type IGraphProps = {
12
13
  graphModel: GraphModel;
13
14
  };
14
15
  declare class Graph extends Component<IGraphProps> {
16
+ canvasOverlayRef: import("preact").RefObject<CanvasOverlay>;
17
+ getCanvasOverlay: () => CanvasOverlay | null;
15
18
  private handleResize;
16
19
  private throttleResize;
17
20
  componentDidMount(): void;
package/es/view/Graph.js CHANGED
@@ -45,7 +45,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
45
  return to.concat(ar || Array.prototype.slice.call(from));
46
46
  };
47
47
  import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime";
48
- import { Component } from 'preact/compat';
48
+ import { Component, createRef } from 'preact/compat';
49
49
  import { map, throttle } from 'lodash-es';
50
50
  import { CanvasOverlay, ToolOverlay, BackgroundOverlay, Grid, SnaplineOverlay, OutlineOverlay, BezierAdjustOverlay, ModificationOverlay, } from './overlay';
51
51
  import { observer } from '..';
@@ -54,6 +54,10 @@ var Graph = /** @class */ (function (_super) {
54
54
  __extends(Graph, _super);
55
55
  function Graph() {
56
56
  var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
57
+ _this.canvasOverlayRef = createRef();
58
+ _this.getCanvasOverlay = function () {
59
+ return _this.canvasOverlayRef.current;
60
+ };
57
61
  _this.handleResize = function () {
58
62
  var _a = _this.props, graphModel = _a.graphModel, options = _a.options;
59
63
  var width = graphModel.width, height = graphModel.height, isContainerWidth = graphModel.isContainerWidth, isContainerHeight = graphModel.isContainerHeight;
@@ -110,9 +114,9 @@ var Graph = /** @class */ (function (_super) {
110
114
  }
111
115
  var fakeNode = graphModel.fakeNode, editConfigModel = graphModel.editConfigModel, background = graphModel.background;
112
116
  var adjustEdge = editConfigModel.adjustEdge;
113
- return (_jsxs("div", { className: "lf-graph", "flow-id": graphModel.flowId, style: style, children: [_jsxs(CanvasOverlay, { graphModel: graphModel, dnd: dnd, children: [_jsx("g", { className: "lf-base", children: map(graphModel.sortElements, function (nodeModel) {
117
+ return (_jsxs("div", { className: "lf-graph", "flow-id": graphModel.flowId, style: style, children: [_jsxs(CanvasOverlay, { ref: this.canvasOverlayRef, graphModel: graphModel, dnd: dnd, children: [_jsx("g", { className: "lf-base", children: map(graphModel.sortElements, function (nodeModel) {
114
118
  return _this.getComponent(nodeModel, graphModel);
115
- }) }), fakeNode ? this.getComponent(fakeNode, graphModel) : ''] }), _jsxs(ModificationOverlay, { graphModel: graphModel, children: [_jsx(OutlineOverlay, { graphModel: graphModel }), adjustEdge ? _jsx(BezierAdjustOverlay, { graphModel: graphModel }) : '', options.snapline !== false ? (_jsx(SnaplineOverlay, { snaplineModel: snaplineModel })) : ('')] }), _jsx(ToolOverlay, { graphModel: graphModel, tool: tool }), background && _jsx(BackgroundOverlay, { background: background }), _jsx(Grid, { graphModel: graphModel })] }));
119
+ }) }), fakeNode ? this.getComponent(fakeNode, graphModel) : ''] }), _jsxs(ModificationOverlay, { graphModel: graphModel, children: [_jsx(OutlineOverlay, { graphModel: graphModel }), adjustEdge ? _jsx(BezierAdjustOverlay, { graphModel: graphModel }) : '', options.snapline !== false ? (_jsx(SnaplineOverlay, { snaplineModel: snaplineModel })) : ('')] }), _jsx(ToolOverlay, { graphModel: graphModel, tool: tool, getCanvasOverlay: this.getCanvasOverlay }), background && _jsx(BackgroundOverlay, { background: background }), _jsx(Grid, { graphModel: graphModel })] }));
116
120
  };
117
121
  Graph = __decorate([
118
122
  observer
@@ -1,10 +1,11 @@
1
1
  import { createElement as h, Component } from 'preact/compat';
2
- import { OutlineOverlay } from '.';
2
+ import { CanvasOverlay, OutlineOverlay } from '.';
3
3
  import { GraphModel } from '../../model';
4
4
  import { Tool } from '../../tool';
5
5
  type IProps = {
6
6
  graphModel: GraphModel;
7
7
  tool: Tool;
8
+ getCanvasOverlay: () => CanvasOverlay | null;
8
9
  };
9
10
  export declare class ToolOverlay extends Component<IProps> {
10
11
  componentDidMount(): void;
@@ -14,6 +15,7 @@ export declare class ToolOverlay extends Component<IProps> {
14
15
  */
15
16
  getTools(): import("preact").VNode<import("../..").IToolProps>[];
16
17
  triggerToolRender(): void;
18
+ zoomHandler: (e: WheelEvent) => void;
17
19
  render(): h.JSX.Element;
18
20
  }
19
21
  export default OutlineOverlay;
@@ -19,6 +19,31 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
19
19
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
20
  return c > 3 && r && Object.defineProperty(target, key, r), r;
21
21
  };
22
+ var __read = (this && this.__read) || function (o, n) {
23
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
24
+ if (!m) return o;
25
+ var i = m.call(o), r, ar = [], e;
26
+ try {
27
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
28
+ }
29
+ catch (error) { e = { error: error }; }
30
+ finally {
31
+ try {
32
+ if (r && !r.done && (m = i["return"])) m.call(i);
33
+ }
34
+ finally { if (e) throw e.error; }
35
+ }
36
+ return ar;
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
22
47
  import { jsx as _jsx } from "preact/jsx-runtime";
23
48
  import { createElement as h, Component } from 'preact/compat';
24
49
  import { OutlineOverlay } from '.';
@@ -26,7 +51,13 @@ import { observer } from '../..';
26
51
  var ToolOverlay = /** @class */ (function (_super) {
27
52
  __extends(ToolOverlay, _super);
28
53
  function ToolOverlay() {
29
- return _super !== null && _super.apply(this, arguments) || this;
54
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
55
+ _this.zoomHandler = function (e) {
56
+ var _a;
57
+ // TODO 是否应该使用 dispatchEvent 来触发事件
58
+ (_a = _this.props.getCanvasOverlay()) === null || _a === void 0 ? void 0 : _a.zoomHandler(e);
59
+ };
60
+ return _this;
30
61
  }
31
62
  // 在react严格模式下,useEffect会执行两次,但是在LogicFlow内部,则只会触发一次componentDidMount和componentDidUpdate。
32
63
  // 其中第一次componentDidMount对应的graphModel为被丢弃的graphModel, 所以不应该生效。
@@ -64,7 +95,13 @@ var ToolOverlay = /** @class */ (function (_super) {
64
95
  };
65
96
  ToolOverlay.prototype.render = function () {
66
97
  var graphModel = this.props.graphModel;
67
- return (_jsx("div", { className: "lf-tool-overlay", id: "ToolOverlay_".concat(graphModel.flowId), children: this.getTools() }));
98
+ return (_jsx("div", { className: "lf-tool-overlay", id: "ToolOverlay_".concat(graphModel.flowId),
99
+ /*
100
+ * 默认情况下该容器设置了 pointer-events: none,不会触发这些事件
101
+ * 只会在容器取消 pointer-events: none 后触发,用于缩放、滚动画布等操作
102
+ * 目前只在 selection-select 插件中使用。为了能在元素内部进行框选,在开启选区后会关闭事件透传。需要手动触发事件
103
+ */
104
+ onWheel: this.zoomHandler, children: this.getTools() }));
68
105
  };
69
106
  ToolOverlay = __decorate([
70
107
  observer
@@ -64,6 +64,8 @@ export declare enum EventType {
64
64
  EDGE_CONTEXTMENU = "edge:contextmenu",
65
65
  EDGE_ADJUST = "edge:adjust",
66
66
  EDGE_EXCHANGE_NODE = "edge:exchange-node",
67
+ ANCHOR_CLICK = "anchor:click",
68
+ ANCHOR_MOUSEDOWN = "anchor:mousedown",
67
69
  ANCHOR_DRAGSTART = "anchor:dragstart",
68
70
  ANCHOR_DRAG = "anchor:drag",
69
71
  ANCHOR_DROP = "anchor:drop",
@@ -75,6 +75,8 @@ var EventType;
75
75
  EventType["EDGE_ADJUST"] = "edge:adjust";
76
76
  EventType["EDGE_EXCHANGE_NODE"] = "edge:exchange-node";
77
77
  // Anchor events
78
+ EventType["ANCHOR_CLICK"] = "anchor:click";
79
+ EventType["ANCHOR_MOUSEDOWN"] = "anchor:mousedown";
78
80
  EventType["ANCHOR_DRAGSTART"] = "anchor:dragstart";
79
81
  EventType["ANCHOR_DRAG"] = "anchor:drag";
80
82
  EventType["ANCHOR_DROP"] = "anchor:drop";
@@ -382,6 +382,14 @@ type AnchorEventArgsPick<T extends 'data' | 'e' | 'nodeModel' | 'edgeModel'> = P
382
382
  * 锚点事件
383
383
  */
384
384
  interface AnchorEventArgs {
385
+ /**
386
+ * anchor 锚点 click
387
+ */
388
+ 'anchor:click': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>;
389
+ /**
390
+ * anchor 锚点 mousedown
391
+ */
392
+ 'anchor:mousedown': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>;
385
393
  /**
386
394
  * 开始拖拽锚点
387
395
  */
@@ -1470,6 +1470,9 @@ var GraphModel = /** @class */ (function () {
1470
1470
  __decorate([
1471
1471
  mobx_1.observable
1472
1472
  ], GraphModel.prototype, "height", void 0);
1473
+ __decorate([
1474
+ mobx_1.observable
1475
+ ], GraphModel.prototype, "theme", void 0);
1473
1476
  __decorate([
1474
1477
  mobx_1.observable
1475
1478
  ], GraphModel.prototype, "grid", void 0);
@@ -214,6 +214,9 @@ var BezierEdgeModel = /** @class */ (function (_super) {
214
214
  this.pointsList = [startPoint, sNext, ePre, endPoint];
215
215
  this.initPoints();
216
216
  };
217
+ __decorate([
218
+ mobx_1.observable
219
+ ], BezierEdgeModel.prototype, "offset", void 0);
217
220
  __decorate([
218
221
  mobx_1.observable
219
222
  ], BezierEdgeModel.prototype, "path", void 0);
@@ -556,6 +556,9 @@ var PolylineEdgeModel = /** @class */ (function (_super) {
556
556
  }, sourceNode, targetNode, this.offset || 0);
557
557
  this.initPoints();
558
558
  };
559
+ __decorate([
560
+ mobx_1.observable
561
+ ], PolylineEdgeModel.prototype, "offset", void 0);
559
562
  __decorate([
560
563
  mobx_1.observable
561
564
  ], PolylineEdgeModel.prototype, "dbClickPosition", void 0);
@@ -296,10 +296,23 @@ var Anchor = /** @class */ (function (_super) {
296
296
  Anchor.prototype.render = function () {
297
297
  var _this = this;
298
298
  var _a = this.state, startX = _a.startX, startY = _a.startY, endX = _a.endX, endY = _a.endY;
299
- var _b = this.props, edgeAddable = _b.anchorData.edgeAddable, edgeStyle = _b.edgeStyle;
299
+ var _b = this.props, anchorData = _b.anchorData, edgeStyle = _b.edgeStyle, nodeModel = _b.nodeModel, graphModel = _b.graphModel;
300
+ var edgeAddable = anchorData.edgeAddable;
300
301
  return (
301
302
  // className="lf-anchor" 作为下载时,需要将锚点删除的依据,不要修改类名
302
- (0, jsx_runtime_1.jsxs)("g", { className: "lf-anchor", children: [(0, jsx_runtime_1.jsx)("g", { onMouseDown: function (ev) {
303
+ (0, jsx_runtime_1.jsxs)("g", { className: "lf-anchor", children: [(0, jsx_runtime_1.jsx)("g", { onClick: function (ev) {
304
+ ev.stopPropagation();
305
+ graphModel.eventCenter.emit(constant_1.EventType.ANCHOR_CLICK, {
306
+ data: anchorData,
307
+ e: ev,
308
+ nodeModel: nodeModel,
309
+ });
310
+ }, onMouseDown: function (ev) {
311
+ graphModel.eventCenter.emit(constant_1.EventType.ANCHOR_MOUSEDOWN, {
312
+ data: anchorData,
313
+ e: ev,
314
+ nodeModel: nodeModel,
315
+ });
303
316
  if (edgeAddable !== false) {
304
317
  _this.dragHandler.handleMouseDown(ev);
305
318
  }
@@ -43,6 +43,7 @@ export declare class ResizeControl extends Component<IResizeControlProps, IResiz
43
43
  */
44
44
  recalcResizeInfo: (index: ResizeControlIndex, resizeInfo: ResizeInfo, pct?: number, freezeWidth?: boolean, freezeHeight?: boolean) => ResizeInfo;
45
45
  resizeNode: ({ deltaX, deltaY }: VectorData) => void;
46
+ onDragStart: () => void;
46
47
  onDragging: ({ deltaX, deltaY }: IDragParams) => void;
47
48
  onDragEnd: () => void;
48
49
  render(): h.JSX.Element;
@@ -283,6 +283,9 @@ var ResizeControl = /** @class */ (function (_super) {
283
283
  // // 触发 resize 事件
284
284
  // this.triggerResizeEvent(preNodeData, curNodeData, deltaX, deltaY, this.index, this.nodeModel)
285
285
  };
286
+ _this.onDragStart = function () {
287
+ _this.graphModel.selectNodeById(_this.nodeModel.id);
288
+ };
286
289
  _this.onDragging = function (_a) {
287
290
  var deltaX = _a.deltaX, deltaY = _a.deltaY;
288
291
  var transformModel = _this.graphModel.transformModel;
@@ -312,6 +315,7 @@ var ResizeControl = /** @class */ (function (_super) {
312
315
  _this.graphModel = graphModel;
313
316
  // 初始化拖拽工具
314
317
  _this.dragHandler = new util_1.StepDrag({
318
+ onDragStart: _this.onDragStart,
315
319
  onDragging: _this.onDragging,
316
320
  onDragEnd: _this.onDragEnd,
317
321
  step: graphModel.gridSize,
@@ -1,4 +1,5 @@
1
1
  import { Component, ComponentType } from 'preact/compat';
2
+ import { CanvasOverlay } from './overlay';
2
3
  import DnD from './behavior/dnd';
3
4
  import Tool from '../tool';
4
5
  import { Options as LFOptions } from '../options';
@@ -12,6 +13,8 @@ type IGraphProps = {
12
13
  graphModel: GraphModel;
13
14
  };
14
15
  declare class Graph extends Component<IGraphProps> {
16
+ canvasOverlayRef: import("preact").RefObject<CanvasOverlay>;
17
+ getCanvasOverlay: () => CanvasOverlay | null;
15
18
  private handleResize;
16
19
  private throttleResize;
17
20
  componentDidMount(): void;
package/lib/view/Graph.js CHANGED
@@ -56,6 +56,10 @@ var Graph = /** @class */ (function (_super) {
56
56
  __extends(Graph, _super);
57
57
  function Graph() {
58
58
  var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
59
+ _this.canvasOverlayRef = (0, compat_1.createRef)();
60
+ _this.getCanvasOverlay = function () {
61
+ return _this.canvasOverlayRef.current;
62
+ };
59
63
  _this.handleResize = function () {
60
64
  var _a = _this.props, graphModel = _a.graphModel, options = _a.options;
61
65
  var width = graphModel.width, height = graphModel.height, isContainerWidth = graphModel.isContainerWidth, isContainerHeight = graphModel.isContainerHeight;
@@ -112,9 +116,9 @@ var Graph = /** @class */ (function (_super) {
112
116
  }
113
117
  var fakeNode = graphModel.fakeNode, editConfigModel = graphModel.editConfigModel, background = graphModel.background;
114
118
  var adjustEdge = editConfigModel.adjustEdge;
115
- 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) {
119
+ 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, { ref: this.canvasOverlayRef, graphModel: graphModel, dnd: dnd, children: [(0, jsx_runtime_1.jsx)("g", { className: "lf-base", children: (0, lodash_es_1.map)(graphModel.sortElements, function (nodeModel) {
116
120
  return _this.getComponent(nodeModel, graphModel);
117
- }) }), 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 })] }));
121
+ }) }), 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, getCanvasOverlay: this.getCanvasOverlay }), background && (0, jsx_runtime_1.jsx)(overlay_1.BackgroundOverlay, { background: background }), (0, jsx_runtime_1.jsx)(overlay_1.Grid, { graphModel: graphModel })] }));
118
122
  };
119
123
  Graph = __decorate([
120
124
  __1.observer
@@ -1,10 +1,11 @@
1
1
  import { createElement as h, Component } from 'preact/compat';
2
- import { OutlineOverlay } from '.';
2
+ import { CanvasOverlay, OutlineOverlay } from '.';
3
3
  import { GraphModel } from '../../model';
4
4
  import { Tool } from '../../tool';
5
5
  type IProps = {
6
6
  graphModel: GraphModel;
7
7
  tool: Tool;
8
+ getCanvasOverlay: () => CanvasOverlay | null;
8
9
  };
9
10
  export declare class ToolOverlay extends Component<IProps> {
10
11
  componentDidMount(): void;
@@ -14,6 +15,7 @@ export declare class ToolOverlay extends Component<IProps> {
14
15
  */
15
16
  getTools(): import("preact").VNode<import("../..").IToolProps>[];
16
17
  triggerToolRender(): void;
18
+ zoomHandler: (e: WheelEvent) => void;
17
19
  render(): h.JSX.Element;
18
20
  }
19
21
  export default OutlineOverlay;
@@ -20,6 +20,31 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
20
20
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21
21
  return c > 3 && r && Object.defineProperty(target, key, r), r;
22
22
  };
23
+ var __read = (this && this.__read) || function (o, n) {
24
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
25
+ if (!m) return o;
26
+ var i = m.call(o), r, ar = [], e;
27
+ try {
28
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
29
+ }
30
+ catch (error) { e = { error: error }; }
31
+ finally {
32
+ try {
33
+ if (r && !r.done && (m = i["return"])) m.call(i);
34
+ }
35
+ finally { if (e) throw e.error; }
36
+ }
37
+ return ar;
38
+ };
39
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
40
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
41
+ if (ar || !(i in from)) {
42
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
43
+ ar[i] = from[i];
44
+ }
45
+ }
46
+ return to.concat(ar || Array.prototype.slice.call(from));
47
+ };
23
48
  Object.defineProperty(exports, "__esModule", { value: true });
24
49
  exports.ToolOverlay = void 0;
25
50
  var jsx_runtime_1 = require("preact/jsx-runtime");
@@ -29,7 +54,13 @@ var __1 = require("../..");
29
54
  var ToolOverlay = /** @class */ (function (_super) {
30
55
  __extends(ToolOverlay, _super);
31
56
  function ToolOverlay() {
32
- return _super !== null && _super.apply(this, arguments) || this;
57
+ var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
58
+ _this.zoomHandler = function (e) {
59
+ var _a;
60
+ // TODO 是否应该使用 dispatchEvent 来触发事件
61
+ (_a = _this.props.getCanvasOverlay()) === null || _a === void 0 ? void 0 : _a.zoomHandler(e);
62
+ };
63
+ return _this;
33
64
  }
34
65
  // 在react严格模式下,useEffect会执行两次,但是在LogicFlow内部,则只会触发一次componentDidMount和componentDidUpdate。
35
66
  // 其中第一次componentDidMount对应的graphModel为被丢弃的graphModel, 所以不应该生效。
@@ -67,7 +98,13 @@ var ToolOverlay = /** @class */ (function (_super) {
67
98
  };
68
99
  ToolOverlay.prototype.render = function () {
69
100
  var graphModel = this.props.graphModel;
70
- return ((0, jsx_runtime_1.jsx)("div", { className: "lf-tool-overlay", id: "ToolOverlay_".concat(graphModel.flowId), children: this.getTools() }));
101
+ return ((0, jsx_runtime_1.jsx)("div", { className: "lf-tool-overlay", id: "ToolOverlay_".concat(graphModel.flowId),
102
+ /*
103
+ * 默认情况下该容器设置了 pointer-events: none,不会触发这些事件
104
+ * 只会在容器取消 pointer-events: none 后触发,用于缩放、滚动画布等操作
105
+ * 目前只在 selection-select 插件中使用。为了能在元素内部进行框选,在开启选区后会关闭事件透传。需要手动触发事件
106
+ */
107
+ onWheel: this.zoomHandler, children: this.getTools() }));
71
108
  };
72
109
  ToolOverlay = __decorate([
73
110
  __1.observer
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicflow/core",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "LogicFlow, help you quickly create flowcharts",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -79,6 +79,8 @@ export enum EventType {
79
79
  EDGE_EXCHANGE_NODE = 'edge:exchange-node',
80
80
 
81
81
  // Anchor events
82
+ ANCHOR_CLICK = 'anchor:click',
83
+ ANCHOR_MOUSEDOWN = 'anchor:mousedown',
82
84
  ANCHOR_DRAGSTART = 'anchor:dragstart',
83
85
  ANCHOR_DRAG = 'anchor:drag',
84
86
  ANCHOR_DROP = 'anchor:drop',
@@ -469,6 +469,14 @@ type AnchorEventArgsPick<T extends 'data' | 'e' | 'nodeModel' | 'edgeModel'> =
469
469
  * 锚点事件
470
470
  */
471
471
  interface AnchorEventArgs {
472
+ /**
473
+ * anchor 锚点 click
474
+ */
475
+ 'anchor:click': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
476
+ /**
477
+ * anchor 锚点 mousedown
478
+ */
479
+ 'anchor:mousedown': AnchorEventArgsPick<'data' | 'e' | 'nodeModel'>
472
480
  /**
473
481
  * 开始拖拽锚点
474
482
  */
@@ -63,7 +63,7 @@ export class GraphModel {
63
63
  @observable height: number // 画布高度
64
64
 
65
65
  // 流程图主题配置
66
- theme: LogicFlow.Theme
66
+ @observable theme: LogicFlow.Theme
67
67
  // 网格配置
68
68
  @observable grid: Grid.GridOptions
69
69
  // 事件中心
@@ -13,7 +13,7 @@ import EdgeConfig = LogicFlow.EdgeConfig
13
13
  export class BezierEdgeModel extends BaseEdgeModel {
14
14
  modelType = ModelType.BEZIER_EDGE
15
15
 
16
- offset!: number
16
+ @observable offset!: number
17
17
  @observable path = ''
18
18
  constructor(data: EdgeConfig, graphModel: GraphModel) {
19
19
  super(data, graphModel)
@@ -30,7 +30,7 @@ import AnchorConfig = Model.AnchorConfig
30
30
  export class PolylineEdgeModel extends BaseEdgeModel {
31
31
  modelType = ModelType.POLYLINE_EDGE
32
32
  draggingPointList: Point[] = []
33
- offset?: number
33
+ @observable offset?: number
34
34
  @observable dbClickPosition?: Point
35
35
 
36
36
  initEdgeData(data: LogicFlow.EdgeConfig): void {
@@ -361,15 +361,26 @@ class Anchor extends Component<IProps, IState> {
361
361
 
362
362
  render() {
363
363
  const { startX, startY, endX, endY } = this.state
364
- const {
365
- anchorData: { edgeAddable },
366
- edgeStyle,
367
- } = this.props
364
+ const { anchorData, edgeStyle, nodeModel, graphModel } = this.props
365
+ const { edgeAddable } = anchorData
368
366
  return (
369
367
  // className="lf-anchor" 作为下载时,需要将锚点删除的依据,不要修改类名
370
368
  <g className="lf-anchor">
371
369
  <g
370
+ onClick={(ev) => {
371
+ ev.stopPropagation()
372
+ graphModel.eventCenter.emit(EventType.ANCHOR_CLICK, {
373
+ data: anchorData,
374
+ e: ev!,
375
+ nodeModel,
376
+ })
377
+ }}
372
378
  onMouseDown={(ev) => {
379
+ graphModel.eventCenter.emit(EventType.ANCHOR_MOUSEDOWN, {
380
+ data: anchorData,
381
+ e: ev!,
382
+ nodeModel,
383
+ })
373
384
  if (edgeAddable !== false) {
374
385
  this.dragHandler.handleMouseDown(ev)
375
386
  }
@@ -50,6 +50,7 @@ export class ResizeControl extends Component<
50
50
 
51
51
  // 初始化拖拽工具
52
52
  this.dragHandler = new StepDrag({
53
+ onDragStart: this.onDragStart,
53
54
  onDragging: this.onDragging,
54
55
  onDragEnd: this.onDragEnd,
55
56
  step: graphModel.gridSize,
@@ -317,6 +318,10 @@ export class ResizeControl extends Component<
317
318
  // this.triggerResizeEvent(preNodeData, curNodeData, deltaX, deltaY, this.index, this.nodeModel)
318
319
  }
319
320
 
321
+ onDragStart = () => {
322
+ this.graphModel.selectNodeById(this.nodeModel.id)
323
+ }
324
+
320
325
  onDragging = ({ deltaX, deltaY }: IDragParams) => {
321
326
  const { transformModel } = this.graphModel
322
327
  const [dx, dy] = transformModel.fixDeltaXY(deltaX, deltaY)