callman-core 1.28.1 → 1.29.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.
Files changed (252) hide show
  1. package/dist/ai/index.d.ts +1 -1
  2. package/dist/ai/index.d.ts.map +1 -1
  3. package/dist/ai/index.js.map +1 -1
  4. package/dist/ai/outputSchemas.d.ts +3 -0
  5. package/dist/ai/outputSchemas.d.ts.map +1 -1
  6. package/dist/ai/outputSchemas.js +1 -0
  7. package/dist/ai/outputSchemas.js.map +1 -1
  8. package/dist/ai/parse/diagram.d.ts.map +1 -1
  9. package/dist/ai/parse/diagram.js +6 -3
  10. package/dist/ai/parse/diagram.js.map +1 -1
  11. package/dist/ai/prompts/diagram.d.ts +7 -3
  12. package/dist/ai/prompts/diagram.d.ts.map +1 -1
  13. package/dist/ai/prompts/diagram.js +44 -5
  14. package/dist/ai/prompts/diagram.js.map +1 -1
  15. package/dist/ai/types.d.ts +6 -0
  16. package/dist/ai/types.d.ts.map +1 -1
  17. package/dist/diagram/bpmn/derive.d.ts +74 -0
  18. package/dist/diagram/bpmn/derive.d.ts.map +1 -0
  19. package/dist/diagram/bpmn/derive.js +392 -0
  20. package/dist/diagram/bpmn/derive.js.map +1 -0
  21. package/dist/diagram/bpmn/index.d.ts +7 -0
  22. package/dist/diagram/bpmn/index.d.ts.map +1 -0
  23. package/dist/diagram/bpmn/index.js +12 -0
  24. package/dist/diagram/bpmn/index.js.map +1 -0
  25. package/dist/diagram/bpmn/patch.d.ts +14 -0
  26. package/dist/diagram/bpmn/patch.d.ts.map +1 -0
  27. package/dist/diagram/bpmn/patch.js +770 -0
  28. package/dist/diagram/bpmn/patch.js.map +1 -0
  29. package/dist/diagram/bpmn/place.d.ts +4 -0
  30. package/dist/diagram/bpmn/place.d.ts.map +1 -0
  31. package/dist/diagram/bpmn/place.js +65 -0
  32. package/dist/diagram/bpmn/place.js.map +1 -0
  33. package/dist/diagram/bpmn/serialize.d.ts +12 -0
  34. package/dist/diagram/bpmn/serialize.d.ts.map +1 -0
  35. package/dist/diagram/bpmn/serialize.js +292 -0
  36. package/dist/diagram/bpmn/serialize.js.map +1 -0
  37. package/dist/diagram/bpmn/types.d.ts +42 -0
  38. package/dist/diagram/bpmn/types.d.ts.map +1 -0
  39. package/dist/diagram/bpmn/types.js +84 -0
  40. package/dist/diagram/bpmn/types.js.map +1 -0
  41. package/dist/diagram/bpmn/xml.d.ts +60 -0
  42. package/dist/diagram/bpmn/xml.d.ts.map +1 -0
  43. package/dist/diagram/bpmn/xml.js +342 -0
  44. package/dist/diagram/bpmn/xml.js.map +1 -0
  45. package/dist/diagram/elkGraph.d.ts +1 -3
  46. package/dist/diagram/elkGraph.d.ts.map +1 -1
  47. package/dist/diagram/elkGraph.js +1 -0
  48. package/dist/diagram/elkGraph.js.map +1 -1
  49. package/dist/diagram/fixtures.d.ts +10 -0
  50. package/dist/diagram/fixtures.d.ts.map +1 -0
  51. package/dist/diagram/fixtures.js +113 -0
  52. package/dist/diagram/fixtures.js.map +1 -0
  53. package/dist/diagram/geometry.d.ts +27 -0
  54. package/dist/diagram/geometry.d.ts.map +1 -0
  55. package/dist/diagram/geometry.js +122 -0
  56. package/dist/diagram/geometry.js.map +1 -0
  57. package/dist/diagram/history.d.ts +36 -0
  58. package/dist/diagram/history.d.ts.map +1 -0
  59. package/dist/diagram/history.js +54 -0
  60. package/dist/diagram/history.js.map +1 -0
  61. package/dist/diagram/ids.d.ts +5 -0
  62. package/dist/diagram/ids.d.ts.map +1 -0
  63. package/dist/diagram/ids.js +52 -0
  64. package/dist/diagram/ids.js.map +1 -0
  65. package/dist/diagram/index.d.ts +14 -2
  66. package/dist/diagram/index.d.ts.map +1 -1
  67. package/dist/diagram/index.js +20 -8
  68. package/dist/diagram/index.js.map +1 -1
  69. package/dist/diagram/layout.d.ts +107 -0
  70. package/dist/diagram/layout.d.ts.map +1 -0
  71. package/dist/diagram/layout.js +356 -0
  72. package/dist/diagram/layout.js.map +1 -0
  73. package/dist/diagram/mermaid/derive.d.ts +55 -0
  74. package/dist/diagram/mermaid/derive.d.ts.map +1 -0
  75. package/dist/diagram/mermaid/derive.js +343 -0
  76. package/dist/diagram/mermaid/derive.js.map +1 -0
  77. package/dist/diagram/mermaid/index.d.ts +8 -0
  78. package/dist/diagram/mermaid/index.d.ts.map +1 -0
  79. package/dist/diagram/mermaid/index.js +24 -0
  80. package/dist/diagram/mermaid/index.js.map +1 -0
  81. package/dist/diagram/mermaid/parse.d.ts +96 -0
  82. package/dist/diagram/mermaid/parse.d.ts.map +1 -0
  83. package/dist/diagram/mermaid/parse.js +672 -0
  84. package/dist/diagram/mermaid/parse.js.map +1 -0
  85. package/dist/diagram/mermaid/patch.d.ts +16 -0
  86. package/dist/diagram/mermaid/patch.d.ts.map +1 -0
  87. package/dist/diagram/mermaid/patch.js +463 -0
  88. package/dist/diagram/mermaid/patch.js.map +1 -0
  89. package/dist/diagram/mermaid/serialize.d.ts +14 -0
  90. package/dist/diagram/mermaid/serialize.d.ts.map +1 -0
  91. package/dist/diagram/mermaid/serialize.js +125 -0
  92. package/dist/diagram/mermaid/serialize.js.map +1 -0
  93. package/dist/diagram/mermaid/shapes.d.ts +11 -0
  94. package/dist/diagram/mermaid/shapes.d.ts.map +1 -0
  95. package/dist/diagram/mermaid/shapes.js +320 -0
  96. package/dist/diagram/mermaid/shapes.js.map +1 -0
  97. package/dist/diagram/migrations.d.ts +1 -0
  98. package/dist/diagram/migrations.d.ts.map +1 -1
  99. package/dist/diagram/migrations.js +7 -2
  100. package/dist/diagram/migrations.js.map +1 -1
  101. package/dist/diagram/normalize.d.ts +9 -1
  102. package/dist/diagram/normalize.d.ts.map +1 -1
  103. package/dist/diagram/normalize.js +194 -0
  104. package/dist/diagram/normalize.js.map +1 -1
  105. package/dist/diagram/ops.d.ts +146 -0
  106. package/dist/diagram/ops.d.ts.map +1 -0
  107. package/dist/diagram/ops.js +823 -0
  108. package/dist/diagram/ops.js.map +1 -0
  109. package/dist/diagram/opsReference.d.ts +3 -0
  110. package/dist/diagram/opsReference.d.ts.map +1 -0
  111. package/dist/diagram/opsReference.js +51 -0
  112. package/dist/diagram/opsReference.js.map +1 -0
  113. package/dist/diagram/patchInput.d.ts +193 -0
  114. package/dist/diagram/patchInput.d.ts.map +1 -0
  115. package/dist/diagram/patchInput.js +621 -0
  116. package/dist/diagram/patchInput.js.map +1 -0
  117. package/dist/diagram/routing/batch.d.ts +45 -0
  118. package/dist/diagram/routing/batch.d.ts.map +1 -0
  119. package/dist/diagram/routing/batch.js +136 -0
  120. package/dist/diagram/routing/batch.js.map +1 -0
  121. package/dist/diagram/routing/curves.d.ts +7 -0
  122. package/dist/diagram/routing/curves.d.ts.map +1 -0
  123. package/dist/diagram/routing/curves.js +120 -0
  124. package/dist/diagram/routing/curves.js.map +1 -0
  125. package/dist/diagram/routing/grid.d.ts +15 -0
  126. package/dist/diagram/routing/grid.d.ts.map +1 -0
  127. package/dist/diagram/routing/grid.js +245 -0
  128. package/dist/diagram/routing/grid.js.map +1 -0
  129. package/dist/diagram/routing/index.d.ts +10 -0
  130. package/dist/diagram/routing/index.d.ts.map +1 -0
  131. package/dist/diagram/routing/index.js +10 -0
  132. package/dist/diagram/routing/index.js.map +1 -0
  133. package/dist/diagram/routing/legacy.d.ts +6 -0
  134. package/dist/diagram/routing/legacy.d.ts.map +1 -0
  135. package/dist/diagram/routing/legacy.js +27 -0
  136. package/dist/diagram/routing/legacy.js.map +1 -0
  137. package/dist/diagram/routing/nudge.d.ts +4 -0
  138. package/dist/diagram/routing/nudge.d.ts.map +1 -0
  139. package/dist/diagram/routing/nudge.js +96 -0
  140. package/dist/diagram/routing/nudge.js.map +1 -0
  141. package/dist/diagram/routing/orthogonal.d.ts +6 -0
  142. package/dist/diagram/routing/orthogonal.d.ts.map +1 -0
  143. package/dist/diagram/routing/orthogonal.js +56 -0
  144. package/dist/diagram/routing/orthogonal.js.map +1 -0
  145. package/dist/diagram/routing/path.d.ts +16 -0
  146. package/dist/diagram/routing/path.d.ts.map +1 -0
  147. package/dist/diagram/routing/path.js +128 -0
  148. package/dist/diagram/routing/path.js.map +1 -0
  149. package/dist/diagram/routing/sides.d.ts +22 -0
  150. package/dist/diagram/routing/sides.d.ts.map +1 -0
  151. package/dist/diagram/routing/sides.js +74 -0
  152. package/dist/diagram/routing/sides.js.map +1 -0
  153. package/dist/diagram/routing/types.d.ts +46 -0
  154. package/dist/diagram/routing/types.d.ts.map +1 -0
  155. package/dist/diagram/routing/types.js +11 -0
  156. package/dist/diagram/routing/types.js.map +1 -0
  157. package/dist/diagram/schema.d.ts +70 -37
  158. package/dist/diagram/schema.d.ts.map +1 -1
  159. package/dist/diagram/schema.js +62 -8
  160. package/dist/diagram/schema.js.map +1 -1
  161. package/dist/diagram/styleInput.d.ts +41 -0
  162. package/dist/diagram/styleInput.d.ts.map +1 -0
  163. package/dist/diagram/styleInput.js +105 -0
  164. package/dist/diagram/styleInput.js.map +1 -0
  165. package/dist/diagram/views.d.ts +9 -0
  166. package/dist/diagram/views.d.ts.map +1 -0
  167. package/dist/diagram/views.js +42 -0
  168. package/dist/diagram/views.js.map +1 -0
  169. package/dist-cjs/ai/index.js.map +1 -1
  170. package/dist-cjs/ai/outputSchemas.js +1 -0
  171. package/dist-cjs/ai/outputSchemas.js.map +1 -1
  172. package/dist-cjs/ai/parse/diagram.js +6 -3
  173. package/dist-cjs/ai/parse/diagram.js.map +1 -1
  174. package/dist-cjs/ai/prompts/diagram.js +44 -5
  175. package/dist-cjs/ai/prompts/diagram.js.map +1 -1
  176. package/dist-cjs/diagram/bpmn/derive.js +398 -0
  177. package/dist-cjs/diagram/bpmn/derive.js.map +1 -0
  178. package/dist-cjs/diagram/bpmn/index.js +31 -0
  179. package/dist-cjs/diagram/bpmn/index.js.map +1 -0
  180. package/dist-cjs/diagram/bpmn/patch.js +774 -0
  181. package/dist-cjs/diagram/bpmn/patch.js.map +1 -0
  182. package/dist-cjs/diagram/bpmn/place.js +69 -0
  183. package/dist-cjs/diagram/bpmn/place.js.map +1 -0
  184. package/dist-cjs/diagram/bpmn/serialize.js +299 -0
  185. package/dist-cjs/diagram/bpmn/serialize.js.map +1 -0
  186. package/dist-cjs/diagram/bpmn/types.js +99 -0
  187. package/dist-cjs/diagram/bpmn/types.js.map +1 -0
  188. package/dist-cjs/diagram/bpmn/xml.js +367 -0
  189. package/dist-cjs/diagram/bpmn/xml.js.map +1 -0
  190. package/dist-cjs/diagram/elkGraph.js +1 -0
  191. package/dist-cjs/diagram/elkGraph.js.map +1 -1
  192. package/dist-cjs/diagram/fixtures.js +117 -0
  193. package/dist-cjs/diagram/fixtures.js.map +1 -0
  194. package/dist-cjs/diagram/geometry.js +143 -0
  195. package/dist-cjs/diagram/geometry.js.map +1 -0
  196. package/dist-cjs/diagram/history.js +65 -0
  197. package/dist-cjs/diagram/history.js.map +1 -0
  198. package/dist-cjs/diagram/ids.js +58 -0
  199. package/dist-cjs/diagram/ids.js.map +1 -0
  200. package/dist-cjs/diagram/index.js +23 -8
  201. package/dist-cjs/diagram/index.js.map +1 -1
  202. package/dist-cjs/diagram/layout.js +364 -0
  203. package/dist-cjs/diagram/layout.js.map +1 -0
  204. package/dist-cjs/diagram/mermaid/derive.js +353 -0
  205. package/dist-cjs/diagram/mermaid/derive.js.map +1 -0
  206. package/dist-cjs/diagram/mermaid/index.js +44 -0
  207. package/dist-cjs/diagram/mermaid/index.js.map +1 -0
  208. package/dist-cjs/diagram/mermaid/parse.js +681 -0
  209. package/dist-cjs/diagram/mermaid/parse.js.map +1 -0
  210. package/dist-cjs/diagram/mermaid/patch.js +468 -0
  211. package/dist-cjs/diagram/mermaid/patch.js.map +1 -0
  212. package/dist-cjs/diagram/mermaid/serialize.js +133 -0
  213. package/dist-cjs/diagram/mermaid/serialize.js.map +1 -0
  214. package/dist-cjs/diagram/mermaid/shapes.js +327 -0
  215. package/dist-cjs/diagram/mermaid/shapes.js.map +1 -0
  216. package/dist-cjs/diagram/migrations.js +9 -3
  217. package/dist-cjs/diagram/migrations.js.map +1 -1
  218. package/dist-cjs/diagram/normalize.js +198 -1
  219. package/dist-cjs/diagram/normalize.js.map +1 -1
  220. package/dist-cjs/diagram/ops.js +829 -0
  221. package/dist-cjs/diagram/ops.js.map +1 -0
  222. package/dist-cjs/diagram/opsReference.js +55 -0
  223. package/dist-cjs/diagram/opsReference.js.map +1 -0
  224. package/dist-cjs/diagram/patchInput.js +636 -0
  225. package/dist-cjs/diagram/patchInput.js.map +1 -0
  226. package/dist-cjs/diagram/routing/batch.js +142 -0
  227. package/dist-cjs/diagram/routing/batch.js.map +1 -0
  228. package/dist-cjs/diagram/routing/curves.js +127 -0
  229. package/dist-cjs/diagram/routing/curves.js.map +1 -0
  230. package/dist-cjs/diagram/routing/grid.js +250 -0
  231. package/dist-cjs/diagram/routing/grid.js.map +1 -0
  232. package/dist-cjs/diagram/routing/index.js +29 -0
  233. package/dist-cjs/diagram/routing/index.js.map +1 -0
  234. package/dist-cjs/diagram/routing/legacy.js +32 -0
  235. package/dist-cjs/diagram/routing/legacy.js.map +1 -0
  236. package/dist-cjs/diagram/routing/nudge.js +100 -0
  237. package/dist-cjs/diagram/routing/nudge.js.map +1 -0
  238. package/dist-cjs/diagram/routing/orthogonal.js +62 -0
  239. package/dist-cjs/diagram/routing/orthogonal.js.map +1 -0
  240. package/dist-cjs/diagram/routing/path.js +137 -0
  241. package/dist-cjs/diagram/routing/path.js.map +1 -0
  242. package/dist-cjs/diagram/routing/sides.js +82 -0
  243. package/dist-cjs/diagram/routing/sides.js.map +1 -0
  244. package/dist-cjs/diagram/routing/types.js +15 -0
  245. package/dist-cjs/diagram/routing/types.js.map +1 -0
  246. package/dist-cjs/diagram/schema.js +64 -9
  247. package/dist-cjs/diagram/schema.js.map +1 -1
  248. package/dist-cjs/diagram/styleInput.js +113 -0
  249. package/dist-cjs/diagram/styleInput.js.map +1 -0
  250. package/dist-cjs/diagram/views.js +46 -0
  251. package/dist-cjs/diagram/views.js.map +1 -0
  252. package/package.json +1 -1
