-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathengine-UML.drawio
More file actions
329 lines (329 loc) · 49.8 KB
/
engine-UML.drawio
File metadata and controls
329 lines (329 loc) · 49.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
<mxfile host="app.diagrams.net" modified="2022-12-16T05:56:53.121Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" etag="ajHswJsrg1jMpI-scTpR" version="20.3.6" type="github">
<diagram name="Page-1" id="c4acf3e9-155e-7222-9cf6-157b1a14988f">
<mxGraphModel dx="4349" dy="1711" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="-WdapCe2cPrzoG8TvZG--1" value="Engine" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-960" y="1000" width="350" height="320" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--2" value="+ id: string
+ props: IEngineProps<Engine>
+ workbench: Workbench
+ screen: Screen 
+ cursor: Cursor
+ keyboard: Keyboard" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--1" vertex="1">
<mxGeometry y="26" width="350" height="104" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--3" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--1" vertex="1">
<mxGeometry y="130" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--4" value="+ constructor(props: IEngineProps<Engine>): void
+ init(): void
+ setCurrentTree(tree: ITreeNode):void
+ getCurrentTree(): ITreeNode
+ getAllSelectedNodes():TreeNode[]
+ findNodeById(id:string):TreeNode
+ findMovingNodes():TreeNode[]
+ createNode(node:ITreeNode, Parent?: TreeNode):TreeNode
+ mount():void
+ unmount():void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--1" vertex="1">
<mxGeometry y="138" width="350" height="182" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--79" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.423;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--5" target="-WdapCe2cPrzoG8TvZG--2" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1060" y="826" />
<mxPoint x="-1060" y="1070" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--5" value="Workbench" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1430" y="666" width="350" height="320" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--6" value="+ workspaces: Workspace[]
+ currentWorkspace: Workspace
+ activeWorkspace: Workspace
+ engine: Engine" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--5" vertex="1">
<mxGeometry y="26" width="350" height="74" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--5" vertex="1">
<mxGeometry y="100" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--8" value="+ constructor(engine: Engine): void
+ makeObservable(): void
+ getEventContext(): IEngineContext
+ switchWorkspace(id: string): Workspace
+ setActiveWorkspace(workspace: Workspace): Workspace
+ setWorkbenchType(type: WorkbenchTypes): void
+ addWorkspace(props: IWorkspaceProps): Workspace
+ removeWorkspace(id: string)
+ ensureWorkspace(props: IWorkspaceProps): Workspace
+ findWorkspaceById(id: string): Workspace
+ findWorkspaceIndexById(id: string): number
+ mapWorkspace<T>(callbackFn: (value: Workspace, index: number) => T): T[]
+ eachWorkspace<T>(callbackFn: (value: Workspace, index: number) => T)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--5" vertex="1">
<mxGeometry y="108" width="350" height="212" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.001;entryY=0.216;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--9" target="-WdapCe2cPrzoG8TvZG--6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--9" value="Workspace" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1860" y="338" width="350" height="290" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--10" value="+ id: string
+ title: string
+ description: string
+ engine: Engine
+ operation: Operation
+ history: History<Workspace>
+ viewport: Viewport
+ outline: Viewport
+ props: IWorkspaceProps" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--9" vertex="1">
<mxGeometry y="26" width="350" height="144" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--11" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--9" vertex="1">
<mxGeometry y="170" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--12" value="+ constructor(engine: Engine, props: IWorkspaceProps)
+ getEventContext(): IEngineContext
+ attachEvents(container: EventContainer, contentWindow: Window): void
+ detachEvents(container: EventContainer): void
+ dispatch(event: ICustomEvent): void
+ serialize(): IWorkspace
+ from(worksapce?; IWorkspace): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--9" vertex="1">
<mxGeometry y="178" width="350" height="112" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.003;entryY=0.73;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--13" target="-WdapCe2cPrzoG8TvZG--10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2080" y="1303" />
<mxPoint x="-2080" y="469" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--13" value="Viewport" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2460" y="823" width="350" height="960" as="geometry">
<mxRectangle x="-2050" y="120" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--14" value="+ workspace: Workspace
+ engine: Engine
+ contentWindow: Window
+ viewportElement: HTMLElement
+ dragStartSnapshot: IViewportData
+ scrollX = 0
+ scrollY = 0
+ width = 0
+ height = 0
+ mounted = false
+ attachRequest: number
+ nodeIdAttrName: string
+ moveSensitive: boolean
+ moveInsertionType: IViewportMoveInsertionType
+ nodeElementsStore: Record<string, HEMLElement[]> = {}" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--13" vertex="1">
<mxGeometry y="26" width="350" height="234" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--15" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--13" vertex="1">
<mxGeometry y="260" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--16" value="+ constructor(props: IViewportProps)
+ get isScrollLeft(): boolean
+ get isScrollTop(): boolean
+ get isScrollRight(): boolean
+ get isScrollBottom(): boolean
+ get viewportRoot(): HTMLElement
+ get isMaster(): boolean
+ get isIframe(): boolean
+ get scrollContainer(): HTMLElement
+ get rect(): Rect
+ get innerRect(): Rect
+ get offsetX(): number
+ get offsetY(): number
+ get scale(): number
+ get dragScrollXDelta(): number
+ get dragScrollYDelta(): number
+ cacheElements(): void
+ clearCache(): void
+ getCurrentData(): IViewprotData
+ takeDragStartSnapshot(): void
+ digestViewport(): void
+ elementFromPoint(point: IPoint): HTMLElement
+ matchViewport(target: HTMLElement): boolean
+ attachEvents():void
+ detachEvents():void
+ onMount(element: HTMLElement, contentWindow: Window)
+ onUnmount(): void
+ isPointInViewport(point: IPoint, sensitive?: boolean): boolean
+ isRectInViewport(rect: IRect): boolean
+ isPointInViewportArea(point: IPoint, sensitive?: boolean):boolean
+ isOffsetPointInViewport(point: iPoint, sensitive?: boolean): boolean
+ isOffsetRectInViewport(rect: IRect):boolean
+ makeObservable(): void
+ findElementById(id: string): HTMLElement
+ findElementsById(id: string): HTMLElement[]
+ containsElement(element: HTMLElement): boolean
+ getOffsetPoint(topPoint: IPoint): IPoint
+ getElementRect(element: HTMLElement): IRect
+ getElementRectById(id: string): IRect
+ getElementOffsetRect(element: HTMLElement): IRect
+ getElementOffsetRectById(id:string): IRect
+ getValidNodeElement(node: TreeNode): Element
+ getChildrenRect(node: TreeNode): IRect
+ getChildrenOffsetRect(node: TreeNode): Rect
+ getValidNodeRect(node: TreeNode): Rect
+ getValidNodeOffsetRect(node: TreeNode): Rect
+ getValidNodeLayout(node: TreeNode): string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--13" vertex="1">
<mxGeometry y="268" width="350" height="692" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--17" target="-WdapCe2cPrzoG8TvZG--10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2080" y="190" />
<mxPoint x="-2080" y="436" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--17" value="Operation" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2460" y="60" width="350" height="260" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--18" value="+ workspace: Workspace
+ engine: Engine
+ tree: TreeNode
+ selection: Selection
+ hover: Hover
+ transformHelper: TransformHelper
+ moveHelper: MoveHelper
+ requests = {snapshot: null}" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--17" vertex="1">
<mxGeometry y="26" width="350" height="134" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--19" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--17" vertex="1">
<mxGeometry y="160" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--20" value="+ constructor(workspace: Workspace)
+ dispatch(event: ICustomEvent, callback?:()=>void)
+ snapshot(type?: string)
+ from(operation?:IOperation): void
+ serialize(): IOperation" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--17" vertex="1">
<mxGeometry y="168" width="350" height="92" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.005;entryY=0.592;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--21" target="-WdapCe2cPrzoG8TvZG--10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1985" y="450" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--21" value="History" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2460" y="395" width="350" height="310" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--22" value="+ context: ISerializable
+ props: IHistoryProps<HistoryItem<T>>
+ current = 0;
+ history: HistoryItem<T>[] = []
+ updateTimer = null
+ maxSize = 100
+ locking = false" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--21" vertex="1">
<mxGeometry y="26" width="350" height="114" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--23" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--21" vertex="1">
<mxGeometry y="140" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--24" value="+ constructor(context: T, props?: IHistoryProps<HistoryItem<T>>)
+ makeObservable()
+ list(): HistoryItem<T>[]
+ push(type?: string): void
+ get allowRedo(): boolean
+ redo(): void
+ undo(): void
+ goTo(index: number): void
+ clear(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--21" vertex="1">
<mxGeometry y="148" width="350" height="162" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--78" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.001;entryY=0.348;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--25" target="-WdapCe2cPrzoG8TvZG--18" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--25" value="TreeNode" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1860" y="-1020" width="350" height="1290" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--26" value="+ parent: TreeNode
+ root: TreeNode
+ rootOperation: Operation
+ id: string
+ depth = 0
+ hidden = false
+ componentName = 'NO_NAME_COMPONENT'
+ sourceName = ''
+ props: ITreeNode['props'] = {}
+ children: TreeNode[] = []
+ isSelfSourceNode: boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--25" vertex="1">
<mxGeometry y="26" width="350" height="174" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--27" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--25" vertex="1">
<mxGeometry y="200" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--28" value="+ constructor(node?: ITreeNode, parent?: TreeNode)
+ makeObservable()
+ get designerProps(): IDesignerProps
+ get designerLocals(): IDesignerLocales
+ get previous(): TreeNode
+ get next(): TreeNode
+ get siblings(): TreeNode[]
+ get index(): number
+ get descendants(): TreeNode[]
+ get isRoot(): boolean
+ get isInOperation(): boolean
+ get lastChild(): TreeNode
+ get firstChild(): TreeNode
+ get isSourceNode(): boolean
+ get operation(): Operation
+ get viewport(): Viewport
+ get outline(): Viewport
+ get moveLayout(): string
+ getElement(area: 'viewport' | 'outline'): HTMLElement
+ getValidElement(area: 'viewport'|'outline'): HTMLElement
+ getElementRect(area: 'viewport'|'outline'): Rect
+ getValidElementRect(area: 'viewport'|'outline'): Rect
+ getElementOffsetRect(area: 'viewport'|'outline'): Rect
+ getValidElementOffsetRect(area: 'viewport'|'outline'): Rect
+ getPrevious(step: number = 1): TreeNode
+ getAfter(step: number = 1): TreeNode
+ getSibling(index: number = 0): TreeNode
+ getParents(node?: TreeNode): TreeNode[]
+ getParentByDepth(depth = 0): TreeNode
+ getMessage(token: string)
+ isMyAncestor(node: TreeNode): boolean
+ isMyParent(node: TreeNode): boolean
+ isMyParents(node: TreeNode): boolean
+ isMyChild(node: TreeNode): boolean
+ isMyChildren(node: TreeNode): boolean
+ takeSnapshot(type?: string)
+ triggerMutation<T>(event: any, callback?:()=>T, defaults?: T): T
+ find(finder: INodeFinder): TreeNode
+ findAll(finder: INodeFinder): TreeNode[]
+ distanceTo(node: TreeNode)
+ crossSiblings(node: TreeNode): TreeNode[]
+ allowSibling(nodes: TreeNode[]): boolean
+ allowDrop(parent: TreeNode): boolean
+ allowAppend(nodes: TreeNode[]): boolean
+ allowClone(): boolean
+ allowResize(): false | Array<'x' | 'y'>
+ allowTranslate(): boolean
+ allowDelete(): boolean
+ findById(id: string): TreeNode
+ contains(...nodes: TreeNode[]): boolean
+ eachTree(callback?:(node: TreeNode)=>void | boolean):void
+ eachChildren(callback?: (node: TreeNode) => void | boolean): void
+ resetNodesParent(nodes: TreeNode[], parent: TreeNode)
+ setProps(props?: any)
+ setComponentName(componentName: string): void
+ prepend(...nodes: TreeNode[])
+ append(...nodes: TreeNode[])
+ wrap(wrapper: TreeNode)
+ insertAfter(...nodes: TreeNode[])
+ insertBefore(...nodes: TreeNode[])
+ insertChildren(start: number, ...nodes: TreeNode[])
+ setChildren(...nodes: TreeNode[])
+ remove()
+ clone()
+ from(node?: ITreeNode)
+ serialize(): ITreeNode
+ static sort(nodes: TreeNode[] = [])
+ static clone(nodes: TreeNode[] = [])
+ static filterResizable(nodes: TreeNode[] = [])
+ static filterRotatable(nodes: TreeNode[] = [])
+ static filterScalable(nodes: TreeNode[] = [])
+ static filterRoundable(nodes: TreeNode[] = [])
+ static filterTranslatable(nodes: TreeNode[] = [])
+ static filterDraggable(nodes: TreeNode[] = [])
+ static filterDrappable(nodes: TreeNode[] = [], parent: TreeNode)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--25" vertex="1">
<mxGeometry y="208" width="350" height="1082" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--29" value="Selection" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2900" y="-270" width="350" height="370" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--30" value="+ operation: Operation
+ selected: string[] = []
+ indexes: Record<string, boolean> = {}" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--29" vertex="1">
<mxGeometry y="26" width="350" height="64" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--31" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--29" vertex="1">
<mxGeometry y="90" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--32" value="+ constructor(props?: ISelection): void
+ makeObservable(): void
+ trigger(type = SelectNodeEvent): void
+ select(id: string | TreeNode): void
+ safeSelect(id: sting | TreeNode): void
+ mapIds(ids: any): string[]
+ batchSelect(ids: string[] | TreeNode[])
+ batchSafeSelect(ids: string[] | TreeNode[])
+ get selectedNodes(): TreeNode[]
+ get first(): TreeNode
+ get last(): TreeNode
+ get length(): number
+ add(...ids: string[] | TreeNode[])
+ crossAddTo(node: TreeNode)
+ remove(...ids: string[] | TreeNode[])
+ has(...ids: string[] | TreeNode[])
+ clear()
" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--29" vertex="1">
<mxGeometry y="98" width="350" height="272" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.002;entryY=0.547;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--33" target="-WdapCe2cPrzoG8TvZG--18" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--33" value="Hover" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2900" y="125" width="350" height="170" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--34" value="+ node: TreeNode = null
+ operation: Operation" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--33" vertex="1">
<mxGeometry y="26" width="350" height="44" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--35" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--33" vertex="1">
<mxGeometry y="70" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--36" value="+ constructor(props?: IHoverProps): void
+ setHover(node?: TreeNode): void
+ clear(): void
+ trigger(): void
+ makeObservable(): void

" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--33" vertex="1">
<mxGeometry y="78" width="350" height="92" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.627;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.999;exitY=0.02;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--40" target="-WdapCe2cPrzoG8TvZG--18" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2550" y="601" />
<mxPoint x="-2500" y="601" />
<mxPoint x="-2500" y="170" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--37" value="TransformHelper" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2900" y="320" width="350" height="820" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--38" value="+ operation: Operation
+ type: TransformHelperType
+ direction: ResizeDirection
+ dragNodes: TreeNode[] = []
+ rulerSnapLines: SnapLine[] = []
+ aroundsnapLines: SnapLine[] = []
+ aroundSpaceBlocks: ArroundSpaceBlock = null
+ viewportRectsStore: Record<string, Rect> = {}
+ dragStartTranslateStore: Record<string, IPoint> = {}
+ dragStartSizeStore: Record<string, ISize> = {}
+ draggingNodesRect: Rect
+ cacheDragNodesRect: Rect
+ dragStartNodesRect: IRect = null
+ snapping = false
+ dragging = false
+ snapped = false
+ static threshold = 6" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--37" vertex="1">
<mxGeometry y="26" width="350" height="244" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--39" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--37" vertex="1">
<mxGeometry y="270" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--40" value="+ constructor(props?: ITransformHelperProps): void
+ get tree(): TreeNode
+ get cursor(): Cursor
+ get viewport(): Viewport
+ get deltaX(): number
+ get deltaY(): number
+ get cursorPosition(): Point
+ get cursorDragNodesRect(): Rect
+ get cursorDragNodesEdgeLines(): Rect
+ get dragNodesRect(): Rect
+ get dragNodesEdgeLines(): Rect
+ get cursorOffset(): Point
+ get dragStartCursor(): Point
+ get dragStartCursorOffset(): Point
+ get closestSnapLines(): SnapLine[]
+ get closestSpaceBlocks(): SpaceBlock[]
+ get thresholdSnapLines(): SnapLine[]
+ get thresholdSpaceBlocks(): SpaceBlock[]
+ get measurerSpaceBlocks(): SpaceBlock[]
+ calcBaseTranslate(node: TreeNode): Point
+ calcBaseResize(node: TreeNode): Rect
+ calcDragstartStore(nodes: TreeNode[] = []): void
+ calcRulerSnapLines(dragNodesRect: IRect): SnapLine[]
+ calcAroundSnapLines(dragNodesRect: Rect): SnapLine[]
+ calcAroundSpaceBlocks(dragNodesRect: IRect): ArroundSpaceBlock
+ calcViewportNodes()
+ getNodeRect(node: TreeNode): Rect
+ eachViewportNodes(visitor: (node: TreeNode, rect: Rect) => void)
+ translate(node: TreeNode, handler:(translate: IPoint) => void)
+ resize(node: TreeNode, handler: (resize: IRect) => void)
+ findRulerSnapLine(id: string)
+ addRulerSnapLine(line: ISnapLine)
+ removeRulerSnapLine(id: string)
+ dragStart(props: ITransformHelperDragStartProps)
+ dragMove()
+ dragEnd()
+ makeObservable()


" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--37" vertex="1">
<mxGeometry y="278" width="350" height="542" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.003;entryY=0.435;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--32" target="-WdapCe2cPrzoG8TvZG--18" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-2500" y="-36" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--56" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.009;entryY=0.754;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--52" target="-WdapCe2cPrzoG8TvZG--18" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2490" y="1450" />
<mxPoint x="-2490" y="187" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--52" value="MoveHelper" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-2900" y="1200" width="350" height="500" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--53" value="+ operation: Operation
+ rootNode: TreeNode
+ dragNodes: TreeNode[] = []
+ touchNode: TreeNode = null
+ closestNode: TreeNode = null
+ activeViewport: Viewport = null
+ viewportClosestRect: Rect = null
+ outlineClosestRect: Rect = null
+ viewportClosestOffsetRect: Rect = null
+ outlineClosestOffsetRect: Rect = null
+ viewportClosestDirection: ClosestPosition = null
+ outlineClosestDirection: ClosestPosition = null
+ dragging = false" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--52" vertex="1">
<mxGeometry y="26" width="350" height="194" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--54" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--52" vertex="1">
<mxGeometry y="220" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--55" value="+ constructor(props: IMoveHelperProps): void
+ get cursor(): Cursor
+ get viewport(): Viewport 
+ get outline(): Viewport
+ get hasDragNodes(): boolean
+ get closestDirection(): Rect
+ getClosestLayout(viewport: Viewport): string
+ calcClosestPosition(point: IPoint, viewport: Viewport): ClosestPosition
+ calcClosestNode(point: IPoint, viewport: Viewport): TreeNode
+ calcClosestRect(viewport: Viewport, closestDirection: ClosestPosition): Rect
+ calcClosestOffsetRect(viewport: Viewport, closestDirection: ClosestDirection): Rect
+ dragStart(props: IMoveHelperDragStartProps)
+ dragMove(props: IMoveHelperDragMoveProps)
+ dragDrop(props: IMoveHelperDragDropProps)
+ dragEnd()
+ trigger(event: any)
+ makeObservable()


" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--52" vertex="1">
<mxGeometry y="228" width="350" height="272" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.002;entryY=0.289;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--57" target="-WdapCe2cPrzoG8TvZG--38" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--57" value="SnapLine" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-3400" y="319" width="350" height="280" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--58" value="+ _id: string
+ type: ISnapLineType
+ distance: number
+ refer: TreeNode
+ start: IPoint
+ end: IPoint
+ helper: TransformHelper
" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--57" vertex="1">
<mxGeometry y="26" width="350" height="114" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--59" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--57" vertex="1">
<mxGeometry y="140" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--60" value="+ constructor(helper: TransformHelper, line: ISnapLine): void
+ get id(): string
+ get direction(): 'v' | 'h'
+ get closest()
+ get rect(): Rect
+ translate(node: TreeNode, translate: IPoint)
+ resize(node: TreeNode, rect: Rect)
+ snapEdge(rect: Rect): string" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--57" vertex="1">
<mxGeometry y="148" width="350" height="132" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--67" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.007;entryY=0.41;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--61" target="-WdapCe2cPrzoG8TvZG--38" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2950" y="960" />
<mxPoint x="-2950" y="446" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--61" value="SpaceBlock" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-3400" y="833" width="350" height="290" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--62" value="+ _id: string
+ distance: number
+ refer: TreeNode
+ helper: TransformHelper
+ rect: Rect
+ type: ISpaceBlockType
" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--61" vertex="1">
<mxGeometry y="26" width="350" height="104" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--63" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--61" vertex="1">
<mxGeometry y="130" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--64" value="+ constructor(helper: TransformHelper, box: ISpaceBlock): void
+ get referRect(): Rect
+ get id(): string
+ get next()
+ get extendsLine()
+ get needExtendsLine()
+ get crossReferRect()
+ get crossDragNodesRect()
+ get isometrics()
+ get snapLine()" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--61" vertex="1">
<mxGeometry y="138" width="350" height="152" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--72" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--68" target="-WdapCe2cPrzoG8TvZG--2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--68" value="Screen" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1810" y="941" width="350" height="310" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--69" value="+ type: ScreenType
+ scale = 1
+ width: number | string = '100%'
+ height: number | string = '100%'
+ engine: Engine
+ background = ''
+ flip = false
+ status = ScreenStatus.Normal" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--68" vertex="1">
<mxGeometry y="26" width="350" height="124" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--70" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--68" vertex="1">
<mxGeometry y="150" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--71" value="+ constructor(engine: Engine): void
+ makeObservable()
+ setStatus(status: ScreenStatus)
+ setType(type: ScreenType)
+ setScale(scale: number)
+ setSize(width?: number | string, height?: number | string)
+ resetSize()
+ setBackground(background: string)
+ setFlip(flip: boolean)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--68" vertex="1">
<mxGeometry y="158" width="350" height="152" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--80" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.712;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--73" target="-WdapCe2cPrzoG8TvZG--2" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1060" y="1325" />
<mxPoint x="-1060" y="1100" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--73" value="Cursor" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1430" y="1140" width="350" height="370" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--74" value="+ engine: Engine
+ type: CursorType
+ dragType: CursorDragType
+ status: CursorStatus
+ position: ICursorPosition
+ dragStartPosition: ICursorPosition
+ dragEndPosition: ICursorPosition
+ dragAtomDelta: ICursorPosition
+ dragStartToCurrentDelta: ICursorPosition
+ dragStartToEndDelta: ICursorPosition
+ view: Window" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--73" vertex="1">
<mxGeometry y="26" width="350" height="174" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--75" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--73" vertex="1">
<mxGeometry y="200" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--76" value="+ constructor(engine: Engine): void
+ makeObservable(): void
+ get speed()
+ setStatus(status: CursorStatus)
+ setType(type: CursorType)
+ setDragType(type: CursorDragType)
+ setStyle(style: string)
+ setPosition(position?: ICursorPosition)
+ setDragStartPosition(position?: ICursorPosition)
+ setDragEndPosition(position?: ICursorPosition)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--73" vertex="1">
<mxGeometry y="208" width="350" height="162" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--85" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.009;entryY=0.842;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="-WdapCe2cPrzoG8TvZG--81" target="-WdapCe2cPrzoG8TvZG--2" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1040" y="1725" />
<mxPoint x="-1040" y="1114" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--81" value="Keyboard" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-1430" y="1550" width="350" height="350" as="geometry">
<mxRectangle x="290" y="1270" width="80" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--82" value="+ engine: Engine
+ shortcuts: Shortcut[]
+ sequence: KeyCode[]
+ keyDown: KeyCode
+ modifiers = {}
+ requestTimer = null" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--81" vertex="1">
<mxGeometry y="26" width="350" height="104" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--83" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--81" vertex="1">
<mxGeometry y="130" width="350" height="8" as="geometry" />
</mxCell>
<mxCell id="-WdapCe2cPrzoG8TvZG--84" value="+ constructor(engine: Engine): void
+ makeObservable(): void
+ matchCodes(context: IEngineContext): boolean
+ preventcodes()
+ includes(key: KeyCode)
+ excludes(key: KeyCode)
+ addKeyCode(key: KeyCode)
+ removeKeyCode(key: KeyCode)
+ isModifier(code: KeyCode)
+ handleModifiers(event: AbstractKeyboardEvent)
+ handleKeyboard(event: AbstractKeyboardEvent, context: IEngineContext)
+ isKeyDown(code: KeyCode)
+ requestClean(duration = 320)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="-WdapCe2cPrzoG8TvZG--81" vertex="1">
<mxGeometry y="138" width="350" height="212" as="geometry" />
</mxCell>
<mxCell id="r8bY9w433HhizTmjWVna-1" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;Interface&gt;&gt;</i><br><b>IEngineProps</b></p><hr size="1"><p style="margin:0px;margin-left:4px;">+ sourceIdAttrName:</p><p style="margin:0px;margin-left:4px;">+ nodeIdAttrName:</p><p style="margin:0px;margin-left:4px;">+ contentEditableAttrName:</p><p style="margin:0px;margin-left:4px;">+ contentEditableNodeIdAttrName:</p><p style="margin:0px;margin-left:4px;">+ clickStopPropagationAttrName:</p><p style="margin:0px;margin-left:4px;">+ outlineNodeIdAttrName:</p><p style="margin:0px;margin-left:4px;">+ nodeSelectionIdAttrName:</p><p style="margin:0px;margin-left:4px;">+ nodeDragHandlerAttrName:</p><p style="margin:0px;margin-left:4px;">+ screenResizeHandlerAttrName:</p><p style="margin:0px;margin-left:4px;">+ nodeResizeHandlerAttrName:</p><p style="margin:0px;margin-left:4px;">+ nodeTranslateAttrName:</p><p style="margin:0px;margin-left:4px;">+ defaultComponentTree:</p><p style="margin:0px;margin-left:4px;">+ defaultScreenType</p><hr size="1"><p style="margin:0px;margin-left:4px;"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="-960" y="1340" width="350" height="240" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>