@logicflow/core 2.2.0 → 2.2.2
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/docs/api/logicflow-constructor/index.en.md +106 -0
- package/dist/docs/api/logicflow-constructor/index.zh.md +106 -0
- package/dist/docs/api/logicflow-constructor/use.en.md +61 -0
- package/dist/docs/api/logicflow-constructor/use.zh.md +61 -0
- package/dist/docs/api/logicflow-instance/canvas.en.md +197 -0
- package/dist/docs/api/logicflow-instance/canvas.zh.md +199 -0
- package/dist/docs/api/logicflow-instance/edge.en.md +273 -0
- package/dist/docs/api/logicflow-instance/edge.zh.md +273 -0
- package/dist/docs/api/logicflow-instance/edit-config.en.md +59 -0
- package/dist/docs/api/logicflow-instance/edit-config.zh.md +59 -0
- package/dist/docs/api/logicflow-instance/element.en.md +375 -0
- package/dist/docs/api/logicflow-instance/element.zh.md +379 -0
- package/dist/docs/api/logicflow-instance/event.en.md +326 -0
- package/dist/docs/api/logicflow-instance/event.zh.md +406 -0
- package/dist/docs/api/logicflow-instance/history.en.md +38 -0
- package/dist/docs/api/logicflow-instance/history.zh.md +38 -0
- package/dist/docs/api/logicflow-instance/index.en.md +41 -0
- package/dist/docs/api/logicflow-instance/index.zh.md +41 -0
- package/dist/docs/api/logicflow-instance/node.en.md +308 -0
- package/dist/docs/api/logicflow-instance/node.zh.md +308 -0
- package/dist/docs/api/logicflow-instance/register.en.md +76 -0
- package/dist/docs/api/logicflow-instance/register.zh.md +76 -0
- package/dist/docs/api/logicflow-instance/render-and-data.en.md +179 -0
- package/dist/docs/api/logicflow-instance/render-and-data.zh.md +181 -0
- package/dist/docs/api/logicflow-instance/text.en.md +60 -0
- package/dist/docs/api/logicflow-instance/text.zh.md +60 -0
- package/dist/docs/api/logicflow-instance/theme.en.md +179 -0
- package/dist/docs/api/logicflow-instance/theme.zh.md +179 -0
- package/dist/docs/api/runtime-model/edgeModel.en.md +29 -0
- package/dist/docs/api/runtime-model/edgeModel.zh.md +325 -0
- package/dist/docs/api/runtime-model/graphModel.en.md +275 -0
- package/dist/docs/api/runtime-model/graphModel.zh.md +1153 -0
- package/dist/docs/api/runtime-model/nodeModel.en.md +37 -0
- package/dist/docs/api/runtime-model/nodeModel.zh.md +644 -0
- package/dist/docs/api/type/MainTypes.en.md +598 -0
- package/dist/docs/api/type/MainTypes.zh.md +867 -0
- package/dist/docs/api/type/Theme.en.md +187 -0
- package/dist/docs/api/type/Theme.zh.md +187 -0
- package/dist/docs/api/type/canvas-types.en.md +25 -0
- package/dist/docs/api/type/canvas-types.zh.md +25 -0
- package/dist/docs/api/type/index.en.md +96 -0
- package/dist/docs/api/type/index.zh.md +99 -0
- package/dist/docs/api/type/node-types.en.md +21 -0
- package/dist/docs/api/type/node-types.zh.md +21 -0
- package/dist/docs/api/type/plugin-types.en.md +24 -0
- package/dist/docs/api/type/plugin-types.zh.md +24 -0
- package/dist/docs/index.md +11 -0
- package/dist/docs/tutorial/about.en.md +38 -0
- package/dist/docs/tutorial/about.zh.md +65 -0
- package/dist/docs/tutorial/advanced/dnd.en.md +62 -0
- package/dist/docs/tutorial/advanced/dnd.zh.md +52 -0
- package/dist/docs/tutorial/advanced/edge.en.md +64 -0
- package/dist/docs/tutorial/advanced/edge.zh.md +66 -0
- package/dist/docs/tutorial/advanced/keyboard.en.md +70 -0
- package/dist/docs/tutorial/advanced/keyboard.zh.md +67 -0
- package/dist/docs/tutorial/advanced/node.en.md +338 -0
- package/dist/docs/tutorial/advanced/node.zh.md +338 -0
- package/dist/docs/tutorial/advanced/react.en.md +106 -0
- package/dist/docs/tutorial/advanced/react.zh.md +114 -0
- package/dist/docs/tutorial/advanced/silent-mode.en.md +75 -0
- package/dist/docs/tutorial/advanced/silent-mode.zh.md +71 -0
- package/dist/docs/tutorial/advanced/snapline.en.md +54 -0
- package/dist/docs/tutorial/advanced/vue.en.md +249 -0
- package/dist/docs/tutorial/advanced/vue.zh.md +248 -0
- package/dist/docs/tutorial/ai.en.md +64 -0
- package/dist/docs/tutorial/ai.zh.md +64 -0
- package/dist/docs/tutorial/basic/background.en.md +50 -0
- package/dist/docs/tutorial/basic/canvas.en.md +164 -0
- package/dist/docs/tutorial/basic/canvas.zh.md +183 -0
- package/dist/docs/tutorial/basic/class.en.md +106 -0
- package/dist/docs/tutorial/basic/class.zh.md +103 -0
- package/dist/docs/tutorial/basic/edge.en.md +151 -0
- package/dist/docs/tutorial/basic/edge.zh.md +152 -0
- package/dist/docs/tutorial/basic/event.en.md +70 -0
- package/dist/docs/tutorial/basic/event.zh.md +66 -0
- package/dist/docs/tutorial/basic/grid.en.md +77 -0
- package/dist/docs/tutorial/basic/node.en.md +358 -0
- package/dist/docs/tutorial/basic/node.zh.md +318 -0
- package/dist/docs/tutorial/basic/theme.en.md +154 -0
- package/dist/docs/tutorial/basic/theme.zh.md +157 -0
- package/dist/docs/tutorial/extension/adapter.en.md +446 -0
- package/dist/docs/tutorial/extension/adapter.zh.md +429 -0
- package/dist/docs/tutorial/extension/bpmn-element.en.md +1427 -0
- package/dist/docs/tutorial/extension/bpmn-element.zh.md +1472 -0
- package/dist/docs/tutorial/extension/control.en.md +117 -0
- package/dist/docs/tutorial/extension/control.zh.md +118 -0
- package/dist/docs/tutorial/extension/curved-edge.en.md +46 -0
- package/dist/docs/tutorial/extension/curved-edge.zh.md +46 -0
- package/dist/docs/tutorial/extension/custom.en.md +142 -0
- package/dist/docs/tutorial/extension/custom.zh.md +138 -0
- package/dist/docs/tutorial/extension/dnd-panel.en.md +109 -0
- package/dist/docs/tutorial/extension/dnd-panel.zh.md +109 -0
- package/dist/docs/tutorial/extension/dynamic-group.en.md +606 -0
- package/dist/docs/tutorial/extension/dynamic-group.zh.md +606 -0
- package/dist/docs/tutorial/extension/group.en.md +217 -0
- package/dist/docs/tutorial/extension/group.zh.md +209 -0
- package/dist/docs/tutorial/extension/highlight.en.md +50 -0
- package/dist/docs/tutorial/extension/highlight.zh.md +50 -0
- package/dist/docs/tutorial/extension/insert-node-in-polyline.en.md +52 -0
- package/dist/docs/tutorial/extension/insert-node-in-polyline.zh.md +47 -0
- package/dist/docs/tutorial/extension/intro.en.md +72 -0
- package/dist/docs/tutorial/extension/intro.zh.md +95 -0
- package/dist/docs/tutorial/extension/label.en.md +136 -0
- package/dist/docs/tutorial/extension/label.zh.md +135 -0
- package/dist/docs/tutorial/extension/layout.en.md +156 -0
- package/dist/docs/tutorial/extension/layout.zh.md +156 -0
- package/dist/docs/tutorial/extension/menu.en.md +319 -0
- package/dist/docs/tutorial/extension/menu.zh.md +377 -0
- package/dist/docs/tutorial/extension/minimap.en.md +164 -0
- package/dist/docs/tutorial/extension/minimap.zh.md +180 -0
- package/dist/docs/tutorial/extension/node-resize.en.md +199 -0
- package/dist/docs/tutorial/extension/node-resize.zh.md +221 -0
- package/dist/docs/tutorial/extension/pool.en.md +227 -0
- package/dist/docs/tutorial/extension/pool.zh.md +227 -0
- package/dist/docs/tutorial/extension/proximity-connect.en.md +104 -0
- package/dist/docs/tutorial/extension/proximity-connect.zh.md +107 -0
- package/dist/docs/tutorial/extension/selection.en.md +166 -0
- package/dist/docs/tutorial/extension/selection.zh.md +150 -0
- package/dist/docs/tutorial/extension/snapshot.en.md +276 -0
- package/dist/docs/tutorial/extension/snapshot.zh.md +276 -0
- package/dist/docs/tutorial/get-started.en.md +501 -0
- package/dist/docs/tutorial/get-started.zh.md +139 -0
- package/dist/docs/tutorial/update.en.md +213 -0
- package/dist/docs/tutorial/update.zh.md +212 -0
- package/dist/index.css +3 -2
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/LogicFlow.d.ts +9 -0
- package/es/LogicFlow.js +0 -1
- package/es/constant/index.d.ts +1 -1
- package/es/constant/index.js +1 -1
- package/es/constant/theme.d.ts +136 -0
- package/es/constant/theme.js +680 -0
- package/es/index.css +3 -2
- package/es/model/GraphModel.d.ts +10 -2
- package/es/model/GraphModel.js +48 -14
- package/es/model/TransformModel.js +9 -9
- package/es/model/edge/BaseEdgeModel.js +7 -2
- package/es/model/edge/PolylineEdgeModel.d.ts +7 -0
- package/es/model/edge/PolylineEdgeModel.js +136 -7
- package/es/model/node/BaseNodeModel.d.ts +12 -1
- package/es/model/node/BaseNodeModel.js +9 -2
- package/es/model/node/HtmlNodeModel.d.ts +12 -0
- package/es/model/node/HtmlNodeModel.js +19 -0
- package/es/model/node/PolygonNodeModel.js +3 -3
- package/es/options.d.ts +4 -2
- package/es/style/index.css +3 -2
- package/es/style/index.less +3 -2
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/tool/MultipleSelectTool.js +10 -5
- package/es/util/drag.js +0 -1
- package/es/util/edge.d.ts +40 -1
- package/es/util/edge.js +43 -9
- package/es/util/geometry.d.ts +8 -0
- package/es/util/geometry.js +79 -0
- package/es/util/theme.d.ts +2 -65
- package/es/util/theme.js +4 -281
- package/es/view/Anchor.d.ts +1 -0
- package/es/view/Anchor.js +24 -21
- package/es/view/Control.d.ts +5 -0
- package/es/view/Control.js +44 -57
- package/es/view/edge/BaseEdge.js +9 -0
- package/es/view/edge/PolylineEdge.js +13 -2
- package/es/view/node/BaseNode.d.ts +1 -0
- package/es/view/node/BaseNode.js +23 -11
- package/es/view/node/HtmlNode.js +2 -4
- package/es/view/overlay/CanvasOverlay.js +5 -2
- package/es/view/overlay/Grid.d.ts +12 -1
- package/es/view/overlay/Grid.js +85 -23
- package/es/view/overlay/OutlineOverlay.d.ts +1 -0
- package/es/view/overlay/OutlineOverlay.js +18 -17
- package/es/view/overlay/gridConfig.d.ts +46 -0
- package/es/view/overlay/gridConfig.js +99 -0
- package/es/view/shape/Polygon.d.ts +0 -7
- package/es/view/shape/Polygon.js +12 -43
- package/lib/LogicFlow.d.ts +9 -0
- package/lib/LogicFlow.js +0 -1
- package/lib/constant/index.d.ts +1 -1
- package/lib/constant/index.js +16 -2
- package/lib/constant/theme.d.ts +136 -0
- package/lib/constant/theme.js +683 -0
- package/lib/index.css +3 -2
- package/lib/model/GraphModel.d.ts +10 -2
- package/lib/model/GraphModel.js +49 -15
- package/lib/model/TransformModel.js +9 -9
- package/lib/model/edge/BaseEdgeModel.js +7 -2
- package/lib/model/edge/PolylineEdgeModel.d.ts +7 -0
- package/lib/model/edge/PolylineEdgeModel.js +136 -7
- package/lib/model/node/BaseNodeModel.d.ts +12 -1
- package/lib/model/node/BaseNodeModel.js +9 -2
- package/lib/model/node/HtmlNodeModel.d.ts +12 -0
- package/lib/model/node/HtmlNodeModel.js +19 -0
- package/lib/model/node/PolygonNodeModel.js +3 -3
- package/lib/options.d.ts +4 -2
- package/lib/style/index.css +3 -2
- package/lib/style/index.less +3 -2
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/tool/MultipleSelectTool.js +10 -5
- package/lib/util/drag.js +0 -1
- package/lib/util/edge.d.ts +40 -1
- package/lib/util/edge.js +43 -9
- package/lib/util/geometry.d.ts +8 -0
- package/lib/util/geometry.js +81 -1
- package/lib/util/theme.d.ts +2 -65
- package/lib/util/theme.js +15 -292
- package/lib/view/Anchor.d.ts +1 -0
- package/lib/view/Anchor.js +24 -21
- package/lib/view/Control.d.ts +5 -0
- package/lib/view/Control.js +44 -57
- package/lib/view/edge/BaseEdge.js +9 -0
- package/lib/view/edge/PolylineEdge.js +13 -2
- package/lib/view/node/BaseNode.d.ts +1 -0
- package/lib/view/node/BaseNode.js +22 -10
- package/lib/view/node/HtmlNode.js +1 -3
- package/lib/view/overlay/CanvasOverlay.js +5 -2
- package/lib/view/overlay/Grid.d.ts +12 -1
- package/lib/view/overlay/Grid.js +83 -21
- package/lib/view/overlay/OutlineOverlay.d.ts +1 -0
- package/lib/view/overlay/OutlineOverlay.js +18 -17
- package/lib/view/overlay/gridConfig.d.ts +46 -0
- package/lib/view/overlay/gridConfig.js +104 -0
- package/lib/view/shape/Polygon.d.ts +0 -7
- package/lib/view/shape/Polygon.js +13 -45
- package/package.json +9 -2
- package/scripts/postinstall-ai-prompt.js +67 -0
- package/.turbo/turbo-build$colon$dev.log +0 -10
- package/.turbo/turbo-build.log +0 -33
- package/CHANGELOG.md +0 -1849
- package/__tests__/algorithm/egde.test.ts +0 -131
- package/__tests__/algorithm/index.test.ts +0 -74
- package/__tests__/algorithm/outline.test.ts +0 -43
- package/__tests__/bugs/1545-spec.test.ts +0 -42
- package/__tests__/event/event.test.ts +0 -22
- package/__tests__/history/history.test.ts +0 -28
- package/__tests__/logicflow.test.ts +0 -575
- package/__tests__/model/graphmodel.test.ts +0 -87
- package/__tests__/util/compatible.test.ts +0 -48
- package/__tests__/util/edge.test.ts +0 -224
- package/__tests__/util/geometry.test.ts +0 -14
- package/__tests__/util/graph.test.ts +0 -16
- package/__tests__/util/matrix.test.ts +0 -41
- package/__tests__/util/node.test.ts +0 -68
- package/__tests__/util/sampling.test.ts +0 -12
- package/__tests__/util/vector.test.ts +0 -50
- package/__tests__/util/zIndex.test.ts +0 -10
- package/src/LogicFlow.tsx +0 -2008
- package/src/algorithm/edge.ts +0 -67
- package/src/algorithm/index.ts +0 -70
- package/src/algorithm/outline.ts +0 -77
- package/src/algorithm/rotate.ts +0 -55
- package/src/common/drag.ts +0 -219
- package/src/common/history.ts +0 -108
- package/src/common/index.ts +0 -6
- package/src/common/keyboard.ts +0 -108
- package/src/common/matrix.ts +0 -122
- package/src/common/vector.ts +0 -93
- package/src/constant/index.ts +0 -179
- package/src/event/event.md +0 -66
- package/src/event/eventArgs.ts +0 -643
- package/src/event/eventEmitter.ts +0 -156
- package/src/history/index.ts +0 -119
- package/src/index.less +0 -1
- package/src/index.ts +0 -26
- package/src/keyboard/index.ts +0 -112
- package/src/keyboard/shortcut.ts +0 -200
- package/src/model/BaseModel.ts +0 -250
- package/src/model/EditConfigModel.ts +0 -334
- package/src/model/GraphModel.ts +0 -1788
- package/src/model/NestedTransformModel.ts +0 -121
- package/src/model/SnaplineModel.ts +0 -256
- package/src/model/TransformModel.ts +0 -258
- package/src/model/edge/BaseEdgeModel.ts +0 -777
- package/src/model/edge/BezierEdgeModel.ts +0 -197
- package/src/model/edge/LineEdgeModel.ts +0 -36
- package/src/model/edge/PolylineEdgeModel.ts +0 -672
- package/src/model/edge/index.ts +0 -4
- package/src/model/index.ts +0 -9
- package/src/model/node/BaseNodeModel.ts +0 -949
- package/src/model/node/CircleNodeModel.ts +0 -91
- package/src/model/node/DiamondNodeModel.ts +0 -132
- package/src/model/node/EllipseNodeModel.ts +0 -98
- package/src/model/node/HtmlNodeModel.ts +0 -50
- package/src/model/node/PolygonNodeModel.ts +0 -150
- package/src/model/node/RectNodeModel.ts +0 -69
- package/src/model/node/TextNodeModel.ts +0 -54
- package/src/model/node/index.ts +0 -8
- package/src/options.ts +0 -145
- package/src/style/index.less +0 -261
- package/src/style/raw.ts +0 -220
- package/src/tool/MultipleSelectTool.tsx +0 -132
- package/src/tool/TextEditTool.tsx +0 -193
- package/src/tool/index.ts +0 -101
- package/src/typings.d.ts +0 -5
- package/src/util/animation.ts +0 -29
- package/src/util/browser.ts +0 -4
- package/src/util/compatible.ts +0 -15
- package/src/util/drag.ts +0 -220
- package/src/util/edge.ts +0 -1060
- package/src/util/geometry.ts +0 -55
- package/src/util/graph.ts +0 -46
- package/src/util/index.ts +0 -17
- package/src/util/matrix.ts +0 -129
- package/src/util/mobx.ts +0 -23
- package/src/util/node.ts +0 -543
- package/src/util/raf.ts +0 -28
- package/src/util/resize.ts +0 -606
- package/src/util/sampling.ts +0 -85
- package/src/util/theme.ts +0 -375
- package/src/util/uuid.ts +0 -26
- package/src/util/vector.ts +0 -93
- package/src/util/zIndex.ts +0 -6
- package/src/view/Anchor.tsx +0 -445
- package/src/view/Control.tsx +0 -512
- package/src/view/Graph.tsx +0 -141
- package/src/view/Rotate.tsx +0 -113
- package/src/view/behavior/dnd.ts +0 -162
- package/src/view/behavior/index.ts +0 -2
- package/src/view/behavior/snapline.ts +0 -16
- package/src/view/edge/AdjustPoint.tsx +0 -425
- package/src/view/edge/Arrow.tsx +0 -54
- package/src/view/edge/BaseEdge.tsx +0 -650
- package/src/view/edge/BezierEdge.tsx +0 -101
- package/src/view/edge/LineEdge.tsx +0 -81
- package/src/view/edge/PolylineEdge.tsx +0 -299
- package/src/view/edge/index.ts +0 -6
- package/src/view/index.ts +0 -8
- package/src/view/node/BaseNode.tsx +0 -571
- package/src/view/node/CircleNode.tsx +0 -21
- package/src/view/node/DiamondNode.tsx +0 -24
- package/src/view/node/EllipseNode.tsx +0 -22
- package/src/view/node/HtmlNode.tsx +0 -95
- package/src/view/node/PolygonNode.tsx +0 -28
- package/src/view/node/RectNode.tsx +0 -30
- package/src/view/node/TextNode.tsx +0 -39
- package/src/view/node/index.ts +0 -8
- package/src/view/overlay/BackgroundOverlay.tsx +0 -34
- package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
- package/src/view/overlay/CanvasOverlay.tsx +0 -288
- package/src/view/overlay/Grid.tsx +0 -162
- package/src/view/overlay/ModificationOverlay.tsx +0 -31
- package/src/view/overlay/OutlineOverlay.tsx +0 -170
- package/src/view/overlay/SnaplineOverlay.tsx +0 -44
- package/src/view/overlay/ToolOverlay.tsx +0 -65
- package/src/view/overlay/getTransformHoc.tsx +0 -50
- package/src/view/overlay/index.ts +0 -8
- package/src/view/shape/Circle.tsx +0 -41
- package/src/view/shape/Ellipse.tsx +0 -42
- package/src/view/shape/Line.tsx +0 -39
- package/src/view/shape/Path.tsx +0 -22
- package/src/view/shape/Polygon.tsx +0 -91
- package/src/view/shape/Polyline.tsx +0 -31
- package/src/view/shape/Rect.tsx +0 -44
- package/src/view/shape/Text.tsx +0 -169
- package/src/view/shape/index.ts +0 -8
- package/src/view/text/BaseText.tsx +0 -134
- package/src/view/text/LineText.tsx +0 -168
- package/src/view/text/index.ts +0 -2
- package/stats.html +0 -4842
- package/tsconfig.json +0 -18
|
@@ -90,13 +90,16 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
90
90
|
var event = _a.event;
|
|
91
91
|
var _f = _this.props, model = _f.model, graphModel = _f.graphModel;
|
|
92
92
|
var _g = graphModel.editConfigModel, stopMoveGraph = _g.stopMoveGraph, autoExpand = _g.autoExpand, snapGrid = _g.snapGrid, transformModel = graphModel.transformModel, selectNodes = graphModel.selectNodes, width = graphModel.width, height = graphModel.height, gridSize = graphModel.gridSize;
|
|
93
|
-
model.isDragging = true;
|
|
94
93
|
var _h = event, clientX = _h.clientX, clientY = _h.clientY;
|
|
95
|
-
var _j =
|
|
94
|
+
var _j = _this.mouseDownPosition, mouseDownX = _j.x, mouseDownY = _j.y;
|
|
95
|
+
if (clientX - mouseDownX > gridSize || clientY - mouseDownY > gridSize) {
|
|
96
|
+
model.isDragging = true;
|
|
97
|
+
}
|
|
98
|
+
var _k = graphModel.getPointByClient({
|
|
96
99
|
x: clientX,
|
|
97
100
|
y: clientY,
|
|
98
|
-
}).canvasOverlayPosition, x =
|
|
99
|
-
var
|
|
101
|
+
}).canvasOverlayPosition, x = _k.x, y = _k.y;
|
|
102
|
+
var _l = __read(transformModel.CanvasPointToHtmlPoint([x, y]), 2), x1 = _l[0], y1 = _l[1];
|
|
100
103
|
// 1. 考虑画布被缩放
|
|
101
104
|
// 2. 考虑鼠标位置不再节点中心
|
|
102
105
|
x = x + ((_c = (_b = _this.moveOffset) === null || _b === void 0 ? void 0 : _b.dx) !== null && _c !== void 0 ? _c : 0);
|
|
@@ -114,14 +117,14 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
114
117
|
return;
|
|
115
118
|
}
|
|
116
119
|
// 取节点左上角和右下角,计算节点移动是否超出范围
|
|
117
|
-
var
|
|
120
|
+
var _m = __read(transformModel.CanvasPointToHtmlPoint([
|
|
118
121
|
x - model.width / 2,
|
|
119
122
|
y - model.height / 2,
|
|
120
|
-
]), 2), leftTopX =
|
|
121
|
-
var
|
|
123
|
+
]), 2), leftTopX = _m[0], leftTopY = _m[1];
|
|
124
|
+
var _o = __read(transformModel.CanvasPointToHtmlPoint([
|
|
122
125
|
x + model.width / 2,
|
|
123
126
|
y + model.height / 2,
|
|
124
|
-
]), 2), rightBottomX =
|
|
127
|
+
]), 2), rightBottomX = _o[0], rightBottomY = _o[1];
|
|
125
128
|
var size = Math.max(gridSize, 20);
|
|
126
129
|
var nearBoundary = [];
|
|
127
130
|
if (leftTopX < 0) {
|
|
@@ -188,7 +191,7 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
188
191
|
var _a = _this.props, model = _a.model, graphModel = _a.graphModel;
|
|
189
192
|
// 这里会有一种极端情况:当网格大小是1或者关闭网格吸附时,用触摸板点击节点会触发拖拽事件导致节点无法选中
|
|
190
193
|
// 当触摸板点击节点时,为了防止误触发拖拽导致节点无法选中,允许在非拖拽状态且时间间隔小于100ms时触发点击事件
|
|
191
|
-
if (!isDragging && timeInterval >
|
|
194
|
+
if (!isDragging && timeInterval > 300)
|
|
192
195
|
return;
|
|
193
196
|
if (!isDragging) {
|
|
194
197
|
_this.onDragEnd();
|
|
@@ -243,6 +246,14 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
243
246
|
else {
|
|
244
247
|
graphModel.eventCenter.emit(constant_1.EventType.ELEMENT_CLICK, eventOptions);
|
|
245
248
|
graphModel.eventCenter.emit(constant_1.EventType.NODE_CLICK, eventOptions);
|
|
249
|
+
// 复制粘贴后会出现点击节点时,节点会失去焦点的问题,这里手动让节点获焦以解决这个问题
|
|
250
|
+
var el_1 = e.currentTarget;
|
|
251
|
+
var rAF = !(0, lodash_es_1.isNil)(window) && (0, lodash_es_1.isFunction)(window.requestAnimationFrame)
|
|
252
|
+
? window.requestAnimationFrame.bind(window)
|
|
253
|
+
: function (fn) { return setTimeout(fn, 0); };
|
|
254
|
+
rAF(function () {
|
|
255
|
+
el_1.focus();
|
|
256
|
+
});
|
|
246
257
|
}
|
|
247
258
|
};
|
|
248
259
|
_this.handleContextMenu = function (ev) {
|
|
@@ -271,6 +282,7 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
271
282
|
};
|
|
272
283
|
_this.handleMouseDown = function (ev) {
|
|
273
284
|
var _a = _this.props, model = _a.model, graphModel = _a.graphModel;
|
|
285
|
+
_this.mouseDownPosition = { x: ev.clientX, y: ev.clientY };
|
|
274
286
|
_this.startTime = new Date().getTime();
|
|
275
287
|
var editConfigModel = graphModel.editConfigModel;
|
|
276
288
|
if (editConfigModel.adjustNodePosition && model.draggable) {
|
|
@@ -458,7 +470,7 @@ var BaseNode = /** @class */ (function (_super) {
|
|
|
458
470
|
var _b = graphModel.editConfigModel, hideAnchors = _b.hideAnchors, adjustNodePosition = _b.adjustNodePosition, allowRotate = _b.allowRotate, allowResize = _b.allowResize, gridSize = graphModel.gridSize, SCALE_X = graphModel.transformModel.SCALE_X;
|
|
459
471
|
var isHitable = model.isHitable, draggable = model.draggable, transform = model.transform;
|
|
460
472
|
var _c = model.getOuterGAttributes(), _d = _c.className, className = _d === void 0 ? '' : _d, restAttributes = __rest(_c, ["className"]);
|
|
461
|
-
var nodeShapeInner = ((0, jsx_runtime_1.jsxs)("g", { className: "lf-node-content", children: [(0, jsx_runtime_1.jsxs)("g", { transform: transform, children: [this.getShape(), this.getText(),
|
|
473
|
+
var nodeShapeInner = ((0, jsx_runtime_1.jsxs)("g", { className: "lf-node-content", children: [(0, jsx_runtime_1.jsxs)("g", { transform: transform, children: [this.getShape(), this.getText(), allowResize && this.getResizeControl(), allowRotate && this.getRotateControl()] }), !hideAnchors && this.getAnchors()] }));
|
|
462
474
|
var nodeShape;
|
|
463
475
|
if (!isHitable) {
|
|
464
476
|
nodeShape = ((0, jsx_runtime_1.jsx)("g", __assign({ className: "".concat(this.getStateClassName(), " ").concat(className) }, restAttributes, { children: nodeShapeInner })));
|
|
@@ -105,13 +105,11 @@ var HtmlNode = /** @class */ (function (_super) {
|
|
|
105
105
|
return true;
|
|
106
106
|
};
|
|
107
107
|
HtmlNode.prototype.componentDidMount = function () {
|
|
108
|
-
// console.log('HtmlNode --->>> componentDidMount - 初始化内容')
|
|
109
108
|
if (this.shouldUpdate() && this.rootEl) {
|
|
110
109
|
this.setHtml(this.rootEl);
|
|
111
110
|
}
|
|
112
111
|
};
|
|
113
112
|
HtmlNode.prototype.componentDidUpdate = function () {
|
|
114
|
-
// console.log('HtmlNode --->>> componentDidUpdate - 更新节点内容')
|
|
115
113
|
// DONE: 将 componentDidMount 和 componentDidUpdate 区分开,如果写在一次,渲染 React 组件会重复初始化,消耗过多资源
|
|
116
114
|
// 为了保证历史兼容性,先将默认 HTML 节点的 setHtml 和 confirmUpdate 保持一直,用户可通过自定义的方式重新定义
|
|
117
115
|
if (this.shouldUpdate() && this.rootEl) {
|
|
@@ -127,7 +125,7 @@ var HtmlNode = /** @class */ (function (_super) {
|
|
|
127
125
|
var x = model.x, y = model.y, height = model.height, width = model.width;
|
|
128
126
|
var style = model.getNodeStyle();
|
|
129
127
|
this.currentProperties = JSON.stringify(model.properties);
|
|
130
|
-
return ((0, jsx_runtime_1.jsx)("foreignObject", __assign({}, style, { x: x - width / 2, y: y - height / 2, width: width, height: height, ref: this.ref })));
|
|
128
|
+
return ((0, jsx_runtime_1.jsxs)("g", { children: [style.shadow && ((0, jsx_runtime_1.jsx)("defs", { children: (0, jsx_runtime_1.jsx)("filter", { id: "shadow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: (0, jsx_runtime_1.jsx)("feDropShadow", __assign({}, style.shadow)) }) })), (0, jsx_runtime_1.jsx)("rect", __assign({ x: x - width / 2, y: y - height / 2, width: width, height: height, rx: style.radius, ry: style.radius }, style, { filter: "url(#shadow)" })), (0, jsx_runtime_1.jsx)("foreignObject", __assign({}, style, { x: x - width / 2, y: y - height / 2, width: width, height: height, ref: this.ref }))] }));
|
|
131
129
|
};
|
|
132
130
|
return HtmlNode;
|
|
133
131
|
}(BaseNode_1.default));
|
|
@@ -100,6 +100,9 @@ var CanvasOverlay = /** @class */ (function (_super) {
|
|
|
100
100
|
if (selectElements.size > 0) {
|
|
101
101
|
graphModel.clearSelectElements();
|
|
102
102
|
}
|
|
103
|
+
// 如果是拖拽状态,不触发点击事件
|
|
104
|
+
if (_this.state.isDragging)
|
|
105
|
+
return;
|
|
103
106
|
graphModel.eventCenter.emit(constant_1.EventType.BLANK_CLICK, { e: ev });
|
|
104
107
|
}
|
|
105
108
|
};
|
|
@@ -161,8 +164,6 @@ var CanvasOverlay = /** @class */ (function (_super) {
|
|
|
161
164
|
else {
|
|
162
165
|
eventCenter.emit(constant_1.EventType.BLANK_MOUSEDOWN, { e: ev });
|
|
163
166
|
}
|
|
164
|
-
// 为了处理画布移动的时候,编辑和菜单仍然存在的问题。
|
|
165
|
-
_this.clickHandler(ev);
|
|
166
167
|
}
|
|
167
168
|
};
|
|
168
169
|
_this.pointerMoveHandler = function (ev) {
|
|
@@ -220,6 +221,8 @@ var CanvasOverlay = /** @class */ (function (_super) {
|
|
|
220
221
|
var editConfigModel = _this.props.graphModel.editConfigModel;
|
|
221
222
|
// 标记退出捏合,框选等交互可恢复
|
|
222
223
|
editConfigModel.updateEditConfig({ isPinching: false });
|
|
224
|
+
// 为了处理画布移动的时候,编辑和菜单仍然存在的问题。
|
|
225
|
+
_this.clickHandler(ev);
|
|
223
226
|
}
|
|
224
227
|
};
|
|
225
228
|
var _a = props.graphModel, gridSize = _a.gridSize, eventCenter = _a.eventCenter;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component } from 'preact/compat';
|
|
2
|
+
import { MajorBoldConfig } from './gridConfig';
|
|
2
3
|
import { GraphModel } from '../../model';
|
|
3
4
|
type IProps = {
|
|
4
5
|
graphModel: GraphModel;
|
|
@@ -8,6 +9,10 @@ export declare class Grid extends Component<IProps> {
|
|
|
8
9
|
readonly id: string;
|
|
9
10
|
constructor(props: IProps);
|
|
10
11
|
renderDot(): import("preact/compat").JSX.Element;
|
|
12
|
+
private getDashArrayForSize;
|
|
13
|
+
private getPeriod;
|
|
14
|
+
private getBoldStrokeWidth;
|
|
15
|
+
private renderMeshEdgeLines;
|
|
11
16
|
renderMesh(): import("preact/compat").JSX.Element;
|
|
12
17
|
render(): import("preact/compat").JSX.Element;
|
|
13
18
|
}
|
|
@@ -39,8 +44,14 @@ export declare namespace Grid {
|
|
|
39
44
|
*/
|
|
40
45
|
thickness?: number;
|
|
41
46
|
};
|
|
47
|
+
/**
|
|
48
|
+
* 行为配置:支持 boolean 或高级对象
|
|
49
|
+
* - false: 禁用特殊样式,opacity=1,无加粗,无虚线
|
|
50
|
+
* - true: 启用默认样式,opacity=0.75,每第5个加粗/实线,虚线动态计算
|
|
51
|
+
* - object: 高级配置,详见 MajorBoldConfig
|
|
52
|
+
*/
|
|
53
|
+
majorBold?: boolean | MajorBoldConfig;
|
|
42
54
|
};
|
|
43
|
-
const defaultProps: GridOptions;
|
|
44
55
|
function getGridOptions(options: number | boolean | GridOptions): GridOptions;
|
|
45
56
|
}
|
|
46
57
|
export {};
|
package/lib/view/overlay/Grid.js
CHANGED
|
@@ -20,12 +20,38 @@ 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.Grid = void 0;
|
|
25
50
|
var jsx_runtime_1 = require("preact/jsx-runtime");
|
|
26
51
|
var compat_1 = require("preact/compat");
|
|
27
52
|
var lodash_es_1 = require("lodash-es");
|
|
28
53
|
var __1 = require("../..");
|
|
54
|
+
var gridConfig_1 = require("./gridConfig");
|
|
29
55
|
var util_1 = require("../../util");
|
|
30
56
|
var constant_1 = require("../../constant");
|
|
31
57
|
var Grid = /** @class */ (function (_super) {
|
|
@@ -45,21 +71,64 @@ var Grid = /** @class */ (function (_super) {
|
|
|
45
71
|
var opacity = visible ? 1 : 0;
|
|
46
72
|
return ((0, jsx_runtime_1.jsxs)("g", { fill: color, opacity: opacity, children: [(0, jsx_runtime_1.jsx)("circle", { cx: 0, cy: 0, r: radius / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: 0, cy: size, r: radius / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: size, cy: 0, r: radius / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: size, cy: size, r: radius / 2 })] }));
|
|
47
73
|
};
|
|
74
|
+
// 计算与 size 整除的虚线周期,使边长能被 (dash + gap) 完整分割
|
|
75
|
+
Grid.prototype.getDashArrayForSize = function (dashCfg) {
|
|
76
|
+
var _a;
|
|
77
|
+
// 若提供了直接可用的 pattern,则优先使用
|
|
78
|
+
var direct = (_a = dashCfg === null || dashCfg === void 0 ? void 0 : dashCfg.pattern) === null || _a === void 0 ? void 0 : _a.filter(function (n) { return typeof n === 'number' && n > 0; });
|
|
79
|
+
return (direct === null || direct === void 0 ? void 0 : direct.join(',')) || '2,1';
|
|
80
|
+
};
|
|
81
|
+
// 计算一个周期内的最大加粗索引(作为周期大小)
|
|
82
|
+
Grid.prototype.getPeriod = function (advanced) {
|
|
83
|
+
var list = Array.isArray(advanced === null || advanced === void 0 ? void 0 : advanced.boldIndices)
|
|
84
|
+
? advanced.boldIndices.filter(function (n) { return typeof n === 'number' && n > 0; })
|
|
85
|
+
: [];
|
|
86
|
+
return list.length ? Math.max.apply(Math, __spreadArray([], __read(list), false)) : 0;
|
|
87
|
+
};
|
|
88
|
+
// 计算加粗线宽,优先使用自定义;否则根据周期与厚度估算
|
|
89
|
+
Grid.prototype.getBoldStrokeWidth = function (advanced, size, thickness, period) {
|
|
90
|
+
if (typeof (advanced === null || advanced === void 0 ? void 0 : advanced.customBoldWidth) === 'number')
|
|
91
|
+
return advanced.customBoldWidth;
|
|
92
|
+
var baseThickness = Math.max(1, thickness !== null && thickness !== void 0 ? thickness : 1);
|
|
93
|
+
var p = Math.max(1, period !== null && period !== void 0 ? period : this.getPeriod(advanced));
|
|
94
|
+
return Math.min(baseThickness, (size * p) / 2) / 2;
|
|
95
|
+
};
|
|
96
|
+
// 渲染 mesh 类型四条边的虚线,减少重复代码
|
|
97
|
+
Grid.prototype.renderMeshEdgeLines = function (size, color, strokeWidth, opacity, dash) {
|
|
98
|
+
var segments = [
|
|
99
|
+
{ d: "M 0 0 H ".concat(size) },
|
|
100
|
+
{ d: "M 0 ".concat(size, " H ").concat(size) },
|
|
101
|
+
{ d: "M 0 0 V ".concat(size) },
|
|
102
|
+
{ d: "M ".concat(size, " 0 V ").concat(size) },
|
|
103
|
+
];
|
|
104
|
+
return ((0, jsx_runtime_1.jsx)("g", { opacity: opacity, fill: "transparent", children: segments.map(function (seg) { return ((0, jsx_runtime_1.jsx)("path", { d: seg.d, stroke: color, strokeWidth: strokeWidth / 2, strokeDasharray: dash, strokeLinecap: "butt", fill: "transparent" })); }) }));
|
|
105
|
+
};
|
|
48
106
|
// 网格类型为交叉线
|
|
49
107
|
// todo: 采用背景缩放的方式,实现更好的体验
|
|
50
108
|
Grid.prototype.renderMesh = function () {
|
|
51
|
-
var _a
|
|
52
|
-
var _c =
|
|
109
|
+
var _a, _b;
|
|
110
|
+
var _c = this.gridOptions, config = _c.config, _d = _c.size, size = _d === void 0 ? 1 : _d, visible = _c.visible, majorBold = _c.majorBold;
|
|
111
|
+
var advanced = (0, gridConfig_1.mergeMajorBoldConfig)(majorBold).config;
|
|
112
|
+
var baseOpacity = advanced.opacity;
|
|
113
|
+
var color = ((_a = config === null || config === void 0 ? void 0 : config.color) !== null && _a !== void 0 ? _a : '#D7DEEB');
|
|
114
|
+
var thickness = ((_b = config === null || config === void 0 ? void 0 : config.thickness) !== null && _b !== void 0 ? _b : 1);
|
|
53
115
|
// 对于交叉线网格,线的宽度不能大于网格大小的一半
|
|
54
116
|
var strokeWidth = Math.min(Math.max(1, thickness), size / 2);
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
117
|
+
var opacity = visible ? baseOpacity : 0;
|
|
118
|
+
// 根据 size 自动计算合适的 dash/gap 周期,使 size 能被 (dash + gap) 整除
|
|
119
|
+
var dash = majorBold === false
|
|
120
|
+
? undefined
|
|
121
|
+
: this.getDashArrayForSize(advanced.dashArrayConfig);
|
|
122
|
+
return this.renderMeshEdgeLines(size, color, strokeWidth, opacity, dash);
|
|
58
123
|
};
|
|
59
124
|
Grid.prototype.render = function () {
|
|
60
|
-
var
|
|
125
|
+
var _this = this;
|
|
126
|
+
var _a, _b, _c;
|
|
127
|
+
var _d = this.props.graphModel, transformModel = _d.transformModel, grid = _d.grid;
|
|
61
128
|
this.gridOptions = grid;
|
|
62
|
-
var
|
|
129
|
+
var _e = this.gridOptions, type = _e.type, _f = _e.config, config = _f === void 0 ? {} : _f, _g = _e.size, size = _g === void 0 ? 1 : _g, majorBold = _e.majorBold;
|
|
130
|
+
var showMajorBold = majorBold !== false && !(0, lodash_es_1.isNil)(majorBold);
|
|
131
|
+
var advanced = (0, gridConfig_1.mergeMajorBoldConfig)(majorBold).config;
|
|
63
132
|
var SCALE_X = transformModel.SCALE_X, SKEW_Y = transformModel.SKEW_Y, SKEW_X = transformModel.SKEW_X, SCALE_Y = transformModel.SCALE_Y, TRANSLATE_X = transformModel.TRANSLATE_X, TRANSLATE_Y = transformModel.TRANSLATE_Y;
|
|
64
133
|
var matrixString = [
|
|
65
134
|
SCALE_X,
|
|
@@ -70,10 +139,12 @@ var Grid = /** @class */ (function (_super) {
|
|
|
70
139
|
TRANSLATE_Y,
|
|
71
140
|
].join(',');
|
|
72
141
|
var transform = "matrix(".concat(matrixString, ")");
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
142
|
+
var radius = Math.min(Math.max(2, (_a = config.thickness) !== null && _a !== void 0 ? _a : 1), size / 4);
|
|
143
|
+
var opacity = showMajorBold ? advanced.opacity : 1;
|
|
144
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "lf-grid", children: (0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", version: "1.1", width: "100%", height: "100%", children: [(0, jsx_runtime_1.jsxs)("defs", { children: [(0, jsx_runtime_1.jsxs)("pattern", { id: this.id, patternUnits: "userSpaceOnUse", patternTransform: transform, x: "0", y: "0", width: size, height: size, children: [type === 'dot' && this.renderDot(), type === 'mesh' && this.renderMesh()] }), type === 'dot' && advanced.boldIndices.length ? ((0, jsx_runtime_1.jsx)("pattern", { id: "".concat(this.id, "-dot-major"), patternUnits: "userSpaceOnUse", patternTransform: transform, x: "0", y: "0", width: size * this.getPeriod(advanced), height: size * this.getPeriod(advanced), children: (0, jsx_runtime_1.jsxs)("g", { fill: (_c = (_b = this.gridOptions.config) === null || _b === void 0 ? void 0 : _b.color) !== null && _c !== void 0 ? _c : '#D7DEEB', opacity: this.gridOptions.visible ? opacity : 0, children: [(0, jsx_runtime_1.jsx)("circle", { cx: 0, cy: 0, r: (radius * 1.5) / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: size * this.getPeriod(advanced), cy: 0, r: (radius * 1.5) / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: 0, cy: size * this.getPeriod(advanced), r: (radius * 1.5) / 2 }), (0, jsx_runtime_1.jsx)("circle", { cx: size * this.getPeriod(advanced), cy: size * this.getPeriod(advanced), r: (radius * 1.5) / 2 })] }) })) : null, type === 'mesh' && advanced.boldIndices.length ? ((0, jsx_runtime_1.jsx)("pattern", { id: "".concat(this.id, "-major"), patternUnits: "userSpaceOnUse", patternTransform: transform, x: "0", y: "0", width: size * this.getPeriod(advanced), height: size * this.getPeriod(advanced), children: advanced.boldIndices.map(function (i) {
|
|
145
|
+
var _a, _b, _c, _d, _e, _f;
|
|
146
|
+
return ((0, jsx_runtime_1.jsxs)("g", { children: [(0, jsx_runtime_1.jsx)("path", { d: "M ".concat(size * i, " 0 V ").concat(size * _this.getPeriod(advanced)), stroke: (_b = (_a = _this.gridOptions.config) === null || _a === void 0 ? void 0 : _a.color) !== null && _b !== void 0 ? _b : '#D7DEEB', strokeWidth: _this.getBoldStrokeWidth(advanced, size, ((_c = _this.gridOptions.config) !== null && _c !== void 0 ? _c : {}).thickness, _this.getPeriod(advanced)), opacity: _this.gridOptions.visible ? opacity : 0, fill: "transparent" }), (0, jsx_runtime_1.jsx)("path", { d: "M 0 ".concat(size * i, " H ").concat(size * _this.getPeriod(advanced)), stroke: (_e = (_d = _this.gridOptions.config) === null || _d === void 0 ? void 0 : _d.color) !== null && _e !== void 0 ? _e : '#D7DEEB', strokeWidth: _this.getBoldStrokeWidth(advanced, size, ((_f = _this.gridOptions.config) !== null && _f !== void 0 ? _f : {}).thickness, _this.getPeriod(advanced)), opacity: _this.gridOptions.visible ? opacity : 0, fill: "transparent" })] }));
|
|
147
|
+
}) })) : null] }), (0, jsx_runtime_1.jsx)("rect", { width: "100%", height: "100%", fill: "url(#".concat(this.id, ")") }), type === 'dot' && showMajorBold && advanced.boldIndices.length ? ((0, jsx_runtime_1.jsx)("rect", { width: "100%", height: "100%", fill: "url(#".concat(this.id, "-dot-major)") })) : null, type === 'mesh' && showMajorBold && advanced.boldIndices.length ? ((0, jsx_runtime_1.jsx)("rect", { width: "100%", height: "100%", fill: "url(#".concat(this.id, "-major)") })) : null] }) }));
|
|
77
148
|
};
|
|
78
149
|
Grid = __decorate([
|
|
79
150
|
__1.observer
|
|
@@ -82,17 +153,8 @@ var Grid = /** @class */ (function (_super) {
|
|
|
82
153
|
}(compat_1.Component));
|
|
83
154
|
exports.Grid = Grid;
|
|
84
155
|
(function (Grid) {
|
|
85
|
-
Grid.defaultProps = {
|
|
86
|
-
size: constant_1.DEFAULT_GRID_SIZE,
|
|
87
|
-
visible: true,
|
|
88
|
-
type: 'dot',
|
|
89
|
-
config: {
|
|
90
|
-
color: '#ababab',
|
|
91
|
-
thickness: 1,
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
156
|
function getGridOptions(options) {
|
|
95
|
-
var defaultOptions = (0, lodash_es_1.cloneDeep)(
|
|
157
|
+
var defaultOptions = (0, lodash_es_1.cloneDeep)(constant_1.defaultGrid);
|
|
96
158
|
if (typeof options === 'number') {
|
|
97
159
|
return (0, lodash_es_1.assign)(defaultOptions, { size: options });
|
|
98
160
|
}
|
|
@@ -44,6 +44,12 @@ var OutlineOverlay = /** @class */ (function (_super) {
|
|
|
44
44
|
function OutlineOverlay() {
|
|
45
45
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
46
46
|
}
|
|
47
|
+
// 通用渲染函数:根据点集合与样式计算包围盒并返回矩形轮廓
|
|
48
|
+
OutlineOverlay.prototype.renderRectOutline = function (pointsList, style, className, defaultOffsets) {
|
|
49
|
+
var _a = (style || {}), _b = _a.widthOffset, widthOffset = _b === void 0 ? defaultOffsets.widthOffset : _b, _c = _a.heightOffset, heightOffset = _c === void 0 ? defaultOffsets.heightOffset : _c;
|
|
50
|
+
var _d = (0, util_1.getBBoxOfPoints)(pointsList, widthOffset, heightOffset), x = _d.x, y = _d.y, width = _d.width, height = _d.height;
|
|
51
|
+
return ((0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({ className: className, x: x, y: y, width: width, height: height }, style)));
|
|
52
|
+
};
|
|
47
53
|
// 节点outline
|
|
48
54
|
OutlineOverlay.prototype.getNodesOutline = function () {
|
|
49
55
|
var graphModel = this.props.graphModel;
|
|
@@ -54,7 +60,7 @@ var OutlineOverlay = /** @class */ (function (_super) {
|
|
|
54
60
|
var isHovered = element.isHovered, isSelected = element.isSelected, x = element.x, y = element.y, width = element.width, height = element.height;
|
|
55
61
|
if ((nodeSelectedOutline && isSelected) ||
|
|
56
62
|
(hoverOutline && isHovered)) {
|
|
57
|
-
var style_1 = element.getOutlineStyle();
|
|
63
|
+
var style_1 = element.getOutlineStyle() || {};
|
|
58
64
|
var attributes_1 = {};
|
|
59
65
|
Object.keys(style_1).forEach(function (key) {
|
|
60
66
|
if (key !== 'hover') {
|
|
@@ -65,11 +71,8 @@ var OutlineOverlay = /** @class */ (function (_super) {
|
|
|
65
71
|
var hoverStyle = style_1.hover;
|
|
66
72
|
attributes_1 = __assign(__assign({}, attributes_1), hoverStyle);
|
|
67
73
|
}
|
|
68
|
-
nodeOutline.push((0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({ transform: element.transform, className: "lf-outline-node", x: x, y: y,
|
|
69
|
-
|
|
70
|
-
// height: height + 10,
|
|
71
|
-
width: width + 10,
|
|
72
|
-
height: height + 10 }, attributes_1)));
|
|
74
|
+
nodeOutline.push((0, jsx_runtime_1.jsx)(shape_1.Rect, __assign({ transform: element.transform, className: "lf-outline-node", x: x, y: y, width: width + 4,
|
|
75
|
+
height: height + 4 }, attributes_1)));
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
});
|
|
@@ -99,30 +102,28 @@ var OutlineOverlay = /** @class */ (function (_super) {
|
|
|
99
102
|
// 直线outline
|
|
100
103
|
OutlineOverlay.prototype.getLineOutline = function (line) {
|
|
101
104
|
var startPoint = line.startPoint, endPoint = line.endPoint;
|
|
102
|
-
var x = (startPoint.x + endPoint.x) / 2;
|
|
103
|
-
var y = (startPoint.y + endPoint.y) / 2;
|
|
104
|
-
var width = Math.abs(startPoint.x - endPoint.x) + 10;
|
|
105
|
-
var height = Math.abs(startPoint.y - endPoint.y) + 10;
|
|
106
105
|
var style = line.getOutlineStyle();
|
|
107
|
-
return (
|
|
106
|
+
return this.renderRectOutline([startPoint, endPoint], style, 'lf-outline-edge', { widthOffset: 10, heightOffset: 10 });
|
|
108
107
|
};
|
|
109
108
|
// 折线outline
|
|
110
109
|
OutlineOverlay.prototype.getPolylineOutline = function (polyline) {
|
|
111
110
|
var points = polyline.points;
|
|
112
111
|
var pointsList = (0, util_1.points2PointsList)(points);
|
|
113
|
-
var bbox = (0, util_1.getBBoxOfPoints)(pointsList, 8);
|
|
114
|
-
var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;
|
|
115
112
|
var style = polyline.getOutlineStyle();
|
|
116
|
-
return (
|
|
113
|
+
return this.renderRectOutline(pointsList, style, 'lf-outline', {
|
|
114
|
+
widthOffset: 8,
|
|
115
|
+
heightOffset: 16,
|
|
116
|
+
});
|
|
117
117
|
};
|
|
118
118
|
// 曲线outline
|
|
119
119
|
OutlineOverlay.prototype.getBezierOutline = function (bezier) {
|
|
120
120
|
var path = bezier.path;
|
|
121
121
|
var pointsList = (0, util_1.getBezierPoints)(path);
|
|
122
|
-
var bbox = (0, util_1.getBBoxOfPoints)(pointsList, 8);
|
|
123
|
-
var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;
|
|
124
122
|
var style = bezier.getOutlineStyle();
|
|
125
|
-
return (
|
|
123
|
+
return this.renderRectOutline(pointsList, style, 'lf-outline', {
|
|
124
|
+
widthOffset: 8,
|
|
125
|
+
heightOffset: 16,
|
|
126
|
+
});
|
|
126
127
|
};
|
|
127
128
|
OutlineOverlay.prototype.render = function () {
|
|
128
129
|
return ((0, jsx_runtime_1.jsxs)("g", { className: "lf-outline", children: [this.getNodesOutline(), this.getEdgeOutline()] }));
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 网格高级 majorBold 配置。
|
|
3
|
+
*
|
|
4
|
+
* 示例(布尔值):
|
|
5
|
+
* - false:禁用特殊样式,opacity=1,无加粗,无虚线
|
|
6
|
+
* - true:启用默认值,opacity=0.75,每第 5 条线/点加粗/实线,
|
|
7
|
+
* 虚线图案通过 getDashArrayForSize(size) 计算
|
|
8
|
+
*
|
|
9
|
+
* 示例(对象):
|
|
10
|
+
* {
|
|
11
|
+
* opacity: 0.6,
|
|
12
|
+
* boldIndices: [4, 8],
|
|
13
|
+
* dashArrayConfig: { pattern: [4,2,4] },
|
|
14
|
+
* customBoldWidth: 2,
|
|
15
|
+
* }
|
|
16
|
+
*/
|
|
17
|
+
export type MajorBoldConfig = {
|
|
18
|
+
/** 默认网格透明度 (0-1) */
|
|
19
|
+
opacity: number;
|
|
20
|
+
/** 一个周期内需要加粗/实线的索引列表 */
|
|
21
|
+
boldIndices: number[];
|
|
22
|
+
/** 虚线样式的计算配置 */
|
|
23
|
+
dashArrayConfig: {
|
|
24
|
+
/** 固定的虚线模式(可选) */
|
|
25
|
+
pattern: number[];
|
|
26
|
+
};
|
|
27
|
+
/** mesh 网格的自定义加粗线宽(可选) */
|
|
28
|
+
customBoldWidth?: number;
|
|
29
|
+
};
|
|
30
|
+
export declare const defaultGridConfig: MajorBoldConfig;
|
|
31
|
+
/**
|
|
32
|
+
* 校验并规范化 GridConfig。
|
|
33
|
+
* - 将 opacity 限制在 [0,1] 范围
|
|
34
|
+
* - boldIndices 过滤为正整数并去重
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateGridConfig(cfg: MajorBoldConfig): MajorBoldConfig;
|
|
37
|
+
/**
|
|
38
|
+
* 合并用户行为配置与默认值。
|
|
39
|
+
* - false → 关闭模式:opacity=1,bold=[],关闭虚线
|
|
40
|
+
* - true → 默认模式:采用 defaultGridConfig
|
|
41
|
+
* - object → 自定义模式:校验后使用用户配置
|
|
42
|
+
*/
|
|
43
|
+
export declare function mergeMajorBoldConfig(input?: boolean | MajorBoldConfig): {
|
|
44
|
+
mode: 'disabled' | 'default' | 'custom';
|
|
45
|
+
config: MajorBoldConfig;
|
|
46
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __values = (this && this.__values) || function(o) {
|
|
14
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
15
|
+
if (m) return m.call(o);
|
|
16
|
+
if (o && typeof o.length === "number") return {
|
|
17
|
+
next: function () {
|
|
18
|
+
if (o && i >= o.length) o = void 0;
|
|
19
|
+
return { value: o && o[i++], done: !o };
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.mergeMajorBoldConfig = exports.validateGridConfig = exports.defaultGridConfig = void 0;
|
|
26
|
+
exports.defaultGridConfig = {
|
|
27
|
+
opacity: 1,
|
|
28
|
+
boldIndices: [5],
|
|
29
|
+
dashArrayConfig: {
|
|
30
|
+
pattern: [2, 1],
|
|
31
|
+
},
|
|
32
|
+
customBoldWidth: 2,
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* 校验并规范化 GridConfig。
|
|
36
|
+
* - 将 opacity 限制在 [0,1] 范围
|
|
37
|
+
* - boldIndices 过滤为正整数并去重
|
|
38
|
+
*/
|
|
39
|
+
function validateGridConfig(cfg) {
|
|
40
|
+
var e_1, _a;
|
|
41
|
+
var _b, _c;
|
|
42
|
+
var opacity = Math.max(0, Math.min(1, (_b = cfg.opacity) !== null && _b !== void 0 ? _b : exports.defaultGridConfig.opacity));
|
|
43
|
+
var boldIndicesSet = new Set();
|
|
44
|
+
var boldRaw = Array.isArray(cfg.boldIndices)
|
|
45
|
+
? cfg.boldIndices
|
|
46
|
+
: exports.defaultGridConfig.boldIndices;
|
|
47
|
+
try {
|
|
48
|
+
for (var boldRaw_1 = __values(boldRaw), boldRaw_1_1 = boldRaw_1.next(); !boldRaw_1_1.done; boldRaw_1_1 = boldRaw_1.next()) {
|
|
49
|
+
var n = boldRaw_1_1.value;
|
|
50
|
+
if (typeof n === 'number' && Number.isFinite(n) && n > 0) {
|
|
51
|
+
boldIndicesSet.add(Math.floor(n));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
56
|
+
finally {
|
|
57
|
+
try {
|
|
58
|
+
if (boldRaw_1_1 && !boldRaw_1_1.done && (_a = boldRaw_1.return)) _a.call(boldRaw_1);
|
|
59
|
+
}
|
|
60
|
+
finally { if (e_1) throw e_1.error; }
|
|
61
|
+
}
|
|
62
|
+
var boldIndices = Array.from(boldIndicesSet);
|
|
63
|
+
var pattern = Array.isArray((_c = cfg.dashArrayConfig) === null || _c === void 0 ? void 0 : _c.pattern)
|
|
64
|
+
? cfg.dashArrayConfig.pattern
|
|
65
|
+
: exports.defaultGridConfig.dashArrayConfig.pattern;
|
|
66
|
+
var dashArrayConfig = {
|
|
67
|
+
pattern: pattern,
|
|
68
|
+
};
|
|
69
|
+
var customBoldWidth = cfg.customBoldWidth;
|
|
70
|
+
return {
|
|
71
|
+
opacity: opacity,
|
|
72
|
+
boldIndices: boldIndices.length
|
|
73
|
+
? boldIndices
|
|
74
|
+
: exports.defaultGridConfig.boldIndices,
|
|
75
|
+
dashArrayConfig: dashArrayConfig,
|
|
76
|
+
customBoldWidth: customBoldWidth,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
exports.validateGridConfig = validateGridConfig;
|
|
80
|
+
/**
|
|
81
|
+
* 合并用户行为配置与默认值。
|
|
82
|
+
* - false → 关闭模式:opacity=1,bold=[],关闭虚线
|
|
83
|
+
* - true → 默认模式:采用 defaultGridConfig
|
|
84
|
+
* - object → 自定义模式:校验后使用用户配置
|
|
85
|
+
*/
|
|
86
|
+
function mergeMajorBoldConfig(input) {
|
|
87
|
+
if (input === false) {
|
|
88
|
+
return {
|
|
89
|
+
mode: 'disabled',
|
|
90
|
+
config: {
|
|
91
|
+
opacity: 1,
|
|
92
|
+
boldIndices: [],
|
|
93
|
+
dashArrayConfig: {
|
|
94
|
+
pattern: [],
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (input === true || input == null) {
|
|
100
|
+
return { mode: 'default', config: __assign({}, exports.defaultGridConfig) };
|
|
101
|
+
}
|
|
102
|
+
return { mode: 'custom', config: validateGridConfig(input) };
|
|
103
|
+
}
|
|
104
|
+
exports.mergeMajorBoldConfig = mergeMajorBoldConfig;
|
|
@@ -7,12 +7,5 @@ export type IPolygonProps = {
|
|
|
7
7
|
className?: string;
|
|
8
8
|
radius?: number;
|
|
9
9
|
};
|
|
10
|
-
/**
|
|
11
|
-
* 生成带圆角的多边形路径
|
|
12
|
-
* @param points 多边形顶点坐标数组
|
|
13
|
-
* @param radius 圆角半径
|
|
14
|
-
* @returns SVG 路径字符串
|
|
15
|
-
*/
|
|
16
|
-
export declare function createRoundedPolygonPath(points: any, radius: any): string;
|
|
17
10
|
export declare function Polygon(props: IPolygonProps): h.JSX.Element;
|
|
18
11
|
export default Polygon;
|
|
@@ -27,50 +27,10 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
27
27
|
return ar;
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.Polygon =
|
|
30
|
+
exports.Polygon = void 0;
|
|
31
31
|
var jsx_runtime_1 = require("preact/jsx-runtime");
|
|
32
32
|
var lodash_es_1 = require("lodash-es");
|
|
33
|
-
|
|
34
|
-
* 生成带圆角的多边形路径
|
|
35
|
-
* @param points 多边形顶点坐标数组
|
|
36
|
-
* @param radius 圆角半径
|
|
37
|
-
* @returns SVG 路径字符串
|
|
38
|
-
*/
|
|
39
|
-
function createRoundedPolygonPath(points, radius) {
|
|
40
|
-
var pointList = points.map(function (point) { return ({ x: point[0], y: point[1] }); });
|
|
41
|
-
var len = pointList.length;
|
|
42
|
-
if (len < 3)
|
|
43
|
-
return '';
|
|
44
|
-
var r = Math.abs(radius);
|
|
45
|
-
var path = '';
|
|
46
|
-
for (var i = 0; i < len; i++) {
|
|
47
|
-
var prev = pointList[(i - 1 + len) % len];
|
|
48
|
-
var curr = pointList[i];
|
|
49
|
-
var next = pointList[(i + 1) % len];
|
|
50
|
-
// 向量
|
|
51
|
-
var v1 = { x: curr.x - prev.x, y: curr.y - prev.y };
|
|
52
|
-
var v2 = { x: next.x - curr.x, y: next.y - curr.y };
|
|
53
|
-
// 单位向量
|
|
54
|
-
var len1 = Math.hypot(v1.x, v1.y);
|
|
55
|
-
var len2 = Math.hypot(v2.x, v2.y);
|
|
56
|
-
var u1 = { x: v1.x / len1, y: v1.y / len1 };
|
|
57
|
-
var u2 = { x: v2.x / len2, y: v2.y / len2 };
|
|
58
|
-
// 起点 = curr - u1 * r,终点 = curr + u2 * r
|
|
59
|
-
var start = { x: curr.x - u1.x * r, y: curr.y - u1.y * r };
|
|
60
|
-
var end = { x: curr.x + u2.x * r, y: curr.y + u2.y * r };
|
|
61
|
-
if (i === 0) {
|
|
62
|
-
path += "M ".concat(start.x, " ").concat(start.y, " ");
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
path += "L ".concat(start.x, " ").concat(start.y, " ");
|
|
66
|
-
}
|
|
67
|
-
// Q 控制点是当前拐角点
|
|
68
|
-
path += "Q ".concat(curr.x, " ").concat(curr.y, " ").concat(end.x, " ").concat(end.y, " ");
|
|
69
|
-
}
|
|
70
|
-
path += 'Z';
|
|
71
|
-
return path;
|
|
72
|
-
}
|
|
73
|
-
exports.createRoundedPolygonPath = createRoundedPolygonPath;
|
|
33
|
+
var geometry_1 = require("../../util/geometry");
|
|
74
34
|
function Polygon(props) {
|
|
75
35
|
var _a = props.points, points = _a === void 0 ? [] : _a, className = props.className, radius = props.radius;
|
|
76
36
|
var attrs = {
|
|
@@ -88,14 +48,22 @@ function Polygon(props) {
|
|
|
88
48
|
}
|
|
89
49
|
});
|
|
90
50
|
if (className) {
|
|
91
|
-
attrs.
|
|
51
|
+
attrs.className = "lf-basic-shape ".concat(className);
|
|
92
52
|
}
|
|
93
53
|
else {
|
|
94
54
|
attrs.className = 'lf-basic-shape';
|
|
95
55
|
}
|
|
96
56
|
if (radius) {
|
|
97
|
-
var
|
|
98
|
-
|
|
57
|
+
var pointList = points.map(function (point) { return ({ x: point[0], y: point[1] }); });
|
|
58
|
+
var rounded = (0, geometry_1.generateRoundedCorners)(pointList, radius, true);
|
|
59
|
+
var d = rounded.length
|
|
60
|
+
? "M ".concat(rounded[0].x, " ").concat(rounded[0].y, " ").concat(rounded
|
|
61
|
+
.slice(1)
|
|
62
|
+
.map(function (p) { return "L ".concat(p.x, " ").concat(p.y); })
|
|
63
|
+
.join(' '), " Z")
|
|
64
|
+
: '';
|
|
65
|
+
attrs.d = d;
|
|
66
|
+
delete attrs.points;
|
|
99
67
|
return (0, jsx_runtime_1.jsx)("path", __assign({}, attrs));
|
|
100
68
|
}
|
|
101
69
|
else {
|