@logicflow/extension 2.0.0-beta.5 → 2.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/.turbo/turbo-build.log +750 -34
  2. package/dist/index.css +63 -0
  3. package/dist/index.min.js +32 -2
  4. package/es/NodeResize/control/Control.js +3 -2
  5. package/es/NodeResize/control/Control.js.map +1 -1
  6. package/es/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
  7. package/es/components/mini-map/index.js +2 -2
  8. package/es/components/mini-map/index.js.map +1 -1
  9. package/es/components/selection-select/index.js.map +1 -1
  10. package/es/index.css +63 -0
  11. package/es/index.d.ts +1 -0
  12. package/es/index.js +1 -0
  13. package/es/index.js.map +1 -1
  14. package/es/materials/group/GroupNode.d.ts +6 -6
  15. package/es/materials/group/GroupNode.js +7 -6
  16. package/es/materials/group/GroupNode.js.map +1 -1
  17. package/es/materials/group/index.js +20 -25
  18. package/es/materials/group/index.js.map +1 -1
  19. package/es/style/index.css +63 -0
  20. package/es/style/index.less +73 -0
  21. package/es/style/raw.d.ts +1 -1
  22. package/es/style/raw.js +1 -1
  23. package/es/style/raw.js.map +1 -1
  24. package/es/tools/flow-path/index.js +0 -1
  25. package/es/tools/flow-path/index.js.map +1 -1
  26. package/es/tools/label/Label.d.ts +30 -0
  27. package/es/tools/label/Label.js +241 -0
  28. package/es/tools/label/Label.js.map +1 -0
  29. package/es/tools/label/LabelModel.d.ts +26 -0
  30. package/es/tools/label/LabelModel.js +86 -0
  31. package/es/tools/label/LabelModel.js.map +1 -0
  32. package/es/tools/label/LabelOverlay.d.ts +28 -0
  33. package/es/tools/label/LabelOverlay.js +161 -0
  34. package/es/tools/label/LabelOverlay.js.map +1 -0
  35. package/es/tools/label/algorithm.d.ts +16 -0
  36. package/es/tools/label/algorithm.js +27 -0
  37. package/es/tools/label/algorithm.js.map +1 -0
  38. package/es/tools/label/index.d.ts +59 -0
  39. package/es/tools/label/index.js +292 -0
  40. package/es/tools/label/index.js.map +1 -0
  41. package/es/tools/label/mediumEditor.d.ts +16 -0
  42. package/es/tools/label/mediumEditor.js +91 -0
  43. package/es/tools/label/mediumEditor.js.map +1 -0
  44. package/es/tools/label/utils.d.ts +64 -0
  45. package/es/tools/label/utils.js +336 -0
  46. package/es/tools/label/utils.js.map +1 -0
  47. package/es/tools/snapshot/index.js +0 -2
  48. package/es/tools/snapshot/index.js.map +1 -1
  49. package/lib/NodeResize/control/Control.js +3 -2
  50. package/lib/NodeResize/control/Control.js.map +1 -1
  51. package/lib/bpmn-elements/presets/Pool/Pool.d.ts +21 -1
  52. package/lib/components/mini-map/index.js +2 -2
  53. package/lib/components/mini-map/index.js.map +1 -1
  54. package/lib/components/selection-select/index.js.map +1 -1
  55. package/lib/index.css +63 -0
  56. package/lib/index.d.ts +1 -0
  57. package/lib/index.js +1 -0
  58. package/lib/index.js.map +1 -1
  59. package/lib/materials/group/GroupNode.d.ts +6 -6
  60. package/lib/materials/group/GroupNode.js +7 -6
  61. package/lib/materials/group/GroupNode.js.map +1 -1
  62. package/lib/materials/group/index.js +19 -24
  63. package/lib/materials/group/index.js.map +1 -1
  64. package/lib/style/index.css +63 -0
  65. package/lib/style/index.less +73 -0
  66. package/lib/style/raw.d.ts +1 -1
  67. package/lib/style/raw.js +1 -1
  68. package/lib/style/raw.js.map +1 -1
  69. package/lib/tools/flow-path/index.js +0 -1
  70. package/lib/tools/flow-path/index.js.map +1 -1
  71. package/lib/tools/label/Label.d.ts +30 -0
  72. package/lib/tools/label/Label.js +247 -0
  73. package/lib/tools/label/Label.js.map +1 -0
  74. package/lib/tools/label/LabelModel.d.ts +26 -0
  75. package/lib/tools/label/LabelModel.js +89 -0
  76. package/lib/tools/label/LabelModel.js.map +1 -0
  77. package/lib/tools/label/LabelOverlay.d.ts +28 -0
  78. package/lib/tools/label/LabelOverlay.js +167 -0
  79. package/lib/tools/label/LabelOverlay.js.map +1 -0
  80. package/lib/tools/label/algorithm.d.ts +16 -0
  81. package/lib/tools/label/algorithm.js +32 -0
  82. package/lib/tools/label/algorithm.js.map +1 -0
  83. package/lib/tools/label/index.d.ts +59 -0
  84. package/lib/tools/label/index.js +298 -0
  85. package/lib/tools/label/index.js.map +1 -0
  86. package/lib/tools/label/mediumEditor.d.ts +16 -0
  87. package/lib/tools/label/mediumEditor.js +97 -0
  88. package/lib/tools/label/mediumEditor.js.map +1 -0
  89. package/lib/tools/label/utils.d.ts +64 -0
  90. package/lib/tools/label/utils.js +349 -0
  91. package/lib/tools/label/utils.js.map +1 -0
  92. package/lib/tools/snapshot/index.js +0 -2
  93. package/lib/tools/snapshot/index.js.map +1 -1
  94. package/package.json +9 -9
  95. package/src/NodeResize/control/Control.tsx +3 -2
  96. package/src/components/mini-map/index.ts +2 -2
  97. package/src/components/selection-select/index.ts +5 -1
  98. package/src/index.ts +1 -0
  99. package/src/materials/group/GroupNode.ts +11 -8
  100. package/src/materials/group/index.ts +33 -38
  101. package/src/style/index.less +73 -0
  102. package/src/style/raw.ts +64 -1
  103. package/src/tools/flow-path/index.ts +0 -1
  104. package/src/tools/label/Label.tsx +297 -0
  105. package/src/tools/label/LabelModel.ts +82 -0
  106. package/src/tools/label/LabelOverlay.tsx +159 -0
  107. package/src/tools/label/algorithm.ts +42 -0
  108. package/src/tools/label/index.ts +401 -0
  109. package/src/tools/label/mediumEditor.ts +93 -0
  110. package/src/tools/label/utils.ts +395 -0
  111. package/src/tools/snapshot/README.md +27 -16
  112. package/src/tools/snapshot/index.ts +0 -2
