@diagrammo/dgmo 0.53.0 → 0.55.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 (212) hide show
  1. package/dist/advanced.d.ts +112 -9
  2. package/dist/advanced.js +188 -160
  3. package/dist/auto.js +147 -132
  4. package/dist/auto.mjs +2352 -746
  5. package/dist/block.js +65 -62
  6. package/dist/chart-meta.js +52 -49
  7. package/dist/{charts-d3-DH2XA45I.js → charts-d3-KZ6V4OP2.js} +10 -8
  8. package/dist/chunk-2CW5ZTNH.js +58 -0
  9. package/dist/{chunk-MA3HJZHB.js → chunk-2HX6ZGY7.js} +7 -7
  10. package/dist/{chunk-YG2BEIQU.js → chunk-2R6HG6D5.js} +11 -11
  11. package/dist/{chunk-65V6IRFN.js → chunk-2ZJXKJSI.js} +106 -60
  12. package/dist/{chunk-PYO4TJJ3.js → chunk-32HUNA33.js} +60 -18
  13. package/dist/{chunk-UK6DKJLD.js → chunk-3BFXELBL.js} +51 -4
  14. package/dist/{chunk-RW5PEJ7D.js → chunk-3BZJ5KD5.js} +7 -3
  15. package/dist/{chunk-FT7TPPZ5.js → chunk-3FUTFYSP.js} +65 -26
  16. package/dist/{chunk-QAALSCKI.js → chunk-4MZCJV4M.js} +12 -12
  17. package/dist/{chunk-ZXUAPTCK.js → chunk-4R5KIPNX.js} +2 -2
  18. package/dist/{chunk-QWIBT6DS.js → chunk-5D5VHDJM.js} +49 -14
  19. package/dist/{chunk-U7NKYLX2.js → chunk-5H5GWWA4.js} +55 -19
  20. package/dist/{chunk-P3H7QVDH.js → chunk-5K5XBEXT.js} +11 -6
  21. package/dist/{chunk-PT4SW76W.js → chunk-6NJWBMJV.js} +49 -14
  22. package/dist/{chunk-I46X5VUA.js → chunk-7TF3QOOD.js} +25 -1
  23. package/dist/{chunk-6DCOIN4W.js → chunk-A2ARDILY.js} +783 -3
  24. package/dist/{chunk-CK2GMDXD.js → chunk-A2PTRSAO.js} +2 -2
  25. package/dist/{chunk-APKUAJ2L.js → chunk-A2RUBBVT.js} +14 -1
  26. package/dist/{chunk-GMIJ35PW.js → chunk-A4UJP4IS.js} +68 -20
  27. package/dist/{chunk-LQHVDZYC.js → chunk-AKE6C2D7.js} +4 -4
  28. package/dist/{chunk-W5KMNC5U.js → chunk-ASPS5O6F.js} +9 -10
  29. package/dist/{chunk-FLDC7ZAK.js → chunk-AU75JHSR.js} +6 -3
  30. package/dist/chunk-BEOAKGNA.js +484 -0
  31. package/dist/{chunk-XY3UDKKH.js → chunk-COVYNAKJ.js} +4 -4
  32. package/dist/{chunk-4ASVFYB2.js → chunk-DS4MDEQ7.js} +5 -5
  33. package/dist/{chunk-7JDTNFAK.js → chunk-EFUQENO5.js} +76 -32
  34. package/dist/{chunk-BULHGPHK.js → chunk-EMSOFHEN.js} +2 -2
  35. package/dist/{chunk-3BEKKRH5.js → chunk-ETTDF3S2.js} +49 -11
  36. package/dist/{chunk-JHOAH4TI.js → chunk-ETYF5QZR.js} +2 -2
  37. package/dist/{chunk-AHXIMHDQ.js → chunk-F5ZNUMSY.js} +53 -14
  38. package/dist/{chunk-I64ECJX3.js → chunk-FBP33UM6.js} +3 -3
  39. package/dist/{chunk-VIRANCNY.js → chunk-FGAMFJNJ.js} +58 -20
  40. package/dist/{chunk-774C2FF3.js → chunk-GRXPFBYC.js} +24 -3
  41. package/dist/{chunk-NNYFQOTK.js → chunk-GTO5VCYG.js} +10 -8
  42. package/dist/{chunk-RJ5LBZ5U.js → chunk-HES4K6DV.js} +13 -13
  43. package/dist/{chunk-AZNXGWDC.js → chunk-HGKOVKAX.js} +7 -7
  44. package/dist/{chunk-DWUMPMV2.js → chunk-HLGOG44K.js} +2 -2
  45. package/dist/{chunk-VJHBSPGF.js → chunk-HUTP35XT.js} +5 -4
  46. package/dist/{chunk-3CZLWOCI.js → chunk-HX7QNHC6.js} +3 -3
  47. package/dist/{chunk-R5NH5BZG.js → chunk-IALX52TR.js} +6 -6
  48. package/dist/{chunk-A44USUV7.js → chunk-ICZ7M6IZ.js} +23 -17
  49. package/dist/{chunk-27STWBOK.js → chunk-IF4KYSJZ.js} +10 -8
  50. package/dist/{chunk-HORZ5H2L.js → chunk-IG6J7JWH.js} +61 -22
  51. package/dist/{chunk-VRRDUYOK.js → chunk-IIUYKQ5J.js} +3 -3
  52. package/dist/{chunk-GMAH572Z.js → chunk-INTAQV2Y.js} +2 -2
  53. package/dist/{chunk-6AUZPPAV.js → chunk-ITXL2KU5.js} +2 -2
  54. package/dist/{chunk-KKHCNSKK.js → chunk-IWG2ECAO.js} +5 -5
  55. package/dist/{chunk-GQ644SPD.js → chunk-JGCEFKZP.js} +14 -14
  56. package/dist/{chunk-HNBY6CNV.js → chunk-JQLSFZZP.js} +2 -2
  57. package/dist/{chunk-CMVZWP32.js → chunk-JR7Q6GHE.js} +2 -2
  58. package/dist/{chunk-LHILKFDP.js → chunk-KC3WBBI7.js} +9 -9
  59. package/dist/{chunk-GABSL6TH.js → chunk-KK3L5NVK.js} +3 -3
  60. package/dist/{chunk-LC3FFD43.js → chunk-L2DIXZUT.js} +98 -48
  61. package/dist/{chunk-4WGMGKCZ.js → chunk-LCRPGGGS.js} +11 -11
  62. package/dist/{chunk-6KY7OCZC.js → chunk-LKGQ46P4.js} +3 -3
  63. package/dist/{chunk-HE5J53SZ.js → chunk-LW7STMYZ.js} +3 -3
  64. package/dist/{chunk-BD3WGY4T.js → chunk-M53MDBIW.js} +2 -2
  65. package/dist/{chunk-AN2DQB3G.js → chunk-MEH4TJEX.js} +12 -12
  66. package/dist/{chunk-SGPFVDUL.js → chunk-MNS2ENXF.js} +6 -6
  67. package/dist/{chunk-FXCB7H5O.js → chunk-MSWIBF6J.js} +2 -2
  68. package/dist/{chunk-BR7AYN76.js → chunk-NL7FUIVD.js} +12 -12
  69. package/dist/{chunk-AIMLCDAO.js → chunk-NN5TF4OV.js} +2 -2
  70. package/dist/{chunk-7GUF6SDR.js → chunk-NPPUZ4SK.js} +9 -9
  71. package/dist/{chunk-4K42RUGC.js → chunk-NYOOPQFD.js} +47 -12
  72. package/dist/{chunk-FFXCKZOU.js → chunk-O4CZDTQA.js} +3 -3
  73. package/dist/{chunk-6HTRCTAS.js → chunk-P5XXIVEU.js} +6 -4
  74. package/dist/{chunk-XEAQDIMF.js → chunk-PC4YLEKA.js} +6 -6
  75. package/dist/{chunk-Q7AH665U.js → chunk-PCVXXPYU.js} +121 -38
  76. package/dist/{chunk-W2DINCHL.js → chunk-PKUWYPI5.js} +207 -24
  77. package/dist/{chunk-PV2QO7QL.js → chunk-PSIDVCBA.js} +2 -2
  78. package/dist/{chunk-YR43LJT5.js → chunk-PV7ND5WL.js} +58 -15
  79. package/dist/{chunk-QI3BOLQB.js → chunk-Q5CMQVWF.js} +4 -4
  80. package/dist/{chunk-4RGZFA7H.js → chunk-Q5IHQ4NW.js} +11 -1
  81. package/dist/{chunk-SG4PRYO3.js → chunk-QQXFYTLC.js} +391 -60
  82. package/dist/{chunk-GWQJKTFS.js → chunk-QZYGRDMM.js} +118 -99
  83. package/dist/{chunk-CQFNIIQN.js → chunk-RKBCKCSF.js} +2 -2
  84. package/dist/{chunk-FUKNRLIJ.js → chunk-RSBH2C7O.js} +6 -6
  85. package/dist/{chunk-2QC4HXCY.js → chunk-RYNCWA5X.js} +11 -10
  86. package/dist/{chunk-NNUMX6WX.js → chunk-RZWIPDZ2.js} +40 -15
  87. package/dist/{chunk-VKNCC2GX.js → chunk-S52F62GW.js} +13 -13
  88. package/dist/{chunk-UQRIKAMH.js → chunk-SCOHNGPG.js} +59 -18
  89. package/dist/{chunk-VGNIDAPQ.js → chunk-SSHS42QG.js} +4 -4
  90. package/dist/chunk-TGOMHUOV.js +218 -0
  91. package/dist/{chunk-UKP5HWB5.js → chunk-UBQU2BY6.js} +4 -4
  92. package/dist/{chunk-IQJCVREL.js → chunk-UES4P7FN.js} +6 -6
  93. package/dist/chunk-US3P2DQO.js +87 -0
  94. package/dist/{chunk-GAWKIIPO.js → chunk-UXXLE6AH.js} +8 -8
  95. package/dist/{chunk-22OQWBWD.js → chunk-VMWSZCAK.js} +12 -11
  96. package/dist/{chunk-XG4NWFPY.js → chunk-VVIRAGID.js} +13 -13
  97. package/dist/{chunk-X3RXGSCZ.js → chunk-VXTUWXFB.js} +54 -15
  98. package/dist/{chunk-J7HI6G3G.js → chunk-W4TSD3IP.js} +6 -6
  99. package/dist/{chunk-FGDSTT3F.js → chunk-WB3NA3JJ.js} +2 -2
  100. package/dist/{chunk-KUSAVOWZ.js → chunk-WITOJZGL.js} +8 -4
  101. package/dist/{chunk-UVDCHR4E.js → chunk-WVGNXDEE.js} +2 -2
  102. package/dist/{chunk-HOXKNRON.js → chunk-X3X4LZDC.js} +2 -2
  103. package/dist/{chunk-SQCBSFT5.js → chunk-XKKH2DPG.js} +51 -263
  104. package/dist/{chunk-NR5HCAUD.js → chunk-XSVWUOUZ.js} +1 -1
  105. package/dist/{chunk-BFDVEO5R.js → chunk-Y4BBGFKY.js} +2 -2
  106. package/dist/{chunk-VAO6ANGC.js → chunk-YP2T5YUP.js} +14 -9
  107. package/dist/{chunk-PKNNHU7H.js → chunk-YXKNXIWA.js} +19 -11
  108. package/dist/{chunk-UFQJMOVZ.js → chunk-ZGIBV36U.js} +6 -6
  109. package/dist/{chunk-XQ4KN6JQ.js → chunk-ZP265ICS.js} +16 -15
  110. package/dist/{chunk-JTMSWEIW.js → chunk-ZWVKTWK6.js} +4 -4
  111. package/dist/{chunk-ALYZ3MAA.js → chunk-ZXNHHO6D.js} +8 -476
  112. package/dist/cli.cjs +166 -149
  113. package/dist/clock.js +34 -1
  114. package/dist/completion-registry.d.ts +129 -0
  115. package/dist/completion-registry.js +1278 -0
  116. package/dist/{compute-G55RG53N.js → compute-JAP5E2E4.js} +2 -2
  117. package/dist/dgmo-router-T4HGLIGA.js +88 -0
  118. package/dist/{dimensions-K6PGYYGT.js → dimensions-3JINHSYK.js} +8 -8
  119. package/dist/editor.js +28 -1
  120. package/dist/element.js +148 -133
  121. package/dist/element.mjs +2352 -746
  122. package/dist/{flowchart-parser-LALR6J6F.js → flowchart-parser-M7KKTLX7.js} +5 -5
  123. package/dist/{flowchart-renderer-DXYB5YRF.js → flowchart-renderer-FFEQFQEU.js} +9 -9
  124. package/dist/highlight.js +28 -1
  125. package/dist/index.js +77 -64
  126. package/dist/{layout-ZE5DRJWX.js → layout-3ZZBKUQC.js} +4 -4
  127. package/dist/{layout-3BVDMKXI.js → layout-AUKTWGYL.js} +4 -4
  128. package/dist/{layout-4IHCMWZN.js → layout-CRLTSFYQ.js} +4 -4
  129. package/dist/{layout-WCAIKGZG.js → layout-FNZDJGKF.js} +5 -5
  130. package/dist/layout-GHWRJKZQ.js +15 -0
  131. package/dist/{layout-3V2A4MUE.js → layout-LGXOKUCD.js} +6 -5
  132. package/dist/{layout-WSMPBQ4Q.js → layout-NF4EWFLT.js} +3 -3
  133. package/dist/{layout-OL2XFJXA.js → layout-SP7HJWKA.js} +3 -3
  134. package/dist/{layout-E6HR6PXH.js → layout-UR7CYAHL.js} +3 -3
  135. package/dist/layout-UTMEVFHN.js +15 -0
  136. package/dist/{layout-search-34DPZD43.js → layout-search-U2H4ORFJ.js} +14 -7
  137. package/dist/{legend-constants-P5EQWRQQ.js → legend-constants-B77VKB3R.js} +7 -2
  138. package/dist/{parser-6PPHAXXH.js → parser-2AXPSKWB.js} +5 -5
  139. package/dist/{parser-5HQXCNOS.js → parser-2AZ2KQTO.js} +4 -4
  140. package/dist/{parser-3KIGEEJM.js → parser-2LF33IS2.js} +4 -4
  141. package/dist/{parser-NNIL3HXU.js → parser-3QJ2Z4H4.js} +3 -3
  142. package/dist/parser-5GCQFSTQ.js +13 -0
  143. package/dist/{parser-6B6SSZT7.js → parser-62OHBRU5.js} +3 -3
  144. package/dist/{parser-VOERD6XR.js → parser-7LYJFZCP.js} +4 -4
  145. package/dist/{parser-ZGNXYFPS.js → parser-BMOTF72G.js} +3 -3
  146. package/dist/{parser-IVGHXLZP.js → parser-CIFLYZYP.js} +4 -3
  147. package/dist/{parser-GN2MM5CC.js → parser-D2UL2G5U.js} +3 -3
  148. package/dist/{parser-GKP2MHHL.js → parser-DM2APTKB.js} +3 -3
  149. package/dist/{parser-27Z76SN3.js → parser-DYYTPLBL.js} +4 -4
  150. package/dist/{parser-5FGJSQNS.js → parser-GOUGUTPU.js} +4 -4
  151. package/dist/{parser-G26MTBFS.js → parser-HGVUVD6J.js} +3 -3
  152. package/dist/{parser-EXNBDNGY.js → parser-IEJD3CZB.js} +3 -3
  153. package/dist/{parser-ZQDQTB4X.js → parser-JBEWNLAV.js} +5 -5
  154. package/dist/{parser-5QPFOB5F.js → parser-JMXPHNZD.js} +4 -4
  155. package/dist/{parser-4E4I3GNT.js → parser-JMXSQY3K.js} +4 -4
  156. package/dist/{parser-FF4BMRSB.js → parser-LUXS7J32.js} +4 -4
  157. package/dist/{parser-3VSWEKBF.js → parser-M5BUHULF.js} +4 -4
  158. package/dist/{parser-IKWK2ZU3.js → parser-MESRHUS4.js} +4 -5
  159. package/dist/{parser-3CODK6RG.js → parser-OOYNI2UT.js} +4 -4
  160. package/dist/{parser-YSLNDFLV.js → parser-PVBUAVRR.js} +4 -5
  161. package/dist/{parser-CKA3QMAG.js → parser-QKRBSQLJ.js} +5 -5
  162. package/dist/{parser-UWRX52PC.js → parser-S6NWSIJO.js} +4 -4
  163. package/dist/{parser-RNLTBIJ6.js → parser-SFEK6Q7Z.js} +4 -4
  164. package/dist/{parser-7JVIDLLR.js → parser-SUV52NQW.js} +4 -4
  165. package/dist/{parser-CRKLXGW7.js → parser-SZHGLOOZ.js} +4 -4
  166. package/dist/{parser-275KP7JO.js → parser-TO7IENWL.js} +5 -6
  167. package/dist/{parser-XNKJCMMA.js → parser-TVAMC7CQ.js} +4 -4
  168. package/dist/{parser-FOOFEJQU.js → parser-VAW46R57.js} +4 -4
  169. package/dist/{parser-XVPTRWZ4.js → parser-XDSPOXSE.js} +4 -4
  170. package/dist/pert.d.ts +2 -0
  171. package/dist/{renderer-D3BRNOMV.js → renderer-3PWLOJPD.js} +11 -11
  172. package/dist/{renderer-7NQSTQMQ.js → renderer-5EMHIQL5.js} +4 -4
  173. package/dist/{renderer-ZBTEX2JK.js → renderer-5PODNLYP.js} +4 -4
  174. package/dist/{renderer-6WRYVM5R.js → renderer-AQJIQ2XU.js} +9 -8
  175. package/dist/{renderer-JCZG6AYU.js → renderer-BEW3AYFT.js} +10 -10
  176. package/dist/{renderer-YUKPS27O.js → renderer-C3UYAXA6.js} +10 -8
  177. package/dist/{renderer-AK2WO4EI.js → renderer-CENXCMWG.js} +4 -4
  178. package/dist/{renderer-HIFQVEJA.js → renderer-CXM3ARYN.js} +10 -9
  179. package/dist/{renderer-JTCX6PCG.js → renderer-DW6TEBLA.js} +10 -9
  180. package/dist/{renderer-VMH6L6CP.js → renderer-FE5M6SEZ.js} +10 -9
  181. package/dist/{renderer-TYHGXAVT.js → renderer-FXK6ZL3P.js} +4 -4
  182. package/dist/{renderer-UPF7NRTI.js → renderer-G5ESLCJB.js} +12 -11
  183. package/dist/{renderer-CWEFGEIC.js → renderer-HTDS4FED.js} +14 -13
  184. package/dist/{renderer-XTXSOK3L.js → renderer-IO4KCFVL.js} +10 -10
  185. package/dist/{renderer-SQ54MDSA.js → renderer-IRAFJNTK.js} +10 -9
  186. package/dist/{renderer-JWGQSTMR.js → renderer-MFTTFW32.js} +15 -14
  187. package/dist/{renderer-2C6DJRYN.js → renderer-MPXI4FVL.js} +8 -8
  188. package/dist/{renderer-5MPN7CXZ.js → renderer-NVBEMQ6L.js} +5 -5
  189. package/dist/{renderer-7ZNVOVFG.js → renderer-OOGDCR6K.js} +3 -3
  190. package/dist/{renderer-COLQFSFV.js → renderer-Q5P72O4A.js} +9 -9
  191. package/dist/{renderer-WCWI4I6A.js → renderer-QZESC66H.js} +2 -2
  192. package/dist/{renderer-NE5W7CQP.js → renderer-RDBUXW7P.js} +6 -5
  193. package/dist/{renderer-6EN5XXJZ.js → renderer-S4XB3JR2.js} +11 -11
  194. package/dist/{renderer-WFSUBKUL.js → renderer-SIWEEWJ5.js} +9 -8
  195. package/dist/{renderer-LVZAHRP6.js → renderer-TKTM2SL4.js} +12 -12
  196. package/dist/{renderer-QD2SJF2I.js → renderer-TXTTV4HA.js} +10 -9
  197. package/dist/{renderer-YUXGXGSW.js → renderer-UZIU4AHK.js} +10 -9
  198. package/dist/{renderer-RLMOTXZ6.js → renderer-V72VJIGG.js} +14 -13
  199. package/dist/{renderer-UKXW2QPE.js → renderer-VEGOEZOI.js} +10 -8
  200. package/dist/{renderer-WNFXYYGL.js → renderer-W6I6T2TA.js} +8 -8
  201. package/dist/{renderer-KARQF3F3.js → renderer-WSHJRR2T.js} +8 -8
  202. package/dist/{renderer-radial-WF6VOUOD.js → renderer-radial-AG75PBYD.js} +9 -9
  203. package/dist/{resolver-WFKZYBJ2.js → resolver-ZSFQQRTH.js} +3 -3
  204. package/dist/{state-parser-L7DHZIQO.js → state-parser-KIPZGIB4.js} +5 -5
  205. package/dist/{state-renderer-TFEUOP4H.js → state-renderer-U6OSJG52.js} +13 -12
  206. package/docs/language-reference.md +2 -1
  207. package/package.json +5 -1
  208. package/dist/chunk-YJVA3QUU.js +0 -734
  209. package/dist/dgmo-router-B4S23EBH.js +0 -86
  210. package/dist/layout-3M5UYJHY.js +0 -14
  211. package/dist/layout-KPQWJNAG.js +0 -14
  212. package/dist/parser-7JHWEWXM.js +0 -13
