@miragon/team-topologies-renderer 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -20
- package/dist/Modeler.d.ts +3 -2
- package/dist/Modeler.d.ts.map +1 -1
- package/dist/behaviors/TtAssociationBehavior.d.ts +9 -0
- package/dist/behaviors/TtAssociationBehavior.d.ts.map +1 -0
- package/dist/behaviors/index.d.ts +5 -1
- package/dist/behaviors/index.d.ts.map +1 -1
- package/dist/context-pad/TtContextPadProvider.d.ts +10 -1
- package/dist/context-pad/TtContextPadProvider.d.ts.map +1 -1
- package/dist/context-pad/index.d.ts +1 -1
- package/dist/context-pad/index.d.ts.map +1 -1
- package/dist/copy-paste/TtCopyPaste.d.ts +2 -1
- package/dist/copy-paste/TtCopyPaste.d.ts.map +1 -1
- package/dist/draw/TeamTopologiesRenderer.d.ts +4 -1
- package/dist/draw/TeamTopologiesRenderer.d.ts.map +1 -1
- package/dist/draw/icons.d.ts +3 -0
- package/dist/draw/icons.d.ts.map +1 -1
- package/dist/draw/index.d.ts +5 -1
- package/dist/draw/index.d.ts.map +1 -1
- package/dist/draw/label-layout.d.ts +28 -0
- package/dist/draw/label-layout.d.ts.map +1 -0
- package/dist/draw/palette-icons.d.ts +3 -0
- package/dist/draw/palette-icons.d.ts.map +1 -1
- package/dist/draw/styles.d.ts +1 -0
- package/dist/draw/styles.d.ts.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +669 -308
- package/dist/index.js.map +1 -1
- package/dist/io/TtExporter.d.ts.map +1 -1
- package/dist/io/TtImporter.d.ts +3 -1
- package/dist/io/TtImporter.d.ts.map +1 -1
- package/dist/keyboard/TtKeyboard.d.ts +4 -1
- package/dist/keyboard/TtKeyboard.d.ts.map +1 -1
- package/dist/label-editing/TtLabelEditing.d.ts.map +1 -1
- package/dist/label-editing/index.d.ts +1 -1
- package/dist/label-editing/index.d.ts.map +1 -1
- package/dist/model/TtElementFactory.d.ts +12 -2
- package/dist/model/TtElementFactory.d.ts.map +1 -1
- package/dist/model/di-types.d.ts +13 -3
- package/dist/model/di-types.d.ts.map +1 -1
- package/dist/modeling/TtLayouter.d.ts +7 -0
- package/dist/modeling/TtLayouter.d.ts.map +1 -0
- package/dist/modeling/TtModeling.d.ts +12 -2
- package/dist/modeling/TtModeling.d.ts.map +1 -1
- package/dist/modeling/index.d.ts +6 -1
- package/dist/modeling/index.d.ts.map +1 -1
- package/dist/palette/TtPaletteProvider.d.ts +3 -1
- package/dist/palette/TtPaletteProvider.d.ts.map +1 -1
- package/dist/palette/index.d.ts +1 -1
- package/dist/palette/index.d.ts.map +1 -1
- package/dist/rules/TtRules.d.ts.map +1 -1
- package/dist/team-topologies.css +1 -1
- package/dist/zorder/TtZOrder.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -9,7 +9,8 @@ and full editor for [Team Topologies](https://teamtopologies.com/) diagrams, bui
|
|
|
9
9
|
|
|
10
10
|
It renders the canonical document from
|
|
11
11
|
[`@miragon/team-topologies-schema-model`](../schema-model) and gives you palette, move, resize,
|
|
12
|
-
connect-by-overlap,
|
|
12
|
+
connect-by-overlap, multi-selection (lasso, select all) with group move, text annotations, context
|
|
13
|
+
pad, in-place label editing and undo/redo — with no UI framework required.
|
|
13
14
|
Mount it into any `<div>`; the web app (React) and the VS Code extension both wrap this exact package.
|
|
14
15
|
|
|
15
16
|
## Install
|
|
@@ -26,6 +27,19 @@ npm install @miragon/team-topologies-renderer @miragon/team-topologies-schema-mo
|
|
|
26
27
|
| `NavigatedViewer` | Read-only + zoom (scroll), pan (drag) and selection. |
|
|
27
28
|
| `Modeler` | The full editor: palette, move, resize, context pad, label editing, undo/redo. |
|
|
28
29
|
|
|
30
|
+
## Editing gestures (`Modeler`)
|
|
31
|
+
|
|
32
|
+
| Gesture | Effect |
|
|
33
|
+
| ---------------------------------- | ----------------------------------------------------------------------- |
|
|
34
|
+
| Double-click an element | Edit its label in place (Enter commits, Shift+Enter breaks, Esc aborts) |
|
|
35
|
+
| `Ctrl/Cmd+A` | Select every element |
|
|
36
|
+
| Shift+drag on the canvas | Lasso-select (also the first palette tool) |
|
|
37
|
+
| Shift+click | Add an element to / remove it from the selection |
|
|
38
|
+
| Drag a selected element | Move the whole selection as one undo step |
|
|
39
|
+
| Arrow keys (Shift: ×10) | Nudge the selection |
|
|
40
|
+
| `Ctrl/Cmd+C` / `V`, Delete | Copy, paste, delete the selection |
|
|
41
|
+
| `Ctrl/Cmd+Z`, `Ctrl/Cmd+Shift+Z/Y` | Undo / redo |
|
|
42
|
+
|
|
29
43
|
All three share a common base (`TtBaseViewer`) with the same import/export and lifecycle API.
|
|
30
44
|
|
|
31
45
|
## Quick start
|
|
@@ -91,10 +105,12 @@ new Modeler({
|
|
|
91
105
|
|
|
92
106
|
### Helpers & types
|
|
93
107
|
|
|
94
|
-
- **Type guards:** `isTtElement`, `isTtTeam`, `isTtInteraction`, `isTtFlow
|
|
95
|
-
|
|
96
|
-
- **
|
|
97
|
-
|
|
108
|
+
- **Type guards:** `isTtElement`, `isTtTeam`, `isTtInteraction`, `isTtFlow`, `isTtAnnotation`,
|
|
109
|
+
`isTtAssociation`.
|
|
110
|
+
- **Runtime element types:** `TtTeam`, `TtInteraction`, `TtFlow`, `TtAnnotation`, `TtElement`, and
|
|
111
|
+
`TtAssociation` (the connector from an annotation to the element it is attached to).
|
|
112
|
+
- **Palette icon generators:** `teamIconSvg(type)`, `interactionIconSvg(mode)`, `flowIconSvg()`,
|
|
113
|
+
`annotationIconSvg()` — WYSIWYG SVG glyphs matching what the canvas draws.
|
|
98
114
|
- **Other:** `TtViewerOptions`, `ImportWarning`, `RootBusinessObject`, `ROOT_ID`, `saveSVG`.
|
|
99
115
|
|
|
100
116
|
## How it's built
|
|
@@ -103,19 +119,19 @@ The package is a set of [didi](https://github.com/nikku/didi) modules layered on
|
|
|
103
119
|
exported (e.g. `ttDrawModule`, `ttPaletteModule`, `ttModelingModule`) so you can compose your own
|
|
104
120
|
viewer via `additionalModules`:
|
|
105
121
|
|
|
106
|
-
| Module | Responsibility
|
|
107
|
-
| ---------------------- |
|
|
108
|
-
| `ttModelModule` | Element factory with notation defaults (`TtElementFactory`).
|
|
109
|
-
| `ttDrawModule` |
|
|
110
|
-
| `ioModule` | Document ↔ canvas bridge (`TtImporter`, `TtExporter`, `saveSVG`).
|
|
111
|
-
| `ttModelingModule` | High-level mutations — label,
|
|
112
|
-
| `ttRulesModule` | Editing rules (what can move / resize / be created).
|
|
113
|
-
| `ttBehaviorsModule` | Keeps the model **flat**
|
|
114
|
-
| `ttPaletteModule` | The drag-to-create
|
|
115
|
-
| `ttContextPadModule` | Per-element actions (rename, delete).
|
|
116
|
-
| `ttLabelEditingModule` | Double-click
|
|
117
|
-
| `ttKeyboardModule` | Undo / redo / delete shortcuts.
|
|
118
|
-
| `ttZOrderModule` | Fixed stacking order (flow behind, teams, interactions on top).
|
|
122
|
+
| Module | Responsibility |
|
|
123
|
+
| ---------------------- | -------------------------------------------------------------------------------------- |
|
|
124
|
+
| `ttModelModule` | Element factory with notation defaults (`TtElementFactory`). |
|
|
125
|
+
| `ttDrawModule` | SVG rendering of teams, interactions, flow and annotations (`TeamTopologiesRenderer`). |
|
|
126
|
+
| `ioModule` | Document ↔ canvas bridge (`TtImporter`, `TtExporter`, `saveSVG`). |
|
|
127
|
+
| `ttModelingModule` | High-level mutations — label, type, mode, colours, description, annotations. |
|
|
128
|
+
| `ttRulesModule` | Editing rules (what can move / resize / be created / be attached). |
|
|
129
|
+
| `ttBehaviorsModule` | Keeps the model **flat** and annotation connectors cropped, one per annotation. |
|
|
130
|
+
| `ttPaletteModule` | The lasso tool and the drag-to-create palette. |
|
|
131
|
+
| `ttContextPadModule` | Per-element actions (rename, add/attach annotation, delete; delete a multi-selection). |
|
|
132
|
+
| `ttLabelEditingModule` | Double-click in-place label editing. |
|
|
133
|
+
| `ttKeyboardModule` | Undo / redo / select all / delete / copy / paste / nudge shortcuts. |
|
|
134
|
+
| `ttZOrderModule` | Fixed stacking order (flow behind, teams, interactions, annotations on top). |
|
|
119
135
|
|
|
120
136
|
### Rendering
|
|
121
137
|
|
|
@@ -123,8 +139,9 @@ A custom `TeamTopologiesRenderer` (priority `1500`, beating diagram-js's default
|
|
|
123
139
|
from the spec in [`@miragon/team-topologies-schema-model`](../schema-model): the four team outlines
|
|
124
140
|
(octagon, vertical/horizontal rounded rectangles, square rectangle) drawn solid; the three
|
|
125
141
|
interaction glyphs (parallelogram, triangle, circle) drawn dashed and translucent; the flow-of-change
|
|
126
|
-
as a dashed left-to-right band
|
|
127
|
-
|
|
142
|
+
as a dashed left-to-right band; an annotation as a BPMN-style open bracket with left-aligned text,
|
|
143
|
+
tied to its element by a dashed connector. Labels are word-wrapped (explicit line breaks are kept)
|
|
144
|
+
and centred. Per-element `fill`/`stroke` overrides win over the spec defaults.
|
|
128
145
|
|
|
129
146
|
## Import / export
|
|
130
147
|
|
package/dist/Modeler.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ModuleDeclaration } from 'didi';
|
|
2
2
|
import { NavigatedViewer } from './NavigatedViewer.js';
|
|
3
3
|
/**
|
|
4
|
-
* Full Team Topologies editor: palette/create,
|
|
5
|
-
*
|
|
4
|
+
* Full Team Topologies editor: palette/create, multi-selection (lasso, select
|
|
5
|
+
* all) and group move, resize, annotations with connectors, context pad,
|
|
6
|
+
* in-place label editing, undo/redo.
|
|
6
7
|
*/
|
|
7
8
|
export declare class Modeler extends NavigatedViewer {
|
|
8
9
|
protected _getModules(): ModuleDeclaration[];
|
package/dist/Modeler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modeler.d.ts","sourceRoot":"","sources":["../src/Modeler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Modeler.d.ts","sourceRoot":"","sources":["../src/Modeler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAS9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAWvD;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,eAAe;cACvB,WAAW,IAAI,iBAAiB,EAAE;IAsBrD,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;CAGnB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { default as CommandInterceptor } from 'diagram-js/lib/command/CommandInterceptor';
|
|
2
|
+
import { default as EventBus } from 'diagram-js/lib/core/EventBus';
|
|
3
|
+
import { default as Modeling } from 'diagram-js/lib/features/modeling/Modeling';
|
|
4
|
+
import { default as ConnectionDocking } from 'diagram-js/lib/layout/ConnectionDocking';
|
|
5
|
+
export default class TtAssociationBehavior extends CommandInterceptor {
|
|
6
|
+
static $inject: string[];
|
|
7
|
+
constructor(eventBus: EventBus, connectionDocking: ConnectionDocking, modeling: Modeling);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=TtAssociationBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TtAssociationBehavior.d.ts","sourceRoot":"","sources":["../../src/behaviors/TtAssociationBehavior.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,kBAAkB,MAAM,2CAA2C,CAAC;AAC3E,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,iBAAiB,MAAM,yCAAyC,CAAC;AAS7E,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,kBAAkB;IACnE,OAAgB,OAAO,WAAiD;gBAE5D,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ;CAsCzF"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ModuleDeclaration } from 'didi';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Editing behaviors that keep the Team Topologies model flat (no nesting) and
|
|
4
|
+
* annotation connectors cropped and one per annotation.
|
|
5
|
+
*/
|
|
3
6
|
export declare const ttBehaviorsModule: ModuleDeclaration;
|
|
4
7
|
export { default as TtFlatModelBehavior } from './TtFlatModelBehavior.js';
|
|
8
|
+
export { default as TtAssociationBehavior } from './TtAssociationBehavior.js';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/behaviors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/behaviors/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,iBAI/B,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { default as ContextPad } from 'diagram-js/lib/features/context-pad/ContextPad';
|
|
2
2
|
import { default as Modeling } from 'diagram-js/lib/features/modeling/Modeling';
|
|
3
|
+
import { default as Connect } from 'diagram-js/lib/features/connect/Connect';
|
|
4
|
+
import { default as Selection } from 'diagram-js/lib/features/selection/Selection';
|
|
3
5
|
import { ContextPadEntries, default as ContextPadProvider } from 'diagram-js/lib/features/context-pad/ContextPadProvider';
|
|
4
6
|
import { Element } from 'diagram-js/lib/model/Types';
|
|
5
7
|
import { default as TtLabelEditing } from '../label-editing/TtLabelEditing.js';
|
|
8
|
+
import { default as TtModeling } from '../modeling/TtModeling.js';
|
|
6
9
|
export default class TtContextPadProvider implements ContextPadProvider {
|
|
7
10
|
private readonly modeling;
|
|
11
|
+
private readonly ttModeling;
|
|
8
12
|
private readonly labelEditing;
|
|
13
|
+
private readonly connect;
|
|
14
|
+
private readonly selection;
|
|
9
15
|
static $inject: string[];
|
|
10
|
-
constructor(contextPad: ContextPad, modeling: Modeling, labelEditing: TtLabelEditing);
|
|
16
|
+
constructor(contextPad: ContextPad, modeling: Modeling, ttModeling: TtModeling, labelEditing: TtLabelEditing, connect: Connect, selection: Selection);
|
|
11
17
|
getContextPadEntries(element: Element): ContextPadEntries;
|
|
18
|
+
getMultiElementContextPadEntries(elements: Element[]): ContextPadEntries;
|
|
19
|
+
private editEntry;
|
|
20
|
+
private deleteEntry;
|
|
12
21
|
}
|
|
13
22
|
//# sourceMappingURL=TtContextPadProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TtContextPadProvider.d.ts","sourceRoot":"","sources":["../../src/context-pad/TtContextPadProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,UAAU,MAAM,gDAAgD,CAAC;AAC7E,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,EACV,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TtContextPadProvider.d.ts","sourceRoot":"","sources":["../../src/context-pad/TtContextPadProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,UAAU,MAAM,gDAAgD,CAAC;AAC7E,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,OAAO,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,SAAS,MAAM,6CAA6C,CAAC;AACzE,OAAO,KAAK,EACV,iBAAiB,EAEjB,OAAO,IAAI,kBAAkB,EAC9B,MAAM,wDAAwD,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,cAAc,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AAOxD,MAAM,CAAC,OAAO,OAAO,oBAAqB,YAAW,kBAAkB;IAYnE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAf5B,MAAM,CAAC,OAAO,WAOZ;gBAGA,UAAU,EAAE,UAAU,EACL,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,cAAc,EAC5B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS;IAKvC,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,iBAAiB;IAqCzD,gCAAgC,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,iBAAiB;IAIxE,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModuleDeclaration } from 'didi';
|
|
2
|
-
/** Per-element context actions (rename, delete). */
|
|
2
|
+
/** Per-element context actions (rename, annotate, attach, delete). */
|
|
3
3
|
export declare const ttContextPadModule: ModuleDeclaration;
|
|
4
4
|
export { default as TtContextPadProvider } from './TtContextPadProvider.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-pad/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context-pad/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAM9C,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,iBAIhC,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -7,11 +7,12 @@ import { default as EventBus } from 'diagram-js/lib/core/EventBus';
|
|
|
7
7
|
import { default as Modeling } from 'diagram-js/lib/features/modeling/Modeling';
|
|
8
8
|
import { default as Mouse } from 'diagram-js/lib/features/mouse/Mouse';
|
|
9
9
|
import { default as Rules } from 'diagram-js/lib/features/rules/Rules';
|
|
10
|
-
import { Shape } from 'diagram-js/lib/model/Types';
|
|
10
|
+
import { Connection, Shape } from 'diagram-js/lib/model/Types';
|
|
11
11
|
export default class TtCopyPaste extends CopyPaste {
|
|
12
12
|
private readonly elementFactory;
|
|
13
13
|
static $inject: string[];
|
|
14
14
|
constructor(canvas: Canvas, create: Create, clipboard: Clipboard, elementFactory: ElementFactory, eventBus: EventBus, modeling: Modeling, mouse: Mouse, rules: Rules);
|
|
15
|
+
createConnection(attrs: Record<string, unknown>): Connection;
|
|
15
16
|
createShape(attrs: Record<string, unknown>): Shape;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=TtCopyPaste.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TtCopyPaste.d.ts","sourceRoot":"","sources":["../../src/copy-paste/TtCopyPaste.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TtCopyPaste.d.ts","sourceRoot":"","sources":["../../src/copy-paste/TtCopyPaste.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,SAAS,MAAM,iDAAiD,CAAC;AAGxE,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAC;AAChE,OAAO,KAAK,SAAS,MAAM,6CAA6C,CAAC;AACzE,OAAO,KAAK,cAAc,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,KAAK,MAAM,qCAAqC,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,qCAAqC,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAoBpE,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAgB9C,OAAO,CAAC,QAAQ,CAAC,cAAc;IAfjC,OAAgB,OAAO,WASrB;gBAGA,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACH,cAAc,EAAE,cAAc,EAC/C,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK;IAKL,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU;IAQ5D,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK;CAS5D"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { default as BaseRenderer } from 'diagram-js/lib/draw/BaseRenderer';
|
|
2
2
|
import { default as EventBus } from 'diagram-js/lib/core/EventBus';
|
|
3
|
-
import { ElementLike, ShapeLike } from 'diagram-js/lib/model/Types';
|
|
3
|
+
import { ConnectionLike, ElementLike, ShapeLike } from 'diagram-js/lib/model/Types';
|
|
4
4
|
export default class TeamTopologiesRenderer extends BaseRenderer {
|
|
5
5
|
static $inject: string[];
|
|
6
6
|
constructor(eventBus: EventBus);
|
|
7
7
|
canRender(element: ElementLike): boolean;
|
|
8
8
|
drawShape(visuals: SVGElement, element: ShapeLike): SVGElement;
|
|
9
|
+
drawConnection(visuals: SVGElement, connection: ConnectionLike): SVGElement;
|
|
9
10
|
getShapePath(shape: ShapeLike): string;
|
|
11
|
+
getConnectionPath(connection: ConnectionLike): string;
|
|
10
12
|
private drawTeam;
|
|
11
13
|
private teamOutline;
|
|
12
14
|
private drawInteraction;
|
|
13
15
|
private drawFlow;
|
|
16
|
+
private drawAnnotation;
|
|
14
17
|
private appendLabel;
|
|
15
18
|
}
|
|
16
19
|
//# sourceMappingURL=TeamTopologiesRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TeamTopologiesRenderer.d.ts","sourceRoot":"","sources":["../../src/draw/TeamTopologiesRenderer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TeamTopologiesRenderer.d.ts","sourceRoot":"","sources":["../../src/draw/TeamTopologiesRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAE5D,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AA+BzF,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,YAAY;IAC9D,MAAM,CAAC,OAAO,WAAgB;gBAElB,QAAQ,EAAE,QAAQ;IAIrB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAIxC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,GAAG,UAAU;IAc9D,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,GAAG,UAAU;IAa3E,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAKtC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM;IAM9D,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;IAwCvB,OAAO,CAAC,QAAQ;IAmChB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,WAAW;CA0BpB"}
|
package/dist/draw/icons.d.ts
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
export declare const ICON_ARROW_FORWARD = "M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z";
|
|
6
6
|
export declare const ICON_EDIT = "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z";
|
|
7
7
|
export declare const ICON_DELETE = "M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z";
|
|
8
|
+
export declare const ICON_LINK = "M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z";
|
|
9
|
+
/** An open bracket with text lines — the annotation glyph. */
|
|
10
|
+
export declare const ICON_ANNOTATION = "M4 3h5v2H6v14h3v2H4V3zm7 4h9v2h-9V7zm0 4h9v2h-9v-2zm0 4h6v2h-6v-2z";
|
|
8
11
|
export declare const ICON_SWAP = "M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z";
|
|
9
12
|
export declare function iconMarkup(path: string, size?: number): string;
|
|
10
13
|
//# sourceMappingURL=icons.d.ts.map
|
package/dist/draw/icons.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/draw/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,kBAAkB,8DAA8D,CAAC;AAC9F,eAAO,MAAM,SAAS,yJACkI,CAAC;AACzJ,eAAO,MAAM,WAAW,kFACyD,CAAC;AAClF,eAAO,MAAM,SAAS,4EAA4E,CAAC;AAEnG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAE1D"}
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/draw/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,kBAAkB,8DAA8D,CAAC;AAC9F,eAAO,MAAM,SAAS,yJACkI,CAAC;AACzJ,eAAO,MAAM,WAAW,kFACyD,CAAC;AAClF,eAAO,MAAM,SAAS,wNACiM,CAAC;AACxN,8DAA8D;AAC9D,eAAO,MAAM,eAAe,uEAAuE,CAAC;AACpG,eAAO,MAAM,SAAS,4EAA4E,CAAC;AAEnG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAE1D"}
|
package/dist/draw/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ModuleDeclaration } from 'didi';
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* SVG rendering of all Team Topologies element types (BaseRenderer, priority
|
|
4
|
+
* 1500), plus the docking that crops annotation connectors to the outlines of
|
|
5
|
+
* the shapes they join.
|
|
6
|
+
*/
|
|
3
7
|
export declare const ttDrawModule: ModuleDeclaration;
|
|
4
8
|
export { default as TeamTopologiesRenderer } from './TeamTopologiesRenderer.js';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/draw/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/draw/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/draw/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,iBAI1B,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { TtElement } from '../model/di-types.js';
|
|
2
|
+
export declare const LINE_HEIGHT = 1.2;
|
|
3
|
+
export interface LabelBox {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
export interface LabelLayout {
|
|
10
|
+
/** The area the text is laid out in, relative to the element's top-left corner. */
|
|
11
|
+
box: LabelBox;
|
|
12
|
+
/** `center`: centred both ways (shape labels). `left-top`: flows from the top-left (annotations). */
|
|
13
|
+
align: "center" | "left-top";
|
|
14
|
+
fontSize: number;
|
|
15
|
+
fontWeight: string;
|
|
16
|
+
letterSpacing?: string;
|
|
17
|
+
fill: string;
|
|
18
|
+
}
|
|
19
|
+
/** Width of the flow arrow's head; the label stays on the shaft. */
|
|
20
|
+
export declare function flowHeadWidth(width: number, height: number): number;
|
|
21
|
+
export declare function labelLayout(element: TtElement): LabelLayout;
|
|
22
|
+
/**
|
|
23
|
+
* Greedy word-wrap into lines that roughly fit `maxWidth` at the font size.
|
|
24
|
+
* Explicit line breaks are kept. Character-count based (not measured), so the
|
|
25
|
+
* result is identical on every platform and exported SVGs stay stable.
|
|
26
|
+
*/
|
|
27
|
+
export declare function wrapLabel(text: string, maxWidth: number, fontSize: number): string[];
|
|
28
|
+
//# sourceMappingURL=label-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label-layout.d.ts","sourceRoot":"","sources":["../../src/draw/label-layout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6C,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjG,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,GAAG,EAAE,QAAQ,CAAC;IACd,qGAAqG;IACrG,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAsC3D;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBpF"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { InteractionMode, TeamType } from '@miragon/team-topologies-schema-model';
|
|
2
2
|
export declare function teamIconSvg(type: TeamType): string;
|
|
3
3
|
export declare function flowIconSvg(): string;
|
|
4
|
+
export declare function annotationIconSvg(): string;
|
|
5
|
+
/** Dashed selection frame with a pointer — the lasso (multi-select) tool. */
|
|
6
|
+
export declare function lassoIconSvg(): string;
|
|
4
7
|
export declare function interactionIconSvg(mode: InteractionMode): string;
|
|
5
8
|
//# sourceMappingURL=palette-icons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"palette-icons.d.ts","sourceRoot":"","sources":["../../src/draw/palette-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"palette-icons.d.ts","sourceRoot":"","sources":["../../src/draw/palette-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAOvF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAgBlD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAchE"}
|
package/dist/draw/styles.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare const FONT: {
|
|
|
21
21
|
readonly family: "'Geist Variable', 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif";
|
|
22
22
|
readonly label: 13.5;
|
|
23
23
|
readonly small: 11;
|
|
24
|
+
readonly annotation: 12;
|
|
24
25
|
};
|
|
25
26
|
/** Paper colour used for the label halo so text stays legible over lines. */
|
|
26
27
|
export declare const PAPER: "#FFFFFF";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/draw/styles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,wGAAwG;AACxG,eAAO,MAAM,MAAM,WAAe,CAAC;AAEnC,eAAO,MAAM,GAAG,WAAkB,CAAC;AACnC,eAAO,MAAM,QAAQ,YAAY,CAAC;AAElC,eAAO,MAAM,IAAI;IACf;;;;;;;OAOG
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/draw/styles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,0FAA0F;AAC1F,eAAO,MAAM,kBAAkB,OAAO,CAAC;AAEvC,wGAAwG;AACxG,eAAO,MAAM,MAAM,WAAe,CAAC;AAEnC,eAAO,MAAM,GAAG,WAAkB,CAAC;AACnC,eAAO,MAAM,QAAQ,YAAY,CAAC;AAElC,eAAO,MAAM,IAAI;IACf;;;;;;;OAOG;;;;;CAMK,CAAC;AAEX,6EAA6E;AAC7E,eAAO,MAAM,KAAK,WAAgB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,16 +6,16 @@ export type { TtViewerOptions, EventCallback } from './TtBaseViewer.js';
|
|
|
6
6
|
export { ttModelModule, TtElementFactory } from './model/index.js';
|
|
7
7
|
export { ttDrawModule, TeamTopologiesRenderer } from './draw/index.js';
|
|
8
8
|
export { ioModule, TtImporter, TtExporter, saveSVG, ROOT_ID } from './io/index.js';
|
|
9
|
-
export { ttModelingModule, TtModeling } from './modeling/index.js';
|
|
9
|
+
export { ttModelingModule, TtModeling, TtLayouter } from './modeling/index.js';
|
|
10
10
|
export { ttRulesModule, TtRules } from './rules/index.js';
|
|
11
|
-
export { ttBehaviorsModule, TtFlatModelBehavior } from './behaviors/index.js';
|
|
11
|
+
export { ttBehaviorsModule, TtFlatModelBehavior, TtAssociationBehavior, } from './behaviors/index.js';
|
|
12
12
|
export { ttPaletteModule, TtPaletteProvider } from './palette/index.js';
|
|
13
13
|
export { ttContextPadModule, TtContextPadProvider } from './context-pad/index.js';
|
|
14
14
|
export { ttLabelEditingModule, TtLabelEditing } from './label-editing/index.js';
|
|
15
15
|
export { ttKeyboardModule, TtKeyboard } from './keyboard/index.js';
|
|
16
16
|
export { ttZOrderModule, TtZOrder } from './zorder/index.js';
|
|
17
|
-
export { isTtElement, isTtTeam, isTtInteraction, isTtFlow } from './model/di-types.js';
|
|
18
|
-
export type { TtElement, TtTeam, TtInteraction, TtFlow } from './model/di-types.js';
|
|
17
|
+
export { isTtElement, isTtTeam, isTtInteraction, isTtFlow, isTtAnnotation, isTtAssociation, } from './model/di-types.js';
|
|
18
|
+
export type { TtElement, TtTeam, TtInteraction, TtFlow, TtAnnotation, TtAssociation, } from './model/di-types.js';
|
|
19
19
|
export type { ImportWarning, RootBusinessObject } from './io/index.js';
|
|
20
|
-
export { teamIconSvg, interactionIconSvg, flowIconSvg } from './draw/palette-icons.js';
|
|
20
|
+
export { teamIconSvg, interactionIconSvg, flowIconSvg, annotationIconSvg, } from './draw/palette-icons.js';
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,8BAA8B,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,8BAA8B,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EACL,WAAW,EACX,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,SAAS,EACT,MAAM,EACN,aAAa,EACb,MAAM,EACN,YAAY,EACZ,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}
|