@diagrammo/dgmo 0.56.0 → 0.58.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 (210) hide show
  1. package/dist/advanced.d.ts +57 -7
  2. package/dist/advanced.js +206 -196
  3. package/dist/auto.css +60 -0
  4. package/dist/auto.js +185 -124
  5. package/dist/auto.mjs +6749 -6280
  6. package/dist/block.css +60 -0
  7. package/dist/block.d.ts +12 -0
  8. package/dist/block.js +132 -61
  9. package/dist/{chart-meta-CPNVUZ5J.d.ts → chart-meta-C6UaqhTP.d.ts} +1 -1
  10. package/dist/chart-meta.d.ts +2 -2
  11. package/dist/chart-meta.js +53 -51
  12. package/dist/{charts-d3-D67V6KHE.js → charts-d3-K5M5J5ZM.js} +5 -5
  13. package/dist/{chunk-GDGOVO2I.js → chunk-2JPEBOUQ.js} +71 -55
  14. package/dist/{chunk-FERE46TP.js → chunk-2UBTPFIF.js} +3 -3
  15. package/dist/{chunk-CXI6X54X.js → chunk-3DY7TNZ7.js} +2 -2
  16. package/dist/{chunk-D5FANMSG.js → chunk-3LMUMAUS.js} +2 -2
  17. package/dist/{chunk-D3WTEBGT.js → chunk-46NVO5UA.js} +2 -2
  18. package/dist/{chunk-5J2RQGFG.js → chunk-4CE2GOC2.js} +3 -3
  19. package/dist/{chunk-VKN7YW4Q.js → chunk-4ESLORPX.js} +7 -7
  20. package/dist/chunk-4UNGFVVY.js +181 -0
  21. package/dist/{chunk-Y2L2LET6.js → chunk-52KLHCXQ.js} +6 -6
  22. package/dist/{chunk-VSFAJUEF.js → chunk-5RPSN32F.js} +3 -3
  23. package/dist/{chunk-RBIX3HQQ.js → chunk-5RY4W7J6.js} +9 -9
  24. package/dist/{chunk-GUVVQW3Y.js → chunk-6F3MVYUW.js} +6 -6
  25. package/dist/{chunk-ST3ZNEUQ.js → chunk-6JYE3SDK.js} +2 -2
  26. package/dist/{chunk-FZECLCCU.js → chunk-6KTRV3O5.js} +3 -3
  27. package/dist/{chunk-KIGV66SP.js → chunk-7Q6HX7ON.js} +6 -6
  28. package/dist/{chunk-ULR3BVNH.js → chunk-7SGR7A5K.js} +4 -4
  29. package/dist/{chunk-5ZDHXS5N.js → chunk-7UZFAIKI.js} +7 -7
  30. package/dist/{chunk-WFX6AUQO.js → chunk-ATKB7VEN.js} +9 -4
  31. package/dist/{chunk-5VLUAAAE.js → chunk-AU4AQYOA.js} +3 -3
  32. package/dist/{chunk-4MB4UOT5.js → chunk-B4U7RRQ4.js} +2 -2
  33. package/dist/{chunk-QWUYFUNO.js → chunk-BFYPHZ5M.js} +2 -2
  34. package/dist/{chunk-NVQXIDLE.js → chunk-BIWMOFSE.js} +7 -7
  35. package/dist/{chunk-HPJITTF7.js → chunk-C7IKQOEQ.js} +15 -15
  36. package/dist/{chunk-YJUF2N3C.js → chunk-CBPFVH3N.js} +10 -10
  37. package/dist/{chunk-R7ECJQTB.js → chunk-CC6XIQDE.js} +3 -3
  38. package/dist/{chunk-3R67RRPC.js → chunk-CZIFUXI2.js} +7 -7
  39. package/dist/chunk-D3K4U3ZM.js +232 -0
  40. package/dist/{chunk-RQGNELB3.js → chunk-DWAQXY6T.js} +3 -3
  41. package/dist/{chunk-HIMDUQT7.js → chunk-DWMJLEBT.js} +7 -7
  42. package/dist/{chunk-YG5KQ55U.js → chunk-DZUDSGGQ.js} +13 -21
  43. package/dist/chunk-E55OZDFH.js +65 -0
  44. package/dist/{chunk-P6XFQVYY.js → chunk-E6CCWMTT.js} +19 -19
  45. package/dist/{chunk-3KOPPSUQ.js → chunk-E7HANW62.js} +12 -3
  46. package/dist/{chunk-ZMMYCERO.js → chunk-EDJYIQZM.js} +9 -233
  47. package/dist/{chunk-JXFB3APA.js → chunk-EEF7BUX7.js} +15 -15
  48. package/dist/{chunk-23THM67F.js → chunk-FWNJ45NW.js} +5 -5
  49. package/dist/{chunk-2UZVMWSQ.js → chunk-FXIG472W.js} +5 -5
  50. package/dist/{chunk-CQOC2MD6.js → chunk-GAFNYUNJ.js} +17 -16
  51. package/dist/{chunk-AIH6M5J6.js → chunk-GGKWKNOL.js} +4 -4
  52. package/dist/{chunk-U2BKSEKU.js → chunk-H52HJ26L.js} +2 -2
  53. package/dist/{chunk-BR2VSKHI.js → chunk-HBIGEWRC.js} +5 -5
  54. package/dist/{chunk-D64FRGKU.js → chunk-HUYAMTCD.js} +2 -2
  55. package/dist/{chunk-FCA2UGJT.js → chunk-HXTS54OV.js} +6 -6
  56. package/dist/{chunk-XN4ZSACM.js → chunk-ILZHMKYQ.js} +7 -7
  57. package/dist/{chunk-W2I2EXSC.js → chunk-IRN5GBBO.js} +15 -15
  58. package/dist/{chunk-YH62K5D4.js → chunk-JM65HLBZ.js} +13 -13
  59. package/dist/{chunk-DIKIHU52.js → chunk-KAG5JCZV.js} +3 -3
  60. package/dist/{chunk-4MJOBVY7.js → chunk-KNCY7YHC.js} +2 -2
  61. package/dist/{chunk-N2KO445N.js → chunk-L5DQB4C7.js} +16 -16
  62. package/dist/{chunk-5HWPEYWB.js → chunk-LDVUPGWC.js} +2 -2
  63. package/dist/{chunk-EEKGMS63.js → chunk-LLDNNANC.js} +3 -3
  64. package/dist/{chunk-SK7PCW4F.js → chunk-LSFZDBAP.js} +2 -2
  65. package/dist/{chunk-7SXTD7L6.js → chunk-LYQMN35H.js} +2 -2
  66. package/dist/{chunk-ES3MUYRX.js → chunk-MF4FDLFG.js} +3 -3
  67. package/dist/{chunk-YNAHUNMA.js → chunk-MPPOQOCF.js} +2 -2
  68. package/dist/{chunk-QDOYT6UW.js → chunk-N7PF5IRF.js} +4 -4
  69. package/dist/chunk-NCT22MOD.js +93 -0
  70. package/dist/{chunk-RK3Y4WMV.js → chunk-NGGVVTP2.js} +15 -15
  71. package/dist/{chunk-AMC2OGXF.js → chunk-NPBAV3QU.js} +13 -13
  72. package/dist/{chunk-HODUM6LY.js → chunk-NQGE76NC.js} +10 -10
  73. package/dist/{chunk-5XMDSXZT.js → chunk-NSUAU6JQ.js} +2 -2
  74. package/dist/{chunk-OHBIN74X.js → chunk-NW2K6UU2.js} +3 -3
  75. package/dist/{chunk-WOMXS5R7.js → chunk-NYCBN7YE.js} +3 -3
  76. package/dist/{chunk-FXVPSTDT.js → chunk-OMOU2V3W.js} +6 -6
  77. package/dist/chunk-ON4MEUC4.js +50 -0
  78. package/dist/{chunk-SOBGK35Z.js → chunk-OXANJRNK.js} +8 -8
  79. package/dist/{chunk-X32RDWT5.js → chunk-PH5WK6G5.js} +3 -3
  80. package/dist/{chunk-C3BWDEYN.js → chunk-PIIORN3Q.js} +7 -7
  81. package/dist/{chunk-YM2ZQIVG.js → chunk-QDOSCTL5.js} +9 -17
  82. package/dist/{chunk-CY5KE2P5.js → chunk-QS37VUFZ.js} +2 -2
  83. package/dist/{chunk-NFAHDPCG.js → chunk-RB3AFVPT.js} +3 -3
  84. package/dist/{chunk-LV5BFA24.js → chunk-RDHZRHDG.js} +3 -3
  85. package/dist/{chunk-AOJJSGXE.js → chunk-S3AZMBK7.js} +7 -7
  86. package/dist/{chunk-OWLGERJL.js → chunk-SBQXLX6Y.js} +6 -6
  87. package/dist/{chunk-PECYPUJJ.js → chunk-SQK4EKOW.js} +8 -8
  88. package/dist/{chunk-2JMNOEAU.js → chunk-STYJ6EOV.js} +163 -140
  89. package/dist/{chunk-AN465MXC.js → chunk-SZCZOA2L.js} +2 -2
  90. package/dist/{chunk-GG7TK3IA.js → chunk-TQC2SUMJ.js} +6 -6
  91. package/dist/{chunk-HE57UQHL.js → chunk-TXQXPJTG.js} +4 -4
  92. package/dist/{chunk-RV2N7COG.js → chunk-UFDLQKCR.js} +2 -2
  93. package/dist/{chunk-YWPWRR7W.js → chunk-UPTAWSCG.js} +2 -2
  94. package/dist/{chunk-ULONXAOD.js → chunk-VBSKNQUO.js} +6 -6
  95. package/dist/{chunk-UU6LUYUH.js → chunk-VJARCVMH.js} +2 -2
  96. package/dist/{chunk-HOPTF3ZP.js → chunk-VJYERZ2Q.js} +7 -7
  97. package/dist/{chunk-USFZQPJ2.js → chunk-W22JRLNA.js} +3 -3
  98. package/dist/{chunk-KSPCR75O.js → chunk-W2RU24DD.js} +6 -6
  99. package/dist/{chunk-NHZAYL2X.js → chunk-W6T5QRIR.js} +4 -4
  100. package/dist/{chunk-3HDBAXF5.js → chunk-WGC42WJU.js} +8 -1
  101. package/dist/{chunk-APD52YJV.js → chunk-WQWVLAA5.js} +4 -4
  102. package/dist/{chunk-VU3DOZ6C.js → chunk-WYG5VJY2.js} +4 -4
  103. package/dist/{chunk-VYEQPPS6.js → chunk-WYGLKR4I.js} +3 -3
  104. package/dist/{chunk-MGLJA5TK.js → chunk-X3YNX4DR.js} +2 -2
  105. package/dist/{chunk-A4DAZO3U.js → chunk-X4JEAY73.js} +13 -13
  106. package/dist/{chunk-JE3SMHRZ.js → chunk-XHTRLRZ5.js} +9 -9
  107. package/dist/{chunk-UZ6L5VQJ.js → chunk-XXAHWYQU.js} +3 -3
  108. package/dist/{chunk-HKKPUUNK.js → chunk-YAG7WAQE.js} +13 -13
  109. package/dist/{chunk-KF575IXC.js → chunk-YILSSUEL.js} +3 -3
  110. package/dist/{chunk-WK3UFCZC.js → chunk-YKMOI6ZG.js} +11 -11
  111. package/dist/{chunk-TGOMHUOV.js → chunk-ZEIYC7XO.js} +12 -1
  112. package/dist/{chunk-PFG3EVRD.js → chunk-ZKNSLC35.js} +3 -3
  113. package/dist/{chunk-U7ZQTUZT.js → chunk-ZW7LTYW2.js} +4 -4
  114. package/dist/cli.cjs +144 -143
  115. package/dist/cloud-reference.d.ts +76 -0
  116. package/dist/cloud-reference.js +18 -0
  117. package/dist/completion-registry.js +24 -5
  118. package/dist/dgmo-router-2637N4DY.js +90 -0
  119. package/dist/{dimensions-PLECMFTR.js → dimensions-HSIQYP5Z.js} +5 -5
  120. package/dist/editor.js +11 -2
  121. package/dist/element.js +188 -127
  122. package/dist/element.mjs +6749 -6280
  123. package/dist/{flowchart-parser-DA3V2SLH.js → flowchart-parser-I2TEUWAP.js} +4 -4
  124. package/dist/{flowchart-renderer-UQVXOUW4.js → flowchart-renderer-ER66DNCI.js} +12 -12
  125. package/dist/highlight.js +11 -2
  126. package/dist/index.d.ts +13 -4
  127. package/dist/index.js +65 -59
  128. package/dist/{layout-UXMNKETK.js → layout-3QMCSW6B.js} +8 -7
  129. package/dist/{layout-2BJDECLZ.js → layout-DH6GSKAH.js} +7 -6
  130. package/dist/{layout-HIK4ZJFQ.js → layout-HTDK3DMG.js} +4 -4
  131. package/dist/{layout-A5UVXINF.js → layout-K4S54TX7.js} +4 -4
  132. package/dist/{layout-UFZQI6SX.js → layout-RIS5VTGL.js} +7 -6
  133. package/dist/{layout-3XFPPFXI.js → layout-TCWNJ2OZ.js} +7 -6
  134. package/dist/{layout-SNIEAZ2I.js → layout-V5X3U3WB.js} +4 -4
  135. package/dist/{layout-QRVYYYZ3.js → layout-VFUHKLTS.js} +3 -3
  136. package/dist/{layout-WDXNSQQF.js → layout-VNEBCYPX.js} +4 -4
  137. package/dist/{layout-search-I4VNIRGT.js → layout-search-N6NQI5OQ.js} +10 -9
  138. package/dist/{parser-5UZWYSIV.js → parser-2RTQF2LA.js} +4 -4
  139. package/dist/{parser-4ZIJDGPG.js → parser-2VTOUMJY.js} +4 -4
  140. package/dist/{parser-HMQZPPOK.js → parser-3M3QQRCZ.js} +4 -4
  141. package/dist/{parser-RBNOWHGM.js → parser-4WSJVVG6.js} +4 -4
  142. package/dist/{parser-Q3KNFXQR.js → parser-67JHR6I6.js} +4 -4
  143. package/dist/{parser-MH62NYKM.js → parser-6GXEHNZD.js} +4 -4
  144. package/dist/{parser-O5XCVGZG.js → parser-6I3NOLKL.js} +3 -3
  145. package/dist/{parser-6CM27UPA.js → parser-7VNCLF77.js} +4 -4
  146. package/dist/{parser-QL2LBPFE.js → parser-AE7RC4IJ.js} +4 -4
  147. package/dist/{parser-DQ2DGDYO.js → parser-BDGMJSZB.js} +3 -3
  148. package/dist/{parser-WT3DSNPQ.js → parser-BVHECXAJ.js} +4 -4
  149. package/dist/{parser-QEWSTNEJ.js → parser-FLCLHHOM.js} +4 -4
  150. package/dist/{parser-VVTCMQWY.js → parser-FSSAJO2M.js} +5 -5
  151. package/dist/{parser-73YUU35J.js → parser-GH2Y6CR4.js} +3 -3
  152. package/dist/{parser-AYZTKZC3.js → parser-GUUNA7WE.js} +3 -3
  153. package/dist/{parser-GGCDY65M.js → parser-ISJJO7TJ.js} +5 -5
  154. package/dist/parser-J3FUTZAQ.js +12 -0
  155. package/dist/{parser-Q62VR2UJ.js → parser-JY7ZU5PP.js} +5 -5
  156. package/dist/{parser-4TX6U4ZU.js → parser-KKBW25LM.js} +3 -3
  157. package/dist/{parser-XWNSCDY6.js → parser-M74SVSPT.js} +4 -4
  158. package/dist/{parser-CCAUZLYI.js → parser-MKJ52TD7.js} +4 -4
  159. package/dist/{parser-A6M25MLK.js → parser-MPQTXCBQ.js} +3 -3
  160. package/dist/{parser-LQDEU22S.js → parser-N3AAAGTA.js} +4 -4
  161. package/dist/{parser-OPOGIKFR.js → parser-N7SSE4SK.js} +4 -4
  162. package/dist/{parser-D7YZX3CH.js → parser-NH6IAVZJ.js} +3 -3
  163. package/dist/{parser-IPBEW2DG.js → parser-NKHBUGAX.js} +4 -4
  164. package/dist/{parser-PQXN6SBB.js → parser-QVX4FR3J.js} +5 -5
  165. package/dist/{parser-JWAGGYLL.js → parser-S6QH3QIK.js} +5 -5
  166. package/dist/{parser-PEBXIOPX.js → parser-UODHU3EP.js} +4 -4
  167. package/dist/{parser-LNEAHGXF.js → parser-UVS6OHCO.js} +5 -5
  168. package/dist/{parser-SJ7ECFAP.js → parser-X3TCE7P5.js} +4 -4
  169. package/dist/{parser-QN3GJJ3J.js → parser-XQKSQBOT.js} +3 -3
  170. package/dist/{parser-KTVDCWHG.js → parser-XXYB4TRG.js} +4 -4
  171. package/dist/{registry-CaSw0PSH.d.ts → registry-C0HvobTb.d.ts} +17 -0
  172. package/dist/renderer-2G7Q3L5W.js +77 -0
  173. package/dist/{renderer-I5MAFUKX.js → renderer-2IO3H53I.js} +6 -6
  174. package/dist/{renderer-M6AFKVLS.js → renderer-2KDW3TWO.js} +5 -5
  175. package/dist/{renderer-CB2DOQ2O.js → renderer-2SK7UM4O.js} +5 -5
  176. package/dist/{renderer-P7O6OUYC.js → renderer-34GG6RHO.js} +9 -9
  177. package/dist/{renderer-WWC5VGHH.js → renderer-44EXXXRC.js} +7 -7
  178. package/dist/{renderer-MLDGFZDW.js → renderer-4SH6U6WF.js} +6 -6
  179. package/dist/{renderer-53FU55KK.js → renderer-4WQRF2SK.js} +6 -6
  180. package/dist/{renderer-CL4SAUA5.js → renderer-7AVFPE3Q.js} +5 -5
  181. package/dist/{renderer-52S6JM5R.js → renderer-BA6WTWVL.js} +8 -8
  182. package/dist/{renderer-JNC6VJMN.js → renderer-BLPXBLUP.js} +7 -7
  183. package/dist/{renderer-4VLQKKTV.js → renderer-C7LFE5CB.js} +15 -15
  184. package/dist/{renderer-5CU6GYF2.js → renderer-CUXXNHFU.js} +8 -8
  185. package/dist/{renderer-TOKGYFTG.js → renderer-DRNJJNAE.js} +5 -5
  186. package/dist/{renderer-OZIPP7VF.js → renderer-DVUKHOFB.js} +11 -11
  187. package/dist/{renderer-FRBPMKPP.js → renderer-I7Q5U2TU.js} +6 -6
  188. package/dist/{renderer-SYT4L7GE.js → renderer-JIUVU3PF.js} +3 -3
  189. package/dist/{renderer-J5TL5ZX4.js → renderer-LXIIZ3BH.js} +15 -15
  190. package/dist/{renderer-5G3PORFD.js → renderer-MTX6PLPA.js} +11 -11
  191. package/dist/{renderer-IWNHBIZ6.js → renderer-NKVIQA3C.js} +4 -4
  192. package/dist/{renderer-YWYX6WAI.js → renderer-QGZ2BOJG.js} +4 -4
  193. package/dist/{renderer-O4ECS2BI.js → renderer-SL5IQJKB.js} +10 -10
  194. package/dist/{renderer-3IETIUZB.js → renderer-SL5LE7MU.js} +8 -8
  195. package/dist/{renderer-KUIZNLAQ.js → renderer-SXZBGMEH.js} +5 -5
  196. package/dist/{renderer-J5MMVCGN.js → renderer-UPANX7XK.js} +8 -8
  197. package/dist/{renderer-DZ5N6BHW.js → renderer-VDCGDJ6L.js} +5 -5
  198. package/dist/{renderer-YVCD55ZX.js → renderer-XJFRVCF6.js} +9 -9
  199. package/dist/{renderer-Q3A7572V.js → renderer-XRC5R3OP.js} +5 -5
  200. package/dist/{renderer-2NU7M5PN.js → renderer-Y64MT4JM.js} +7 -7
  201. package/dist/{renderer-CRAIC4ER.js → renderer-ZLJ5CCSO.js} +6 -6
  202. package/dist/{renderer-QRX7Q2YN.js → renderer-ZY5TXTS5.js} +6 -6
  203. package/dist/{renderer-radial-QG644QYY.js → renderer-radial-4YKK4JNW.js} +6 -6
  204. package/dist/{state-parser-NQGVYSM3.js → state-parser-3PFFJO5M.js} +5 -5
  205. package/dist/{state-renderer-NKV5B3KH.js → state-renderer-2HDVRUNG.js} +14 -14
  206. package/dist/{themes-tbBkIVsn.d.ts → themes-l406Vj2z.d.ts} +1 -1
  207. package/docs/language-reference.md +29 -0
  208. package/package.json +5 -1
  209. package/dist/chunk-BMR4CIEO.js +0 -41
  210. package/dist/dgmo-router-GSWUPLP2.js +0 -88
