@miragon/context-maps-renderer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +148 -0
  2. package/dist/CmBaseViewer.d.ts +49 -0
  3. package/dist/CmBaseViewer.d.ts.map +1 -0
  4. package/dist/Modeler.d.ts +14 -0
  5. package/dist/Modeler.d.ts.map +1 -0
  6. package/dist/NavigatedViewer.d.ts +7 -0
  7. package/dist/NavigatedViewer.d.ts.map +1 -0
  8. package/dist/Viewer.d.ts +7 -0
  9. package/dist/Viewer.d.ts.map +1 -0
  10. package/dist/behaviors/CmClickSelectionBehavior.d.ts +7 -0
  11. package/dist/behaviors/CmClickSelectionBehavior.d.ts.map +1 -0
  12. package/dist/behaviors/CmDragBehavior.d.ts +7 -0
  13. package/dist/behaviors/CmDragBehavior.d.ts.map +1 -0
  14. package/dist/behaviors/CmFlatModelBehavior.d.ts +9 -0
  15. package/dist/behaviors/CmFlatModelBehavior.d.ts.map +1 -0
  16. package/dist/behaviors/index.d.ts +7 -0
  17. package/dist/behaviors/index.d.ts.map +1 -0
  18. package/dist/connect-handles/CmConnectHandles.d.ts +15 -0
  19. package/dist/connect-handles/CmConnectHandles.d.ts.map +1 -0
  20. package/dist/connect-handles/index.d.ts +5 -0
  21. package/dist/connect-handles/index.d.ts.map +1 -0
  22. package/dist/context-maps.css +2 -0
  23. package/dist/draw/ContextMapsRenderer.d.ts +26 -0
  24. package/dist/draw/ContextMapsRenderer.d.ts.map +1 -0
  25. package/dist/draw/endRoleChips.d.ts +17 -0
  26. package/dist/draw/endRoleChips.d.ts.map +1 -0
  27. package/dist/draw/icons.d.ts +10 -0
  28. package/dist/draw/icons.d.ts.map +1 -0
  29. package/dist/draw/index.d.ts +5 -0
  30. package/dist/draw/index.d.ts.map +1 -0
  31. package/dist/draw/palette-icons.d.ts +4 -0
  32. package/dist/draw/palette-icons.d.ts.map +1 -0
  33. package/dist/draw/styles.d.ts +25 -0
  34. package/dist/draw/styles.d.ts.map +1 -0
  35. package/dist/index.d.ts +22 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +1279 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/io/CmExporter.d.ts +11 -0
  40. package/dist/io/CmExporter.d.ts.map +1 -0
  41. package/dist/io/CmImporter.d.ts +20 -0
  42. package/dist/io/CmImporter.d.ts.map +1 -0
  43. package/dist/io/index.d.ts +9 -0
  44. package/dist/io/index.d.ts.map +1 -0
  45. package/dist/io/saveSvg.d.ts +6 -0
  46. package/dist/io/saveSvg.d.ts.map +1 -0
  47. package/dist/io/types.d.ts +11 -0
  48. package/dist/io/types.d.ts.map +1 -0
  49. package/dist/keyboard/CmKeyboard.d.ts +9 -0
  50. package/dist/keyboard/CmKeyboard.d.ts.map +1 -0
  51. package/dist/keyboard/index.d.ts +5 -0
  52. package/dist/keyboard/index.d.ts.map +1 -0
  53. package/dist/label-editing/CmLabelEditing.d.ts +14 -0
  54. package/dist/label-editing/CmLabelEditing.d.ts.map +1 -0
  55. package/dist/label-editing/index.d.ts +5 -0
  56. package/dist/label-editing/index.d.ts.map +1 -0
  57. package/dist/model/CmDiagramElementFactory.d.ts +9 -0
  58. package/dist/model/CmDiagramElementFactory.d.ts.map +1 -0
  59. package/dist/model/CmElementFactory.d.ts +13 -0
  60. package/dist/model/CmElementFactory.d.ts.map +1 -0
  61. package/dist/model/CmLayouter.d.ts +21 -0
  62. package/dist/model/CmLayouter.d.ts.map +1 -0
  63. package/dist/model/di-types.d.ts +27 -0
  64. package/dist/model/di-types.d.ts.map +1 -0
  65. package/dist/model/index.d.ts +15 -0
  66. package/dist/model/index.d.ts.map +1 -0
  67. package/dist/modeling/CmModeling.d.ts +39 -0
  68. package/dist/modeling/CmModeling.d.ts.map +1 -0
  69. package/dist/modeling/cmd/SwapEndsHandler.d.ts +15 -0
  70. package/dist/modeling/cmd/SwapEndsHandler.d.ts.map +1 -0
  71. package/dist/modeling/cmd/UpdatePropertiesHandler.d.ts +13 -0
  72. package/dist/modeling/cmd/UpdatePropertiesHandler.d.ts.map +1 -0
  73. package/dist/modeling/index.d.ts +10 -0
  74. package/dist/modeling/index.d.ts.map +1 -0
  75. package/dist/palette/CmPaletteProvider.d.ts +12 -0
  76. package/dist/palette/CmPaletteProvider.d.ts.map +1 -0
  77. package/dist/palette/index.d.ts +5 -0
  78. package/dist/palette/index.d.ts.map +1 -0
  79. package/dist/rules/CmRules.d.ts +8 -0
  80. package/dist/rules/CmRules.d.ts.map +1 -0
  81. package/dist/rules/index.d.ts +5 -0
  82. package/dist/rules/index.d.ts.map +1 -0
  83. package/dist/theme/index.d.ts +2 -0
  84. package/dist/theme/index.d.ts.map +1 -0
  85. package/dist/theme/palette.d.ts +47 -0
  86. package/dist/theme/palette.d.ts.map +1 -0
  87. package/dist/validation/CmValidationMarkers.d.ts +13 -0
  88. package/dist/validation/CmValidationMarkers.d.ts.map +1 -0
  89. package/dist/validation/index.d.ts +5 -0
  90. package/dist/validation/index.d.ts.map +1 -0
  91. package/dist/zorder/CmZOrder.d.ts +13 -0
  92. package/dist/zorder/CmZOrder.d.ts.map +1 -0
  93. package/dist/zorder/index.d.ts +5 -0
  94. package/dist/zorder/index.d.ts.map +1 -0
  95. package/package.json +48 -0
