@tldraw/mermaid 4.6.0-internal.c7df3c92455a
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-cjs/blueprint.js +17 -0
- package/dist-cjs/blueprint.js.map +7 -0
- package/dist-cjs/colors.js +173 -0
- package/dist-cjs/colors.js.map +7 -0
- package/dist-cjs/createMermaidDiagram.js +144 -0
- package/dist-cjs/createMermaidDiagram.js.map +7 -0
- package/dist-cjs/flowchartDiagram.js +202 -0
- package/dist-cjs/flowchartDiagram.js.map +7 -0
- package/dist-cjs/index.d.ts +114 -0
- package/dist-cjs/index.js +34 -0
- package/dist-cjs/index.js.map +7 -0
- package/dist-cjs/renderBlueprint.js +314 -0
- package/dist-cjs/renderBlueprint.js.map +7 -0
- package/dist-cjs/sequenceDiagram.js +686 -0
- package/dist-cjs/sequenceDiagram.js.map +7 -0
- package/dist-cjs/stateDiagram.js +373 -0
- package/dist-cjs/stateDiagram.js.map +7 -0
- package/dist-cjs/svgParsing.js +187 -0
- package/dist-cjs/svgParsing.js.map +7 -0
- package/dist-cjs/utils.js +75 -0
- package/dist-cjs/utils.js.map +7 -0
- package/dist-esm/blueprint.mjs +1 -0
- package/dist-esm/blueprint.mjs.map +7 -0
- package/dist-esm/colors.mjs +153 -0
- package/dist-esm/colors.mjs.map +7 -0
- package/dist-esm/createMermaidDiagram.mjs +114 -0
- package/dist-esm/createMermaidDiagram.mjs.map +7 -0
- package/dist-esm/flowchartDiagram.mjs +188 -0
- package/dist-esm/flowchartDiagram.mjs.map +7 -0
- package/dist-esm/index.d.mts +114 -0
- package/dist-esm/index.mjs +14 -0
- package/dist-esm/index.mjs.map +7 -0
- package/dist-esm/renderBlueprint.mjs +298 -0
- package/dist-esm/renderBlueprint.mjs.map +7 -0
- package/dist-esm/sequenceDiagram.mjs +666 -0
- package/dist-esm/sequenceDiagram.mjs.map +7 -0
- package/dist-esm/stateDiagram.mjs +359 -0
- package/dist-esm/stateDiagram.mjs.map +7 -0
- package/dist-esm/svgParsing.mjs +167 -0
- package/dist-esm/svgParsing.mjs.map +7 -0
- package/dist-esm/utils.mjs +55 -0
- package/dist-esm/utils.mjs.map +7 -0
- package/package.json +62 -0
- package/src/blueprint.ts +75 -0
- package/src/colors.ts +215 -0
- package/src/createMermaidDiagram.test.ts +31 -0
- package/src/createMermaidDiagram.ts +155 -0
- package/src/flowchartDiagram.ts +232 -0
- package/src/index.ts +18 -0
- package/src/mermaidDiagrams.test.ts +880 -0
- package/src/renderBlueprint.ts +373 -0
- package/src/sequenceDiagram.ts +851 -0
- package/src/stateDiagram.ts +477 -0
- package/src/svgParsing.ts +240 -0
- package/src/utils.ts +73 -0
package/src/utils.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const BEND_SCALE = -1.8
|
|
2
|
+
const MAX_ARROW_BEND = 200
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Extrapolate a bend value for tldraw arrows from Mermaid edge path waypoints.
|
|
6
|
+
* Uses perpendicular distance from chord to mid-points, scaled and clamped.
|
|
7
|
+
*/
|
|
8
|
+
export function getArrowBend(edgeData: { points: { x: number; y: number }[] }) {
|
|
9
|
+
const points = edgeData.points
|
|
10
|
+
|
|
11
|
+
if (points.length < 2) {
|
|
12
|
+
return 0
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const start = points[0]
|
|
16
|
+
const end = points[points.length - 1]
|
|
17
|
+
const dx = end.x - start.x
|
|
18
|
+
const dy = end.y - start.y
|
|
19
|
+
const chordLength = Math.sqrt(dx * dx + dy * dy)
|
|
20
|
+
|
|
21
|
+
if (chordLength === 0) return 0
|
|
22
|
+
|
|
23
|
+
let maxDistance = 0
|
|
24
|
+
for (let i = 1; i < points.length - 1; i++) {
|
|
25
|
+
const distance = ((points[i].x - start.x) * dy - (points[i].y - start.y) * dx) / chordLength
|
|
26
|
+
if (Math.abs(distance) > Math.abs(maxDistance)) {
|
|
27
|
+
maxDistance = distance
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const bend = maxDistance * BEND_SCALE
|
|
32
|
+
return Math.max(-MAX_ARROW_BEND, Math.min(MAX_ARROW_BEND, bend))
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Normalize HTML line breaks to newlines, decode HTML entities, and trim. */
|
|
36
|
+
export function sanitizeDiagramText(text: string): string {
|
|
37
|
+
if (typeof text !== 'string') return ''
|
|
38
|
+
const doc = new DOMParser().parseFromString(text.replace(/<br\s*\/?>/gi, '\n'), 'text/html')
|
|
39
|
+
return (doc.body.textContent ?? '').trim()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Scale factor applied to parsed SVG layout (nodes, clusters, edges). */
|
|
43
|
+
export const LAYOUT_SCALE = 1.25
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Order items top-down by parent relationship so parents are visited before children.
|
|
47
|
+
* Works for subgraphs (FlowSubGraph[]) and compound state IDs (string[]).
|
|
48
|
+
*/
|
|
49
|
+
export function orderTopDown<T>(
|
|
50
|
+
items: T[],
|
|
51
|
+
getId: (item: T) => string,
|
|
52
|
+
getParentId: (item: T) => string | undefined
|
|
53
|
+
): T[] {
|
|
54
|
+
const byId = new Map(items.map((item) => [getId(item), item]))
|
|
55
|
+
const visited = new Set<string>()
|
|
56
|
+
const result: T[] = []
|
|
57
|
+
|
|
58
|
+
function visit(id: string) {
|
|
59
|
+
if (visited.has(id)) return
|
|
60
|
+
visited.add(id)
|
|
61
|
+
const item = byId.get(id)
|
|
62
|
+
if (item) result.push(item)
|
|
63
|
+
for (const child of items) {
|
|
64
|
+
if (getParentId(child) === id) visit(getId(child))
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
for (const item of items) {
|
|
69
|
+
const parentId = getParentId(item)
|
|
70
|
+
if (!parentId || !byId.has(parentId)) visit(getId(item))
|
|
71
|
+
}
|
|
72
|
+
return result
|
|
73
|
+
}
|