@chengchenccc/tui 0.1.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/autocomplete.d.ts +56 -0
- package/dist/autocomplete.d.ts.map +1 -0
- package/dist/autocomplete.js +647 -0
- package/dist/components/box.d.ts +22 -0
- package/dist/components/box.d.ts.map +1 -0
- package/dist/components/box.js +103 -0
- package/dist/components/card.d.ts +33 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +49 -0
- package/dist/components/editor.d.ts +257 -0
- package/dist/components/editor.d.ts.map +1 -0
- package/dist/components/editor.js +1980 -0
- package/dist/components/input.d.ts +37 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +389 -0
- package/dist/components/loader.d.ts +33 -0
- package/dist/components/loader.d.ts.map +1 -0
- package/dist/components/loader.js +100 -0
- package/dist/components/markdown.d.ts +108 -0
- package/dist/components/markdown.d.ts.map +1 -0
- package/dist/components/markdown.js +847 -0
- package/dist/components/markdown.test.d.ts +2 -0
- package/dist/components/markdown.test.d.ts.map +1 -0
- package/dist/components/markdown.test.js +81 -0
- package/dist/components/output-block.d.ts +44 -0
- package/dist/components/output-block.d.ts.map +1 -0
- package/dist/components/output-block.js +131 -0
- package/dist/components/select-list.d.ts +50 -0
- package/dist/components/select-list.d.ts.map +1 -0
- package/dist/components/select-list.js +166 -0
- package/dist/components/spacer.d.ts +12 -0
- package/dist/components/spacer.d.ts.map +1 -0
- package/dist/components/spacer.js +22 -0
- package/dist/components/statusline.d.ts +30 -0
- package/dist/components/statusline.d.ts.map +1 -0
- package/dist/components/statusline.js +46 -0
- package/dist/components/text.d.ts +19 -0
- package/dist/components/text.d.ts.map +1 -0
- package/dist/components/text.js +90 -0
- package/dist/components/truncated-text.d.ts +13 -0
- package/dist/components/truncated-text.d.ts.map +1 -0
- package/dist/components/truncated-text.js +50 -0
- package/dist/editor-component.d.ts +39 -0
- package/dist/editor-component.d.ts.map +1 -0
- package/dist/editor-component.js +1 -0
- package/dist/fuzzy.d.ts +16 -0
- package/dist/fuzzy.d.ts.map +1 -0
- package/dist/fuzzy.js +109 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/keybindings.d.ts +193 -0
- package/dist/keybindings.d.ts.map +1 -0
- package/dist/keybindings.js +191 -0
- package/dist/keys.d.ts +184 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +1191 -0
- package/dist/kill-ring.d.ts +28 -0
- package/dist/kill-ring.d.ts.map +1 -0
- package/dist/kill-ring.js +43 -0
- package/dist/mermaid.d.ts +23 -0
- package/dist/mermaid.d.ts.map +1 -0
- package/dist/mermaid.js +77 -0
- package/dist/mouse.d.ts +40 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +39 -0
- package/dist/mouse.test.d.ts +2 -0
- package/dist/mouse.test.d.ts.map +1 -0
- package/dist/mouse.test.js +36 -0
- package/dist/native-modifiers.d.ts +3 -0
- package/dist/native-modifiers.d.ts.map +1 -0
- package/dist/native-modifiers.js +52 -0
- package/dist/stdin-buffer.d.ts +50 -0
- package/dist/stdin-buffer.d.ts.map +1 -0
- package/dist/stdin-buffer.js +360 -0
- package/dist/terminal-colors.d.ts +10 -0
- package/dist/terminal-colors.d.ts.map +1 -0
- package/dist/terminal-colors.js +58 -0
- package/dist/terminal-image.d.ts +90 -0
- package/dist/terminal-image.d.ts.map +1 -0
- package/dist/terminal-image.js +375 -0
- package/dist/terminal.d.ts +110 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +432 -0
- package/dist/tui-scrollback.test.d.ts +2 -0
- package/dist/tui-scrollback.test.d.ts.map +1 -0
- package/dist/tui-scrollback.test.js +51 -0
- package/dist/tui.d.ts +330 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +1568 -0
- package/dist/undo-stack.d.ts +17 -0
- package/dist/undo-stack.d.ts.map +1 -0
- package/dist/undo-stack.js +24 -0
- package/dist/utils.d.ts +85 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1066 -0
- package/dist/vendor/mermaid-ascii/ascii/ansi.d.ts +42 -0
- package/dist/vendor/mermaid-ascii/ascii/ansi.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/ansi.js +361 -0
- package/dist/vendor/mermaid-ascii/ascii/canvas.d.ts +90 -0
- package/dist/vendor/mermaid-ascii/ascii/canvas.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/canvas.js +414 -0
- package/dist/vendor/mermaid-ascii/ascii/class-diagram.d.ts +8 -0
- package/dist/vendor/mermaid-ascii/ascii/class-diagram.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/class-diagram.js +623 -0
- package/dist/vendor/mermaid-ascii/ascii/converter.d.ts +13 -0
- package/dist/vendor/mermaid-ascii/ascii/converter.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/converter.js +233 -0
- package/dist/vendor/mermaid-ascii/ascii/draw.d.ts +67 -0
- package/dist/vendor/mermaid-ascii/ascii/draw.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/draw.js +1313 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-bundling.d.ts +49 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-bundling.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-bundling.js +289 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-routing.d.ts +44 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-routing.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/edge-routing.js +302 -0
- package/dist/vendor/mermaid-ascii/ascii/er-diagram.d.ts +8 -0
- package/dist/vendor/mermaid-ascii/ascii/er-diagram.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/er-diagram.js +380 -0
- package/dist/vendor/mermaid-ascii/ascii/grid.d.ts +57 -0
- package/dist/vendor/mermaid-ascii/ascii/grid.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/grid.js +516 -0
- package/dist/vendor/mermaid-ascii/ascii/index.d.ts +66 -0
- package/dist/vendor/mermaid-ascii/ascii/index.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/index.js +133 -0
- package/dist/vendor/mermaid-ascii/ascii/multiline-utils.d.ts +28 -0
- package/dist/vendor/mermaid-ascii/ascii/multiline-utils.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/multiline-utils.js +60 -0
- package/dist/vendor/mermaid-ascii/ascii/pathfinder.d.ts +18 -0
- package/dist/vendor/mermaid-ascii/ascii/pathfinder.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/pathfinder.js +224 -0
- package/dist/vendor/mermaid-ascii/ascii/sequence.d.ts +8 -0
- package/dist/vendor/mermaid-ascii/ascii/sequence.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/sequence.js +416 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/circle.d.ts +12 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/circle.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/circle.js +22 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/corners.d.ts +35 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/corners.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/corners.js +91 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts +12 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/diamond.js +22 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts +12 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/hexagon.js +22 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/index.d.ts +27 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/index.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/index.js +66 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts +32 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rectangle.js +149 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts +12 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/rounded.js +22 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/special.d.ts +60 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/special.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/special.js +253 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts +18 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/stadium.js +103 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/state.d.ts +31 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/state.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/state.js +167 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/types.d.ts +56 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/shapes/types.js +4 -0
- package/dist/vendor/mermaid-ascii/ascii/types.d.ts +207 -0
- package/dist/vendor/mermaid-ascii/ascii/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/types.js +39 -0
- package/dist/vendor/mermaid-ascii/ascii/validate.d.ts +52 -0
- package/dist/vendor/mermaid-ascii/ascii/validate.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/validate.js +97 -0
- package/dist/vendor/mermaid-ascii/ascii/xychart.d.ts +3 -0
- package/dist/vendor/mermaid-ascii/ascii/xychart.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/ascii/xychart.js +719 -0
- package/dist/vendor/mermaid-ascii/class/parser.d.ts +7 -0
- package/dist/vendor/mermaid-ascii/class/parser.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/class/parser.js +265 -0
- package/dist/vendor/mermaid-ascii/class/types.d.ts +103 -0
- package/dist/vendor/mermaid-ascii/class/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/class/types.js +7 -0
- package/dist/vendor/mermaid-ascii/er/parser.d.ts +7 -0
- package/dist/vendor/mermaid-ascii/er/parser.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/er/parser.js +162 -0
- package/dist/vendor/mermaid-ascii/er/types.d.ts +77 -0
- package/dist/vendor/mermaid-ascii/er/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/er/types.js +7 -0
- package/dist/vendor/mermaid-ascii/index.d.ts +2 -0
- package/dist/vendor/mermaid-ascii/index.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/index.js +13 -0
- package/dist/vendor/mermaid-ascii/multiline-utils.d.ts +10 -0
- package/dist/vendor/mermaid-ascii/multiline-utils.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/multiline-utils.js +29 -0
- package/dist/vendor/mermaid-ascii/parser.d.ts +8 -0
- package/dist/vendor/mermaid-ascii/parser.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/parser.js +558 -0
- package/dist/vendor/mermaid-ascii/sequence/parser.d.ts +7 -0
- package/dist/vendor/mermaid-ascii/sequence/parser.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/sequence/parser.js +182 -0
- package/dist/vendor/mermaid-ascii/sequence/types.d.ts +131 -0
- package/dist/vendor/mermaid-ascii/sequence/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/sequence/types.js +7 -0
- package/dist/vendor/mermaid-ascii/text-metrics.d.ts +24 -0
- package/dist/vendor/mermaid-ascii/text-metrics.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/text-metrics.js +69 -0
- package/dist/vendor/mermaid-ascii/types.d.ts +115 -0
- package/dist/vendor/mermaid-ascii/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/types.js +4 -0
- package/dist/vendor/mermaid-ascii/xychart/colors.d.ts +26 -0
- package/dist/vendor/mermaid-ascii/xychart/colors.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/xychart/colors.js +145 -0
- package/dist/vendor/mermaid-ascii/xychart/parser.d.ts +7 -0
- package/dist/vendor/mermaid-ascii/xychart/parser.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/xychart/parser.js +105 -0
- package/dist/vendor/mermaid-ascii/xychart/types.d.ts +146 -0
- package/dist/vendor/mermaid-ascii/xychart/types.d.ts.map +1 -0
- package/dist/vendor/mermaid-ascii/xychart/types.js +8 -0
- package/dist/virtual-terminal.d.ts +80 -0
- package/dist/virtual-terminal.d.ts.map +1 -0
- package/dist/virtual-terminal.js +284 -0
- package/dist/word-navigation.d.ts +25 -0
- package/dist/word-navigation.d.ts.map +1 -0
- package/dist/word-navigation.js +97 -0
- package/package.json +38 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { normalizeBrTags } from "../multiline-utils.js";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Sequence diagram parser
|
|
4
|
+
//
|
|
5
|
+
// Parses Mermaid sequenceDiagram syntax into a SequenceDiagram structure.
|
|
6
|
+
//
|
|
7
|
+
// Supported syntax:
|
|
8
|
+
// participant A as Alice
|
|
9
|
+
// actor B as Bob
|
|
10
|
+
// A->>B: Solid arrow
|
|
11
|
+
// A-->>B: Dashed arrow
|
|
12
|
+
// A-)B: Open arrow
|
|
13
|
+
// A--)B: Dashed open arrow
|
|
14
|
+
// A->>+B: Activate target
|
|
15
|
+
// A-->>-B: Deactivate source
|
|
16
|
+
// loop Label ... end
|
|
17
|
+
// alt Label ... else Label ... end
|
|
18
|
+
// opt Label ... end
|
|
19
|
+
// par Label ... and Label ... end
|
|
20
|
+
// Note left of A: Text
|
|
21
|
+
// Note right of A: Text
|
|
22
|
+
// Note over A,B: Text
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* Parse a Mermaid sequence diagram.
|
|
26
|
+
* Expects the first line to be "sequenceDiagram".
|
|
27
|
+
*/
|
|
28
|
+
export function parseSequenceDiagram(lines) {
|
|
29
|
+
const diagram = {
|
|
30
|
+
actors: [],
|
|
31
|
+
messages: [],
|
|
32
|
+
blocks: [],
|
|
33
|
+
notes: [],
|
|
34
|
+
};
|
|
35
|
+
// Track actor IDs to auto-create actors referenced in messages
|
|
36
|
+
const actorIds = new Set();
|
|
37
|
+
// Track block nesting with a stack
|
|
38
|
+
const blockStack = [];
|
|
39
|
+
for (let i = 1; i < lines.length; i++) {
|
|
40
|
+
const line = lines[i];
|
|
41
|
+
// --- Participant / Actor declaration ---
|
|
42
|
+
// "participant A as Alice" or "participant Alice"
|
|
43
|
+
// "actor B as Bob" or "actor Bob"
|
|
44
|
+
const actorMatch = line.match(/^(participant|actor)\s+(\S+?)(?:\s+as\s+(.+))?$/);
|
|
45
|
+
if (actorMatch) {
|
|
46
|
+
const type = actorMatch[1];
|
|
47
|
+
const id = actorMatch[2];
|
|
48
|
+
const rawLabel = actorMatch[3]?.trim() ?? id;
|
|
49
|
+
const label = normalizeBrTags(rawLabel);
|
|
50
|
+
if (!actorIds.has(id)) {
|
|
51
|
+
actorIds.add(id);
|
|
52
|
+
diagram.actors.push({ id, label, type });
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// --- Note ---
|
|
57
|
+
// "Note left of A: text" / "Note right of A: text" / "Note over A,B: text"
|
|
58
|
+
const noteMatch = line.match(/^Note\s+(left of|right of|over)\s+([^:]+):\s*(.+)$/i);
|
|
59
|
+
if (noteMatch) {
|
|
60
|
+
const posStr = noteMatch[1].toLowerCase();
|
|
61
|
+
const actorsStr = noteMatch[2].trim();
|
|
62
|
+
const text = normalizeBrTags(noteMatch[3].trim());
|
|
63
|
+
const noteActorIds = actorsStr.split(',').map(s => s.trim());
|
|
64
|
+
// Ensure actors exist
|
|
65
|
+
for (const aid of noteActorIds) {
|
|
66
|
+
ensureActor(diagram, actorIds, aid);
|
|
67
|
+
}
|
|
68
|
+
let position = 'over';
|
|
69
|
+
if (posStr === 'left of')
|
|
70
|
+
position = 'left';
|
|
71
|
+
else if (posStr === 'right of')
|
|
72
|
+
position = 'right';
|
|
73
|
+
diagram.notes.push({
|
|
74
|
+
actorIds: noteActorIds,
|
|
75
|
+
text,
|
|
76
|
+
position,
|
|
77
|
+
afterIndex: diagram.messages.length - 1,
|
|
78
|
+
});
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
// --- Block start: loop, alt, opt, par, critical, break, rect ---
|
|
82
|
+
const blockMatch = line.match(/^(loop|alt|opt|par|critical|break|rect)\s*(.*)$/);
|
|
83
|
+
if (blockMatch) {
|
|
84
|
+
const blockType = blockMatch[1];
|
|
85
|
+
const rawBlockLabel = blockMatch[2]?.trim() ?? '';
|
|
86
|
+
const label = normalizeBrTags(rawBlockLabel);
|
|
87
|
+
blockStack.push({
|
|
88
|
+
type: blockType,
|
|
89
|
+
label,
|
|
90
|
+
startIndex: diagram.messages.length,
|
|
91
|
+
dividers: [],
|
|
92
|
+
});
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
// --- Block divider: else, and ---
|
|
96
|
+
const dividerMatch = line.match(/^(else|and)\s*(.*)$/);
|
|
97
|
+
if (dividerMatch && blockStack.length > 0) {
|
|
98
|
+
const rawDividerLabel = dividerMatch[2]?.trim() ?? '';
|
|
99
|
+
const label = normalizeBrTags(rawDividerLabel);
|
|
100
|
+
blockStack[blockStack.length - 1].dividers.push({
|
|
101
|
+
index: diagram.messages.length,
|
|
102
|
+
label,
|
|
103
|
+
});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// --- Block end ---
|
|
107
|
+
if (line === 'end' && blockStack.length > 0) {
|
|
108
|
+
const completed = blockStack.pop();
|
|
109
|
+
diagram.blocks.push({
|
|
110
|
+
type: completed.type,
|
|
111
|
+
label: completed.label,
|
|
112
|
+
startIndex: completed.startIndex,
|
|
113
|
+
endIndex: Math.max(diagram.messages.length - 1, completed.startIndex),
|
|
114
|
+
dividers: completed.dividers,
|
|
115
|
+
});
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// --- Message ---
|
|
119
|
+
// Patterns: A->>B, A-->>B, A-)B, A--)B, with optional +/- activation
|
|
120
|
+
// Format: FROM ARROW TO: LABEL
|
|
121
|
+
const msgMatch = line.match(/^(\S+?)\s*(--?>?>|--?[)x]|--?>>|--?>)\s*([+-]?)(\S+?)\s*:\s*(.+)$/);
|
|
122
|
+
if (msgMatch) {
|
|
123
|
+
const from = msgMatch[1];
|
|
124
|
+
const arrow = msgMatch[2];
|
|
125
|
+
const activationMark = msgMatch[3];
|
|
126
|
+
const to = msgMatch[4];
|
|
127
|
+
const label = normalizeBrTags(msgMatch[5].trim());
|
|
128
|
+
// Ensure both actors exist
|
|
129
|
+
ensureActor(diagram, actorIds, from);
|
|
130
|
+
ensureActor(diagram, actorIds, to);
|
|
131
|
+
// Determine line style and arrow head from the arrow operator
|
|
132
|
+
const lineStyle = arrow.startsWith('--') ? 'dashed' : 'solid';
|
|
133
|
+
// ">>" = filled arrow, ")" or ">" alone = open arrow, "x" = cross (treat as filled)
|
|
134
|
+
const arrowHead = arrow.includes('>>') || arrow.includes('x') ? 'filled' : 'open';
|
|
135
|
+
const msg = {
|
|
136
|
+
from,
|
|
137
|
+
to,
|
|
138
|
+
label,
|
|
139
|
+
lineStyle,
|
|
140
|
+
arrowHead,
|
|
141
|
+
};
|
|
142
|
+
// Activation/deactivation via +/- prefix on target
|
|
143
|
+
if (activationMark === '+')
|
|
144
|
+
msg.activate = true;
|
|
145
|
+
if (activationMark === '-')
|
|
146
|
+
msg.deactivate = true;
|
|
147
|
+
diagram.messages.push(msg);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// --- Simplified message format: A->>B: Label (fallback with more relaxed regex) ---
|
|
151
|
+
const simpleMsgMatch = line.match(/^(\S+?)\s*(->>|-->>|-\)|--\)|-x|--x|->|-->)\s*([+-]?)(\S+?)\s*:\s*(.+)$/);
|
|
152
|
+
if (simpleMsgMatch) {
|
|
153
|
+
const from = simpleMsgMatch[1];
|
|
154
|
+
const arrow = simpleMsgMatch[2];
|
|
155
|
+
const activationMark = simpleMsgMatch[3];
|
|
156
|
+
const to = simpleMsgMatch[4];
|
|
157
|
+
const label = normalizeBrTags(simpleMsgMatch[5].trim());
|
|
158
|
+
ensureActor(diagram, actorIds, from);
|
|
159
|
+
ensureActor(diagram, actorIds, to);
|
|
160
|
+
const lineStyle = arrow.startsWith('--') ? 'dashed' : 'solid';
|
|
161
|
+
const arrowHead = arrow.includes('>>') || arrow.includes('x') ? 'filled' : 'open';
|
|
162
|
+
const msg = { from, to, label, lineStyle, arrowHead };
|
|
163
|
+
if (activationMark === '+')
|
|
164
|
+
msg.activate = true;
|
|
165
|
+
if (activationMark === '-')
|
|
166
|
+
msg.deactivate = true;
|
|
167
|
+
diagram.messages.push(msg);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
// --- activate / deactivate explicit commands ---
|
|
171
|
+
// These are handled implicitly via +/- on messages but can also appear standalone
|
|
172
|
+
// For now, we skip explicit activate/deactivate lines (they affect rendering only)
|
|
173
|
+
}
|
|
174
|
+
return diagram;
|
|
175
|
+
}
|
|
176
|
+
/** Ensure an actor exists, creating a default participant if not */
|
|
177
|
+
function ensureActor(diagram, actorIds, id) {
|
|
178
|
+
if (!actorIds.has(id)) {
|
|
179
|
+
actorIds.add(id);
|
|
180
|
+
diagram.actors.push({ id, label: id, type: 'participant' });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** Parsed sequence diagram — logical structure from mermaid text */
|
|
2
|
+
export interface SequenceDiagram {
|
|
3
|
+
/** Ordered list of actors/participants */
|
|
4
|
+
actors: Actor[];
|
|
5
|
+
/** Messages between actors in chronological order */
|
|
6
|
+
messages: Message[];
|
|
7
|
+
/** Structural blocks (loop, alt, opt, par, critical) */
|
|
8
|
+
blocks: Block[];
|
|
9
|
+
/** Notes attached to actors */
|
|
10
|
+
notes: Note[];
|
|
11
|
+
}
|
|
12
|
+
export interface Actor {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
/** 'participant' renders as a box, 'actor' renders as a stick figure */
|
|
16
|
+
type: 'participant' | 'actor';
|
|
17
|
+
}
|
|
18
|
+
export interface Message {
|
|
19
|
+
from: string;
|
|
20
|
+
to: string;
|
|
21
|
+
label: string;
|
|
22
|
+
/** Arrow style: solid line or dashed line */
|
|
23
|
+
lineStyle: 'solid' | 'dashed';
|
|
24
|
+
/** Arrow head: filled (closed) or open */
|
|
25
|
+
arrowHead: 'filled' | 'open';
|
|
26
|
+
/** Activate the target lifeline (+) */
|
|
27
|
+
activate?: boolean;
|
|
28
|
+
/** Deactivate the source lifeline (-) */
|
|
29
|
+
deactivate?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface Block {
|
|
32
|
+
/** Block type keyword */
|
|
33
|
+
type: 'loop' | 'alt' | 'opt' | 'par' | 'critical' | 'break' | 'rect';
|
|
34
|
+
/** Label for the block header */
|
|
35
|
+
label: string;
|
|
36
|
+
/** Index of the first message inside this block */
|
|
37
|
+
startIndex: number;
|
|
38
|
+
/** Index of the last message inside this block (inclusive) */
|
|
39
|
+
endIndex: number;
|
|
40
|
+
/** For alt/par blocks: indices where "else"/"and" dividers appear (message indices) */
|
|
41
|
+
dividers: Array<{
|
|
42
|
+
index: number;
|
|
43
|
+
label: string;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
export interface Note {
|
|
47
|
+
/** Which actor(s) the note is attached to */
|
|
48
|
+
actorIds: string[];
|
|
49
|
+
/** Note text content */
|
|
50
|
+
text: string;
|
|
51
|
+
/** Position relative to the actor(s) */
|
|
52
|
+
position: 'left' | 'right' | 'over';
|
|
53
|
+
/** Message index after which this note appears */
|
|
54
|
+
afterIndex: number;
|
|
55
|
+
}
|
|
56
|
+
export interface PositionedSequenceDiagram {
|
|
57
|
+
width: number;
|
|
58
|
+
height: number;
|
|
59
|
+
actors: PositionedActor[];
|
|
60
|
+
lifelines: Lifeline[];
|
|
61
|
+
messages: PositionedMessage[];
|
|
62
|
+
activations: Activation[];
|
|
63
|
+
blocks: PositionedBlock[];
|
|
64
|
+
notes: PositionedNote[];
|
|
65
|
+
}
|
|
66
|
+
export interface PositionedActor {
|
|
67
|
+
id: string;
|
|
68
|
+
label: string;
|
|
69
|
+
type: 'participant' | 'actor';
|
|
70
|
+
/** Center x of the actor box */
|
|
71
|
+
x: number;
|
|
72
|
+
/** Top y of the actor box */
|
|
73
|
+
y: number;
|
|
74
|
+
width: number;
|
|
75
|
+
height: number;
|
|
76
|
+
}
|
|
77
|
+
/** Vertical dashed line from actor to bottom of diagram */
|
|
78
|
+
export interface Lifeline {
|
|
79
|
+
actorId: string;
|
|
80
|
+
x: number;
|
|
81
|
+
topY: number;
|
|
82
|
+
bottomY: number;
|
|
83
|
+
}
|
|
84
|
+
export interface PositionedMessage {
|
|
85
|
+
from: string;
|
|
86
|
+
to: string;
|
|
87
|
+
label: string;
|
|
88
|
+
lineStyle: 'solid' | 'dashed';
|
|
89
|
+
arrowHead: 'filled' | 'open';
|
|
90
|
+
/** Start point (from actor's lifeline) */
|
|
91
|
+
x1: number;
|
|
92
|
+
/** End point (to actor's lifeline) */
|
|
93
|
+
x2: number;
|
|
94
|
+
/** Vertical position */
|
|
95
|
+
y: number;
|
|
96
|
+
/** Whether this is a self-message (same actor) */
|
|
97
|
+
isSelf: boolean;
|
|
98
|
+
}
|
|
99
|
+
/** Narrow rectangle on a lifeline showing active processing */
|
|
100
|
+
export interface Activation {
|
|
101
|
+
actorId: string;
|
|
102
|
+
x: number;
|
|
103
|
+
topY: number;
|
|
104
|
+
bottomY: number;
|
|
105
|
+
width: number;
|
|
106
|
+
}
|
|
107
|
+
export interface PositionedBlock {
|
|
108
|
+
type: Block['type'];
|
|
109
|
+
label: string;
|
|
110
|
+
x: number;
|
|
111
|
+
y: number;
|
|
112
|
+
width: number;
|
|
113
|
+
height: number;
|
|
114
|
+
/** Divider lines within the block (for alt/par) */
|
|
115
|
+
dividers: Array<{
|
|
116
|
+
y: number;
|
|
117
|
+
label: string;
|
|
118
|
+
}>;
|
|
119
|
+
}
|
|
120
|
+
export interface PositionedNote {
|
|
121
|
+
text: string;
|
|
122
|
+
x: number;
|
|
123
|
+
y: number;
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
/** Actor IDs this note is attached to (for SVG attribution) */
|
|
127
|
+
actors?: string[];
|
|
128
|
+
/** Note position relative to actors (for SVG attribution) */
|
|
129
|
+
position?: 'left' | 'right' | 'over';
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/vendor/mermaid-ascii/sequence/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Sequence diagram types
|
|
3
|
+
//
|
|
4
|
+
// Models the parsed and positioned representations of a Mermaid sequence diagram.
|
|
5
|
+
// Sequence diagrams show actor interactions over time (vertical timeline).
|
|
6
|
+
// ============================================================================
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Placeholder occupying the second cell of a fullwidth glyph on the ASCII
|
|
3
|
+
* canvas. U+0000 cannot appear in parsed Mermaid labels, is treated as
|
|
4
|
+
* occupied label content by canvas merging, and is stripped at
|
|
5
|
+
* serialization time. Invariant: a WIDE_PAD cell always sits immediately
|
|
6
|
+
* right of its lead cell; canvas writes keep the pair atomic.
|
|
7
|
+
*/
|
|
8
|
+
export declare const WIDE_PAD = "\0";
|
|
9
|
+
/** Opaque label-space placeholder that serializes back to a regular space. */
|
|
10
|
+
export declare const LABEL_SPACE = "\u0001";
|
|
11
|
+
/**
|
|
12
|
+
* Display width of a string in terminal columns, summed over grapheme
|
|
13
|
+
* clusters so it always equals `toCells(text).length`. ASCII-only strings
|
|
14
|
+
* take a fast path.
|
|
15
|
+
*/
|
|
16
|
+
export declare function displayWidth(text: string): number;
|
|
17
|
+
/**
|
|
18
|
+
* Expand a string into ASCII-canvas cells: each 2-column grapheme cluster
|
|
19
|
+
* is stored whole in one cell and followed by WIDE_PAD, so that
|
|
20
|
+
* `cells.length === displayWidth(text)`. Per-character placement loops can
|
|
21
|
+
* iterate the result with plain cell offsets.
|
|
22
|
+
*/
|
|
23
|
+
export declare function toCells(text: string): string[];
|
|
24
|
+
//# sourceMappingURL=text-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-metrics.d.ts","sourceRoot":"","sources":["../../../src/vendor/mermaid-ascii/text-metrics.ts"],"names":[],"mappings":"AAsBA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,OAAW,CAAA;AAEhC,8EAA8E;AAC9E,eAAO,MAAM,WAAW,WAAW,CAAA;AAInC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAS9C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// Terminal display width — used by the ASCII renderer
|
|
3
|
+
//
|
|
4
|
+
// Terminals render most characters in 1 column, but East Asian wide
|
|
5
|
+
// characters (CJK ideographs, Hangul, kana, fullwidth forms) and
|
|
6
|
+
// emoji-presentation glyphs occupy 2 columns. The ASCII canvas is a
|
|
7
|
+
// cell-per-column grid, so its width math counts display columns rather
|
|
8
|
+
// than code units.
|
|
9
|
+
//
|
|
10
|
+
// Width is delegated to Bun.stringWidth (wcwidth-style, locale-insensitive):
|
|
11
|
+
// East Asian Wide/Fullwidth and emoji-presentation graphemes (incl. ZWJ
|
|
12
|
+
// sequences and regional-indicator flags) measure 2; box-drawing, the
|
|
13
|
+
// renderer's narrow arrowheads (◀ ▶ ►), and East Asian Ambiguous glyphs
|
|
14
|
+
// measure 1. This matches the renderer's structural glyph set exactly.
|
|
15
|
+
//
|
|
16
|
+
// Text is measured in grapheme clusters (Intl.Segmenter): a cluster that
|
|
17
|
+
// renders 2 columns is stored as its full string in one canvas cell
|
|
18
|
+
// followed by WIDE_PAD in the continuation cell it covers. The ASCII
|
|
19
|
+
// serializers drop WIDE_PAD cells when joining a row, so the emitted line
|
|
20
|
+
// occupies exactly as many terminal columns as the canvas has cells.
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Placeholder occupying the second cell of a fullwidth glyph on the ASCII
|
|
24
|
+
* canvas. U+0000 cannot appear in parsed Mermaid labels, is treated as
|
|
25
|
+
* occupied label content by canvas merging, and is stripped at
|
|
26
|
+
* serialization time. Invariant: a WIDE_PAD cell always sits immediately
|
|
27
|
+
* right of its lead cell; canvas writes keep the pair atomic.
|
|
28
|
+
*/
|
|
29
|
+
export const WIDE_PAD = '\u0000';
|
|
30
|
+
/** Opaque label-space placeholder that serializes back to a regular space. */
|
|
31
|
+
export const LABEL_SPACE = '\u0001';
|
|
32
|
+
const graphemeSegmenter = new Intl.Segmenter();
|
|
33
|
+
/**
|
|
34
|
+
* Display width of a string in terminal columns, summed over grapheme
|
|
35
|
+
* clusters so it always equals `toCells(text).length`. ASCII-only strings
|
|
36
|
+
* take a fast path.
|
|
37
|
+
*/
|
|
38
|
+
export function displayWidth(text) {
|
|
39
|
+
let ascii = true;
|
|
40
|
+
for (let i = 0; i < text.length; i++) {
|
|
41
|
+
if (text.charCodeAt(i) > 0x7e) {
|
|
42
|
+
ascii = false;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (ascii)
|
|
47
|
+
return text.length;
|
|
48
|
+
let width = 0;
|
|
49
|
+
for (const seg of graphemeSegmenter.segment(text)) {
|
|
50
|
+
width += Bun.stringWidth(seg.segment) >= 2 ? 2 : 1;
|
|
51
|
+
}
|
|
52
|
+
return width;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Expand a string into ASCII-canvas cells: each 2-column grapheme cluster
|
|
56
|
+
* is stored whole in one cell and followed by WIDE_PAD, so that
|
|
57
|
+
* `cells.length === displayWidth(text)`. Per-character placement loops can
|
|
58
|
+
* iterate the result with plain cell offsets.
|
|
59
|
+
*/
|
|
60
|
+
export function toCells(text) {
|
|
61
|
+
const cells = [];
|
|
62
|
+
for (const seg of graphemeSegmenter.segment(text)) {
|
|
63
|
+
cells.push(seg.segment);
|
|
64
|
+
if (Bun.stringWidth(seg.segment) >= 2) {
|
|
65
|
+
cells.push(WIDE_PAD);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return cells;
|
|
69
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export interface MermaidGraph {
|
|
2
|
+
direction: Direction;
|
|
3
|
+
nodes: Map<string, MermaidNode>;
|
|
4
|
+
edges: MermaidEdge[];
|
|
5
|
+
subgraphs: MermaidSubgraph[];
|
|
6
|
+
classDefs: Map<string, Record<string, string>>;
|
|
7
|
+
/** Maps node IDs to their class names (from `class X className` or `:::className` shorthand) */
|
|
8
|
+
classAssignments: Map<string, string>;
|
|
9
|
+
/** Maps node IDs to inline styles (from `style X fill:#f00,stroke:#333`) */
|
|
10
|
+
nodeStyles: Map<string, Record<string, string>>;
|
|
11
|
+
/** Maps edge indices (or 'default') to inline styles from `linkStyle` directives */
|
|
12
|
+
linkStyles: Map<number | 'default', Record<string, string>>;
|
|
13
|
+
}
|
|
14
|
+
export type Direction = 'TD' | 'TB' | 'LR' | 'BT' | 'RL';
|
|
15
|
+
export interface MermaidNode {
|
|
16
|
+
id: string;
|
|
17
|
+
label: string;
|
|
18
|
+
shape: NodeShape;
|
|
19
|
+
}
|
|
20
|
+
export type NodeShape = 'rectangle' | 'rounded' | 'diamond' | 'stadium' | 'circle' | 'subroutine' | 'doublecircle' | 'hexagon' | 'cylinder' | 'asymmetric' | 'trapezoid' | 'trapezoid-alt' | 'state-start' | 'state-end';
|
|
21
|
+
export interface MermaidEdge {
|
|
22
|
+
source: string;
|
|
23
|
+
target: string;
|
|
24
|
+
label?: string;
|
|
25
|
+
style: EdgeStyle;
|
|
26
|
+
/** Whether to render an arrowhead at the start (source end) of the edge */
|
|
27
|
+
hasArrowStart: boolean;
|
|
28
|
+
/** Whether to render an arrowhead at the end (target end) of the edge */
|
|
29
|
+
hasArrowEnd: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type EdgeStyle = 'solid' | 'dotted' | 'thick';
|
|
32
|
+
export interface MermaidSubgraph {
|
|
33
|
+
id: string;
|
|
34
|
+
label: string;
|
|
35
|
+
nodeIds: string[];
|
|
36
|
+
children: MermaidSubgraph[];
|
|
37
|
+
/** Optional direction override for this subgraph's internal layout */
|
|
38
|
+
direction?: Direction;
|
|
39
|
+
}
|
|
40
|
+
export interface PositionedGraph {
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
nodes: PositionedNode[];
|
|
44
|
+
edges: PositionedEdge[];
|
|
45
|
+
groups: PositionedGroup[];
|
|
46
|
+
}
|
|
47
|
+
export interface PositionedNode {
|
|
48
|
+
id: string;
|
|
49
|
+
label: string;
|
|
50
|
+
shape: NodeShape;
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
/** Inline styles resolved from classDef + explicit `style` statements — override theme defaults */
|
|
56
|
+
inlineStyle?: Record<string, string>;
|
|
57
|
+
}
|
|
58
|
+
export interface PositionedEdge {
|
|
59
|
+
source: string;
|
|
60
|
+
target: string;
|
|
61
|
+
label?: string;
|
|
62
|
+
style: EdgeStyle;
|
|
63
|
+
hasArrowStart: boolean;
|
|
64
|
+
hasArrowEnd: boolean;
|
|
65
|
+
/** Full path including bends — array of {x, y} points */
|
|
66
|
+
points: Point[];
|
|
67
|
+
/** Layout-computed label center position (avoids label-label collisions) */
|
|
68
|
+
labelPosition?: Point;
|
|
69
|
+
/** Inline styles resolved from `linkStyle` directives — override theme defaults */
|
|
70
|
+
inlineStyle?: Record<string, string>;
|
|
71
|
+
}
|
|
72
|
+
export interface Point {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
}
|
|
76
|
+
export interface PositionedGroup {
|
|
77
|
+
id: string;
|
|
78
|
+
label: string;
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
width: number;
|
|
82
|
+
height: number;
|
|
83
|
+
children: PositionedGroup[];
|
|
84
|
+
}
|
|
85
|
+
export interface RenderOptions {
|
|
86
|
+
/** Background color → CSS variable --bg. Default: '#FFFFFF' */
|
|
87
|
+
bg?: string;
|
|
88
|
+
/** Foreground / primary text color → CSS variable --fg. Default: '#27272A' */
|
|
89
|
+
fg?: string;
|
|
90
|
+
/** Edge/connector color → CSS variable --line */
|
|
91
|
+
line?: string;
|
|
92
|
+
/** Arrow heads, highlights → CSS variable --accent */
|
|
93
|
+
accent?: string;
|
|
94
|
+
/** Secondary text, edge labels → CSS variable --muted */
|
|
95
|
+
muted?: string;
|
|
96
|
+
/** Node/box fill tint → CSS variable --surface */
|
|
97
|
+
surface?: string;
|
|
98
|
+
/** Node/group stroke color → CSS variable --border */
|
|
99
|
+
border?: string;
|
|
100
|
+
/** Font family for all text. Default: 'Inter' */
|
|
101
|
+
font?: string;
|
|
102
|
+
/** Canvas padding in px. Default: 40 */
|
|
103
|
+
padding?: number;
|
|
104
|
+
/** Horizontal spacing between sibling nodes. Default: 24 */
|
|
105
|
+
nodeSpacing?: number;
|
|
106
|
+
/** Vertical spacing between layers. Default: 40 */
|
|
107
|
+
layerSpacing?: number;
|
|
108
|
+
/** Spacing between disconnected components. Default: nodeSpacing (24) */
|
|
109
|
+
componentSpacing?: number;
|
|
110
|
+
/** Render with transparent background (no background style on SVG). Default: false */
|
|
111
|
+
transparent?: boolean;
|
|
112
|
+
/** Enable hover tooltips on chart data points (xychart only). Default: false */
|
|
113
|
+
interactive?: boolean;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/vendor/mermaid-ascii/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Default accent for charts when the theme doesn't provide one. */
|
|
2
|
+
export declare const CHART_ACCENT_FALLBACK = "#3b82f6";
|
|
3
|
+
/** Check whether a string is a valid 6-digit hex color (e.g. "#3b82f6"). */
|
|
4
|
+
export declare function isValidHex(color: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Detect whether a background color is dark (lightness < 50%).
|
|
7
|
+
*/
|
|
8
|
+
export declare function isDarkBackground(bgHex: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Mix two hex colors in RGB space.
|
|
11
|
+
* `ratio` controls how much of `fgHex` shows: 0 = pure bg, 1 = pure fg.
|
|
12
|
+
* Equivalent to alpha-compositing fg over bg at the given opacity.
|
|
13
|
+
*/
|
|
14
|
+
export declare function mixHexColors(bgHex: string, fgHex: string, ratio: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get the hex color for a series index.
|
|
17
|
+
* Index 0 returns the accent color as-is.
|
|
18
|
+
* Index 1+ alternate between darker and lighter shades of the same hue
|
|
19
|
+
* with subtle hue drift (±8-12° per tier) to stay in the same family.
|
|
20
|
+
*
|
|
21
|
+
* When `bgColor` is provided, shade direction adapts to the background:
|
|
22
|
+
* - Light bg: odd = darker, even = lighter (default)
|
|
23
|
+
* - Dark bg: odd = lighter, even = darker (so shades stay visible)
|
|
24
|
+
*/
|
|
25
|
+
export declare function getSeriesColor(index: number, accentColor: string, bgColor?: string): string;
|
|
26
|
+
//# sourceMappingURL=colors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../../src/vendor/mermaid-ascii/xychart/colors.ts"],"names":[],"mappings":"AAWA,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,YAAY,CAAA;AAuE9C,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAsB3F"}
|