@diagrammo/dgmo 0.46.0 → 0.48.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 (534) hide show
  1. package/dist/advanced.d.ts +3 -855
  2. package/dist/advanced.js +541 -70107
  3. package/dist/analyzer-UYKBXAKR.js +15 -0
  4. package/dist/auto.js +1 -1
  5. package/dist/auto.mjs +1 -1
  6. package/dist/block.js +83 -69417
  7. package/dist/calculator-LDYQCDDY.js +11 -0
  8. package/dist/charts-d3-QOZHKTCT.js +25 -0
  9. package/dist/chunk-2DXMZRWJ.js +800 -0
  10. package/dist/chunk-2LACINWN.js +786 -0
  11. package/dist/chunk-33LCUH4H.js +893 -0
  12. package/dist/chunk-3CIOJ5YJ.js +35 -0
  13. package/dist/chunk-3HDBAXF5.js +86 -0
  14. package/dist/chunk-3JLKYGBQ.js +290 -0
  15. package/dist/chunk-3MQQNXPD.js +415 -0
  16. package/dist/chunk-3R5POCTZ.js +967 -0
  17. package/dist/chunk-3SMGIJDD.js +112 -0
  18. package/dist/chunk-44CM72SQ.js +409 -0
  19. package/dist/chunk-4GRI7MEB.js +1604 -0
  20. package/dist/chunk-4OHACBGX.js +606 -0
  21. package/dist/chunk-5DH3KYFH.js +21 -0
  22. package/dist/chunk-5MLYVTYM.js +76 -0
  23. package/dist/chunk-5QXL4NYS.js +553 -0
  24. package/dist/chunk-5WRI5ZAA.js +31 -0
  25. package/dist/chunk-6EK55ART.js +117 -0
  26. package/dist/chunk-6FZYCKXB.js +2065 -0
  27. package/dist/chunk-6HO5ZTXK.js +277 -0
  28. package/dist/chunk-6KFWC4CO.js +7 -0
  29. package/dist/chunk-6MTWIQVO.js +121 -0
  30. package/dist/chunk-6NYWYNBI.js +329 -0
  31. package/dist/chunk-6SM5NJQH.js +620 -0
  32. package/dist/chunk-725LDASD.js +422 -0
  33. package/dist/chunk-76OWZ3BA.js +130 -0
  34. package/{src/block/parser.ts → dist/chunk-7JEGTRLD.js} +100 -189
  35. package/dist/chunk-A44USUV7.js +923 -0
  36. package/dist/chunk-A4GOY3PE.js +25 -0
  37. package/dist/chunk-A4VFQH5G.js +251 -0
  38. package/dist/chunk-AELOBFW5.js +375 -0
  39. package/dist/chunk-AN2MOO5T.js +522 -0
  40. package/dist/chunk-BMR4CIEO.js +41 -0
  41. package/dist/chunk-BS7SV7C3.js +51 -0
  42. package/dist/chunk-BUPDIHML.js +613 -0
  43. package/dist/chunk-BUVJFRPY.js +887 -0
  44. package/dist/chunk-C3Z4DX3V.js +112 -0
  45. package/dist/chunk-CI2G3OEB.js +1818 -0
  46. package/dist/chunk-CKNVO24D.js +54 -0
  47. package/dist/chunk-CUVHQHZ7.js +391 -0
  48. package/dist/chunk-CXK4DZH3.js +114 -0
  49. package/dist/{editor.cjs → chunk-DKEPS5LH.js} +14 -225
  50. package/dist/chunk-DU7W62N5.js +487 -0
  51. package/dist/chunk-DZAQBW35.js +751 -0
  52. package/dist/chunk-EB6FPQUP.js +316 -0
  53. package/dist/chunk-EMS2SK26.js +376 -0
  54. package/dist/chunk-ERLBPDGU.js +510 -0
  55. package/dist/chunk-EVCVDTXE.js +732 -0
  56. package/dist/chunk-FCIIHT24.js +384 -0
  57. package/dist/chunk-FFUN5D66.js +97 -0
  58. package/dist/chunk-FITOLXSX.js +714 -0
  59. package/dist/chunk-FMDSF3OV.js +68 -0
  60. package/dist/chunk-FNB3PNGF.js +410 -0
  61. package/dist/chunk-G2H74XJZ.js +2104 -0
  62. package/dist/chunk-GMR5MFHJ.js +339 -0
  63. package/dist/chunk-H6PI3KJT.js +305 -0
  64. package/dist/chunk-I46X5VUA.js +59 -0
  65. package/dist/chunk-I5IGB56C.js +255 -0
  66. package/dist/chunk-IH6ZMVQ5.js +3950 -0
  67. package/dist/chunk-IJZFN3HM.js +463 -0
  68. package/dist/chunk-IPWPWM6R.js +3079 -0
  69. package/dist/chunk-IYULMRBE.js +23 -0
  70. package/dist/chunk-IZMRON6C.js +167 -0
  71. package/dist/chunk-J5FIXQRT.js +813 -0
  72. package/dist/chunk-JED6ZDEE.js +73 -0
  73. package/dist/chunk-JEUJOX5X.js +136 -0
  74. package/dist/chunk-JM4LEPY3.js +436 -0
  75. package/dist/chunk-L3UHP6TD.js +101 -0
  76. package/dist/chunk-L66GEFB6.js +524 -0
  77. package/dist/chunk-LIOHW36Z.js +469 -0
  78. package/dist/chunk-LP7EC4MI.js +16 -0
  79. package/dist/chunk-MITI6NOL.js +548 -0
  80. package/dist/chunk-MO5YHHMQ.js +168 -0
  81. package/dist/chunk-MZSBFAPJ.js +885 -0
  82. package/dist/chunk-NNAAJVBU.js +9 -0
  83. package/dist/chunk-NOTA6TEI.js +47 -0
  84. package/dist/chunk-NURGB5Z4.js +335 -0
  85. package/dist/chunk-NX4EQS3U.js +1062 -0
  86. package/dist/chunk-NXMESY4J.js +1 -0
  87. package/dist/chunk-OJR3MQYV.js +1458 -0
  88. package/dist/chunk-OURHMODR.js +454 -0
  89. package/dist/chunk-P235SVAH.js +1057 -0
  90. package/dist/chunk-P4RH4OSP.js +1038 -0
  91. package/dist/chunk-P6T66CCZ.js +226 -0
  92. package/dist/chunk-PBAHEPLQ.js +223 -0
  93. package/dist/chunk-PBHE5UG6.js +1530 -0
  94. package/dist/chunk-PDKUANDZ.js +35 -0
  95. package/dist/chunk-PWIHZ6NJ.js +296 -0
  96. package/{src/c4/layout.ts → dist/chunk-QEBUY5NY.js} +384 -1140
  97. package/dist/chunk-QLCCJEJI.js +253 -0
  98. package/dist/chunk-QOOUC2J5.js +52 -0
  99. package/dist/chunk-QYTPPDAO.js +402 -0
  100. package/dist/chunk-R3XI2VC7.js +801 -0
  101. package/dist/chunk-RCERWOJR.js +154 -0
  102. package/dist/chunk-RJE5JTVK.js +362 -0
  103. package/dist/chunk-RTLBSQ3G.js +1155 -0
  104. package/dist/chunk-RUNNI6VE.js +448 -0
  105. package/dist/chunk-RVMRZAPB.js +354 -0
  106. package/dist/chunk-RYEGFMUO.js +955 -0
  107. package/dist/chunk-RZCF2VVM.js +528 -0
  108. package/dist/chunk-SML67VPV.js +1025 -0
  109. package/dist/chunk-SQ7IY53Q.js +44 -0
  110. package/dist/chunk-SQAG3UXH.js +161 -0
  111. package/dist/chunk-SRTU6HMQ.js +1851 -0
  112. package/dist/chunk-T2OE3YQB.js +550 -0
  113. package/dist/chunk-T3UBLACL.js +299 -0
  114. package/dist/chunk-TLVIHFRO.js +296 -0
  115. package/dist/chunk-TYS6CSS5.js +52 -0
  116. package/dist/chunk-U6EQI3U6.js +130 -0
  117. package/dist/chunk-UJ4FJLBF.js +86 -0
  118. package/dist/chunk-ULOEATBZ.js +347 -0
  119. package/dist/chunk-UNCCZ3NU.js +127 -0
  120. package/dist/chunk-USZW2HHU.js +197 -0
  121. package/dist/chunk-UWN33VNX.js +1610 -0
  122. package/dist/chunk-UZ7EZW3B.js +40 -0
  123. package/dist/chunk-VOKGH627.js +37 -0
  124. package/dist/chunk-WBRZJOEC.js +204 -0
  125. package/dist/chunk-WCSOJFU3.js +380 -0
  126. package/dist/chunk-WCT3NYCV.js +160 -0
  127. package/dist/chunk-WVAJFAIA.js +529 -0
  128. package/dist/chunk-X5LCYCL5.js +394 -0
  129. package/dist/chunk-XAKEUMEJ.js +1256 -0
  130. package/dist/chunk-Y2ZE3MSG.js +590 -0
  131. package/dist/chunk-Y3J7VR52.js +646 -0
  132. package/dist/chunk-Y5QGVTVC.js +33 -0
  133. package/dist/chunk-YAA6IID3.js +548 -0
  134. package/dist/chunk-YGJTDXVR.js +692 -0
  135. package/{src/utils/time-ticks.ts → dist/chunk-YRYKTYMQ.js} +45 -112
  136. package/dist/chunk-YYVTBZZC.js +61 -0
  137. package/dist/chunk-Z5CGSFJB.js +647 -0
  138. package/{src/gantt/calculator.ts → dist/chunk-Z72XRXD4.js} +236 -428
  139. package/dist/chunk-ZGR7ULFJ.js +978 -0
  140. package/dist/chunk-ZJEL4H2R.js +851 -0
  141. package/dist/chunk-ZO27FGJS.js +554 -0
  142. package/dist/collapse-CLPJD2RL.js +11 -0
  143. package/dist/collapse-SLINJQW6.js +9 -0
  144. package/dist/collapse-ZWUFFCK2.js +9 -0
  145. package/dist/compute-G55RG53N.js +8 -0
  146. package/dist/dgmo-router-DZCIDUO5.js +73 -0
  147. package/dist/dimensions-J3FHIMJ6.js +22 -0
  148. package/dist/element.js +1 -1
  149. package/dist/element.mjs +1 -1
  150. package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
  151. package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
  152. package/dist/index.d.ts +3 -469
  153. package/dist/index.js +137 -69685
  154. package/dist/layout-46N4JJYK.js +17 -0
  155. package/dist/layout-5RA6QWR6.js +26 -0
  156. package/dist/layout-5T6RH5M6.js +14 -0
  157. package/dist/layout-7QXCNOVS.js +13 -0
  158. package/dist/layout-EE6GE46Y.js +17 -0
  159. package/dist/layout-G23F7LDH.js +9 -0
  160. package/dist/layout-HRBZPFCN.js +23 -0
  161. package/dist/layout-HWDSRX5E.js +20 -0
  162. package/dist/layout-HYZPWAK5.js +18 -0
  163. package/dist/layout-N76NR4ZO.js +19 -0
  164. package/dist/layout-OB3RI63S.js +14 -0
  165. package/dist/layout-S2QBYSK2.js +15 -0
  166. package/dist/layout-UM5F4DJB.js +15 -0
  167. package/dist/layout-search-OYV77HHS.js +1655 -0
  168. package/dist/load-data-EHDDZ5ZS.js +8 -0
  169. package/dist/palettes-PRJ2RI6D.js +56 -0
  170. package/dist/parser-2MFP2H2E.js +11 -0
  171. package/dist/parser-3STE62GB.js +21 -0
  172. package/dist/parser-4FL2CMDG.js +18 -0
  173. package/dist/parser-4OGOBJJ4.js +13 -0
  174. package/dist/parser-6BTRLKRZ.js +15 -0
  175. package/dist/parser-AQETEVRW.js +21 -0
  176. package/dist/parser-CFZD5IBL.js +12 -0
  177. package/dist/parser-FUSKFGZN.js +16 -0
  178. package/dist/parser-I6KXEYFK.js +13 -0
  179. package/dist/parser-IXSZZQHY.js +18 -0
  180. package/dist/parser-JAL2HD4I.js +13 -0
  181. package/dist/parser-KNSQSKQO.js +20 -0
  182. package/dist/parser-N5O4IHUN.js +13 -0
  183. package/dist/parser-NGU3ETO6.js +16 -0
  184. package/dist/parser-NRAI6O25.js +19 -0
  185. package/dist/parser-O5J4VBII.js +11 -0
  186. package/dist/parser-OV7NOBW6.js +21 -0
  187. package/dist/parser-PQ3POX45.js +23 -0
  188. package/dist/parser-TFZFBVWN.js +11 -0
  189. package/dist/parser-TRTHDFPP.js +18 -0
  190. package/dist/parser-VQP2UJ6W.js +11 -0
  191. package/dist/parser-XDVELHRK.js +13 -0
  192. package/dist/parser-XKRP7QKP.js +11 -0
  193. package/dist/parser-Y6WTBU76.js +14 -0
  194. package/dist/parser-ZSDPZYQP.js +12 -0
  195. package/dist/renderer-2XQQQ6QR.js +28 -0
  196. package/dist/renderer-5NDVNDAZ.js +26 -0
  197. package/dist/renderer-6EEZHMH4.js +26 -0
  198. package/dist/renderer-6W5462RB.js +43 -0
  199. package/dist/renderer-7MVLWWQD.js +22 -0
  200. package/dist/renderer-AWWAF6XD.js +33 -0
  201. package/dist/renderer-BYCNMBF7.js +34 -0
  202. package/dist/renderer-CLJHQPBJ.js +29 -0
  203. package/dist/renderer-GHPZMFU2.js +15 -0
  204. package/dist/renderer-JGBKUCZD.js +16 -0
  205. package/dist/renderer-KQB7UGDS.js +19 -0
  206. package/dist/renderer-PGX2TKVS.js +24 -0
  207. package/dist/renderer-QIWVHWZO.js +15 -0
  208. package/dist/renderer-RPOA5YPZ.js +35 -0
  209. package/dist/renderer-SMIBCRVB.js +24 -0
  210. package/dist/renderer-T7YKC5VP.js +28 -0
  211. package/dist/renderer-TOCOVLHS.js +37 -0
  212. package/dist/renderer-UWA5XS74.js +39 -0
  213. package/dist/renderer-VACVQYML.js +25 -0
  214. package/dist/renderer-W4M6QLIJ.js +37 -0
  215. package/dist/renderer-WZRREQ2P.js +23 -0
  216. package/dist/renderer-YY2OSF6E.js +27 -0
  217. package/dist/renderer-Z7I3W2PP.js +24 -0
  218. package/dist/renderer-ZGNTUWC4.js +22 -0
  219. package/dist/renderer-ZTR3DER3.js +19 -0
  220. package/dist/renderer-radial-C32GPJQ7.js +21 -0
  221. package/dist/resolver-NOAA7ID7.js +13 -0
  222. package/dist/state-collapse-HCGD6IVJ.js +8 -0
  223. package/dist/state-parser-Z2V23ATR.js +18 -0
  224. package/dist/state-renderer-RFYHSP4K.js +34 -0
  225. package/dist/themes-1-CuKpeH.d.ts +908 -0
  226. package/package.json +19 -70
  227. package/dist/advanced.cjs +0 -71648
  228. package/dist/advanced.d.cts +0 -6571
  229. package/dist/auto.cjs +0 -70648
  230. package/dist/auto.d.cts +0 -54
  231. package/dist/block.cjs +0 -70208
  232. package/dist/block.d.cts +0 -115
  233. package/dist/editor.d.cts +0 -26
  234. package/dist/element.cjs +0 -70530
  235. package/dist/element.d.cts +0 -62
  236. package/dist/highlight.cjs +0 -852
  237. package/dist/highlight.d.cts +0 -49
  238. package/dist/index.cjs +0 -70491
  239. package/dist/index.d.cts +0 -626
  240. package/dist/pert.cjs +0 -325
  241. package/dist/pert.d.cts +0 -559
  242. package/src/advanced.ts +0 -873
  243. package/src/arc/parser.ts +0 -15
  244. package/src/arc/renderer.ts +0 -633
  245. package/src/auto/index.ts +0 -621
  246. package/src/auto/shared.ts +0 -370
  247. package/src/auto/styles.ts +0 -73
  248. package/src/block/layout.ts +0 -198
  249. package/src/block/renderer.ts +0 -484
  250. package/src/block/types.ts +0 -67
  251. package/src/boxes-and-lines/collapse.ts +0 -96
  252. package/src/boxes-and-lines/focus.ts +0 -257
  253. package/src/boxes-and-lines/label-placement.ts +0 -339
  254. package/src/boxes-and-lines/layout-grouped.ts +0 -912
  255. package/src/boxes-and-lines/layout-layered.ts +0 -722
  256. package/src/boxes-and-lines/layout-search.ts +0 -1678
  257. package/src/boxes-and-lines/layout.ts +0 -398
  258. package/src/boxes-and-lines/parser.ts +0 -1181
  259. package/src/boxes-and-lines/renderer.ts +0 -1465
  260. package/src/boxes-and-lines/types.ts +0 -66
  261. package/src/c4/parser.ts +0 -1158
  262. package/src/c4/renderer.ts +0 -2008
  263. package/src/c4/types.ts +0 -89
  264. package/src/chart-type-registry.ts +0 -529
  265. package/src/chart-types.ts +0 -225
  266. package/src/chart.ts +0 -685
  267. package/src/charts-d3/bar.ts +0 -338
  268. package/src/charts-d3/chord.ts +0 -140
  269. package/src/charts-d3/function.ts +0 -147
  270. package/src/charts-d3/funnel.ts +0 -104
  271. package/src/charts-d3/heatmap.ts +0 -145
  272. package/src/charts-d3/index.ts +0 -337
  273. package/src/charts-d3/interactions.ts +0 -477
  274. package/src/charts-d3/line.ts +0 -344
  275. package/src/charts-d3/mount.ts +0 -151
  276. package/src/charts-d3/pie.ts +0 -117
  277. package/src/charts-d3/polar.ts +0 -89
  278. package/src/charts-d3/radar.ts +0 -0
  279. package/src/charts-d3/sankey.ts +0 -0
  280. package/src/charts-d3/scatter.ts +0 -185
  281. package/src/charts-d3/shared.ts +0 -208
  282. package/src/class/layout.ts +0 -326
  283. package/src/class/parser.ts +0 -635
  284. package/src/class/renderer.ts +0 -793
  285. package/src/class/types.ts +0 -58
  286. package/src/cli-banner.ts +0 -106
  287. package/src/cli.ts +0 -1080
  288. package/src/colors-diagnostics.ts +0 -35
  289. package/src/colors.ts +0 -379
  290. package/src/completion-types.ts +0 -27
  291. package/src/completion.ts +0 -2668
  292. package/src/cycle/layout.ts +0 -1026
  293. package/src/cycle/parser.ts +0 -387
  294. package/src/cycle/renderer.ts +0 -653
  295. package/src/cycle/types.ts +0 -101
  296. package/src/d3.ts +0 -1434
  297. package/src/data-chart-parser.ts +0 -1007
  298. package/src/dgmo-router.ts +0 -296
  299. package/src/diagnostics-registry.ts +0 -108
  300. package/src/diagnostics.ts +0 -0
  301. package/src/dimensions.ts +0 -20
  302. package/src/directives-registry.ts +0 -396
  303. package/src/editor/dgmo.grammar +0 -76
  304. package/src/editor/dgmo.grammar.d.ts +0 -2
  305. package/src/editor/dgmo.grammar.js +0 -18
  306. package/src/editor/dgmo.grammar.terms.d.ts +0 -5
  307. package/src/editor/dgmo.grammar.terms.js +0 -35
  308. package/src/editor/highlight-api.ts +0 -596
  309. package/src/editor/highlight.ts +0 -36
  310. package/src/editor/index.ts +0 -27
  311. package/src/editor/keywords.ts +0 -128
  312. package/src/editor/tokens.ts +0 -30
  313. package/src/element/index.ts +0 -432
  314. package/src/embed/css.ts +0 -312
  315. package/src/embed/escape.ts +0 -15
  316. package/src/embed/index.ts +0 -280
  317. package/src/er/classify.ts +0 -228
  318. package/src/er/layout.ts +0 -530
  319. package/src/er/parser.ts +0 -750
  320. package/src/er/renderer.ts +0 -725
  321. package/src/er/types.ts +0 -52
  322. package/src/error-card.ts +0 -269
  323. package/src/event-line/diagnostics.ts +0 -117
  324. package/src/event-line/parser.ts +0 -643
  325. package/src/event-line/renderer.ts +0 -1742
  326. package/src/event-line/types.ts +0 -74
  327. package/src/fonts.ts +0 -3
  328. package/src/gantt/parser.ts +0 -1641
  329. package/src/gantt/renderer.ts +0 -3787
  330. package/src/gantt/resolver.ts +0 -172
  331. package/src/gantt/types.ts +0 -206
  332. package/src/graph/diagnostics.ts +0 -64
  333. package/src/graph/edge-spline.ts +0 -29
  334. package/src/graph/flowchart-parser.ts +0 -759
  335. package/src/graph/flowchart-renderer.ts +0 -817
  336. package/src/graph/layout.ts +0 -472
  337. package/src/graph/notes.ts +0 -21
  338. package/src/graph/state-collapse.ts +0 -78
  339. package/src/graph/state-parser.ts +0 -574
  340. package/src/graph/state-renderer.ts +0 -653
  341. package/src/graph/types.ts +0 -65
  342. package/src/index.ts +0 -261
  343. package/src/infra/compute.ts +0 -1385
  344. package/src/infra/layout.ts +0 -888
  345. package/src/infra/parser.ts +0 -1234
  346. package/src/infra/renderer.ts +0 -2534
  347. package/src/infra/roles.ts +0 -75
  348. package/src/infra/types.ts +0 -216
  349. package/src/infra/validation.ts +0 -201
  350. package/src/journey-map/layout.ts +0 -490
  351. package/src/journey-map/parser.ts +0 -557
  352. package/src/journey-map/renderer.ts +0 -1580
  353. package/src/journey-map/types.ts +0 -47
  354. package/src/kanban/mutations.ts +0 -175
  355. package/src/kanban/parser.ts +0 -509
  356. package/src/kanban/renderer.ts +0 -1449
  357. package/src/kanban/types.ts +0 -39
  358. package/src/label-layout.ts +0 -368
  359. package/src/map/colorize.ts +0 -54
  360. package/src/map/completion.ts +0 -316
  361. package/src/map/context-labels.ts +0 -609
  362. package/src/map/data/PROVENANCE.json +0 -1
  363. package/src/map/data/README.md +0 -40
  364. package/src/map/data/airport-collisions.json +0 -1
  365. package/src/map/data/airports.json +0 -1
  366. package/src/map/data/gazetteer.json +0 -1
  367. package/src/map/data/lakes.json +0 -1
  368. package/src/map/data/mountain-ranges.json +0 -1
  369. package/src/map/data/na-lakes.json +0 -1
  370. package/src/map/data/na-land.json +0 -1
  371. package/src/map/data/region-names.json +0 -1
  372. package/src/map/data/rivers.json +0 -1
  373. package/src/map/data/types.ts +0 -121
  374. package/src/map/data/us-states.json +0 -1
  375. package/src/map/data/water-bodies.json +0 -1
  376. package/src/map/data/world-coarse.json +0 -1
  377. package/src/map/data/world-detail.json +0 -1
  378. package/src/map/diagnostics.ts +0 -134
  379. package/src/map/dimensions.ts +0 -150
  380. package/src/map/geo-query.ts +0 -295
  381. package/src/map/geo.ts +0 -438
  382. package/src/map/invert.ts +0 -111
  383. package/src/map/layout.ts +0 -5069
  384. package/src/map/legend-band.ts +0 -127
  385. package/src/map/load-data.ts +0 -186
  386. package/src/map/parser.ts +0 -783
  387. package/src/map/renderer.ts +0 -1445
  388. package/src/map/resolved-types.ts +0 -160
  389. package/src/map/resolver.ts +0 -1146
  390. package/src/map/types.ts +0 -194
  391. package/src/mindmap/collapse.ts +0 -67
  392. package/src/mindmap/layout.ts +0 -649
  393. package/src/mindmap/parser.ts +0 -430
  394. package/src/mindmap/renderer.ts +0 -637
  395. package/src/mindmap/text-wrap.ts +0 -218
  396. package/src/mindmap/types.ts +0 -56
  397. package/src/org/collapse.ts +0 -151
  398. package/src/org/layout.ts +0 -1262
  399. package/src/org/parser.ts +0 -519
  400. package/src/org/renderer.ts +0 -866
  401. package/src/org/resolver.ts +0 -636
  402. package/src/palettes/atlas.ts +0 -77
  403. package/src/palettes/blueprint.ts +0 -73
  404. package/src/palettes/catppuccin.ts +0 -84
  405. package/src/palettes/color-utils.ts +0 -443
  406. package/src/palettes/index.ts +0 -67
  407. package/src/palettes/nord.ts +0 -67
  408. package/src/palettes/registry.ts +0 -114
  409. package/src/palettes/slate.ts +0 -73
  410. package/src/palettes/tidewater.ts +0 -73
  411. package/src/palettes/tokyo-night.ts +0 -86
  412. package/src/palettes/types.ts +0 -88
  413. package/src/pert/analyzer.ts +0 -1183
  414. package/src/pert/diagnostics.ts +0 -110
  415. package/src/pert/index.ts +0 -43
  416. package/src/pert/internal.ts +0 -252
  417. package/src/pert/layout.ts +0 -971
  418. package/src/pert/monte-carlo.ts +0 -446
  419. package/src/pert/parser.ts +0 -1606
  420. package/src/pert/renderer.ts +0 -4009
  421. package/src/pert/share-normalize.ts +0 -62
  422. package/src/pert/types.ts +0 -604
  423. package/src/pyramid/parser.ts +0 -185
  424. package/src/pyramid/renderer.ts +0 -768
  425. package/src/pyramid/types.ts +0 -28
  426. package/src/quadrant/parser.ts +0 -18
  427. package/src/quadrant/renderer.ts +0 -638
  428. package/src/raci/diagnostics.ts +0 -213
  429. package/src/raci/index.ts +0 -23
  430. package/src/raci/mutations.ts +0 -321
  431. package/src/raci/parser.ts +0 -699
  432. package/src/raci/renderer.ts +0 -1627
  433. package/src/raci/types.ts +0 -82
  434. package/src/raci/variants.ts +0 -320
  435. package/src/render.ts +0 -268
  436. package/src/ring/parser.ts +0 -212
  437. package/src/ring/renderer.ts +0 -490
  438. package/src/ring/types.ts +0 -27
  439. package/src/sequence/collapse.ts +0 -174
  440. package/src/sequence/parser.ts +0 -1596
  441. package/src/sequence/participant-inference.ts +0 -152
  442. package/src/sequence/renderer.ts +0 -3168
  443. package/src/sequence/tag-resolution.ts +0 -164
  444. package/src/sharing.ts +0 -211
  445. package/src/sitemap/collapse.ts +0 -100
  446. package/src/sitemap/layout.ts +0 -925
  447. package/src/sitemap/parser.ts +0 -755
  448. package/src/sitemap/renderer.ts +0 -828
  449. package/src/sitemap/types.ts +0 -42
  450. package/src/slope/parser.ts +0 -18
  451. package/src/slope/renderer.ts +0 -378
  452. package/src/swimlane/diagnostics.ts +0 -94
  453. package/src/swimlane/layout.ts +0 -597
  454. package/src/swimlane/parser.ts +0 -613
  455. package/src/swimlane/renderer.ts +0 -681
  456. package/src/swimlane/types.ts +0 -151
  457. package/src/tech-radar/interactive.ts +0 -1129
  458. package/src/tech-radar/layout.ts +0 -197
  459. package/src/tech-radar/parser.ts +0 -436
  460. package/src/tech-radar/renderer.ts +0 -1239
  461. package/src/tech-radar/shared.ts +0 -151
  462. package/src/tech-radar/types.ts +0 -86
  463. package/src/themes.ts +0 -22
  464. package/src/timeline/parser.ts +0 -472
  465. package/src/timeline/renderer.ts +0 -3024
  466. package/src/timeline/types.ts +0 -33
  467. package/src/timeline/viz-parser.ts +0 -21
  468. package/src/treemap/diagnostics.ts +0 -62
  469. package/src/treemap/layout-radial.ts +0 -233
  470. package/src/treemap/layout.ts +0 -189
  471. package/src/treemap/parser.ts +0 -463
  472. package/src/treemap/renderer-radial.ts +0 -438
  473. package/src/treemap/renderer.ts +0 -572
  474. package/src/treemap/treemap-shared.ts +0 -309
  475. package/src/treemap/types.ts +0 -60
  476. package/src/utils/arrow-markers.ts +0 -51
  477. package/src/utils/arrows-diagnostics.ts +0 -62
  478. package/src/utils/arrows.ts +0 -227
  479. package/src/utils/brand.ts +0 -61
  480. package/src/utils/card.ts +0 -183
  481. package/src/utils/collapse-engine/tree-edges.ts +0 -115
  482. package/src/utils/collapse-engine/tree.ts +0 -117
  483. package/src/utils/d3-helpers.ts +0 -219
  484. package/src/utils/d3-types.ts +0 -9
  485. package/src/utils/description-helpers.ts +0 -38
  486. package/src/utils/duration.ts +0 -312
  487. package/src/utils/export-container.ts +0 -41
  488. package/src/utils/expr-eval.ts +0 -27
  489. package/src/utils/fit-canvas.ts +0 -64
  490. package/src/utils/hover-styles.ts +0 -673
  491. package/src/utils/inline-markdown.ts +0 -96
  492. package/src/utils/legend-constants.ts +0 -48
  493. package/src/utils/legend-d3.ts +0 -618
  494. package/src/utils/legend-integration.ts +0 -107
  495. package/src/utils/legend-layout.ts +0 -776
  496. package/src/utils/legend-svg.ts +0 -214
  497. package/src/utils/legend-types.ts +0 -272
  498. package/src/utils/name-normalize.ts +0 -163
  499. package/src/utils/note-box/constants.ts +0 -25
  500. package/src/utils/note-box/index.ts +0 -11
  501. package/src/utils/note-box/metrics.ts +0 -90
  502. package/src/utils/note-box/svg.ts +0 -331
  503. package/src/utils/notes/bounds.ts +0 -30
  504. package/src/utils/notes/build.ts +0 -131
  505. package/src/utils/notes/index.ts +0 -18
  506. package/src/utils/notes/model.ts +0 -19
  507. package/src/utils/notes/parse.ts +0 -131
  508. package/src/utils/notes/place.ts +0 -177
  509. package/src/utils/notes/resolve.ts +0 -88
  510. package/src/utils/number-format.ts +0 -36
  511. package/src/utils/parsing.ts +0 -953
  512. package/src/utils/reserved-key-registry.ts +0 -239
  513. package/src/utils/safe-href.ts +0 -38
  514. package/src/utils/scaling.ts +0 -97
  515. package/src/utils/svg-embed.ts +0 -251
  516. package/src/utils/tag-groups.ts +0 -607
  517. package/src/utils/text-measure.ts +0 -122
  518. package/src/utils/title-constants.ts +0 -24
  519. package/src/utils/visual-conventions.ts +0 -61
  520. package/src/utils/wrapped-desc.ts +0 -87
  521. package/src/venn/parser.ts +0 -18
  522. package/src/venn/renderer.ts +0 -1047
  523. package/src/version-control/diagnostics.ts +0 -67
  524. package/src/version-control/parser.ts +0 -544
  525. package/src/version-control/renderer.ts +0 -724
  526. package/src/version-control/types.ts +0 -100
  527. package/src/visualizations/parse.ts +0 -1560
  528. package/src/visualizations/types.ts +0 -262
  529. package/src/wireframe/layout.ts +0 -479
  530. package/src/wireframe/parser.ts +0 -1114
  531. package/src/wireframe/renderer.ts +0 -1318
  532. package/src/wireframe/types.ts +0 -110
  533. package/src/wordcloud/parser.ts +0 -18
  534. package/src/wordcloud/renderer.ts +0 -357
