@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,241 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __assign = (this && this.__assign) || function () {
17
+ __assign = Object.assign || function(t) {
18
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
19
+ s = arguments[i];
20
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
21
+ t[p] = s[p];
22
+ }
23
+ return t;
24
+ };
25
+ return __assign.apply(this, arguments);
26
+ };
27
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
28
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30
+ 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;
31
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
32
+ };
33
+ var __read = (this && this.__read) || function (o, n) {
34
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
35
+ if (!m) return o;
36
+ var i = m.call(o), r, ar = [], e;
37
+ try {
38
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
39
+ }
40
+ catch (error) { e = { error: error }; }
41
+ finally {
42
+ try {
43
+ if (r && !r.done && (m = i["return"])) m.call(i);
44
+ }
45
+ finally { if (e) throw e.error; }
46
+ }
47
+ return ar;
48
+ };
49
+ import { jsx as _jsx } from "preact/jsx-runtime";
50
+ import { Component, createRef, ElementState, observer, StepDrag, } from '@logicflow/core';
51
+ import classNames from 'classnames';
52
+ import { findIndex } from 'lodash-es';
53
+ var Label = /** @class */ (function (_super) {
54
+ __extends(Label, _super);
55
+ function Label(props) {
56
+ var _this = _super.call(this, props) || this;
57
+ _this.textRef = createRef();
58
+ _this.setHoverOn = function () {
59
+ var element = _this.props.element;
60
+ if (element.isDragging || _this.state.isHovered)
61
+ return; // 当节点或边在拖拽中时,不触发 hover 态
62
+ _this.setState({ isHovered: true });
63
+ element.setHovered(true);
64
+ };
65
+ _this.setHoverOff = function () {
66
+ var element = _this.props.element;
67
+ if (!_this.state.isHovered)
68
+ return;
69
+ _this.setState({ isHovered: false });
70
+ element.setHovered(false);
71
+ };
72
+ _this.handleMouseDown = function (e) {
73
+ var _a;
74
+ var _b = _this.props, label = _b.label, graphModel = _b.graphModel;
75
+ var nodeTextDraggable = graphModel.editConfigModel.nodeTextDraggable;
76
+ // 当 label 允许拖拽 且不处于拖拽状态时, StepDrag 开启拖拽
77
+ if (((_a = label.draggable) !== null && _a !== void 0 ? _a : nodeTextDraggable) && !_this.state.isDragging) {
78
+ _this.setState({ isDragging: true });
79
+ _this.stepDrag.handleMouseDown(e);
80
+ }
81
+ };
82
+ _this.handleDragging = function (_a) {
83
+ var deltaX = _a.deltaX, deltaY = _a.deltaY;
84
+ var _b = _this.props, label = _b.label, element = _b.element, graphModel = _b.graphModel;
85
+ // DONE: 添加缩放时拖拽的逻辑,对 deltaX 和 deltaY 进行按比例缩放
86
+ var transformModel = graphModel.transformModel;
87
+ var _c = __read(transformModel.fixDeltaXY(deltaX, deltaY), 2), curDeltaX = _c[0], curDeltaY = _c[1];
88
+ // DONE:更新 label 位置,触发 LABEL:DRAG 事件,并抛出相关的数据
89
+ var _label = element.properties._label;
90
+ var elementLabel = _label;
91
+ var idx = findIndex(elementLabel, function (cur) { return cur.id === label.id; });
92
+ var target = elementLabel[idx];
93
+ elementLabel[idx] = __assign(__assign({}, target), { x: target.x + curDeltaX, y: target.y + curDeltaY });
94
+ var targetElem = graphModel.getElement(element.id);
95
+ targetElem === null || targetElem === void 0 ? void 0 : targetElem.setProperty('_label', elementLabel);
96
+ graphModel.eventCenter.emit('label:drag', {
97
+ data: label.getData(),
98
+ model: label,
99
+ });
100
+ };
101
+ _this.handleDragEnd = function () {
102
+ _this.setState({ isDragging: false });
103
+ };
104
+ _this.handleDbClick = function (e) {
105
+ var _a = _this.props, label = _a.label, element = _a.element, graphModel = _a.graphModel;
106
+ graphModel.eventCenter.emit('label:dblclick', {
107
+ data: label.getData(),
108
+ e: e,
109
+ model: element,
110
+ });
111
+ if (!label.editable) {
112
+ element.setSelected(true);
113
+ return;
114
+ }
115
+ element.setSelected();
116
+ element.setElementState(ElementState.TEXT_EDIT);
117
+ _this.setState({ isEditing: true });
118
+ // DONE: 触发当前 label 的 focus 事件,设置内容可编辑,且在文本最后添加光标
119
+ if (_this.textRef.current) {
120
+ _this.textRef.current.contentEditable = 'true';
121
+ _this.textRef.current.focus();
122
+ var range = document.createRange();
123
+ var selection = window.getSelection();
124
+ range.selectNodeContents(_this.textRef.current);
125
+ range.collapse(false);
126
+ selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
127
+ selection === null || selection === void 0 ? void 0 : selection.addRange(range);
128
+ }
129
+ };
130
+ _this.handleBlur = function (e) {
131
+ var _a = _this.props, label = _a.label, element = _a.element, eventCenter = _a.graphModel.eventCenter;
132
+ // DONE: 触发 LABEL:BLUR 事件,并抛出相关的事件
133
+ eventCenter.emit('label:blur', {
134
+ e: e,
135
+ model: element,
136
+ data: label.getData(),
137
+ element: _this.textRef.current,
138
+ });
139
+ _this.setState({
140
+ isDragging: false,
141
+ isHovered: false,
142
+ });
143
+ };
144
+ // 重新计算 Label 大小
145
+ _this.reCalcLabelSize = function () { };
146
+ var label = props.label, _a = props.graphModel, gridSize = _a.gridSize, eventCenter = _a.eventCenter;
147
+ _this.stepDrag = new StepDrag({
148
+ onDragging: _this.handleDragging,
149
+ onDragEnd: _this.handleDragEnd,
150
+ step: gridSize,
151
+ eventType: 'LABEL',
152
+ model: label,
153
+ eventCenter: eventCenter,
154
+ });
155
+ _this.state = {
156
+ isEditing: false,
157
+ isHovered: false,
158
+ isDragging: false,
159
+ };
160
+ return _this;
161
+ }
162
+ // TODO:如何处理 Label zIndex 的问题, Label 永远会比节点层级高
163
+ // 当 Label 被元素遮盖时,隐藏它
164
+ Label.prototype.componentDidMount = function () {
165
+ var _this = this;
166
+ var _a = this.props, label = _a.label, element = _a.element, graphModel = _a.graphModel;
167
+ // 在点击元素、边或者画布 时,结束 Label 的编辑态
168
+ graphModel.eventCenter.on('blank:click,node:click,edge:click', function () {
169
+ var _a, _b, _c, _d;
170
+ // 如果当前 label 处于编辑态,则结束编辑态
171
+ if (_this.state.isEditing) {
172
+ _this.setState({ isEditing: false });
173
+ var value = (_b = (_a = _this.textRef.current) === null || _a === void 0 ? void 0 : _a.innerText) !== null && _b !== void 0 ? _b : '';
174
+ var content = (_d = (_c = _this.textRef.current) === null || _c === void 0 ? void 0 : _c.innerHTML) !== null && _d !== void 0 ? _d : '';
175
+ var _label = element.properties._label;
176
+ var elementLabel = _label;
177
+ var idx = findIndex(elementLabel, function (cur) { return cur.id === label.id; });
178
+ var target = elementLabel[idx];
179
+ elementLabel[idx] = __assign(__assign({}, target), { value: value, content: content });
180
+ var targetElem = graphModel.getElement(element.id);
181
+ targetElem === null || targetElem === void 0 ? void 0 : targetElem.setProperty('_label', elementLabel);
182
+ element.setElementState(ElementState.DEFAULT);
183
+ }
184
+ if (_this.textRef.current) {
185
+ _this.textRef.current.contentEditable = 'false';
186
+ }
187
+ });
188
+ // TODO: 节点拖拽结束后,更新 Label 的位置
189
+ // eventCenter.on('node:drag', () => {})
190
+ // eventCenter.on('node:drop', () => {})
191
+ // eventCenter.on('node:mousemove', () => {})
192
+ //
193
+ // eventCenter.on('node:properties-change,node:properties-delete', () => {})
194
+ };
195
+ Label.prototype.componentDidUpdate = function () {
196
+ // snapshot: any, // previousState: Readonly<ILabelState>, // previousProps: Readonly<ILabelProps>,
197
+ console.log('Label componentDidUpdate');
198
+ // console.log('previousProps', previousProps)
199
+ // console.log('previousState', previousState)
200
+ // console.log('snapshot', snapshot)
201
+ };
202
+ Label.prototype.componentWillUnmount = function () {
203
+ var graphModel = this.props.graphModel;
204
+ graphModel.eventCenter.off('blank:click,node:click,edge:click');
205
+ };
206
+ // TODO: 当某一个标签更新时,如何避免其它标签的更新
207
+ // shouldComponentUpdate or memo
208
+ Label.prototype.render = function () {
209
+ var _a;
210
+ var _b = this.props, label = _b.label, element = _b.element, graphModel = _b.graphModel;
211
+ var _c = this.state, isDragging = _c.isDragging, isHovered = _c.isHovered, isEditing = _c.isEditing;
212
+ var transformModel = graphModel.transformModel;
213
+ var transform = transformModel.getTransformStyle().transform;
214
+ var id = label.id, x = label.x, y = label.y, zIndex = label.zIndex, vertical = label.vertical, style = label.style, rotate = label.rotate, content = label.content, labelWidth = label.labelWidth, textOverflowMode = label.textOverflowMode;
215
+ var maxLabelWidth = labelWidth !== null && labelWidth !== void 0 ? labelWidth : (element.BaseType === 'node' ? element.width - 20 : 80);
216
+ var containerStyle = {
217
+ left: "".concat(x - maxLabelWidth / 2, "px"),
218
+ top: "".concat(y - 10, "px"),
219
+ width: "".concat(maxLabelWidth, "px"),
220
+ height: '20px',
221
+ zIndex: zIndex !== null && zIndex !== void 0 ? zIndex : 1,
222
+ transform: rotate
223
+ ? "".concat(transform, " rotate(").concat(rotate, "deg)")
224
+ : "".concat(transform, " rotate(").concat(vertical ? -0.25 : 0, "turn)"),
225
+ };
226
+ return (_jsx("div", { id: "element-container-".concat(id), className: classNames('lf-label-editor-container'), style: containerStyle, onMouseDown: this.handleMouseDown, onDblClick: this.handleDbClick, onBlur: this.handleBlur, onMouseEnter: this.setHoverOn, onMouseOver: this.setHoverOn, onMouseLeave: this.setHoverOff, children: _jsx("div", { ref: this.textRef, id: "editor-container-".concat(id), className: classNames('lf-label-editor', (_a = {
227
+ 'lf-label-editor-dragging': isDragging,
228
+ 'lf-label-editor-editing': isEditing,
229
+ 'lf-label-editor-hover': !isEditing && isHovered
230
+ },
231
+ _a["lf-label-editor-".concat(textOverflowMode)] = !isEditing,
232
+ _a)), style: __assign({ maxWidth: "".concat(maxLabelWidth, "px"), width: "".concat(maxLabelWidth, "px") }, style), dangerouslySetInnerHTML: { __html: content } }) }));
233
+ };
234
+ Label = __decorate([
235
+ observer
236
+ ], Label);
237
+ return Label;
238
+ }(Component));
239
+ export { Label };
240
+ export default Label;
241
+ //# sourceMappingURL=Label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../src/tools/label/Label.tsx"],"names":[],"mappings":"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"}
@@ -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,86 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LogicFlowUtil, observable, toJS, } from '@logicflow/core';
8
+ import { assign } from 'lodash-es';
9
+ // export type ILabelConfig = {}
10
+ var createUuid = LogicFlowUtil.createUuid;
11
+ var LabelModel = /** @class */ (function () {
12
+ function LabelModel(config, element, graphModel) {
13
+ var _a;
14
+ this.type = 'label'; // 目前写死,后续可以根据业务需求进行扩展
15
+ this.content = '';
16
+ this.value = '';
17
+ this.style = {};
18
+ this.vertical = false; // 文字是否垂直显示
19
+ this.editable = true; // label 是否可编辑
20
+ this.draggable = true; // label 是否可拖拽
21
+ this.textOverflowMode = 'default'; // Label 节点的文本溢出模式
22
+ this.element = element;
23
+ this.graphModel = graphModel;
24
+ this.id = (_a = config.id) !== null && _a !== void 0 ? _a : createUuid();
25
+ this.initLabelData(config);
26
+ }
27
+ LabelModel.prototype.initLabelData = function (config) {
28
+ assign(this, config);
29
+ };
30
+ LabelModel.prototype.getData = function () {
31
+ return {
32
+ id: this.id,
33
+ x: this.x,
34
+ y: this.y,
35
+ content: this.content,
36
+ value: this.value,
37
+ rotate: this.rotate,
38
+ style: toJS(this.style),
39
+ draggable: this.draggable,
40
+ editable: this.editable,
41
+ labelWidth: this.labelWidth,
42
+ textOverflowMode: this.textOverflowMode,
43
+ vertical: this.vertical,
44
+ };
45
+ };
46
+ __decorate([
47
+ observable
48
+ ], LabelModel.prototype, "x", void 0);
49
+ __decorate([
50
+ observable
51
+ ], LabelModel.prototype, "y", void 0);
52
+ __decorate([
53
+ observable
54
+ ], LabelModel.prototype, "content", void 0);
55
+ __decorate([
56
+ observable
57
+ ], LabelModel.prototype, "value", void 0);
58
+ __decorate([
59
+ observable
60
+ ], LabelModel.prototype, "rotate", void 0);
61
+ __decorate([
62
+ observable
63
+ ], LabelModel.prototype, "style", void 0);
64
+ __decorate([
65
+ observable
66
+ ], LabelModel.prototype, "zIndex", void 0);
67
+ __decorate([
68
+ observable
69
+ ], LabelModel.prototype, "vertical", void 0);
70
+ __decorate([
71
+ observable
72
+ ], LabelModel.prototype, "editable", void 0);
73
+ __decorate([
74
+ observable
75
+ ], LabelModel.prototype, "draggable", void 0);
76
+ __decorate([
77
+ observable
78
+ ], LabelModel.prototype, "labelWidth", void 0);
79
+ __decorate([
80
+ observable
81
+ ], LabelModel.prototype, "textOverflowMode", void 0);
82
+ return LabelModel;
83
+ }());
84
+ export { LabelModel };
85
+ export default LabelModel;
86
+ //# sourceMappingURL=LabelModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelModel.js","sourceRoot":"","sources":["../../../src/tools/label/LabelModel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAkB,EAIhB,aAAa,EAEb,UAAU,EACV,IAAI,GACL,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAMlC,gCAAgC;AACxB,IAAA,UAAU,GAAK,aAAa,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,MAAM,CAAC,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,IAAI,CAAC,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,UAAU;yCAAW;IACV;QAAX,UAAU;yCAAW;IACV;QAAX,UAAU;+CAAqB;IACpB;QAAX,UAAU;6CAAmB;IAClB;QAAX,UAAU;8CAAgB;IACf;QAAX,UAAU;6CAAgC;IAE/B;QAAX,UAAU;8CAAgB;IACf;QAAX,UAAU;gDAA0B;IACzB;QAAX,UAAU;gDAAyB;IACxB;QAAX,UAAU;iDAA0B;IACzB;QAAX,UAAU;kDAAoB;IACnB;QAAX,UAAU;wDAKc;IAwC3B,iBAAC;CAAA,AA7DD,IA6DC;SA7DY,UAAU;AA+DvB,eAAe,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,161 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
19
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
21
+ };
22
+ var __read = (this && this.__read) || function (o, n) {
23
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
24
+ if (!m) return o;
25
+ var i = m.call(o), r, ar = [], e;
26
+ try {
27
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
28
+ }
29
+ catch (error) { e = { error: error }; }
30
+ finally {
31
+ try {
32
+ if (r && !r.done && (m = i["return"])) m.call(i);
33
+ }
34
+ finally { if (e) throw e.error; }
35
+ }
36
+ return ar;
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ import { jsx as _jsx } from "preact/jsx-runtime";
48
+ import { Component, observer } from '@logicflow/core';
49
+ import { forEach, merge } from 'lodash-es';
50
+ import Label from './Label';
51
+ import LabelModel from './LabelModel';
52
+ import { MediumEditor, defaultOptions, ColorPickerButton } from './mediumEditor';
53
+ // const { createUuid } = LogicFlowUtil
54
+ // DONE: 解决问题,如果 LabelOverlay 设置为 Observer,拖拽 Label 时会导致 LabelOverlay 组件重新渲染,不知道为何
55
+ // 目前解决了。流程是 拖动 -> 更新 label 的数据信息到 element model -> 重新渲染 LabelOverlay
56
+ // 这种目前存在的问题,会全量重新渲染,是否会影响性能 ❓❓❓
57
+ // 另一种解决方案是,在此组件中监听一些事件,当这些事件触发时,再重新渲染 LabelOverlay
58
+ // 讨论一下
59
+ var LabelOverlay = /** @class */ (function (_super) {
60
+ __extends(LabelOverlay, _super);
61
+ function LabelOverlay(props) {
62
+ var _this = _super.call(this, props) || this;
63
+ _this.labelMap = new Map();
64
+ var lf = props.lf, graphModel = props.graphModel;
65
+ _this.lf = lf;
66
+ _this.graphModel = graphModel;
67
+ _this.state = { tick: 0 };
68
+ return _this;
69
+ }
70
+ LabelOverlay.prototype.componentDidMount = function () {
71
+ var _this = this;
72
+ var graphModel = this.props.graphModel;
73
+ // 1. 直接在此处初始化 RichTextEdit 工具
74
+ this.editor = new MediumEditor('.lf-label-editor', merge(defaultOptions, {
75
+ autoLink: true,
76
+ extensions: {
77
+ colorPicker: new ColorPickerButton(),
78
+ },
79
+ }));
80
+ // TODO: 2. 在此处监听一些事件,当 node、edge 数据变化时,主动触发重新渲染,保证同步更新
81
+ // TODO: 3. 整理哪些事件应该触发 Label 的更新
82
+ // 不需要了,将当前组件设置成 @observer 后,graphModel 更新会自动触发更新
83
+ graphModel.eventCenter.on('text:update,node:mousemove,node:resize,node:rotate,node:drag,label:drop,node:drop', function () {
84
+ // this.setState({ tick: this.state.tick + 1 })
85
+ });
86
+ graphModel.eventCenter.on('node:properties-change,node:properties-delete', function () {
87
+ _this.setState({ tick: _this.state.tick + 1 });
88
+ });
89
+ };
90
+ LabelOverlay.prototype.componentDidUpdate = function () {
91
+ var _a;
92
+ // 在组件更新后,将新增的 label 元素添加到富文本编辑器中
93
+ if (this.editor && this.editor.elements.length > 0) {
94
+ this.editor.addElements('.lf-label-editor');
95
+ }
96
+ else {
97
+ // FIX: 如果初始化的数据中没有 properties._label,需要重新初始化富文本编辑器
98
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.destroy();
99
+ this.editor = new MediumEditor('.lf-label-editor', merge(defaultOptions, {
100
+ autoLink: true,
101
+ extensions: {
102
+ colorPicker: new ColorPickerButton(),
103
+ },
104
+ }));
105
+ }
106
+ };
107
+ LabelOverlay.prototype.componentWillUnmount = function () {
108
+ var _a;
109
+ // 组件销毁时,同时将富文本编辑器注销
110
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.destroy();
111
+ };
112
+ /**
113
+ * 获取当前画布上所有的 label
114
+ * 1. 第一步,先把当前所有的 text 转换为 label 进行展示
115
+ * 2. 数据同步,text 编辑后,同步更新 label,并重新渲染
116
+ */
117
+ LabelOverlay.prototype.getLabels = function () {
118
+ var _this = this;
119
+ // 1. 通过 graphModel 获取当前画布上所有的 label 配置数据
120
+ var _a = this.props, extension = _a.lf.extension, graphModel = _a.graphModel;
121
+ var elements = __spreadArray(__spreadArray([], __read(graphModel.nodes), false), __read(graphModel.edges), false);
122
+ var curExtension = extension['Label'];
123
+ if (curExtension) {
124
+ var labels_1 = []; // 保存所有的 Label 元素
125
+ // TODO: 筛选出当前画布上,textMode 为 TextMode.LABEL 的元素(在支持元素级别的 textMode 时,需要做这个筛选)
126
+ // REMIND: 本期先只支持全局配置,所以判断全局的 textMode 即可
127
+ forEach(elements, function (element) {
128
+ var _a, _b;
129
+ var elementData = element.getData();
130
+ var labelConfig = (_b = (_a = elementData.properties) === null || _a === void 0 ? void 0 : _a._label) !== null && _b !== void 0 ? _b : [];
131
+ forEach(labelConfig, function (config) {
132
+ var labelMap = _this.labelMap;
133
+ // 查找 labelModel 实例,如果是实例化过的,直接复用;如果是新的,创建实例
134
+ // let label: LabelModel
135
+ // if (config.id && labelMap.has(config.id)) {
136
+ // label = labelMap.get(config.id)!
137
+ // } else {
138
+ // label = new LabelModel(config, element, graphModel)
139
+ // labelMap.set(label.id, label)
140
+ // }
141
+ var label = new LabelModel(config, element, graphModel);
142
+ labelMap.set(label.id, label);
143
+ labels_1.push(_jsx(Label, { label: label, element: element, graphModel: graphModel }, label.id));
144
+ });
145
+ });
146
+ return labels_1;
147
+ }
148
+ return null;
149
+ };
150
+ LabelOverlay.prototype.render = function () {
151
+ return (_jsx("foreignObject", { id: "lf-label-overlay", class: "lf-label-overlay", children: this.getLabels() }));
152
+ };
153
+ LabelOverlay.toolName = 'label-edit-tool';
154
+ LabelOverlay = __decorate([
155
+ observer
156
+ ], LabelOverlay);
157
+ return LabelOverlay;
158
+ }(Component));
159
+ export { LabelOverlay };
160
+ export default LabelOverlay;
161
+ //# sourceMappingURL=LabelOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabelOverlay.js","sourceRoot":"","sources":["../../../src/tools/label/LabelOverlay.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAkB,EAAE,SAAS,EAAiB,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAShF,uCAAuC;AAEvC,kFAAkF;AAClF,qEAAqE;AACrE,gCAAgC;AAChC,mDAAmD;AACnD,OAAO;AAEP;IAAkC,gCAAyC;IAQzE,sBAAY,KAAiB;QAC3B,YAAA,MAAK,YAAC,KAAK,CAAC,SAAA;QAHd,cAAQ,GAA4B,IAAI,GAAG,EAAE,CAAA;QAKnC,IAAA,EAAE,GAAiB,KAAK,GAAtB,EAAE,UAAU,GAAK,KAAK,WAAV,CAAU;QAChC,KAAI,CAAC,EAAE,GAAG,EAAE,CAAA;QACZ,KAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAE5B,KAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;;IAC1B,CAAC;IAED,wCAAiB,GAAjB;QAAA,iBA6BC;QA5BS,IAAA,UAAU,GAAK,IAAI,CAAC,KAAK,WAAf,CAAe;QACjC,8BAA8B;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAC5B,kBAAkB,EAClB,KAAK,CAAC,cAAc,EAAE;YACpB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE;gBACV,WAAW,EAAE,IAAI,iBAAiB,EAAE;aACrC;SACF,CAAC,CACH,CAAA;QAED,uDAAuD;QACvD,gCAAgC;QAChC,iDAAiD;QACjD,UAAU,CAAC,WAAW,CAAC,EAAE,CACvB,mFAAmF,EACnF;YACE,+CAA+C;QACjD,CAAC,CACF,CAAA;QAED,UAAU,CAAC,WAAW,CAAC,EAAE,CACvB,+CAA+C,EAC/C;YACE,KAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9C,CAAC,CACF,CAAA;IACH,CAAC;IAED,yCAAkB,GAAlB;;QACE,iCAAiC;QACjC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAA;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAC5B,kBAAkB,EAClB,KAAK,CAAC,cAAc,EAAE;gBACpB,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE;oBACV,WAAW,EAAE,IAAI,iBAAiB,EAAE;iBACrC;aACF,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,2CAAoB,GAApB;;QACE,oBAAoB;QACpB,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,EAAE,CAAA;IACxB,CAAC;IAED;;;;OAIG;IACH,gCAAS,GAAT;QAAA,iBA8CC;QA7CC,yCAAyC;QACnC,IAAA,KAGF,IAAI,CAAC,KAAK,EAFN,SAAS,kBAAA,EACf,UAAU,gBACE,CAAA;QAEd,IAAM,QAAQ,0CAAO,UAAU,CAAC,KAAK,kBAAK,UAAU,CAAC,KAAK,SAAC,CAAA;QAC3D,IAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAgB,CAAA;QAEtD,IAAI,YAAY,EAAE,CAAC;YACjB,IAAM,QAAM,GAAoB,EAAE,CAAA,CAAC,iBAAiB;YAEpD,4EAA4E;YAC5E,yCAAyC;YACzC,OAAO,CAAC,QAAQ,EAAE,UAAC,OAAO;;gBACxB,IAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;gBACrC,IAAM,WAAW,GAAG,MAAA,MAAA,WAAW,CAAC,UAAU,0CAAE,MAAM,mCAAI,EAAE,CAAA;gBAExD,OAAO,CAAC,WAAW,EAAE,UAAC,MAAM;oBAClB,IAAA,QAAQ,GAAK,KAAI,SAAT,CAAS;oBACzB,4CAA4C;oBAC5C,wBAAwB;oBACxB,8CAA8C;oBAC9C,qCAAqC;oBACrC,WAAW;oBACX,wDAAwD;oBACxD,kCAAkC;oBAClC,IAAI;oBACJ,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;oBACzD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;oBAE7B,QAAM,CAAC,IAAI,CACT,KAAC,KAAK,IAEJ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,IAHjB,KAAK,CAAC,EAAE,CAIb,CACH,CAAA;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,OAAO,QAAM,CAAA;QACf,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6BAAM,GAAN;QACE,OAAO,CACL,wBAAe,EAAE,EAAC,kBAAkB,EAAC,KAAK,EAAC,kBAAkB,YAC1D,IAAI,CAAC,SAAS,EAAE,GACH,CACjB,CAAA;IACH,CAAC;IAnIM,qBAAQ,GAAG,iBAAiB,AAApB,CAAoB;IADxB,YAAY;QADxB,QAAQ;OACI,YAAY,CAqIxB;IAAD,mBAAC;CAAA,AArID,CAAkC,SAAS,GAqI1C;SArIY,YAAY;AAuIzB,eAAe,YAAY,CAAA"}
@@ -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,27 @@
1
+ /**
2
+ * 三次贝塞尔曲线公式
3
+ */
4
+ export var getPointOnBezier = function (t, P0, P1, P2, P3) {
5
+ var x = Math.pow((1 - t), 3) * P0.x +
6
+ 3 * Math.pow((1 - t), 2) * t * P1.x +
7
+ 3 * (1 - t) * Math.pow(t, 2) * P2.x +
8
+ Math.pow(t, 3) * P3.x;
9
+ var y = Math.pow((1 - t), 3) * P0.y +
10
+ 3 * Math.pow((1 - t), 2) * t * P1.y +
11
+ 3 * (1 - t) * Math.pow(t, 2) * P2.y +
12
+ Math.pow(t, 3) * P3.y;
13
+ return { x: x, y: y };
14
+ };
15
+ /**
16
+ * 计算两个节点间的距离
17
+ * @param point1
18
+ * @param point2
19
+ * @param gridSize
20
+ */
21
+ export var calcTwoPointsDistance = function (point1, point2, gridSize) {
22
+ if (gridSize === void 0) { gridSize = 1; }
23
+ var dx = (point1.x - point2.x) / gridSize;
24
+ var dy = (point1.y - point2.y) / gridSize;
25
+ return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
26
+ };
27
+ //# sourceMappingURL=algorithm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorithm.js","sourceRoot":"","sources":["../../../src/tools/label/algorithm.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAC,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;AAED;;;;;GAKG;AACH,MAAM,CAAC,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"}