@@ -0,0 +1,232 @@
1
+ // src/utils/svg-embed.ts
2
+ function normalizeSvgForEmbed(input, opts = {}) {
3
+ let svg = input;
4
+ if ((opts.background ?? "transparent") === "transparent") {
5
+ svg = stripRootBackground(svg);
6
+ }
7
+ const rootMatch = svg.match(/<svg[^>]*>/);
8
+ const rootTag = rootMatch?.[0] ?? "";
9
+ if (rootTag && !rootTag.includes("viewBox")) {
10
+ const wh = rootTag.match(/width="(\d+)"[^>]*height="(\d+)"/);
11
+ if (wh) {
12
+ svg = svg.replace(/<svg/, `<svg viewBox="0 0 ${wh[1]} ${wh[2]}"`);
13
+ }
14
+ }
15
+ const tight = computeBBox(svg);
16
+ if (tight && tight.width > 0 && tight.height > 0) {
17
+ const pad = 16;
18
+ const x = tight.x - pad;
19
+ const y = tight.y - pad;
20
+ const w = tight.width + pad * 2;
21
+ const h = tight.height + pad * 2;
22
+ const canvas = readViewBox(svg);
23
+ const TOL = 2;
24
+ const MIN_COVERAGE = 0.5;
25
+ const trustworthy = !canvas || x >= canvas.x - TOL && y >= canvas.y - TOL && x + w <= canvas.x + canvas.width + TOL && y + h <= canvas.y + canvas.height + TOL && w >= canvas.width * MIN_COVERAGE && h >= canvas.height * MIN_COVERAGE;
26
+ if (trustworthy) {
27
+ const vb = `${x} ${y} ${w} ${h}`;
28
+ svg = svg.replace(/(<svg[^>]*?)viewBox="[^"]*"/, `$1viewBox="${vb}"`);
29
+ }
30
+ }
31
+ svg = svg.replace(/(<svg[^>]*?) width="[^"]*"/g, "$1");
32
+ svg = svg.replace(/(<svg[^>]*?) height="[^"]*"/g, "$1");
33
+ svg = svg.replace(/<svg\s{2,}/g, "<svg ");
34
+ return svg;
35
+ }
36
+ var BG_MEANINGFUL_TYPES = /* @__PURE__ */ new Set(["map"]);
37
+ function defaultEmbedBackground(chartType) {
38
+ return chartType && BG_MEANINGFUL_TYPES.has(chartType) ? "opaque" : "transparent";
39
+ }
40
+ function stripRootBackground(svg) {
41
+ const rootMatch = svg.match(/<svg\b[^>]*>/);
42
+ if (!rootMatch) return svg;
43
+ const rootTag = rootMatch[0];
44
+ const styleMatch = rootTag.match(/style="([^"]*)"/);
45
+ const style = styleMatch?.[1] ?? "";
46
+ const bgMatch = style.match(/background:\s*([^;]+)/);
47
+ const bgColor = bgMatch ? normalizeColor(bgMatch[1]) : null;
48
+ const canvas = rootCanvas(rootTag, svg);
49
+ let out = svg;
50
+ if (bgMatch) {
51
+ const cleaned = style.replace(/background:\s*[^;]+;?/i, "").replace(/\s{2,}/g, " ").replace(/;\s*$/, "").trim();
52
+ const newRoot = (cleaned ? rootTag.replace(/style="[^"]*"/, `style="${cleaned}"`) : rootTag.replace(/\s*style="[^"]*"/, "")).replace(/<svg\s{2,}/, "<svg ");
53
+ out = out.replace(rootTag, newRoot);
54
+ }
55
+ if (bgColor && canvas) {
56
+ out = out.replace(
57
+ /<rect\b[^>]*?\/?>(?:\s*<\/rect>)?/g,
58
+ (m) => isFullCanvasFill(m, bgColor, canvas) ? "" : m
59
+ );
60
+ }
61
+ return out;
62
+ }
63
+ function isFullCanvasFill(tag, bgColor, canvas) {
64
+ const fm = tag.match(/\bfill="([^"]*)"/);
65
+ if (!fm || normalizeColor(fm[1]) !== bgColor) return false;
66
+ const w = numAttr(tag, "width");
67
+ const h = numAttr(tag, "height");
68
+ if (w === null || h === null) return false;
69
+ const x = numAttr(tag, "x") ?? 0;
70
+ const y = numAttr(tag, "y") ?? 0;
71
+ const T = 1.5;
72
+ return Math.abs(x) <= T && Math.abs(y) <= T && Math.abs(w - canvas.w) <= T && Math.abs(h - canvas.h) <= T;
73
+ }
74
+ function rootCanvas(rootTag, svg) {
75
+ const wm = rootTag.match(/\bwidth="([\d.]+)"/);
76
+ const hm = rootTag.match(/\bheight="([\d.]+)"/);
77
+ if (wm && hm) return { w: parseFloat(wm[1]), h: parseFloat(hm[1]) };
78
+ const vb = readViewBox(svg);
79
+ return vb ? { w: vb.width, h: vb.height } : null;
80
+ }
81
+ function numAttr(tag, name) {
82
+ const m = tag.match(new RegExp(`\\b${name}="([^"]*)"`));
83
+ if (!m) return null;
84
+ const n = parseFloat(m[1]);
85
+ return Number.isFinite(n) ? n : null;
86
+ }
87
+ function normalizeColor(c) {
88
+ const s = c.trim().toLowerCase();
89
+ const hex6 = s.match(/^#([0-9a-f]{6})$/);
90
+ if (hex6) {
91
+ const n = parseInt(hex6[1], 16);
92
+ return `${n >> 16 & 255},${n >> 8 & 255},${n & 255}`;
93
+ }
94
+ const hex3 = s.match(/^#([0-9a-f]{3})$/);
95
+ if (hex3) {
96
+ const [r, g, b] = hex3[1].split("").map((ch) => parseInt(ch + ch, 16));
97
+ return `${r},${g},${b}`;
98
+ }
99
+ const rgb = s.match(/^rgba?\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/);
100
+ if (rgb) return `${+rgb[1]},${+rgb[2]},${+rgb[3]}`;
101
+ return null;
102
+ }
103
+ function getEmbedSvgViewBox(svg) {
104
+ const tight = computeBBox(svg);
105
+ if (!tight || tight.width <= 0 || tight.height <= 0) return null;
106
+ const pad = 16;
107
+ return {
108
+ x: tight.x - pad,
109
+ y: tight.y - pad,
110
+ width: tight.width + pad * 2,
111
+ height: tight.height + pad * 2
112
+ };
113
+ }
114
+ function readViewBox(svg) {
115
+ const m = svg.match(/<svg[^>]*?\bviewBox="([^"]+)"/);
116
+ if (!m) return null;
117
+ const n = m[1].trim().split(/[\s,]+/).map(Number);
118
+ if (n.length !== 4 || n.some((v) => !Number.isFinite(v)) || n[2] <= 0 || n[3] <= 0)
119
+ return null;
120
+ return { x: n[0], y: n[1], width: n[2], height: n[3] };
121
+ }
122
+ function computeBBox(svg) {
123
+ const xs = [];
124
+ const ys = [];
125
+ function push(x, y) {
126
+ if (Number.isFinite(x) && Number.isFinite(y)) {
127
+ xs.push(x);
128
+ ys.push(y);
129
+ }
130
+ }
131
+ function attr(tag, name) {
132
+ const m = tag.match(new RegExp(`\\b${name}="([^"]*)"`));
133
+ if (!m) return null;
134
+ const n = parseFloat(m[1]);
135
+ return Number.isFinite(n) ? n : null;
136
+ }
137
+ for (const m of svg.matchAll(/<rect\b[^>]*?\/?>/g)) {
138
+ const tag = m[0];
139
+ const x = attr(tag, "x");
140
+ const y = attr(tag, "y");
141
+ const w = attr(tag, "width");
142
+ const h = attr(tag, "height");
143
+ if (x !== null && y !== null && w !== null && h !== null) {
144
+ push(x, y);
145
+ push(x + w, y + h);
146
+ }
147
+ }
148
+ for (const m of svg.matchAll(/<line\b[^>]*?\/?>/g)) {
149
+ const tag = m[0];
150
+ const x1 = attr(tag, "x1");
151
+ const y1 = attr(tag, "y1");
152
+ const x2 = attr(tag, "x2");
153
+ const y2 = attr(tag, "y2");
154
+ if (x1 !== null && y1 !== null && x2 !== null && y2 !== null) {
155
+ push(x1, y1);
156
+ push(x2, y2);
157
+ }
158
+ }
159
+ for (const m of svg.matchAll(/<circle\b[^>]*?\/?>/g)) {
160
+ const tag = m[0];
161
+ const cx = attr(tag, "cx");
162
+ const cy = attr(tag, "cy");
163
+ const r = attr(tag, "r");
164
+ if (cx !== null && cy !== null && r !== null) {
165
+ push(cx - r, cy - r);
166
+ push(cx + r, cy + r);
167
+ }
168
+ }
169
+ for (const m of svg.matchAll(/<ellipse\b[^>]*?\/?>/g)) {
170
+ const tag = m[0];
171
+ const cx = attr(tag, "cx");
172
+ const cy = attr(tag, "cy");
173
+ const rx = attr(tag, "rx");
174
+ const ry = attr(tag, "ry");
175
+ if (cx !== null && cy !== null && rx !== null && ry !== null) {
176
+ push(cx - rx, cy - ry);
177
+ push(cx + rx, cy + ry);
178
+ }
179
+ }
180
+ for (const m of svg.matchAll(/<text\b([^>]*?)>([\s\S]*?)<\/text>/g)) {
181
+ const tag = `<text${m[1]}>`;
182
+ const text = m[2].replace(/<[^>]+>/g, "");
183
+ const x = attr(tag, "x");
184
+ const y = attr(tag, "y");
185
+ if (x !== null && y !== null) {
186
+ const fontSize = attr(tag, "font-size") ?? (() => {
187
+ const s = tag.match(/font-size:\s*([\d.]+)/);
188
+ return s ? parseFloat(s[1]) : 14;
189
+ })();
190
+ const w = text.length * fontSize * 0.5;
191
+ const anchor = tag.match(/\btext-anchor="([^"]*)"/)?.[1] ?? "start";
192
+ const left = anchor === "middle" ? x - w / 2 : anchor === "end" ? x - w : x;
193
+ const right = anchor === "middle" ? x + w / 2 : anchor === "end" ? x : x + w;
194
+ push(left, y - fontSize * 0.9);
195
+ push(right, y + fontSize * 0.25);
196
+ }
197
+ }
198
+ for (const m of svg.matchAll(/<path\b[^>]*?>/g)) {
199
+ const tag = m[0];
200
+ if (tag.includes("data-embed-ignore-bbox")) continue;
201
+ const dm = tag.match(/\bd="([^"]+)"/);
202
+ if (!dm) continue;
203
+ const d = dm[1];
204
+ const nums = d.match(/-?\d+(?:\.\d+)?/g);
205
+ if (!nums) continue;
206
+ for (let i = 0; i + 1 < nums.length; i += 2) {
207
+ push(parseFloat(nums[i]), parseFloat(nums[i + 1]));
208
+ }
209
+ }
210
+ for (const m of svg.matchAll(
211
+ /<(?:polygon|polyline)\b[^>]*?\bpoints="([^"]+)"/g
212
+ )) {
213
+ const nums = m[1].match(/-?\d+(?:\.\d+)?/g);
214
+ if (!nums) continue;
215
+ for (let i = 0; i + 1 < nums.length; i += 2) {
216
+ push(parseFloat(nums[i]), parseFloat(nums[i + 1]));
217
+ }
218
+ }
219
+ if (xs.length === 0 || ys.length === 0) return null;
220
+ const minX = Math.min(...xs);
221
+ const maxX = Math.max(...xs);
222
+ const minY = Math.min(...ys);
223
+ const maxY = Math.max(...ys);
224
+ return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
225
+ }
226
+
227
+ export {
228
+ normalizeSvgForEmbed,
229
+ defaultEmbedBackground,
230
+ getEmbedSvgViewBox
231
+ };
232
+ //# sourceMappingURL=chunk-D3K4U3ZM.js.map
@@ -8,7 +8,7 @@ import {
8
8
  stripDefaultModifier,
9
9
  tagAttrKey,
10
10
  validateTagGroupNames
11
- } from "./chunk-D5FANMSG.js";
11
+ } from "./chunk-3LMUMAUS.js";
12
12
  import {
13
13
  JOURNEY_MAP_REGISTRY,
14
14
  OPTION_NOCOLON_RE,
@@ -19,7 +19,7 @@ import {
19
19
  splitNameAndMeta,
20
20
  warnUnknownMetaKeys,
21
21
  withTagAliases
22
- } from "./chunk-3KOPPSUQ.js";
22
+ } from "./chunk-E7HANW62.js";
23
23
  import {
24
24
  resolveColorWithDiagnostic
25
25
  } from "./chunk-EXNKNJ65.js";