@@ -0,0 +1,26 @@
1
+ import LogicFlow, { BaseEdgeModel, BaseNodeModel, GraphModel, h } from '@logicflow/core';
2
+ import LabelData = LogicFlow.LabelData;
3
+ import LabelConfig = LogicFlow.LabelConfig;
4
+ import GraphElement = LogicFlow.GraphElement;
5
+ export declare class LabelModel {
6
+ id: string;
7
+ type: string;
8
+ x: number;
9
+ y: number;
10
+ content: string;
11
+ value: string;
12
+ rotate?: number;
13
+ style: h.JSX.CSSProperties;
14
+ zIndex?: number;
15
+ vertical: boolean;
16
+ editable: boolean;
17
+ draggable: boolean;
18
+ labelWidth?: number;
19
+ textOverflowMode: 'ellipsis' | 'wrap' | 'clip' | 'nowrap' | 'default';
20
+ element: BaseNodeModel | BaseEdgeModel;
21
+ graphModel: GraphModel;
22
+ constructor(config: LabelConfig, element: GraphElement, graphModel: GraphModel);
23
+ initLabelData(config: LabelConfig): void;
24
+ getData(): LabelData;
25
+ }
26
+ export default LabelModel;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LabelModel = void 0;
10
+ var core_1 = require("@logicflow/core");
11
+ var lodash_es_1 = require("lodash-es");
12
+ // export type ILabelConfig = {}
13
+ var createUuid = core_1.LogicFlowUtil.createUuid;
14
+ var LabelModel = /** @class */ (function () {
15
+ function LabelModel(config, element, graphModel) {
16
+ var _a;
17
+ this.type = 'label'; // 目前写死,后续可以根据业务需求进行扩展
18
+ this.content = '';
19
+ this.value = '';
20
+ this.style = {};
21
+ this.vertical = false; // 文字是否垂直显示
22
+ this.editable = true; // label 是否可编辑
23
+ this.draggable = true; // label 是否可拖拽
24
+ this.textOverflowMode = 'default'; // Label 节点的文本溢出模式
25
+ this.element = element;
26
+ this.graphModel = graphModel;
27
+ this.id = (_a = config.id) !== null && _a !== void 0 ? _a : createUuid();
28
+ this.initLabelData(config);
29
+ }
30
+ LabelModel.prototype.initLabelData = function (config) {
31
+ (0, lodash_es_1.assign)(this, config);
32
+ };
33
+ LabelModel.prototype.getData = function () {
34
+ return {
35
+ id: this.id,
36
+ x: this.x,
37
+ y: this.y,
38
+ content: this.content,
39
+ value: this.value,
40
+ rotate: this.rotate,
41
+ style: (0, core_1.toJS)(this.style),
42
+ draggable: this.draggable,
43
+ editable: this.editable,
44
+ labelWidth: this.labelWidth,
45
+ textOverflowMode: this.textOverflowMode,
46
+ vertical: this.vertical,
47
+ };
48
+ };
49
+ __decorate([
50
+ core_1.observable
51
+ ], LabelModel.prototype, "x", void 0);
52
+ __decorate([
53
+ core_1.observable
54
+ ], LabelModel.prototype, "y", void 0);
55
+ __decorate([
56
+ core_1.observable
57
+ ], LabelModel.prototype, "content", void 0);
58
+ __decorate([
59
+ core_1.observable
60
+ ], LabelModel.prototype, "value", void 0);
61
+ __decorate([
62
+ core_1.observable
63
+ ], LabelModel.prototype, "rotate", void 0);
64
+ __decorate([
65
+ core_1.observable
66
+ ], LabelModel.prototype, "style", void 0);
67
+ __decorate([
68
+ core_1.observable
69
+ ], LabelModel.prototype, "zIndex", void 0);
70
+ __decorate([
71
+ core_1.observable
72
+ ], LabelModel.prototype, "vertical", void 0);
73
+ __decorate([
74
+ core_1.observable
75
+ ], LabelModel.prototype, "editable", void 0);
76
+ __decorate([
77
+ core_1.observable
78
+ ], LabelModel.prototype, "draggable", void 0);
79
+ __decorate([
80
+ core_1.observable
81
+ ], LabelModel.prototype, "labelWidth", void 0);
82
+ __decorate([
83
+ core_1.observable
84
+ ], LabelModel.prototype, "textOverflowMode", void 0);
85
+ return LabelModel;
86
+ }());
87
+ exports.LabelModel = LabelModel;
88
+ exports.default = LabelModel;
89
+ //# sourceMappingURL=LabelModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelModel.js","sourceRoot":"","sources":["../../../src/tools/label/LabelModel.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wCAQwB;AACxB,uCAAkC;AAMlC,gCAAgC;AACxB,IAAA,UAAU,GAAK,oBAAa,WAAlB,CAAkB;AAEpC;IA2BE,oBACE,MAAmB,EACnB,OAAqB,EACrB,UAAsB;;QA5BxB,SAAI,GAAW,OAAO,CAAA,CAAC,sBAAsB;QAIjC,YAAO,GAAW,EAAE,CAAA;QACpB,UAAK,GAAW,EAAE,CAAA;QAElB,UAAK,GAAwB,EAAE,CAAA;QAG/B,aAAQ,GAAY,KAAK,CAAA,CAAC,WAAW;QACrC,aAAQ,GAAY,IAAI,CAAA,CAAC,cAAc;QACvC,cAAS,GAAY,IAAI,CAAA,CAAC,cAAc;QAExC,qBAAgB,GAKZ,SAAS,CAAA,CAAC,kBAAkB;QAW1C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,EAAE,GAAG,MAAA,MAAM,CAAC,EAAE,mCAAI,UAAU,EAAE,CAAA;QAEnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;IAED,kCAAa,GAAb,UAAc,MAAmB;QAC/B,IAAA,kBAAM,EAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACtB,CAAC;IAED,4BAAO,GAAP;QACE,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAA,WAAI,EAAC,IAAI,CAAC,KAAK,CAAC;YAEvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YAEvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAA;IACH,CAAC;IAxDW;QAAX,iBAAU;yCAAW;IACV;QAAX,iBAAU;yCAAW;IACV;QAAX,iBAAU;+CAAqB;IACpB;QAAX,iBAAU;6CAAmB;IAClB;QAAX,iBAAU;8CAAgB;IACf;QAAX,iBAAU;6CAAgC;IAE/B;QAAX,iBAAU;8CAAgB;IACf;QAAX,iBAAU;gDAA0B;IACzB;QAAX,iBAAU;gDAAyB;IACxB;QAAX,iBAAU;iDAA0B;IACzB;QAAX,iBAAU;kDAAoB;IACnB;QAAX,iBAAU;wDAKc;IAwC3B,iBAAC;CAAA,AA7DD,IA6DC;AA7DY,gCAAU;AA+DvB,kBAAe,UAAU,CAAA"}
@@ -0,0 +1,28 @@
1
+ import LogicFlow, { Component, GraphModel, h } from '@logicflow/core';
2
+ import type { IToolProps } from '@logicflow/core';
3
+ import LabelModel from './LabelModel';
4
+ import { MediumEditor } from './mediumEditor';
5
+ import LabelConfig = LogicFlow.LabelConfig;
6
+ export type LabelConfigType = string | LabelConfig | LabelConfig[];
7
+ export interface ILabelOverlayState {
8
+ tick: number;
9
+ }
10
+ export declare class LabelOverlay extends Component<IToolProps, ILabelOverlayState> {
11
+ static toolName: string;
12
+ lf: LogicFlow;
13
+ editor?: MediumEditor;
14
+ graphModel: GraphModel;
15
+ labelMap: Map<string, LabelModel>;
16
+ constructor(props: IToolProps);
17
+ componentDidMount(): void;
18
+ componentDidUpdate(): void;
19
+ componentWillUnmount(): void;
20
+ /**
21
+ * 获取当前画布上所有的 label
22
+ * 1. 第一步,先把当前所有的 text 转换为 label 进行展示
23
+ * 2. 数据同步,text 编辑后,同步更新 label,并重新渲染
24
+ */
25
+ getLabels(): h.JSX.Element[] | null;
26
+ render(): h.JSX.Element;
27
+ }
28
+ export default LabelOverlay;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
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
+ };
48
+ var __importDefault = (this && this.__importDefault) || function (mod) {
49
+ return (mod && mod.__esModule) ? mod : { "default": mod };
50
+ };
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.LabelOverlay = void 0;
53
+ var jsx_runtime_1 = require("preact/jsx-runtime");
54
+ var core_1 = require("@logicflow/core");
55
+ var lodash_es_1 = require("lodash-es");
56
+ var Label_1 = __importDefault(require("./Label"));
57
+ var LabelModel_1 = __importDefault(require("./LabelModel"));
58
+ var mediumEditor_1 = require("./mediumEditor");
59
+ // const { createUuid } = LogicFlowUtil
60
+ // DONE: 解决问题,如果 LabelOverlay 设置为 Observer,拖拽 Label 时会导致 LabelOverlay 组件重新渲染,不知道为何
61
+ // 目前解决了。流程是 拖动 -> 更新 label 的数据信息到 element model -> 重新渲染 LabelOverlay
62
+ // 这种目前存在的问题,会全量重新渲染,是否会影响性能 ❓❓❓
63
+ // 另一种解决方案是,在此组件中监听一些事件,当这些事件触发时,再重新渲染 LabelOverlay
64
+ // 讨论一下
65
+ var LabelOverlay = /** @class */ (function (_super) {
66
+ __extends(LabelOverlay, _super);
67
+ function LabelOverlay(props) {
68
+ var _this = _super.call(this, props) || this;
69
+ _this.labelMap = new Map();
70
+ var lf = props.lf, graphModel = props.graphModel;
71
+ _this.lf = lf;
72
+ _this.graphModel = graphModel;
73
+ _this.state = { tick: 0 };
74
+ return _this;
75
+ }
76
+ LabelOverlay.prototype.componentDidMount = function () {
77
+ var _this = this;
78
+ var graphModel = this.props.graphModel;
79
+ // 1. 直接在此处初始化 RichTextEdit 工具
80
+ this.editor = new mediumEditor_1.MediumEditor('.lf-label-editor', (0, lodash_es_1.merge)(mediumEditor_1.defaultOptions, {
81
+ autoLink: true,
82
+ extensions: {
83
+ colorPicker: new mediumEditor_1.ColorPickerButton(),
84
+ },
85
+ }));
86
+ // TODO: 2. 在此处监听一些事件,当 node、edge 数据变化时,主动触发重新渲染,保证同步更新
87
+ // TODO: 3. 整理哪些事件应该触发 Label 的更新
88
+ // 不需要了,将当前组件设置成 @observer 后,graphModel 更新会自动触发更新
89
+ graphModel.eventCenter.on('text:update,node:mousemove,node:resize,node:rotate,node:drag,label:drop,node:drop', function () {
90
+ // this.setState({ tick: this.state.tick + 1 })
91
+ });
92
+ graphModel.eventCenter.on('node:properties-change,node:properties-delete', function () {
93
+ _this.setState({ tick: _this.state.tick + 1 });
94
+ });
95
+ };
96
+ LabelOverlay.prototype.componentDidUpdate = function () {
97
+ var _a;
98
+ // 在组件更新后,将新增的 label 元素添加到富文本编辑器中
99
+ if (this.editor && this.editor.elements.length > 0) {
100
+ this.editor.addElements('.lf-label-editor');
101
+ }
102
+ else {
103
+ // FIX: 如果初始化的数据中没有 properties._label,需要重新初始化富文本编辑器
104
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.destroy();
105
+ this.editor = new mediumEditor_1.MediumEditor('.lf-label-editor', (0, lodash_es_1.merge)(mediumEditor_1.defaultOptions, {
106
+ autoLink: true,
107
+ extensions: {
108
+ colorPicker: new mediumEditor_1.ColorPickerButton(),
109
+ },
110
+ }));
111
+ }
112
+ };
113
+ LabelOverlay.prototype.componentWillUnmount = function () {
114
+ var _a;
115
+ // 组件销毁时,同时将富文本编辑器注销
116
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.destroy();
117
+ };
118
+ /**
119
+ * 获取当前画布上所有的 label
120
+ * 1. 第一步,先把当前所有的 text 转换为 label 进行展示
121
+ * 2. 数据同步,text 编辑后,同步更新 label,并重新渲染
122
+ */
123
+ LabelOverlay.prototype.getLabels = function () {
124
+ var _this = this;
125
+ // 1. 通过 graphModel 获取当前画布上所有的 label 配置数据
126
+ var _a = this.props, extension = _a.lf.extension, graphModel = _a.graphModel;
127
+ var elements = __spreadArray(__spreadArray([], __read(graphModel.nodes), false), __read(graphModel.edges), false);
128
+ var curExtension = extension['Label'];
129
+ if (curExtension) {
130
+ var labels_1 = []; // 保存所有的 Label 元素
131
+ // TODO: 筛选出当前画布上,textMode 为 TextMode.LABEL 的元素(在支持元素级别的 textMode 时,需要做这个筛选)
132
+ // REMIND: 本期先只支持全局配置,所以判断全局的 textMode 即可
133
+ (0, lodash_es_1.forEach)(elements, function (element) {
134
+ var _a, _b;
135
+ var elementData = element.getData();
136
+ var labelConfig = (_b = (_a = elementData.properties) === null || _a === void 0 ? void 0 : _a._label) !== null && _b !== void 0 ? _b : [];
137
+ (0, lodash_es_1.forEach)(labelConfig, function (config) {
138
+ var labelMap = _this.labelMap;
139
+ // 查找 labelModel 实例,如果是实例化过的,直接复用;如果是新的,创建实例
140
+ // let label: LabelModel
141
+ // if (config.id && labelMap.has(config.id)) {
142
+ // label = labelMap.get(config.id)!
143
+ // } else {
144
+ // label = new LabelModel(config, element, graphModel)
145
+ // labelMap.set(label.id, label)
146
+ // }
147
+ var label = new LabelModel_1.default(config, element, graphModel);
148
+ labelMap.set(label.id, label);
149
+ labels_1.push((0, jsx_runtime_1.jsx)(Label_1.default, { label: label, element: element, graphModel: graphModel }, label.id));
150
+ });
151
+ });
152
+ return labels_1;
153
+ }
154
+ return null;
155
+ };
156
+ LabelOverlay.prototype.render = function () {
157
+ return ((0, jsx_runtime_1.jsx)("foreignObject", { id: "lf-label-overlay", class: "lf-label-overlay", children: this.getLabels() }));
158
+ };
159
+ LabelOverlay.toolName = 'label-edit-tool';
160
+ LabelOverlay = __decorate([
161
+ core_1.observer
162
+ ], LabelOverlay);
163
+ return LabelOverlay;
164
+ }(core_1.Component));
165
+ exports.LabelOverlay = LabelOverlay;
166
+ exports.default = LabelOverlay;
167
+ //# sourceMappingURL=LabelOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelOverlay.js","sourceRoot":"","sources":["../../../src/tools/label/LabelOverlay.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import LogicFlow from '@logicflow/core';
2
+ import Point = LogicFlow.Point;
3
+ /**
4
+ * 三次贝塞尔曲线公式
5
+ */
6
+ export declare const getPointOnBezier: (t: number, P0: Point, P1: Point, P2: Point, P3: Point) => {
7
+ x: number;
8
+ y: number;
9
+ };
10
+ /**
11
+ * 计算两个节点间的距离
12
+ * @param point1
13
+ * @param point2
14
+ * @param gridSize
15
+ */
16
+ export declare const calcTwoPointsDistance: (point1: Point, point2: Point, gridSize?: number) => number;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calcTwoPointsDistance = exports.getPointOnBezier = void 0;
4
+ /**
5
+ * 三次贝塞尔曲线公式
6
+ */
7
+ var getPointOnBezier = function (t, P0, P1, P2, P3) {
8
+ var x = Math.pow((1 - t), 3) * P0.x +
9
+ 3 * Math.pow((1 - t), 2) * t * P1.x +
10
+ 3 * (1 - t) * Math.pow(t, 2) * P2.x +
11
+ Math.pow(t, 3) * P3.x;
12
+ var y = Math.pow((1 - t), 3) * P0.y +
13
+ 3 * Math.pow((1 - t), 2) * t * P1.y +
14
+ 3 * (1 - t) * Math.pow(t, 2) * P2.y +
15
+ Math.pow(t, 3) * P3.y;
16
+ return { x: x, y: y };
17
+ };
18
+ exports.getPointOnBezier = getPointOnBezier;
19
+ /**
20
+ * 计算两个节点间的距离
21
+ * @param point1
22
+ * @param point2
23
+ * @param gridSize
24
+ */
25
+ var calcTwoPointsDistance = function (point1, point2, gridSize) {
26
+ if (gridSize === void 0) { gridSize = 1; }
27
+ var dx = (point1.x - point2.x) / gridSize;
28
+ var dy = (point1.y - point2.y) / gridSize;
29
+ return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
30
+ };
31
+ exports.calcTwoPointsDistance = calcTwoPointsDistance;
32
+ //# sourceMappingURL=algorithm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorithm.js","sourceRoot":"","sources":["../../../src/tools/label/algorithm.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACI,IAAM,gBAAgB,GAAG,UAC9B,CAAS,EACT,EAAS,EACT,EAAS,EACT,EAAS,EACT,EAAS;IAET,IAAM,CAAC,GACL,SAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC;QACnB,CAAC,GAAG,SAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAI,CAAC,CAAA,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAA,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAA,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC,CAAA;IACf,IAAM,CAAC,GACL,SAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC;QACnB,CAAC,GAAG,SAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAI,CAAC,CAAA,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAA,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC;QAC3B,SAAA,CAAC,EAAI,CAAC,CAAA,GAAG,EAAE,CAAC,CAAC,CAAA;IAEf,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AACvB,CAAC,CAAA;AAnBY,QAAA,gBAAgB,oBAmB5B;AAED;;;;;GAKG;AACI,IAAM,qBAAqB,GAAG,UACnC,MAAa,EACb,MAAa,EACb,QAAoB;IAApB,yBAAA,EAAA,YAAoB;IAEpB,IAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IAC3C,IAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAA,EAAE,EAAI,CAAC,CAAA,GAAG,SAAA,EAAE,EAAI,CAAC,CAAA,CAAC,CAAA;AACrC,CAAC,CAAA;AARY,QAAA,qBAAqB,yBAQjC"}
@@ -0,0 +1,59 @@
1
+ import LogicFlow, { TextMode } from '@logicflow/core';
2
+ import Position = LogicFlow.Position;
3
+ import Extension = LogicFlow.Extension;
4
+ export type ILabelOptions = {
5
+ isMultiple?: boolean;
6
+ maxCount?: number;
7
+ labelWidth?: number;
8
+ textOverflowMode?: 'ellipsis' | 'wrap' | 'clip' | 'nowrap' | 'default';
9
+ };
10
+ export declare class Label implements Extension {
11
+ static pluginName: string;
12
+ lf: LogicFlow;
13
+ options: ILabelOptions;
14
+ textOverflowMode: 'ellipsis' | 'wrap' | 'clip' | 'nowrap' | 'default';
15
+ isMultiple: boolean;
16
+ labelWidth?: number;
17
+ maxCount: number;
18
+ labelInitPositionMap: Map<string, Position>;
19
+ constructor({ lf, options }: {
20
+ lf: LogicFlow;
21
+ options: ILabelOptions;
22
+ });
23
+ /**
24
+ * 格式化元素的 Label 配置,后续初始化 Label 用统一的数据格式
25
+ * 主要是将 _label 类型 string | LabelConfig | LabelConfig[] 统一转换为 LabelConfig[]
26
+ * @param graphModel 当前图的 model
27
+ * @param element 当前元素 model
28
+ * @return LabelConfig[]
29
+ */
30
+ private formatConfig;
31
+ /**
32
+ * 根据初始化的数据,格式化 Label 的数据格式后,统一更新到元素的 properties._label 中,保证后续的渲染以这个数据格式进行
33
+ * @param graphModel
34
+ */
35
+ private setupLabels;
36
+ /**
37
+ * 给元素添加一个 label
38
+ * @param element
39
+ * @param position
40
+ */
41
+ private addLabel;
42
+ /**
43
+ * 移除元素的某个 label
44
+ * @private
45
+ */
46
+ private addEventListeners;
47
+ /**
48
+ * 重写元素的一些方法,以支持 Label 的拖拽、编辑等
49
+ * @param element
50
+ */
51
+ private rewriteInnerMethods;
52
+ /**
53
+ * 更新当前渲染使用的 Text or Label 模式
54
+ */
55
+ updateTextMode(textMode: TextMode): void;
56
+ render(): void;
57
+ destroy(): void;
58
+ }
59
+ export default Label;