@5cover/mermaid-ast 0.0.0-stage → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -2
- package/dist/block.d.ts +157 -0
- package/dist/block.d.ts.map +1 -0
- package/dist/block.js +295 -0
- package/dist/c4.d.ts +270 -0
- package/dist/c4.d.ts.map +1 -0
- package/dist/c4.js +541 -0
- package/dist/class-diagram.d.ts +129 -0
- package/dist/class-diagram.d.ts.map +1 -0
- package/dist/class-diagram.js +341 -0
- package/dist/diagram-wrapper.d.ts +66 -0
- package/dist/diagram-wrapper.d.ts.map +1 -0
- package/dist/diagram-wrapper.js +59 -0
- package/dist/er-diagram.d.ts +214 -0
- package/dist/er-diagram.d.ts.map +1 -0
- package/dist/er-diagram.js +405 -0
- package/dist/flowchart-compress.d.ts +45 -0
- package/dist/flowchart-compress.d.ts.map +1 -0
- package/dist/flowchart-compress.js +182 -0
- package/dist/flowchart-graph-ops.d.ts +58 -0
- package/dist/flowchart-graph-ops.d.ts.map +1 -0
- package/dist/flowchart-graph-ops.js +262 -0
- package/dist/flowchart-types.d.ts +58 -0
- package/dist/flowchart-types.d.ts.map +1 -0
- package/dist/flowchart-types.js +6 -0
- package/dist/flowchart.d.ts +310 -0
- package/dist/flowchart.d.ts.map +1 -0
- package/dist/flowchart.js +624 -0
- package/dist/gantt.d.ts +199 -0
- package/dist/gantt.d.ts.map +1 -0
- package/dist/gantt.js +452 -0
- package/dist/gitgraph.d.ts +171 -0
- package/dist/gitgraph.d.ts.map +1 -0
- package/dist/gitgraph.js +287 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/journey.d.ts +154 -0
- package/dist/journey.d.ts.map +1 -0
- package/dist/journey.js +323 -0
- package/dist/kanban.d.ts +137 -0
- package/dist/kanban.d.ts.map +1 -0
- package/dist/kanban.js +296 -0
- package/dist/mindmap.d.ts +142 -0
- package/dist/mindmap.d.ts.map +1 -0
- package/dist/mindmap.js +350 -0
- package/dist/parser/block-parser.d.ts +15 -0
- package/dist/parser/block-parser.d.ts.map +1 -0
- package/dist/parser/block-parser.js +324 -0
- package/dist/parser/c4-parser.d.ts +15 -0
- package/dist/parser/c4-parser.d.ts.map +1 -0
- package/dist/parser/c4-parser.js +406 -0
- package/dist/parser/class-parser.d.ts +15 -0
- package/dist/parser/class-parser.d.ts.map +1 -0
- package/dist/parser/class-parser.js +312 -0
- package/dist/parser/er-parser.d.ts +17 -0
- package/dist/parser/er-parser.d.ts.map +1 -0
- package/dist/parser/er-parser.js +131 -0
- package/dist/parser/flowchart-parser.d.ts +17 -0
- package/dist/parser/flowchart-parser.d.ts.map +1 -0
- package/dist/parser/flowchart-parser.js +496 -0
- package/dist/parser/gantt-parser.d.ts +17 -0
- package/dist/parser/gantt-parser.d.ts.map +1 -0
- package/dist/parser/gantt-parser.js +190 -0
- package/dist/parser/gitgraph-parser.d.ts +15 -0
- package/dist/parser/gitgraph-parser.d.ts.map +1 -0
- package/dist/parser/gitgraph-parser.js +127 -0
- package/dist/parser/index.d.ts +44 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +158 -0
- package/dist/parser/journey-parser.d.ts +17 -0
- package/dist/parser/journey-parser.d.ts.map +1 -0
- package/dist/parser/journey-parser.js +107 -0
- package/dist/parser/kanban-parser.d.ts +17 -0
- package/dist/parser/kanban-parser.d.ts.map +1 -0
- package/dist/parser/kanban-parser.js +139 -0
- package/dist/parser/mindmap-parser.d.ts +17 -0
- package/dist/parser/mindmap-parser.d.ts.map +1 -0
- package/dist/parser/mindmap-parser.js +204 -0
- package/dist/parser/pie-parser.d.ts +24 -0
- package/dist/parser/pie-parser.d.ts.map +1 -0
- package/dist/parser/pie-parser.js +54 -0
- package/dist/parser/quadrant-parser.d.ts +17 -0
- package/dist/parser/quadrant-parser.d.ts.map +1 -0
- package/dist/parser/quadrant-parser.js +102 -0
- package/dist/parser/requirement-parser.d.ts +17 -0
- package/dist/parser/requirement-parser.d.ts.map +1 -0
- package/dist/parser/requirement-parser.js +172 -0
- package/dist/parser/sankey-parser.d.ts +17 -0
- package/dist/parser/sankey-parser.d.ts.map +1 -0
- package/dist/parser/sankey-parser.js +62 -0
- package/dist/parser/sequence-parser.d.ts +16 -0
- package/dist/parser/sequence-parser.d.ts.map +1 -0
- package/dist/parser/sequence-parser.js +563 -0
- package/dist/parser/state-parser.d.ts +17 -0
- package/dist/parser/state-parser.d.ts.map +1 -0
- package/dist/parser/state-parser.js +220 -0
- package/dist/parser/timeline-parser.d.ts +17 -0
- package/dist/parser/timeline-parser.d.ts.map +1 -0
- package/dist/parser/timeline-parser.js +108 -0
- package/dist/parser/xychart-parser.d.ts +17 -0
- package/dist/parser/xychart-parser.d.ts.map +1 -0
- package/dist/parser/xychart-parser.js +124 -0
- package/dist/pie.d.ts +137 -0
- package/dist/pie.d.ts.map +1 -0
- package/dist/pie.js +223 -0
- package/dist/quadrant.d.ts +122 -0
- package/dist/quadrant.d.ts.map +1 -0
- package/dist/quadrant.js +260 -0
- package/dist/renderer/block-renderer.d.ts +16 -0
- package/dist/renderer/block-renderer.d.ts.map +1 -0
- package/dist/renderer/block-renderer.js +280 -0
- package/dist/renderer/c4-renderer.d.ts +12 -0
- package/dist/renderer/c4-renderer.d.ts.map +1 -0
- package/dist/renderer/c4-renderer.js +305 -0
- package/dist/renderer/class-renderer.d.ts +12 -0
- package/dist/renderer/class-renderer.d.ts.map +1 -0
- package/dist/renderer/class-renderer.js +210 -0
- package/dist/renderer/doc.d.ts +372 -0
- package/dist/renderer/doc.d.ts.map +1 -0
- package/dist/renderer/doc.js +364 -0
- package/dist/renderer/er-renderer.d.ts +19 -0
- package/dist/renderer/er-renderer.d.ts.map +1 -0
- package/dist/renderer/er-renderer.js +148 -0
- package/dist/renderer/flowchart-cross.d.ts +34 -0
- package/dist/renderer/flowchart-cross.d.ts.map +1 -0
- package/dist/renderer/flowchart-cross.js +157 -0
- package/dist/renderer/flowchart-renderer.d.ts +12 -0
- package/dist/renderer/flowchart-renderer.d.ts.map +1 -0
- package/dist/renderer/flowchart-renderer.js +646 -0
- package/dist/renderer/gantt-renderer.d.ts +19 -0
- package/dist/renderer/gantt-renderer.d.ts.map +1 -0
- package/dist/renderer/gantt-renderer.js +121 -0
- package/dist/renderer/gitgraph-renderer.d.ts +12 -0
- package/dist/renderer/gitgraph-renderer.d.ts.map +1 -0
- package/dist/renderer/gitgraph-renderer.js +119 -0
- package/dist/renderer/index.d.ts +30 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +102 -0
- package/dist/renderer/journey-renderer.d.ts +19 -0
- package/dist/renderer/journey-renderer.d.ts.map +1 -0
- package/dist/renderer/journey-renderer.js +40 -0
- package/dist/renderer/kanban-renderer.d.ts +12 -0
- package/dist/renderer/kanban-renderer.d.ts.map +1 -0
- package/dist/renderer/kanban-renderer.js +74 -0
- package/dist/renderer/mindmap-renderer.d.ts +19 -0
- package/dist/renderer/mindmap-renderer.d.ts.map +1 -0
- package/dist/renderer/mindmap-renderer.js +78 -0
- package/dist/renderer/pie-renderer.d.ts +12 -0
- package/dist/renderer/pie-renderer.d.ts.map +1 -0
- package/dist/renderer/pie-renderer.js +25 -0
- package/dist/renderer/quadrant-renderer.d.ts +12 -0
- package/dist/renderer/quadrant-renderer.d.ts.map +1 -0
- package/dist/renderer/quadrant-renderer.js +68 -0
- package/dist/renderer/requirement-renderer.d.ts +12 -0
- package/dist/renderer/requirement-renderer.d.ts.map +1 -0
- package/dist/renderer/requirement-renderer.js +116 -0
- package/dist/renderer/sankey-renderer.d.ts +15 -0
- package/dist/renderer/sankey-renderer.d.ts.map +1 -0
- package/dist/renderer/sankey-renderer.js +31 -0
- package/dist/renderer/sequence-renderer.d.ts +12 -0
- package/dist/renderer/sequence-renderer.d.ts.map +1 -0
- package/dist/renderer/sequence-renderer.js +270 -0
- package/dist/renderer/state-diagram-renderer.d.ts +12 -0
- package/dist/renderer/state-diagram-renderer.d.ts.map +1 -0
- package/dist/renderer/state-diagram-renderer.js +175 -0
- package/dist/renderer/state-renderer.d.ts +12 -0
- package/dist/renderer/state-renderer.d.ts.map +1 -0
- package/dist/renderer/state-renderer.js +127 -0
- package/dist/renderer/timeline-renderer.d.ts +22 -0
- package/dist/renderer/timeline-renderer.d.ts.map +1 -0
- package/dist/renderer/timeline-renderer.js +33 -0
- package/dist/renderer/xychart-renderer.d.ts +12 -0
- package/dist/renderer/xychart-renderer.d.ts.map +1 -0
- package/dist/renderer/xychart-renderer.js +85 -0
- package/dist/requirement.d.ts +258 -0
- package/dist/requirement.d.ts.map +1 -0
- package/dist/requirement.js +416 -0
- package/dist/sankey.d.ts +120 -0
- package/dist/sankey.d.ts.map +1 -0
- package/dist/sankey.js +217 -0
- package/dist/sequence.d.ts +134 -0
- package/dist/sequence.d.ts.map +1 -0
- package/dist/sequence.js +457 -0
- package/dist/state-diagram.d.ts +117 -0
- package/dist/state-diagram.d.ts.map +1 -0
- package/dist/state-diagram.js +331 -0
- package/dist/timeline.d.ts +154 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +340 -0
- package/dist/types/block.d.ts +184 -0
- package/dist/types/block.d.ts.map +1 -0
- package/dist/types/block.js +66 -0
- package/dist/types/c4.d.ts +227 -0
- package/dist/types/c4.d.ts.map +1 -0
- package/dist/types/c4.js +62 -0
- package/dist/types/class.d.ts +64 -0
- package/dist/types/class.d.ts.map +1 -0
- package/dist/types/class.js +17 -0
- package/dist/types/er.d.ts +105 -0
- package/dist/types/er.d.ts.map +1 -0
- package/dist/types/er.js +19 -0
- package/dist/types/flowchart.d.ts +107 -0
- package/dist/types/flowchart.d.ts.map +1 -0
- package/dist/types/flowchart.js +22 -0
- package/dist/types/gantt.d.ts +101 -0
- package/dist/types/gantt.d.ts.map +1 -0
- package/dist/types/gantt.js +18 -0
- package/dist/types/gitgraph.d.ts +73 -0
- package/dist/types/gitgraph.d.ts.map +1 -0
- package/dist/types/gitgraph.js +14 -0
- package/dist/types/index.d.ts +123 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +132 -0
- package/dist/types/journey.d.ts +44 -0
- package/dist/types/journey.d.ts.map +1 -0
- package/dist/types/journey.js +14 -0
- package/dist/types/kanban.d.ts +77 -0
- package/dist/types/kanban.d.ts.map +1 -0
- package/dist/types/kanban.js +53 -0
- package/dist/types/mindmap.d.ts +45 -0
- package/dist/types/mindmap.d.ts.map +1 -0
- package/dist/types/mindmap.js +13 -0
- package/dist/types/pie.d.ts +37 -0
- package/dist/types/pie.d.ts.map +1 -0
- package/dist/types/pie.js +16 -0
- package/dist/types/quadrant.d.ts +66 -0
- package/dist/types/quadrant.d.ts.map +1 -0
- package/dist/types/quadrant.js +15 -0
- package/dist/types/render-options.d.ts +103 -0
- package/dist/types/render-options.d.ts.map +1 -0
- package/dist/types/render-options.js +52 -0
- package/dist/types/requirement.d.ts +102 -0
- package/dist/types/requirement.d.ts.map +1 -0
- package/dist/types/requirement.js +20 -0
- package/dist/types/sankey.d.ts +40 -0
- package/dist/types/sankey.d.ts.map +1 -0
- package/dist/types/sankey.js +15 -0
- package/dist/types/sequence.d.ts +188 -0
- package/dist/types/sequence.d.ts.map +1 -0
- package/dist/types/sequence.js +17 -0
- package/dist/types/state.d.ts +150 -0
- package/dist/types/state.d.ts.map +1 -0
- package/dist/types/state.js +20 -0
- package/dist/types/timeline.d.ts +51 -0
- package/dist/types/timeline.d.ts.map +1 -0
- package/dist/types/timeline.js +14 -0
- package/dist/types/xychart.d.ts +84 -0
- package/dist/types/xychart.d.ts.map +1 -0
- package/dist/types/xychart.js +14 -0
- package/dist/utils.d.ts +29 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/vendored/AGENTS.md +34 -0
- package/dist/vendored/LICENSE +21 -0
- package/dist/vendored/VERSION +1 -0
- package/dist/vendored/grammars/block.jison +293 -0
- package/dist/vendored/grammars/c4.jison +322 -0
- package/dist/vendored/grammars/class.jison +440 -0
- package/dist/vendored/grammars/er.jison +336 -0
- package/dist/vendored/grammars/flowchart.jison +635 -0
- package/dist/vendored/grammars/gantt.jison +188 -0
- package/dist/vendored/grammars/journey.jison +69 -0
- package/dist/vendored/grammars/kanban.jison +166 -0
- package/dist/vendored/grammars/mindmap.jison +127 -0
- package/dist/vendored/grammars/quadrant.jison +189 -0
- package/dist/vendored/grammars/requirement.jison +267 -0
- package/dist/vendored/grammars/sankey.jison +67 -0
- package/dist/vendored/grammars/sequence.jison +421 -0
- package/dist/vendored/grammars/state.jison +353 -0
- package/dist/vendored/grammars/timeline.jison +87 -0
- package/dist/vendored/grammars/xychart.jison +177 -0
- package/dist/vendored/parsers/block.js +900 -0
- package/dist/vendored/parsers/c4.js +915 -0
- package/dist/vendored/parsers/class.js +1011 -0
- package/dist/vendored/parsers/er.js +979 -0
- package/dist/vendored/parsers/flowchart.js +1136 -0
- package/dist/vendored/parsers/gantt.js +802 -0
- package/dist/vendored/parsers/journey.js +655 -0
- package/dist/vendored/parsers/kanban.js +745 -0
- package/dist/vendored/parsers/mindmap.js +703 -0
- package/dist/vendored/parsers/quadrant.js +784 -0
- package/dist/vendored/parsers/requirement.js +871 -0
- package/dist/vendored/parsers/sankey.js +616 -0
- package/dist/vendored/parsers/sequence.js +1090 -0
- package/dist/vendored/parsers/state.js +928 -0
- package/dist/vendored/parsers/timeline.js +666 -0
- package/dist/vendored/parsers/xychart.js +763 -0
- package/dist/vendored/sync-info.json +88 -0
- package/dist/xychart.d.ts +234 -0
- package/dist/xychart.d.ts.map +1 -0
- package/dist/xychart.js +442 -0
- package/package.json +84 -4
package/README.md
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Mermaid Tools Monorepo
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This repository contains tools for working with Mermaid diagrams.
|
|
4
|
+
|
|
5
|
+
## Packages
|
|
6
|
+
|
|
7
|
+
| Package | Description | npm | JSR |
|
|
8
|
+
|---------|-------------|-----|-----|
|
|
9
|
+
| [mermaid-ast](./packages/mermaid-ast/) | Parse and render Mermaid diagrams to/from AST | [](https://www.npmjs.com/package/mermaid-ast) | [](https://jsr.io/@emily/mermaid-ast) |
|
|
10
|
+
| [mermaid-svg](./packages/mermaid-svg/) | Render Mermaid diagrams to SVG | - | - |
|
|
11
|
+
|
|
12
|
+
## mermaid-ast
|
|
13
|
+
|
|
14
|
+
**Parses all 18 diagram types supported by mermaid.js and renders them back to text.**
|
|
15
|
+
|
|
16
|
+
Features:
|
|
17
|
+
- Full round-trip fidelity: `render(parse(text))` produces semantically equivalent diagrams
|
|
18
|
+
- Wrapper classes for programmatic diagram manipulation
|
|
19
|
+
- Works in Bun, Node.js, and Deno
|
|
20
|
+
|
|
21
|
+
See the [mermaid-ast README](./packages/mermaid-ast/README.md) for full documentation, API reference, and examples.
|
|
22
|
+
|
|
23
|
+
## Development
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bun install # Install dependencies
|
|
27
|
+
just test # Run all tests
|
|
28
|
+
just # See all available commands
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Releasing
|
|
32
|
+
|
|
33
|
+
> **IMPORTANT:** Follow the release procedure exactly. Do not release manually.
|
|
34
|
+
>
|
|
35
|
+
> See [.agents/procedures/release.md](.agents/procedures/release.md) for the complete release procedure.
|
|
36
|
+
|
|
37
|
+
## License
|
|
38
|
+
|
|
39
|
+
MIT
|
package/dist/block.d.ts
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Diagram Wrapper Class
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent API for creating and manipulating block-beta diagrams.
|
|
5
|
+
*/
|
|
6
|
+
import { DiagramWrapper } from './diagram-wrapper.js';
|
|
7
|
+
import type { BlockAST, BlockArrowDirection, BlockComposite, BlockEdge, BlockEdgeType, BlockNode, BlockNodeShape, BlockSpace } from './types/block.js';
|
|
8
|
+
import type { RenderOptions } from './types/render-options.js';
|
|
9
|
+
/**
|
|
10
|
+
* Options for adding a node
|
|
11
|
+
*/
|
|
12
|
+
export interface AddBlockNodeOptions {
|
|
13
|
+
/** Node label (defaults to id if not provided) */
|
|
14
|
+
label?: string;
|
|
15
|
+
/** Node shape */
|
|
16
|
+
shape?: BlockNodeShape;
|
|
17
|
+
/** Width in columns */
|
|
18
|
+
widthInColumns?: number;
|
|
19
|
+
/** Directions for block arrows */
|
|
20
|
+
directions?: BlockArrowDirection[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Options for adding an edge
|
|
24
|
+
*/
|
|
25
|
+
export interface AddBlockEdgeOptions {
|
|
26
|
+
/** Edge label */
|
|
27
|
+
label?: string;
|
|
28
|
+
/** Edge type */
|
|
29
|
+
edgeType?: BlockEdgeType;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Block diagram wrapper class
|
|
33
|
+
*/
|
|
34
|
+
export declare class Block extends DiagramWrapper<BlockAST> {
|
|
35
|
+
private constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Creates an empty block diagram
|
|
38
|
+
*/
|
|
39
|
+
static create(): Block;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a Block from an existing AST
|
|
42
|
+
*/
|
|
43
|
+
static from(ast: BlockAST): Block;
|
|
44
|
+
/**
|
|
45
|
+
* Parses Mermaid block-beta syntax into a Block
|
|
46
|
+
*/
|
|
47
|
+
static parse(text: string): Block;
|
|
48
|
+
/**
|
|
49
|
+
* Renders the block diagram to Mermaid syntax
|
|
50
|
+
*/
|
|
51
|
+
render(options?: RenderOptions): string;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a deep clone of this diagram
|
|
54
|
+
*/
|
|
55
|
+
clone(): Block;
|
|
56
|
+
/**
|
|
57
|
+
* Sets the number of columns for the layout
|
|
58
|
+
*/
|
|
59
|
+
setColumns(columns: number | 'auto'): this;
|
|
60
|
+
/**
|
|
61
|
+
* Gets the current column setting
|
|
62
|
+
*/
|
|
63
|
+
getColumns(): number | 'auto' | undefined;
|
|
64
|
+
/**
|
|
65
|
+
* Adds a node to the diagram
|
|
66
|
+
*/
|
|
67
|
+
addNode(id: string, options?: AddBlockNodeOptions): this;
|
|
68
|
+
/**
|
|
69
|
+
* Gets a node by id
|
|
70
|
+
*/
|
|
71
|
+
getNode(id: string): BlockNode | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Finds all nodes in the diagram (including nested)
|
|
74
|
+
*/
|
|
75
|
+
findNodes(): BlockNode[];
|
|
76
|
+
/**
|
|
77
|
+
* Removes a node by id
|
|
78
|
+
*/
|
|
79
|
+
removeNode(id: string): this;
|
|
80
|
+
/**
|
|
81
|
+
* Gets the number of nodes
|
|
82
|
+
*/
|
|
83
|
+
get nodeCount(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Adds an edge between two nodes
|
|
86
|
+
*/
|
|
87
|
+
addEdge(from: string, to: string, options?: AddBlockEdgeOptions): this;
|
|
88
|
+
/**
|
|
89
|
+
* Finds all edges in the diagram
|
|
90
|
+
*/
|
|
91
|
+
findEdges(): BlockEdge[];
|
|
92
|
+
/**
|
|
93
|
+
* Removes an edge by id or by source/target
|
|
94
|
+
*/
|
|
95
|
+
removeEdge(idOrFrom: string, to?: string): this;
|
|
96
|
+
/**
|
|
97
|
+
* Gets the number of edges
|
|
98
|
+
*/
|
|
99
|
+
get edgeCount(): number;
|
|
100
|
+
/**
|
|
101
|
+
* Adds a space block for layout
|
|
102
|
+
*/
|
|
103
|
+
addSpace(width?: number): this;
|
|
104
|
+
/**
|
|
105
|
+
* Finds all space blocks
|
|
106
|
+
*/
|
|
107
|
+
findSpaces(): BlockSpace[];
|
|
108
|
+
/**
|
|
109
|
+
* Adds a composite (nested) block
|
|
110
|
+
*/
|
|
111
|
+
addComposite(id: string, label?: string): this;
|
|
112
|
+
/**
|
|
113
|
+
* Gets a composite block by id
|
|
114
|
+
*/
|
|
115
|
+
getComposite(id: string): BlockComposite | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Finds all composite blocks
|
|
118
|
+
*/
|
|
119
|
+
findComposites(): BlockComposite[];
|
|
120
|
+
/**
|
|
121
|
+
* Defines a CSS class
|
|
122
|
+
*/
|
|
123
|
+
defineClass(name: string, css: string): this;
|
|
124
|
+
/**
|
|
125
|
+
* Applies a class to nodes
|
|
126
|
+
*/
|
|
127
|
+
applyClass(nodeIds: string | string[], className: string): this;
|
|
128
|
+
/**
|
|
129
|
+
* Applies inline styles to nodes
|
|
130
|
+
*/
|
|
131
|
+
applyStyles(nodeIds: string | string[], styles: string): this;
|
|
132
|
+
/**
|
|
133
|
+
* Gets all defined classes
|
|
134
|
+
*/
|
|
135
|
+
getClassDefs(): Map<string, string>;
|
|
136
|
+
/**
|
|
137
|
+
* Sets the accessibility title
|
|
138
|
+
*/
|
|
139
|
+
setAccTitle(title: string): this;
|
|
140
|
+
/**
|
|
141
|
+
* Gets the accessibility title
|
|
142
|
+
*/
|
|
143
|
+
getAccTitle(): string | undefined;
|
|
144
|
+
/**
|
|
145
|
+
* Sets the accessibility description
|
|
146
|
+
*/
|
|
147
|
+
setAccDescr(descr: string): this;
|
|
148
|
+
/**
|
|
149
|
+
* Gets the accessibility description
|
|
150
|
+
*/
|
|
151
|
+
getAccDescr(): string | undefined;
|
|
152
|
+
/**
|
|
153
|
+
* Gets the total number of elements
|
|
154
|
+
*/
|
|
155
|
+
get elementCount(): number;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=block.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
|
package/dist/block.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Diagram Wrapper Class
|
|
3
|
+
*
|
|
4
|
+
* Provides a fluent API for creating and manipulating block-beta diagrams.
|
|
5
|
+
*/
|
|
6
|
+
import { DiagramWrapper } from './diagram-wrapper.js';
|
|
7
|
+
import { parseBlock } from './parser/block-parser.js';
|
|
8
|
+
import { renderBlock } from './renderer/block-renderer.js';
|
|
9
|
+
import { createEmptyBlockAST, isBlockComposite, isBlockEdge, isBlockNode, isBlockSpace, } from './types/block.js';
|
|
10
|
+
/**
|
|
11
|
+
* Block diagram wrapper class
|
|
12
|
+
*/
|
|
13
|
+
export class Block extends DiagramWrapper {
|
|
14
|
+
constructor(ast) {
|
|
15
|
+
super(ast);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates an empty block diagram
|
|
19
|
+
*/
|
|
20
|
+
static create() {
|
|
21
|
+
return new Block(createEmptyBlockAST());
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a Block from an existing AST
|
|
25
|
+
*/
|
|
26
|
+
static from(ast) {
|
|
27
|
+
return new Block(ast);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parses Mermaid block-beta syntax into a Block
|
|
31
|
+
*/
|
|
32
|
+
static parse(text) {
|
|
33
|
+
return new Block(parseBlock(text));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Renders the block diagram to Mermaid syntax
|
|
37
|
+
*/
|
|
38
|
+
render(options) {
|
|
39
|
+
return renderBlock(this.ast, options);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a deep clone of this diagram
|
|
43
|
+
*/
|
|
44
|
+
clone() {
|
|
45
|
+
return Block.parse(this.render());
|
|
46
|
+
}
|
|
47
|
+
// ============ Column Operations ============
|
|
48
|
+
/**
|
|
49
|
+
* Sets the number of columns for the layout
|
|
50
|
+
*/
|
|
51
|
+
setColumns(columns) {
|
|
52
|
+
// Remove any existing column settings
|
|
53
|
+
this.ast.elements = this.ast.elements.filter((e) => !('type' in e && e.type === 'column-setting'));
|
|
54
|
+
// Add new column setting at the beginning
|
|
55
|
+
const setting = {
|
|
56
|
+
type: 'column-setting',
|
|
57
|
+
columns: columns === 'auto' ? -1 : columns,
|
|
58
|
+
};
|
|
59
|
+
this.ast.elements.unshift(setting);
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Gets the current column setting
|
|
64
|
+
*/
|
|
65
|
+
getColumns() {
|
|
66
|
+
const setting = this.ast.elements.find((e) => 'type' in e && e.type === 'column-setting');
|
|
67
|
+
if (!setting)
|
|
68
|
+
return undefined;
|
|
69
|
+
return setting.columns === -1 ? 'auto' : setting.columns;
|
|
70
|
+
}
|
|
71
|
+
// ============ Node Operations ============
|
|
72
|
+
/**
|
|
73
|
+
* Adds a node to the diagram
|
|
74
|
+
*/
|
|
75
|
+
addNode(id, options) {
|
|
76
|
+
const node = {
|
|
77
|
+
id,
|
|
78
|
+
label: options?.label,
|
|
79
|
+
shape: options?.shape || 'square',
|
|
80
|
+
widthInColumns: options?.widthInColumns || 1,
|
|
81
|
+
directions: options?.directions,
|
|
82
|
+
};
|
|
83
|
+
this.ast.elements.push(node);
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Gets a node by id
|
|
88
|
+
*/
|
|
89
|
+
getNode(id) {
|
|
90
|
+
return this.findNodes().find((n) => n.id === id);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Finds all nodes in the diagram (including nested)
|
|
94
|
+
*/
|
|
95
|
+
findNodes() {
|
|
96
|
+
const nodes = [];
|
|
97
|
+
const collectNodes = (elements) => {
|
|
98
|
+
for (const elem of elements) {
|
|
99
|
+
if (isBlockNode(elem)) {
|
|
100
|
+
nodes.push(elem);
|
|
101
|
+
}
|
|
102
|
+
else if (isBlockComposite(elem)) {
|
|
103
|
+
collectNodes(elem.children);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
collectNodes(this.ast.elements);
|
|
108
|
+
return nodes;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Removes a node by id
|
|
112
|
+
*/
|
|
113
|
+
removeNode(id) {
|
|
114
|
+
this.ast.elements = this.ast.elements.filter((e) => !isBlockNode(e) || e.id !== id);
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Gets the number of nodes
|
|
119
|
+
*/
|
|
120
|
+
get nodeCount() {
|
|
121
|
+
return this.findNodes().length;
|
|
122
|
+
}
|
|
123
|
+
// ============ Edge Operations ============
|
|
124
|
+
/**
|
|
125
|
+
* Adds an edge between two nodes
|
|
126
|
+
*/
|
|
127
|
+
addEdge(from, to, options) {
|
|
128
|
+
const edge = {
|
|
129
|
+
id: `${from}-${to}`,
|
|
130
|
+
start: from,
|
|
131
|
+
end: to,
|
|
132
|
+
label: options?.label,
|
|
133
|
+
edgeType: options?.edgeType || 'arrow',
|
|
134
|
+
};
|
|
135
|
+
this.ast.elements.push(edge);
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Finds all edges in the diagram
|
|
140
|
+
*/
|
|
141
|
+
findEdges() {
|
|
142
|
+
return this.ast.elements.filter(isBlockEdge);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Removes an edge by id or by source/target
|
|
146
|
+
*/
|
|
147
|
+
removeEdge(idOrFrom, to) {
|
|
148
|
+
if (to) {
|
|
149
|
+
// Remove by source/target
|
|
150
|
+
this.ast.elements = this.ast.elements.filter((e) => !isBlockEdge(e) || !(e.start === idOrFrom && e.end === to));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Remove by id
|
|
154
|
+
this.ast.elements = this.ast.elements.filter((e) => !isBlockEdge(e) || e.id !== idOrFrom);
|
|
155
|
+
}
|
|
156
|
+
return this;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Gets the number of edges
|
|
160
|
+
*/
|
|
161
|
+
get edgeCount() {
|
|
162
|
+
return this.findEdges().length;
|
|
163
|
+
}
|
|
164
|
+
// ============ Space Operations ============
|
|
165
|
+
/**
|
|
166
|
+
* Adds a space block for layout
|
|
167
|
+
*/
|
|
168
|
+
addSpace(width = 1) {
|
|
169
|
+
const space = {
|
|
170
|
+
id: `space_${Date.now()}`,
|
|
171
|
+
type: 'space',
|
|
172
|
+
width,
|
|
173
|
+
};
|
|
174
|
+
this.ast.elements.push(space);
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Finds all space blocks
|
|
179
|
+
*/
|
|
180
|
+
findSpaces() {
|
|
181
|
+
return this.ast.elements.filter(isBlockSpace);
|
|
182
|
+
}
|
|
183
|
+
// ============ Composite Block Operations ============
|
|
184
|
+
/**
|
|
185
|
+
* Adds a composite (nested) block
|
|
186
|
+
*/
|
|
187
|
+
addComposite(id, label) {
|
|
188
|
+
const composite = {
|
|
189
|
+
id,
|
|
190
|
+
type: 'composite',
|
|
191
|
+
label,
|
|
192
|
+
children: [],
|
|
193
|
+
};
|
|
194
|
+
this.ast.elements.push(composite);
|
|
195
|
+
return this;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Gets a composite block by id
|
|
199
|
+
*/
|
|
200
|
+
getComposite(id) {
|
|
201
|
+
return this.ast.elements.find((e) => isBlockComposite(e) && e.id === id);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Finds all composite blocks
|
|
205
|
+
*/
|
|
206
|
+
findComposites() {
|
|
207
|
+
return this.ast.elements.filter(isBlockComposite);
|
|
208
|
+
}
|
|
209
|
+
// ============ Style Operations ============
|
|
210
|
+
/**
|
|
211
|
+
* Defines a CSS class
|
|
212
|
+
*/
|
|
213
|
+
defineClass(name, css) {
|
|
214
|
+
const classDef = {
|
|
215
|
+
type: 'classDef',
|
|
216
|
+
id: name,
|
|
217
|
+
css,
|
|
218
|
+
};
|
|
219
|
+
this.ast.classDefs.set(name, css);
|
|
220
|
+
this.ast.elements.push(classDef);
|
|
221
|
+
return this;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Applies a class to nodes
|
|
225
|
+
*/
|
|
226
|
+
applyClass(nodeIds, className) {
|
|
227
|
+
const ids = Array.isArray(nodeIds) ? nodeIds.join(', ') : nodeIds;
|
|
228
|
+
const applyClass = {
|
|
229
|
+
type: 'applyClass',
|
|
230
|
+
id: ids,
|
|
231
|
+
styleClass: className,
|
|
232
|
+
};
|
|
233
|
+
for (const nodeId of Array.isArray(nodeIds) ? nodeIds : [nodeIds]) {
|
|
234
|
+
this.ast.classAssignments.set(nodeId, className);
|
|
235
|
+
}
|
|
236
|
+
this.ast.elements.push(applyClass);
|
|
237
|
+
return this;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Applies inline styles to nodes
|
|
241
|
+
*/
|
|
242
|
+
applyStyles(nodeIds, styles) {
|
|
243
|
+
const ids = Array.isArray(nodeIds) ? nodeIds.join(', ') : nodeIds;
|
|
244
|
+
const applyStyles = {
|
|
245
|
+
type: 'applyStyles',
|
|
246
|
+
id: ids,
|
|
247
|
+
stylesStr: styles,
|
|
248
|
+
};
|
|
249
|
+
for (const nodeId of Array.isArray(nodeIds) ? nodeIds : [nodeIds]) {
|
|
250
|
+
this.ast.styleAssignments.set(nodeId, styles);
|
|
251
|
+
}
|
|
252
|
+
this.ast.elements.push(applyStyles);
|
|
253
|
+
return this;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Gets all defined classes
|
|
257
|
+
*/
|
|
258
|
+
getClassDefs() {
|
|
259
|
+
return new Map(this.ast.classDefs);
|
|
260
|
+
}
|
|
261
|
+
// ============ Accessibility ============
|
|
262
|
+
/**
|
|
263
|
+
* Sets the accessibility title
|
|
264
|
+
*/
|
|
265
|
+
setAccTitle(title) {
|
|
266
|
+
this.ast.accTitle = title;
|
|
267
|
+
return this;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Gets the accessibility title
|
|
271
|
+
*/
|
|
272
|
+
getAccTitle() {
|
|
273
|
+
return this.ast.accTitle;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Sets the accessibility description
|
|
277
|
+
*/
|
|
278
|
+
setAccDescr(descr) {
|
|
279
|
+
this.ast.accDescr = descr;
|
|
280
|
+
return this;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Gets the accessibility description
|
|
284
|
+
*/
|
|
285
|
+
getAccDescr() {
|
|
286
|
+
return this.ast.accDescr;
|
|
287
|
+
}
|
|
288
|
+
// ============ Element Count ============
|
|
289
|
+
/**
|
|
290
|
+
* Gets the total number of elements
|
|
291
|
+
*/
|
|
292
|
+
get elementCount() {
|
|
293
|
+
return this.ast.elements.length;
|
|
294
|
+
}
|
|
295
|
+
}
|