@@ -405,4 +405,4 @@ function parseStepLine(trimmed, lineNumber, counter, aliasMap, warn, diagnostics
405
405
  export {
406
406
  parseJourneyMap
407
407
  };
408
- //# sourceMappingURL=chunk-RQGNELB3.js.map
408
+ //# sourceMappingURL=chunk-DWAQXY6T.js.map
@@ -13,13 +13,17 @@ import {
13
13
  } from "./chunk-CQ7Y3O67.js";
14
14
  import {
15
15
  renderIntegratedLegend
16
- } from "./chunk-QDOYT6UW.js";
16
+ } from "./chunk-N7PF5IRF.js";
17
17
  import {
18
18
  FONT_FAMILY
19
19
  } from "./chunk-6KFWC4CO.js";
20
20
  import {
21
21
  parseTimelineDate
22
- } from "./chunk-4MJOBVY7.js";
22
+ } from "./chunk-KNCY7YHC.js";
23
+ import {
24
+ resolveTagColor,
25
+ tagAttrKey
26
+ } from "./chunk-3LMUMAUS.js";
23
27
  import {
24
28
  LEGEND_CAPSULE_PAD,
25
29
  LEGEND_DOT_R,
@@ -39,10 +43,6 @@ import {
39
43
  shapeFill,
40
44
  themeBaseBg
41
45
  } from "./chunk-42IT4BG2.js";
42
- import {
43
- resolveTagColor,
44
- tagAttrKey
45
- } from "./chunk-D5FANMSG.js";
46
46
 
47
47
  // src/timeline/renderer.ts
48
48
  import * as d3Scale from "d3-scale";
@@ -1670,4 +1670,4 @@ export {
1670
1670
  formatDateLabel,
1671
1671
  renderTimeline
1672
1672
  };
1673
- //# sourceMappingURL=chunk-HIMDUQT7.js.map
1673
+ //# sourceMappingURL=chunk-DWMJLEBT.js.map
@@ -1,9 +1,6 @@
1
1
  import {
2
2
  renderNodeCard
3
3
  } from "./chunk-H3HFC3SQ.js";
4
- import {
5
- renderInlineText
6
- } from "./chunk-3HDBAXF5.js";
7
4
  import {
8
5
  CARD_RADIUS,
9
6
  HEADER_HEIGHT,
@@ -13,16 +10,19 @@ import {
13
10
  } from "./chunk-3CIOJ5YJ.js";
14
11
  import {
15
12
  wrapDescriptionLines
16
- } from "./chunk-BMR4CIEO.js";
13
+ } from "./chunk-NCT22MOD.js";
14
+ import {
15
+ renderInlineText
16
+ } from "./chunk-WGC42WJU.js";
17
17
  import {
18
18
  formatDateLabel
19
- } from "./chunk-HIMDUQT7.js";
19
+ } from "./chunk-DWMJLEBT.js";
20
20
  import {
21
21
  layoutInlineHeader
22
22
  } from "./chunk-6VJCURWU.js";
