@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.
Files changed (55) hide show
  1. package/dist-cjs/blueprint.js +17 -0
  2. package/dist-cjs/blueprint.js.map +7 -0
  3. package/dist-cjs/colors.js +173 -0
  4. package/dist-cjs/colors.js.map +7 -0
  5. package/dist-cjs/createMermaidDiagram.js +144 -0
  6. package/dist-cjs/createMermaidDiagram.js.map +7 -0
  7. package/dist-cjs/flowchartDiagram.js +202 -0
  8. package/dist-cjs/flowchartDiagram.js.map +7 -0
  9. package/dist-cjs/index.d.ts +114 -0
  10. package/dist-cjs/index.js +34 -0
  11. package/dist-cjs/index.js.map +7 -0
  12. package/dist-cjs/renderBlueprint.js +314 -0
  13. package/dist-cjs/renderBlueprint.js.map +7 -0
  14. package/dist-cjs/sequenceDiagram.js +686 -0
  15. package/dist-cjs/sequenceDiagram.js.map +7 -0
  16. package/dist-cjs/stateDiagram.js +373 -0
  17. package/dist-cjs/stateDiagram.js.map +7 -0
  18. package/dist-cjs/svgParsing.js +187 -0
  19. package/dist-cjs/svgParsing.js.map +7 -0
  20. package/dist-cjs/utils.js +75 -0
  21. package/dist-cjs/utils.js.map +7 -0
  22. package/dist-esm/blueprint.mjs +1 -0
  23. package/dist-esm/blueprint.mjs.map +7 -0
  24. package/dist-esm/colors.mjs +153 -0
  25. package/dist-esm/colors.mjs.map +7 -0
  26. package/dist-esm/createMermaidDiagram.mjs +114 -0
  27. package/dist-esm/createMermaidDiagram.mjs.map +7 -0
  28. package/dist-esm/flowchartDiagram.mjs +188 -0
  29. package/dist-esm/flowchartDiagram.mjs.map +7 -0
  30. package/dist-esm/index.d.mts +114 -0
  31. package/dist-esm/index.mjs +14 -0
  32. package/dist-esm/index.mjs.map +7 -0
  33. package/dist-esm/renderBlueprint.mjs +298 -0
  34. package/dist-esm/renderBlueprint.mjs.map +7 -0
  35. package/dist-esm/sequenceDiagram.mjs +666 -0
  36. package/dist-esm/sequenceDiagram.mjs.map +7 -0
  37. package/dist-esm/stateDiagram.mjs +359 -0
  38. package/dist-esm/stateDiagram.mjs.map +7 -0
  39. package/dist-esm/svgParsing.mjs +167 -0
  40. package/dist-esm/svgParsing.mjs.map +7 -0
  41. package/dist-esm/utils.mjs +55 -0
  42. package/dist-esm/utils.mjs.map +7 -0
  43. package/package.json +62 -0
  44. package/src/blueprint.ts +75 -0
  45. package/src/colors.ts +215 -0
  46. package/src/createMermaidDiagram.test.ts +31 -0
  47. package/src/createMermaidDiagram.ts +155 -0
  48. package/src/flowchartDiagram.ts +232 -0
  49. package/src/index.ts +18 -0
  50. package/src/mermaidDiagrams.test.ts +880 -0
  51. package/src/renderBlueprint.ts +373 -0
  52. package/src/sequenceDiagram.ts +851 -0
  53. package/src/stateDiagram.ts +477 -0
  54. package/src/svgParsing.ts +240 -0
  55. 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
+ }