@diagrammo/dgmo 0.46.0 → 0.47.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.
Files changed (232) hide show
  1. package/dist/advanced.d.cts +3 -855
  2. package/dist/advanced.d.ts +3 -855
  3. package/dist/advanced.js +541 -70107
  4. package/dist/analyzer-UYKBXAKR.js +15 -0
  5. package/dist/auto.cjs +1 -1
  6. package/dist/auto.js +1 -1
  7. package/dist/auto.mjs +1 -1
  8. package/dist/block.js +83 -69417
  9. package/dist/calculator-LDYQCDDY.js +11 -0
  10. package/dist/charts-d3-QOZHKTCT.js +25 -0
  11. package/dist/chunk-2DXMZRWJ.js +800 -0
  12. package/dist/chunk-2LACINWN.js +786 -0
  13. package/dist/chunk-33LCUH4H.js +893 -0
  14. package/dist/chunk-3CIOJ5YJ.js +35 -0
  15. package/dist/chunk-3HDBAXF5.js +86 -0
  16. package/dist/chunk-3JLKYGBQ.js +290 -0
  17. package/dist/chunk-3MQQNXPD.js +415 -0
  18. package/dist/chunk-3R5POCTZ.js +967 -0
  19. package/dist/chunk-3SMGIJDD.js +112 -0
  20. package/dist/chunk-44CM72SQ.js +409 -0
  21. package/dist/chunk-4GRI7MEB.js +1604 -0
  22. package/dist/chunk-4OHACBGX.js +606 -0
  23. package/dist/chunk-5DH3KYFH.js +21 -0
  24. package/dist/chunk-5MLYVTYM.js +76 -0
  25. package/dist/chunk-5QXL4NYS.js +553 -0
  26. package/dist/chunk-5WRI5ZAA.js +31 -0
  27. package/dist/chunk-6EK55ART.js +117 -0
  28. package/dist/chunk-6FZYCKXB.js +2065 -0
  29. package/dist/chunk-6HO5ZTXK.js +277 -0
  30. package/dist/chunk-6KFWC4CO.js +7 -0
  31. package/dist/chunk-6MTWIQVO.js +121 -0
  32. package/dist/chunk-6NYWYNBI.js +329 -0
  33. package/dist/chunk-6SM5NJQH.js +620 -0
  34. package/dist/chunk-725LDASD.js +422 -0
  35. package/dist/chunk-76OWZ3BA.js +130 -0
  36. package/dist/chunk-7JEGTRLD.js +338 -0
  37. package/dist/chunk-A44USUV7.js +923 -0
  38. package/dist/chunk-A4GOY3PE.js +25 -0
  39. package/dist/chunk-A4VFQH5G.js +251 -0
  40. package/dist/chunk-AELOBFW5.js +375 -0
  41. package/dist/chunk-AN2MOO5T.js +522 -0
  42. package/dist/chunk-BMR4CIEO.js +41 -0
  43. package/dist/chunk-BS7SV7C3.js +51 -0
  44. package/dist/chunk-BUPDIHML.js +613 -0
  45. package/dist/chunk-BUVJFRPY.js +887 -0
  46. package/dist/chunk-C3Z4DX3V.js +112 -0
  47. package/dist/chunk-CI2G3OEB.js +1818 -0
  48. package/dist/chunk-CKNVO24D.js +54 -0
  49. package/dist/chunk-CUVHQHZ7.js +391 -0
  50. package/dist/chunk-CXK4DZH3.js +114 -0
  51. package/dist/chunk-DKEPS5LH.js +315 -0
  52. package/dist/chunk-DU7W62N5.js +487 -0
  53. package/dist/chunk-DZAQBW35.js +751 -0
  54. package/dist/chunk-EB6FPQUP.js +316 -0
  55. package/dist/chunk-EMS2SK26.js +376 -0
  56. package/dist/chunk-ERLBPDGU.js +510 -0
  57. package/dist/chunk-EVCVDTXE.js +732 -0
  58. package/dist/chunk-FCIIHT24.js +384 -0
  59. package/dist/chunk-FFUN5D66.js +97 -0
  60. package/dist/chunk-FITOLXSX.js +714 -0
  61. package/dist/chunk-FMDSF3OV.js +68 -0
  62. package/dist/chunk-FNB3PNGF.js +410 -0
  63. package/dist/chunk-G2H74XJZ.js +2104 -0
  64. package/dist/chunk-GMR5MFHJ.js +339 -0
  65. package/dist/chunk-H6PI3KJT.js +305 -0
  66. package/dist/chunk-I46X5VUA.js +59 -0
  67. package/dist/chunk-I5IGB56C.js +255 -0
  68. package/dist/chunk-IH6ZMVQ5.js +3950 -0
  69. package/dist/chunk-IJZFN3HM.js +463 -0
  70. package/dist/chunk-IPWPWM6R.js +3079 -0
  71. package/dist/chunk-IYULMRBE.js +23 -0
  72. package/dist/chunk-IZMRON6C.js +167 -0
  73. package/dist/chunk-J5FIXQRT.js +813 -0
  74. package/dist/chunk-JED6ZDEE.js +73 -0
  75. package/dist/chunk-JEUJOX5X.js +136 -0
  76. package/dist/chunk-JM4LEPY3.js +436 -0
  77. package/dist/chunk-L3UHP6TD.js +101 -0
  78. package/dist/chunk-L66GEFB6.js +524 -0
  79. package/dist/chunk-LIOHW36Z.js +469 -0
  80. package/dist/chunk-LP7EC4MI.js +16 -0
  81. package/dist/chunk-MITI6NOL.js +548 -0
  82. package/dist/chunk-MO5YHHMQ.js +168 -0
  83. package/dist/chunk-MZSBFAPJ.js +885 -0
  84. package/dist/chunk-NNAAJVBU.js +9 -0
  85. package/dist/chunk-NOTA6TEI.js +47 -0
  86. package/dist/chunk-NURGB5Z4.js +335 -0
  87. package/dist/chunk-NX4EQS3U.js +1062 -0
  88. package/dist/chunk-NXMESY4J.js +1 -0
  89. package/dist/chunk-OJR3MQYV.js +1458 -0
  90. package/dist/chunk-OURHMODR.js +454 -0
  91. package/dist/chunk-P235SVAH.js +1057 -0
  92. package/dist/chunk-P4RH4OSP.js +1038 -0
  93. package/dist/chunk-P6T66CCZ.js +226 -0
  94. package/dist/chunk-PBAHEPLQ.js +223 -0
  95. package/dist/chunk-PBHE5UG6.js +1530 -0
  96. package/dist/chunk-PDKUANDZ.js +35 -0
  97. package/dist/chunk-PWIHZ6NJ.js +296 -0
  98. package/dist/chunk-QEBUY5NY.js +1685 -0
  99. package/dist/chunk-QLCCJEJI.js +253 -0
  100. package/dist/chunk-QOOUC2J5.js +52 -0
  101. package/dist/chunk-QYTPPDAO.js +402 -0
  102. package/dist/chunk-R3XI2VC7.js +801 -0
  103. package/dist/chunk-RCERWOJR.js +154 -0
  104. package/dist/chunk-RJE5JTVK.js +362 -0
  105. package/dist/chunk-RTLBSQ3G.js +1155 -0
  106. package/dist/chunk-RUNNI6VE.js +448 -0
  107. package/dist/chunk-RVMRZAPB.js +354 -0
  108. package/dist/chunk-RYEGFMUO.js +955 -0
  109. package/dist/chunk-RZCF2VVM.js +528 -0
  110. package/dist/chunk-SML67VPV.js +1025 -0
  111. package/dist/chunk-SQ7IY53Q.js +44 -0
  112. package/dist/chunk-SQAG3UXH.js +161 -0
  113. package/dist/chunk-SRTU6HMQ.js +1851 -0
  114. package/dist/chunk-T2OE3YQB.js +550 -0
  115. package/dist/chunk-T3UBLACL.js +299 -0
  116. package/dist/chunk-TLVIHFRO.js +296 -0
  117. package/dist/chunk-TYS6CSS5.js +52 -0
  118. package/dist/chunk-U6EQI3U6.js +130 -0
  119. package/dist/chunk-UJ4FJLBF.js +86 -0
  120. package/dist/chunk-ULOEATBZ.js +347 -0
  121. package/dist/chunk-UNCCZ3NU.js +127 -0
  122. package/dist/chunk-USZW2HHU.js +197 -0
  123. package/dist/chunk-UWN33VNX.js +1610 -0
  124. package/dist/chunk-UZ7EZW3B.js +40 -0
  125. package/dist/chunk-VOKGH627.js +37 -0
  126. package/dist/chunk-WBRZJOEC.js +204 -0
  127. package/dist/chunk-WCSOJFU3.js +380 -0
  128. package/dist/chunk-WCT3NYCV.js +160 -0
  129. package/dist/chunk-WVAJFAIA.js +529 -0
  130. package/dist/chunk-X5LCYCL5.js +394 -0
  131. package/dist/chunk-XAKEUMEJ.js +1256 -0
  132. package/dist/chunk-Y2ZE3MSG.js +590 -0
  133. package/dist/chunk-Y3J7VR52.js +646 -0
  134. package/dist/chunk-Y5QGVTVC.js +33 -0
  135. package/dist/chunk-YAA6IID3.js +548 -0
  136. package/dist/chunk-YGJTDXVR.js +692 -0
  137. package/dist/chunk-YRYKTYMQ.js +186 -0
  138. package/dist/chunk-YYVTBZZC.js +61 -0
  139. package/dist/chunk-Z5CGSFJB.js +647 -0
  140. package/dist/chunk-Z72XRXD4.js +787 -0
  141. package/dist/chunk-ZGR7ULFJ.js +978 -0
  142. package/dist/chunk-ZJEL4H2R.js +851 -0
  143. package/dist/chunk-ZO27FGJS.js +554 -0
  144. package/dist/collapse-CLPJD2RL.js +11 -0
  145. package/dist/collapse-SLINJQW6.js +9 -0
  146. package/dist/collapse-ZWUFFCK2.js +9 -0
  147. package/dist/compute-G55RG53N.js +8 -0
  148. package/dist/dgmo-router-DZCIDUO5.js +73 -0
  149. package/dist/dimensions-J3FHIMJ6.js +22 -0
  150. package/dist/element.cjs +1 -1
  151. package/dist/element.js +1 -1
  152. package/dist/element.mjs +1 -1
  153. package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
  154. package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
  155. package/dist/index.cjs +3 -3
  156. package/dist/index.d.cts +3 -469
  157. package/dist/index.d.ts +3 -469
  158. package/dist/index.js +137 -69685
  159. package/dist/layout-46N4JJYK.js +17 -0
  160. package/dist/layout-5RA6QWR6.js +26 -0
  161. package/dist/layout-5T6RH5M6.js +14 -0
  162. package/dist/layout-7QXCNOVS.js +13 -0
  163. package/dist/layout-EE6GE46Y.js +17 -0
  164. package/dist/layout-G23F7LDH.js +9 -0
  165. package/dist/layout-HRBZPFCN.js +23 -0
  166. package/dist/layout-HWDSRX5E.js +20 -0
  167. package/dist/layout-HYZPWAK5.js +18 -0
  168. package/dist/layout-N76NR4ZO.js +19 -0
  169. package/dist/layout-OB3RI63S.js +14 -0
  170. package/dist/layout-S2QBYSK2.js +15 -0
  171. package/dist/layout-UM5F4DJB.js +15 -0
  172. package/dist/layout-search-OYV77HHS.js +1655 -0
  173. package/dist/load-data-EHDDZ5ZS.js +8 -0
  174. package/dist/palettes-PRJ2RI6D.js +56 -0
  175. package/dist/parser-2MFP2H2E.js +11 -0
  176. package/dist/parser-3STE62GB.js +21 -0
  177. package/dist/parser-4FL2CMDG.js +18 -0
  178. package/dist/parser-4OGOBJJ4.js +13 -0
  179. package/dist/parser-6BTRLKRZ.js +15 -0
  180. package/dist/parser-AQETEVRW.js +21 -0
  181. package/dist/parser-CFZD5IBL.js +12 -0
  182. package/dist/parser-FUSKFGZN.js +16 -0
  183. package/dist/parser-I6KXEYFK.js +13 -0
  184. package/dist/parser-IXSZZQHY.js +18 -0
  185. package/dist/parser-JAL2HD4I.js +13 -0
  186. package/dist/parser-KNSQSKQO.js +20 -0
  187. package/dist/parser-N5O4IHUN.js +13 -0
  188. package/dist/parser-NGU3ETO6.js +16 -0
  189. package/dist/parser-NRAI6O25.js +19 -0
  190. package/dist/parser-O5J4VBII.js +11 -0
  191. package/dist/parser-OV7NOBW6.js +21 -0
  192. package/dist/parser-PQ3POX45.js +23 -0
  193. package/dist/parser-TFZFBVWN.js +11 -0
  194. package/dist/parser-TRTHDFPP.js +18 -0
  195. package/dist/parser-VQP2UJ6W.js +11 -0
  196. package/dist/parser-XDVELHRK.js +13 -0
  197. package/dist/parser-XKRP7QKP.js +11 -0
  198. package/dist/parser-Y6WTBU76.js +14 -0
  199. package/dist/parser-ZSDPZYQP.js +12 -0
  200. package/dist/renderer-2XQQQ6QR.js +28 -0
  201. package/dist/renderer-5NDVNDAZ.js +26 -0
  202. package/dist/renderer-6EEZHMH4.js +26 -0
  203. package/dist/renderer-6W5462RB.js +43 -0
  204. package/dist/renderer-7MVLWWQD.js +22 -0
  205. package/dist/renderer-AWWAF6XD.js +33 -0
  206. package/dist/renderer-BYCNMBF7.js +34 -0
  207. package/dist/renderer-CLJHQPBJ.js +29 -0
  208. package/dist/renderer-GHPZMFU2.js +15 -0
  209. package/dist/renderer-JGBKUCZD.js +16 -0
  210. package/dist/renderer-KQB7UGDS.js +19 -0
  211. package/dist/renderer-PGX2TKVS.js +24 -0
  212. package/dist/renderer-QIWVHWZO.js +15 -0
  213. package/dist/renderer-RPOA5YPZ.js +35 -0
  214. package/dist/renderer-SMIBCRVB.js +24 -0
  215. package/dist/renderer-T7YKC5VP.js +28 -0
  216. package/dist/renderer-TOCOVLHS.js +37 -0
  217. package/dist/renderer-UWA5XS74.js +39 -0
  218. package/dist/renderer-VACVQYML.js +25 -0
  219. package/dist/renderer-W4M6QLIJ.js +37 -0
  220. package/dist/renderer-WZRREQ2P.js +23 -0
  221. package/dist/renderer-YY2OSF6E.js +27 -0
  222. package/dist/renderer-Z7I3W2PP.js +24 -0
  223. package/dist/renderer-ZGNTUWC4.js +22 -0
  224. package/dist/renderer-ZTR3DER3.js +19 -0
  225. package/dist/renderer-radial-C32GPJQ7.js +21 -0
  226. package/dist/resolver-NOAA7ID7.js +13 -0
  227. package/dist/state-collapse-HCGD6IVJ.js +8 -0
  228. package/dist/state-parser-Z2V23ATR.js +18 -0
  229. package/dist/state-renderer-RFYHSP4K.js +34 -0
  230. package/dist/themes-1-CuKpeH.d.cts +908 -0
  231. package/dist/themes-1-CuKpeH.d.ts +908 -0
  232. package/package.json +1 -1