23
23
  import {
24
24
  renderIntegratedLegend
25
- } from "./chunk-QDOYT6UW.js";
25
+ } from "./chunk-N7PF5IRF.js";
26
26
  import {
27
27
  getLegendExtent
28
28
  } from "./chunk-ES66QH6J.js";
@@ -36,7 +36,11 @@ import {
36
36
  } from "./chunk-6KFWC4CO.js";
37
37
  import {
38
38
  parseTimelineDate
39
- } from "./chunk-4MJOBVY7.js";
39
+ } from "./chunk-KNCY7YHC.js";
40
+ import {
41
+ resolveActiveTagGroup,
42
+ resolveTagColor
43
+ } from "./chunk-3LMUMAUS.js";
40
44
  import {
41
45
  CHAR_WIDTH_RATIO,
42
46
  wrapTextToWidth
@@ -48,10 +52,6 @@ import {
48
52
  shapeFill,
49
53
  themeBaseBg
50
54
  } from "./chunk-42IT4BG2.js";
51
- import {
52
- resolveActiveTagGroup,
53
- resolveTagColor
54
- } from "./chunk-D5FANMSG.js";
55
55
  import {
56
56
  resolveColor
57
57
  } from "./chunk-EXNKNJ65.js";
@@ -1118,15 +1118,7 @@ function axisBreakPaths(cx, cy) {
1118
1118
  return [wave(cx - BREAK_GAP / 2), wave(cx + BREAK_GAP / 2)];
1119
1119
  }
1120
1120
  function wrapDescription(lines, charsPerLine) {
1121
- const out = [];
1122
- for (const line of lines) {
1123
- if (line === "") {
1124
- out.push({ text: "", kind: "plain" });
1125
- continue;
1126
- }
1127
- out.push(...wrapDescriptionLines([line], charsPerLine));
1128
- }
1129
- return out;
1121
+ return wrapDescriptionLines([...lines], charsPerLine);
1130
1122
  }
1131
1123
  function renderBody(cardG, lines, bodyColor, palette, startBaseline = CARD_BODY_TOP + DESC_FONT, bulletColors = [], bulletMeta = []) {
1132
1124
  let y = startBaseline;
@@ -1165,4 +1157,4 @@ export {
1165
1157
  focusEventLine,
1166
1158
  renderEventLineForExport
1167
1159
  };
1168
- //# sourceMappingURL=chunk-YG5KQ55U.js.map
1160
+ //# sourceMappingURL=chunk-DZUDSGGQ.js.map
@@ -0,0 +1,65 @@
1
+ import {
2
+ MONO_FAMILY
3
+ } from "./chunk-EDJYIQZM.js";
4
+ import {
5
+ FONT_FAMILY
6
+ } from "./chunk-6KFWC4CO.js";
7
+ import {
8
+ truncateText
9
+ } from "./chunk-4ASYQ347.js";
10
+
11
+ // src/live-link/renderer.ts
12
+ var W = 560;
13
+ var PAD = 28;
14
+ var CONTENT_X = PAD + 40;
15
+ var CONTENT_W = W - CONTENT_X - PAD;
16
+ var HEADLINE_FS = 18;
17
+ var SUBTITLE_FS = 13;
18
+ var ID_FS = 13;
19
+ var SUBTITLE = "Live link published at Diagrammo Cloud";
20
+ function renderLiveLinkCard(parsed, palette, theme) {
21
+ const isTransparent = theme === "transparent";
22
+ const parts = [];
23
+ let y = PAD + 18;
24
+ parts.push(cloudGlyph(PAD, y - 14, 24, palette.textMuted));
25
+ const headline = parsed.title ?? parsed.id ?? "Unresolved live link";
26
+ const headlineMono = parsed.title === null && parsed.id !== null;
27
+ parts.push(
28
+ `<text x="${CONTENT_X}" y="${y}" fill="${palette.text}" font-family="${headlineMono ? MONO_FAMILY : FONT_FAMILY}" font-size="${HEADLINE_FS}" font-weight="${headlineMono ? 500 : 700}">${escapeXml(truncateText(headline, HEADLINE_FS, CONTENT_W))}</text>`
29
+ );
30
+ y += 30;
31
+ parts.push(
32
+ `<text x="${CONTENT_X}" y="${y}" fill="${palette.textMuted}" font-family="${FONT_FAMILY}" font-size="${SUBTITLE_FS}">${escapeXml(SUBTITLE)}</text>`
33
+ );
34
+ y += 22;
35
+ if (parsed.title !== null && parsed.id !== null) {
36
+ parts.push(
37
+ `<text x="${CONTENT_X}" y="${y}" fill="${palette.textMuted}" font-family="${MONO_FAMILY}" font-size="${ID_FS}">${escapeXml(
38
+ truncateText(parsed.id, ID_FS, CONTENT_W)
39
+ )}</text>`
40
+ );
41
+ y += 22;
42
+ }
43
+ const height = Math.round(y + PAD - 12);
44
+ const pageBg = isTransparent ? "" : `<rect width="100%" height="100%" fill="${palette.bg}"/>`;
45
+ return [
46
+ `<svg xmlns="http://www.w3.org/2000/svg" width="${W}" height="${height}" viewBox="0 0 ${W} ${height}" preserveAspectRatio="xMidYMid meet" font-family="${FONT_FAMILY}">`,
47
+ pageBg,
48
+ `<rect x="0.5" y="0.5" width="${W - 1}" height="${height - 1}" rx="10" fill="${palette.surface}" stroke="${palette.border}" stroke-width="1"/>`,
49
+ parts.join(""),
50
+ `</svg>`
51
+ ].join("");
52
+ }
53
+ function cloudGlyph(x, y, size, color) {
54
+ const s = size / 24;
55
+ const d = "M6.5 19a4.5 4.5 0 0 1-.6-8.96A6 6 0 0 1 17.6 8.7 4.15 4.15 0 0 1 17.5 19Z";
56
+ return `<path transform="translate(${x},${y}) scale(${s})" d="${d}" fill="none" stroke="${color}" stroke-width="1.6" stroke-linejoin="round"/>`;
57
+ }
58
+ function escapeXml(s) {
59
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
60
+ }
61
+
62
+ export {
63
+ renderLiveLinkCard
64
+ };
65
+ //# sourceMappingURL=chunk-E55OZDFH.js.map
@@ -1,9 +1,9 @@
1
- import {
2
- renderInlineText
3
- } from "./chunk-3HDBAXF5.js";
4
1
  import {
5
2
  wrapDescriptionLines
6
- } from "./chunk-BMR4CIEO.js";
3
+ } from "./chunk-NCT22MOD.js";
4
+ import {
5
+ renderInlineText
6
+ } from "./chunk-WGC42WJU.js";
7
7
  import {
8
8
  ScaleContext
9
9
  } from "./chunk-YYVTBZZC.js";
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-6VJCURWU.js";
13
13
  import {
14
14
  renderIntegratedLegend
15
- } from "./chunk-QDOYT6UW.js";
15
+ } from "./chunk-N7PF5IRF.js";
16
16
  import {
17
17
  getLegendExtent,
18
18
  getMaxLegendReservedHeight
@@ -25,30 +25,30 @@ import {
25
25
  import {
26
26
  FONT_FAMILY
27
27
  } from "./chunk-6KFWC4CO.js";
28
- import {
29
- measureText,
30
- truncateText
31
- } from "./chunk-4ASYQ347.js";
32
- import {
33
- contrastText,
34
- mix,
35
- shapeFill,
36
- themeBaseBg
37
- } from "./chunk-42IT4BG2.js";
38
28
  import {
39
29
  isSequenceBlock,
40
30
  isSequenceNote,
41
31
  isSequenceSection
42
- } from "./chunk-FERE46TP.js";
32
+ } from "./chunk-2UBTPFIF.js";
43
33
  import {
44
34
  resolveActiveTagGroup,
45
35
  tagAttrKey
46
- } from "./chunk-D5FANMSG.js";
36
+ } from "./chunk-3LMUMAUS.js";
47
37
  import {
48
38
  fillModeFromOptions,
49
39
  legendInlineRequested,
50
40
  legendSuppressed
51
- } from "./chunk-3KOPPSUQ.js";
41
+ } from "./chunk-E7HANW62.js";
42
+ import {
43
+ measureText,
44
+ truncateText
45
+ } from "./chunk-4ASYQ347.js";
46
+ import {
47
+ contrastText,
48
+ mix,
49
+ shapeFill,
50
+ themeBaseBg
51
+ } from "./chunk-42IT4BG2.js";
52
52
 
