@diagrammo/dgmo 0.54.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 (196) hide show
  1. package/dist/advanced.d.ts +76 -9
  2. package/dist/advanced.js +118 -95
  3. package/dist/auto.js +125 -124
  4. package/dist/auto.mjs +1579 -282
  5. package/dist/block.js +49 -48
  6. package/dist/chart-meta.js +43 -43
  7. package/dist/{charts-d3-25E4VWXO.js → charts-d3-KZ6V4OP2.js} +7 -6
  8. package/dist/{chunk-MTZOXISJ.js → chunk-2HX6ZGY7.js} +3 -3
  9. package/dist/{chunk-ICKXIMBA.js → chunk-2R6HG6D5.js} +5 -5
  10. package/dist/{chunk-NUTWTV6G.js → chunk-2ZJXKJSI.js} +102 -56
  11. package/dist/{chunk-LPJ6H5X4.js → chunk-32HUNA33.js} +53 -11
  12. package/dist/{chunk-UIT7E6UF.js → chunk-3BFXELBL.js} +51 -4
  13. package/dist/{chunk-C2UORMIA.js → chunk-3BZJ5KD5.js} +7 -3
  14. package/dist/{chunk-A3BDLDYG.js → chunk-3FUTFYSP.js} +57 -18
  15. package/dist/{chunk-DPGQ5UMO.js → chunk-4MZCJV4M.js} +6 -6
  16. package/dist/{chunk-WWHECSYZ.js → chunk-4R5KIPNX.js} +2 -2
  17. package/dist/{chunk-47JNEKJA.js → chunk-5D5VHDJM.js} +43 -8
  18. package/dist/{chunk-KQYQECWQ.js → chunk-5H5GWWA4.js} +49 -13
  19. package/dist/{chunk-RRGKMJYL.js → chunk-5K5XBEXT.js} +8 -3
  20. package/dist/{chunk-HAA25PLC.js → chunk-6NJWBMJV.js} +44 -9
  21. package/dist/{chunk-3FRO35WW.js → chunk-A2ARDILY.js} +17 -3
  22. package/dist/{chunk-TLNVYWPA.js → chunk-A2PTRSAO.js} +2 -2
  23. package/dist/{chunk-APKUAJ2L.js → chunk-A2RUBBVT.js} +14 -1
  24. package/dist/{chunk-KS5ZSM5T.js → chunk-A4UJP4IS.js} +61 -13
  25. package/dist/{chunk-LRSW4JLE.js → chunk-AKE6C2D7.js} +3 -3
  26. package/dist/{chunk-2NZOHEP4.js → chunk-ASPS5O6F.js} +3 -3
  27. package/dist/{chunk-KV4HLIJE.js → chunk-AU75JHSR.js} +6 -3
  28. package/dist/{chunk-R5BGGBFF.js → chunk-DS4MDEQ7.js} +2 -2
  29. package/dist/{chunk-7JDTNFAK.js → chunk-EFUQENO5.js} +76 -32
  30. package/dist/{chunk-BULHGPHK.js → chunk-EMSOFHEN.js} +2 -2
  31. package/dist/{chunk-IYNKLCAZ.js → chunk-ETTDF3S2.js} +45 -7
  32. package/dist/{chunk-KDK5EKUR.js → chunk-ETYF5QZR.js} +2 -2
  33. package/dist/{chunk-COJW2NEY.js → chunk-F5ZNUMSY.js} +50 -11
  34. package/dist/{chunk-EAI6XJ7D.js → chunk-FBP33UM6.js} +3 -3
  35. package/dist/{chunk-KINOX74I.js → chunk-FGAMFJNJ.js} +48 -10
  36. package/dist/{chunk-J7HQPVYH.js → chunk-GRXPFBYC.js} +23 -2
  37. package/dist/{chunk-GQ5ECRP4.js → chunk-GTO5VCYG.js} +3 -3
  38. package/dist/{chunk-RJ5LBZ5U.js → chunk-HES4K6DV.js} +13 -13
  39. package/dist/{chunk-ADCHLNWT.js → chunk-HGKOVKAX.js} +3 -3
  40. package/dist/{chunk-EPRF3ZRV.js → chunk-HLGOG44K.js} +2 -2
  41. package/dist/{chunk-KQ3FNRGR.js → chunk-HUTP35XT.js} +5 -4
  42. package/dist/{chunk-OJ435DQZ.js → chunk-HX7QNHC6.js} +3 -3
  43. package/dist/{chunk-6KL7TFLS.js → chunk-IALX52TR.js} +2 -2
  44. package/dist/{chunk-7SP4C6EV.js → chunk-IF4KYSJZ.js} +7 -3
  45. package/dist/{chunk-5XSNLXU5.js → chunk-IG6J7JWH.js} +51 -12
  46. package/dist/{chunk-M24VXUFG.js → chunk-IIUYKQ5J.js} +3 -3
  47. package/dist/{chunk-5VXU6MND.js → chunk-INTAQV2Y.js} +2 -2
  48. package/dist/{chunk-3KHJJP3J.js → chunk-ITXL2KU5.js} +2 -2
  49. package/dist/{chunk-I47VHSPS.js → chunk-IWG2ECAO.js} +2 -2
  50. package/dist/{chunk-CSHFU6LT.js → chunk-JGCEFKZP.js} +7 -7
  51. package/dist/{chunk-O576GYAP.js → chunk-JQLSFZZP.js} +2 -2
  52. package/dist/{chunk-AHTTKERF.js → chunk-JR7Q6GHE.js} +2 -2
  53. package/dist/{chunk-4T6OCSJ2.js → chunk-KC3WBBI7.js} +3 -3
  54. package/dist/{chunk-BM7MG6HT.js → chunk-KK3L5NVK.js} +3 -3
  55. package/dist/{chunk-FR6UFVSV.js → chunk-L2DIXZUT.js} +91 -41
  56. package/dist/{chunk-WW4BQ744.js → chunk-LCRPGGGS.js} +6 -6
  57. package/dist/{chunk-GKYHWJXI.js → chunk-LKGQ46P4.js} +3 -3
  58. package/dist/{chunk-IOIMQHQ6.js → chunk-LW7STMYZ.js} +2 -2
  59. package/dist/{chunk-OR3R27CU.js → chunk-M53MDBIW.js} +2 -2
  60. package/dist/{chunk-T7Y554OK.js → chunk-MEH4TJEX.js} +4 -4
  61. package/dist/{chunk-T3FAJAJT.js → chunk-MNS2ENXF.js} +3 -3
  62. package/dist/{chunk-CCGWX6AO.js → chunk-MSWIBF6J.js} +2 -2
  63. package/dist/{chunk-B7N5KYXQ.js → chunk-NL7FUIVD.js} +4 -4
  64. package/dist/{chunk-EQOMY4PY.js → chunk-NN5TF4OV.js} +2 -2
  65. package/dist/{chunk-BZJIITYM.js → chunk-NPPUZ4SK.js} +4 -4
  66. package/dist/{chunk-XWODFBHJ.js → chunk-NYOOPQFD.js} +7 -3
  67. package/dist/{chunk-VQFDBNYF.js → chunk-O4CZDTQA.js} +3 -3
  68. package/dist/{chunk-FVMKCZHF.js → chunk-P5XXIVEU.js} +2 -2
  69. package/dist/{chunk-F7XM366V.js → chunk-PC4YLEKA.js} +3 -3
  70. package/dist/{chunk-AQEYUVGJ.js → chunk-PCVXXPYU.js} +12 -5
  71. package/dist/{chunk-TJN2OIVG.js → chunk-PKUWYPI5.js} +180 -12
  72. package/dist/{chunk-W6PCFRPL.js → chunk-PSIDVCBA.js} +2 -2
  73. package/dist/{chunk-RIEAN4D5.js → chunk-PV7ND5WL.js} +48 -8
  74. package/dist/{chunk-7K6NDSXH.js → chunk-Q5CMQVWF.js} +3 -3
  75. package/dist/{chunk-FFVFZLRT.js → chunk-QQXFYTLC.js} +346 -46
  76. package/dist/{chunk-N7BSBAVP.js → chunk-QZYGRDMM.js} +108 -89
  77. package/dist/{chunk-U4IN6AHE.js → chunk-RKBCKCSF.js} +2 -2
  78. package/dist/{chunk-GK32ZFZY.js → chunk-RSBH2C7O.js} +3 -3
  79. package/dist/{chunk-OSXQKC3S.js → chunk-RYNCWA5X.js} +6 -3
  80. package/dist/{chunk-S7YFT3PO.js → chunk-RZWIPDZ2.js} +3 -3
  81. package/dist/{chunk-7UPFTBOW.js → chunk-S52F62GW.js} +4 -4
  82. package/dist/{chunk-WKNAJ4BR.js → chunk-SCOHNGPG.js} +51 -10
  83. package/dist/{chunk-BWYFIVZF.js → chunk-UBQU2BY6.js} +3 -3
  84. package/dist/{chunk-VMSBMIHW.js → chunk-UES4P7FN.js} +2 -2
  85. package/dist/chunk-US3P2DQO.js +87 -0
  86. package/dist/{chunk-AJFHNS67.js → chunk-UXXLE6AH.js} +5 -5
  87. package/dist/{chunk-M3H7ZE6C.js → chunk-VMWSZCAK.js} +5 -4
  88. package/dist/{chunk-S7FOIURR.js → chunk-VVIRAGID.js} +6 -6
  89. package/dist/{chunk-3SBHODJ4.js → chunk-VXTUWXFB.js} +48 -9
  90. package/dist/{chunk-HFEOOQ46.js → chunk-W4TSD3IP.js} +2 -2
  91. package/dist/{chunk-7U4OR7CD.js → chunk-WB3NA3JJ.js} +2 -2
  92. package/dist/{chunk-3SEEP2JM.js → chunk-WITOJZGL.js} +8 -4
  93. package/dist/{chunk-6OYDOQ2Q.js → chunk-WVGNXDEE.js} +2 -2
  94. package/dist/{chunk-UEU6IYKY.js → chunk-X3X4LZDC.js} +2 -2
  95. package/dist/{chunk-SBOAZ7YK.js → chunk-XKKH2DPG.js} +39 -39
  96. package/dist/{chunk-NR5HCAUD.js → chunk-XSVWUOUZ.js} +1 -1
  97. package/dist/{chunk-62Y27T4C.js → chunk-Y4BBGFKY.js} +2 -2
  98. package/dist/{chunk-YENNFS5F.js → chunk-YP2T5YUP.js} +8 -3
  99. package/dist/{chunk-2NYXI35Z.js → chunk-YXKNXIWA.js} +5 -4
  100. package/dist/{chunk-KBVOVDYP.js → chunk-ZGIBV36U.js} +3 -3
  101. package/dist/{chunk-4ZIKWVSQ.js → chunk-ZP265ICS.js} +4 -4
  102. package/dist/{chunk-DLU643TF.js → chunk-ZWVKTWK6.js} +3 -3
  103. package/dist/{chunk-QBYP2FBZ.js → chunk-ZXNHHO6D.js} +2 -2
  104. package/dist/cli.cjs +150 -147
  105. package/dist/clock.js +34 -1
  106. package/dist/completion-registry.js +12 -4
  107. package/dist/dgmo-router-T4HGLIGA.js +88 -0
  108. package/dist/{dimensions-L6BXQXXL.js → dimensions-3JINHSYK.js} +6 -6
  109. package/dist/editor.js +10 -1
  110. package/dist/element.js +124 -123
  111. package/dist/element.mjs +1579 -282
  112. package/dist/{flowchart-parser-UKYOW3VM.js → flowchart-parser-M7KKTLX7.js} +4 -4
  113. package/dist/{flowchart-renderer-DCFKUDDR.js → flowchart-renderer-FFEQFQEU.js} +5 -5
  114. package/dist/highlight.js +10 -1
  115. package/dist/index.js +58 -48
  116. package/dist/{layout-G2ABQJQZ.js → layout-3ZZBKUQC.js} +3 -3
  117. package/dist/{layout-CH4HFFRD.js → layout-AUKTWGYL.js} +4 -4
  118. package/dist/{layout-QBNAMEOA.js → layout-CRLTSFYQ.js} +3 -3
  119. package/dist/{layout-25Y3VDYF.js → layout-FNZDJGKF.js} +4 -4
  120. package/dist/{layout-NY7MHJCL.js → layout-GHWRJKZQ.js} +4 -4
  121. package/dist/{layout-ITLPDG6M.js → layout-LGXOKUCD.js} +4 -4
  122. package/dist/{layout-A6OIGZN2.js → layout-UR7CYAHL.js} +2 -2
  123. package/dist/{layout-4SPLI4HG.js → layout-UTMEVFHN.js} +4 -4
  124. package/dist/{layout-search-LUI475P3.js → layout-search-U2H4ORFJ.js} +8 -6
  125. package/dist/{parser-XRDUX2AR.js → parser-2AXPSKWB.js} +5 -5
  126. package/dist/{parser-B2A7XOAK.js → parser-2AZ2KQTO.js} +4 -4
  127. package/dist/{parser-VVE4THG3.js → parser-2LF33IS2.js} +4 -4
  128. package/dist/{parser-MHKYQPC2.js → parser-3QJ2Z4H4.js} +3 -3
  129. package/dist/parser-5GCQFSTQ.js +13 -0
  130. package/dist/{parser-XCPMEB2Z.js → parser-62OHBRU5.js} +3 -3
  131. package/dist/{parser-GML6V2KZ.js → parser-7LYJFZCP.js} +4 -4
  132. package/dist/{parser-LTA2BOZO.js → parser-BMOTF72G.js} +3 -3
  133. package/dist/{parser-FHRMFUNX.js → parser-CIFLYZYP.js} +3 -3
  134. package/dist/{parser-KTYF6WO5.js → parser-D2UL2G5U.js} +3 -3
  135. package/dist/{parser-5C3PEZK3.js → parser-DM2APTKB.js} +3 -3
  136. package/dist/{parser-X5XLFY4Z.js → parser-DYYTPLBL.js} +4 -4
  137. package/dist/{parser-WPPJGB4R.js → parser-GOUGUTPU.js} +4 -4
  138. package/dist/{parser-T3D7BV6O.js → parser-HGVUVD6J.js} +3 -3
  139. package/dist/{parser-F4FEU57T.js → parser-IEJD3CZB.js} +3 -3
  140. package/dist/{parser-FY3YFFBS.js → parser-JBEWNLAV.js} +5 -5
  141. package/dist/{parser-2UWWNTFL.js → parser-JMXPHNZD.js} +4 -4
  142. package/dist/{parser-YULS5MLD.js → parser-JMXSQY3K.js} +4 -4
  143. package/dist/{parser-YPWYT46P.js → parser-LUXS7J32.js} +4 -4
  144. package/dist/{parser-O7YQYFEN.js → parser-M5BUHULF.js} +4 -4
  145. package/dist/{parser-MVSYFK63.js → parser-MESRHUS4.js} +4 -4
  146. package/dist/{parser-HA3PF5FL.js → parser-OOYNI2UT.js} +4 -4
  147. package/dist/{parser-OPIXXUY4.js → parser-PVBUAVRR.js} +4 -4
  148. package/dist/{parser-3RXYQSA7.js → parser-QKRBSQLJ.js} +5 -5
  149. package/dist/{parser-CCNJKDDA.js → parser-S6NWSIJO.js} +4 -4
  150. package/dist/{parser-S4EJPNVN.js → parser-SFEK6Q7Z.js} +4 -4
  151. package/dist/{parser-7UI6UQ7B.js → parser-SUV52NQW.js} +4 -4
  152. package/dist/{parser-ESHNUFME.js → parser-SZHGLOOZ.js} +4 -4
  153. package/dist/{parser-66RYGJRB.js → parser-TO7IENWL.js} +4 -4
  154. package/dist/{parser-FPCWDYQV.js → parser-TVAMC7CQ.js} +4 -4
  155. package/dist/{parser-LU7UAKNB.js → parser-VAW46R57.js} +4 -4
  156. package/dist/{parser-6MQM7WT3.js → parser-XDSPOXSE.js} +4 -4
  157. package/dist/pert.d.ts +2 -0
  158. package/dist/{renderer-YVMETH6V.js → renderer-3PWLOJPD.js} +8 -8
  159. package/dist/{renderer-7HMZ5OCJ.js → renderer-5EMHIQL5.js} +3 -3
  160. package/dist/{renderer-2DME63VZ.js → renderer-5PODNLYP.js} +4 -4
  161. package/dist/{renderer-4A32DX5L.js → renderer-AQJIQ2XU.js} +7 -6
  162. package/dist/{renderer-RMAM2SOJ.js → renderer-BEW3AYFT.js} +8 -8
  163. package/dist/{renderer-YP3P6UVT.js → renderer-C3UYAXA6.js} +8 -6
  164. package/dist/{renderer-X2LYSMLU.js → renderer-CENXCMWG.js} +3 -3
  165. package/dist/{renderer-6CFML5G3.js → renderer-CXM3ARYN.js} +8 -7
  166. package/dist/{renderer-LHVCKEWF.js → renderer-DW6TEBLA.js} +8 -7
  167. package/dist/{renderer-Y3NXZINM.js → renderer-FE5M6SEZ.js} +8 -7
  168. package/dist/{renderer-G4UOW3RH.js → renderer-FXK6ZL3P.js} +3 -3
  169. package/dist/{renderer-4K5YYX5R.js → renderer-G5ESLCJB.js} +9 -8
  170. package/dist/{renderer-P3YQES7B.js → renderer-HTDS4FED.js} +9 -8
  171. package/dist/{renderer-YEFOOULC.js → renderer-IO4KCFVL.js} +8 -8
  172. package/dist/{renderer-FXMGCSRP.js → renderer-IRAFJNTK.js} +7 -6
  173. package/dist/{renderer-SES7QZYL.js → renderer-MFTTFW32.js} +9 -8
  174. package/dist/{renderer-Z4GNKNXO.js → renderer-MPXI4FVL.js} +6 -6
  175. package/dist/{renderer-RA4PTAMF.js → renderer-NVBEMQ6L.js} +5 -5
  176. package/dist/{renderer-7ZNVOVFG.js → renderer-OOGDCR6K.js} +3 -3
  177. package/dist/{renderer-CJ56SUMF.js → renderer-Q5P72O4A.js} +7 -7
  178. package/dist/{renderer-WCWI4I6A.js → renderer-QZESC66H.js} +2 -2
  179. package/dist/{renderer-B7Y6I7JX.js → renderer-RDBUXW7P.js} +4 -4
  180. package/dist/{renderer-V5SNTPAM.js → renderer-S4XB3JR2.js} +9 -9
  181. package/dist/{renderer-COJZZ4F6.js → renderer-SIWEEWJ5.js} +7 -6
  182. package/dist/{renderer-C3RI4OPJ.js → renderer-TKTM2SL4.js} +8 -7
  183. package/dist/{renderer-WVD6G2TS.js → renderer-TXTTV4HA.js} +8 -7
  184. package/dist/{renderer-HQ4JFZOV.js → renderer-UZIU4AHK.js} +7 -6
  185. package/dist/{renderer-3VY3VXJE.js → renderer-V72VJIGG.js} +9 -8
  186. package/dist/{renderer-PLVIARM7.js → renderer-VEGOEZOI.js} +7 -6
  187. package/dist/{renderer-OZX5KGQM.js → renderer-W6I6T2TA.js} +6 -6
  188. package/dist/{renderer-TQ5QDZOE.js → renderer-WSHJRR2T.js} +6 -6
  189. package/dist/{renderer-radial-VYBZAXXE.js → renderer-radial-AG75PBYD.js} +7 -7
  190. package/dist/{resolver-WFKZYBJ2.js → resolver-ZSFQQRTH.js} +3 -3
  191. package/dist/{state-parser-VIW2WNA5.js → state-parser-KIPZGIB4.js} +5 -5
  192. package/dist/{state-renderer-H22AQD3U.js → state-renderer-U6OSJG52.js} +9 -8
  193. package/docs/language-reference.md +2 -1
  194. package/package.json +1 -1
  195. package/dist/dgmo-router-TGZWFIZO.js +0 -88
  196. package/dist/parser-6GN5YJBJ.js +0 -13
