@diagrammo/dgmo 0.52.0 → 0.53.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.
- package/.cursorrules +59 -58
- package/.github/copilot-instructions.md +59 -58
- package/.windsurfrules +59 -58
- package/SKILL.md +59 -58
- package/dist/advanced.d.ts +65 -230
- package/dist/advanced.js +278 -611
- package/dist/analyzer-TDN5KJFP.js +15 -0
- package/dist/auto.css +14 -6
- package/dist/auto.js +142 -132
- package/dist/auto.mjs +1117 -452
- package/dist/block.css +14 -6
- package/dist/block.js +85 -72
- package/dist/calculator-VBIT6GQF.js +11 -0
- package/dist/chart-meta-CPNVUZ5J.d.ts +232 -0
- package/dist/chart-meta.d.ts +2 -0
- package/dist/chart-meta.js +105 -0
- package/dist/charts-d3-DH2XA45I.js +26 -0
- package/dist/{chunk-QJMKPUYK.js → chunk-22OQWBWD.js} +14 -7
- package/dist/{chunk-5NGAO4QK.js → chunk-27STWBOK.js} +10 -8
- package/dist/{chunk-QGATPIPX.js → chunk-2QC4HXCY.js} +31 -17
- package/dist/{chunk-HFMYN6N2.js → chunk-3B2GXZCX.js} +4 -3
- package/dist/{chunk-6HQH6JZE.js → chunk-3BEKKRH5.js} +10 -10
- package/dist/{chunk-AL672HNE.js → chunk-3CZLWOCI.js} +17 -7
- package/dist/{chunk-J7TLCB2Q.js → chunk-3IUHKMJI.js} +2 -2
- package/dist/{chunk-7L4UJOY6.js → chunk-3TYUXC7D.js} +2 -2
- package/dist/{chunk-Y2ZE3MSG.js → chunk-43E26CDA.js} +2 -2
- package/dist/{chunk-YTMTPUH4.js → chunk-4ASVFYB2.js} +6 -6
- package/dist/{chunk-WCT3NYCV.js → chunk-4ASYQ347.js} +33 -8
- package/dist/{chunk-ZNWAYU6N.js → chunk-4K42RUGC.js} +33 -9
- package/dist/{chunk-I5IGB56C.js → chunk-4QV26TEG.js} +41 -1
- package/dist/{chunk-QOOUC2J5.js → chunk-4RGZFA7H.js} +2 -2
- package/dist/{chunk-CXK4DZH3.js → chunk-4W2PE66Q.js} +12 -2
- package/dist/{chunk-CIRFIL4M.js → chunk-4WGMGKCZ.js} +13 -13
- package/dist/{chunk-JED6ZDEE.js → chunk-5HWPEYWB.js} +2 -2
- package/dist/{chunk-VQOCMUWI.js → chunk-65V6IRFN.js} +16 -14
- package/dist/{chunk-R3YSD62R.js → chunk-6AUZPPAV.js} +3 -3
- package/dist/{chunk-FQ7HTV52.js → chunk-6DCOIN4W.js} +33 -5
- package/dist/{chunk-MUE65OTD.js → chunk-6HTRCTAS.js} +4 -4
- package/dist/{chunk-TJVLKNGR.js → chunk-6KY7OCZC.js} +5 -5
- package/dist/{chunk-YAA6IID3.js → chunk-774C2FF3.js} +2 -2
- package/dist/{chunk-UBLHQTLV.js → chunk-7GUF6SDR.js} +15 -14
- package/dist/{chunk-5HILBT7X.js → chunk-7JDTNFAK.js} +3 -3
- package/dist/{chunk-QBZYACOG.js → chunk-ADYKAKE3.js} +3 -3
- package/dist/{chunk-H7KENAZO.js → chunk-AHXIMHDQ.js} +74 -14
- package/dist/chunk-AIMLCDAO.js +404 -0
- package/dist/{chunk-4IHAV6O7.js → chunk-ALYZ3MAA.js} +4 -4
- package/dist/{chunk-ROOE4R4Y.js → chunk-AN2DQB3G.js} +146 -18
- package/dist/{chunk-GCYTI3DE.js → chunk-AZNXGWDC.js} +56 -10
- package/dist/{chunk-3LK5DNED.js → chunk-B4XS2AF2.js} +3 -3
- package/dist/{chunk-3HF5YEFJ.js → chunk-BD3WGY4T.js} +4 -4
- package/dist/{chunk-4AQRFDXL.js → chunk-BFDVEO5R.js} +2 -2
- package/dist/{chunk-REJAIQ5S.js → chunk-BR7AYN76.js} +8 -8
- package/dist/{chunk-P3NRSSUU.js → chunk-BULHGPHK.js} +3 -3
- package/dist/{chunk-VILVLS7P.js → chunk-CK2GMDXD.js} +8 -4
- package/dist/{chunk-HHKO6SKY.js → chunk-CMVZWP32.js} +3 -3
- package/dist/{chunk-GJFAMOGK.js → chunk-CQFNIIQN.js} +7 -7
- package/dist/{chunk-FT3ZYWET.js → chunk-DWUMPMV2.js} +11 -10
- package/dist/{chunk-USZW2HHU.js → chunk-EQW6HOP4.js} +4 -3
- package/dist/{chunk-Z5QVYKR7.js → chunk-FFXCKZOU.js} +4 -4
- package/dist/{chunk-WRNFDFPU.js → chunk-FGDSTT3F.js} +2 -2
- package/dist/{chunk-FY5MSZAP.js → chunk-FLDC7ZAK.js} +21 -6
- package/dist/{chunk-AAXZDUOV.js → chunk-FT7TPPZ5.js} +17 -16
- package/dist/{chunk-3QD7VP3U.js → chunk-FUKNRLIJ.js} +14 -7
- package/dist/{chunk-3YRPZ7ZZ.js → chunk-FXCB7H5O.js} +4 -4
- package/dist/{chunk-SMRFPVLQ.js → chunk-GABSL6TH.js} +4 -4
- package/dist/{chunk-BKVOYV6I.js → chunk-GAWKIIPO.js} +17 -17
- package/dist/{chunk-HWX6ZHF3.js → chunk-GMAH572Z.js} +6 -6
- package/dist/{chunk-MUVJ57EP.js → chunk-GMIJ35PW.js} +23 -20
- package/dist/{chunk-7QE3XMRK.js → chunk-GQ644SPD.js} +18 -18
- package/dist/{chunk-5QKQSSPO.js → chunk-GRM2A4BG.js} +4 -4
- package/dist/{chunk-J7KJR3R6.js → chunk-GWQJKTFS.js} +133 -696
- package/dist/{chunk-OTOHI4JO.js → chunk-H3HFC3SQ.js} +2 -2
- package/dist/{chunk-SWSIKFEB.js → chunk-HE5J53SZ.js} +4 -4
- package/dist/{chunk-7BIZCTAX.js → chunk-HNBY6CNV.js} +3 -3
- package/dist/{chunk-J76PIKAT.js → chunk-HO3RCNF6.js} +3 -3
- package/dist/{chunk-44VCIPHF.js → chunk-HORZ5H2L.js} +26 -23
- package/dist/{chunk-MX2EY5Y7.js → chunk-HOXKNRON.js} +2 -2
- package/dist/{chunk-LTXOLDUZ.js → chunk-I64ECJX3.js} +12 -5
- package/dist/{chunk-4YFKQ5WT.js → chunk-IQJCVREL.js} +8 -8
- package/dist/{chunk-YIBAWQGJ.js → chunk-J7HI6G3G.js} +7 -7
- package/dist/{chunk-ICPJPQ5C.js → chunk-JHOAH4TI.js} +3 -3
- package/dist/{chunk-6EJITS44.js → chunk-JTMSWEIW.js} +6 -6
- package/dist/{chunk-WBM7ZNDI.js → chunk-JYDMBWRP.js} +35 -18
- package/dist/{chunk-7DF4J4RL.js → chunk-KKHCNSKK.js} +17 -11
- package/dist/{chunk-4UNQ6X24.js → chunk-KUSAVOWZ.js} +4 -4
- package/dist/{chunk-77FGAVZC.js → chunk-LC3FFD43.js} +21 -19
- package/dist/{chunk-INE5YJBZ.js → chunk-LHILKFDP.js} +10 -10
- package/dist/{chunk-ONU3U4GL.js → chunk-LQHVDZYC.js} +52 -16
- package/dist/{chunk-75G3Q4DK.js → chunk-MA3HJZHB.js} +5 -5
- package/dist/{chunk-QVENJMNX.js → chunk-MEQYZZFR.js} +2 -2
- package/dist/{chunk-IM6PDDCE.js → chunk-NNUMX6WX.js} +42 -12
- package/dist/{chunk-FQMUHRVC.js → chunk-NNYFQOTK.js} +14 -13
- package/dist/{chunk-H6PI3KJT.js → chunk-ODUT5WMC.js} +2 -2
- package/dist/{chunk-K4EOKJA6.js → chunk-P3H7QVDH.js} +42 -15
- package/dist/{chunk-FUPF2UYQ.js → chunk-PIXZTCKH.js} +51 -108
- package/dist/{chunk-BPY242XU.js → chunk-PKNNHU7H.js} +19 -8
- package/dist/{chunk-BPIZNB5O.js → chunk-PT4SW76W.js} +11 -11
- package/dist/{chunk-UNURMIQO.js → chunk-PV2QO7QL.js} +4 -4
- package/dist/{chunk-LGT3PZCJ.js → chunk-PYO4TJJ3.js} +17 -17
- package/dist/{chunk-EMLPOL77.js → chunk-Q7AH665U.js} +15 -8
- package/dist/{chunk-LBMS4AW6.js → chunk-QAALSCKI.js} +14 -14
- package/dist/{chunk-JRCOYRRH.js → chunk-QI3BOLQB.js} +8 -8
- package/dist/{chunk-CCNDLW7Z.js → chunk-QWIBT6DS.js} +13 -13
- package/dist/{chunk-GU46PPT3.js → chunk-QXGACPS2.js} +5 -5
- package/dist/{chunk-FMDSF3OV.js → chunk-QZAW5SFH.js} +2 -2
- package/dist/{chunk-QHXCAEMX.js → chunk-R5NH5BZG.js} +8 -8
- package/dist/{chunk-5223KXFD.js → chunk-RJ5LBZ5U.js} +7 -7
- package/dist/{chunk-PRI2OD4E.js → chunk-RW5PEJ7D.js} +11 -6
- package/dist/{chunk-DYWQFQJP.js → chunk-SG4PRYO3.js} +22 -20
- package/dist/{chunk-NNS4E7CW.js → chunk-SGPFVDUL.js} +15 -6
- package/dist/{chunk-ZEF5M5MB.js → chunk-SQCBSFT5.js} +72 -74
- package/dist/{chunk-3HGU63UY.js → chunk-U7NKYLX2.js} +14 -13
- package/dist/chunk-U7VO6JAA.js +566 -0
- package/dist/{chunk-ZJV7GYR4.js → chunk-UFQJMOVZ.js} +10 -10
- package/dist/{chunk-Z72XRXD4.js → chunk-UJRTPOHH.js} +3 -3
- package/dist/{chunk-J6QROYDA.js → chunk-UK6DKJLD.js} +26 -10
- package/dist/{chunk-QZX5S6R3.js → chunk-UKP5HWB5.js} +149 -89
- package/dist/{chunk-T4A4TSTJ.js → chunk-UQRIKAMH.js} +21 -19
- package/dist/{chunk-TYS6CSS5.js → chunk-UU6LUYUH.js} +2 -2
- package/dist/{chunk-5BHJZH62.js → chunk-UVDCHR4E.js} +18 -6
- package/dist/{chunk-HQQNCY7W.js → chunk-VAO6ANGC.js} +5 -5
- package/dist/{chunk-6NYWYNBI.js → chunk-VGNIDAPQ.js} +4 -4
- package/dist/{chunk-VL2O2F3W.js → chunk-VHO3YBTB.js} +2 -2
- package/dist/{chunk-FHGVORFO.js → chunk-VIRANCNY.js} +14 -14
- package/dist/{chunk-XD6ZYURY.js → chunk-VJHBSPGF.js} +7 -14
- package/dist/{chunk-5RP7JRVP.js → chunk-VKNCC2GX.js} +12 -8
- package/dist/{chunk-TPFKKXCB.js → chunk-VRRDUYOK.js} +7 -7
- package/dist/{chunk-K2I2XOZD.js → chunk-W2DINCHL.js} +11 -11
- package/dist/{chunk-AUIM2NVH.js → chunk-W5KMNC5U.js} +8 -8
- package/dist/{chunk-FFUN5D66.js → chunk-WF64MW5G.js} +2 -2
- package/dist/{chunk-6LBQ7ELG.js → chunk-X3RXGSCZ.js} +40 -21
- package/dist/{chunk-HBPDFCQY.js → chunk-XEAQDIMF.js} +7 -6
- package/dist/{chunk-TTIM6YTT.js → chunk-XG4NWFPY.js} +17 -16
- package/dist/{chunk-7KINELPI.js → chunk-XQ4KN6JQ.js} +23 -23
- package/dist/{chunk-WBRZJOEC.js → chunk-XY3UDKKH.js} +4 -4
- package/dist/{chunk-5SEVICBT.js → chunk-YG2BEIQU.js} +14 -13
- package/dist/{chunk-BRENJ2BQ.js → chunk-YJVA3QUU.js} +24 -4
- package/dist/{chunk-KGVZ5VGH.js → chunk-YR43LJT5.js} +16 -15
- package/dist/{chunk-TLVIHFRO.js → chunk-ZKPPI6BF.js} +2 -2
- package/dist/{chunk-ARGMQ3H4.js → chunk-ZXUAPTCK.js} +3 -3
- package/dist/cli.cjs +156 -154
- package/dist/clock.js +9 -1
- package/dist/countdown.js +4 -3
- package/dist/dgmo-router-B4S23EBH.js +86 -0
- package/dist/dimensions-K6PGYYGT.js +22 -0
- package/dist/editor.js +33 -5
- package/dist/element.js +142 -132
- package/dist/element.mjs +1117 -452
- package/dist/flowchart-parser-LALR6J6F.js +21 -0
- package/dist/{flowchart-renderer-MNCDS7MV.js → flowchart-renderer-DXYB5YRF.js} +14 -14
- package/dist/highlight.js +37 -6
- package/dist/index.d.ts +4 -2
- package/dist/index.js +78 -73
- package/dist/layout-3BVDMKXI.js +15 -0
- package/dist/layout-3M5UYJHY.js +14 -0
- package/dist/{layout-2L3WMRYU.js → layout-3V2A4MUE.js} +8 -8
- package/dist/layout-4IHCMWZN.js +19 -0
- package/dist/layout-5XGYNYVT.js +9 -0
- package/dist/layout-AZUPXWSK.js +15 -0
- package/dist/{layout-F4WO357A.js → layout-CAAKQX4W.js} +3 -3
- package/dist/{layout-A5UHRWVH.js → layout-CB3XWCOI.js} +3 -3
- package/dist/{layout-OAC4PEAC.js → layout-E6HR6PXH.js} +7 -7
- package/dist/{layout-7QXCNOVS.js → layout-HBWT2G23.js} +3 -3
- package/dist/layout-KPQWJNAG.js +14 -0
- package/dist/layout-OL2XFJXA.js +17 -0
- package/dist/layout-WCAIKGZG.js +19 -0
- package/dist/layout-WSMPBQ4Q.js +17 -0
- package/dist/layout-ZE5DRJWX.js +20 -0
- package/dist/{layout-search-55FU6HD3.js → layout-search-34DPZD43.js} +51 -35
- package/dist/legend-constants-P5EQWRQQ.js +49 -0
- package/dist/{palettes-UDLZ2SA4.js → palettes-FGTNFARW.js} +4 -4
- package/dist/{parser-EYCKNKQA.js → parser-275KP7JO.js} +8 -8
- package/dist/parser-27Z76SN3.js +22 -0
- package/dist/parser-3CODK6RG.js +15 -0
- package/dist/{parser-YKYMQG3B.js → parser-3KIGEEJM.js} +6 -6
- package/dist/parser-3VSWEKBF.js +15 -0
- package/dist/parser-4E4I3GNT.js +13 -0
- package/dist/parser-5FGJSQNS.js +12 -0
- package/dist/parser-5HQXCNOS.js +12 -0
- package/dist/parser-5QPFOB5F.js +12 -0
- package/dist/parser-6B6SSZT7.js +11 -0
- package/dist/parser-6PPHAXXH.js +14 -0
- package/dist/parser-7JHWEWXM.js +13 -0
- package/dist/{parser-DQAFLUJB.js → parser-7JVIDLLR.js} +7 -7
- package/dist/parser-CKA3QMAG.js +18 -0
- package/dist/parser-CRKLXGW7.js +13 -0
- package/dist/parser-EXNBDNGY.js +11 -0
- package/dist/parser-FF4BMRSB.js +16 -0
- package/dist/parser-FOOFEJQU.js +13 -0
- package/dist/parser-G26MTBFS.js +11 -0
- package/dist/parser-GKP2MHHL.js +11 -0
- package/dist/parser-GN2MM5CC.js +11 -0
- package/dist/parser-IKWK2ZU3.js +18 -0
- package/dist/parser-IVGHXLZP.js +14 -0
- package/dist/parser-NNIL3HXU.js +11 -0
- package/dist/parser-RNLTBIJ6.js +19 -0
- package/dist/parser-UWRX52PC.js +16 -0
- package/dist/parser-VOERD6XR.js +14 -0
- package/dist/parser-XNKJCMMA.js +13 -0
- package/dist/parser-XVPTRWZ4.js +15 -0
- package/dist/parser-YSLNDFLV.js +22 -0
- package/dist/{parser-ZL5QUFVH.js → parser-ZGNXYFPS.js} +5 -5
- package/dist/parser-ZQDQTB4X.js +20 -0
- package/dist/pert.d.ts +2 -0
- package/dist/registry-CaSw0PSH.d.ts +350 -0
- package/dist/renderer-2C6DJRYN.js +24 -0
- package/dist/renderer-5MPN7CXZ.js +19 -0
- package/dist/renderer-6EN5XXJZ.js +27 -0
- package/dist/renderer-6WRYVM5R.js +24 -0
- package/dist/renderer-7NQSTQMQ.js +16 -0
- package/dist/renderer-7ZNVOVFG.js +16 -0
- package/dist/{renderer-DT4XRFEP.js → renderer-AK2WO4EI.js} +7 -7
- package/dist/renderer-COLQFSFV.js +26 -0
- package/dist/{renderer-3F7OS2AX.js → renderer-CWEFGEIC.js} +15 -15
- package/dist/renderer-D3BRNOMV.js +29 -0
- package/dist/renderer-HIFQVEJA.js +22 -0
- package/dist/renderer-JCZG6AYU.js +28 -0
- package/dist/{renderer-ZWIH4WDW.js → renderer-JTCX6PCG.js} +13 -13
- package/dist/renderer-JWGQSTMR.js +37 -0
- package/dist/{renderer-NHO46CT2.js → renderer-K7XLVPH5.js} +6 -6
- package/dist/renderer-KARQF3F3.js +22 -0
- package/dist/renderer-LVZAHRP6.js +34 -0
- package/dist/{renderer-CQY6ATOS.js → renderer-NE5W7CQP.js} +8 -8
- package/dist/renderer-QD2SJF2I.js +34 -0
- package/dist/renderer-RLMOTXZ6.js +37 -0
- package/dist/renderer-SQ54MDSA.js +26 -0
- package/dist/{renderer-HSHHVYWF.js → renderer-TYHGXAVT.js} +7 -7
- package/dist/renderer-UKXW2QPE.js +23 -0
- package/dist/renderer-UPF7NRTI.js +28 -0
- package/dist/renderer-VMH6L6CP.js +24 -0
- package/dist/{renderer-5DAKMIU2.js → renderer-WCWI4I6A.js} +5 -5
- package/dist/renderer-WFSUBKUL.js +25 -0
- package/dist/renderer-WNFXYYGL.js +21 -0
- package/dist/{renderer-KNFTTOBL.js → renderer-XTXSOK3L.js} +14 -14
- package/dist/renderer-YUKPS27O.js +24 -0
- package/dist/renderer-YUXGXGSW.js +27 -0
- package/dist/renderer-ZBTEX2JK.js +16 -0
- package/dist/renderer-radial-WF6VOUOD.js +21 -0
- package/dist/{resolver-EMTGNR3D.js → resolver-WFKZYBJ2.js} +4 -4
- package/dist/state-parser-L7DHZIQO.js +19 -0
- package/dist/state-renderer-TFEUOP4H.js +38 -0
- package/dist/{themes-32xj5ZTW.d.ts → themes-tbBkIVsn.d.ts} +2 -349
- package/docs/ai-integration.md +59 -58
- package/docs/language-reference.md +323 -286
- package/fonts/Inter-Bold.woff2 +0 -0
- package/fonts/Inter-Regular.woff2 +0 -0
- package/gallery/fixtures/boxes-and-lines-diverging.dgmo +1 -2
- package/gallery/fixtures/boxes-and-lines.dgmo +1 -1
- package/gallery/fixtures/clock.dgmo +1 -1
- package/gallery/fixtures/event-line.dgmo +1 -1
- package/gallery/fixtures/gantt-full.dgmo +1 -1
- package/gallery/fixtures/gantt-sprints.dgmo +9 -9
- package/gallery/fixtures/gantt.dgmo +1 -1
- package/gallery/fixtures/legacy-syntax-backcompat.dgmo +16 -0
- package/gallery/fixtures/state-tags.dgmo +40 -0
- package/gallery/fixtures/swimlane.dgmo +1 -1
- package/gallery/fixtures/timeline-intraday.dgmo +1 -1
- package/package.json +5 -1
- package/dist/analyzer-BJ54GIFB.js +0 -15
- package/dist/calculator-LDYQCDDY.js +0 -11
- package/dist/charts-d3-MXEP6BNP.js +0 -26
- package/dist/dgmo-router-X7ZGAPIE.js +0 -86
- package/dist/dimensions-45H6JQEY.js +0 -22
- package/dist/flowchart-parser-UKELHBSB.js +0 -21
- package/dist/layout-46N4JJYK.js +0 -17
- package/dist/layout-A4XWNVID.js +0 -14
- package/dist/layout-AM2JWW3X.js +0 -15
- package/dist/layout-EE6GE46Y.js +0 -17
- package/dist/layout-G23F7LDH.js +0 -9
- package/dist/layout-GM4UGR7B.js +0 -19
- package/dist/layout-GQQJXNYH.js +0 -15
- package/dist/layout-IIE2S5FK.js +0 -20
- package/dist/layout-VMCRX66I.js +0 -14
- package/dist/layout-ZDOSXL5G.js +0 -19
- package/dist/parser-2ECN6JA2.js +0 -16
- package/dist/parser-4WTIHM5J.js +0 -11
- package/dist/parser-5H2BTSJQ.js +0 -11
- package/dist/parser-75KVXUNS.js +0 -16
- package/dist/parser-774AC53T.js +0 -13
- package/dist/parser-BE4YCSRU.js +0 -11
- package/dist/parser-CNGUQUQI.js +0 -11
- package/dist/parser-DEUUSQIN.js +0 -22
- package/dist/parser-FXISIU6A.js +0 -14
- package/dist/parser-GTB4XC7P.js +0 -18
- package/dist/parser-GVEPAUSD.js +0 -12
- package/dist/parser-HSQGTY4G.js +0 -19
- package/dist/parser-HVKRINUS.js +0 -11
- package/dist/parser-J5MIEYO4.js +0 -15
- package/dist/parser-KMZIXLDZ.js +0 -13
- package/dist/parser-LJHXWSXU.js +0 -14
- package/dist/parser-PT3W72G5.js +0 -15
- package/dist/parser-SBJQDPHL.js +0 -15
- package/dist/parser-SUWWWCMX.js +0 -12
- package/dist/parser-SXDRNZOA.js +0 -13
- package/dist/parser-UMILOW3M.js +0 -14
- package/dist/parser-UP3AZ367.js +0 -13
- package/dist/parser-WHPRV3X5.js +0 -20
- package/dist/parser-WX3UODSJ.js +0 -12
- package/dist/parser-XCIEN3KN.js +0 -13
- package/dist/parser-XIRTUMVN.js +0 -18
- package/dist/parser-YKCGIG45.js +0 -11
- package/dist/parser-ZGM2OJ6Y.js +0 -22
- package/dist/renderer-4QB4K7Q3.js +0 -24
- package/dist/renderer-5H4SY7YY.js +0 -22
- package/dist/renderer-5PIQPFOX.js +0 -16
- package/dist/renderer-6MU37QF5.js +0 -19
- package/dist/renderer-AQVMWJ4M.js +0 -27
- package/dist/renderer-BDDW6K7N.js +0 -24
- package/dist/renderer-BNB3VIDY.js +0 -26
- package/dist/renderer-CVW75CXL.js +0 -37
- package/dist/renderer-ERHBSTQT.js +0 -25
- package/dist/renderer-IDPVUFNB.js +0 -28
- package/dist/renderer-ILX6BGKR.js +0 -21
- package/dist/renderer-JP663HKG.js +0 -22
- package/dist/renderer-MVUZBESR.js +0 -16
- package/dist/renderer-N4EBR2FV.js +0 -28
- package/dist/renderer-NO2QJ5LZ.js +0 -27
- package/dist/renderer-OGFV5RXX.js +0 -34
- package/dist/renderer-PDLESJMS.js +0 -37
- package/dist/renderer-T4MTNINC.js +0 -24
- package/dist/renderer-TOUGFGTM.js +0 -24
- package/dist/renderer-U3KPD43Y.js +0 -34
- package/dist/renderer-X334IJU2.js +0 -26
- package/dist/renderer-Y5OAMOCR.js +0 -23
- package/dist/renderer-YONAKAJU.js +0 -16
- package/dist/renderer-YWMI6Y2U.js +0 -29
- package/dist/renderer-radial-7CGZMVMS.js +0 -21
- package/dist/state-parser-BATWAID2.js +0 -18
- package/dist/state-renderer-3FKZJ3LP.js +0 -34
|
@@ -46,12 +46,13 @@
|
|
|
46
46
|
The universal core: the cross-cutting anti-patterns (highest value per token) and the one-line index of all 46 chart types. The blocks below are machine-extracted (HTML-comment anchors) and embedded verbatim into every AI surface — IDE rule files, the Claude skill, the CLAUDE.md snippet — by `scripts/gen-ai-core.mjs`. Edit them here; never hand-edit a generated surface.
|
|
47
47
|
|
|
48
48
|
<!-- AI-CORE:ANTIPATTERNS start -->
|
|
49
|
+
|
|
49
50
|
### Disambiguation — where DGMO diverges from LLM priors
|
|
50
51
|
|
|
51
52
|
LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the most common parse errors:
|
|
52
53
|
|
|
53
54
|
- **No colons in declarations, directives, tags, or data rows.** `bar Revenue` (not `bar: Revenue`); `series Cloud blue, Legacy red` (not `series: ...`); `North 850` (not `North: 850`); `tag Team as t` (not `tag: Team`). A colon binds a value only in metadata (`key: value`), class/function type separators, and a few scoped spots — see §26.
|
|
54
|
-
- **No Mermaid arrow-labels.** Put the label
|
|
55
|
+
- **No Mermaid arrow-labels.** Put the label _between_ the dashes: `A -Login-> B`, never `A -> B: Login`. Sequence: `->` sync, `~>` async; left-to-right only — no `<-` / `<~`.
|
|
55
56
|
- **No indented edges on a map.** Every map connection is ONE full line — `JFK ~daily~> LAX`; for a hub repeat the origin per spoke (`JFK ~daily~> LHR`, …). A bare source with indented `-> dest` legs errors as `Malformed edge`; indented legs are valid ONLY inside a `route` block (an ordered stop→stop voyage). Edge endpoints auto-create their POIs — don't add separate `poi` lines for places already in an edge.
|
|
56
57
|
- **No `|` metadata delimiter** (removed 0.18.0 → `E_PIPE_OPERATOR_REMOVED`). Use same-line `Name key: value, k2: v2` or indented `key: value`. (`|` survives only in wireframe `{A | B}` dropdowns, in-arrow label text, and quoted names.)
|
|
57
58
|
- **No removed participant keywords.** Do not write `X is a service` / `external` / `frontend` / `networking` / `gateway` — these were removed and error. A bare name renders the default shape; for a typed glyph use `is a person` / `is a database` / `is a queue`.
|
|
@@ -63,7 +64,7 @@ LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the
|
|
|
63
64
|
- **Declare before reference.** An edge target must be declared on a prior line; put metadata and edges on/under one declaration to avoid `Duplicate node` warnings.
|
|
64
65
|
- **No reference scaffolding in output.** Emit only DGMO source. This doc is organized with HTML-comment anchors (the `TYPE`, `TIPS`, and `AI-CORE` markers, each wrapped in comment delimiters); never copy any such `<!-- … -->` comment into a diagram. They mark sections of the docs, not DGMO syntax; the parser flags a stray HTML comment as an `Unexpected line` warning. (DGMO's only comment form is `//`.)
|
|
65
66
|
|
|
66
|
-
Two traps in the
|
|
67
|
+
Two traps in the _other_ direction (DGMO wants a colon / a space where you might not expect):
|
|
67
68
|
|
|
68
69
|
- **Infra node properties REQUIRE the colon** — `cache-hit: 80%`, `instances: 3`, `max-rps: 8000`, `latency-ms: 45`. But top-level infra **options** are space-separated (`default-rps 100`). Don't conflate them.
|
|
69
70
|
- **ER columns are space-separated** — `id int pk`, `email varchar` (the one SQL-DDL carve-out; everything else indented-typed uses a colon).
|
|
@@ -83,18 +84,21 @@ API Gateway t: Platform
|
|
|
83
84
|
Orders t: Product
|
|
84
85
|
Billing t: Product
|
|
85
86
|
```
|
|
87
|
+
|
|
86
88
|
<!-- AI-CORE:ANTIPATTERNS end -->
|
|
87
89
|
|
|
88
90
|
<!-- AI-CORE:STYLING start -->
|
|
91
|
+
|
|
89
92
|
### Make it look good — authoring guidance
|
|
90
93
|
|
|
91
94
|
Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply these unless the prompt says otherwise:
|
|
92
95
|
|
|
93
96
|
<!-- TITLE start -->
|
|
97
|
+
|
|
94
98
|
- **Always title it.** Every diagram gets a short title on the type-declaration line (`flowchart Checkout Flow`, `sequence Checkout`, `boxes-and-lines Service Map`) so it is self-describing — never leave the bare type keyword alone. Infer a fitting title from the request when the user gives none.
|
|
95
|
-
<!-- TITLE end -->
|
|
96
|
-
<!-- CATEGORIZE start -->
|
|
97
|
-
- **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have
|
|
99
|
+
<!-- TITLE end -->
|
|
100
|
+
<!-- CATEGORIZE start -->
|
|
101
|
+
- **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have _fewer_ values than it has members: each color should bucket two or more items so the palette compresses the diagram into a few meaningful kinds (aim for ~2–4 categories, and keep distinct colors well under half the item count). If you find yourself giving nearly every item its own value, you've enumerated, not categorized — merge the singletons up a level until each color groups at least two (a `cache` and a `database` are both `datastore`; a caller and a gateway are both `client`; two microservices are both `service`). One color per item is the same visual noise as random colors — the grouping only earns its place when a color means "these belong together." Leave items uncolored only when they genuinely form a single undifferentiated kind, or the user asked for no color.
|
|
98
102
|
<!-- CATEGORIZE end -->
|
|
99
103
|
- **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
|
|
100
104
|
- **Let the defaults show.** Don't add `no-*` opt-outs unless the user asked to hide or disable something — they strip helpful labels, values, and color.
|
|
@@ -102,64 +106,66 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
|
|
|
102
106
|
<!-- AI-CORE:STYLING end -->
|
|
103
107
|
|
|
104
108
|
<!-- AI-CORE:TYPE-INDEX start -->
|
|
109
|
+
|
|
105
110
|
### Chart-type index (45) — pick the type, then fetch its section
|
|
106
111
|
|
|
107
|
-
| id
|
|
108
|
-
|
|
|
109
|
-
| `sequence`
|
|
110
|
-
| `flowchart`
|
|
111
|
-
| `state`
|
|
112
|
-
| `class`
|
|
113
|
-
| `er`
|
|
114
|
-
| `c4`
|
|
115
|
-
| `infra`
|
|
116
|
-
| `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags
|
|
117
|
-
| `sitemap`
|
|
118
|
-
| `mindmap`
|
|
119
|
-
| `org`
|
|
120
|
-
| `family`
|
|
121
|
-
| `bracket`
|
|
122
|
-
| `kanban`
|
|
123
|
-
| `gantt`
|
|
124
|
-
| `pert`
|
|
125
|
-
| `swimlane`
|
|
126
|
-
| `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style)
|
|
127
|
-
| `timeline`
|
|
128
|
-
| `event-line`
|
|
129
|
-
| `body`
|
|
130
|
-
| `journey-map`
|
|
131
|
-
| `cycle`
|
|
132
|
-
| `raci`
|
|
133
|
-
| `tech-radar`
|
|
134
|
-
| `quadrant`
|
|
135
|
-
| `pyramid`
|
|
136
|
-
| `ring`
|
|
137
|
-
| `treemap`
|
|
138
|
-
| `block`
|
|
139
|
-
| `sketch`
|
|
140
|
-
| `goal`
|
|
141
|
-
| `countdown`
|
|
142
|
-
| `clock`
|
|
143
|
-
| `map`
|
|
144
|
-
| `wireframe`
|
|
145
|
-
| `bar`
|
|
146
|
-
| `line`
|
|
147
|
-
| `pie`
|
|
148
|
-
| `radar`
|
|
149
|
-
| `polar-area`
|
|
150
|
-
| `scatter`
|
|
151
|
-
| `heatmap`
|
|
152
|
-
| `funnel`
|
|
153
|
-
| `sankey`
|
|
154
|
-
| `arc`
|
|
155
|
-
| `slope`
|
|
156
|
-
| `venn`
|
|
157
|
-
| `wordcloud`
|
|
158
|
-
| `function`
|
|
112
|
+
| id | when to use |
|
|
113
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
+
| `sequence` | message / interaction flows over time |
|
|
115
|
+
| `flowchart` | decision trees and process flows |
|
|
116
|
+
| `state` | state-machine / lifecycle transitions |
|
|
117
|
+
| `class` | UML class hierarchies |
|
|
118
|
+
| `er` | database schemas and relationships |
|
|
119
|
+
| `c4` | system architecture (context / container / component / deployment) |
|
|
120
|
+
| `infra` | infrastructure traffic flow with RPS computation |
|
|
121
|
+
| `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
|
|
122
|
+
| `sitemap` | site / app navigation structure |
|
|
123
|
+
| `mindmap` | radial hierarchy of ideas from a central topic |
|
|
124
|
+
| `org` | reporting hierarchy |
|
|
125
|
+
| `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
|
|
126
|
+
| `bracket` | single-elimination tournament bracket: winners auto-advance; seed the field for a day-0 skeleton or list results casually; two sides mirror to a championship |
|
|
127
|
+
| `kanban` | task-board columns |
|
|
128
|
+
| `gantt` | project scheduling with task dependencies and milestones |
|
|
129
|
+
| `pert` | project network with three-point estimates and critical path |
|
|
130
|
+
| `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
|
|
131
|
+
| `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
|
|
132
|
+
| `timeline` | events, eras, and date ranges |
|
|
133
|
+
| `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
|
|
134
|
+
| `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
|
|
135
|
+
| `journey-map` | UX flow with emotion scores, phases, annotations |
|
|
136
|
+
| `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
|
|
137
|
+
| `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
|
|
138
|
+
| `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
|
|
139
|
+
| `quadrant` | 2×2 positioning matrix |
|
|
140
|
+
| `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
|
|
141
|
+
| `ring` | concentric rings of nested categories |
|
|
142
|
+
| `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
|
|
143
|
+
| `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
|
|
144
|
+
| `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
|
|
145
|
+
| `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
|
|
146
|
+
| `countdown` | live "N days until X" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type |
|
|
147
|
+
| `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
|
|
148
|
+
| `map` | geographic concept map: regions, points, routes |
|
|
149
|
+
| `wireframe` | low-fidelity UI layout with panels and controls |
|
|
150
|
+
| `bar` | categorical comparisons (multi-series via `stack` / `group`) |
|
|
151
|
+
| `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
|
|
152
|
+
| `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
|
|
153
|
+
| `radar` | multi-dimensional metrics |
|
|
154
|
+
| `polar-area` | radial bar chart |
|
|
155
|
+
| `scatter` | 2D points or bubble chart |
|
|
156
|
+
| `heatmap` | matrix intensity |
|
|
157
|
+
| `funnel` | conversion pipeline |
|
|
158
|
+
| `sankey` | flow / allocation |
|
|
159
|
+
| `arc` | network relationships (linear, or circular via `layout chord`) |
|
|
160
|
+
| `slope` | change between two periods |
|
|
161
|
+
| `venn` | set overlaps |
|
|
162
|
+
| `wordcloud` | term-frequency |
|
|
163
|
+
| `function` | mathematical expressions (colon required: `f(x): x^2`) |
|
|
159
164
|
|
|
160
165
|
**Need more than the index gives you?** Fetch the per-type section: MCP `get_language_reference(type)` / `get_examples(type)`, or read that type's section below. The `suggest_chart_type` tool returns the chosen type's section automatically.
|
|
161
166
|
|
|
162
167
|
**When the type isn't obvious, ask — don't guess.** Call `suggest_chart_type` first. If it returns an `⚠️ ASK THE USER` directive (the request is ambiguous between candidates, or nothing matched), present those candidate options to the user and wait for their pick before generating — never silently choose. A confident result (high/medium) you can proceed with.
|
|
168
|
+
|
|
163
169
|
<!-- AI-CORE:TYPE-INDEX end -->
|
|
164
170
|
|
|
165
171
|
<!-- The grouped data-chart / matrix ids share one documented section. This map is the single source of truth for which TYPE block each id resolves to (read by gen-ai-core.mjs and the MCP slicer). -->
|
|
@@ -208,7 +214,7 @@ tag GroupName as <alias>
|
|
|
208
214
|
- Must appear before diagram content
|
|
209
215
|
- Legacy bare shorthand (`tag Priority p`) and `alias` keyword (`tag Priority alias p`) emit `E_TAG_SHORTHAND_REMOVED` per TD-18
|
|
210
216
|
|
|
211
|
-
**Diagram types that support tags**: sequence, infra, org, c4, er, kanban, gantt, sitemap, timeline, boxes-and-lines
|
|
217
|
+
**Diagram types that support tags**: the tag model is near-universal across the structural types — sequence, infra, org, c4, er, kanban, gantt, sitemap, timeline, boxes-and-lines, state (§5.7), pert, swimlane, mindmap, journey-map, event-line, treemap, map, block, sketch, bracket, family, and wireframe all accept `tag <Group> as <alias>` blocks. Check the per-type Options section for the exact directive set; if a type draws a tag legend, it takes tags.
|
|
212
218
|
|
|
213
219
|
### 1.4 Same-Line Metadata
|
|
214
220
|
|
|
@@ -289,14 +295,17 @@ no-option-name // off
|
|
|
289
295
|
|
|
290
296
|
**Cross-cutting boolean directives** (recognized in every chart type that has the corresponding rendering surface):
|
|
291
297
|
|
|
292
|
-
| Directive
|
|
293
|
-
|
|
|
294
|
-
| `fill-tint`
|
|
295
|
-
| `fill-solid`
|
|
296
|
-
| `fill-outline` | No fill — shapes take the theme background fill; the intent color is carried entirely by the outline
|
|
297
|
-
| `no-title`
|
|
298
|
+
| Directive | Effect |
|
|
299
|
+
| -------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
300
|
+
| `fill-tint` | The default, spelled explicitly — shapes get the canonical 25% tint fill with a solid intent-color outline |
|
|
301
|
+
| `fill-solid` | Render nodes/bars at full intent saturation instead of the canonical 25% tint |
|
|
302
|
+
| `fill-outline` | No fill — shapes take the theme background fill; the intent color is carried entirely by the outline |
|
|
303
|
+
| `no-title` | Hide the diagram banner title in the rendered output (does not mutate the parsed model) |
|
|
304
|
+
| `no-legend` | Hide the legend and collapse the vertical band reserved for it — accepted by **every** chart type that renders a legend |
|
|
305
|
+
|
|
306
|
+
`no-legend` is universal: any chart that draws a legend suppresses it, including the data charts (multi-series `bar` / `line` / `radar`, `scatter`, `function`) whose legend was previously always shown, and the tag-legend charts (`sequence`, `kanban`, `timeline`, `org`, `c4`, `gantt`, `er`, `state`, …). Charts that render no legend at all accept the token as a harmless no-op, so authors never have to remember which types honour it.
|
|
298
307
|
|
|
299
|
-
Examples: `no-legend` (
|
|
308
|
+
Examples: `no-legend` (universal), `no-title` (all chart types with a banner title), `no-value` (boxes-and-lines, treemap, and the data-chart label family).
|
|
300
309
|
|
|
301
310
|
### 1.9 In-Arrow Message Labels
|
|
302
311
|
|
|
@@ -538,10 +547,10 @@ no full date at all; emits a soft `year 20XX` hint).
|
|
|
538
547
|
|
|
539
548
|
**Directives** (any date-bearing chart; position-independent):
|
|
540
549
|
|
|
541
|
-
| Directive
|
|
542
|
-
|
|
|
543
|
-
| `year 2026`
|
|
544
|
-
| `date-order dmy`
|
|
550
|
+
| Directive | Effect |
|
|
551
|
+
| ----------------- | ------------------------------------------------------- |
|
|
552
|
+
| `year 2026` | base year for bare month-days |
|
|
553
|
+
| `date-order dmy` | numeric slash/dash dates read day-first (default `mdy`) |
|
|
545
554
|
| `no-current-year` | a fully-bare chart errors instead of assuming this year |
|
|
546
555
|
|
|
547
556
|
**TIPS (AI authoring):**
|
|
@@ -549,7 +558,7 @@ no full date at all; emits a soft `year 20XX` hint).
|
|
|
549
558
|
- Prefer `Jul 4` or `07-04` + one `year 2026` line over repeating the ISO year
|
|
550
559
|
on every row — shorter and reproducible.
|
|
551
560
|
- `7/4` is **Jul 4** (US month-first). For day-first documents add `date-order
|
|
552
|
-
|
|
561
|
+
dmy` once at the top; then `7/4` is **Apr 7**.
|
|
553
562
|
- Month-name forms (`Jul 4`) are never ambiguous and ignore `date-order` — use
|
|
554
563
|
them when a mixed audience will read the source.
|
|
555
564
|
- Existing ISO dates keep working unchanged; this is a superset, not a
|
|
@@ -823,15 +832,16 @@ tag Team as t
|
|
|
823
832
|
APIServer t: Backend
|
|
824
833
|
BookDB t: Data
|
|
825
834
|
```
|
|
835
|
+
|
|
826
836
|
- Optional `as <alias>` postfix and same-line metadata.
|
|
827
837
|
- **No nesting.** A group cannot contain another `[...]` group; only indented components.
|
|
828
|
-
-
|
|
829
|
-
|
|
830
|
-
- `
|
|
838
|
+
- **Collapse:** a bare `collapsed` trailing flag on the group line (`[Backend] collapsed`, §1.8) starts the group collapsed — it renders as a single node showing the worst child health. (Legacy: indented `collapsed true` / `collapsed: true`.)
|
|
839
|
+
- Group properties (indented under the bracket line, colon-keyed like node properties):
|
|
840
|
+
- `instances: N` or `instances: N-M` — capacity multiplier on children (auto-scaling). The space forms `instances N` / `instances N-M` are accepted legacy.
|
|
831
841
|
|
|
832
842
|
### 4.7 Infra Options (Space-Separated, NO Colon)
|
|
833
843
|
|
|
834
|
-
- `direction-tb` (
|
|
844
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is LR)
|
|
835
845
|
- `default-latency-ms N`
|
|
836
846
|
- `default-rps N` — fallback edge RPS when no `rps` is declared on the edge node
|
|
837
847
|
- `default-uptime DECIMAL`
|
|
@@ -933,13 +943,11 @@ Bracket syntax only.
|
|
|
933
943
|
|
|
934
944
|
### 4.6 Options
|
|
935
945
|
|
|
936
|
-
- `direction-lr` (
|
|
937
|
-
- `orientation-vertical` (boolean; default is horizontal)
|
|
938
|
-
- `no-color` (boolean; default off — when on, all nodes resolve to the muted neutral fill instead of their default intent color)
|
|
946
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is TB). The key+value form `direction LR|TB` is accepted legacy.
|
|
939
947
|
- `fill-solid` / `fill-outline` (fill family; default is the 25% tint — `fill-solid` renders shapes at full intent color, `fill-outline` drops the fill and carries color on the outline alone)
|
|
940
948
|
- `no-notes` (boolean; default off — suppress all note boxes, see §4.7)
|
|
941
949
|
|
|
942
|
-
`no-color`
|
|
950
|
+
`no-color` was removed — node colors are assigned automatically by shape, and the parser raises a warning if the line is still present. Delete it.
|
|
943
951
|
|
|
944
952
|
### 4.7 Notes (Nodes)
|
|
945
953
|
|
|
@@ -960,7 +968,7 @@ node; an unknown id is an error, a duplicate note on a node is a warning
|
|
|
960
968
|
|
|
961
969
|
Notes work on **flowchart**, **state**, **class** (`note <ClassName>`),
|
|
962
970
|
**er** (`note <Table>`), and **boxes-and-lines** (`note <Box>`). Org and
|
|
963
|
-
sitemap are excluded — their indentation
|
|
971
|
+
sitemap are excluded — their indentation _is_ the tree structure, which
|
|
964
972
|
collides with the indented-body grammar.
|
|
965
973
|
|
|
966
974
|
---
|
|
@@ -983,10 +991,11 @@ state [Title]
|
|
|
983
991
|
|
|
984
992
|
```
|
|
985
993
|
StateName
|
|
986
|
-
StateName color
|
|
987
994
|
[*] // initial/final pseudostate
|
|
988
995
|
```
|
|
989
996
|
|
|
997
|
+
States have no color slot — color comes from the tag system (§5.7).
|
|
998
|
+
|
|
990
999
|
### 5.3 Transitions
|
|
991
1000
|
|
|
992
1001
|
| Type | Syntax |
|
|
@@ -1009,23 +1018,45 @@ references, and the `no-notes` opt-out (see §4.7).
|
|
|
1009
1018
|
|
|
1010
1019
|
### 5.6 Options
|
|
1011
1020
|
|
|
1012
|
-
- `direction-tb` (
|
|
1013
|
-
- `no-color` (boolean; default off — when on, all states resolve to the muted neutral fill instead of their default intent color)
|
|
1014
|
-
|
|
1015
|
-
**Color by state category** — declare a `tag <Name> as <alias>` group (§1.3), then assign each state `<alias>: <Value>` same-line (declare the assignments before the transitions):
|
|
1016
|
-
|
|
1017
|
-
```
|
|
1018
|
-
tag Phase as p
|
|
1019
|
-
Active blue
|
|
1020
|
-
Done green
|
|
1021
|
-
Pending p: Active
|
|
1022
|
-
Shipped p: Done
|
|
1023
|
-
Pending -ship-> Shipped
|
|
1024
|
-
```
|
|
1021
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is LR)
|
|
1025
1022
|
- `fill-solid` / `fill-outline` (fill family; default is the 25% tint — collapsed groups follow the same mode, e.g. full saturation under `fill-solid`)
|
|
1026
1023
|
- `no-notes` (boolean; default off — suppress all note boxes, see §4.7)
|
|
1027
|
-
|
|
1028
|
-
|
|
1024
|
+
- `active-tag GroupName` / `active-tag none` (§5.7)
|
|
1025
|
+
|
|
1026
|
+
### 5.7 Tags
|
|
1027
|
+
|
|
1028
|
+
State diagrams support the universal tag system (§1.3). Declare
|
|
1029
|
+
`tag <Group> as <alias>` blocks above the diagram body and apply values with
|
|
1030
|
+
same-line `key: value` metadata on a **state** line (tags describe states,
|
|
1031
|
+
not transitions — put the assignment on its own line):
|
|
1032
|
+
|
|
1033
|
+
```
|
|
1034
|
+
state Document Lifecycle
|
|
1035
|
+
tag Phase as ph
|
|
1036
|
+
Intake blue
|
|
1037
|
+
Review orange
|
|
1038
|
+
Terminal green
|
|
1039
|
+
|
|
1040
|
+
Draft ph: Intake
|
|
1041
|
+
Draft -submit-> In Review
|
|
1042
|
+
In Review ph: Review
|
|
1043
|
+
In Review -publish-> Published
|
|
1044
|
+
Published ph: Terminal
|
|
1045
|
+
```
|
|
1046
|
+
|
|
1047
|
+
- Either the alias (`ph:`) or the canonical group name (`phase:`) works as
|
|
1048
|
+
the metadata key.
|
|
1049
|
+
- Tagged states get the standard treatment — 25% tint fill + solid
|
|
1050
|
+
intent-color outline — and the `fill-*` family (§1.8) applies as usual.
|
|
1051
|
+
- Untagged states take the group's **first** value per §1.3. State is not in
|
|
1052
|
+
the neutral-gray carve-out.
|
|
1053
|
+
- Declaring a tag group renders the standard legend. With several groups the
|
|
1054
|
+
first declared one colors the diagram; `active-tag <Group>` picks another
|
|
1055
|
+
and `active-tag none` turns tag coloring off (states fall back to the
|
|
1056
|
+
default intent color).
|
|
1057
|
+
- Group colors (`[Group Name] color`) and collapsed-group stand-ins keep
|
|
1058
|
+
their explicit color — the tag channel never overrides one.
|
|
1059
|
+
- The `[*]` pseudostate is never tagged.
|
|
1029
1060
|
|
|
1030
1061
|
---
|
|
1031
1062
|
|
|
@@ -1092,7 +1123,7 @@ This is key-value metadata assignment, consistent with same-line metadata syntax
|
|
|
1092
1123
|
|
|
1093
1124
|
### 6.5 Options
|
|
1094
1125
|
|
|
1095
|
-
- `direction-tb` (
|
|
1126
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is TB)
|
|
1096
1127
|
- `sub-node-label Text`
|
|
1097
1128
|
- `show-sub-node-count`
|
|
1098
1129
|
- `hide`
|
|
@@ -1194,7 +1225,7 @@ Database is a container description: PostgreSQL with read replicas
|
|
|
1194
1225
|
|
|
1195
1226
|
### 7.8 Options
|
|
1196
1227
|
|
|
1197
|
-
- `direction-tb` (
|
|
1228
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is TB)
|
|
1198
1229
|
|
|
1199
1230
|
---
|
|
1200
1231
|
|
|
@@ -1461,7 +1492,7 @@ Blog
|
|
|
1461
1492
|
|
|
1462
1493
|
### 11.6 Options
|
|
1463
1494
|
|
|
1464
|
-
- `direction-tb` (
|
|
1495
|
+
- `direction-lr` / `direction-tb` (booleans, last one wins; default is LR)
|
|
1465
1496
|
|
|
1466
1497
|
---
|
|
1467
1498
|
|
|
@@ -1482,7 +1513,7 @@ gantt [Title]
|
|
|
1482
1513
|
### 12.2 Options (Space-Separated, NO Colon)
|
|
1483
1514
|
|
|
1484
1515
|
```
|
|
1485
|
-
start 2026-03-15
|
|
1516
|
+
start-date 2026-03-15
|
|
1486
1517
|
today-marker
|
|
1487
1518
|
today-marker 2026-03-27
|
|
1488
1519
|
critical-path
|
|
@@ -1570,7 +1601,7 @@ Design Review start: 2026-04-01
|
|
|
1570
1601
|
```
|
|
1571
1602
|
|
|
1572
1603
|
A task line MUST have `duration:` or `start:` (or both) in its metadata.
|
|
1573
|
-
Duration units: `min`, `h`, `d`, `bd` (business days), `w`, `m`, `q`, `y`, `
|
|
1604
|
+
Duration units: `min`, `h`, `d`, `bd` (business days), `w`, `m`, `q`, `y`, `sp` (sprints)
|
|
1574
1605
|
Uncertain: `duration: 10bd?` (trailing `?` on the value)
|
|
1575
1606
|
Progress: `progress: 80` in metadata (integer 0–100)
|
|
1576
1607
|
|
|
@@ -1638,24 +1669,24 @@ divvy shares 1 2 3
|
|
|
1638
1669
|
|
|
1639
1670
|
### Directives
|
|
1640
1671
|
|
|
1641
|
-
| Directive
|
|
1642
|
-
|
|
|
1643
|
-
| `time-unit <unit>`
|
|
1644
|
-
| `default-confidence <level>`
|
|
1645
|
-
| `direction
|
|
1646
|
-
| `node-detail <compact\|full>`
|
|
1647
|
-
| `no-analysis`
|
|
1648
|
-
| `trials <N>`
|
|
1649
|
-
| `seed <N>`
|
|
1650
|
-
| `scrubber-trials <N>`
|
|
1651
|
-
| `start-date <YYYY-MM-DD>`
|
|
1652
|
-
| `end-date <YYYY-MM-DD>`
|
|
1653
|
-
| `sprint-length <duration>`
|
|
1654
|
-
| `sprint-number <N>`
|
|
1655
|
-
| `sprint-start <YYYY-MM-DD>`
|
|
1656
|
-
| `active-tag <GroupName>`
|
|
1657
|
-
|
|
1658
|
-
Sprint mode activates automatically when `time-unit
|
|
1672
|
+
| Directive | Effect |
|
|
1673
|
+
| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1674
|
+
| `time-unit <unit>` | Unit for bare-number durations (default `d`); accepts `min`, `h`, `d`, `bd`, `w`, `sp` (sprints) |
|
|
1675
|
+
| `default-confidence <level>` | M-only heuristic: `high`, `medium`, `low`, or a custom `O/P` factor pair (e.g. `0.6/2.5`) |
|
|
1676
|
+
| `direction-lr` / `direction-tb` | Layout direction booleans (last one wins; default `LR`); key+value `direction LR\|TB` accepted legacy |
|
|
1677
|
+
| `node-detail <compact\|full>` | Visual density; `full` adds slack bars and σ-as-border-thickness |
|
|
1678
|
+
| `no-analysis` | Bare flag — hide the analysis layer (tornado + S-curve). The layer renders by default whenever Monte Carlo ran; this suppresses it. An explicit `viewState.an` (app toggle / share link) overrides it |
|
|
1679
|
+
| `trials <N>` | Canonical Monte Carlo trial count (`< 100` clamps to analytical) |
|
|
1680
|
+
| `seed <N>` | Mulberry32 PRNG seed for deterministic runs |
|
|
1681
|
+
| `scrubber-trials <N>` | Fast-MC trials for the interactive duration scrubber |
|
|
1682
|
+
| `start-date <YYYY-MM-DD>` | Anchor the forward pass — accepts the literal `now` |
|
|
1683
|
+
| `end-date <YYYY-MM-DD>` | Anchor the backward pass (mutually exclusive with `start-date`) |
|
|
1684
|
+
| `sprint-length <duration>` | Sprint length when sprint mode is active (default `2w`) |
|
|
1685
|
+
| `sprint-number <N>` | Starting sprint label N — cells render as `S<N+offset>` (default `1`) |
|
|
1686
|
+
| `sprint-start <YYYY-MM-DD>` | Optional ISO date the starting sprint begins on |
|
|
1687
|
+
| `active-tag <GroupName>` | Pre-expand a tag group + drive node fill |
|
|
1688
|
+
|
|
1689
|
+
Sprint mode activates automatically when `time-unit sp` is set, or explicitly when any `sprint-*` directive appears. ES/EF/LS/LF cells then render as `S5`, `S7`, etc.
|
|
1659
1690
|
|
|
1660
1691
|
### Activities
|
|
1661
1692
|
|
|
@@ -1722,14 +1753,14 @@ Bracketed `[group-name]` blocks cluster activities. Whether a group renders as a
|
|
|
1722
1753
|
sail to atoll 3 5 8
|
|
1723
1754
|
```
|
|
1724
1755
|
|
|
1725
|
-
Groups can author `collapsed
|
|
1756
|
+
Groups can author a bare `collapsed` trailing flag (§1.8) to start collapsed (legacy: `collapsed: true`).
|
|
1726
1757
|
|
|
1727
1758
|
### Same-line metadata
|
|
1728
1759
|
|
|
1729
1760
|
| Key | Where | Meaning |
|
|
1730
1761
|
| ------------------------------- | --------------- | --------------------------------------------------------------------------------- |
|
|
1731
1762
|
| `confidence` | activity | Per-activity override of `default-confidence` (`high` / `medium` / `low` / `O/P`) |
|
|
1732
|
-
| `collapsed` | group |
|
|
1763
|
+
| `collapsed` | group | bare trailing flag (§1.8) — start the group collapsed (legacy: `collapsed: true`) |
|
|
1733
1764
|
| tag aliases (e.g. `c: Captain`) | activity, group | Resolves to the declared tag group; drives node fill when the group is active |
|
|
1734
1765
|
|
|
1735
1766
|
### Tags
|
|
@@ -1806,7 +1837,7 @@ Henry Turner + Carina Smyth m: 1751
|
|
|
1806
1837
|
- **`generations`** (option): draws a left gutter of Roman-numeral generation labels (`Gen I`, `Gen II`, …) plus subtle zebra shading behind alternating generations.
|
|
1807
1838
|
- **`highlight <name>`** (directive): dims everyone outside that person's bloodline (ancestors + descendants + spouses stay lit).
|
|
1808
1839
|
- **Sex → color:** `sex: m` → blue, `sex: f` → purple, unset → gray (25% tint). An explicit `tag`/inline color overrides the sex color.
|
|
1809
|
-
- The union split cuts `m:` metadata first, THEN splits
|
|
1840
|
+
- The union split cuts `m:` metadata first, THEN splits `+` within the name region — so a `+` inside a quoted name (`"Anne + Jack"`) or a metadata value never mis-splits. Per-side `key: value` metadata on a union line is not supported — declare the person standalone.
|
|
1810
1841
|
|
|
1811
1842
|
---
|
|
1812
1843
|
|
|
@@ -1818,11 +1849,11 @@ Henry Turner + Carina Smyth m: 1751
|
|
|
1818
1849
|
**Styling tips:** Give each lane a color and let nodes inherit it — reach for a `tag` group only when you need a *second* dimension (e.g. risk) that deliberately breaks lane color. Echo the gateway/terminal delimiters (`<Review>`, `(Paid) success`) even though bare names also resolve — it keeps the source self-documenting. Put every edge label *inside* the arrow (`-invalid->`), never as a trailing word.
|
|
1819
1850
|
<!-- TIPS end -->
|
|
1820
1851
|
|
|
1821
|
-
Swimlane diagrams model a cross-functional process: actors/systems are **lanes**, the process flows along the flow axis (`direction
|
|
1852
|
+
Swimlane diagrams model a cross-functional process: actors/systems are **lanes**, the process flows along the flow axis (`direction-lr` default, `direction-tb` transposes; key+value `direction LR|TB` accepted legacy), and optional `[Phase]` columns group steps into stages. Nodes are tasks (bare), exclusive gateways (`<X>`), parallel gateways (`<+ X>`), terminals (`(X)`), and subprocesses (`[[X]]`). A `lane` block **owns its edges** — nodes and their outgoing `->` edges are written inline, no separate flow block. A back-edge to an earlier node draws a routed loop.
|
|
1822
1853
|
|
|
1823
1854
|
```
|
|
1824
1855
|
swimlane Weekly Publishing
|
|
1825
|
-
direction
|
|
1856
|
+
direction-lr
|
|
1826
1857
|
|
|
1827
1858
|
lane Writer gray
|
|
1828
1859
|
Draft Post -> Review
|
|
@@ -1846,15 +1877,15 @@ lane Social green
|
|
|
1846
1877
|
|
|
1847
1878
|
### Node tokens
|
|
1848
1879
|
|
|
1849
|
-
| Token
|
|
1850
|
-
|
|
|
1851
|
-
| `Submit Claim`
|
|
1852
|
-
| `<Validate>`
|
|
1853
|
-
| `<+ Fork>`
|
|
1854
|
-
| `(Start)`
|
|
1855
|
-
| `(!Rejected)`
|
|
1856
|
-
| `(Paid) success`
|
|
1857
|
-
| `[[Inspect Property]]` | subprocess (collapsible)
|
|
1880
|
+
| Token | Meaning |
|
|
1881
|
+
| ---------------------- | ---------------------------------------------------------- |
|
|
1882
|
+
| `Submit Claim` | task |
|
|
1883
|
+
| `<Validate>` | exclusive (XOR) gateway |
|
|
1884
|
+
| `<+ Fork>` | parallel (AND) gateway |
|
|
1885
|
+
| `(Start)` | terminal (neutral) |
|
|
1886
|
+
| `(!Rejected)` | error terminal (`!` prefix → red) |
|
|
1887
|
+
| `(Paid) success` | success terminal (trailing word → green); also `terminate` |
|
|
1888
|
+
| `[[Inspect Property]]` | subprocess (collapsible) |
|
|
1858
1889
|
|
|
1859
1890
|
### Flow & color
|
|
1860
1891
|
|
|
@@ -1962,9 +1993,9 @@ Indented shorthand also supports groups (place arrow directly after group header
|
|
|
1962
1993
|
|
|
1963
1994
|
### 13.6 Directives
|
|
1964
1995
|
|
|
1965
|
-
- `direction
|
|
1996
|
+
- `direction-tb` — top-to-bottom layout; `direction-lr` restates the `LR` default (booleans, last one wins; key+value `direction LR|TB` accepted legacy)
|
|
1966
1997
|
- `heat <Label> [low] [high]` — name a numeric colour ramp (see §13.8); one trailing color sets the high hue over a neutral low, two set explicit `low high` ramp endpoints (pairs with the `heat:` key)
|
|
1967
|
-
- `
|
|
1998
|
+
- `no-value` — suppress the per-box numeric value labels (values render by default; legacy `show-values` is accepted as a no-op)
|
|
1968
1999
|
|
|
1969
2000
|
### 13.7 Options
|
|
1970
2001
|
|
|
@@ -1981,7 +2012,6 @@ choropleth-style "heat dimension" alongside the categorical tag groups.
|
|
|
1981
2012
|
```
|
|
1982
2013
|
boxes-and-lines Fleet Crews
|
|
1983
2014
|
heat Crew blue
|
|
1984
|
-
show-values
|
|
1985
2015
|
|
|
1986
2016
|
Flagship heat: 120
|
|
1987
2017
|
Frigate heat: 40
|
|
@@ -1995,7 +2025,7 @@ Flagship -> Sloop
|
|
|
1995
2025
|
- `heat <Label> [low] [high]` names the dimension and optionally sets the
|
|
1996
2026
|
ramp endpoint colors: no color → primary hue / neutral low; one color → that
|
|
1997
2027
|
high hue / neutral low; two → explicit `low high` (e.g. `heat Risk green
|
|
1998
|
-
|
|
2028
|
+
red`). Order is literal — polarity (good vs bad) is your choice. A wide-hue-gap
|
|
1999
2029
|
pair routes through a neutral midpoint (so green→red mid values stay clean);
|
|
2000
2030
|
analogous pairs blend directly.
|
|
2001
2031
|
- The ramp anchors at `0` for all-non-negative data, else at the data minimum.
|
|
@@ -2006,7 +2036,7 @@ Flagship -> Sloop
|
|
|
2006
2036
|
between a tag group and the heat label, the tag group wins.
|
|
2007
2037
|
- When the heat ramp is active, every box tints along the min→max ramp and the
|
|
2008
2038
|
legend shows a gradient capsule; boxes without a `heat:` get a neutral fill.
|
|
2009
|
-
-
|
|
2039
|
+
- Each box's number also prints as text by default; suppress with `no-value`.
|
|
2010
2040
|
|
|
2011
2041
|
### 13.9 Tag groups (categorical color)
|
|
2012
2042
|
|
|
@@ -2243,7 +2273,6 @@ Q1 400 700 300 500
|
|
|
2243
2273
|
**Options (space-separated, NO colon):**
|
|
2244
2274
|
|
|
2245
2275
|
```
|
|
2246
|
-
title My Chart
|
|
2247
2276
|
x-label X Label
|
|
2248
2277
|
y-label Y Label
|
|
2249
2278
|
orientation-horizontal // bar: horizontal bars
|
|
@@ -2262,7 +2291,11 @@ no-auto-y // line: anchor the y-axis at 0 (opt out of auto-fit)
|
|
|
2262
2291
|
padded window around the data (min→max across all series, not a forced 0
|
|
2263
2292
|
baseline), so a tight high-valued series fills the plot. `no-auto-y` restores
|
|
2264
2293
|
the 0 baseline. Bars always anchor at 0 and ignore the flag.
|
|
2265
|
-
-
|
|
2294
|
+
- `title` directive removed — the chart title is line 1 (`bar My Chart`). Using
|
|
2295
|
+
`title` raises an error diagnostic.
|
|
2296
|
+
- Legend shows by default whenever the chart is multi-series; suppress it with
|
|
2297
|
+
the universal `no-legend` flag (§1.8). Single-series charts render no legend,
|
|
2298
|
+
and take the flag as a no-op.
|
|
2266
2299
|
|
|
2267
2300
|
**Value-display flags — show-everything default.** Every renderable part is on by default. Suppress with `no-*`:
|
|
2268
2301
|
|
|
@@ -2557,12 +2590,12 @@ Group a run of events into a labeled section with a `[Name]` bracket, then **ind
|
|
|
2557
2590
|
Tim Berners-Lee publishes the first site.
|
|
2558
2591
|
1993 Mosaic t: Browser
|
|
2559
2592
|
|
|
2560
|
-
[The App Era] collapsed
|
|
2593
|
+
[The App Era] collapsed
|
|
2561
2594
|
2005 Ajax t: Platform
|
|
2562
2595
|
```
|
|
2563
2596
|
|
|
2564
|
-
- **Trailing
|
|
2565
|
-
- **`collapsed
|
|
2597
|
+
- **Trailing tokens** after `]` — an optional bare `collapsed` flag (§1.8) and/or a named color, in either order (`[The 1960s] collapsed blue`). Legacy: `collapsed: true`.
|
|
2598
|
+
- **`collapsed`** folds the era into a single summary card (its name + a bulleted list of member events) while a bracket stays on the spine; in the app a reader toggles it live.
|
|
2566
2599
|
|
|
2567
2600
|
#### Directives
|
|
2568
2601
|
|
|
@@ -2672,7 +2705,7 @@ main
|
|
|
2672
2705
|
|
|
2673
2706
|
#### Directives
|
|
2674
2707
|
|
|
2675
|
-
- `direction
|
|
2708
|
+
- `direction-lr` / `direction-tb` — booleans, last one wins; `direction-lr` is the `LR` default (newest right), `direction-tb` the git-log column view. Key+value `direction LR|TB` accepted legacy.
|
|
2676
2709
|
- `no-labels` (hide messages), `no-lanes` (hide branch lanes), `no-head`.
|
|
2677
2710
|
|
|
2678
2711
|
### 16.5 Venn Diagrams
|
|
@@ -2751,7 +2784,7 @@ Development p: High
|
|
|
2751
2784
|
Auth System
|
|
2752
2785
|
description: Login, signup, OAuth
|
|
2753
2786
|
Dashboard
|
|
2754
|
-
Nice-to-haves p: Low
|
|
2787
|
+
Nice-to-haves p: Low collapsed
|
|
2755
2788
|
Dark Mode
|
|
2756
2789
|
```
|
|
2757
2790
|
|
|
@@ -2810,16 +2843,16 @@ Auth System
|
|
|
2810
2843
|
|
|
2811
2844
|
Same-line metadata uses the universal `key: value, key2: value2` form (§1.4). Recognized keys:
|
|
2812
2845
|
|
|
2813
|
-
| Key | Effect
|
|
2814
|
-
| --------------------------- |
|
|
2815
|
-
| `description` | Description text (see above).
|
|
2816
|
-
| `collapsed` | `true`
|
|
2817
|
-
| Tag alias (e.g. `p:`, `d:`) | Assigns the node to a tag-group value.
|
|
2846
|
+
| Key | Effect |
|
|
2847
|
+
| --------------------------- | ---------------------------------------------------------------------------------- |
|
|
2848
|
+
| `description` | Description text (see above). |
|
|
2849
|
+
| `collapsed` | Legacy `collapsed: true` — canonical is the bare trailing `collapsed` flag (§1.8). |
|
|
2850
|
+
| Tag alias (e.g. `p:`, `d:`) | Assigns the node to a tag-group value. |
|
|
2818
2851
|
|
|
2819
2852
|
```
|
|
2820
2853
|
Task p: High, d: Engineering
|
|
2821
2854
|
Demo Video description: 2-min product walkthrough
|
|
2822
|
-
Nice-to-haves p: Low
|
|
2855
|
+
Nice-to-haves p: Low collapsed
|
|
2823
2856
|
```
|
|
2824
2857
|
|
|
2825
2858
|
### Node color
|
|
@@ -2840,19 +2873,19 @@ Polish UX p: Medium
|
|
|
2840
2873
|
|
|
2841
2874
|
### Collapse
|
|
2842
2875
|
|
|
2843
|
-
Any node with children may be collapsed.
|
|
2876
|
+
Any node with children may be collapsed. Add a bare `collapsed` trailing flag to the node line (§1.8) to make a subtree start collapsed (legacy: `collapsed: true` in same-line metadata); collapsed nodes render with an accent drill-bar so they remain discoverable. The flag is case-sensitive lowercase — a node actually named "… Collapsed" (capitalized) or a quoted name keeps the word as label text. Collapse is **portable view-state** — because the `collapsed` marker lives in the source, every renderer (app, `dgmo` CLI, remark-dgmo, Obsidian, code-fence embeds) reproduces the collapsed view from the `.dgmo` alone; in the app, collapsing/expanding a node writes/removes the marker in the source (source stays the single source of truth), and a runtime `viewState.cg` from a share-link is applied in addition to source markers.
|
|
2844
2877
|
|
|
2845
2878
|
```
|
|
2846
|
-
Nice-to-haves p: Low
|
|
2879
|
+
Nice-to-haves p: Low collapsed
|
|
2847
2880
|
Dark Mode
|
|
2848
2881
|
Export PDF
|
|
2849
2882
|
```
|
|
2850
2883
|
|
|
2851
2884
|
### Options
|
|
2852
2885
|
|
|
2853
|
-
| Option | Effect
|
|
2854
|
-
| ---------------------- |
|
|
2855
|
-
| `active-tag GroupName` | Sets the default active tag group.
|
|
2886
|
+
| Option | Effect |
|
|
2887
|
+
| ---------------------- | -------------------------------------------------------------------- |
|
|
2888
|
+
| `active-tag GroupName` | Sets the default active tag group. |
|
|
2856
2889
|
| `color-by-depth` | Bare flag; colour nodes by depth instead of by tag (off by default). |
|
|
2857
2890
|
|
|
2858
2891
|
Universal options (`palette`, `theme`) apply as elsewhere.
|
|
@@ -3067,6 +3100,10 @@ Further-indented lines below a blip. Supports inline markdown (bold, italic, cod
|
|
|
3067
3100
|
|
|
3068
3101
|
Blips receive sequential global numbers. Order: quadrants clockwise (top-left → top-right → bottom-right → bottom-left), then by ring (innermost first), then declaration order.
|
|
3069
3102
|
|
|
3103
|
+
### Directives
|
|
3104
|
+
|
|
3105
|
+
- `no-blip-legend` — suppress the four-column blip listing. The listing renders by default on every surface (export and live/interactive alike). Legacy `show-blip-legend` is accepted as a no-op.
|
|
3106
|
+
|
|
3070
3107
|
---
|
|
3071
3108
|
|
|
3072
3109
|
## 21. Cycle Diagrams
|
|
@@ -3459,8 +3496,8 @@ Indented lines under a layer are description text. Markdown inline formatting is
|
|
|
3459
3496
|
|
|
3460
3497
|
### Directives
|
|
3461
3498
|
|
|
3462
|
-
| Directive
|
|
3463
|
-
|
|
|
3499
|
+
| Directive | Effect |
|
|
3500
|
+
| ----------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
3464
3501
|
| `fill-solid` / `fill-outline` | Render rings with full intent color, or outline-only, instead of the default 25% tint (fill family). |
|
|
3465
3502
|
|
|
3466
3503
|
`inverted` is **not** valid on ring diagrams (rings are rotationally symmetric). Using it emits an error-severity diagnostic and the line is discarded.
|
|
@@ -3526,13 +3563,13 @@ Operations t: Ops
|
|
|
3526
3563
|
|
|
3527
3564
|
### Color modes
|
|
3528
3565
|
|
|
3529
|
-
Three modes, with the source-declared default selected as **
|
|
3566
|
+
Three modes, with the source-declared default selected as **heat → tag → branch** — the universal precedence shared with map and boxes-and-lines. The `active-tag` directive pre-selects a dimension from source; the desktop app adds a runtime switcher that previews the others without editing source:
|
|
3530
3567
|
|
|
3531
|
-
| Mode | When it's the default
|
|
3532
|
-
| ---------- |
|
|
3533
|
-
| **
|
|
3534
|
-
| **
|
|
3535
|
-
| **branch** | neither tags nor heat
|
|
3568
|
+
| Mode | When it's the default | Coloring |
|
|
3569
|
+
| ---------- | --------------------------------------- | ------------------------------------------------------- |
|
|
3570
|
+
| **heat** | any `heat:` value / `heat` directive | value ramp over a second per-node `heat:` metric |
|
|
3571
|
+
| **tag** | a `tag` group is declared (and no heat) | categorical color per tag value (legend hover-dims) |
|
|
3572
|
+
| **branch** | neither tags nor heat | each top-level branch a distinct hue, tinted with depth |
|
|
3536
3573
|
|
|
3537
3574
|
### Tags
|
|
3538
3575
|
|
|
@@ -3544,29 +3581,29 @@ Add a per-node `heat:` number (a second metric, distinct from size; negatives/fl
|
|
|
3544
3581
|
|
|
3545
3582
|
### Node Metadata
|
|
3546
3583
|
|
|
3547
|
-
| Key | Type
|
|
3548
|
-
| ------- |
|
|
3549
|
-
| `heat` | number
|
|
3550
|
-
| `<tag>` | declared value
|
|
3584
|
+
| Key | Type | Default | Description |
|
|
3585
|
+
| ------- | -------------- | ------- | ----------------------------------------- |
|
|
3586
|
+
| `heat` | number | — | Color-by-value metric (signed / float ok) |
|
|
3587
|
+
| `<tag>` | declared value | — | Tag value via the group's alias or name |
|
|
3551
3588
|
|
|
3552
3589
|
### Directives
|
|
3553
3590
|
|
|
3554
|
-
| Directive
|
|
3555
|
-
|
|
|
3556
|
-
| `heat <Label>`
|
|
3557
|
-
| `
|
|
3558
|
-
| `
|
|
3559
|
-
| `no-
|
|
3560
|
-
| `no-percent`
|
|
3561
|
-
| `no-headers`
|
|
3562
|
-
| `no-legend`
|
|
3563
|
-
| `radial`
|
|
3591
|
+
| Directive | Effect |
|
|
3592
|
+
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
3593
|
+
| `heat <Label>` | Name (and optionally color) the value ramp; pairs with the `heat:` key. |
|
|
3594
|
+
| `active-tag <GroupName \| HeatLabel>` | Pre-select the resting color dimension from source: a tag group name for categorical fill, or the heat ramp's label (`Value` if unnamed) for the ramp. `active-tag none` forces branch mode. The app's runtime switcher still previews the others. |
|
|
3595
|
+
| `depth N` | Render N levels; deeper subtrees collapse to a drillable solid block (a render budget). |
|
|
3596
|
+
| `no-value` | Hide value labels. |
|
|
3597
|
+
| `no-percent` | Hide percentage labels. |
|
|
3598
|
+
| `no-headers` | Hide parent header bars (a no-op in `radial` mode). |
|
|
3599
|
+
| `no-legend` | Hide the legend. |
|
|
3600
|
+
| `radial` | Render as a **sunburst / hierarchical pie** (concentric rings) instead of rectangles. |
|
|
3564
3601
|
|
|
3565
3602
|
Numbers auto-compact (1.2M, 940k). Units live in the title — there is no format/currency directive.
|
|
3566
3603
|
|
|
3567
3604
|
### Radial mode (sunburst / hierarchical pie)
|
|
3568
3605
|
|
|
3569
|
-
Add a bare `radial` flag and the same hierarchy renders as a sunburst: the center disc is the whole (chart title + grand total), the first ring is the top-level groups, and each outer ring breaks a group into its parts. Tags, `heat`, and `no-
|
|
3606
|
+
Add a bare `radial` flag and the same hierarchy renders as a sunburst: the center disc is the whole (chart title + grand total), the first ring is the top-level groups, and each outer ring breaks a group into its parts. Tags, `heat`, and `no-value`/`no-percent`/`no-legend` all carry over; `no-headers` is a no-op. An arc's angle is its share of the whole; radius is depth only, so slices stay in **source order** and very thin arcs drop their inline label. Best for shallow trees (≈3 levels); for deep trees or precise magnitude, prefer the rectangular treemap.
|
|
3570
3607
|
|
|
3571
3608
|
```dgmo
|
|
3572
3609
|
treemap Plunder Spend ($k)
|
|
@@ -3656,18 +3693,18 @@ For an **uneven** span (a block covering some but not all columns), use the same
|
|
|
3656
3693
|
|
|
3657
3694
|
### Node Metadata
|
|
3658
3695
|
|
|
3659
|
-
| Key
|
|
3660
|
-
|
|
|
3661
|
-
| `span`
|
|
3662
|
-
| `collapsed` | flag
|
|
3663
|
-
| `<tag>`
|
|
3696
|
+
| Key | Type | Default | Description |
|
|
3697
|
+
| ----------- | -------------- | ------- | ------------------------------------------ |
|
|
3698
|
+
| `span` | integer ≥ 1 | 1 | Column span (clamps to the column count) |
|
|
3699
|
+
| `collapsed` | flag | — | Start this container folded (collapse-bar) |
|
|
3700
|
+
| `<tag>` | declared value | — | Tag value via the group's alias or name |
|
|
3664
3701
|
|
|
3665
3702
|
### Directives
|
|
3666
3703
|
|
|
3667
|
-
| Directive
|
|
3668
|
-
|
|
|
3669
|
-
| `columns N`
|
|
3670
|
-
| `no-legend`
|
|
3704
|
+
| Directive | Effect |
|
|
3705
|
+
| ----------- | ---------------------------------------------- |
|
|
3706
|
+
| `columns N` | Override the inferred column count for a grid. |
|
|
3707
|
+
| `no-legend` | Hide the tag legend. |
|
|
3671
3708
|
|
|
3672
3709
|
### Interactivity vs export
|
|
3673
3710
|
|
|
@@ -3733,18 +3770,18 @@ Indented under the source shape, targeting an alias (or an unambiguous bare labe
|
|
|
3733
3770
|
|
|
3734
3771
|
### Node Metadata
|
|
3735
3772
|
|
|
3736
|
-
| Key
|
|
3737
|
-
|
|
|
3738
|
-
| `shape`
|
|
3739
|
-
| `at`
|
|
3740
|
-
| `collapsed` | flag
|
|
3741
|
-
| `<tag>`
|
|
3773
|
+
| Key | Type | Default | Description |
|
|
3774
|
+
| ----------- | -------------- | ----------------------- | --------------------------------------------------------------- |
|
|
3775
|
+
| `shape` | closed set | rectangle | `database` / `queue` / `cloud` / `person` / `document` / `note` |
|
|
3776
|
+
| `at` | `C R` integers | flow-placed | Half-slot position (origin-normalized) |
|
|
3777
|
+
| `collapsed` | flag | — | Box only — start folded (collapse-bar) |
|
|
3778
|
+
| `<tag>` | declared value | untagged (neutral gray) | Tag value (cascades from box; edge tails color the line) |
|
|
3742
3779
|
|
|
3743
3780
|
### Directives
|
|
3744
3781
|
|
|
3745
|
-
| Directive
|
|
3746
|
-
|
|
|
3747
|
-
| `no-legend`
|
|
3782
|
+
| Directive | Effect |
|
|
3783
|
+
| ----------- | -------------------- |
|
|
3784
|
+
| `no-legend` | Hide the tag legend. |
|
|
3748
3785
|
|
|
3749
3786
|
### Interactivity vs export
|
|
3750
3787
|
|
|
@@ -3757,7 +3794,7 @@ In the desktop and web app a sketch opens in the **canvas editor** (the code pan
|
|
|
3757
3794
|
<!-- TYPE:goal -->
|
|
3758
3795
|
|
|
3759
3796
|
<!-- TIPS start -->
|
|
3760
|
-
**Styling tips:** A single progress-toward-a-target reading — one `now` against one `target`, answering "how close am I?". Reach for it for a KPI tile, a fundraising thermometer, a quarterly quota, or a completion percentage; there is no time axis, series, or milestones (use `line` for a trend, `countdown` for a live deadline). Put the **unit in the title** (`Marathon Fund ($)`, `Grog Barrel Fill (L)`) — there is no format/currency directive. `now` and `target` are **space-separated `key value`** directives, no colon (`now 6400` / `target 10000`); the percent is `now / target` and values auto-compact (`6.4k`, `1.2M`). Pick the face for the story with a bare flag on its own line: the default progress **bar** for a plain KPI, `thermometer` for fundraising/fill-the-tank framings, `gauge` for a speedometer/quota dial — all three read the same value pair. The fill is **auto traffic-light** by completion (`< 50%` red, `50–80%` orange, `≥ 80%` green; over-target stays green) so the color already reads the number's health — leave it unless you have reason to override with a trailing color on the title line (`goal Marathon Fund ($) green`) or `no-auto-color` (flat palette color). Over-target clamps the fill at 100% while the `%` label stays truthful (`120%`). Add a `note` — inline (`note Still waiting on three crews`) or a block header on its own line with an indented body — to caption the number with context (who's still owed, what's left); it takes simple markdown (`**bold**`, `*italic*`, `` `code` ``) and `- ` bullets. `fill-solid` for a bolder fill; `no-percent` / `no-value` / `no-title` / `no-
|
|
3797
|
+
**Styling tips:** A single progress-toward-a-target reading — one `now` against one `target`, answering "how close am I?". Reach for it for a KPI tile, a fundraising thermometer, a quarterly quota, or a completion percentage; there is no time axis, series, or milestones (use `line` for a trend, `countdown` for a live deadline). Put the **unit in the title** (`Marathon Fund ($)`, `Grog Barrel Fill (L)`) — there is no format/currency directive. `now` and `target` are **space-separated `key value`** directives, no colon (`now 6400` / `target 10000`); the percent is `now / target` and values auto-compact (`6.4k`, `1.2M`). Pick the face for the story with a bare flag on its own line: the default progress **bar** for a plain KPI, `thermometer` for fundraising/fill-the-tank framings, `gauge` for a speedometer/quota dial — all three read the same value pair. The fill is **auto traffic-light** by completion (`< 50%` red, `50–80%` orange, `≥ 80%` green; over-target stays green) so the color already reads the number's health — leave it unless you have reason to override with a trailing color on the title line (`goal Marathon Fund ($) green`) or `no-auto-color` (flat palette color). Over-target clamps the fill at 100% while the `%` label stays truthful (`120%`). Add a `note` — inline (`note Still waiting on three crews`) or a block header on its own line with an indented body — to caption the number with context (who's still owed, what's left); it takes simple markdown (`**bold**`, `*italic*`, `` `code` ``) and `- ` bullets. `fill-solid` for a bolder fill; `no-percent` / `no-value` / `no-title` / `no-notes` to drop labels.
|
|
3761
3798
|
<!-- TIPS end -->
|
|
3762
3799
|
|
|
3763
3800
|
A single progress-toward-a-target value: one `now` measured against one `target`, drawn in one of three static faces. No time axis, no series, no milestones — just "how close am I?". The face is a bare-flag mode directive under the title (like treemap's `radial`); all three faces consume the same value pair.
|
|
@@ -3785,18 +3822,18 @@ target 10000
|
|
|
3785
3822
|
|
|
3786
3823
|
### Directives
|
|
3787
3824
|
|
|
3788
|
-
| Directive
|
|
3789
|
-
|
|
|
3790
|
-
| `thermometer` / `gauge
|
|
3791
|
-
| `now <number>`
|
|
3792
|
-
| `target <number>`
|
|
3793
|
-
| `no-percent`
|
|
3794
|
-
| `no-value`
|
|
3795
|
-
| `fill-solid`
|
|
3796
|
-
| `no-title`
|
|
3797
|
-
| `no-
|
|
3798
|
-
| `no-auto-color`
|
|
3799
|
-
| `note <text>` / `note` + indented body | Free-text caption beside/below the face (§ note block).
|
|
3825
|
+
| Directive | Effect |
|
|
3826
|
+
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
3827
|
+
| `thermometer` / `gauge` | Select the render face (bare flag; omit for the progress bar). |
|
|
3828
|
+
| `now <number>` | Current value (required; may exceed the target). |
|
|
3829
|
+
| `target <number>` | Goal value (required; must be > 0). |
|
|
3830
|
+
| `no-percent` | Hide the `%` label. |
|
|
3831
|
+
| `no-value` | Hide the raw `now / target` label. |
|
|
3832
|
+
| `fill-solid` | Full-saturation fill instead of the default 25% tint (`fill-outline` hollows the meter — color on the rim). |
|
|
3833
|
+
| `no-title` | Hide the banner title. |
|
|
3834
|
+
| `no-notes` | Suppress the `note` block even if one is authored. |
|
|
3835
|
+
| `no-auto-color` | Disable the traffic-light bands; use the flat palette color. |
|
|
3836
|
+
| `note <text>` / `note` + indented body | Free-text caption beside/below the face (§ note block). |
|
|
3800
3837
|
|
|
3801
3838
|
### Note block
|
|
3802
3839
|
|
|
@@ -3813,7 +3850,7 @@ note
|
|
|
3813
3850
|
- Columbus — *almost there!*
|
|
3814
3851
|
```
|
|
3815
3852
|
|
|
3816
|
-
The body supports inline `**bold**` / `*italic*` / `` `code` ``, `- `/`* ` bullets, and blank-line gaps. It renders in the left column for `thermometer`/`gauge` and under the bar for the default face. `no-
|
|
3853
|
+
The body supports inline `**bold**` / `*italic*` / `` `code` ``, `- `/`* ` bullets, and blank-line gaps. It renders in the left column for `thermometer`/`gauge` and under the bar for the default face. `no-notes` hides it even when authored.
|
|
3817
3854
|
|
|
3818
3855
|
### Values & color
|
|
3819
3856
|
|
|
@@ -3830,10 +3867,10 @@ Percent is `now / target`. Over-target clamps the fill at 100% while the `%` lab
|
|
|
3830
3867
|
<!-- TYPE:countdown -->
|
|
3831
3868
|
|
|
3832
3869
|
<!-- TIPS start -->
|
|
3833
|
-
**Styling tips:** The only dynamic chart — it ticks every second and is accurate on every load, so use it for a live "N days until X" widget, not a static report. Keep the title to the event (`Trip to Japan`); the target date renders as a caption automatically. `target` is a space-separated `key value` directive (no colon): a bare date (`2026-08-21`) counts to midnight, a datetime or offset is honored.
|
|
3870
|
+
**Styling tips:** The only dynamic chart — it ticks every second and is accurate on every load, so use it for a live "N days until X" widget, not a static report. Keep the title to the event (`Trip to Japan`); the target date renders as a caption automatically. `target` is a space-separated `key value` directive (no colon): a bare date (`2026-08-21`) counts to the viewer's local midnight, a datetime or offset is honored. Default `units days` reads best for weeks/months out; use `units full` for a launch-day `Nd HH:MM:SS` clock. Set `expired` to the celebration text (`🚀 Shipped!`); after the target passes every live surface shows it and the tick stops. On images (PNG export, `.svg` via `<img>`, GitHub camo) it can't tick and shows the whole-day count baked at export time — the correct fallback.
|
|
3834
3871
|
<!-- TIPS end -->
|
|
3835
3872
|
|
|
3836
|
-
The only
|
|
3873
|
+
The only _dynamic_ dgmo chart: a single "N days until X" recomputed against the viewer's clock on every load and ticking every second on any live surface. Distinct from `goal` (static) — a countdown has no `now`/`target` pair, just one future instant. The renderer bakes a whole-day fallback number (the no-JS floor); a tiny page-level ticker overwrites it live and, in `units full`, upgrades it to `Nd HH:MM:SS`.
|
|
3837
3874
|
|
|
3838
3875
|
### Declaration
|
|
3839
3876
|
|
|
@@ -3855,12 +3892,12 @@ target 2026-08-21
|
|
|
3855
3892
|
|
|
3856
3893
|
### Directives
|
|
3857
3894
|
|
|
3858
|
-
| Directive
|
|
3859
|
-
|
|
|
3860
|
-
| `target <iso>`
|
|
3861
|
-
| `tz <IANA>`
|
|
3862
|
-
| `units <days\|full>`
|
|
3863
|
-
| `expired <text>`
|
|
3895
|
+
| Directive | Effect |
|
|
3896
|
+
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
3897
|
+
| `target <iso>` | The future instant (required). `2026-08-21`, `2026-08-21T18:00`, or with a tz offset. The literal `now` resolves at render (→ immediately expired; for testing). |
|
|
3898
|
+
| `tz <IANA>` | Pin authored times to a zone (`America/New_York`, `Asia/Kolkata`, `UTC`) so the count is the **same for every viewer** and doesn't drift when the host moves zones. Default viewer-local. Footer then shows the in-zone time + a `UTC±` tag. |
|
|
3899
|
+
| `units <days\|full>` | `days` (default) shows whole days (ceil); `full` ticks `Nd HH:MM:SS` on live surfaces. |
|
|
3900
|
+
| `expired <text>` | Shown once the target passes; the tick stops. Default `"Now!"`. |
|
|
3864
3901
|
|
|
3865
3902
|
### Values & color
|
|
3866
3903
|
|
|
@@ -3868,7 +3905,7 @@ A bare `YYYY-MM-DD` counts to **midnight** and a datetime with no offset to that
|
|
|
3868
3905
|
|
|
3869
3906
|
### Semantics
|
|
3870
3907
|
|
|
3871
|
-
Days mode uses `ceil` — a target later
|
|
3908
|
+
Days mode uses `ceil` — a target later _today_ reads "1 day", not "0". Full mode floors the days and shows `HH:MM:SS` for the remainder. Once the target passes, the `expired` text replaces the number and that node stops ticking (no negative counts). Live surfaces recompute from the absolute target on every load/route-change/note-open, so there is **no persisted state** and no drift; image surfaces (PNG, `.svg`-as-image, GitHub camo) show the whole-day count baked at export time.
|
|
3872
3909
|
|
|
3873
3910
|
---
|
|
3874
3911
|
|
|
@@ -3877,10 +3914,10 @@ Days mode uses `ceil` — a target later *today* reads "1 day", not "0". Full mo
|
|
|
3877
3914
|
<!-- TYPE:clock -->
|
|
3878
3915
|
|
|
3879
3916
|
<!-- TIPS start -->
|
|
3880
|
-
**Styling tips:** A live world clock — one panel per person or place, each showing the CURRENT time in its zone and ticking every second, accurate the instant the page loads. Reach for it to answer "what time is it for the crew right now": a distributed team's local times, a single collaborator's clock, or the overlap window for scheduling a call. The first line declares the type and a title (`Crew standups`). Each entry is one line, `<anchor> [as <label>]
|
|
3917
|
+
**Styling tips:** A live world clock — one panel per person or place, each showing the CURRENT time in its zone and ticking every second, accurate the instant the page loads. Reach for it to answer "what time is it for the crew right now": a distributed team's local times, a single collaborator's clock, or the overlap window for scheduling a call. The first line declares the type and a title (`Crew standups`). Each entry is one line, `<anchor> [as <label>]`, where the **anchor** names the zone in one of three forms (first match wins): (1) a **city name** resolved through a built-in gazetteer — just write it the way you'd say it (`London`, `New York`, `Los Angeles`, `Tokyo`, and aliases like `NYC`/`LA`/`Bombay`) — this is the easiest and preferred form; (2) an explicit **IANA id** containing a `/` (`Europe/London`, `America/New_York`) for anything ambiguous or obscure; (3) a raw **UTC offset** (`UTC`, `UTC+5:30`, `UTC-7`, `GMT+2`) — a FIXED offset that does not track daylight saving, so it renders with a small "no DST" marker and no sunrise line (use it for `UTC` itself or regions that don't shift, e.g. India `UTC+5:30`). You name the zone ONCE — do NOT write a place and an IANA zone as two tokens. Use `as <label>` to name the person or role (`New York as Dani (NY)`); the label becomes the caption and defaults to the resolved city. The single-clock case is common and encouraged — one title, one entry (`clock Dani` / `New York`). An ambiguous city (e.g. `San Jose`) errors listing the candidate zones; an unknown place is skipped with a did-you-mean. Global directives are flat, no colon: `analog` for analog dials (digital is the default face), `time-24` for a 24-hour readout (12h am/pm is the default), and optional context bands `hours 9-17` + `workweek mon-fri` (the window accepts `HH:MM` and am/pm, e.g. `hours 8:30-17:15`) to shade each zone's working window so out-of-hours people read at a glance. `no-sun` hides the sunrise/sundown indicator (on by default). Add `hours`/`workweek` only when the point is scheduling overlap; drop them for a plain "current time" widget. Zones are **colorized by default** (`color-by`, default `place` — a distinct palette accent per place); reach for a semantic mode when color should *mean* something: `color-by time` or `color-by daylight` make an at-a-glance world board read as day-vs-night (order the zones west→east so the daylight sweeps across), and `color-by work` turns a standup/team board green/amber/grey by availability — it needs `hours` set. A hand-set per-zone color (`London as UK team purple`) is a **defined** shade that always wins over the dimension, so you can pin one zone and let the rest follow. `color-by none` goes neutral. On image surfaces (PNG, `.svg` via `<img>`, GitHub camo) it can't tick and bakes the time at export — the correct graceful fallback.
|
|
3881
3918
|
<!-- TIPS end -->
|
|
3882
3919
|
|
|
3883
|
-
The second
|
|
3920
|
+
The second _dynamic_ dgmo chart (with `countdown`): a live board of world clocks recomputed against the viewer's clock every second. Flat syntax — the first line is `clock <Title>`; every other non-blank line is either a board-level directive (its first token is an option keyword) or a place row. Order-independent; no colons anywhere.
|
|
3884
3921
|
|
|
3885
3922
|
### Declaration
|
|
3886
3923
|
|
|
@@ -3889,11 +3926,11 @@ clock [Title]
|
|
|
3889
3926
|
|
|
3890
3927
|
analog // analog dials; digital is the default face
|
|
3891
3928
|
hours <start>-<end> // optional working window (24h, HH:MM or am/pm)
|
|
3892
|
-
|
|
3929
|
+
workweek <mon-fri | mon,wed,fri> // optional working days (default mon-fri)
|
|
3893
3930
|
no-sun // hide the sundown/sunrise line (on by default)
|
|
3894
3931
|
time-24 // 24-hour readout (12h am/pm is the default)
|
|
3895
3932
|
no-title // suppress the board title
|
|
3896
|
-
direction
|
|
3933
|
+
direction-lr // lay the panels out in a row (columns); direction-tb restates the default rows
|
|
3897
3934
|
color-by <place|work|daylight|time|none> // zone coloring; default place
|
|
3898
3935
|
|
|
3899
3936
|
<anchor> [as <label…>] [color]
|
|
@@ -3904,7 +3941,7 @@ color-by <place|work|daylight|time|none> // zone coloring; default place
|
|
|
3904
3941
|
```
|
|
3905
3942
|
clock Crew standups
|
|
3906
3943
|
hours 9-17
|
|
3907
|
-
|
|
3944
|
+
workweek mon-fri
|
|
3908
3945
|
|
|
3909
3946
|
London as UK team
|
|
3910
3947
|
New York as Dani (NY)
|
|
@@ -3924,15 +3961,15 @@ UTC as Servers
|
|
|
3924
3961
|
|
|
3925
3962
|
### Directives
|
|
3926
3963
|
|
|
3927
|
-
| Directive
|
|
3928
|
-
|
|
|
3929
|
-
| `analog`
|
|
3930
|
-
| `hours <start>-<end>`
|
|
3931
|
-
| `
|
|
3932
|
-
| `no-sun`
|
|
3933
|
-
| `time-24`
|
|
3934
|
-
| `no-title`
|
|
3935
|
-
| `direction
|
|
3964
|
+
| Directive | Effect |
|
|
3965
|
+
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
|
|
3966
|
+
| `analog` | Analog dials for the WHOLE board. Digital is the default face. |
|
|
3967
|
+
| `hours <start>-<end>` | Working window (e.g. `9-17`, `8:30-17:15`, or am/pm); drives the status chip, evaluated in each row's own zone. |
|
|
3968
|
+
| `workweek <range\|list>` | Working days: `mon-fri` or `mon,wed,fri`. Default Mon–Fri. No effect without `hours`. |
|
|
3969
|
+
| `no-sun` | Hide the sundown/sunrise line (on by default when the zone's city coordinates are known). |
|
|
3970
|
+
| `time-24` | 24-hour readout (12-hour am/pm is the default). |
|
|
3971
|
+
| `no-title` | Suppress the board title. |
|
|
3972
|
+
| `direction-lr` | Lay the panels out in a row (columns) instead of stacked; `direction-tb` restates the default rows. Key+value `direction lr | tb`(and`direction columns`) accepted legacy. |
|
|
3936
3973
|
| `color-by <place\|work\|daylight\|time\|none>` | Which dimension colors the zones. Default `place`; `color-by none` goes neutral. `place` = identity accent per place; `work` = green/amber/grey by the `hours` window; `daylight` = warm sun-up / cool sun-down; `time` = local-hour dawn→night ramp (order zones west→east). A hand-set (**defined**) per-zone trailing color always wins over the dimension. |
|
|
3937
3974
|
|
|
3938
3975
|
### Entry grammar
|
|
@@ -3985,18 +4022,18 @@ Black Pearl beats Salty Dog 6-5
|
|
|
3985
4022
|
|
|
3986
4023
|
### Directives
|
|
3987
4024
|
|
|
3988
|
-
| Directive
|
|
3989
|
-
|
|
|
3990
|
-
| `rounds A, B, C`
|
|
3991
|
-
| `seed N [Name] [k: v]`
|
|
3992
|
-
| `tag Group [as g]`
|
|
3993
|
-
| `[Side] [color]`
|
|
3994
|
-
| `[Winner] beats [Loser] [score] [@ Home]` | A decided match — the left name advances; score is cosmetic; `@ Home` marks the host. Indent prose under it for commentary.
|
|
3995
|
-
| `[A] vs [B]`
|
|
3996
|
-
|
|
|
3997
|
-
| `no-round`
|
|
3998
|
-
| `no-legend`
|
|
3999
|
-
| `single-elim` / `double-elim` / `seeded`
|
|
4025
|
+
| Directive | Effect |
|
|
4026
|
+
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
4027
|
+
| `rounds A, B, C` | Name the columns entry-round → inner (or an indented block with per-round `Name color`); absent → generic `Round N` / `Final`. |
|
|
4028
|
+
| `seed N [Name] [k: v]` | Declare a seeded entrant → seeded mode + day-0 skeleton (top seeds get byes); trailing `k: v` tags the team. |
|
|
4029
|
+
| `tag Group [as g]` | Tag group (block/kanban idiom) — a competitor's tag value colors its box outline; a legend renders. |
|
|
4030
|
+
| `[Side] [color]` | A bracket column (kanban idiom); two sides mirror to a center championship. |
|
|
4031
|
+
| `[Winner] beats [Loser] [score] [@ Home]` | A decided match — the left name advances; score is cosmetic; `@ Home` marks the host. Indent prose under it for commentary. |
|
|
4032
|
+
| `[A] vs [B]` | A pending, undecided match (both boxes drawn, no winner emphasis). |
|
|
4033
|
+
| trailing color on the title line | Winner accent color override (default blue), e.g. `bracket Champions Cup red` (§1.5 title-line accent slot). Legacy `accent <color>` directive is accepted; the title-line token wins on conflict. Tags/sides still win per-box. |
|
|
4034
|
+
| `no-round` | Suppress the round/column labels. |
|
|
4035
|
+
| `no-legend` | Hide the tag legend (outlines still colored). |
|
|
4036
|
+
| `single-elim` / `double-elim` / `seeded` | Format flags. `double-elim` reserved — not yet supported; `seeded` forces seeded mode. |
|
|
4000
4037
|
|
|
4001
4038
|
### Semantics
|
|
4002
4039
|
|
|
@@ -4104,7 +4141,7 @@ Markers in cells are always **rendered in canonical alphabet order** (`R A C I`,
|
|
|
4104
4141
|
<!-- TYPE:map -->
|
|
4105
4142
|
|
|
4106
4143
|
<!-- TIPS start -->
|
|
4107
|
-
**Styling tips:** the zero-config map already looks good — name places and stop. When POIs fall into categories, tag them so each category gets its own color; keep place labels to the place name; leave region colorize and coastlines on unless the user asks to hide them. **For flights and airport routes, use IATA codes, not city names** — `LHR ~> JFK`, `LHR ~> DXB`, `LHR ~> SIN`, `LHR ~> HND` — the bundled airport set (large international hubs + all US commercial airports) resolves them to the right coordinates and labels them with the code. **For cities, use the exact canonical name**: "New York City" (NOT "New York"), "Washington, D.C.", etc. — a name the gazetteer doesn't have **silently drops that point** and the map just reframes around the rest, so it looks fine but is wrong. When unsure of the exact token, look it up: `dgmo map-search "<place>"` (or the `lookup_map_location` MCP tool) returns the city name or airport code to paste; fall back to coordinates (`poi Name as 40.71,-74.0`) for anything not found. **For routes/flows from a hub** (an airport's daily flights, a distribution center's shipments), write ONE edge per line and repeat the origin — never indented edges (those error). Use **arcs** (`~>`) for flights and long-haul links so the spokes separate; the connector label carries the relationship (`~daily~>`, `~2x daily~>`). Endpoints auto-create POIs, so don't add separate `poi` lines for places already in an edge. Reach for a `route` block only when the trip is an **ordered voyage** that continues stop→stop (a cruise itinerary), not a set of independent routes from one origin.
|
|
4144
|
+
**Styling tips:** the zero-config map already looks good — name places and stop. When POIs fall into categories, tag them so each category gets its own color; keep place labels to the place name; leave region colorize and coastlines on unless the user asks to hide them. **For flights and airport routes, use IATA codes, not city names** — `LHR ~> JFK`, `LHR ~> DXB`, `LHR ~> SIN`, `LHR ~> HND` — the bundled airport set (large international hubs + all US commercial airports) resolves them to the right coordinates and labels them with the code. **For cities, use the exact canonical name**: "New York City" (NOT "New York"), "Washington, D.C.", etc. — a name the gazetteer doesn't have **silently drops that point** and the map just reframes around the rest, so it looks fine but is wrong. When unsure of the exact token, look it up: `dgmo map-search "<place>"` (or the `lookup_map_location` MCP tool) returns the city name or airport code to paste; fall back to coordinates (`poi Name as 40.71,-74.0`) for anything not found. **For routes/flows from a hub** (an airport's daily flights, a distribution center's shipments), write ONE edge per line and repeat the origin — never indented edges (those error). Use **arcs** (`~>`) for flights and long-haul links so the spokes separate; the connector label carries the relationship (`~daily~>`, `~2x daily~>`). Endpoints auto-create POIs, so don't add separate `poi` lines for places already in an edge. Reach for a `route` block only when the trip is an **ordered voyage** that continues stop→stop (a cruise itinerary), not a set of independent routes from one origin.
|
|
4108
4145
|
<!-- TIPS end -->
|
|
4109
4146
|
|
|
4110
4147
|
Geographic concept maps: highlight/shade political subdivisions, drop points of interest (POIs), and connect them with routes or edges. For "share a concept" business maps, not cartography. Renders at a fixed, auto-fit position — no pan/zoom. Basemap and viewport are **inferred from the content you reference** — most maps need no directives. v1 boundaries: world countries + US states.
|
|
@@ -4185,15 +4222,15 @@ Flag a POI with `clock` and it grows a **live local-time card** above the marker
|
|
|
4185
4222
|
```
|
|
4186
4223
|
map Team offices
|
|
4187
4224
|
hours 9-17 # per-pin availability window (open/closed dot)
|
|
4188
|
-
|
|
4225
|
+
workweek mon-fri
|
|
4189
4226
|
poi San Francisco clock # zone auto-derived from the place
|
|
4190
4227
|
poi London clock
|
|
4191
4228
|
poi Bengaluru clock
|
|
4192
4229
|
poi 1.29 103.85 as SG clock: Asia/Singapore # bare-coord pin names its zone
|
|
4193
4230
|
```
|
|
4194
4231
|
|
|
4195
|
-
- **The place picks the zone — don't type it.** A named city derives its IANA zone from the gazetteer (correct by construction, e.g. Austin → Central). Only a **bare-coordinate** pin needs the valued form `clock: <zone>` — an IANA id (`Asia/Tokyo`) or a fixed offset (`clock: UTC+9`, no DST). The valued form also
|
|
4196
|
-
- `hours 9-17` + `
|
|
4232
|
+
- **The place picks the zone — don't type it.** A named city derives its IANA zone from the gazetteer (correct by construction, e.g. Austin → Central). Only a **bare-coordinate** pin needs the valued form `clock: <zone>` — an IANA id (`Asia/Tokyo`) or a fixed offset (`clock: UTC+9`, no DST). The valued form also _overrides_ a city, but a mismatch warns (you almost never want it).
|
|
4233
|
+
- `hours 9-17` + `workweek mon-fri` (map-level) give a status dot per pin — green open / amber opening soon / hollow closed·weekend — evaluated in **each pin's own zone**.
|
|
4197
4234
|
- Use `label:` for a multi-word office name (`poi Los Angeles clock, label: El Segundo`); the `as` alias is a single word and doesn't render.
|
|
4198
4235
|
- The card ticks every second on live surfaces and bakes a snapshot for PNG/SVG. It shows the weekday only when the pin's day differs from the viewer's.
|
|
4199
4236
|
|
|
@@ -4212,12 +4249,12 @@ There is no header `style:` — bow a whole voyage by using `~>` on every leg.
|
|
|
4212
4249
|
|
|
4213
4250
|
Native edges handle any other connection (no `link`/`leg` keyword). A token draws an arrowhead iff it ends in `>`, an arc iff it starts with `~`; drop the `>` for a plain line when an arrow would mislead. The label always sits between the delimiters:
|
|
4214
4251
|
|
|
4215
|
-
|
|
|
4216
|
-
|
|
4217
|
-
| directed straight
|
|
4218
|
-
| directed arc
|
|
4219
|
-
| undirected straight | `A -- B` | `A -ferry- B`
|
|
4220
|
-
| undirected arc
|
|
4252
|
+
| | no label | labeled |
|
|
4253
|
+
| ------------------- | -------- | -------------- |
|
|
4254
|
+
| directed straight | `A -> B` | `A -ships-> B` |
|
|
4255
|
+
| directed arc | `A ~> B` | `A ~trade~> B` |
|
|
4256
|
+
| undirected straight | `A -- B` | `A -ferry- B` |
|
|
4257
|
+
| undirected arc | `A ~~ B` | `A ~cable~ B` |
|
|
4221
4258
|
|
|
4222
4259
|
```
|
|
4223
4260
|
A -> B # one-off, directed
|
|
@@ -4254,7 +4291,7 @@ cove -> hav l: March # the LINE turns green
|
|
|
4254
4291
|
- Title is the declaration line; `caption` (data-source attribution, travels with the exported PNG) is the only chrome directive. There is no `subtitle`.
|
|
4255
4292
|
- Legend auto-composes below the title: the heat ramp + `region-heat` and each tag group are **selectable colouring groups** (collapse/activate to flip the fill); POI size (`poi-size`) and edge thickness (`flow-width`) are self-evident from scale and carry no legend key in v1. `no-legend` suppresses all of it.
|
|
4256
4293
|
- **Region and POI labels are on by default.** Region labels auto-fit **full → abbrev → hide** (a US-state 2-letter abbreviation is tried when the full name doesn't fit; other regions degrade full → hide); POI labels are collision-managed. Labels render **on the map** (export-safe), escalating inline → leader line → numbered pin in dense clusters; markers never move. A wide map in a narrow column (< ~480px) prefers abbreviations and drops reference relief, as if zoomed out.
|
|
4257
|
-
- **Cosmetic features are on by default**; the only switches are bare `no-*` opt-outs (no positive opt-in flag): `no-coastline`, `no-relief`, `no-context-labels`, `no-region-labels`, `no-poi-labels`, `no-legend`, `no-colorize`. A plain look = the four basemap flags together (`no-colorize` is **not** one of the four — it toggles region
|
|
4294
|
+
- **Cosmetic features are on by default**; the only switches are bare `no-*` opt-outs (no positive opt-in flag): `no-coastline`, `no-relief`, `no-context-labels`, `no-region-labels`, `no-poi-labels`, `no-legend`, `no-colorize`. A plain look = the four basemap flags together (`no-colorize` is **not** one of the four — it toggles region _fill style_, not a basemap backdrop layer).
|
|
4258
4295
|
- **Colorize (distinct political fills) is the default for any map without region data.** Unless a region carries data (a `heat:` or a tag), every region drawn at the resolved extent is filled a **distinct light pastel** such that no two bordering regions share a hue — the conventional "colour the countries/states so neighbours separate" look, with zero config. It applies to named-region maps, POI/route-only maps, and even a bare `map` (the whole world colours as the backdrop). The fills are **non-semantic** (no legend entry) and **extent-independent** (a region's colour is the same at any width and in an inset). A direct trailing colour (`Texas red`) paints on top as a highlight and does not suppress colorize; adding any `heat:`/tag flips the map to the data dress (colorize auto-suppressed, no error). `no-colorize` forces the plain green-land + blue-water dress — useful when many POIs/routes should pop against a calm map.
|
|
4259
4296
|
|
|
4260
4297
|
### Name resolution
|
|
@@ -4268,7 +4305,7 @@ cove -> hav l: March # the LINE turns green
|
|
|
4268
4305
|
- **Name + scope** (readable): `Georgia US heat: 5` → the state, `Georgia GE heat: 5` → the country.
|
|
4269
4306
|
- The redundant `Georgia US-GA` still works but isn't needed (a mismatched code like `Georgia US-CA` is rejected). A bare ambiguous `Georgia` follows the inferred US-scope signal and warns with both fixes named.
|
|
4270
4307
|
- **IATA airport codes** resolve to airport coordinates — `poi JFK`, `route JFK -> LAX` — with no new syntax (large international hubs + all US scheduled-commercial airports). Case-insensitive (`jfk`/`JFK`). Airports are the **lowest-precedence** identifier: a token that is both a city and a code resolves to the **city** (`Ufa` → the city, not UFA airport), with a hint naming the airport. Resolution is by **code only** (never by airport name); the POI label is the typed code. An unknown three-letter code errors with an `as <CODE>` coordinates hint.
|
|
4271
|
-
- **A city name must match the gazetteer's canonical form** — `New York City`, not `New York`; `Washington, D.C.`, not `Washington`. An unrecognized name is dropped (with a did-you-mean note) and the map reframes around the places that
|
|
4308
|
+
- **A city name must match the gazetteer's canonical form** — `New York City`, not `New York`; `Washington, D.C.`, not `Washington`. An unrecognized name is dropped (with a did-you-mean note) and the map reframes around the places that _did_ resolve, so the result can look complete but be missing a point. Use the exact name or coordinates.
|
|
4272
4309
|
- **Discover the exact token** with the lookup surface rather than guessing — `dgmo map-search "<place>"` (CLI; `--json` for machine output) or the `lookup_map_location` MCP tool. It substring-searches cities **and** the bundled airports and returns the precise token to paste (e.g. `york` → `New York City`; `heathrow` → `LHR`). There is intentionally **no exhaustive printed list** — the gazetteer holds thousands of cities plus ~1,500 airports; search is the interface.
|
|
4273
4310
|
- Positional coordinates are the escape hatch for anything missing/ambiguous (including forcing an airport over a colliding city: `poi 54.56 55.87 as UFA`).
|
|
4274
4311
|
|
|
@@ -4301,23 +4338,23 @@ The directive set is **13, all colon-free**: six naming intent the renderer can'
|
|
|
4301
4338
|
|
|
4302
4339
|
### Colons NOT USED
|
|
4303
4340
|
|
|
4304
|
-
| Construct | Diagram Type | Example
|
|
4305
|
-
| ---------------------- | ---------------- |
|
|
4306
|
-
| Chart type declaration | all | `bar Title`
|
|
4307
|
-
| Tag declarations | all | `tag Name as x`
|
|
4308
|
-
| Boolean options | all | `activations`, `no-activations`
|
|
4309
|
-
| Key-value options | all | `start 2026-03-15`, `active-tag Team` |
|
|
4310
|
-
| Series declarations | data charts | `series A B C`
|
|
4311
|
-
| Data rows | bar/line/pie/etc | `Label 100`
|
|
4312
|
-
| ER columns | er | `id int pk`
|
|
4313
|
-
| Sequence messages | sequence | `A -msg-> B`
|
|
4314
|
-
| Groups/containers | all | `[Group Name]`
|
|
4315
|
-
| Section dividers | sequence | `== Phase ==`
|
|
4316
|
-
| Comments | all | `// comment`
|
|
4317
|
-
| Wordcloud data | wordcloud | `swordsmanship 95`
|
|
4318
|
-
| Slope data rows | slope | `Blackbeard 40 4`
|
|
4319
|
-
| Slope period directive | slope | `period 1715 1725`
|
|
4320
|
-
| Venn intersections | venn | `sw + nav Sea Raiders`
|
|
4341
|
+
| Construct | Diagram Type | Example |
|
|
4342
|
+
| ---------------------- | ---------------- | ------------------------------------------ |
|
|
4343
|
+
| Chart type declaration | all | `bar Title` |
|
|
4344
|
+
| Tag declarations | all | `tag Name as x` |
|
|
4345
|
+
| Boolean options | all | `activations`, `no-activations` |
|
|
4346
|
+
| Key-value options | all | `start-date 2026-03-15`, `active-tag Team` |
|
|
4347
|
+
| Series declarations | data charts | `series A B C` |
|
|
4348
|
+
| Data rows | bar/line/pie/etc | `Label 100` |
|
|
4349
|
+
| ER columns | er | `id int pk` |
|
|
4350
|
+
| Sequence messages | sequence | `A -msg-> B` |
|
|
4351
|
+
| Groups/containers | all | `[Group Name]` |
|
|
4352
|
+
| Section dividers | sequence | `== Phase ==` |
|
|
4353
|
+
| Comments | all | `// comment` |
|
|
4354
|
+
| Wordcloud data | wordcloud | `swordsmanship 95` |
|
|
4355
|
+
| Slope data rows | slope | `Blackbeard 40 4` |
|
|
4356
|
+
| Slope period directive | slope | `period 1715 1725` |
|
|
4357
|
+
| Venn intersections | venn | `sw + nav Sea Raiders` |
|
|
4321
4358
|
|
|
4322
4359
|
### The Rule
|
|
4323
4360
|
|
|
@@ -4332,7 +4369,7 @@ A colon binds a value, and it appears in exactly **four syntactic positions**
|
|
|
4332
4369
|
|
|
4333
4370
|
**Colons never appear in:**
|
|
4334
4371
|
|
|
4335
|
-
- Directives and options — space-separated (`start 2026-03-15`, `x-label Low, High`, `region`)
|
|
4372
|
+
- Directives and options — space-separated (`start-date 2026-03-15`, `x-label Low, High`, `region`)
|
|
4336
4373
|
- Tag declarations and chart type declarations
|
|
4337
4374
|
- Series declarations and data rows for simple/data charts (incl. sankey/arc links `Source -> Target value` and quadrant data; space-delimited — a comma in a data-row value raises `E_DATA_COMMA_REMOVED`)
|
|
4338
4375
|
- Structural syntax (groups, sections, arrows, comments)
|
|
@@ -4379,16 +4416,16 @@ API description: Main gateway
|
|
|
4379
4416
|
|
|
4380
4417
|
Some constructs _look_ universal but are scoped to specific chart types. Don't transplant them across charts.
|
|
4381
4418
|
|
|
4382
|
-
| Construct | Scope
|
|
4383
|
-
| --------------------------------------------- |
|
|
4384
|
-
| `collapsed
|
|
4385
|
-
| Same-line / indented metadata on declarations | all chart types except flowchart, state, data charts (§1.4)
|
|
4386
|
-
| Trailing-keyword flag list | wireframe only (§19)
|
|
4387
|
-
| `progress: <N>` key | gantt only (§13)
|
|
4388
|
-
| `score: <N>` + `emotion: <Word>` keys | journey-map only (§22)
|
|
4389
|
-
| `description: <text>` shorthand for layers | pyramid, ring (§23, §24)
|
|
4390
|
-
| `milestone` keyword | **removed** — use `<name> 0` (§13A)
|
|
4391
|
-
| `\|` operator as metadata delimiter | **removed** (§1.4). Surviving uses: wireframe `{A \| B}` braces, in-arrow `A -file\|name-> B`, quoted `"Order \| Items"`
|
|
4419
|
+
| Construct | Scope |
|
|
4420
|
+
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
|
4421
|
+
| Bare `collapsed` trailing flag (§1.8) | sequence, infra, gantt, kanban, mindmap, pert, state, c4, event-line (eras), block, sketch, wireframe. Legacy: `collapsed: true` metadata |
|
|
4422
|
+
| Same-line / indented metadata on declarations | all chart types except flowchart, state, data charts (§1.4) |
|
|
4423
|
+
| Trailing-keyword flag list | wireframe only (§19) |
|
|
4424
|
+
| `progress: <N>` key | gantt only (§13) |
|
|
4425
|
+
| `score: <N>` + `emotion: <Word>` keys | journey-map only (§22) |
|
|
4426
|
+
| `description: <text>` shorthand for layers | pyramid, ring (§23, §24) |
|
|
4427
|
+
| `milestone` keyword | **removed** — use `<name> 0` (§13A) |
|
|
4428
|
+
| `\|` operator as metadata delimiter | **removed** (§1.4). Surviving uses: wireframe `{A \| B}` braces, in-arrow `A -file\|name-> B`, quoted `"Order \| Items"` |
|
|
4392
4429
|
|
|
4393
4430
|
### 26.4 Quoted Names + Aliases — Pick One
|
|
4394
4431
|
|
|
@@ -4417,7 +4454,7 @@ Before considering DGMO output complete, mentally verify:
|
|
|
4417
4454
|
3. Metadata uses §1.4 — same-line `key: value, ...` after the name region, or indented `key: value` for reserved keys. No `|` delimiter anywhere except wireframe dropdowns, in-arrow label characters, and quoted name characters.
|
|
4418
4455
|
4. Wireframe flags are written as space-separated lowercase trailing keywords from the closed enum (§19).
|
|
4419
4456
|
5. Journey-map steps use `score: N, emotion: Word`; gantt tasks use `progress: N`; pyramid/ring layers use `description: <text>` (quote when the value contains commas).
|
|
4420
|
-
6.
|
|
4457
|
+
6. Collapse is the bare `collapsed` trailing flag on the group/container line (§1.8; legacy: `collapsed: true` metadata).
|
|
4421
4458
|
7. Quoted names don't carry `as <alias>` on the same line.
|
|
4422
4459
|
8. Sequence participants with alias or quoted names use `is a <type>`.
|
|
4423
4460
|
9. No `milestone` keyword in PERT — use `<name> 0`.
|