53
53
  // src/sequence/renderer.ts
54
54
  import * as d3Selection from "d3-selection";
@@ -1907,4 +1907,4 @@ export {
1907
1907
  renderSequenceDiagram,
1908
1908
  buildNoteMessageMap
1909
1909
  };
1910
- //# sourceMappingURL=chunk-P6XFQVYY.js.map
1910
+ //# sourceMappingURL=chunk-E6CCWMTT.js.map
@@ -375,7 +375,14 @@ var DIRECTIVES_REGISTRY = [
375
375
  { token: "no-rounds", category: "modifier" },
376
376
  { token: "single-elim", category: "modifier" },
377
377
  { token: "double-elim", category: "modifier" },
378
- { token: "seeded", category: "modifier" }
378
+ { token: "seeded", category: "modifier" },
379
+ // ── Live link (§38) ──────────────────────────────────────
380
+ // The pointer type's one directive. Registered so it highlights and
381
+ // autocompletes like `palette` does — §38 justifies the shape by calling it
382
+ // "the ordinary DGMO directive shape", and an unregistered `url` would make
383
+ // that sentence false in the editor: `editor/tokens.ts` specializes only
384
+ // against the keyword registries, so it would render as plain identifier text.
385
+ { token: "url", category: "directive" }
379
386
  ];
380
387
  function tokensWhere(pred) {
381
388
  const out = /* @__PURE__ */ new Set();
@@ -636,7 +643,9 @@ var ALL_CHART_TYPES = /* @__PURE__ */ new Set([
636
643
  "raci",
637
644
  "map",
638
645
  "family",
639
- "bracket"
646
+ "bracket",
647
+ // pointer, not a drawing — internal (see ChartTypeMeta.internal)
648
+ "live-link"
640
649
  ]);
641
650
  function measureIndent(line) {
642
651
  let indent = 0;
@@ -1169,4 +1178,4 @@ export {
1169
1178
  splitNameAndMeta,
1170
1179
  warnUnknownMetaKeys
1171
1180
  };
1172
- //# sourceMappingURL=chunk-3KOPPSUQ.js.map
1181
+ //# sourceMappingURL=chunk-E7HANW62.js.map