@@ -1,724 +0,0 @@
1
- // ============================================================
2
- // Version-Control — D3 SVG Renderer (spec §29)
3
- // ============================================================
4
- //
5
- // "Metro map" lanes: thick rounded colored branch lines, big commit dots,
6
- // rounded right-angle elbow connectors, ref-pill badges, and diagonal commit
7
- // labels (LR) / a right-hand column (TB). Ghost commits (faded/dashed) are the
8
- // shared primitive behind rebase/reset/squash. Ports
9
- // docs/version-control-syntax-mockups.html build()/draw().
10
-
11
- import * as d3Selection from 'd3-selection';
12
- import { FONT_FAMILY } from '../fonts';
13
- import {
14
- TITLE_FONT_SIZE,
15
- TITLE_FONT_WEIGHT,
16
- TITLE_Y,
17
- } from '../utils/title-constants';
18
- import { getSeriesColors } from '../palettes/color-utils';
19
- import { resolveColor } from '../colors';
20
- import type { PaletteColors } from '../palettes';
21
- import type { D3ExportDimensions } from '../utils/d3-types';
22
- import type { ParsedVersionControl, VCBranch, VCNode } from './types';
23
-
24
- type Sel = d3Selection.Selection<SVGGElement, unknown, null, undefined>;
25
-
26
- const LINE = 5.5;
27
- const DOT = 8;
28
- const CORNER = 13;
29
- const ANG = 32;
30
- const STACK = 19;
31
- const CIRCLED = '①②③④⑤⑥⑦⑧⑨';
32
- const TITLE_AREA = 40;
33
-
34
- interface Badge {
35
- kind: 'tag' | 'ref' | 'head' | 'note';
36
- label: string;
37
- w: number;
38
- remote?: boolean;
39
- }
40
- interface Placement {
41
- node: VCNode;
42
- kind: 'msg' | 'tag' | 'ref' | 'head' | 'note' | 'ab';
43
- label?: string | undefined;
44
- remote?: boolean | undefined;
45
- w?: number | undefined;
46
- x: number;
47
- y: number;
48
- anchor: 'start' | 'middle' | 'end';
49
- diag?: boolean | undefined;
50
- leader?: { x1: number; y1: number; x2: number; y2: number } | undefined;
51
- }
52
-
53
- function clip(s: string, max: number): string {
54
- return s.length > max ? s.slice(0, max - 1) + '…' : s;
55
- }
56
-
57
- /** Rounded right-angle elbow through one corner. */
58
- function roundedL(
59
- sx: number,
60
- sy: number,
61
- cx: number,
62
- cy: number,
63
- ex: number,
64
- ey: number,
65
- r: number
66
- ): string {
67
- const l1 = Math.hypot(cx - sx, cy - sy);
68
- const l2 = Math.hypot(ex - cx, ey - cy);
69
- const rr = Math.max(2, Math.min(r, l1 - 1, l2 - 1));
70
- const u1x = (cx - sx) / (l1 || 1),
71
- u1y = (cy - sy) / (l1 || 1);
72
- const u2x = (ex - cx) / (l2 || 1),
73
- u2y = (ey - cy) / (l2 || 1);
74
- return `M${sx},${sy} L${cx - u1x * rr},${cy - u1y * rr} Q${cx},${cy} ${cx + u2x * rr},${cy + u2y * rr} L${ex},${ey}`;
75
- }
76
-
77
- export function renderVersionControl(
78
- container: HTMLDivElement,
79
- parsed: ParsedVersionControl,
80
- palette: PaletteColors,
81
- isDark: boolean,
82
- onClickItem?: (lineNumber: number) => void,
83
- exportDims?: D3ExportDimensions
84
- ): void {
85
- void isDark;
86
- if (parsed.nodes.length === 0) return;
87
- d3Selection.select(container).selectAll(':not([data-d3-tooltip])').remove();
88
-
89
- const nodes = parsed.nodes;
90
- const TB = parsed.options.direction !== 'LR';
91
- const branchByName = new Map(
92
- parsed.branches.map((b) => [b.name, b] as const)
93
- );
94
- const series = getSeriesColors(palette);
95
- const laneColor = (b: VCBranch): string =>
96
- b.colorToken
97
- ? (resolveColor(b.colorToken, palette) ?? series[b.lane % series.length]!)
98
- : series[b.lane % series.length]!;
99
- const colorOf = (n: VCNode): string => laneColor(branchByName.get(n.branch)!);
100
- const byKey = (k: number): VCNode => nodes[k]!;
101
-
102
- // ── per-node label strings ──
103
- const pfx = (n: VCNode): string =>
104
- n.kind === 'cherry' ? '⇠ ' : n.kind === 'merge' ? '⇲ ' : '';
105
- const label = new Map<
106
- number,
107
- { sha: string | null; msg: string; lw: number }
108
- >();
109
- for (const n of nodes) {
110
- const sha = n.id;
111
- const msg = pfx(n) + clip(n.message || '(empty)', 26);
112
- // Bold 12px message text averages ~6.9px/char; under-measuring here lets the
113
- // diagonal labels project below the computed canvas height (bottom clipping,
114
- // esp. in hosts whose font load lags the layout pass — e.g. Obsidian).
115
- const lw = (sha ? sha.length * 6.6 + 8 : 0) + msg.length * 6.9 + 8;
116
- label.set(n.key, { sha, msg, lw });
117
- }
118
- const maxLW = Math.max(0, ...[...label.values()].map((l) => l.lw));
119
-
120
- // ── above-the-dot badge stack ──
121
- const above = new Map<number, Badge[]>();
122
- const pushBadge = (k: number, b: Badge): void => {
123
- if (!above.has(k)) above.set(k, []);
124
- above.get(k)!.push(b);
125
- };
126
- if (!parsed.options.noLabels) {
127
- for (const n of nodes)
128
- if (n.tag)
129
- pushBadge(n.key, {
130
- kind: 'tag',
131
- label: n.tag,
132
- w: n.tag.length * 6.6 + 16,
133
- });
134
- }
135
- for (const r of parsed.refs) {
136
- if (r.atKey == null) continue;
137
- if (r.head) pushBadge(r.atKey, { kind: 'head', label: 'HEAD', w: 46 });
138
- else
139
- pushBadge(r.atKey, {
140
- kind: 'ref',
141
- label: r.name,
142
- remote: r.remote,
143
- w: r.name.length * 6.2 + 18,
144
- });
145
- }
146
- for (const nt of parsed.notes) {
147
- if (nt.anchorKey == null) continue;
148
- pushBadge(nt.anchorKey, {
149
- kind: 'note',
150
- label: CIRCLED[nt.num - 1] ?? `#${nt.num}`,
151
- w: 19,
152
- });
153
- }
154
- const maxStack = Math.max(0, ...[...above.values()].map((a) => a.length));
155
-
156
- const laneCount = parsed.branches.length;
157
- const K = nodes.length;
158
- const pos = new Map<number, { x: number; y: number }>();
159
- const placements: Placement[] = [];
160
- let contentW: number,
161
- contentH: number,
162
- gutter: number,
163
- cross0: number,
164
- captionY = 0;
165
- const cos = Math.cos((ANG * Math.PI) / 180);
166
- const sin = Math.sin((ANG * Math.PI) / 180);
167
-
168
- if (!TB) {
169
- const maxName = Math.max(4, ...parsed.branches.map((b) => b.name.length));
170
- gutter = maxName * 7.5 + 18;
171
- const along0 = gutter + 34,
172
- step = 86,
173
- laneGap = 54;
174
- cross0 = 16 + maxStack * STACK + 14;
175
- for (const n of nodes)
176
- pos.set(n.key, {
177
- x: along0 + n.seq * step,
178
- y: cross0 + n.lane * laneGap,
179
- });
180
- const lanesBottom = cross0 + (laneCount - 1) * laneGap;
181
- const bandY = lanesBottom + 26;
182
- for (const n of nodes) {
183
- const p = pos.get(n.key)!;
184
- placements.push({
185
- node: n,
186
- kind: 'msg',
187
- diag: true,
188
- x: p.x,
189
- y: bandY,
190
- anchor: 'start',
191
- leader: { x1: p.x, y1: p.y + DOT, x2: p.x, y2: bandY - 3 },
192
- });
193
- const stack = above.get(n.key) ?? [];
194
- stack.forEach((it, j) =>
195
- placements.push({
196
- node: n,
197
- kind: it.kind,
198
- label: it.label,
199
- remote: it.remote,
200
- w: it.w,
201
- x: p.x,
202
- y: p.y - DOT - 12 - j * STACK,
203
- anchor: 'middle',
204
- })
205
- );
206
- }
207
- for (const b of parsed.branches) {
208
- if (!b.ab || b.ab.ahead + b.ab.behind === 0 || b.tip == null) continue;
209
- const tip = pos.get(b.tip)!;
210
- placements.push({
211
- node: byKey(b.tip),
212
- kind: 'ab',
213
- label: abText(b.ab),
214
- x: tip.x + DOT + 10,
215
- y: tip.y,
216
- anchor: 'start',
217
- });
218
- }
219
- contentW =
220
- Math.max(
221
- along0 + (K - 1) * step + DOT + 70,
222
- ...[...pos.entries()].map(([k, p]) => p.x + label.get(k)!.lw * cos)
223
- ) + 18;
224
- // +12 descender projection (label baseline rotated by ANG) + breathing room
225
- contentH = bandY + maxLW * sin + 12 * cos + 16;
226
- if (parsed.notes.length) {
227
- captionY = contentH + 4;
228
- contentH += 8 + parsed.notes.length * 16 + 8;
229
- }
230
- } else {
231
- gutter = 24;
232
- const along0 = gutter + 32,
233
- step = 52,
234
- laneGap = 96;
235
- cross0 = 78;
236
- for (const n of nodes)
237
- pos.set(n.key, {
238
- x: cross0 + n.lane * laneGap,
239
- y: along0 + n.seq * step,
240
- });
241
- const bandX = cross0 + (laneCount - 1) * laneGap + 28;
242
- for (const n of nodes) {
243
- const p = pos.get(n.key)!;
244
- placements.push({
245
- node: n,
246
- kind: 'msg',
247
- diag: false,
248
- x: bandX,
249
- y: p.y,
250
- anchor: 'start',
251
- leader: { x1: p.x + DOT + 2, y1: p.y, x2: bandX - 6, y2: p.y },
252
- });
253
- const stack = above.get(n.key) ?? [];
254
- // in TB, stack badges to the left of the dot
255
- stack.forEach((it, j) =>
256
- placements.push({
257
- node: n,
258
- kind: it.kind,
259
- label: it.label,
260
- remote: it.remote,
261
- w: it.w,
262
- x: p.x - DOT - 12 - it.w / 2 - j * 4,
263
- y: p.y,
264
- anchor: 'middle',
265
- })
266
- );
267
- }
268
- contentW = bandX + maxLW + 16;
269
- contentH = along0 + (K - 1) * step + 22;
270
- }
271
-
272
- const showTitle = !!parsed.title;
273
- const titleH = showTitle ? TITLE_AREA : 0;
274
- const W = Math.round(contentW);
275
- const H = Math.round(contentH + titleH);
276
-
277
- const exportMode = !!exportDims;
278
- const svg = d3Selection
279
- .select(container)
280
- .append('svg')
281
- .attr('width', W)
282
- .attr('height', H)
283
- .attr('viewBox', `0 0 ${W} ${H}`)
284
- .attr('preserveAspectRatio', 'xMidYMin meet')
285
- .attr('xmlns', 'http://www.w3.org/2000/svg')
286
- .style('font-family', FONT_FAMILY);
287
- svg
288
- .append('rect')
289
- .attr('width', W)
290
- .attr('height', H)
291
- .attr('fill', palette.bg);
292
-
293
- if (showTitle) {
294
- const t = svg
295
- .append('text')
296
- .attr('class', 'chart-title')
297
- .attr('x', W / 2)
298
- .attr('y', TITLE_Y)
299
- .attr('text-anchor', 'middle')
300
- .attr('fill', palette.text)
301
- .attr('font-family', FONT_FAMILY)
302
- .attr('font-size', TITLE_FONT_SIZE)
303
- .attr('font-weight', TITLE_FONT_WEIGHT)
304
- .attr('data-line-number', parsed.titleLineNumber ?? 1)
305
- .text(parsed.title!);
306
- if (onClickItem && parsed.titleLineNumber && !exportMode) {
307
- const ln = parsed.titleLineNumber;
308
- t.style('cursor', 'pointer').on('click', () => onClickItem(ln));
309
- }
310
- }
311
-
312
- const g = svg.append('g').attr('transform', `translate(0, ${titleH})`) as Sel;
313
- drawGraph(
314
- g,
315
- parsed,
316
- palette,
317
- TB,
318
- pos,
319
- placements,
320
- label,
321
- colorOf,
322
- byKey,
323
- gutter,
324
- cross0,
325
- captionY,
326
- onClickItem && !exportMode ? onClickItem : undefined
327
- );
328
- }
329
-
330
- function abText(ab: { ahead: number; behind: number }): string {
331
- const a: string[] = [];
332
- if (ab.ahead) a.push('↑' + ab.ahead);
333
- if (ab.behind) a.push('↓' + ab.behind);
334
- return a.join(' ');
335
- }
336
-
337
- function drawGraph(
338
- g: Sel,
339
- parsed: ParsedVersionControl,
340
- palette: PaletteColors,
341
- TB: boolean,
342
- pos: Map<number, { x: number; y: number }>,
343
- placements: Placement[],
344
- label: Map<number, { sha: string | null; msg: string; lw: number }>,
345
- colorOf: (n: VCNode) => string,
346
- byKey: (k: number) => VCNode,
347
- gutter: number,
348
- cross0: number,
349
- captionY: number,
350
- onClickItem?: (lineNumber: number) => void
351
- ): void {
352
- const nodes = parsed.nodes;
353
- const P = (k: number): { x: number; y: number } => pos.get(k)!;
354
- const branchCorner = (par: VCNode, n: VCNode): { x: number; y: number } =>
355
- TB
356
- ? { x: P(n.key).x, y: P(par.key).y }
357
- : { x: P(par.key).x, y: P(n.key).y };
358
- const mergeCorner = (src: VCNode, n: VCNode): { x: number; y: number } =>
359
- TB
360
- ? { x: P(src.key).x, y: P(n.key).y }
361
- : { x: P(n.key).x, y: P(src.key).y };
362
- const gop = (n: VCNode): number => (n.ghost ? 0.32 : 1);
363
-
364
- const dlink = (a: VCNode, b: VCNode, color: string, arrow: boolean): void => {
365
- const A = P(a.key),
366
- B = P(b.key),
367
- c = mergeCorner(a, b);
368
- g.append('path')
369
- .attr('d', roundedL(A.x, A.y, c.x, c.y, B.x, B.y, CORNER))
370
- .attr('fill', 'none')
371
- .attr('stroke', color)
372
- .attr('stroke-width', 2)
373
- .attr('stroke-dasharray', '2 4')
374
- .attr('opacity', 0.8);
375
- if (arrow) {
376
- // small arrowhead at B pointing along (corner → B)
377
- const dx = B.x - c.x,
378
- dy = B.y - c.y,
379
- l = Math.hypot(dx, dy) || 1;
380
- const ux = dx / l,
381
- uy = dy / l,
382
- px = -uy,
383
- py = ux,
384
- s = 4;
385
- g.append('path')
386
- .attr(
387
- 'd',
388
- `M${B.x},${B.y} L${B.x - ux * s * 2 + px * s},${B.y - uy * s * 2 + py * s} L${B.x - ux * s * 2 - px * s},${B.y - uy * s * 2 - py * s} Z`
389
- )
390
- .attr('fill', color)
391
- .attr('opacity', 0.8);
392
- }
393
- };
394
-
395
- // ── edges ──
396
- for (const n of nodes) {
397
- const c = colorOf(n);
398
- const o = gop(n);
399
- const N = P(n.key);
400
- if (n.prev != null) {
401
- const a = P(n.prev);
402
- const e = g
403
- .append('line')
404
- .attr('x1', a.x)
405
- .attr('y1', a.y)
406
- .attr('x2', N.x)
407
- .attr('y2', N.y)
408
- .attr('stroke', c)
409
- .attr('stroke-width', LINE)
410
- .attr('stroke-linecap', 'round')
411
- .attr('opacity', o);
412
- if (n.ghost) e.attr('stroke-dasharray', '5 5');
413
- }
414
- if (n.parent != null) {
415
- const par = byKey(n.parent),
416
- cc = branchCorner(par, n),
417
- pp = P(par.key);
418
- const e = g
419
- .append('path')
420
- .attr('d', roundedL(pp.x, pp.y, cc.x, cc.y, N.x, N.y, CORNER))
421
- .attr('fill', 'none')
422
- .attr('stroke', c)
423
- .attr('stroke-width', LINE)
424
- .attr('stroke-linecap', 'round')
425
- .attr('opacity', o);
426
- if (n.ghost) e.attr('stroke-dasharray', '5 5');
427
- }
428
- if (n.mergeFrom != null) {
429
- const s = byKey(n.mergeFrom),
430
- cc = mergeCorner(s, n),
431
- sp = P(s.key);
432
- g.append('path')
433
- .attr('d', roundedL(sp.x, sp.y, cc.x, cc.y, N.x, N.y, CORNER))
434
- .attr('fill', 'none')
435
- .attr('stroke', colorOf(s))
436
- .attr('stroke-width', LINE)
437
- .attr('stroke-linecap', 'round')
438
- .attr('opacity', 0.92 * o);
439
- }
440
- if (n.cherryFrom != null)
441
- dlink(byKey(n.cherryFrom), n, colorOf(byKey(n.cherryFrom)), false);
442
- if (n.revertFrom != null) dlink(byKey(n.revertFrom), n, c, false);
443
- if (n.squashFrom != null)
444
- dlink(byKey(n.squashFrom), n, palette.textMuted, true);
445
- if (n.movedTo != null) dlink(n, byKey(n.movedTo), palette.textMuted, true);
446
- }
447
-
448
- // ── branch-name gutter ──
449
- if (!parsed.options.noLanes) {
450
- for (const b of parsed.branches) {
451
- let first: VCNode | null = null;
452
- for (const n of nodes)
453
- if (n.branch === b.name && (first === null || n.seq < first.seq))
454
- first = n;
455
- if (!first) continue;
456
- const fp = P(first.key);
457
- const col = colorOf(first);
458
- if (TB) {
459
- g.append('text')
460
- .attr('x', fp.x)
461
- .attr('y', 14)
462
- .attr('text-anchor', 'middle')
463
- .attr('font-size', 12.5)
464
- .attr('font-weight', 800)
465
- .attr('fill', col)
466
- .text(b.name);
467
- } else {
468
- g.append('text')
469
- .attr('x', gutter)
470
- .attr('y', fp.y + 4)
471
- .attr('text-anchor', 'end')
472
- .attr('font-size', 12.5)
473
- .attr('font-weight', 800)
474
- .attr('fill', col)
475
- .text(b.name);
476
- }
477
- }
478
- }
479
- void cross0;
480
-
481
- // ── nodes ──
482
- for (const n of nodes) {
483
- const c = colorOf(n);
484
- const N = P(n.key);
485
- const sel = <E extends d3Selection.BaseType>(
486
- el: d3Selection.Selection<E, unknown, null, undefined>
487
- ): void => {
488
- el.attr('data-line-number', n.lineNumber);
489
- // Branch key for baked-CSS cross-highlight (hover a commit → dim other
490
- // branches).
491
- el.attr('data-branch', n.branch);
492
- if (onClickItem)
493
- el.style('cursor', 'pointer').on('click', () =>
494
- onClickItem(n.lineNumber)
495
- );
496
- };
497
- if (n.ghost) {
498
- sel(
499
- g
500
- .append('circle')
501
- .attr('cx', N.x)
502
- .attr('cy', N.y)
503
- .attr('r', DOT - 1)
504
- .attr('fill', palette.bg)
505
- .attr('stroke', c)
506
- .attr('stroke-width', 2)
507
- .attr('opacity', 0.4)
508
- );
509
- continue;
510
- }
511
- if (n.type === 'highlight') {
512
- sel(
513
- g
514
- .append('rect')
515
- .attr('x', N.x - DOT)
516
- .attr('y', N.y - DOT)
517
- .attr('width', DOT * 2)
518
- .attr('height', DOT * 2)
519
- .attr('rx', 3.5)
520
- .attr('fill', c)
521
- .attr('stroke', palette.bg)
522
- .attr('stroke-width', 3)
523
- );
524
- } else if (n.type === 'reverse') {
525
- g.append('circle')
526
- .attr('cx', N.x)
527
- .attr('cy', N.y)
528
- .attr('r', DOT)
529
- .attr('fill', palette.bg)
530
- .attr('stroke', c)
531
- .attr('stroke-width', 3);
532
- sel(
533
- g
534
- .append('path')
535
- .attr(
536
- 'd',
537
- `M${N.x - 3.6},${N.y - 3.6} L${N.x + 3.6},${N.y + 3.6} M${N.x + 3.6},${N.y - 3.6} L${N.x - 3.6},${N.y + 3.6}`
538
- )
539
- .attr('stroke', c)
540
- .attr('stroke-width', 2)
541
- .attr('stroke-linecap', 'round')
542
- .attr('fill', 'none')
543
- );
544
- } else if (n.kind === 'merge') {
545
- g.append('circle')
546
- .attr('cx', N.x)
547
- .attr('cy', N.y)
548
- .attr('r', DOT)
549
- .attr('fill', palette.bg)
550
- .attr('stroke', c)
551
- .attr('stroke-width', 3);
552
- sel(
553
- g
554
- .append('circle')
555
- .attr('cx', N.x)
556
- .attr('cy', N.y)
557
- .attr('r', 3)
558
- .attr('fill', c)
559
- );
560
- } else {
561
- sel(
562
- g
563
- .append('circle')
564
- .attr('cx', N.x)
565
- .attr('cy', N.y)
566
- .attr('r', DOT)
567
- .attr('fill', c)
568
- .attr('stroke', palette.bg)
569
- .attr('stroke-width', 3)
570
- );
571
- }
572
- }
573
-
574
- // ── leaders + labels + badges ──
575
- const pill = (
576
- cx: number,
577
- cy: number,
578
- w: number,
579
- text: string,
580
- fill: string,
581
- textColor: string,
582
- border?: string,
583
- dash?: boolean,
584
- weight = 700
585
- ): void => {
586
- const r = g
587
- .append('rect')
588
- .attr('x', cx - w / 2)
589
- .attr('y', cy - 8.5)
590
- .attr('width', w)
591
- .attr('height', 17)
592
- .attr('rx', 8.5)
593
- .attr('fill', fill);
594
- if (border) {
595
- r.attr('stroke', border).attr('stroke-width', 1.3);
596
- if (dash) r.attr('stroke-dasharray', '3 2');
597
- }
598
- g.append('text')
599
- .attr('x', cx)
600
- .attr('y', cy + 4)
601
- .attr('text-anchor', 'middle')
602
- .attr('font-size', 10.5)
603
- .attr('font-weight', weight)
604
- .attr('fill', textColor)
605
- .text(text);
606
- };
607
-
608
- for (const pl of placements) {
609
- const n = pl.node;
610
- const c = colorOf(n);
611
- if (pl.leader) {
612
- g.append('line')
613
- .attr('x1', pl.leader.x1)
614
- .attr('y1', pl.leader.y1)
615
- .attr('x2', pl.leader.x2)
616
- .attr('y2', pl.leader.y2)
617
- .attr('stroke', c)
618
- .attr('stroke-width', 1)
619
- .attr('opacity', 0.34 * gop(n));
620
- }
621
- if (pl.kind === 'tag') pill(pl.x, pl.y, pl.w!, pl.label!, c, palette.bg);
622
- else if (pl.kind === 'head')
623
- pill(
624
- pl.x,
625
- pl.y,
626
- pl.w!,
627
- 'HEAD',
628
- palette.text,
629
- palette.bg,
630
- undefined,
631
- false,
632
- 800
633
- );
634
- else if (pl.kind === 'ref')
635
- pill(pl.x, pl.y, pl.w!, pl.label!, palette.bg, c, c, pl.remote);
636
- else if (pl.kind === 'note') {
637
- g.append('circle')
638
- .attr('cx', pl.x)
639
- .attr('cy', pl.y)
640
- .attr('r', 8.5)
641
- .attr('fill', c);
642
- g.append('text')
643
- .attr('x', pl.x)
644
- .attr('y', pl.y + 4)
645
- .attr('text-anchor', 'middle')
646
- .attr('font-size', 11)
647
- .attr('fill', palette.bg)
648
- .text(pl.label!);
649
- } else if (pl.kind === 'ab') {
650
- g.append('text')
651
- .attr('x', pl.x)
652
- .attr('y', pl.y + 4)
653
- .attr('text-anchor', 'start')
654
- .attr('font-size', 11)
655
- .attr('font-weight', 700)
656
- .attr('fill', c)
657
- .text(pl.label!);
658
- } else {
659
- // message
660
- const L = label.get(n.key)!;
661
- const gh = n.ghost;
662
- const mfill = gh ? palette.textMuted : c;
663
- const t = pl.diag
664
- ? g
665
- .append('text')
666
- .attr('transform', `translate(${pl.x},${pl.y}) rotate(${ANG})`)
667
- .attr('font-size', 12)
668
- .attr('opacity', gh ? 0.55 : 1)
669
- : g
670
- .append('text')
671
- .attr('x', pl.x)
672
- .attr('y', pl.y + 4)
673
- .attr('text-anchor', pl.anchor)
674
- .attr('font-size', 12)
675
- .attr('opacity', gh ? 0.55 : 1);
676
- if (L.sha)
677
- t.append('tspan')
678
- .attr('font-family', 'ui-monospace, monospace')
679
- .attr('font-size', 11)
680
- .attr('fill', palette.textMuted)
681
- .text(L.sha + ' ');
682
- t.append('tspan')
683
- .attr('fill', mfill)
684
- .attr('font-weight', n.kind === 'cherry' ? 400 : 700)
685
- .attr('font-style', n.kind === 'cherry' ? 'italic' : 'normal')
686
- .text(L.msg);
687
- }
688
- }
689
-
690
- // ── note captions ──
691
- if (captionY && parsed.notes.length) {
692
- let y = captionY + 14;
693
- for (const nt of parsed.notes) {
694
- const t = g
695
- .append('text')
696
- .attr('x', 12)
697
- .attr('y', y)
698
- .attr('font-size', 11.5);
699
- t.append('tspan')
700
- .attr('fill', palette.text)
701
- .attr('font-weight', 800)
702
- .text((CIRCLED[nt.num - 1] ?? `#${nt.num}`) + ' ');
703
- t.append('tspan').attr('fill', palette.textMuted).text(nt.text);
704
- y += 16;
705
- }
706
- }
707
- }
708
-
709
- export function renderVersionControlForExport(
710
- container: HTMLDivElement,
711
- parsed: ParsedVersionControl,
712
- palette: PaletteColors,
713
- isDark: boolean,
714
- exportDims?: D3ExportDimensions
715
- ): void {
716
- renderVersionControl(
717
- container,
718
- parsed,
719
- palette,
720
- isDark,
721
- undefined,
722
- exportDims
723
- );
724
- }