@@ -7,12 +7,16 @@ import {
7
7
  import {
8
8
  ScaleContext
9
9
  } from "./chunk-YYVTBZZC.js";
10
+ import {
11
+ layoutInlineHeader
12
+ } from "./chunk-US3P2DQO.js";
10
13
  import {
11
14
  renderIntegratedLegend
12
- } from "./chunk-W5KMNC5U.js";
15
+ } from "./chunk-ASPS5O6F.js";
13
16
  import {
17
+ getLegendExtent,
14
18
  getMaxLegendReservedHeight
15
- } from "./chunk-774C2FF3.js";
19
+ } from "./chunk-GRXPFBYC.js";
16
20
  import {
17
21
  TITLE_FONT_SIZE,
18
22
  TITLE_FONT_WEIGHT,
@@ -21,29 +25,30 @@ import {
21
25
  import {
22
26
  FONT_FAMILY
23
27
  } from "./chunk-6KFWC4CO.js";
28
+ import {
29
+ measureText,
30
+ truncateText
31
+ } from "./chunk-4ASYQ347.js";
24
32
  import {
25
33
  contrastText,
26
34
  mix,
27
35
  shapeFill,
28
36
  themeBaseBg
29
37
  } from "./chunk-JYDMBWRP.js";
30
- import {
31
- measureText,
32
- truncateText
33
- } from "./chunk-4ASYQ347.js";
34
38
  import {
35
39
  isSequenceBlock,
36
40
  isSequenceNote,
37
41
  isSequenceSection
38
- } from "./chunk-22OQWBWD.js";
42
+ } from "./chunk-VMWSZCAK.js";
39
43
  import {
40
44
  resolveActiveTagGroup,
41
45
  tagAttrKey
42
- } from "./chunk-CMVZWP32.js";
46
+ } from "./chunk-JR7Q6GHE.js";
43
47
  import {
44
48
  fillModeFromOptions,
49
+ legendInlineRequested,
45
50
  legendSuppressed
46
- } from "./chunk-YJVA3QUU.js";
51
+ } from "./chunk-A2ARDILY.js";
47
52
 