package/README.md ADDED
@@ -0,0 +1,148 @@
1
+ # @miragon/context-maps-renderer
2
+
3
+ [![npm](https://img.shields.io/npm/v/@miragon/context-maps-renderer)](https://www.npmjs.com/package/@miragon/context-maps-renderer)
4
+ [![License: MIT](https://img.shields.io/github/license/Miragon/context-maps-modeler)](https://github.com/Miragon/context-maps-modeler/blob/main/LICENSE)
5
+
6
+ The **browser layer** of the [Context Maps Modeler](../../README.md): a framework-agnostic viewer
7
+ and full editor for strategic Domain-Driven Design [Context Maps](https://contextmapper.org/)
8
+ diagrams, built on [diagram-js](https://github.com/bpmn-io/diagram-js) (MIT).
9
+
10
+ It renders the canonical document from
11
+ [`@miragon/context-maps-schema-model`](../schema-model) and gives you palette, move, resize,
12
+ connect-by-relationship, context pad, inline label editing and undo/redo — with no UI framework
13
+ required. Mount it into any `<div>`; the web app (React) and the VS Code extension both wrap this
14
+ exact package.
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ npm install @miragon/context-maps-renderer @miragon/context-maps-schema-model
20
+ ```
21
+
22
+ ## Three entry points
23
+
24
+ | Class | Use it for |
25
+ | ----------------- | ------------------------------------------------------------------------------ |
26
+ | `Viewer` | Read-only rendering, no interaction (thumbnails, static embeds). |
27
+ | `NavigatedViewer` | Read-only + zoom (scroll), pan (drag) and selection. |
28
+ | `Modeler` | The full editor: palette, move, resize, context pad, label editing, undo/redo. |
29
+
30
+ All three share a common base (`CmBaseViewer`) with the same import/export and lifecycle API.
31
+
32
+ ## Quick start
33
+
34
+ ```ts
35
+ import { Modeler } from "@miragon/context-maps-renderer";
36
+ import "@miragon/context-maps-renderer/assets/context-maps.css";
37
+ import { SAMPLE_DOCUMENT } from "@miragon/context-maps-schema-model";
38
+
39
+ const modeler = new Modeler({ container: document.querySelector("#canvas")! });
40
+
41
+ // Load a document (auto-fits the viewport)
42
+ const { warnings } = modeler.importDocument(SAMPLE_DOCUMENT);
43
+
44
+ // Read the live canvas back as the canonical model
45
+ const doc = modeler.exportDocument();
46
+
47
+ // Export a standalone, self-contained SVG
48
+ const { svg } = modeler.saveSVG();
49
+
50
+ // Undo / redo are driven by the command stack
51
+ modeler.undo();
52
+ modeler.redo();
53
+ ```
54
+
55
+ > **The CSS is required.** Import `@miragon/context-maps-renderer/assets/context-maps.css`
56
+ > (it also pulls in `diagram-js`'s own stylesheet) — without it the palette, context pad and label
57
+ > editor are unstyled.
58
+
59
+ ## API
60
+
61
+ ### Constructor — `CmViewerOptions`
62
+
63
+ ```ts
64
+ new Modeler({
65
+ container?: HTMLElement, // host element (a detached <div> if omitted)
66
+ width?: number | string, // canvas width (default "100%")
67
+ height?: number | string, // canvas height (default "100%", or "600px" with no container)
68
+ additionalModules?: ModuleDeclaration[], // extra diagram-js modules
69
+ });
70
+ ```
71
+
72
+ ### Shared methods (`Viewer` / `NavigatedViewer` / `Modeler`)
73
+
74
+ | Method | Returns | Purpose |
75
+ | ---------------------------------- | ------------------------------- | ------------------------------------------------- |
76
+ | `importDocument(doc)` | `{ warnings: ImportWarning[] }` | Replace canvas content and auto-fit. |
77
+ | `exportDocument()` | `CmDocument` | Rebuild the canonical model from the live canvas. |
78
+ | `saveSVG()` | `{ svg: string }` | Self-contained SVG snapshot (fitted viewBox). |
79
+ | `setMeta(partial)` / `getMeta()` | — / `RootBusinessObject` | Read/write diagram-level metadata (e.g. `title`). |
80
+ | `attachTo(el)` / `detach()` | `void` | Move the canvas in/out of the DOM (keeps state). |
81
+ | `clear()` / `destroy()` | `void` | Empty the canvas / tear it down. |
82
+ | `on(event, cb)` / `off(event, cb)` | `void` | Subscribe to diagram-js events. |
83
+ | `get<T>(name)` | `T` | Resolve a diagram-js service (advanced). |
84
+
85
+ ### Modeler-only
86
+
87
+ `undo()`, `redo()`, `canUndo()`, `canRedo()`.
88
+
89
+ ### Helpers & types
90
+
91
+ - **Type guards:** `isCmElement`, `isCmContext`, `isCmRelationship`.
92
+ - **Runtime element types:** `CmContext`, `CmRelationship`, `CmElement`.
93
+ - **Palette icon generators:** `contextIconSvg(type)`, `relationshipIconSvg(pattern)` —
94
+ WYSIWYG SVG glyphs matching what the canvas draws.
95
+ - **Other:** `CmViewerOptions`, `ImportWarning`, `RootBusinessObject`, `ROOT_ID`, `saveSVG`.
96
+
97
+ ## How it's built
98
+
99
+ The package is a set of [didi](https://github.com/nikku/didi) modules layered on diagram-js. Each is
100
+ exported (e.g. `cmDrawModule`, `cmPaletteModule`, `cmModelingModule`) so you can compose your own
101
+ viewer via `additionalModules`:
102
+
103
+ | Module | Responsibility |
104
+ | ---------------------- | ----------------------------------------------------------------------------------- |
105
+ | `cmModelModule` | Element factory with notation defaults (`CmElementFactory`). |
106
+ | `cmDrawModule` | Custom SVG rendering of contexts and relationships (`ContextMapsRenderer`). |
107
+ | `ioModule` | Document ↔ canvas bridge (`CmImporter`, `CmExporter`, `saveSVG`). |
108
+ | `cmModelingModule` | High-level mutations — label, subdomain type, relationship pattern, roles, colours. |
109
+ | `cmRulesModule` | Editing rules (what can move / resize / be created / connected). |
110
+ | `cmBehaviorsModule` | Keeps the model **flat** — shapes never nest. |
111
+ | `cmPaletteModule` | The drag-to-create tool palette. |
112
+ | `cmContextPadModule` | Per-element actions (rename, delete, connect). |
113
+ | `cmLabelEditingModule` | Double-click inline label editing. |
114
+ | `cmKeyboardModule` | Undo / redo / delete shortcuts. |
115
+ | `cmZOrderModule` | Fixed stacking order (relationships behind, contexts on top). |
116
+
117
+ ### Rendering
118
+
119
+ A custom `ContextMapsRenderer` (priority `1500`, beating diagram-js's default) draws each element
120
+ from the spec in [`@miragon/context-maps-schema-model`](../schema-model): bounded-context boxes
121
+ coloured by subdomain type (core / supporting / generic) with their glyphs; and relationships drawn
122
+ as lines styled per context-mapping pattern (partnership, shared kernel, customer-supplier,
123
+ upstream-downstream, separate ways), carrying the pattern abbreviation, U/D end markers and the
124
+ OHS/PL/ACL/CF integration-role badges. Labels are word-wrapped and centred. Per-element `fill`/`stroke`
125
+ overrides win over the spec defaults.
126
+
127
+ ## Import / export
128
+
129
+ The package reads and writes the canonical `CmDocument` (JSON) and exports a standalone **SVG**.
130
+ PNG export and the embedded-scene round-trip (storing the document inside the exported image) live in
131
+ the [web app](../../apps/webapp) and the [VS Code extension](../../apps/vscode), which add the canvas
132
+ rasterisation those formats need.
133
+
134
+ ## Development
135
+
136
+ Part of the [Context Maps Modeler](../../README.md) monorepo; consumed from source by the apps.
137
+ From the repo root:
138
+
139
+ ```bash
140
+ npm run build -w packages/renderer # Vite library build → dist/ (publish build)
141
+ npm test # Vitest unit tests
142
+ npm run test:browser # renderer integration tests in real Chromium
143
+ npm run typecheck
144
+ ```
145
+
146
+ ## License
147
+
148
+ [MIT](../../LICENSE). diagram-js and its dependencies are MIT / ISC / Apache-2.0.
@@ -0,0 +1,49 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ import { CmDocument } from '@miragon/context-maps-schema-model';
3
+ import { ImportWarning, RootBusinessObject } from './io/types.js';
4
+ export interface CmViewerOptions {
5
+ /** Host element. When absent, a detached <div> is created (attach later). */
6
+ container?: HTMLElement;
7
+ width?: number | string;
8
+ height?: number | string;
9
+ /** Appended to the module list (extension point). */
10
+ additionalModules?: ModuleDeclaration[];
11
+ }
12
+ export type EventCallback<T = unknown> = (event: T) => void;
13
+ export declare abstract class CmBaseViewer {
14
+ protected abstract _getModules(): ModuleDeclaration[];
15
+ private _diagram;
16
+ private readonly _container;
17
+ private readonly _options;
18
+ constructor(options?: CmViewerOptions);
19
+ private _createContainer;
20
+ private _ensureDiagram;
21
+ /** Resolve a diagram-js service from the didi injector. */
22
+ get<T>(name: string): T;
23
+ on<T = unknown>(event: string, callback: EventCallback<T>, priority?: number): void;
24
+ off(event: string, callback: EventCallback): void;
25
+ /** Load a document into the canvas (replaces existing content). */
26
+ importDocument(doc: CmDocument): {
27
+ warnings: ImportWarning[];
28
+ };
29
+ /** Current canvas state as a canonical document. */
30
+ exportDocument(): CmDocument;
31
+ /** Update diagram-level metadata (title / flow-of-change) on the root. */
32
+ setMeta(partial: Partial<RootBusinessObject>): void;
33
+ /** Read diagram-level metadata (title / flow-of-change) from the root. */
34
+ getMeta(): RootBusinessObject | undefined;
35
+ /** Standalone, self-contained SVG snapshot. */
36
+ saveSVG(): {
37
+ svg: string;
38
+ };
39
+ /** Fit the content into the viewport, leaving room at the top for the palette. */
40
+ private _fit;
41
+ /** Attach the container into `target`. */
42
+ attachTo(target: HTMLElement): void;
43
+ /** Detach the container from the DOM, preserving state. */
44
+ detach(): void;
45
+ clear(): void;
46
+ destroy(): void;
47
+ get container(): HTMLElement;
48
+ }
49
+ //# sourceMappingURL=CmBaseViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmBaseViewer.d.ts","sourceRoot":"","sources":["../src/CmBaseViewer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAK9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAIrE,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErF,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAQ5D,8BAAsB,YAAY;IAChC,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,iBAAiB,EAAE;IAErD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,OAAO,GAAE,eAAoB;IAKzC,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,cAAc;IAQtB,2DAA2D;IAC3D,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAIvB,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAO,GAAG,IAAI;IAIjF,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIjD,mEAAmE;IACnE,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE;IAW9D,oDAAoD;IACpD,cAAc,IAAI,UAAU;IAI5B,0EAA0E;IAC1E,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAanD,0EAA0E;IAC1E,OAAO,IAAI,kBAAkB,GAAG,SAAS;IASzC,+CAA+C;IAC/C,OAAO,IAAI;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;IAI1B,kFAAkF;IAClF,OAAO,CAAC,IAAI;IA0CZ,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKnC,2DAA2D;IAC3D,MAAM,IAAI,IAAI;IAId,KAAK,IAAI,IAAI;IAIb,OAAO,IAAI,IAAI;IAQf,IAAI,SAAS,IAAI,WAAW,CAE3B;CACF"}
@@ -0,0 +1,14 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ import { NavigatedViewer } from './NavigatedViewer.js';
3
+ /**
4
+ * Full Context Maps editor: palette/create, move, resize, connect with
5
+ * rules, context pad, inline label editing, undo/redo.
6
+ */
7
+ export declare class Modeler extends NavigatedViewer {
8
+ protected _getModules(): ModuleDeclaration[];
9
+ undo(): void;
10
+ redo(): void;
11
+ canUndo(): boolean;
12
+ canRedo(): boolean;
13
+ }
14
+ //# sourceMappingURL=Modeler.d.ts.map
@@ -0,0 +1 @@
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;;;GAGG;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,7 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ import { Viewer } from './Viewer.js';
3
+ /** Read-only + navigation: zoom (scroll), pan (drag), selection. */
4
+ export declare class NavigatedViewer extends Viewer {
5
+ protected _getModules(): ModuleDeclaration[];
6
+ }
7
+ //# sourceMappingURL=NavigatedViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigatedViewer.d.ts","sourceRoot":"","sources":["../src/NavigatedViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,oEAAoE;AACpE,qBAAa,eAAgB,SAAQ,MAAM;cACtB,WAAW,IAAI,iBAAiB,EAAE;CAGtD"}
@@ -0,0 +1,7 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ import { CmBaseViewer } from './CmBaseViewer.js';
3
+ /** Read-only renderer: draws a Context Maps diagram with no interaction. */
4
+ export declare class Viewer extends CmBaseViewer {
5
+ protected _getModules(): ModuleDeclaration[];
6
+ }
7
+ //# sourceMappingURL=Viewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Viewer.d.ts","sourceRoot":"","sources":["../src/Viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD,4EAA4E;AAC5E,qBAAa,MAAO,SAAQ,YAAY;IACtC,SAAS,CAAC,WAAW,IAAI,iBAAiB,EAAE;CAG7C"}
@@ -0,0 +1,7 @@
1
+ import { default as EventBus } from 'diagram-js/lib/core/EventBus';
2
+ import { default as Selection } from 'diagram-js/lib/features/selection/Selection';
3
+ export default class CmClickSelectionBehavior {
4
+ static $inject: string[];
5
+ constructor(eventBus: EventBus, selection: Selection);
6
+ }
7
+ //# sourceMappingURL=CmClickSelectionBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmClickSelectionBehavior.d.ts","sourceRoot":"","sources":["../../src/behaviors/CmClickSelectionBehavior.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,6CAA6C,CAAC;AAOzE,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAC3C,MAAM,CAAC,OAAO,WAA6B;gBAE/B,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;CAYrD"}
@@ -0,0 +1,7 @@
1
+ import { default as EventBus } from 'diagram-js/lib/core/EventBus';
2
+ import { default as Canvas } from 'diagram-js/lib/core/Canvas';
3
+ export default class CmDragBehavior {
4
+ static $inject: string[];
5
+ constructor(eventBus: EventBus, canvas: Canvas);
6
+ }
7
+ //# sourceMappingURL=CmDragBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmDragBehavior.d.ts","sourceRoot":"","sources":["../../src/behaviors/CmDragBehavior.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AAIrD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,MAAM,CAAC,OAAO,WAA0B;gBAE5B,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;CAQ/C"}
@@ -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 Canvas } from 'diagram-js/lib/core/Canvas';
4
+ import { default as Modeling } from 'diagram-js/lib/features/modeling/Modeling';
5
+ export default class CmFlatModelBehavior extends CommandInterceptor {
6
+ static $inject: string[];
7
+ constructor(eventBus: EventBus, canvas: Canvas, modeling: Modeling);
8
+ }
9
+ //# sourceMappingURL=CmFlatModelBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmFlatModelBehavior.d.ts","sourceRoot":"","sources":["../../src/behaviors/CmFlatModelBehavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,kBAAkB,MAAM,2CAA2C,CAAC;AAC3E,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AAQtE,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,kBAAkB;IACjE,OAAgB,OAAO,WAAsC;gBAEjD,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CA6BnE"}
@@ -0,0 +1,7 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ /** Editing behaviors: keep the model flat (no nesting), drag-state CSS marker. */
3
+ export declare const cmBehaviorsModule: ModuleDeclaration;
4
+ export { default as CmFlatModelBehavior } from './CmFlatModelBehavior.js';
5
+ export { default as CmDragBehavior } from './CmDragBehavior.js';
6
+ export { default as CmClickSelectionBehavior } from './CmClickSelectionBehavior.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAK9C,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { default as EventBus } from 'diagram-js/lib/core/EventBus';
2
+ import { default as Overlays } from 'diagram-js/lib/features/overlays/Overlays';
3
+ import { default as Selection } from 'diagram-js/lib/features/selection/Selection';
4
+ import { default as Connect } from 'diagram-js/lib/features/connect/Connect';
5
+ import { default as Dragging } from 'diagram-js/lib/features/dragging/Dragging';
6
+ export default class CmConnectHandles {
7
+ private readonly eventBus;
8
+ private readonly selection;
9
+ private readonly overlays;
10
+ private readonly dragging;
11
+ static $inject: string[];
12
+ constructor(eventBus: EventBus, selection: Selection, overlays: Overlays, connect: Connect, dragging: Dragging);
13
+ private refresh;
14
+ }
15
+ //# sourceMappingURL=CmConnectHandles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmConnectHandles.d.ts","sourceRoot":"","sources":["../../src/connect-handles/CmConnectHandles.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,SAAS,MAAM,6CAA6C,CAAC;AACzE,OAAO,KAAK,OAAO,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,QAAQ,MAAM,2CAA2C,CAAC;AAuCtE,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAIjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAP3B,MAAM,CAAC,OAAO,WAAgE;gBAG3D,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EACnC,OAAO,EAAE,OAAO,EACC,QAAQ,EAAE,QAAQ;IAYrC,OAAO,CAAC,OAAO;CA8ChB"}
@@ -0,0 +1,5 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ /** Four outward connect arrows around a selected context (top/right/bottom/left). */
3
+ export declare const cmConnectHandlesModule: ModuleDeclaration;
4
+ export { default as CmConnectHandles } from './CmConnectHandles.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connect-handles/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAM9C,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,EAAE,iBAIpC,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ .djs-parent{--color-grey-225-10-15:#22242a;--color-grey-225-10-35:#505562;--color-grey-225-10-55:#818798;--color-grey-225-10-75:#b9bcc6;--color-grey-225-10-80:#c7c9d1;--color-grey-225-10-85:#d5d7dd;--color-grey-225-10-90:#e3e4e8;--color-grey-225-10-95:#f1f2f4;--color-grey-225-10-97:#f7f7f8;--color-blue-205-100-45:#0086e6;--color-blue-205-100-45-opacity-30:#0086e64d;--color-blue-205-100-50:#0095ff;--color-blue-205-100-50-opacity-15:#0095ff26;--color-blue-205-100-70:#80caff;--color-blue-205-100-95:#e6f4ff;--color-green-150-86-44:#10d170;--color-red-360-100-40:#c00;--color-red-360-100-45:#e60000;--color-red-360-100-92:#ffd6d6;--color-red-360-100-97:#fff0f0;--color-white:#fff;--color-black:#000;--color-black-opacity-10:#0000001a;--color-black-opacity-30:#0000004d;--canvas-fill-color:var(--color-white);--bendpoint-fill-color:var(--color-blue-205-100-45);--bendpoint-stroke-color:var(--canvas-fill-color);--context-pad-entry-background-color:var(--color-white);--context-pad-entry-hover-background-color:var(--color-grey-225-10-95);--element-dragger-color:var(--color-blue-205-100-50);--element-hover-outline-fill-color:var(--color-blue-205-100-45);--element-selected-outline-stroke-color:var(--color-blue-205-100-50);--element-selected-outline-secondary-stroke-color:var(--color-blue-205-100-70);--lasso-fill-color:var(--color-blue-205-100-50-opacity-15);--lasso-stroke-color:var(--element-selected-outline-stroke-color);--palette-entry-color:var(--color-grey-225-10-15);--palette-entry-hover-color:var(--color-blue-205-100-45);--palette-entry-selected-color:var(--color-blue-205-100-50);--palette-separator-color:var(--color-grey-225-10-75);--palette-toggle-hover-background-color:var(--color-grey-225-10-55);--palette-background-color:var(--color-grey-225-10-97);--palette-border-color:var(--color-grey-225-10-75);--popup-font-family:"IBM Plex Sans", sans-serif;--popup-font-size:14px;--popup-secondary-font-size:.9em;--popup-header-entry-selected-color:var(--color-blue-205-100-50);--popup-header-font-weight:bolder;--popup-header-group-divider-color:var(--color-grey-225-10-75);--popup-background-color:var(--color-white);--popup-border-color:transparent;--popup-shadow-color:var(--color-black-opacity-30);--popup-disabled-color:var(--color-grey-225-10-35);--popup-description-color:var(--color-grey-225-10-35);--popup-no-results-color:var(--color-grey-225-10-55);--popup-entry-title-color:var(--color-grey-225-10-55);--popup-entry-hover-color:var(--color-grey-225-10-95);--popup-search-border-color:var(--color-grey-225-10-75);--popup-search-focus-border-color:var(--color-blue-205-100-50);--popup-search-focus-background-color:var(--color-blue-205-100-95);--resizer-fill-color:var(--color-blue-205-100-45);--resizer-stroke-color:var(--canvas-fill-color);--search-font-family:"IBM Plex Sans", sans-serif;--search-font-size:14px;--search-container-background-color:var(--color-white);--search-shadow-color:var(--color-black-opacity-30);--search-input-border-color:var(--color-grey-225-10-75);--search-input-focus-border-color:var(--color-blue-205-100-50);--search-input-focus-background-color:var(--color-blue-205-100-95);--search-result-hover-background-color:var(--color-grey-225-10-95);--search-result-secondary-color:var(--color-grey-225-10-55);--search-preselected-background-color:var(--color-blue-205-100-50-opacity-15);--shape-attach-allowed-stroke-color:var(--color-blue-205-100-50);--shape-connect-allowed-fill-color:var(--color-grey-225-10-97);--shape-drop-allowed-fill-color:var(--color-grey-225-10-97);--shape-drop-not-allowed-fill-color:var(--color-red-360-100-97);--shape-resize-preview-stroke-color:var(--color-blue-205-100-50);--snap-line-stroke-color:var(--color-blue-205-100-45-opacity-30);--space-tool-crosshair-stroke-color:var(--color-black);--tooltip-error-background-color:var(--color-red-360-100-97);--tooltip-error-border-color:var(--color-red-360-100-45);--tooltip-error-color:var(--color-red-360-100-45)}.djs-container svg.drop-not-ok{background:var(--shape-drop-not-allowed-fill-color)!important}.djs-container svg.new-parent{background:var(--shape-drop-allowed-fill-color)!important}.djs-container svg:focus{outline-offset:-1px}.djs-outline,.djs-selection-outline{fill:none;shape-rendering:geometricprecision;stroke-width:2px}.djs-outline{visibility:hidden}.djs-selection-outline{stroke:var(--element-selected-outline-stroke-color)}.djs-element.selected .djs-outline{visibility:visible;stroke:var(--element-selected-outline-stroke-color)}.djs-connection.selected .djs-outline{display:none}.djs-multi-select .djs-element.selected .djs-outline,.djs-dragging-active-lasso .djs-element.selected .djs-outline{stroke:var(--element-selected-outline-secondary-stroke-color);display:block}.djs-shape.connect-ok .djs-visual>:first-child{fill:var(--shape-connect-allowed-fill-color)!important}.djs-shape.connect-not-ok .djs-visual>:first-child,.djs-shape.drop-not-ok .djs-visual>:first-child{fill:var(--shape-drop-not-allowed-fill-color)!important}.djs-shape.new-parent .djs-visual>:first-child{fill:var(--shape-drop-allowed-fill-color)!important}.drop-not-ok,.connect-not-ok,.drop-not-ok *,.connect-not-ok *{cursor:not-allowed!important}.drop-ok,.connect-ok,.drop-ok *,.connect-ok *{cursor:default!important}.djs-element.attach-ok .djs-visual>:first-child{stroke-width:5px!important;stroke:var(--shape-attach-allowed-stroke-color)!important}.djs-frame.connect-not-ok .djs-visual>:first-child,.djs-frame.drop-not-ok .djs-visual>:first-child{stroke-width:3px!important;stroke:var(--shape-drop-not-allowed-fill-color)!important;fill:none!important}.djs-lasso-overlay{fill:var(--lasso-fill-color);stroke:var(--lasso-stroke-color);stroke-width:2px;shape-rendering:geometricprecision;pointer-events:none}.djs-resize-overlay{fill:none;stroke-dasharray:5 1 3 1;stroke:var(--shape-resize-preview-stroke-color);pointer-events:none}.djs-resizer-hit{fill:none;pointer-events:all}.djs-resizer-visual{fill:var(--resizer-fill-color);stroke-width:1px;stroke:var(--resizer-stroke-color);shape-rendering:geometricprecision}.djs-resizer:hover .djs-resizer-visual{stroke:var(--resizer-stroke-color);stroke-opacity:1}.djs-cursor-resize-ns,.djs-resizer-n,.djs-resizer-s{cursor:ns-resize}.djs-cursor-resize-ew,.djs-resizer-e,.djs-resizer-w{cursor:ew-resize}.djs-cursor-resize-nwse,.djs-resizer-nw,.djs-resizer-se{cursor:nwse-resize}.djs-cursor-resize-nesw,.djs-resizer-ne,.djs-resizer-sw{cursor:nesw-resize}.djs-shape.djs-resizing>.djs-outline{visibility:hidden!important}.djs-shape.djs-resizing>.djs-resizer,.djs-dragger>.djs-resizer{visibility:hidden}.djs-dragger *{fill:none!important;stroke:var(--element-dragger-color)!important}.djs-dragger tspan,.djs-dragger text,.djs-dragger marker circle,.djs-dragger marker path,.djs-dragger marker polygon,.djs-dragger marker polyline,.djs-dragger marker rect{fill:var(--element-dragger-color)!important;stroke:none!important}.djs-dragger marker text,.djs-dragger marker tspan{fill:none!important;stroke:var(--element-dragger-color)!important}.djs-dragging,.djs-dragging>*{opacity:.3!important;pointer-events:none!important}.djs-visual,.djs-outline{pointer-events:none}.djs-element.attach-ok .djs-hit{stroke-width:60px!important}.djs-element>.djs-hit-all,.djs-element>.djs-hit-no-move{pointer-events:all}.djs-element>.djs-hit-stroke,.djs-element>.djs-hit-click-stroke{pointer-events:stroke}.djs-connection .djs-visual{stroke-width:2px;fill:none}.djs-cursor-grab{cursor:-webkit-grab;cursor:-moz-grab;cursor:grab}.djs-cursor-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing}.djs-cursor-crosshair{cursor:crosshair}.djs-cursor-move{cursor:move}.djs-cursor-resize-ns{cursor:ns-resize}.djs-cursor-resize-ew{cursor:ew-resize}.djs-snap-line{stroke:var(--snap-line-stroke-color);stroke-linecap:round;stroke-width:2px;pointer-events:none}.djs-crosshair{stroke:var(--space-tool-crosshair-stroke-color);stroke-linecap:round;stroke-width:1px;pointer-events:none;shape-rendering:geometricprecision;stroke-dasharray:5 5}.djs-palette{box-sizing:border-box;width:48px;position:absolute;top:20px;left:20px}.djs-palette .separator{border:none;border-bottom:solid 1px var(--palette-separator-color);clear:both;margin:5px;padding-top:5px}.djs-palette .entry:before{vertical-align:initial}.djs-palette .djs-palette-toggle{cursor:pointer}.djs-palette .entry,.djs-palette .djs-palette-toggle{color:var(--palette-entry-color);text-align:center;font-size:30px}.djs-palette .entry{float:left}.djs-palette .entry img{max-width:100%}.djs-palette .djs-palette-entries:after{content:"";clear:both;display:table}.djs-palette .djs-palette-toggle:hover{background:var(--palette-toggle-hover-background-color)}.djs-palette .entry:hover{color:var(--palette-entry-hover-color)}.djs-palette .highlighted-entry{color:var(--palette-entry-selected-color)!important}.djs-palette .entry,.djs-palette .djs-palette-toggle{cursor:default;width:46px;height:46px;line-height:46px}.djs-palette.two-column.open{width:94px}.djs-palette:not(.open) .djs-palette-entries{display:none}.djs-palette:not(.open){overflow:hidden}.djs-palette.open .djs-palette-toggle{display:none}.djs-context-pad{pointer-events:none;z-index:100;width:72px;line-height:1;display:none;position:absolute}.djs-context-pad .entry{text-align:center;cursor:default;background-color:var(--context-pad-entry-background-color);width:22px;height:22px;box-shadow:0 0 2px 1px var(--context-pad-entry-background-color);pointer-events:all;vertical-align:middle;border-radius:3px;margin:0 2px 2px 0;font-size:22px;display:inline-block}.djs-context-pad .entry:hover{background:var(--context-pad-entry-hover-background-color)}.djs-context-pad.open{display:block}.djs-popup{box-sizing:border-box;background:var(--popup-background-color);z-index:200;box-shadow:0px 2px 6px var(--popup-shadow-color);border:solid 1px var(--popup-border-color);min-width:120px;max-width:300px;line-height:1;font-size:var(--popup-font-size);font-family:var(--popup-font-family);outline:none;position:fixed;overflow:hidden}.djs-popup-search input{box-sizing:border-box;width:100%;font-size:var(--popup-font-size);border:solid 1px var(--popup-search-border-color);border-radius:2px;padding:3px 6px 3px 28px;line-height:21px}.djs-popup-search input:focus{background-color:var(--popup-search-focus-background-color);border:solid 1px var(--popup-search-focus-border-color);outline:none}.djs-popup-header{align-items:stretch;margin:10px 12px;line-height:20px;display:flex}.djs-popup-header .entry{border-radius:2px}.djs-popup button.entry{background:0 0;border:0;padding:0}.djs-popup-header .entry.active{color:var(--popup-header-entry-selected-color)}.djs-popup-header .entry.disabled{color:inherit}.djs-popup-header-group{flex-direction:row;align-items:center;margin:0;padding:0;list-style:none;display:flex}.djs-popup-header-group .entry{flex-direction:row;align-items:center;display:flex}.djs-popup-header-group+.djs-popup-header-group:before{content:"";background:var(--popup-header-group-divider-color);width:1px;height:20px;margin:0 5px}.djs-popup-search{width:auto;margin:10px 12px;position:relative}.djs-popup-title{font-size:var(--popup-font-size);font-weight:var(--popup-header-font-weight);flex:1;margin:0}.djs-popup-breadcrumbs{margin:10px 12px;line-height:20px;display:flex}.djs-popup-breadcrumbs-item{appearance:none;min-width:0;color:var(--popup-description-color);font:inherit;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:0 0;border:0;outline:none;margin:0;padding:0;display:inline-flex;overflow:hidden}.djs-popup-breadcrumbs-item--separator:before{content:"/";color:var(--popup-description-color);margin:0 4px;display:inline-block}.djs-popup-breadcrumbs-item:hover{color:inherit;text-decoration:underline}.djs-popup-breadcrumbs-item:focus-visible{outline:1px solid var(--popup-search-focus-border-color);outline-offset:2px}.djs-popup-breadcrumbs-item--back{border:1px solid var(--popup-search-border-color);border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;margin-right:6px;padding:2px 3px}.djs-popup-breadcrumbs-item--back:hover{background:#f2f3f5}.djs-popup-breadcrumbs-item--current{font-weight:var(--popup-header-font-weight);color:inherit;cursor:default}.djs-popup-breadcrumbs-item--current:hover{text-decoration:none}.djs-popup-entry-chevron{color:var(--popup-description-color);align-items:center;margin-left:6px;display:flex}.djs-popup-search-icon{position:absolute;top:7px;left:8px}.djs-popup-search-count{font-size:var(--popup-secondary-font-size);color:var(--popup-description-color);margin:0 12px}.djs-popup-results{max-height:280px;margin:7px 3px 7px 12px;padding-right:9px;list-style:none;overflow:auto}.djs-popup-results:focus{outline:none}.djs-popup-group{width:100%;margin:0;padding:0}.djs-popup-body .entry,.djs-popup-body .entry-header{cursor:default;border-radius:4px;padding:5px 7px}.djs-popup-body .entry-header{font-weight:var(--popup-header-font-weight);color:var(--popup-entry-title-color);padding-left:0}.djs-popup [class*=icon] .djs-popup-label,.djs-popup-label:not(:first-child){margin-left:.5em}.djs-popup [class*=icon]:before,.djs-popup-entry-icon{vertical-align:middle;width:1em;height:1em;font-size:1.4em;display:inline-block}.djs-popup-body .entry-header:not(:first-child){margin-top:8px;margin-bottom:2px}.djs-popup-body .entry{flex-direction:row;align-items:stretch;height:min-content;display:flex}.djs-popup .entry.selected{background-color:var(--popup-entry-hover-color)}.djs-popup .entry.disabled{color:var(--popup-disabled-color);cursor:not-allowed}.djs-popup-body .entry:not(:first-child){margin-top:2px}.djs-popup-entry-content{flex-direction:column;flex:1;display:flex}.djs-popup-entry-description{font-size:var(--popup-secondary-font-size);color:var(--popup-description-color);margin-top:.25em}.djs-popup-label,.djs-popup-entry-description{line-height:1.4em}.djs-popup .entry,.djs-popup .entry-header{margin:1px}.djs-popup-body{flex-direction:column;width:auto}.djs-popup ::-webkit-scrollbar{width:6px}.djs-popup ::-webkit-scrollbar-thumb{background-color:#0003;border-radius:3px}.djs-popup ::-webkit-scrollbar-track{box-shadow:none;background:0 0;margin:0;padding:5px}.djs-popup-no-results{color:var(--popup-no-results-color);padding:0 12px 12px}.djs-popup-footer{border-top:solid 1px var(--popup-border-color);padding:5px 12px 7px;display:flex}.djs-popup-results:hover~.djs-popup-footer{display:none}.djs-popup-entry-docs{color:var(--popup-description-color);margin-left:3px;display:none}.djs-popup-body .entry:hover .djs-popup-entry-docs{display:inline}.djs-popup-entry-docs svg{vertical-align:middle;margin:2px}.djs-popup-footer-docs{font-size:var(--popup-secondary-font-size);color:var(--popup-description-color);align-items:center;gap:3px;text-decoration:none;display:inline-flex}.djs-popup-footer-docs:hover{text-decoration:underline}.djs-popup-footer-docs svg{vertical-align:middle;margin:2px}.djs-palette{background:var(--palette-background-color);border:solid 1px var(--palette-border-color);border-radius:2px}.djs-segment-dragger,.djs-bendpoint{display:none}.djs-segment-dragger .djs-visual{fill:var(--bendpoint-fill-color);stroke:var(--bendpoint-stroke-color);stroke-width:1px;stroke-opacity:1;display:none}.djs-segment-dragger:hover .djs-visual{display:block}.djs-bendpoint .djs-visual{fill:var(--bendpoint-fill-color);stroke:var(--bendpoint-stroke-color);stroke-width:1px}.djs-segment-dragger:hover,.djs-bendpoints.hover .djs-segment-dragger,.djs-bendpoints.selected .djs-segment-dragger,.djs-bendpoint:hover,.djs-bendpoints.hover .djs-bendpoint,.djs-bendpoints.selected .djs-bendpoint{display:block}.djs-drag-active .djs-bendpoints *,.djs-bendpoints:not(.hover) .floating,.djs-bendpoint.floating:not(.positioned){display:none}.djs-segment-dragger:hover .djs-visual,.djs-segment-dragger.djs-dragging .djs-visual,.djs-bendpoint:hover .djs-visual,.djs-bendpoint.floating .djs-visual{fill:var(--bendpoint-fill-color);stroke:var(--bendpoint-stroke-color);stroke-opacity:1}.djs-bendpoint.floating .djs-hit{pointer-events:none}.djs-segment-dragger .djs-hit,.djs-bendpoint .djs-hit{fill:none;pointer-events:all}.djs-segment-dragger.horizontal .djs-hit{cursor:ns-resize}.djs-segment-dragger.vertical .djs-hit{cursor:ew-resize}.djs-segment-dragger.djs-dragging .djs-hit{pointer-events:none}.djs-updating,.djs-updating>*{pointer-events:none!important}.djs-updating .djs-context-pad,.djs-updating .djs-outline,.djs-updating .djs-bendpoint,.djs-multi-select .djs-bendpoint,.djs-multi-select .djs-segment-dragger,.connect-ok .djs-bendpoint,.connect-not-ok .djs-bendpoint,.drop-ok .djs-bendpoint,.drop-not-ok .djs-bendpoint{display:none!important}.djs-segment-dragger.djs-dragging,.djs-bendpoint.djs-dragging{opacity:1;display:block}.djs-tooltip-error{background:var(--tooltip-error-background-color);border:solid 1px var(--tooltip-error-border-color);width:160px;color:var(--tooltip-error-color);opacity:.75;border-radius:2px;padding:6px;font-size:12px;line-height:16px}.djs-tooltip-error:hover{opacity:1}.djs-search-open .djs-context-pad{display:none}.djs-search-open .djs-connection.selected .djs-outline{display:block}.djs-search-container{z-index:10;width:25%;min-width:300px;max-width:400px;font-family:var(--search-font-family);font-size:var(--search-font-size);box-shadow:0px 2px 6px var(--search-shadow-color);border-radius:2px;margin-left:auto;margin-right:auto;position:absolute;top:20px;left:0;right:0}.djs-search-container:not(.open){display:none}.djs-search-input{position:relative}.djs-search-input svg{position:absolute;top:7px;left:8px}.djs-search-input input{font-size:var(--search-font-size);border:1px solid var(--search-input-border-color);box-sizing:border-box;border-radius:2px;width:100%;padding:3px 6px 3px 28px;line-height:21px}.djs-search-input input:focus{background-color:var(--search-input-focus-background-color);border:solid 1px var(--search-input-focus-border-color);outline:none}.djs-search-results{background:var(--search-container-background-color);max-height:200px;position:relative;overflow-y:auto}.djs-search-result{padding:6px 8px}.djs-search-result-primary{text-overflow:ellipsis;white-space:nowrap;margin:0 0 3px;overflow:hidden}.djs-search-result-secondary{text-overflow:ellipsis;white-space:nowrap;color:var(--search-result-secondary-color);margin:0;font-family:monospace;overflow:hidden}.djs-search-result:hover,.djs-search-result-selected,.djs-search-result-selected:hover{background:var(--search-result-hover-background-color)}.djs-search-open .djs-element .djs-outline{fill:var(--search-preselected-background-color)!important}.djs-element-hidden,.djs-element-hidden .djs-hit,.djs-element-hidden .djs-outline,.djs-label-hidden .djs-label{display:none!important}.djs-element .djs-hit-stroke,.djs-element .djs-hit-click-stroke,.djs-element .djs-hit-all{cursor:move}:root{--cd-blau:#335de5;--cd-gruen:#00e676;--cd-grau:#f9f7f7;--cd-schwarz:#1d1d1d;--cd-weiss:#fff;--cd-blau-link:#2b50d4;--cd-blau-hell:#6b8aff;--cd-success:#0b7a55;--cd-success-soft:#0b7a551f;--cd-warning:#92610a;--cd-warning-soft:#92610a1f;--cd-danger:#c92a2a;--cd-danger-soft:#c92a2a1f;--cd-info:#2b50d4;--cd-info-soft:#2b50d41f;--cd-gradient-brand:linear-gradient(120deg, #335de5 30%, #00e676);--cd-gradient-format:linear-gradient(135deg, #335de5 0%, #00e676 140%);--cd-space-1:4px;--cd-space-2:8px;--cd-space-3:16px;--cd-space-4:24px;--cd-space-5:32px;--cd-space-6:48px;--cd-space-7:64px;--cd-space-8:96px;--cd-radius-sm:6px;--cd-radius-md:12px;--cd-radius-lg:16px;--cd-radius-pill:999px;--cd-shadow-1:0 1px 2px #1d1d1d0f, 0 1px 3px #1d1d1d1a;--cd-shadow-2:0 4px 12px #1d1d1d1a;--cd-shadow-3:0 12px 32px #1d1d1d29;--cd-motion-fast:.15s;--cd-motion-base:.25s;--cd-motion-slow:.4s;--cd-ease:cubic-bezier(.4, 0, .2, 1);--cd-ease-out:cubic-bezier(0, 0, .2, 1)}.cm-djs-container{--cm-accent:var(--cd-blau);--cm-accent-soft:#335de51f;--cm-line:#e6e2e2;--cm-ink:var(--cd-schwarz);background-color:var(--cd-grau);background-image:radial-gradient(#1d1d1d0f .6px,#0000 .6px);background-size:22px 22px;width:100%;height:100%;font-family:Geist Variable,Geist,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;position:relative;overflow:hidden}.cm-djs-container:focus,.cm-djs-container:focus-visible,.cm-djs-container svg:focus{outline:none}.cm-djs-container .djs-element text{-webkit-user-select:none;user-select:none}.cm-djs-container .djs-element.hover .djs-visual>:first-child:not(text),.cm-djs-container .djs-element.selected .djs-visual>:first-child:not(text){stroke:var(--cm-accent)!important}.cm-djs-container .djs-outline{stroke:var(--cm-accent);stroke-dasharray:3 3}.cm-djs-container .djs-resizer-visual{fill:var(--cd-weiss);stroke:var(--cm-accent)}.cm-djs-container .djs-resizer-hit{fill:none}.djs-palette{background:var(--cd-weiss);border:1px solid var(--cm-line,#e6e2e2);border-radius:var(--cd-radius-md);width:auto;box-shadow:var(--cd-shadow-2);align-items:center;padding:5px 6px;display:flex;top:12px;left:50%;transform:translate(-50%)}.djs-palette .djs-palette-entries,.djs-palette .group{flex-direction:row;align-items:center;gap:2px;display:flex}.djs-palette .entry{float:none;border-radius:var(--cd-radius-sm);width:40px;height:40px;color:var(--cd-schwarz);line-height:normal;transition:background .12s,color .12s,box-shadow .12s;position:relative}.djs-palette .entry:hover{color:var(--cd-blau);background:#335de51f}.djs-palette .group+.group{margin-left:9px;padding-left:9px;position:relative}.djs-palette .group+.group:before{content:"";background:var(--cm-line,#e6e2e2);width:1px;position:absolute;top:6px;bottom:6px;left:0}.cm-palette-entry{justify-content:center;align-items:center;width:100%;min-width:24px;height:100%;min-height:24px;line-height:1;display:flex}.cm-palette-svg{pointer-events:none;display:block}.cm-mode-entry.is-active{background:var(--cm-accent-soft);box-shadow:inset 0 0 0 1.5px var(--cm-accent)}.cm-connect-handle{border-radius:var(--cd-radius-sm);width:28px;height:28px;box-shadow:var(--cd-shadow-1);background:var(--cd-weiss);color:var(--cd-schwarz);cursor:pointer;justify-content:center;align-items:center;transition:background .12s,color .12s;display:flex}.cm-connect-handle:hover{background:var(--cm-accent-soft);color:var(--cm-accent)}.cm-djs-container .cm-label-input{text-align:center;border:1.5px solid var(--cm-accent);border-radius:var(--cd-radius-sm);background:var(--cd-weiss);color:var(--cm-ink);z-index:100;outline:none;padding:3px 6px;font-family:inherit;font-size:13.5px;font-weight:600;box-shadow:0 4px 14px #335de533}.cm-validation-marker{cursor:help;filter:drop-shadow(0 1px 1px #00000040);width:20px;height:20px;position:relative}.cm-validation-tooltip{width:max-content;max-width:280px;color:var(--cm-ink,#1d1d1d);pointer-events:none;z-index:200;background:#fff;border:1px solid #d9d5cc;border-radius:8px;padding:8px 10px;font-family:Geist Variable,Geist,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;font-size:12px;line-height:1.45;display:none;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%);box-shadow:0 6px 18px #0000002e}.cm-validation-marker:hover .cm-validation-tooltip{display:block}.cm-validation-tooltip__message+.cm-validation-tooltip__message{border-top:1px solid #eceae4;margin-top:6px;padding-top:6px}.cm-dragging .djs-overlay-container,.cm-dragging .djs-overlay-container *{pointer-events:none!important}.cm-djs-container .djs-element.connect-ok,.cm-djs-container svg.connect-ok{cursor:crosshair}.cm-djs-container .djs-element.connect-not-ok,.cm-djs-container svg.connect-not-ok{cursor:not-allowed}
2
+ /*$vite$:1*/
@@ -0,0 +1,26 @@
1
+ import { default as BaseRenderer } from 'diagram-js/lib/draw/BaseRenderer';
2
+ import { default as EventBus } from 'diagram-js/lib/core/EventBus';
3
+ import { ConnectionLike, ElementLike, ShapeLike } from 'diagram-js/lib/model/Types';
4
+ export default class ContextMapsRenderer extends BaseRenderer {
5
+ static $inject: string[];
6
+ constructor(eventBus: EventBus);
7
+ canRender(element: ElementLike): boolean;
8
+ drawShape(visuals: SVGElement, element: ShapeLike): SVGElement;
9
+ drawConnection(visuals: SVGElement, connection: ConnectionLike): SVGElement;
10
+ getShapePath(shape: ShapeLike): string;
11
+ getConnectionPath(connection: ConnectionLike): string;
12
+ private drawContext;
13
+ private drawRelationship;
14
+ /**
15
+ * Draws the markers at one relationship end: the direction letter (U/D/S/C) as
16
+ * a plain letter right at the domain (no box), then the integration roles side
17
+ * by side inside a single axis-aligned parent box.
18
+ */
19
+ private endMarkers;
20
+ /** A fixed-size coloured sub-label (own colour + border) inside a parent box. */
21
+ private miniChip;
22
+ /** A single small filled, bordered box (background, text colour, border colour). */
23
+ private chip;
24
+ private appendLabel;
25
+ }
26
+ //# sourceMappingURL=ContextMapsRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMapsRenderer.d.ts","sourceRoot":"","sources":["../../src/draw/ContextMapsRenderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,YAAY,MAAM,kCAAkC,CAAC;AAO5D,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAwBzF,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,YAAY;IAC3D,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;IAY3E,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAKtC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM;IAQ9D,OAAO,CAAC,WAAW;IAsEnB,OAAO,CAAC,gBAAgB;IAuCxB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA8DlB,iFAAiF;IACjF,OAAO,CAAC,QAAQ;IAmChB,oFAAoF;IACpF,OAAO,CAAC,IAAI;IA2CZ,OAAO,CAAC,WAAW;CAqBpB"}
@@ -0,0 +1,17 @@
1
+ import { Point } from 'diagram-js/lib/util/Types';
2
+ export interface EndRoleChipLayout {
3
+ /** The parent box around all chips of this end. */
4
+ box: {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ center: Point;
11
+ chipWidths: number[];
12
+ chipHeight: number;
13
+ innerWidth: number;
14
+ gap: number;
15
+ }
16
+ export declare function endRoleChipLayout(endpoint: Point, toward: Point, direction: string, roles: string[]): EndRoleChipLayout | null;
17
+ //# sourceMappingURL=endRoleChips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endRoleChips.d.ts","sourceRoot":"","sources":["../../src/draw/endRoleChips.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,MAAM,EAAE,KAAK,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EAAE,GACd,iBAAiB,GAAG,IAAI,CA8B1B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A handful of Material-style icon paths (Apache-2.0) used by the context pad,
3
+ * exposed as HTML markup. Reusable by host chrome too.
4
+ */
5
+ export declare const ICON_ARROW_FORWARD = "M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z";
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
+ 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_SWAP = "M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z";
9
+ export declare function iconMarkup(path: string, size?: number): string;
10
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,5 @@
1
+ import { ModuleDeclaration } from 'didi';
2
+ /** SVG rendering of all Context Maps element types (BaseRenderer, priority 1500). */
3
+ export declare const cmDrawModule: ModuleDeclaration;
4
+ export { default as ContextMapsRenderer } from './ContextMapsRenderer.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAG9C,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,iBAG1B,CAAC;AAEF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { RelationshipPattern, SubdomainType } from '@miragon/context-maps-schema-model';
2
+ export declare function contextIconSvg(type: SubdomainType): string;
3
+ export declare function relationshipIconSvg(pattern?: RelationshipPattern): string;
4
+ //# sourceMappingURL=palette-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette-icons.d.ts","sourceRoot":"","sources":["../../src/draw/palette-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AA4B7F,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAM1D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,mBAA2C,GAAG,MAAM,CAUhG"}
@@ -0,0 +1,25 @@
1
+ /** Shared rendering constants (typography, accent, priorities) — Miragon corporate identity.
2
+ * Colours are derived from the single source of truth in `theme/palette.ts` (`MIRAGON`), which
3
+ * mirrors the vendored `--cd-*` brand tokens. */
4
+ /** BaseRenderer default priority is 1000; 1500 wins the render.shape/connection event. */
5
+ export declare const TT_RENDER_PRIORITY = 1500;
6
+ /** Selection / hover accent (Miragon blue — kept in sync with the app theme via the shared palette). */
7
+ export declare const ACCENT: "#335DE5";
8
+ export declare const INK: "#1D1D1D";
9
+ export declare const INK_SOFT = "#5B5B5B";
10
+ export declare const FONT: {
11
+ /**
12
+ * Set directly as the `font-family` attribute on every SVG <text> (canvas
13
+ * labels and therefore the SVG export too) — not inherited from a CSS
14
+ * container. Prefers the self-hosted Miragon typeface Geist (registered as
15
+ * 'Geist Variable' by @fontsource-variable/geist, with 'Geist' as a fallback
16
+ * name), and falls back to a system sans when the host hasn't loaded it (e.g.
17
+ * an exported SVG opened standalone).
18
+ */
19
+ readonly family: "'Geist Variable', 'Geist', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif";
20
+ readonly label: 13.5;
21
+ readonly small: 11;
22
+ };
23
+ /** Paper colour used for the label halo so text stays legible over lines. */
24
+ export declare const PAPER: "#FFFFFF";
25
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/draw/styles.ts"],"names":[],"mappings":"AAAA;;kDAEkD;AAIlD,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;;;;CAKK,CAAC;AAEX,6EAA6E;AAC7E,eAAO,MAAM,KAAK,WAAgB,CAAC"}
@@ -0,0 +1,22 @@
1
+ export { Viewer } from './Viewer.js';
2
+ export { NavigatedViewer } from './NavigatedViewer.js';
3
+ export { Modeler } from './Modeler.js';
4
+ export { CmBaseViewer } from './CmBaseViewer.js';
5
+ export type { CmViewerOptions, EventCallback } from './CmBaseViewer.js';
6
+ export { cmModelModule, CmElementFactory } from './model/index.js';
7
+ export { cmDrawModule, ContextMapsRenderer } from './draw/index.js';
8
+ export { ioModule, CmImporter, CmExporter, saveSVG, ROOT_ID } from './io/index.js';
9
+ export { cmModelingModule, CmModeling } from './modeling/index.js';
10
+ export { cmRulesModule, CmRules } from './rules/index.js';
11
+ export { cmBehaviorsModule, CmFlatModelBehavior } from './behaviors/index.js';
12
+ export { cmPaletteModule, CmPaletteProvider } from './palette/index.js';
13
+ export { cmConnectHandlesModule, CmConnectHandles } from './connect-handles/index.js';
14
+ export { cmLabelEditingModule, CmLabelEditing } from './label-editing/index.js';
15
+ export { cmKeyboardModule, CmKeyboard } from './keyboard/index.js';
16
+ export { cmZOrderModule, CmZOrder } from './zorder/index.js';
17
+ export { isCmElement, isCmContext, isCmRelationship } from './model/di-types.js';
18
+ export type { CmElement, CmContext, CmRelationship } from './model/di-types.js';
19
+ export type { ImportWarning, RootBusinessObject } from './io/index.js';
20
+ export { contextIconSvg, relationshipIconSvg } from './draw/palette-icons.js';
21
+ export { MIRAGON, CD_TOKENS } from './theme/index.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,2BAA2B,CAAC;AAGnC,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,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACpE,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;AACnE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACtF,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,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}