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.
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/outputSchemas.d.ts +3 -0
- package/dist/ai/outputSchemas.d.ts.map +1 -1
- package/dist/ai/outputSchemas.js +1 -0
- package/dist/ai/outputSchemas.js.map +1 -1
- package/dist/ai/parse/diagram.d.ts.map +1 -1
- package/dist/ai/parse/diagram.js +6 -3
- package/dist/ai/parse/diagram.js.map +1 -1
- package/dist/ai/prompts/diagram.d.ts +7 -3
- package/dist/ai/prompts/diagram.d.ts.map +1 -1
- package/dist/ai/prompts/diagram.js +44 -5
- package/dist/ai/prompts/diagram.js.map +1 -1
- package/dist/ai/types.d.ts +6 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/diagram/bpmn/derive.d.ts +74 -0
- package/dist/diagram/bpmn/derive.d.ts.map +1 -0
- package/dist/diagram/bpmn/derive.js +392 -0
- package/dist/diagram/bpmn/derive.js.map +1 -0
- package/dist/diagram/bpmn/index.d.ts +7 -0
- package/dist/diagram/bpmn/index.d.ts.map +1 -0
- package/dist/diagram/bpmn/index.js +12 -0
- package/dist/diagram/bpmn/index.js.map +1 -0
- package/dist/diagram/bpmn/patch.d.ts +14 -0
- package/dist/diagram/bpmn/patch.d.ts.map +1 -0
- package/dist/diagram/bpmn/patch.js +770 -0
- package/dist/diagram/bpmn/patch.js.map +1 -0
- package/dist/diagram/bpmn/place.d.ts +4 -0
- package/dist/diagram/bpmn/place.d.ts.map +1 -0
- package/dist/diagram/bpmn/place.js +65 -0
- package/dist/diagram/bpmn/place.js.map +1 -0
- package/dist/diagram/bpmn/serialize.d.ts +12 -0
- package/dist/diagram/bpmn/serialize.d.ts.map +1 -0
- package/dist/diagram/bpmn/serialize.js +292 -0
- package/dist/diagram/bpmn/serialize.js.map +1 -0
- package/dist/diagram/bpmn/types.d.ts +42 -0
- package/dist/diagram/bpmn/types.d.ts.map +1 -0
- package/dist/diagram/bpmn/types.js +84 -0
- package/dist/diagram/bpmn/types.js.map +1 -0
- package/dist/diagram/bpmn/xml.d.ts +60 -0
- package/dist/diagram/bpmn/xml.d.ts.map +1 -0
- package/dist/diagram/bpmn/xml.js +342 -0
- package/dist/diagram/bpmn/xml.js.map +1 -0
- package/dist/diagram/elkGraph.d.ts +1 -3
- package/dist/diagram/elkGraph.d.ts.map +1 -1
- package/dist/diagram/elkGraph.js +1 -0
- package/dist/diagram/elkGraph.js.map +1 -1
- package/dist/diagram/fixtures.d.ts +10 -0
- package/dist/diagram/fixtures.d.ts.map +1 -0
- package/dist/diagram/fixtures.js +113 -0
- package/dist/diagram/fixtures.js.map +1 -0
- package/dist/diagram/geometry.d.ts +27 -0
- package/dist/diagram/geometry.d.ts.map +1 -0
- package/dist/diagram/geometry.js +122 -0
- package/dist/diagram/geometry.js.map +1 -0
- package/dist/diagram/history.d.ts +36 -0
- package/dist/diagram/history.d.ts.map +1 -0
- package/dist/diagram/history.js +54 -0
- package/dist/diagram/history.js.map +1 -0
- package/dist/diagram/ids.d.ts +5 -0
- package/dist/diagram/ids.d.ts.map +1 -0
- package/dist/diagram/ids.js +52 -0
- package/dist/diagram/ids.js.map +1 -0
- package/dist/diagram/index.d.ts +14 -2
- package/dist/diagram/index.d.ts.map +1 -1
- package/dist/diagram/index.js +20 -8
- package/dist/diagram/index.js.map +1 -1
- package/dist/diagram/layout.d.ts +107 -0
- package/dist/diagram/layout.d.ts.map +1 -0
- package/dist/diagram/layout.js +356 -0
- package/dist/diagram/layout.js.map +1 -0
- package/dist/diagram/mermaid/derive.d.ts +55 -0
- package/dist/diagram/mermaid/derive.d.ts.map +1 -0
- package/dist/diagram/mermaid/derive.js +343 -0
- package/dist/diagram/mermaid/derive.js.map +1 -0
- package/dist/diagram/mermaid/index.d.ts +8 -0
- package/dist/diagram/mermaid/index.d.ts.map +1 -0
- package/dist/diagram/mermaid/index.js +24 -0
- package/dist/diagram/mermaid/index.js.map +1 -0
- package/dist/diagram/mermaid/parse.d.ts +96 -0
- package/dist/diagram/mermaid/parse.d.ts.map +1 -0
- package/dist/diagram/mermaid/parse.js +672 -0
- package/dist/diagram/mermaid/parse.js.map +1 -0
- package/dist/diagram/mermaid/patch.d.ts +16 -0
- package/dist/diagram/mermaid/patch.d.ts.map +1 -0
- package/dist/diagram/mermaid/patch.js +463 -0
- package/dist/diagram/mermaid/patch.js.map +1 -0
- package/dist/diagram/mermaid/serialize.d.ts +14 -0
- package/dist/diagram/mermaid/serialize.d.ts.map +1 -0
- package/dist/diagram/mermaid/serialize.js +125 -0
- package/dist/diagram/mermaid/serialize.js.map +1 -0
- package/dist/diagram/mermaid/shapes.d.ts +11 -0
- package/dist/diagram/mermaid/shapes.d.ts.map +1 -0
- package/dist/diagram/mermaid/shapes.js +320 -0
- package/dist/diagram/mermaid/shapes.js.map +1 -0
- package/dist/diagram/migrations.d.ts +1 -0
- package/dist/diagram/migrations.d.ts.map +1 -1
- package/dist/diagram/migrations.js +7 -2
- package/dist/diagram/migrations.js.map +1 -1
- package/dist/diagram/normalize.d.ts +9 -1
- package/dist/diagram/normalize.d.ts.map +1 -1
- package/dist/diagram/normalize.js +194 -0
- package/dist/diagram/normalize.js.map +1 -1
- package/dist/diagram/ops.d.ts +146 -0
- package/dist/diagram/ops.d.ts.map +1 -0
- package/dist/diagram/ops.js +823 -0
- package/dist/diagram/ops.js.map +1 -0
- package/dist/diagram/opsReference.d.ts +3 -0
- package/dist/diagram/opsReference.d.ts.map +1 -0
- package/dist/diagram/opsReference.js +51 -0
- package/dist/diagram/opsReference.js.map +1 -0
- package/dist/diagram/patchInput.d.ts +193 -0
- package/dist/diagram/patchInput.d.ts.map +1 -0
- package/dist/diagram/patchInput.js +621 -0
- package/dist/diagram/patchInput.js.map +1 -0
- package/dist/diagram/routing/batch.d.ts +45 -0
- package/dist/diagram/routing/batch.d.ts.map +1 -0
- package/dist/diagram/routing/batch.js +136 -0
- package/dist/diagram/routing/batch.js.map +1 -0
- package/dist/diagram/routing/curves.d.ts +7 -0
- package/dist/diagram/routing/curves.d.ts.map +1 -0
- package/dist/diagram/routing/curves.js +120 -0
- package/dist/diagram/routing/curves.js.map +1 -0
- package/dist/diagram/routing/grid.d.ts +15 -0
- package/dist/diagram/routing/grid.d.ts.map +1 -0
- package/dist/diagram/routing/grid.js +245 -0
- package/dist/diagram/routing/grid.js.map +1 -0
- package/dist/diagram/routing/index.d.ts +10 -0
- package/dist/diagram/routing/index.d.ts.map +1 -0
- package/dist/diagram/routing/index.js +10 -0
- package/dist/diagram/routing/index.js.map +1 -0
- package/dist/diagram/routing/legacy.d.ts +6 -0
- package/dist/diagram/routing/legacy.d.ts.map +1 -0
- package/dist/diagram/routing/legacy.js +27 -0
- package/dist/diagram/routing/legacy.js.map +1 -0
- package/dist/diagram/routing/nudge.d.ts +4 -0
- package/dist/diagram/routing/nudge.d.ts.map +1 -0
- package/dist/diagram/routing/nudge.js +96 -0
- package/dist/diagram/routing/nudge.js.map +1 -0
- package/dist/diagram/routing/orthogonal.d.ts +6 -0
- package/dist/diagram/routing/orthogonal.d.ts.map +1 -0
- package/dist/diagram/routing/orthogonal.js +56 -0
- package/dist/diagram/routing/orthogonal.js.map +1 -0
- package/dist/diagram/routing/path.d.ts +16 -0
- package/dist/diagram/routing/path.d.ts.map +1 -0
- package/dist/diagram/routing/path.js +128 -0
- package/dist/diagram/routing/path.js.map +1 -0
- package/dist/diagram/routing/sides.d.ts +22 -0
- package/dist/diagram/routing/sides.d.ts.map +1 -0
- package/dist/diagram/routing/sides.js +74 -0
- package/dist/diagram/routing/sides.js.map +1 -0
- package/dist/diagram/routing/types.d.ts +46 -0
- package/dist/diagram/routing/types.d.ts.map +1 -0
- package/dist/diagram/routing/types.js +11 -0
- package/dist/diagram/routing/types.js.map +1 -0
- package/dist/diagram/schema.d.ts +70 -37
- package/dist/diagram/schema.d.ts.map +1 -1
- package/dist/diagram/schema.js +62 -8
- package/dist/diagram/schema.js.map +1 -1
- package/dist/diagram/styleInput.d.ts +41 -0
- package/dist/diagram/styleInput.d.ts.map +1 -0
- package/dist/diagram/styleInput.js +105 -0
- package/dist/diagram/styleInput.js.map +1 -0
- package/dist/diagram/views.d.ts +9 -0
- package/dist/diagram/views.d.ts.map +1 -0
- package/dist/diagram/views.js +42 -0
- package/dist/diagram/views.js.map +1 -0
- package/dist-cjs/ai/index.js.map +1 -1
- package/dist-cjs/ai/outputSchemas.js +1 -0
- package/dist-cjs/ai/outputSchemas.js.map +1 -1
- package/dist-cjs/ai/parse/diagram.js +6 -3
- package/dist-cjs/ai/parse/diagram.js.map +1 -1
- package/dist-cjs/ai/prompts/diagram.js +44 -5
- package/dist-cjs/ai/prompts/diagram.js.map +1 -1
- package/dist-cjs/diagram/bpmn/derive.js +398 -0
- package/dist-cjs/diagram/bpmn/derive.js.map +1 -0
- package/dist-cjs/diagram/bpmn/index.js +31 -0
- package/dist-cjs/diagram/bpmn/index.js.map +1 -0
- package/dist-cjs/diagram/bpmn/patch.js +774 -0
- package/dist-cjs/diagram/bpmn/patch.js.map +1 -0
- package/dist-cjs/diagram/bpmn/place.js +69 -0
- package/dist-cjs/diagram/bpmn/place.js.map +1 -0
- package/dist-cjs/diagram/bpmn/serialize.js +299 -0
- package/dist-cjs/diagram/bpmn/serialize.js.map +1 -0
- package/dist-cjs/diagram/bpmn/types.js +99 -0
- package/dist-cjs/diagram/bpmn/types.js.map +1 -0
- package/dist-cjs/diagram/bpmn/xml.js +367 -0
- package/dist-cjs/diagram/bpmn/xml.js.map +1 -0
- package/dist-cjs/diagram/elkGraph.js +1 -0
- package/dist-cjs/diagram/elkGraph.js.map +1 -1
- package/dist-cjs/diagram/fixtures.js +117 -0
- package/dist-cjs/diagram/fixtures.js.map +1 -0
- package/dist-cjs/diagram/geometry.js +143 -0
- package/dist-cjs/diagram/geometry.js.map +1 -0
- package/dist-cjs/diagram/history.js +65 -0
- package/dist-cjs/diagram/history.js.map +1 -0
- package/dist-cjs/diagram/ids.js +58 -0
- package/dist-cjs/diagram/ids.js.map +1 -0
- package/dist-cjs/diagram/index.js +23 -8
- package/dist-cjs/diagram/index.js.map +1 -1
- package/dist-cjs/diagram/layout.js +364 -0
- package/dist-cjs/diagram/layout.js.map +1 -0
- package/dist-cjs/diagram/mermaid/derive.js +353 -0
- package/dist-cjs/diagram/mermaid/derive.js.map +1 -0
- package/dist-cjs/diagram/mermaid/index.js +44 -0
- package/dist-cjs/diagram/mermaid/index.js.map +1 -0
- package/dist-cjs/diagram/mermaid/parse.js +681 -0
- package/dist-cjs/diagram/mermaid/parse.js.map +1 -0
- package/dist-cjs/diagram/mermaid/patch.js +468 -0
- package/dist-cjs/diagram/mermaid/patch.js.map +1 -0
- package/dist-cjs/diagram/mermaid/serialize.js +133 -0
- package/dist-cjs/diagram/mermaid/serialize.js.map +1 -0
- package/dist-cjs/diagram/mermaid/shapes.js +327 -0
- package/dist-cjs/diagram/mermaid/shapes.js.map +1 -0
- package/dist-cjs/diagram/migrations.js +9 -3
- package/dist-cjs/diagram/migrations.js.map +1 -1
- package/dist-cjs/diagram/normalize.js +198 -1
- package/dist-cjs/diagram/normalize.js.map +1 -1
- package/dist-cjs/diagram/ops.js +829 -0
- package/dist-cjs/diagram/ops.js.map +1 -0
- package/dist-cjs/diagram/opsReference.js +55 -0
- package/dist-cjs/diagram/opsReference.js.map +1 -0
- package/dist-cjs/diagram/patchInput.js +636 -0
- package/dist-cjs/diagram/patchInput.js.map +1 -0
- package/dist-cjs/diagram/routing/batch.js +142 -0
- package/dist-cjs/diagram/routing/batch.js.map +1 -0
- package/dist-cjs/diagram/routing/curves.js +127 -0
- package/dist-cjs/diagram/routing/curves.js.map +1 -0
- package/dist-cjs/diagram/routing/grid.js +250 -0
- package/dist-cjs/diagram/routing/grid.js.map +1 -0
- package/dist-cjs/diagram/routing/index.js +29 -0
- package/dist-cjs/diagram/routing/index.js.map +1 -0
- package/dist-cjs/diagram/routing/legacy.js +32 -0
- package/dist-cjs/diagram/routing/legacy.js.map +1 -0
- package/dist-cjs/diagram/routing/nudge.js +100 -0
- package/dist-cjs/diagram/routing/nudge.js.map +1 -0
- package/dist-cjs/diagram/routing/orthogonal.js +62 -0
- package/dist-cjs/diagram/routing/orthogonal.js.map +1 -0
- package/dist-cjs/diagram/routing/path.js +137 -0
- package/dist-cjs/diagram/routing/path.js.map +1 -0
- package/dist-cjs/diagram/routing/sides.js +82 -0
- package/dist-cjs/diagram/routing/sides.js.map +1 -0
- package/dist-cjs/diagram/routing/types.js +15 -0
- package/dist-cjs/diagram/routing/types.js.map +1 -0
- package/dist-cjs/diagram/schema.js +64 -9
- package/dist-cjs/diagram/schema.js.map +1 -1
- package/dist-cjs/diagram/styleInput.js +113 -0
- package/dist-cjs/diagram/styleInput.js.map +1 -0
- package/dist-cjs/diagram/views.js +46 -0
- package/dist-cjs/diagram/views.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|