@@ -0,0 +1,329 @@
1
+ import {
2
+ buildPlacedNotes
3
+ } from "./chunk-JED6ZDEE.js";
4
+ import {
5
+ noteCanvasShift
6
+ } from "./chunk-6EK55ART.js";
7
+ import {
8
+ measureText
9
+ } from "./chunk-WCT3NYCV.js";
10
+ import {
11
+ resolveNotes
12
+ } from "./chunk-FMDSF3OV.js";
13
+
14
+ // src/er/layout.ts
15
+ import dagre from "@dagrejs/dagre";
16
+ var MIN_WIDTH = 140;
17
+ var PADDING_X = 24;
18
+ var HEADER_BASE = 36;
19
+ var TABLE_FONT_SIZE = 13;
20
+ var COLUMN_FONT_SIZE = 11;
21
+ var EDGE_LABEL_FONT_SIZE = 11;
22
+ var CONSTRAINT_ICON_WIDTH = 16;
23
+ var MEMBER_LINE_HEIGHT = 18;
24
+ var COMPARTMENT_PADDING_Y = 8;
25
+ var SEPARATOR_HEIGHT = 1;
26
+ var HALF_MARGIN = 30;
27
+ var COMP_GAP = 60;
28
+ function computeNodeDimensions(table) {
29
+ let maxTextWidth = measureText(table.name, TABLE_FONT_SIZE);
30
+ for (const col of table.columns) {
31
+ let colText = col.name;
32
+ if (col.type) colText += `: ${col.type}`;
33
+ let colWidth = measureText(colText, COLUMN_FONT_SIZE);
34
+ if (col.constraints.length > 0) colWidth += CONSTRAINT_ICON_WIDTH;
35
+ maxTextWidth = Math.max(maxTextWidth, colWidth);
36
+ }
37
+ const width = Math.max(MIN_WIDTH, maxTextWidth + PADDING_X);
38
+ const headerHeight = HEADER_BASE;
39
+ let columnsHeight = 0;
40
+ if (table.columns.length > 0) {
41
+ columnsHeight = COMPARTMENT_PADDING_Y * 2 + table.columns.length * MEMBER_LINE_HEIGHT + SEPARATOR_HEIGHT;
42
+ }
43
+ const height = headerHeight + columnsHeight + (columnsHeight === 0 ? 4 : 0);
44
+ return { width, height, headerHeight, columnsHeight };
45
+ }
46
+ function findConnectedComponents(tableIds, relationships) {
47
+ const adj = /* @__PURE__ */ new Map();
48
+ for (const id of tableIds) adj.set(id, /* @__PURE__ */ new Set());
49
+ for (const rel of relationships) {
50
+ adj.get(rel.source)?.add(rel.target);
51
+ adj.get(rel.target)?.add(rel.source);
52
+ }
53
+ const visited = /* @__PURE__ */ new Set();
54
+ const components = [];
55
+ for (const id of tableIds) {
56
+ if (visited.has(id)) continue;
57
+ const comp = [];
58
+ const queue = [id];
59
+ while (queue.length > 0) {
60
+ const cur = queue.shift();
61
+ if (visited.has(cur)) continue;
62
+ visited.add(cur);
63
+ comp.push(cur);
64
+ for (const nb of adj.get(cur) ?? []) {
65
+ if (!visited.has(nb)) queue.push(nb);
66
+ }
67
+ }
68
+ components.push(comp);
69
+ }
70
+ return components;
71
+ }
72
+ function layoutComponent(tables, rels, dimMap) {
73
+ const nodePositions = /* @__PURE__ */ new Map();
74
+ const edgePoints = /* @__PURE__ */ new Map();
75
+ if (tables.length === 1) {
76
+ const onlyTable = tables[0];
77
+ const dims = dimMap.get(onlyTable.id);
78
+ nodePositions.set(onlyTable.id, {
79
+ x: dims.width / 2,
80
+ y: dims.height / 2,
81
+ ...dims
82
+ });
83
+ return {
84
+ nodePositions,
85
+ edgePoints,
86
+ width: dims.width,
87
+ height: dims.height
88
+ };
89
+ }
90
+ const g = new dagre.graphlib.Graph({ multigraph: true });
91
+ g.setGraph({ rankdir: "LR", nodesep: 40, ranksep: 80, edgesep: 20 });
92
+ g.setDefaultEdgeLabel(() => ({}));
93
+ for (const table of tables) {
94
+ const dims = dimMap.get(table.id);
95
+ g.setNode(table.id, { width: dims.width, height: dims.height });
96
+ }
97
+ for (const rel of rels) {
98
+ g.setEdge(
99
+ rel.source,
100
+ rel.target,
101
+ { label: rel.label ?? "" },
102
+ String(rel.lineNumber)
103
+ );
104
+ }
105
+ dagre.layout(g);
106
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
107
+ for (const table of tables) {
108
+ const pos = g.node(table.id);
109
+ const dims = dimMap.get(table.id);
110
+ minX = Math.min(minX, pos.x - dims.width / 2);
111
+ minY = Math.min(minY, pos.y - dims.height / 2);
112
+ maxX = Math.max(maxX, pos.x + dims.width / 2);
113
+ maxY = Math.max(maxY, pos.y + dims.height / 2);
114
+ }
115
+ for (const rel of rels) {
116
+ const ed = g.edge(rel.source, rel.target, String(rel.lineNumber));
117
+ for (const pt of ed?.points ?? []) {
118
+ minX = Math.min(minX, pt.x);
119
+ minY = Math.min(minY, pt.y);
120
+ maxX = Math.max(maxX, pt.x);
121
+ maxY = Math.max(maxY, pt.y);
122
+ }
123
+ if (rel.label && (ed?.points ?? []).length > 0) {
124
+ const pts = ed.points;
125
+ const mid = pts[Math.floor(pts.length / 2)];
126
+ const hw = (measureText(rel.label, EDGE_LABEL_FONT_SIZE) + 8) / 2;
127
+ minX = Math.min(minX, mid.x - hw);
128
+ maxX = Math.max(maxX, mid.x + hw);
129
+ }
130
+ }
131
+ for (const table of tables) {
132
+ const pos = g.node(table.id);
133
+ const dims = dimMap.get(table.id);
134
+ nodePositions.set(table.id, {
135
+ x: pos.x - minX,
136
+ y: pos.y - minY,
137
+ ...dims
138
+ });
139
+ }
140
+ for (const rel of rels) {
141
+ const ed = g.edge(rel.source, rel.target, String(rel.lineNumber));
142
+ edgePoints.set(
143
+ rel.lineNumber,
144
+ (ed?.points ?? []).map((pt) => ({
145
+ x: pt.x - minX,
146
+ y: pt.y - minY
147
+ }))
148
+ );
149
+ }
150
+ return {
151
+ nodePositions,
152
+ edgePoints,
153
+ width: Math.max(0, maxX - minX),
154
+ height: Math.max(0, maxY - minY)
155
+ };
156
+ }
157
+ function packComponents(items) {
158
+ if (items.length === 0) return [];
159
+ const sorted = [...items].sort((a, b) => {
160
+ const aConnected = a.compIds.length > 1 ? 1 : 0;
161
+ const bConnected = b.compIds.length > 1 ? 1 : 0;
162
+ if (aConnected !== bConnected) return bConnected - aConnected;
163
+ return b.compLayout.height - a.compLayout.height;
164
+ });
165
+ const totalArea = items.reduce(
166
+ (s, c) => s + (c.compLayout.width || MIN_WIDTH) * (c.compLayout.height || HEADER_BASE),
167
+ 0
168
+ );
169
+ const targetW = Math.max(
170
+ Math.sqrt(totalArea) * 1.5,
171
+ // In-bounds: sorted.length === items.length and items.length === 0 returned above.
172
+ sorted[0].compLayout.width
173
+ // at least as wide as the widest component
174
+ );
175
+ const placements = [];
176
+ let curX = 0;
177
+ let curY = 0;
178
+ let rowH = 0;
179
+ for (const item of sorted) {
180
+ const w = item.compLayout.width || MIN_WIDTH;
181
+ const h = item.compLayout.height || HEADER_BASE;
182
+ if (curX > 0 && curX + w > targetW) {
183
+ curY += rowH + COMP_GAP;
184
+ curX = 0;
185
+ rowH = 0;
186
+ }
187
+ placements.push({
188
+ compIds: item.compIds,
189
+ compLayout: item.compLayout,
190
+ offsetX: curX,
191
+ offsetY: curY
192
+ });
193
+ curX += w + COMP_GAP;
194
+ rowH = Math.max(rowH, h);
195
+ }
196
+ return placements;
197
+ }
198
+ function layoutERDiagram(parsed, options) {
199
+ if (parsed.tables.length === 0) {
200
+ return { nodes: [], edges: [], width: 0, height: 0 };
201
+ }
202
+ const dimMap = /* @__PURE__ */ new Map();
203
+ for (const table of parsed.tables) {
204
+ dimMap.set(table.id, computeNodeDimensions(table));
205
+ }
206
+ const compIdSets = findConnectedComponents(
207
+ parsed.tables.map((t) => t.id),
208
+ parsed.relationships
209
+ );
210
+ const tableById = new Map(parsed.tables.map((t) => [t.id, t]));
211
+ const componentItems = compIdSets.map((ids) => {
212
+ const tables = ids.map((id) => tableById.get(id));
213
+ const rels = parsed.relationships.filter((r) => ids.includes(r.source));
214
+ return { compIds: ids, compLayout: layoutComponent(tables, rels, dimMap) };
215
+ });
216
+ const packed = packComponents(componentItems);
217
+ const placementByTableId = /* @__PURE__ */ new Map();
218
+ for (const p of packed) {
219
+ for (const id of p.compIds) placementByTableId.set(id, p);
220
+ }
221
+ const placementByRelLine = /* @__PURE__ */ new Map();
222
+ for (const p of packed) {
223
+ for (const lineNum of p.compLayout.edgePoints.keys()) {
224
+ placementByRelLine.set(lineNum, p);
225
+ }
226
+ }
227
+ const layoutNodes = parsed.tables.map((table) => {
228
+ const p = placementByTableId.get(table.id);
229
+ const pos = p.compLayout.nodePositions.get(table.id);
230
+ return {
231
+ ...table,
232
+ x: pos.x + p.offsetX + HALF_MARGIN,
233
+ y: pos.y + p.offsetY + HALF_MARGIN,
234
+ width: pos.width,
235
+ height: pos.height,
236
+ headerHeight: pos.headerHeight,
237
+ columnsHeight: pos.columnsHeight
238
+ };
239
+ });
240
+ const layoutEdges = parsed.relationships.map((rel) => {
241
+ const p = placementByRelLine.get(rel.lineNumber);
242
+ const pts = p?.compLayout.edgePoints.get(rel.lineNumber) ?? [];
243
+ return {
244
+ source: rel.source,
245
+ target: rel.target,
246
+ cardinality: rel.cardinality,
247
+ points: pts.map((pt) => ({
248
+ x: pt.x + (p?.offsetX ?? 0) + HALF_MARGIN,
249
+ y: pt.y + (p?.offsetY ?? 0) + HALF_MARGIN
250
+ })),
251
+ ...rel.label !== void 0 && { label: rel.label },
252
+ lineNumber: rel.lineNumber
253
+ };
254
+ });
255
+ const notesSuppressed = parsed.options?.["no-notes"] === "on";
256
+ const noteByNode = notesSuppressed || !parsed.notes ? /* @__PURE__ */ new Map() : resolveNotes(
257
+ parsed.notes,
258
+ parsed.tables.map((t) => ({ id: t.id, label: t.name }))
259
+ );
260
+ const placedNotes = buildPlacedNotes(
261
+ layoutNodes.map((n) => ({
262
+ id: n.id,
263
+ x: n.x,
264
+ y: n.y,
265
+ width: n.width,
266
+ height: n.height
267
+ })),
268
+ noteByNode,
269
+ "TB",
270
+ options?.collapsedNotes
271
+ );
272
+ const notedNodes = layoutNodes.map((n) => {
273
+ const note = placedNotes.get(n.id);
274
+ return note ? { ...n, note } : n;
275
+ });
276
+ let bbMinX = Infinity;
277
+ let bbMinY = Infinity;
278
+ let bbMaxX = -Infinity;
279
+ let bbMaxY = -Infinity;
280
+ const extend = (l, t, r, b) => {
281
+ if (l < bbMinX) bbMinX = l;
282
+ if (t < bbMinY) bbMinY = t;
283
+ if (r > bbMaxX) bbMaxX = r;
284
+ if (b > bbMaxY) bbMaxY = b;
285
+ };
286
+ for (const node of notedNodes) {
287
+ extend(
288
+ node.x - node.width / 2,
289
+ node.y - node.height / 2,
290
+ node.x + node.width / 2,
291
+ node.y + node.height / 2
292
+ );
293
+ if (node.note && !node.note.collapsed) {
294
+ extend(
295
+ node.x + node.note.x,
296
+ node.y + node.note.y,
297
+ node.x + node.note.x + node.note.width,
298
+ node.y + node.note.y + node.note.height
299
+ );
300
+ }
301
+ }
302
+ for (const edge of layoutEdges) {
303
+ for (const pt of edge.points) extend(pt.x, pt.y, pt.x, pt.y);
304
+ }
305
+ if (!Number.isFinite(bbMinX)) {
306
+ bbMinX = 0;
307
+ bbMinY = 0;
308
+ bbMaxX = 0;
309
+ bbMaxY = 0;
310
+ }
311
+ const { shiftX, shiftY } = noteCanvasShift(bbMinX, bbMinY);
312
+ const shifted = shiftX !== 0 || shiftY !== 0;
313
+ const finalNodes = shifted ? notedNodes.map((n) => ({ ...n, x: n.x + shiftX, y: n.y + shiftY })) : notedNodes;
314
+ const finalEdges = shifted ? layoutEdges.map((e) => ({
315
+ ...e,
316
+ points: e.points.map((pt) => ({ x: pt.x + shiftX, y: pt.y + shiftY }))
317
+ })) : layoutEdges;
318
+ return {
319
+ nodes: finalNodes,
320
+ edges: finalEdges,
321
+ width: bbMaxX + shiftX + HALF_MARGIN,
322
+ height: bbMaxY + shiftY + HALF_MARGIN
323
+ };
324
+ }
325
+
326
+ export {
327
+ layoutERDiagram
328
+ };
329
+ //# sourceMappingURL=chunk-6NYWYNBI.js.map