@@ -0,0 +1,107 @@
1
+ import { type NodeIndex } from "./geometry.js";
2
+ import type { DiagramOp } from "./ops.js";
3
+ import type { DiagramDocument, HandleSide, LayoutAlgorithm, LayoutDirection, Point } from "./schema.js";
4
+ export interface ElkPointLike {
5
+ x: number;
6
+ y: number;
7
+ }
8
+ export interface ElkEdgeSectionLike {
9
+ startPoint?: ElkPointLike;
10
+ endPoint?: ElkPointLike;
11
+ bendPoints?: ElkPointLike[];
12
+ }
13
+ export interface ElkPortLike {
14
+ id: string;
15
+ layoutOptions?: Record<string, string>;
16
+ x?: number;
17
+ y?: number;
18
+ width?: number;
19
+ height?: number;
20
+ }
21
+ export interface ElkEdgeLike {
22
+ id: string;
23
+ sources: string[];
24
+ targets: string[];
25
+ sections?: ElkEdgeSectionLike[];
26
+ layoutOptions?: Record<string, string>;
27
+ }
28
+ export interface ElkGraphLike {
29
+ id: string;
30
+ layoutOptions?: Record<string, string>;
31
+ children?: ElkGraphLike[];
32
+ edges?: ElkEdgeLike[];
33
+ ports?: ElkPortLike[];
34
+ x?: number;
35
+ y?: number;
36
+ width?: number;
37
+ height?: number;
38
+ }
39
+ export interface LayoutEngine {
40
+ layout(graph: ElkGraphLike): Promise<ElkGraphLike>;
41
+ }
42
+ export type LayoutMode = "full" | "selection" | "tidy";
43
+ export interface LayoutRequest {
44
+ algorithm?: LayoutAlgorithm;
45
+ direction?: LayoutDirection;
46
+ mode?: LayoutMode;
47
+ nodeIds?: string[];
48
+ respectHandles?: boolean;
49
+ assignSides?: boolean;
50
+ keepBendpoints?: boolean;
51
+ spacing?: {
52
+ node?: number;
53
+ layer?: number;
54
+ };
55
+ }
56
+ interface ResolvedRequest {
57
+ algorithm: LayoutAlgorithm;
58
+ direction: LayoutDirection;
59
+ mode: LayoutMode;
60
+ nodeIds: string[];
61
+ respectHandles: boolean;
62
+ assignSides: boolean;
63
+ keepBendpoints: boolean;
64
+ spacing: {
65
+ node: number;
66
+ layer: number;
67
+ };
68
+ }
69
+ export declare const CONTAINER_PADDING: {
70
+ readonly top: 48;
71
+ readonly left: 24;
72
+ readonly bottom: 24;
73
+ readonly right: 24;
74
+ };
75
+ export declare const layoutOptionsFor: (request: LayoutRequest) => Record<string, string>;
76
+ export interface BuiltLayout {
77
+ graph: ElkGraphLike;
78
+ scope: Set<string>;
79
+ anchor: Point;
80
+ edgeIds: Set<string>;
81
+ request: ResolvedRequest;
82
+ }
83
+ export declare const buildLayoutGraph: (doc: DiagramDocument, request?: LayoutRequest) => BuiltLayout;
84
+ export interface LayoutOpsResult {
85
+ ops: DiagramOp[];
86
+ sides: Record<string, {
87
+ source?: HandleSide;
88
+ target?: HandleSide;
89
+ }>;
90
+ bendpoints: Record<string, Point[]>;
91
+ }
92
+ export declare const layoutResultToOps: (doc: DiagramDocument, built: BuiltLayout, result: ElkGraphLike) => LayoutOpsResult;
93
+ export interface RunLayoutResult {
94
+ ops: DiagramOp[];
95
+ engine: "elk" | "grid";
96
+ warning?: string;
97
+ }
98
+ export declare const runLayout: (doc: DiagramDocument, request: LayoutRequest, engine: LayoutEngine) => Promise<RunLayoutResult>;
99
+ export interface GridLayoutOptions {
100
+ columns?: number;
101
+ gap?: number;
102
+ origin?: Point;
103
+ nodeIds?: string[];
104
+ }
105
+ export declare const gridLayoutOps: (doc: DiagramDocument, options?: GridLayoutOptions) => DiagramOp[];
106
+ export type { NodeIndex };
107
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/diagram/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,356 @@
1
+ // Automatic layout: build an ELK graph from the document, turn ELK's answer
2
+ // into OPS. elkjs itself is a HOST dependency (the desktop runs it in a Web
3
+ // Worker, the MCP server in-process); this module is the pure halves: the
4
+ // graph builder and the result-to-ops converter, plus a deterministic grid
5
+ // fallback for hosts without an engine.
6
+ //
7
+ // "Positions from layout, paths from the router": layout moves and resizes
8
+ // nodes and clears stale manual routes — it never bakes edge geometry, so
9
+ // what ELK decided survives the next drag instead of turning into pinned
10
+ // bends that go stale (the 1.28 behaviour this replaces).
11
+ //
12
+ // Modes:
13
+ // full — every visible, unlocked node; containers laid out inside
14
+ // and sized to fit (hierarchyHandling INCLUDE_CHILDREN).
15
+ // selection — only the given nodes (+ their contents); the result stays
16
+ // anchored where the selection was.
17
+ // tidy — ELK's interactive mode: keeps the user's ordering and
18
+ // layering, only cleans up spacing and alignment.
19
+ import { absolutePosition, absoluteRect, anchorSide, descendantIds, indexNodes } from "./geometry.js";
20
+ const resolveRequest = (request) => ({
21
+ algorithm: request.algorithm ?? "layered",
22
+ direction: request.direction ?? "DOWN",
23
+ mode: request.mode ?? "full",
24
+ nodeIds: request.nodeIds ?? [],
25
+ respectHandles: request.respectHandles ?? true,
26
+ assignSides: request.assignSides ?? false,
27
+ keepBendpoints: request.keepBendpoints ?? false,
28
+ spacing: { node: request.spacing?.node ?? 48, layer: request.spacing?.layer ?? 80 },
29
+ });
30
+ export const CONTAINER_PADDING = { top: 48, left: 24, bottom: 24, right: 24 };
31
+ export const layoutOptionsFor = (request) => {
32
+ const r = resolveRequest(request);
33
+ const common = {
34
+ "elk.hierarchyHandling": "INCLUDE_CHILDREN",
35
+ "elk.spacing.nodeNode": String(r.spacing.node),
36
+ "elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES",
37
+ };
38
+ switch (r.algorithm) {
39
+ case "force":
40
+ case "organic":
41
+ return { ...common, "elk.algorithm": "stress", "elk.stress.desiredEdgeLength": String(r.spacing.layer * 2) };
42
+ case "radial":
43
+ return { ...common, "elk.algorithm": "radial", "elk.spacing.nodeNode": String(Math.max(r.spacing.node, 60)) };
44
+ case "tree":
45
+ return { ...common, "elk.algorithm": "mrtree", "elk.direction": r.direction };
46
+ case "layered":
47
+ default: {
48
+ const options = {
49
+ ...common,
50
+ "elk.algorithm": "layered",
51
+ "elk.direction": r.direction,
52
+ "elk.layered.spacing.nodeNodeBetweenLayers": String(r.spacing.layer),
53
+ "elk.layered.spacing.edgeNodeBetweenLayers": "24",
54
+ "elk.edgeRouting": "ORTHOGONAL",
55
+ "elk.layered.nodePlacement.bk.fixedAlignment": "BALANCED",
56
+ };
57
+ if (r.mode === "tidy") {
58
+ Object.assign(options, {
59
+ "elk.interactiveLayout": "true",
60
+ "elk.layered.cycleBreaking.strategy": "INTERACTIVE",
61
+ "elk.layered.layering.strategy": "INTERACTIVE",
62
+ "elk.layered.crossingMinimization.semiInteractive": "true",
63
+ "elk.layered.nodePlacement.strategy": "INTERACTIVE",
64
+ });
65
+ }
66
+ return options;
67
+ }
68
+ }
69
+ };
70
+ const ELK_SIDE = { top: "NORTH", right: "EAST", bottom: "SOUTH", left: "WEST" };
71
+ const portId = (nodeId, side) => `${nodeId}::${side}`;
72
+ export const buildLayoutGraph = (doc, request = {}) => {
73
+ const r = resolveRequest(request);
74
+ const byId = indexNodes(doc.nodes);
75
+ const eligible = (node) => !node.hidden && !node.locked;
76
+ // The scope: which nodes move. Roots of the scope are laid out by ELK's
77
+ // root graph; their descendants are nested under them.
78
+ let roots;
79
+ if (r.mode === "selection") {
80
+ const wanted = new Set(r.nodeIds);
81
+ const selected = doc.nodes.filter((node) => wanted.has(node.id) && eligible(node));
82
+ // A selected node inside a selected container is nested, not a root.
83
+ roots = selected.filter((node) => !selected.some((other) => other.id !== node.id && descendantIds(other.id, doc.nodes).includes(node.id)));
84
+ }
85
+ else {
86
+ roots = doc.nodes.filter((node) => !node.parentId && eligible(node));
87
+ }
88
+ const scope = new Set();
89
+ for (const root of roots) {
90
+ scope.add(root.id);
91
+ for (const id of descendantIds(root.id, doc.nodes)) {
92
+ const node = byId.get(id);
93
+ if (eligible(node))
94
+ scope.add(id);
95
+ }
96
+ }
97
+ const edgeIds = new Set();
98
+ const portsByNode = new Map();
99
+ const elkEdges = [];
100
+ for (const edge of doc.edges) {
101
+ if (!edge.source || !edge.target || !scope.has(edge.source) || !scope.has(edge.target))
102
+ continue;
103
+ if (edge.source === edge.target)
104
+ continue;
105
+ edgeIds.add(edge.id);
106
+ let sourceRef = edge.source;
107
+ let targetRef = edge.target;
108
+ if (r.respectHandles) {
109
+ if (edge.sourceHandle) {
110
+ sourceRef = portId(edge.source, edge.sourceHandle);
111
+ (portsByNode.get(edge.source) ?? portsByNode.set(edge.source, new Set()).get(edge.source))?.add(edge.sourceHandle);
112
+ }
113
+ if (edge.targetHandle) {
114
+ targetRef = portId(edge.target, edge.targetHandle);
115
+ (portsByNode.get(edge.target) ?? portsByNode.set(edge.target, new Set()).get(edge.target))?.add(edge.targetHandle);
116
+ }
117
+ }
118
+ elkEdges.push({ id: edge.id, sources: [sourceRef], targets: [targetRef] });
119
+ }
120
+ const childrenOf = (parentId) => doc.nodes.filter((node) => node.parentId === parentId && scope.has(node.id));
121
+ const containerOptions = () => ({
122
+ "elk.algorithm": "layered",
123
+ "elk.direction": r.direction,
124
+ "elk.layered.spacing.nodeNodeBetweenLayers": String(Math.round(r.spacing.layer * 0.75)),
125
+ "elk.spacing.nodeNode": String(r.spacing.node),
126
+ "elk.padding": `[top=${CONTAINER_PADDING.top},left=${CONTAINER_PADDING.left},bottom=${CONTAINER_PADDING.bottom},right=${CONTAINER_PADDING.right}]`,
127
+ "elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES",
128
+ });
129
+ const toElk = (node) => {
130
+ const kids = node.collapsed ? [] : childrenOf(node.id);
131
+ const size = node.collapsed && node.collapsedSize ? node.collapsedSize : node.size;
132
+ const ports = portsByNode.get(node.id);
133
+ const out = { id: node.id };
134
+ if (kids.length > 0) {
135
+ out.layoutOptions = containerOptions();
136
+ out.children = kids.map(toElk);
137
+ }
138
+ else {
139
+ out.width = size.width;
140
+ out.height = size.height;
141
+ }
142
+ if (ports && ports.size > 0) {
143
+ out.layoutOptions = { ...(out.layoutOptions ?? {}), "elk.portConstraints": "FIXED_SIDE" };
144
+ out.ports = [...ports].map((side) => ({ id: portId(node.id, side), layoutOptions: { "elk.port.side": ELK_SIDE[side] }, width: 1, height: 1 }));
145
+ }
146
+ if (r.mode === "tidy") {
147
+ const abs = absolutePosition(node, byId);
148
+ out.x = abs.x;
149
+ out.y = abs.y;
150
+ out.layoutOptions = { ...(out.layoutOptions ?? {}), "elk.position": `(${abs.x},${abs.y})` };
151
+ }
152
+ return out;
153
+ };
154
+ const rects = roots.map((node) => absoluteRect(node, byId));
155
+ const anchor = rects.length > 0 ? { x: Math.min(...rects.map((rect) => rect.x)), y: Math.min(...rects.map((rect) => rect.y)) } : { x: 80, y: 80 };
156
+ return {
157
+ graph: { id: "root", layoutOptions: layoutOptionsFor(request), children: roots.map(toElk), edges: elkEdges },
158
+ scope,
159
+ anchor,
160
+ edgeIds,
161
+ request: r,
162
+ };
163
+ };
164
+ const nearestSideOf = (rect, point) => anchorSide({ x: rect.width > 0 ? (point.x - rect.x) / rect.width : 0.5, y: rect.height > 0 ? (point.y - rect.y) / rect.height : 0.5 });
165
+ export const layoutResultToOps = (doc, built, result) => {
166
+ const byId = indexNodes(doc.nodes);
167
+ const absolute = new Map(); // laid-out nodes, absolute
168
+ const sizes = new Map();
169
+ const rawEdges = [];
170
+ const walk = (node, originX, originY) => {
171
+ for (const edge of node.edges ?? []) {
172
+ const section = edge.sections?.[0];
173
+ if (!section)
174
+ continue;
175
+ const toAbs = (p) => ({ x: Math.round(originX + p.x), y: Math.round(originY + p.y) });
176
+ rawEdges.push({
177
+ id: edge.id,
178
+ start: section.startPoint ? toAbs(section.startPoint) : undefined,
179
+ end: section.endPoint ? toAbs(section.endPoint) : undefined,
180
+ bends: (section.bendPoints ?? []).map(toAbs),
181
+ });
182
+ }
183
+ for (const child of node.children ?? []) {
184
+ const x = originX + (child.x ?? 0);
185
+ const y = originY + (child.y ?? 0);
186
+ const width = child.width ?? byId.get(child.id)?.size.width ?? 0;
187
+ const height = child.height ?? byId.get(child.id)?.size.height ?? 0;
188
+ absolute.set(child.id, { x: Math.round(x), y: Math.round(y), width, height });
189
+ if (typeof child.width === "number" && typeof child.height === "number" && (child.children?.length ?? 0) > 0) {
190
+ sizes.set(child.id, { width: Math.round(child.width), height: Math.round(child.height) });
191
+ }
192
+ walk(child, x, y);
193
+ }
194
+ };
195
+ walk(result, built.anchor.x, built.anchor.y);
196
+ // Absolute origin of any node: laid out → ELK, else the document.
197
+ const originOf = (id) => {
198
+ if (!id)
199
+ return { x: 0, y: 0 };
200
+ const laid = absolute.get(id);
201
+ if (laid)
202
+ return { x: laid.x, y: laid.y };
203
+ const node = byId.get(id);
204
+ return node ? absolutePosition(node, byId) : { x: 0, y: 0 };
205
+ };
206
+ const moves = [];
207
+ const resizes = [];
208
+ for (const node of doc.nodes) {
209
+ const laid = absolute.get(node.id);
210
+ if (!laid)
211
+ continue;
212
+ const parentOrigin = originOf(node.parentId);
213
+ const position = { x: laid.x - parentOrigin.x, y: laid.y - parentOrigin.y };
214
+ if (position.x !== node.position.x || position.y !== node.position.y)
215
+ moves.push({ id: node.id, position });
216
+ const size = sizes.get(node.id);
217
+ if (size && !node.collapsed && (size.width !== node.size.width || size.height !== node.size.height)) {
218
+ resizes.push({ op: "resizeNode", id: node.id, size });
219
+ }
220
+ }
221
+ const sides = {};
222
+ const bendpoints = {};
223
+ const edgeOps = [];
224
+ const rawById = new Map(rawEdges.map((edge) => [edge.id, edge]));
225
+ for (const edge of doc.edges) {
226
+ if (!built.edgeIds.has(edge.id))
227
+ continue;
228
+ const raw = rawById.get(edge.id);
229
+ const changes = {};
230
+ // A laid-out edge starts fresh: manual bends and legacy pins go.
231
+ if (edge.waypoints)
232
+ changes.waypoints = null;
233
+ if (edge.sourceAnchor)
234
+ changes.sourceAnchor = null;
235
+ if (edge.targetAnchor)
236
+ changes.targetAnchor = null;
237
+ if (edge.routing === "straight" && (edge.sourceAnchor || edge.targetAnchor))
238
+ changes.routing = null;
239
+ if (raw) {
240
+ const source = edge.source ? absolute.get(edge.source) : undefined;
241
+ const target = edge.target ? absolute.get(edge.target) : undefined;
242
+ if (raw.start && source)
243
+ sides[edge.id] = { ...(sides[edge.id] ?? {}), source: nearestSideOf(source, raw.start) };
244
+ if (raw.end && target)
245
+ sides[edge.id] = { ...(sides[edge.id] ?? {}), target: nearestSideOf(target, raw.end) };
246
+ if (raw.bends.length > 0)
247
+ bendpoints[edge.id] = raw.bends;
248
+ if (built.request.assignSides) {
249
+ const chosen = sides[edge.id];
250
+ if (chosen?.source && !edge.sourceHandle)
251
+ changes.sourceHandle = chosen.source;
252
+ if (chosen?.target && !edge.targetHandle)
253
+ changes.targetHandle = chosen.target;
254
+ }
255
+ if (built.request.keepBendpoints && raw.bends.length > 0) {
256
+ changes.waypoints = raw.bends;
257
+ changes.routing = "orthogonal";
258
+ }
259
+ }
260
+ if (Object.keys(changes).length > 0)
261
+ edgeOps.push({ op: "updateEdge", id: edge.id, changes });
262
+ }
263
+ const ops = [];
264
+ if (moves.length > 0)
265
+ ops.push({ op: "moveNodes", moves });
266
+ ops.push(...resizes, ...edgeOps);
267
+ return { ops: ops.length > 0 ? [{ op: "batch", label: "Auto layout", ops }] : [], sides, bendpoints };
268
+ };
269
+ export const runLayout = async (doc, request, engine) => {
270
+ const built = buildLayoutGraph(doc, request);
271
+ if (built.scope.size === 0)
272
+ return { ops: [], engine: "elk" };
273
+ try {
274
+ const result = await engine.layout(built.graph);
275
+ return { ops: layoutResultToOps(doc, built, result).ops, engine: "elk" };
276
+ }
277
+ catch (error) {
278
+ return {
279
+ ops: gridLayoutOps(doc, { nodeIds: request.mode === "selection" ? request.nodeIds : undefined }),
280
+ engine: "grid",
281
+ warning: `Automatic layout fell back to a grid: ${error instanceof Error ? error.message : String(error)}`,
282
+ };
283
+ }
284
+ };
285
+ // Deterministic grid for hosts without elkjs: nodes in reading order, cell
286
+ // size = the largest node, children of a container placed inside it in a
287
+ // sub-grid and the container sized to fit. Emits the same op shape ELK does.
288
+ export const gridLayoutOps = (doc, options = {}) => {
289
+ const gap = options.gap ?? 48;
290
+ const origin = options.origin ?? { x: 80, y: 80 };
291
+ const byId = indexNodes(doc.nodes);
292
+ const wanted = options.nodeIds ? new Set(options.nodeIds) : null;
293
+ const childrenOf = (parentId) => doc.nodes.filter((node) => (node.parentId ?? undefined) === parentId && !node.hidden && (!wanted || parentId !== undefined || wanted.has(node.id)));
294
+ const moves = [];
295
+ const resizes = [];
296
+ const layoutGroup = (nodes, padTop, padSide) => {
297
+ const sized = nodes.map((node) => {
298
+ const kids = node.collapsed ? [] : childrenOf(node.id);
299
+ if (kids.length === 0) {
300
+ const size = node.collapsed && node.collapsedSize ? node.collapsedSize : node.size;
301
+ return { node, width: size.width, height: size.height };
302
+ }
303
+ const inner = layoutGroup(kids, CONTAINER_PADDING.top, CONTAINER_PADDING.left);
304
+ if (inner.width !== node.size.width || inner.height !== node.size.height) {
305
+ resizes.push({ op: "resizeNode", id: node.id, size: inner });
306
+ }
307
+ return { node, width: inner.width, height: inner.height };
308
+ });
309
+ if (sized.length === 0)
310
+ return { width: padSide * 2, height: padTop + padSide };
311
+ const columns = options.columns ?? Math.max(1, Math.ceil(Math.sqrt(sized.length)));
312
+ const cellW = Math.max(...sized.map((entry) => entry.width));
313
+ const cellH = Math.max(...sized.map((entry) => entry.height));
314
+ sized.forEach((entry, index) => {
315
+ const col = index % columns;
316
+ const row = Math.floor(index / columns);
317
+ const position = { x: padSide + col * (cellW + gap), y: padTop + row * (cellH + gap) };
318
+ if (!entry.node.locked)
319
+ moves.push({ id: entry.node.id, position });
320
+ });
321
+ const rows = Math.ceil(sized.length / columns);
322
+ return {
323
+ width: padSide * 2 + columns * cellW + (columns - 1) * gap,
324
+ height: padTop + padSide + rows * cellH + (rows - 1) * gap,
325
+ };
326
+ };
327
+ const roots = childrenOf(undefined);
328
+ if (roots.length > 0)
329
+ layoutGroup(roots, 0, 0);
330
+ // Root-level positions get the origin; nested ones are already relative.
331
+ const rootIds = new Set(roots.map((node) => node.id));
332
+ const finalMoves = moves
333
+ .map((move) => (rootIds.has(move.id) ? { id: move.id, position: { x: move.position.x + origin.x, y: move.position.y + origin.y } } : move))
334
+ .filter((move) => {
335
+ const node = byId.get(move.id);
336
+ return node.position.x !== move.position.x || node.position.y !== move.position.y;
337
+ });
338
+ const edgeOps = doc.edges
339
+ .filter((edge) => edge.waypoints || edge.sourceAnchor || edge.targetAnchor)
340
+ .map((edge) => ({
341
+ op: "updateEdge",
342
+ id: edge.id,
343
+ changes: {
344
+ ...(edge.waypoints ? { waypoints: null } : {}),
345
+ ...(edge.sourceAnchor ? { sourceAnchor: null } : {}),
346
+ ...(edge.targetAnchor ? { targetAnchor: null } : {}),
347
+ ...(edge.routing === "straight" && (edge.sourceAnchor || edge.targetAnchor) ? { routing: null } : {}),
348
+ },
349
+ }));
350
+ const ops = [];
351
+ if (finalMoves.length > 0)
352
+ ops.push({ op: "moveNodes", moves: finalMoves });
353
+ ops.push(...resizes, ...edgeOps);
354
+ return ops.length > 0 ? [{ op: "batch", label: "Auto layout", ops }] : [];
355
+ };
356
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/diagram/layout.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,wCAAwC;AACxC,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,0DAA0D;AAC1D,EAAE;AACF,SAAS;AACT,0EAA0E;AAC1E,wEAAwE;AACxE,2EAA2E;AAC3E,mDAAmD;AACnD,uEAAuE;AACvE,iEAAiE;AACjE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAA+C,MAAM,eAAe,CAAC;AAgFnJ,MAAM,cAAc,GAAG,CAAC,OAAsB,EAAmB,EAAE,CAAC,CAAC;IACnE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;IACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;IACtC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM;IAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;IAC9B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;IAC9C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;IACzC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;IAC/C,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAW,CAAC;AAEvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAA0B,EAAE;IACjF,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAA2B;QACrC,uBAAuB,EAAE,kBAAkB;QAC3C,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9C,yCAAyC,EAAE,iBAAiB;KAC7D,CAAC;IACF,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,8BAA8B,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/G,KAAK,QAAQ;YACX,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QAChH,KAAK,MAAM;YACT,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAChF,KAAK,SAAS,CAAC;QACf,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,OAAO,GAA2B;gBACtC,GAAG,MAAM;gBACT,eAAe,EAAE,SAAS;gBAC1B,eAAe,EAAE,CAAC,CAAC,SAAS;gBAC5B,2CAA2C,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpE,2CAA2C,EAAE,IAAI;gBACjD,iBAAiB,EAAE,YAAY;gBAC/B,6CAA6C,EAAE,UAAU;aAC1D,CAAC;YACF,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;oBACrB,uBAAuB,EAAE,MAAM;oBAC/B,oCAAoC,EAAE,aAAa;oBACnD,+BAA+B,EAAE,aAAa;oBAC9C,kDAAkD,EAAE,MAAM;oBAC1D,oCAAoC,EAAE,aAAa;iBACpD,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAgBF,MAAM,QAAQ,GAA+B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5G,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,IAAgB,EAAU,EAAE,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAElF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAoB,EAAE,UAAyB,EAAE,EAAe,EAAE;IACjG,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,CAAC,IAAiB,EAAW,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAE9E,wEAAwE;IACxE,uDAAuD;IACvD,IAAI,KAAoB,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnF,qEAAqE;QACrE,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7I,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAgB,CAAC;YACzC,IAAI,QAAQ,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,SAAS;QACjG,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrH,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnD,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrH,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAiB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrI,MAAM,gBAAgB,GAAG,GAA2B,EAAE,CAAC,CAAC;QACtD,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,CAAC,CAAC,SAAS;QAC5B,2CAA2C,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QACvF,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9C,aAAa,EAAE,QAAQ,iBAAiB,CAAC,GAAG,SAAS,iBAAiB,CAAC,IAAI,WAAW,iBAAiB,CAAC,MAAM,UAAU,iBAAiB,CAAC,KAAK,GAAG;QAClJ,yCAAyC,EAAE,iBAAiB;KAC7D,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAgB,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,GAAS,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACzF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,GAAG,GAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACvC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,aAAa,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAC;YAC1F,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACd,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACd,GAAG,CAAC,aAAa,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9F,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAU,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAEzJ,OAAO;QACL,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC5G,KAAK;QACL,MAAM;QACN,OAAO;QACP,OAAO,EAAE,CAAC;KACX,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,KAAY,EAAc,EAAE,CAC7D,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAEzI,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoB,EAAE,KAAkB,EAAE,MAAoB,EAAmB,EAAE;IACnH,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC,CAAC,2BAA2B;IACrE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAOtC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,CAAC,IAAkB,EAAE,OAAe,EAAE,OAAe,EAAQ,EAAE;QAC1E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,MAAM,KAAK,GAAG,CAAC,CAAe,EAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3G,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3D,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YACpE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7G,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5F,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAE7C,kEAAkE;IAClE,MAAM,QAAQ,GAAG,CAAC,EAAsB,EAAS,EAAE;QACjD,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC,CAAC;IAEF,MAAM,KAAK,GAA2C,EAAE,CAAC;IACzD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAI,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5G,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpG,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA6B,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,iEAAiE;QACjE,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QAC7C,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QACnD,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACpG,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,GAAG,CAAC,KAAK,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClH,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9G,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY;oBAAE,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC/E,IAAI,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY;oBAAE,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;YACjF,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC9B,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACxG,CAAC,CAAC;AAUF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,GAAoB,EAAE,OAAsB,EAAE,MAAoB,EAA4B,EAAE;IAC9H,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAChG,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,yCAAyC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC3G,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAWF,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAoB,EAAE,UAA6B,EAAE,EAAe,EAAE;IAClG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,MAAM,UAAU,GAAG,CAAC,QAA4B,EAAiB,EAAE,CACjE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEtJ,MAAM,KAAK,GAA2C,EAAE,CAAC;IACzD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,MAAc,EAAE,OAAe,EAAQ,EAAE;QAClF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1D,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/E,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;QAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAG,KAAK,GAAG,OAAO,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YACvF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG;YAC1D,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG;SAC3D,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,KAAK;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1I,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAgB,CAAC;QAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,GAAgB,GAAG,CAAC,KAAK;SACnC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC;SAC1E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,EAAE,EAAE,YAAqB;QACzB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,OAAO,EAAE;YACP,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtG;KACF,CAAC,CAAC,CAAC;IAEN,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { type EdgeSemantic } from "../edgeSemantics.js";
2
+ import type { DiagramOp } from "../ops.js";
3
+ import type { ArrowType, DiagramDocument, DiagramNode, DiagramRouting, LayoutDirection } from "../schema.js";
4
+ import { type MermaidCst, type MermaidDiagnostic } from "./parse.js";
5
+ export interface StructureNode {
6
+ id: string;
7
+ type: string;
8
+ label?: string;
9
+ parentId?: string;
10
+ shape?: string;
11
+ classes: string[];
12
+ collapsed?: boolean;
13
+ direction?: string;
14
+ declared: boolean;
15
+ style?: DiagramNode["style"];
16
+ }
17
+ export interface StructureEdge {
18
+ id: string;
19
+ source: string;
20
+ target: string;
21
+ label?: string;
22
+ semantic: EdgeSemantic;
23
+ markerStart?: ArrowType;
24
+ markerEnd?: ArrowType;
25
+ routing?: DiagramRouting;
26
+ invisible: boolean;
27
+ explicitId: boolean;
28
+ }
29
+ export interface MermaidStructure {
30
+ direction: LayoutDirection;
31
+ title?: string;
32
+ defaultRouting?: DiagramRouting;
33
+ nodes: StructureNode[];
34
+ edges: StructureEdge[];
35
+ diagnostics: MermaidDiagnostic[];
36
+ classDefs: Record<string, DiagramNode["style"]>;
37
+ }
38
+ export declare const mermaidDirectionToLayout: (direction: string | undefined) => LayoutDirection;
39
+ export declare const layoutDirectionToMermaid: (direction: LayoutDirection | undefined) => string;
40
+ export declare const syntheticEdgeId: (source: string, target: string, occurrence: number) => string;
41
+ export declare const cssToStyle: (css: string) => DiagramNode["style"];
42
+ export declare const deriveStructure: (cst: MermaidCst) => MermaidStructure;
43
+ export interface SyncResult {
44
+ ops: DiagramOp[];
45
+ addedNodeIds: string[];
46
+ removedNodeIds: string[];
47
+ }
48
+ export declare const syncOpsFromStructure: (doc: DiagramDocument, structure: MermaidStructure) => SyncResult;
49
+ export interface ParsedMermaid {
50
+ cst: MermaidCst;
51
+ structure: MermaidStructure;
52
+ ok: boolean;
53
+ }
54
+ export declare const parseMermaid: (text: string) => ParsedMermaid;
55
+ //# sourceMappingURL=derive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../src/diagram/mermaid/derive.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAe,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1H,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,iBAAiB,EAIvB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;CACjD;AAGD,eAAO,MAAM,wBAAwB,GAAI,WAAW,MAAM,GAAG,SAAS,KAAG,eAA6E,CAAC;AACvJ,eAAO,MAAM,wBAAwB,GAAI,WAAW,eAAe,GAAG,SAAS,KAAG,MACa,CAAC;AAoBhG,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,YAAY,MAAM,KAAG,MAGpF,CAAC;AAkBF,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,WAAW,CAAC,OAAO,CAiB3D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,UAAU,KAAG,gBA4HjD,CAAC;AAWF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD,eAAO,MAAM,oBAAoB,GAAI,KAAK,eAAe,EAAE,WAAW,gBAAgB,KAAG,UAgGxF,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,UAAU,CAAC;IAChB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,EAAE,EAAE,OAAO,CAAC;CACb;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,aAK3C,CAAC"}