@logicflow/core 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.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 +6 -1
- 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 {
|