48
53
  // src/sequence/renderer.ts
49
54
  import * as d3Selection from "d3-selection";
@@ -537,7 +542,6 @@ function applyPositionOverrides(participants) {
537
542
  return result;
538
543
  }
539
544
  function applyGroupOrdering(participants, groups, messages = []) {
540
- if (groups.length === 0) return [...participants];
541
545
  const idToGroup = /* @__PURE__ */ new Map();
542
546
  for (const group of groups) {
543
547
  for (const id of group.participantIds) {
@@ -1005,8 +1009,33 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1005
1009
  };
1006
1010
  const noLegend = legendSuppressed(parsedOptions);
1007
1011
  const legendTopSpace = parsed.tagGroups.length > 0 && !noLegend ? getMaxLegendReservedHeight(legendConfig, containerWidth) + LEGEND_FIXED_GAP : 0;
1012
+ const inlineRequested = legendInlineRequested(parsedOptions);
1013
+ const hasLegendForHeader = parsed.tagGroups.length > 0 && !noLegend;
1014
+ const legendExtent = inlineRequested && hasLegendForHeader ? getLegendExtent(
1015
+ {
1016
+ ...legendConfig,
1017
+ position: {
1018
+ placement: "top-center",
1019
+ titleRelation: "inline-with-title"
1020
+ }
1021
+ },
1022
+ { activeGroup: activeTagGroup ?? null },
1023
+ containerWidth
1024
+ ) : { width: 0, height: 0 };
1025
+ const header = layoutInlineHeader({
1026
+ requested: inlineRequested,
1027
+ title: title ?? "",
1028
+ hasLegend: hasLegendForHeader,
1029
+ legendWidth: legendExtent.width,
1030
+ legendHeight: legendExtent.height,
1031
+ containerWidth,
1032
+ titleBandHeight: titleOffset,
1033
+ legendReserve: legendTopSpace,
1034
+ titleBaselineY: ctx.structural(TITLE_Y),
1035
+ titleFontSize: ctx.text(TITLE_FONT_SIZE)
1036
+ });
1008
1037
  const groupOffset = parsed.groups.length > 0 ? GROUP_PADDING_TOP + GROUP_LABEL_SIZE : 0;
1009
- const participantStartY = sTopMargin + titleOffset + legendTopSpace + sParticipantYOffset + groupOffset;
1038
+ const participantStartY = sTopMargin + titleOffset + (header.inline ? 0 : legendTopSpace) + sParticipantYOffset + groupOffset;
1010
1039
  const lifelineStartY0 = participantStartY + sBoxH;
1011
1040
  const hasActors = participants.some((p) => p.type === "actor");
1012
1041
  const messageStartOffset = sMsgStartOffset + (hasActors ? 20 : 0) + (parsed.groups.length > 0 ? GROUP_PADDING_BOTTOM : 0);
@@ -1171,56 +1200,63 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1171
1200
  });