@@ -216,6 +216,13 @@ interface ParsedChart {
216
216
  /** Cross-chart-type: when true, the renderer suppresses the legend and the
217
217
  * vertical band it would occupy (#48). */
218
218
  noLegend?: boolean;
219
+ /** §1.9 `legend-inline`: render the title and the series legend on one line
220
+ * (title left, legend right) instead of stacking the legend below a centered
221
+ * title — reclaims a header row. Honoured by the top-center-legend data
222
+ * charts (bar/line/radar/scatter/function); a no-op elsewhere. Auto-falls
223
+ * back to the stacked header when the legend can't fit beside the title on a
224
+ * single row (decision #50). */
225
+ legendInline?: boolean;
219
226
  /** Line only: opt out of the data-driven y-axis auto-fit and anchor the
220
227
  * baseline at 0 (magnitude honesty / old ECharts-parity behavior). By
221
228
  * default a line chart fits a padded data-min→max window (§15.1). */
@@ -580,7 +587,9 @@ interface ParsedExtendedBase {
580
587
  noName?: boolean;
581
588
  noValue?: boolean;
582
589
  noPercent?: boolean;
583
- shade?: boolean;
590
+ /** `fill` directive — shade the area below each curve (function charts),
591
+ * parity with the `line` chart's bare `fill`. Opacity follows `fillMode`. */
592
+ fill?: boolean;
584
593
  /** §1.9 fill family: `'solid'` = full intent saturation, `'outline'` =
585
594
  * theme-background fill with color on the stroke. Absent ⇒ 25% tint. */
586
595
  fillMode?: 'solid' | 'outline';
@@ -589,6 +598,9 @@ interface ParsedExtendedBase {
589
598
  /** Cross-chart-type: when true, the renderer suppresses the legend and the
590
599
  * vertical band it would occupy (#48). */
591
600
  noLegend?: boolean;
601
+ /** §1.9 `legend-inline`: title + series legend on one line (see ParsedChart).
602
+ * Honoured by scatter/function among the extended charts (decision #50). */
603
+ legendInline?: boolean;
592
604
  /** §1.11 emphasis family: `highlight <Name>…` / `dim <Name>…`. Chart-level,
593
605
  * mutually exclusive, last-one-wins. Resolved against real element names at
594
606
  * render time via `resolveEmphasis`. */
@@ -2175,6 +2187,8 @@ interface SketchBox {
2175
2187
  }
2176
2188
  interface SketchOptions {
2177
2189
  readonly noLegend: boolean;
2190
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
2191
+ readonly legendInline?: boolean;
2178
2192
  /** §1.9 fill family; undefined ⇒ canonical 25% tint. */
2179
2193
  readonly fillMode: 'solid' | 'outline' | undefined;
2180
2194
  /** `no-descriptions` directive (mindmap `hd` standard): hide the card
@@ -3234,6 +3248,8 @@ interface GanttOptions {
3234
3248
  noTitle: boolean;
3235
3249
  /** §1.9 `no-legend` — suppress the tag legend and collapse its reserved band. */
3236
3250
  noLegend: boolean;
3251
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
3252
+ legendInline?: boolean;
3237
3253
  }
3238
3254
  interface ParsedGantt {
3239
3255
  readonly nodes: readonly GanttNode[];
@@ -3450,6 +3466,8 @@ interface PertOptions {
3450
3466
  noTitle?: boolean;
3451
3467
  /** §1.9 `no-legend` — suppress the tag legend and collapse its reserved band. */
3452
3468
  noLegend?: boolean;
3469
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
3470
+ legendInline?: boolean;
3453
3471
  /**
3454
3472
  * §1.9 fill family — `fill-solid` renders node/group card fills at full intent
3455
3473
  * saturation instead of the canonical 25% tint (via `shapeFill`).
@@ -4658,6 +4676,26 @@ interface EventLineEra {
4658
4676
  readonly collapsed: boolean;
4659
4677
  readonly lineNumber: number;
4660
4678
  }
4679
+ /**
4680
+ * A **now marker** (§28.6b) — a "grounded pin" at "today": a palette-red
4681
+ * (`palette.destructive`) diamond planted on the spine with a short stem to a
4682
+ * labeled tab, slotted into a card-free lane, plus a dotted "today line" that
4683
+ * fades out within the leader gap (full-height only on hover, preview).
4684
+ * `now` alone is *computed* (resolved to the render-time date);
4685
+ * `now <date>` *pins* it to an explicit ISO date (deterministic, snapshot-safe).
4686
+ * Only drawn on a to-scale axis (every event dated); ignored under `no-scale`.
4687
+ */
4688
+ interface EventLineNow {
4689
+ /** True for bare `now` (date resolved at render time); false when pinned. */
4690
+ readonly computed: boolean;
4691
+ /** Pinned ISO date as written, or null when computed. */
4692
+ readonly date: string | null;
4693
+ /** Numeric value for the pinned date (timeline scale), or null when computed. */
4694
+ readonly dateValue: number | null;
4695
+ /** Rule caption (default `now`; a trailing token on the pinned form overrides). */
4696
+ readonly label: string;
4697
+ readonly lineNumber: number;
4698
+ }
4661
4699
  interface EventLineOptions {
4662
4700
  /** False when `no-scale` — events are spaced evenly instead of by date. */
4663
4701
  readonly scale: boolean;
@@ -4670,6 +4708,8 @@ interface EventLineOptions {
4670
4708
  readonly noBox: boolean;
4671
4709
  /** True when `no-legend` — hide the tag legend. */
4672
4710
  readonly noLegend: boolean;
4711
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
4712
+ readonly legendInline?: boolean;
4673
4713
  /** §1.9 fill family: 'solid' | 'outline'; undefined ⇒ canonical soft tint. */
4674
4714
  readonly fillMode: 'solid' | 'outline' | undefined;
4675
4715
  }
@@ -4679,6 +4719,8 @@ interface ParsedEventLine {
4679
4719
  readonly titleLineNumber: number | null;
4680
4720
  readonly events: readonly EventLineEvent[];
4681
4721
  readonly eras: readonly EventLineEra[];
4722
+ /** The `now` marker (§28.6b), or null when the directive is absent. */
4723
+ readonly now: EventLineNow | null;
4682
4724
  readonly tagGroups: readonly TagGroup[];
4683
4725
  readonly options: EventLineOptions;
4684
4726
  readonly diagnostics: readonly DgmoError[];
@@ -4687,7 +4729,10 @@ interface ParsedEventLine {
4687
4729
 
4688
4730
  declare function parseEventLine(content: string, palette?: PaletteColors): ParsedEventLine;
4689
4731
 
4690
- declare function renderEventLine(container: HTMLDivElement, parsed: ParsedEventLine, palette: PaletteColors, isDark: boolean, onClickItem?: (lineNumber: number) => void, exportDims?: D3ExportDimensions, tagOverride?: string): void;
4732
+ declare function renderEventLine(container: HTMLDivElement, parsed: ParsedEventLine, palette: PaletteColors, isDark: boolean, onClickItem?: (lineNumber: number) => void, exportDims?: D3ExportDimensions, tagOverride?: string,
4733
+ /** Injectable clock for the computed `now` marker (§28.6b). Defaults to the
4734
+ * live wall-clock; tests/snapshots pass a fixed date for determinism. */
4735
+ nowDate?: Date): void;
4691
4736
  /** A focus target: a single event (by its `data-evt` id, = source line), an era
4692
4737
  * (by name), or a tag value (a legend category). `null` clears the focus. */
4693
4738
  type EventLineFocus = {
@@ -4715,7 +4760,7 @@ declare function clearEventLineMuted(container: HTMLElement): void;
4715
4760
  * to clear. No-op when the container holds no event-line SVG.
4716
4761
  */
4717
4762
  declare function focusEventLine(container: HTMLElement, spec: EventLineFocus | null): void;
4718
- declare function renderEventLineForExport(container: HTMLDivElement, parsed: ParsedEventLine, palette: PaletteColors, isDark: boolean, exportDims?: D3ExportDimensions, tagOverride?: string): void;
4763
+ declare function renderEventLineForExport(container: HTMLDivElement, parsed: ParsedEventLine, palette: PaletteColors, isDark: boolean, exportDims?: D3ExportDimensions, tagOverride?: string, nowDate?: Date): void;
4719
4764
 
4720
4765
  /** A resolved recurrence rule. Built by the parser, re-read by the ticker. */
4721
4766
  interface RecurRule {
@@ -5181,6 +5226,8 @@ interface ParsedBracket {
5181
5226
  readonly activeTag: string | null;
5182
5227
  /** Hide the tag legend. */
5183
5228
  readonly noLegend: boolean;
5229
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
5230
+ readonly legendInline?: boolean;
5184
5231
  /** Suppress round/column labels (`no-round`). */
5185
5232
  readonly noRounds: boolean;
5186
5233
  /**
@@ -5412,6 +5459,8 @@ interface TreemapOptions {
5412
5459
  noPercent: boolean;
5413
5460
  noHeaders: boolean;
5414
5461
  noLegend: boolean;
5462
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
5463
+ legendInline?: boolean;
5415
5464
  /** §1.9 fill family; undefined ⇒ canonical 25% tint. */
5416
5465
  fillMode: 'solid' | 'outline' | undefined;
5417
5466
  /** `radial` — render as a sunburst (concentric rings) instead of rectangles. */
@@ -5596,6 +5645,8 @@ interface BlockGrid {
5596
5645
  interface BlockOptions {
5597
5646
  /** `no-legend` — hide the tag legend. */
5598
5647
  noLegend: boolean;
5648
+ /** §1.9 `legend-inline` — title left, legend flushed right on one row. */
5649
+ legendInline?: boolean;
5599
5650
  /** §1.9 fill family: 'solid' | 'outline'; absent ⇒ canonical 25% tint. */
5600
5651
  fillMode?: 'solid' | 'outline';
5601
5652
  }
@@ -6332,6 +6383,12 @@ interface LegendRenderOptions {
6332
6383
  containerWidth: number;
6333
6384
  activeGroup?: string | null;
6334
6385
  className?: string;
6386
+ /**
6387
+ * Row alignment within `containerWidth`. `'center'` (default) matches the
6388
+ * historic top-center legend; `'left'` left-origins the row at x=0 so the
6389
+ * caller can translate it beside a left-aligned title (§1.9 `legend-inline`).
6390
+ */
6391
+ align?: 'center' | 'left';
6335
6392
  }
6336
6393
  interface LegendRenderResult {
6337
6394
  svg: string;
@@ -6403,13 +6460,23 @@ declare function computeActivations(steps: RenderStep[]): Activation[];
6403
6460
  */
6404
6461
  declare function applyPositionOverrides(participants: readonly SequenceParticipant[]): SequenceParticipant[];
6405
6462
  /**
6406
- * Reorder participants so that members of the same group are adjacent.
6407
- * Groups are positioned at the point where their first member would naturally
6408
- * appear based on message order (first-occurrence positioning). This prevents
6409
- * groups declared at the top of the file from being placed before participants
6410
- * that appear in messages earlier.
6463
+ * Order participants by first appearance in messages, then pull grouped
6464
+ * members adjacent.
6465
+ *
6466
+ * The baseline is first-occurrence order (spec §2.2 priority 3): the first
6467
+ * participant referenced by a message gets the leftmost column, regardless of
6468
+ * declaration order. A bare declaration line assigns a tag/type only — it does
6469
+ * NOT pin a column. Participants that never appear in any message fall back to
6470
+ * declaration order (priority 4) and are appended after the message-referenced
6471
+ * ones.
6472
+ *
6473
+ * When spatial `[Group]` boxes exist (priority 2), each group's members are
6474
+ * pulled adjacent at the group's first-appearance anchor, overriding their
6475
+ * individual appearance slots. With no groups this reduces to pure
6476
+ * appearance order.
6411
6477
  *
6412
- * Explicit `position` overrides are handled separately by `applyPositionOverrides`.
6478
+ * Explicit `position` overrides (priority 1) are handled separately by
6479
+ * `applyPositionOverrides`, which runs after this pass.
6413
6480
  */
6414
6481
  declare function applyGroupOrdering(participants: readonly SequenceParticipant[], groups: readonly SequenceGroup[], messages?: readonly SequenceMessage[]): SequenceParticipant[];
6415
6482
  /**