1172
1201
  };
1173
1202
  buildParticipantX();
1174
- let contentLeft = 0;
1175
- let contentRight = svgWidth;
1176
- for (const step of renderSteps) {
1177
- if (!step.label) continue;
1178
- const labelW = measureText(step.label, 12);
1179
- if (step.from === step.to) {
1180
- const px = participantX.get(step.from);
1181
- if (px !== void 0) {
1182
- const loopRight = px + sActivationWidth / 2 + sSelfCallWidth + 5 + labelW;
1183
- contentRight = Math.max(contentRight, loopRight);
1184
- }
1185
- } else {
1186
- const fromX = participantX.get(step.from);
1187
- const toX = participantX.get(step.to);
1188
- if (fromX !== void 0 && toX !== void 0) {
1189
- const midX = (fromX + toX) / 2;
1190
- contentLeft = Math.min(contentLeft, midX - labelW / 2);
1191
- contentRight = Math.max(contentRight, midX + labelW / 2);
1203
+ const labelSafety = sActivationWidth / 2 + 2;
1204
+ const scanNotes = (els, acc) => {
1205
+ for (const el of els) {
1206
+ if (isSequenceNote(el)) {
1207
+ const note = el;
1208
+ const pos = effectiveNotePosition(note);
1209
+ if (pos === "right") {
1210
+ const px = participantX.get(note.participantId);
1211
+ if (px !== void 0) {
1212
+ const sc = isNoteAfterSelfCall(note);
1213
+ const rOff = sc ? sActivationWidth / 2 + sSelfCallWidth + sNoteGap : sActivationWidth + sNoteGap;
1214
+ const maxW = noteEffectiveMaxW(note.participantId, pos, sc);
1215
+ acc.right = Math.max(acc.right, px + rOff + maxW);
1216
+ }
1217
+ }
1218
+ } else if (isSequenceBlock(el)) {
1219
+ scanNotes(el.children, acc);
1220
+ scanNotes(el.elseChildren, acc);
1221
+ if (el.elseIfBranches) {
1222
+ for (const b of el.elseIfBranches) scanNotes(b.children, acc);
1223
+ }
1192
1224
  }
1193
1225
  }
1194
- }
1195
- if (elements) {
1196
- const scanNotes = (els) => {
1197
- for (const el of els) {
1198
- if (isSequenceNote(el)) {
1199
- const note = el;
1200
- const pos = effectiveNotePosition(note);
1201
- if (pos === "right") {
1202
- const px = participantX.get(note.participantId);
1203
- if (px !== void 0) {
1204
- const sc = isNoteAfterSelfCall(note);
1205
- const rOff = sc ? sActivationWidth / 2 + sSelfCallWidth + sNoteGap : sActivationWidth + sNoteGap;
1206
- const maxW = noteEffectiveMaxW(note.participantId, pos, sc);
1207
- contentRight = Math.max(contentRight, px + rOff + maxW);
1208
- }
1209
- }
1210
- } else if (isSequenceBlock(el)) {
1211
- scanNotes(el.children);
1212
- scanNotes(el.elseChildren);
1213
- if (el.elseIfBranches) {
1214
- for (const b of el.elseIfBranches) scanNotes(b.children);
1215
- }
1226
+ };
1227
+ for (let pass = 0; pass < 4; pass++) {
1228
+ let contentLeft = 0;
1229
+ let contentRight = svgWidth;
1230
+ for (const step of renderSteps) {
1231
+ if (!step.label) continue;
1232
+ const labelW = measureText(step.label, 12);
1233
+ if (step.from === step.to) {
1234
+ const px = participantX.get(step.from);
1235
+ if (px !== void 0) {
1236
+ const loopRight = px + sActivationWidth / 2 + sSelfCallWidth + 5 + labelW + labelSafety;
1237
+ contentRight = Math.max(contentRight, loopRight);
1238
+ }
1239
+ } else {
1240
+ const fromX = participantX.get(step.from);
1241
+ const toX = participantX.get(step.to);
1242
+ if (fromX !== void 0 && toX !== void 0) {
1243
+ const midX = (fromX + toX) / 2;
1244
+ contentLeft = Math.min(contentLeft, midX - labelW / 2 - labelSafety);
1245
+ contentRight = Math.max(
1246
+ contentRight,
1247
+ midX + labelW / 2 + labelSafety
1248
+ );
1216
1249
  }
1217
1250
  }
1218
- };
1219
- scanNotes(elements);
1220
- }
1221
- const neededLeftPad = Math.max(0, -contentLeft);
1222
- const neededRightPad = Math.max(0, contentRight - svgWidth);
1223
- if (neededLeftPad > 0 || neededRightPad > 0) {
1251
+ }
1252
+ if (elements) {
1253
+ const acc = { right: contentRight };
1254
+ scanNotes(elements, acc);
1255
+ contentRight = acc.right;
1256
+ }
1257
+ const neededLeftPad = Math.max(0, -contentLeft);
1258
+ const neededRightPad = Math.max(0, contentRight - svgWidth);
1259
+ if (neededLeftPad <= 0.5 && neededRightPad <= 0.5) break;
1224
1260
  leftMargin += neededLeftPad;
1225
1261
  rightMargin += neededRightPad;
1226
1262
  totalWidth = Math.max(leftMargin + diagramWidth + rightMargin, sBoxW + 40);
@@ -1271,7 +1307,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1271
1307
  }
1272
1308
  };
1273
1309
  if (showTitle) {
1274
- const titleEl = svg.append("text").attr("class", "chart-title").attr("x", svgWidth / 2).attr("y", ctx.structural(TITLE_Y)).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", ctx.text(TITLE_FONT_SIZE)).attr("font-weight", TITLE_FONT_WEIGHT).text(title);
1310
+ const titleEl = svg.append("text").attr("class", "chart-title").attr("x", header.inline ? header.titleX : svgWidth / 2).attr("y", ctx.structural(TITLE_Y)).attr("text-anchor", header.inline ? header.titleAnchor : "middle").attr("fill", palette.text).attr("font-size", ctx.text(TITLE_FONT_SIZE)).attr("font-weight", TITLE_FONT_WEIGHT).text(title);
1275
1311
  if (parsed.titleLineNumber) {
1276
1312
  titleEl.attr("data-line-number", parsed.titleLineNumber);
1277
1313
  }
@@ -1757,9 +1793,19 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1757
1793
  if (hasTagGroups) {
1758
1794
  const legendY = sTopMargin + titleOffset;
1759
1795
  const legendCallbacks = {};
1760
- const legendG = svg.append("g").attr("class", "sequence-legend").attr("transform", `translate(0,${legendY})`);
1796
+ const legendG = svg.append("g").attr("class", "sequence-legend").attr(
1797
+ "transform",
1798
+ header.inline ? `translate(${header.legendX}, ${header.legendY})` : `translate(0,${legendY})`
1799
+ );
1761
1800
  renderIntegratedLegend(legendG, {
1762
1801
  ...legendConfig,
1802
+ // Inline → left-origin so the wrapper's right-flush translate lands the
1803
+ // legend at the header's right edge; stacked → centered below the title
1804
+ // (identical to legendConfig.position, so the stacked path is unchanged).
1805
+ position: {
1806
+ placement: "top-center",
1807
+ titleRelation: header.inline ? "inline-with-title" : "below-title"
1808
+ },
1763
1809
  palette,
1764
1810
  isDark,
1765
1811
  width: svgWidth,
@@ -1861,4 +1907,4 @@ export {
1861
1907
  renderSequenceDiagram,
1862
1908
  buildNoteMessageMap
1863
1909
  };
1864
- //# sourceMappingURL=chunk-65V6IRFN.js.map
1910
+ //# sourceMappingURL=chunk-2ZJXKJSI.js.map
@@ -16,9 +16,16 @@ import {
16
16
  import {
17
17
  ScaleContext
18
18
  } from "./chunk-YYVTBZZC.js";
19
+ import {
20
+ INLINE_HEADER_PAD,
21
+ layoutInlineHeader
22
+ } from "./chunk-US3P2DQO.js";
19
23
  import {
20
24
  renderIntegratedLegend
21
- } from "./chunk-W5KMNC5U.js";
25
+ } from "./chunk-ASPS5O6F.js";
26
+ import {
27
+ getLegendExtent
28
+ } from "./chunk-GRXPFBYC.js";
22
29
  import {
23
30
  CAPTION_BOX_PADDING_X,
24
31
  CAPTION_BOX_PADDING_Y,
@@ -35,7 +42,7 @@ import {
35
42
  } from "./chunk-6KFWC4CO.js";
36
43
  import {
37
44
  parsePert
38
- } from "./chunk-P3H7QVDH.js";
45
+ } from "./chunk-5K5XBEXT.js";
39
46
  import {
40
47
  addCalendarDays,
41
48
  formatDuration,
@@ -43,24 +50,24 @@ import {
43
50
  formatSlackValue,
44
51
  formatSprintCell
45
52
  } from "./chunk-3TYUXC7D.js";
46
- import {
47
- contrastText,
48
- mix,
49
- shapeFill,
50
- themeBaseBg
51
- } from "./chunk-JYDMBWRP.js";
52
53
  import {
53
54
  LEGEND_HEIGHT
54
- } from "./chunk-4RGZFA7H.js";
55
+ } from "./chunk-Q5IHQ4NW.js";
55
56
  import {
56
57
  measureText,
57
58
  truncateText,
58
59
  wrapTextToWidth
59
60
  } from "./chunk-4ASYQ347.js";
61
+ import {
62
+ contrastText,
63
+ mix,
64
+ shapeFill,
65
+ themeBaseBg
66
+ } from "./chunk-JYDMBWRP.js";
60
67
  import {
61
68
  resolveActiveTagGroup,
62
69
  resolveTagColor
63
- } from "./chunk-CMVZWP32.js";
70
+ } from "./chunk-JR7Q6GHE.js";
64
71
 
65
72
  // src/pert/renderer.ts
66
73
  import * as d3Selection from "d3-selection";
@@ -229,25 +236,54 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
229
236
  const scaledHeight = layout.height + sDiagramPad * 2 + sTitleHeight + sLegendBlockHeight + analysisBlockHeight + fieldLegendBlockHeight;
230
237
  const svgW = ctx.isBelowFloor ? exportWidth : scaledWidth;
231
238
  const svgH = ctx.isBelowFloor ? exportHeight : scaledHeight;
239
+ const inlineRequested = resolved.options.legendInline === true && showTagLegend;
240
+ const legendExtent = inlineRequested ? getLegendExtent(
241
+ {
242
+ groups: resolved.tagGroups.map((g) => ({
243
+ name: g.name,
244
+ entries: g.entries
245
+ })),
246
+ position: {
247
+ placement: "top-center",
248
+ titleRelation: "inline-with-title"
249
+ },
250
+ mode: options.exportMode ? "export" : "preview"
251
+ },
252
+ { activeGroup: tagLegendActive },
253
+ svgW
254
+ ) : { width: 0, height: 0 };
255
+ const header = layoutInlineHeader({
256
+ requested: inlineRequested,
257
+ title: effectiveTitle ?? "",
258
+ hasLegend: showTagLegend,
259
+ legendWidth: legendExtent.width,
260
+ legendHeight: legendExtent.height,
261
+ containerWidth: svgW,
262
+ titleBandHeight: sTitleHeight,
263
+ legendReserve: sLegendBlockHeight,
264
+ titleBaselineY: sTitleY,
265
+ titleFontSize: sTitleFontSize
266
+ });
232
267
  const svg = d3Selection.select(container).append("svg").attr("width", ctx.isBelowFloor ? "100%" : svgW).attr("height", svgH).attr("viewBox", `0 0 ${svgW} ${svgH}`).attr("preserveAspectRatio", "xMidYMin meet").style("font-family", FONT_FAMILY);
233
268
  const defs = svg.append("defs");
234
269
  buildArrowheads(defs, palette, sArrowheadW, sArrowheadH);
235
270
  if (effectiveTitle) {
236
- svg.append("text").attr("class", "pert-title chart-title").attr("x", svgW / 2).attr("y", sTitleY).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", sTitleFontSize).attr("font-weight", TITLE_FONT_WEIGHT).text(effectiveTitle);
271
+ svg.append("text").attr("class", "pert-title chart-title").attr("x", header.titleX).attr("y", sTitleY).attr("text-anchor", header.titleAnchor).attr("fill", palette.text).attr("font-size", sTitleFontSize).attr("font-weight", TITLE_FONT_WEIGHT).text(effectiveTitle);
237
272
  }
238
273
  if (effectiveSubtitle) {
239
274
  const subtitleY = effectiveTitle ? sTitleY + ctx.aesthetic(26) : sTitleY;
240
275
  svg.append("text").attr("class", "pert-subtitle").attr("x", svgW / 2).attr("y", subtitleY).attr("text-anchor", "middle").attr("fill", palette.textMuted).attr("font-size", sSubtitleFontSize).attr("font-weight", 400).text(effectiveSubtitle);
241
276
  }
242
277
  const offsetX = Math.max(sDiagramPad, (svgW - layout.width) / 2);
243
- const offsetY = sDiagramPad + sTitleHeight + sLegendBlockHeight;
278
+ const offsetY = sDiagramPad + sTitleHeight + (header.inline ? 0 : sLegendBlockHeight);
244
279
  if (showTagLegend) {
245
280
  const tagLegendY = sDiagramPad + sTitleHeight + sLegendTopGap;
246
281
  renderTagLegendRow(svg, resolved, palette, isDark, {
247
- x: 0,
248
- y: tagLegendY,
249
- width: svgW,
282
+ x: header.inline ? svgW - INLINE_HEADER_PAD - legendExtent.width : 0,
283
+ y: header.inline ? header.legendY : tagLegendY,
284
+ width: header.inline ? legendExtent.width : svgW,
250
285
  activeGroup: tagLegendActive,
286
+ inline: header.inline,
251
287
  ...options.exportMode !== void 0 && {
252
288
  exportMode: options.exportMode
253
289
  }
@@ -1337,7 +1373,7 @@ function renderCaptionBlock(svg, bullets, args) {
1337
1373
  }
1338
1374
  function renderTagLegendRow(svg, resolved, palette, isDark, args) {
1339
1375
  if (resolved.tagGroups.length === 0) return;
1340
- const { x, y, width, activeGroup, exportMode } = args;
1376
+ const { x, y, width, activeGroup, exportMode, inline } = args;
1341
1377
  const groups = resolved.tagGroups.map((g) => ({
1342
1378
  name: g.name,
1343
1379
  entries: g.entries.map((e) => ({ value: e.value, color: e.color }))
@@ -1349,7 +1385,13 @@ function renderTagLegendRow(svg, resolved, palette, isDark, args) {
1349
1385
  palette,
1350
1386
  isDark,
1351
1387
  width,
1352
- activeGroup
1388
+ activeGroup,
1389
+ ...inline && {
1390
+ position: {
1391
+ placement: "top-center",
1392
+ titleRelation: "inline-with-title"
1393
+ }
1394
+ }
1353
1395
  });
1354
1396
  }
1355
1397
  function renderFieldLegendBlock(svg, args) {
@@ -1823,4 +1865,4 @@ export {
1823
1865
  measurePertAnalysisBlock,
1824
1866
  renderPertAnalysisBlock
1825
1867
  };
1826
- //# sourceMappingURL=chunk-PYO4TJJ3.js.map
1868
+ //# sourceMappingURL=chunk-32HUNA33.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  extractDatePrefix,
3
3
  parseTimelineDate
4
- } from "./chunk-6AUZPPAV.js";
4
+ } from "./chunk-ITXL2KU5.js";
5
5
  import {
6
6
  makeYearContext,
7
7
  parseDateToken,
@@ -16,7 +16,7 @@ import {
16
16
  tagAttrKey,
17
17
  validateTagGroupNames,
18
18
  validateTagValues
19
- } from "./chunk-CMVZWP32.js";
19
+ } from "./chunk-JR7Q6GHE.js";
20
20
  import {
21
21
  EVENT_LINE_REGISTRY,
22
22
  extractColor,
@@ -27,7 +27,7 @@ import {
27
27
  tryParseSharedOption,
28
28
  warnUnknownMetaKeys,
29
29
  withTagAliases
30
- } from "./chunk-YJVA3QUU.js";
30
+ } from "./chunk-A2ARDILY.js";
31
31
  import {
32
32
  emit,
33
33
  formatDgmoError,
@@ -133,6 +133,7 @@ var TBD_RE = /^TBD\b/i;
133
133
  var SIDE_RE = /^side\s+(above|below|alternate)\b/i;
134
134
  var ERA_RE = /^\[([^\]]+)\]\s*(.*)$/;
135
135
  var ERA_COLLAPSED_RE = /\bcollapsed:\s*(true|false)\b/i;
136
+ var NOW_RE = /^now\b\s*(.*)$/i;
136
137
  var SECTION_SEAM_RE = /^section\b/i;
137
138
  var DIRECTION_RE = /^direction\s+(\w+)/i;
138
139
  function parseEventLine(content, palette) {
@@ -150,6 +151,7 @@ function parseEventLine(content, palette) {
150
151
  titleLineNumber: null,
151
152
  events: [],
152
153
  eras: [],
154
+ now: null,
153
155
  tagGroups: [],
154
156
  options,
155
157
  diagnostics: [],
@@ -344,6 +346,44 @@ function parseEventLine(content, palette) {
344
346
  options.noLegend = true;
345
347
  continue;
346
348
  }
349
+ if (trimmed.toLowerCase() === "legend-inline") {
350
+ options.legendInline = true;
351
+ continue;
352
+ }
353
+ {
354
+ const nowMatch = trimmed.match(NOW_RE);
355
+ if (nowMatch) {
356
+ const rest = nowMatch[1].trim();
357
+ if (!rest) {
358
+ result.now = {
359
+ computed: true,
360
+ date: null,
361
+ dateValue: null,
362
+ label: "now",
363
+ lineNumber
364
+ };
365
+ } else {
366
+ const prefix = extractDatePrefix(rest, dateCtx);
367
+ if (prefix) {
368
+ const label = prefix.remainder?.trim() || "now";
369
+ result.now = {
370
+ computed: false,
371
+ date: prefix.startDate,
372
+ dateValue: parseTimelineDate(prefix.startDate),
373
+ label,
374
+ lineNumber
375
+ };
376
+ } else {
377
+ result.diagnostics.push(
378
+ emit(EVENT_LINE_DX.BAD_DATE, lineNumber, {
379
+ token: rest.split(/\s+/)[0]
380
+ })
381
+ );
382
+ }
383
+ }
384
+ continue;
385
+ }
386
+ }
347
387
  {
348
388
  const fm = fillModeFromToken(trimmed);
349
389
  if (fm !== null) {
@@ -419,6 +459,13 @@ function parseEventLine(content, palette) {
419
459
  });
420
460
  }
421
461
  validateEventDateOrder(result.events, eraFlaggedLines, result.diagnostics);
462
+ if (result.now && !options.scale) {
463
+ result.diagnostics.push(
464
+ emit(EVENT_LINE_DX.UNSUPPORTED, result.now.lineNumber, {
465
+ reason: "the `now` marker needs a to-scale axis; it is ignored under `no-scale`."
466
+ })
467
+ );
468
+ }
422
469
  return result;
423
470
  }
424
471
  function resolveFutureEvents(events) {
@@ -618,4 +665,4 @@ export {
618
665
  EVENT_LINE_DIAGNOSTICS,
619
666
  parseEventLine
620
667
  };
621
- //# sourceMappingURL=chunk-UK6DKJLD.js.map
668
+ //# sourceMappingURL=chunk-3BFXELBL.js.map
@@ -8,14 +8,14 @@ import {
8
8
  resolveActiveTagGroup,
9
9
  stripDefaultModifier,
10
10
  tagAttrKey
11
- } from "./chunk-CMVZWP32.js";
11
+ } from "./chunk-JR7Q6GHE.js";
12
12
  import {
13
13
  extractColor,
14
14
  fillModeFromToken,
15
15
  measureIndent,
16
16
  parseFirstLine,
17
17
  splitNameAndMeta
18
- } from "./chunk-YJVA3QUU.js";
18
+ } from "./chunk-A2ARDILY.js";
19
19
  import {
20
20
  makeDgmoError,
21
21
  makeFail
@@ -214,6 +214,10 @@ function parseBracket(content, palette) {
214
214
  else result.mode = lower;
215
215
  continue;
216
216
  }
217
+ if (lower === "legend-inline") {
218
+ result.legendInline = true;
219
+ continue;
220
+ }
217
221
  if (lower === "no-legend") {
218
222
  result.noLegend = true;
219
223
  continue;
@@ -388,4 +392,4 @@ function parseBracket(content, palette) {
388
392
  export {
389
393
  parseBracket
390
394
  };
391
- //# sourceMappingURL=chunk-RW5PEJ7D.js.map
395
+ //# sourceMappingURL=chunk-3BZJ5KD5.js.map