@diagrammo/dgmo 0.95.0 → 0.97.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/README.md +1 -1
- package/dist/advanced.d.ts +190 -568
- package/dist/advanced.js +259 -470
- package/dist/block.d.ts +8 -0
- package/dist/block.js +144 -73
- package/dist/{calculator-BNH3GSJE.js → calculator-CIGGTURF.js} +2 -2
- package/dist/{chart-meta-BbjsRY7o.d.ts → chart-meta-B7niEd52.d.ts} +3 -1
- package/dist/chart-meta.d.ts +2 -2
- package/dist/chart-meta.js +19 -19
- package/dist/{chart-types-Cppnp31G.d.ts → chart-types-Dxtv4XSz.d.ts} +4 -5
- package/dist/{charts-d3-SZV2SFTM.js → charts-d3-INWEGMSD.js} +14 -14
- package/dist/{chunk-P5XA627W.js → chunk-2FMOLWX4.js} +73 -65
- package/dist/{chunk-MLY5ALOV.js → chunk-2SZILMQT.js} +57 -15
- package/dist/chunk-35A3J4Z5.js +14 -0
- package/dist/{chunk-UXNA2H2V.js → chunk-3C4OXVZJ.js} +2 -2
- package/dist/{chunk-IZHGT5HD.js → chunk-3HL6NSSQ.js} +63 -18
- package/dist/{chunk-2WQ3YZMN.js → chunk-3IUMSK72.js} +2 -2
- package/dist/{chunk-LAXMUSGW.js → chunk-44RLIAYC.js} +17 -10
- package/dist/{chunk-H7AXCRO7.js → chunk-453IWXZ3.js} +0 -11
- package/dist/{chunk-2I4UQG7W.js → chunk-47INRTZ6.js} +2 -2
- package/dist/{chunk-IN7XI6NO.js → chunk-4NMRS6HW.js} +1 -1
- package/dist/{chunk-KLBTJEIK.js → chunk-4TK26YHH.js} +2 -2
- package/dist/{chunk-CN4RDJDV.js → chunk-5TGZBHEJ.js} +1 -1
- package/dist/{chunk-IXHWS2HI.js → chunk-5WZYJC2P.js} +2 -2
- package/dist/{chunk-KBDMEOLI.js → chunk-65JFUANT.js} +1 -1
- package/dist/{chunk-D3K4U3ZM.js → chunk-6K2W3FH7.js} +8 -5
- package/dist/{chunk-NXU4N5WT.js → chunk-6OUMYNAJ.js} +1 -1
- package/dist/{chunk-KRPLP5LP.js → chunk-6PUBFB6D.js} +24 -3
- package/dist/{chunk-EXHXTMVR.js → chunk-6S2H6EKN.js} +3 -3
- package/dist/{chunk-KSZB7TIY.js → chunk-6SDEXSJY.js} +42 -22
- package/dist/{chunk-IQN2NGEU.js → chunk-6YBZFOTA.js} +13 -13
- package/dist/{chunk-IHN6WDEY.js → chunk-74XR7Z3I.js} +13 -13
- package/dist/{chunk-2J2CWWWK.js → chunk-7ASVGFW3.js} +1 -1
- package/dist/{chunk-BH2SF4TT.js → chunk-7QKWU7FX.js} +3 -3
- package/dist/{chunk-A6YINTY6.js → chunk-7RACGVUY.js} +1 -1
- package/dist/{chunk-VB4VMB2I.js → chunk-7TEAFIEJ.js} +9 -5
- package/dist/{chunk-UNCCZ3NU.js → chunk-A3V72YIL.js} +14 -1
- package/dist/{chunk-BCV2VJTM.js → chunk-A5LFM62B.js} +3 -3
- package/dist/{chunk-U6VS3T2M.js → chunk-AULFF7L2.js} +4 -4
- package/dist/{chunk-LKZCUFOW.js → chunk-B7ZH5EQ2.js} +2 -2
- package/dist/{chunk-VGAMBOOC.js → chunk-C6ME2L4T.js} +2 -2
- package/dist/{chunk-3PP746YM.js → chunk-CGP7RGLJ.js} +1 -1
- package/dist/{chunk-67N26CER.js → chunk-CLW45YKE.js} +2 -1
- package/dist/{chunk-VTESGA5F.js → chunk-CUOMNKYW.js} +4 -4
- package/dist/{chunk-CDM6XMOT.js → chunk-CUTEHGXO.js} +2 -2
- package/dist/{chunk-NERQSSYD.js → chunk-D67YE4LR.js} +1 -1
- package/dist/{chunk-XOMIYMQ3.js → chunk-D7KZE2XJ.js} +39 -17
- package/dist/{chunk-NMS5XSLX.js → chunk-DFEVFLEG.js} +3 -3
- package/dist/{chunk-EBVVMUAA.js → chunk-DKMZ4VMV.js} +1 -1
- package/dist/{chunk-V5D6GDNK.js → chunk-DRY4W4W6.js} +36 -15
- package/dist/{chunk-XJQ6Z3FO.js → chunk-E6GHXMH2.js} +8 -8
- package/dist/{chunk-KBEWVCK3.js → chunk-EBJLT7PH.js} +1 -1
- package/dist/{chunk-TASRGDYP.js → chunk-EEIGHOJR.js} +92 -23
- package/dist/{chunk-AQQUJEDN.js → chunk-EUPUVYWO.js} +1 -1
- package/dist/{chunk-7IALGIOI.js → chunk-F2OAZHOX.js} +10 -5
- package/dist/{chunk-JXGSTBW6.js → chunk-FK6HZYGK.js} +4 -14
- package/dist/{chunk-OSSTOSXU.js → chunk-FTW2E2YH.js} +7 -10
- package/dist/{chunk-5P2L5QXE.js → chunk-FZVCS2XY.js} +4 -2
- package/dist/chunk-G24NSISJ.js +69 -0
- package/dist/{chunk-EBIDNRSR.js → chunk-GFQFLLP3.js} +2 -2
- package/dist/{chunk-RQTDUZUH.js → chunk-GLLYHYGT.js} +27 -17
- package/dist/{chunk-VLC6WNRD.js → chunk-GULGSH2Z.js} +4 -0
- package/dist/{chunk-H5NVCOEJ.js → chunk-GXBH7WNN.js} +2 -2
- package/dist/{chunk-C6G36F5S.js → chunk-H242TVAE.js} +9 -9
- package/dist/{chunk-5XBYLYYI.js → chunk-H7DZYHQF.js} +3 -3
- package/dist/{chunk-GLCMUTO5.js → chunk-HQNZJMNS.js} +1 -1
- package/dist/{chunk-IY62DXT2.js → chunk-IAM3IDL4.js} +2 -2
- package/dist/{chunk-IGJEKO2P.js → chunk-II6D6NWX.js} +8 -8
- package/dist/{chunk-AULZD45V.js → chunk-IUFTAFGN.js} +2 -2
- package/dist/{chunk-FWVE373X.js → chunk-IZEKHIV6.js} +3 -3
- package/dist/{chunk-BQMHJ6OW.js → chunk-J3YM6RA5.js} +22 -14
- package/dist/{chunk-R6EGUTIV.js → chunk-J467QBZF.js} +23 -3
- package/dist/{chunk-JJ7RGTAU.js → chunk-J7JF4QKA.js} +40 -30
- package/dist/{chunk-E7F76M3U.js → chunk-JULBDTNU.js} +61 -9
- package/dist/{chunk-EPDBWATV.js → chunk-K7RRXZHS.js} +4 -2
- package/dist/{chunk-ZECJ7Q6C.js → chunk-KMB754DO.js} +33 -6
- package/dist/chunk-KNKZGRRB.js +439 -0
- package/dist/{chunk-XIUGSUE4.js → chunk-KTGJQJB3.js} +6 -2
- package/dist/{chunk-4SACN2C5.js → chunk-KW3CC7SB.js} +1 -1
- package/dist/{chunk-3GUEYQGL.js → chunk-L3K5O3Z5.js} +3 -3
- package/dist/chunk-LRTSTDJ6.js +126 -0
- package/dist/{chunk-NBAAIRFP.js → chunk-LZATSXAA.js} +5 -2
- package/dist/{chunk-USE6HIOZ.js → chunk-MJ725XHD.js} +1156 -330
- package/dist/{chunk-3KVUFHUJ.js → chunk-NBISN6FH.js} +2 -2
- package/dist/{chunk-RITTLIDJ.js → chunk-NN5RUHXV.js} +84 -16
- package/dist/{chunk-62GLKE6Q.js → chunk-NOZMRPXI.js} +112 -157
- package/dist/{chunk-4XYZJTFO.js → chunk-NQFZ7LXC.js} +14 -6
- package/dist/chunk-NTDWVTEY.js +12 -0
- package/dist/{chunk-BQO24BDM.js → chunk-O3HRF25Z.js} +1 -1
- package/dist/{chunk-ZD3QCNB7.js → chunk-OSSA5UWA.js} +3 -3
- package/dist/{chunk-UOCWYLYT.js → chunk-OZXKW5NA.js} +1 -1
- package/dist/{chunk-NPDVWFAQ.js → chunk-PLQZJZ2K.js} +1 -1
- package/dist/chunk-PRG7NIUU.js +272 -0
- package/dist/{chunk-S4SJ4LLY.js → chunk-PSNRB75I.js} +3 -3
- package/dist/{chunk-QPQWY5RU.js → chunk-PT5VFY3B.js} +38 -14
- package/dist/{chunk-KAO7JL4I.js → chunk-PU5X3P3T.js} +6 -5
- package/dist/{chunk-J7Q4AB23.js → chunk-PZ5LAAO3.js} +2 -2
- package/dist/{chunk-TOHTKLKE.js → chunk-Q5Q5JLRT.js} +1 -1
- package/dist/{chunk-Y3SIQN4J.js → chunk-Q6V342WS.js} +17 -5
- package/dist/{chunk-RBVFNUAL.js → chunk-QDPTOIG7.js} +5 -5
- package/dist/{chunk-ERT7XDQW.js → chunk-QIITSGI5.js} +1 -1
- package/dist/{chunk-NM5V5EKY.js → chunk-QLIZ7SB7.js} +1 -1
- package/dist/chunk-QLNLRZ37.js +181 -0
- package/dist/{chunk-HHVIE45A.js → chunk-QOLRTPGH.js} +6 -6
- package/dist/{chunk-2ZW4NBYX.js → chunk-R4SXMBGF.js} +1 -1
- package/dist/chunk-R4U7IIRX.js +178 -0
- package/dist/{chunk-BRGRIZQB.js → chunk-RC6PISCK.js} +4 -2
- package/dist/{chunk-UIEKW4SG.js → chunk-REKLKGR6.js} +3 -4
- package/dist/{chunk-TIIZIAGS.js → chunk-RFGQDIOI.js} +843 -233
- package/dist/{chunk-FVTYJUXR.js → chunk-ROFSIFSY.js} +4 -4
- package/dist/{chunk-VSAKEMDD.js → chunk-ROH4LYBL.js} +71 -21
- package/dist/{chunk-4UVCTLRH.js → chunk-SNDCXT5R.js} +9 -7
- package/dist/{chunk-R46N5KR4.js → chunk-SQBCNEJB.js} +2 -1
- package/dist/{chunk-66JTY4AN.js → chunk-TDUBTDXS.js} +1 -1
- package/dist/{chunk-PGSGJLUR.js → chunk-TMB4YY3J.js} +34 -4
- package/dist/{chunk-UZ7EZW3B.js → chunk-TO53KK2P.js} +6 -1
- package/dist/{chunk-5KKZXA44.js → chunk-V3ICBS2O.js} +7 -5
- package/dist/{chunk-GWQRTA5W.js → chunk-V65EDV6S.js} +3 -3
- package/dist/{chunk-VF7IKIRS.js → chunk-VKT3BVRO.js} +35 -11
- package/dist/{chunk-L5S32VZJ.js → chunk-VOO65FKC.js} +12 -12
- package/dist/{chunk-PVWIBKV2.js → chunk-VQWLASDC.js} +2 -2
- package/dist/{chunk-JILEYZ2V.js → chunk-VVL2KKG4.js} +1 -1
- package/dist/{chunk-GI5R5B3S.js → chunk-VVZDBUHA.js} +2 -2
- package/dist/{chunk-PGBTUGDB.js → chunk-W46OMHOK.js} +23 -27
- package/dist/{chunk-XCKNFFKM.js → chunk-WH6E6SHC.js} +2 -4
- package/dist/{chunk-H6BT45SN.js → chunk-WPYJAHRP.js} +1 -1
- package/dist/{chunk-LJGE43SG.js → chunk-WXGFB2O2.js} +3 -3
- package/dist/{chunk-YQMIKX54.js → chunk-XCYGOCMS.js} +102 -52
- package/dist/{chunk-BTP2BMWN.js → chunk-XEMCNQQW.js} +15 -15
- package/dist/{chunk-NVZ7R4EK.js → chunk-XMUFXJI2.js} +6 -6
- package/dist/{chunk-AM42TLSZ.js → chunk-XZGXVN4T.js} +5 -5
- package/dist/{chunk-5OTA2PUH.js → chunk-YCIBBVI2.js} +2 -2
- package/dist/{chunk-V2NQV7VL.js → chunk-YFIDR7JH.js} +2 -2
- package/dist/{chunk-USZLHYEQ.js → chunk-YFWIFKRQ.js} +3 -3
- package/dist/{chunk-6XLMTAEX.js → chunk-YIHRLY55.js} +33 -6
- package/dist/{chunk-CYRB2JTN.js → chunk-YLKPRT6U.js} +1 -1
- package/dist/{chunk-KMU65FYM.js → chunk-YSDSFXQD.js} +1 -1
- package/dist/{chunk-ZI6WC24V.js → chunk-ZBJV4KNU.js} +1 -1
- package/dist/{chunk-4EX4OKGZ.js → chunk-ZCKVTZHD.js} +41 -19
- package/dist/{chunk-7PJBJ2DU.js → chunk-ZMVMGZAJ.js} +1 -1
- package/dist/{chunk-6EFCOES2.js → chunk-ZRW4B4KF.js} +48 -14
- package/dist/{chunk-A2A2I4Z4.js → chunk-ZTKO2RD4.js} +5 -5
- package/dist/collapse-6IGH2B24.js +31 -0
- package/dist/{collapse-BSPH3BFM.js → collapse-6X5S2S3G.js} +2 -1
- package/dist/collapse-GOWNCVHZ.js +7 -0
- package/dist/collapse-HNTPLB2Q.js +11 -0
- package/dist/collapse-NUM7DPJA.js +10 -0
- package/dist/completion-registry.js +28 -39
- package/dist/countdown.js +1 -1
- package/dist/dgmo-router-RSYWR5IS.js +101 -0
- package/dist/dimensions-KXAI7U2B.js +21 -0
- package/dist/editor.js +884 -222
- package/dist/{flowchart-parser-J3VWIFWB.js → flowchart-parser-UI5VZNGJ.js} +5 -5
- package/dist/{flowchart-renderer-FECH5KK5.js → flowchart-renderer-IYWPKPCF.js} +18 -18
- package/dist/fold-at-line-DmSAa1eU.d.ts +11 -0
- package/dist/highlight.js +886 -224
- package/dist/index.d.ts +89 -6
- package/dist/index.js +91 -70
- package/dist/{layout-TIBRMWHL.js → layout-6VY3DHYD.js} +6 -6
- package/dist/{layout-5SZ5A64I.js → layout-7C2QZCEZ.js} +10 -10
- package/dist/{layout-2WESJYRE.js → layout-7E7BNOGO.js} +3 -2
- package/dist/layout-BSK374N6.js +11 -0
- package/dist/{layout-RH3N46HP.js → layout-FJDBY3WG.js} +6 -5
- package/dist/{layout-YBMT74MG.js → layout-G3RVKEC4.js} +10 -10
- package/dist/{layout-KV27UW25.js → layout-GC5XX2RH.js} +2 -2
- package/dist/{layout-JTIRCKAW.js → layout-R6ULGQJK.js} +6 -6
- package/dist/{layout-HFBK5UEG.js → layout-ROI5KVSO.js} +3 -3
- package/dist/{layout-3TSVAGWH.js → layout-SPPS225I.js} +3 -3
- package/dist/{layout-HF3PMI4H.js → layout-VTGOYGRC.js} +2 -2
- package/dist/{layout-EWXHEXNS.js → layout-WBH5IHYK.js} +10 -10
- package/dist/layout-WTHBGTH2.js +15 -0
- package/dist/layout-ZCCABSV7.js +15 -0
- package/dist/{layout-search-AWPJWBKT.js → layout-search-DSIDKKQO.js} +8 -8
- package/dist/{legend-constants-55MFBXYF.js → legend-constants-KF3MKWL2.js} +2 -2
- package/dist/{parser-NUU3DVW4.js → parser-3PMYAVFL.js} +2 -2
- package/dist/{parser-KJPPUN4D.js → parser-5KVFS4RN.js} +2 -2
- package/dist/{parser-6TDWUKM5.js → parser-BA43YPIQ.js} +3 -3
- package/dist/{parser-EFF22GYO.js → parser-CFAYEWLF.js} +3 -3
- package/dist/{parser-A3AN76RQ.js → parser-DRFEX6OX.js} +3 -3
- package/dist/{parser-H5OODY5N.js → parser-DWVBRBB2.js} +3 -3
- package/dist/{parser-BJ7RJNUM.js → parser-E4B7HJT2.js} +3 -3
- package/dist/{parser-5UZV32ZI.js → parser-FWQY3HJX.js} +2 -2
- package/dist/{parser-RTWPFKXG.js → parser-GMCXCJSP.js} +3 -3
- package/dist/{parser-NL73FSFI.js → parser-IHFHPFL7.js} +3 -3
- package/dist/{parser-BTSTKY5G.js → parser-IU6425JW.js} +6 -6
- package/dist/{parser-ZRIZFDZY.js → parser-IZYIXDJX.js} +6 -6
- package/dist/{parser-4TBSWULQ.js → parser-JQGUTDSX.js} +3 -3
- package/dist/{parser-TUAEX6ML.js → parser-JRKPOO2Z.js} +3 -3
- package/dist/{parser-KMKVFET2.js → parser-KI2XYB2R.js} +2 -2
- package/dist/parser-LDVVBP7S.js +12 -0
- package/dist/{parser-YG625J5H.js → parser-MAGFK6OK.js} +4 -4
- package/dist/{parser-AR2GON37.js → parser-MH5BDN7X.js} +4 -4
- package/dist/{parser-EAQPZX2B.js → parser-MUHFEM4G.js} +3 -3
- package/dist/{parser-RCIEKN7Y.js → parser-P375HO7Q.js} +2 -2
- package/dist/{parser-GMQJISZ6.js → parser-PYY5BRLQ.js} +2 -2
- package/dist/parser-QEMFMVF5.js +12 -0
- package/dist/{parser-GDLKUBTO.js → parser-QIPDBT5M.js} +2 -2
- package/dist/{parser-BT4NI6JY.js → parser-RNBDDEGL.js} +3 -3
- package/dist/{parser-MA7L3XND.js → parser-RSWZGQA7.js} +6 -6
- package/dist/{parser-K2DI26SC.js → parser-SGX2PVR5.js} +2 -2
- package/dist/{parser-KKF6Y5MM.js → parser-SJUEFKNM.js} +4 -3
- package/dist/{parser-3QIFY5IN.js → parser-UMNBPXG2.js} +2 -2
- package/dist/{parser-F7NDRPMA.js → parser-WE4VSBBY.js} +3 -3
- package/dist/{parser-4Y6PODW6.js → parser-WKEYS7N3.js} +3 -3
- package/dist/{parser-KLCSFQ3J.js → parser-WPXUUNA2.js} +3 -3
- package/dist/{parser-LTRQASGB.js → parser-XP3RCOTN.js} +3 -3
- package/dist/{parser-2IKPQVKX.js → parser-YV4RBHG7.js} +3 -3
- package/dist/{parser-3LT3ZUUC.js → parser-YZ3J542U.js} +2 -2
- package/dist/{redraw-AHW7EUUF.js → redraw-BZ4GI6IC.js} +6 -4
- package/dist/{redraw-STZ4WJAI.js → redraw-LEOXS7C6.js} +3 -3
- package/dist/{renderer-IGSHD3OT.js → renderer-2V5NVI3V.js} +16 -16
- package/dist/renderer-4PKYVOYL.js +39 -0
- package/dist/{renderer-IVHD7ENY.js → renderer-66SCERH7.js} +14 -12
- package/dist/renderer-6IAXRZLK.js +85 -0
- package/dist/{renderer-XCLARXCK.js → renderer-6O5SV5YE.js} +10 -10
- package/dist/{renderer-IXBOT6DU.js → renderer-7OXMSF4R.js} +4 -4
- package/dist/{renderer-AM7P4LN7.js → renderer-A36NL2SS.js} +8 -8
- package/dist/{renderer-ACQQ2JXA.js → renderer-ASPBBACI.js} +13 -11
- package/dist/{renderer-W4MUMXJE.js → renderer-BXVTYE27.js} +7 -6
- package/dist/renderer-CC6O6GQK.js +18 -0
- package/dist/{renderer-Y47EM337.js → renderer-CNDB4JTZ.js} +17 -17
- package/dist/renderer-COV2DXTM.js +41 -0
- package/dist/renderer-DXCATVLO.js +30 -0
- package/dist/{renderer-JYHA6R2D.js → renderer-E5E3OJ42.js} +12 -11
- package/dist/{renderer-DAZWHNLI.js → renderer-E7LC7HCU.js} +5 -5
- package/dist/{renderer-RUSQJFFC.js → renderer-F3JYZERE.js} +4 -4
- package/dist/{renderer-7OGGV327.js → renderer-FAFSRFGR.js} +9 -9
- package/dist/renderer-HIB6LZWZ.js +26 -0
- package/dist/renderer-HLDRRFZB.js +28 -0
- package/dist/renderer-INQMQPNN.js +22 -0
- package/dist/renderer-ITJ67HXO.js +27 -0
- package/dist/{renderer-UTEEJDGB.js → renderer-JLOKFKOZ.js} +14 -13
- package/dist/{renderer-2LYX6NHN.js → renderer-KOPJ76GS.js} +10 -10
- package/dist/{renderer-MWZC7TMD.js → renderer-M2467III.js} +14 -13
- package/dist/{renderer-HX6ICPDX.js → renderer-MYKL6VG6.js} +6 -6
- package/dist/{renderer-BXD5KVSR.js → renderer-S6L3JR6C.js} +11 -11
- package/dist/{renderer-NOYLNVTI.js → renderer-SYWVZ4CY.js} +3 -3
- package/dist/renderer-TCTZZ5Y6.js +32 -0
- package/dist/{renderer-QTPWRRJ7.js → renderer-UIHCYXBY.js} +12 -12
- package/dist/{renderer-36446HSH.js → renderer-WIBVOPRC.js} +6 -4
- package/dist/{renderer-2QPHDBZY.js → renderer-XMJ6XZGL.js} +12 -11
- package/dist/{renderer-TINHO2IO.js → renderer-ZTHXOBXW.js} +8 -8
- package/dist/{renderer-radial-WFUX3Z3C.js → renderer-radial-FC25BDCZ.js} +8 -8
- package/dist/{state-parser-PMNHLHLE.js → state-parser-2PQRH5JE.js} +6 -6
- package/dist/state-renderer-YP6HWLJR.js +43 -0
- package/dist/{themes-DzIH3Hjv.d.ts → themes-DoLdhUXV.d.ts} +1 -1
- package/docs/ai-integration.md +4 -4
- package/docs/language-reference.md +154 -104
- package/gallery/fixtures/swot-relabel.dgmo +19 -0
- package/gallery/fixtures/swot-tags.dgmo +16 -0
- package/gallery/fixtures/swot.dgmo +13 -0
- package/gallery/fixtures/whiteboard.dgmo +1 -0
- package/package.json +1 -1
- package/dist/chunk-6BQSDF77.js +0 -734
- package/dist/chunk-NWSPPGIE.js +0 -60
- package/dist/chunk-R2K5L4UA.js +0 -49
- package/dist/chunk-VBMRZCMQ.js +0 -1465
- package/dist/chunk-WZBZXZ6T.js +0 -636
- package/dist/collapse-TCVK3RPO.js +0 -8
- package/dist/dgmo-router-6YLKM6WU.js +0 -101
- package/dist/dimensions-DS6FWLRY.js +0 -21
- package/dist/layout-D4L44NRG.js +0 -11
- package/dist/layout-MXHR3P35.js +0 -15
- package/dist/layout-ND26WVX2.js +0 -15
- package/dist/layout-VDCJOZSH.js +0 -11
- package/dist/parser-PEZ7RN43.js +0 -14
- package/dist/parser-YHDGKPZI.js +0 -14
- package/dist/renderer-4VGO27EE.js +0 -41
- package/dist/renderer-6BDK47V6.js +0 -30
- package/dist/renderer-ISQJ2ELA.js +0 -25
- package/dist/renderer-KJ3V5BYP.js +0 -26
- package/dist/renderer-O6RP52CQ.js +0 -22
- package/dist/renderer-P3WR7TKD.js +0 -39
- package/dist/renderer-UGW4N2W5.js +0 -28
- package/dist/renderer-WPN2SXGT.js +0 -29
- package/dist/renderer-XDX6S7OV.js +0 -30
- package/dist/renderer-ZV6KCLCL.js +0 -85
- package/dist/state-renderer-JQ5DS66J.js +0 -42
- package/gallery/fixtures/sketch.dgmo +0 -22
|
@@ -98,7 +98,7 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
|
|
|
98
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.
|
|
99
99
|
<!-- TITLE end -->
|
|
100
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>` in the header — after the tag group and before the first element, because a type such as c4 refuses it after content — then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). **Bracket, block, body, event-line
|
|
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>` in the header — after the tag group and before the first element, because a type such as c4 refuses it after content — then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). **Bracket, block, body, event-line and whiteboard** take the tag group but no `active-tag` line — declare the group and stop there; on event-line the line would be drawn as an element. **Class, flowchart, wireframe, raci, cycle, pyramid, ring, sankey, tech-radar, venn, version-control, wordcloud, arc, bar, clock, countdown, funnel, function, goal, heatmap, line, pie, polar-area, quadrant, radar, scatter and slope** take no tag group at all — skip this rule for them. Most report the lines; cycle, pyramid, ring, sankey, venn, version-control and wordcloud read them as content, and flowchart and tech-radar drop them without a word. 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.
|
|
102
102
|
<!-- CATEGORIZE end -->
|
|
103
103
|
- **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
|
|
104
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.
|
|
@@ -125,6 +125,7 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
|
|
|
125
125
|
| `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
|
|
126
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
127
|
| `kanban` | task-board columns |
|
|
128
|
+
| `swot` | SWOT analysis: strengths, weaknesses, opportunities, threats in four fixed panels on helpful/harmful and internal/external axes |
|
|
128
129
|
| `gantt` | project scheduling with task dependencies and milestones |
|
|
129
130
|
| `pert` | project network with three-point estimates and critical path |
|
|
130
131
|
| `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
|
|
@@ -141,7 +142,6 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
|
|
|
141
142
|
| `ring` | concentric rings of nested categories |
|
|
142
143
|
| `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
|
|
143
144
|
| `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
145
|
| `whiteboard` | free-form infinite canvas: shapes, sticky notes, free arrows, text, images and freehand ink at pixel positions (canvas-drawn; AI writes all but ink) |
|
|
146
146
|
| `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
|
|
147
147
|
| `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 |
|
|
@@ -215,7 +215,7 @@ tag GroupName as <alias>
|
|
|
215
215
|
- Must appear before diagram content
|
|
216
216
|
- Bare shorthand is not an alias (TD-18): `tag Priority p` declares a group _named_ "Priority p" — no alias registers, so `p:` assignments silently miss. The parser warns on this shape (spaced name, no alias, alias-shaped trailing word), suggesting `tag Priority as p` or a quoted name
|
|
217
217
|
|
|
218
|
-
**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,
|
|
218
|
+
**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, bracket, family, swot and whiteboard all accept `tag <Group> as <alias>` blocks (a whiteboard's names its colours — §24Ea). Check the per-type Options section for the exact directive set; if a type draws a tag legend, it takes tags. **Flowchart, wireframe, raci and class take no tags** — a `tag` block or `active-tag` on any of them is ignored with a warning, because what an element looks like is fixed by what it is (a flowchart's shape, a wireframe's state keywords, a class's trailing colour word) or by the roles (raci).
|
|
219
219
|
|
|
220
220
|
### 1.4 Same-Line Metadata
|
|
221
221
|
|
|
@@ -285,7 +285,7 @@ Two narrow exceptions accept same-line-metadata-only color: **cycle edges** (no
|
|
|
285
285
|
- Indented content below belongs to the group
|
|
286
286
|
- **A tag value on the group line colors the group's own frame**, and cascades
|
|
287
287
|
to its children: `[Backend] s: Red`. Supported on boxes-and-lines, infra, c4,
|
|
288
|
-
state, pert, kanban, gantt, sequence, org
|
|
288
|
+
state, pert, kanban, gantt, sequence, org and block. Two rules: a
|
|
289
289
|
group never picks up the tag group's first-value default (an untagged group
|
|
290
290
|
stays neutral grey), and a value the tag group does not recognize leaves it
|
|
291
291
|
neutral rather than painting a fallback shade.
|
|
@@ -431,6 +431,25 @@ A block must have every key, hex only, text readable on its fills, and a name th
|
|
|
431
431
|
|
|
432
432
|
**Who wins**, highest first: an explicit choice where the diagram is shown (a fence `palette=` attribute, `--palette` on the command line), then the file's palette, then the site's or app's own setting, then Slate. `theme` is retired — the mode word on the palette line does its job.
|
|
433
433
|
|
|
434
|
+
### 1.11 Line Breaks in Description and Note Bodies
|
|
435
|
+
|
|
436
|
+
A line break in the source is **not** a line break in the drawing. Consecutive body lines join into one paragraph and re-wrap to fit the card, so you can break prose wherever is comfortable in the editor. Two things keep a break:
|
|
437
|
+
|
|
438
|
+
- **A blank line** starts a new paragraph, with a gap above it.
|
|
439
|
+
- **A trailing `\`** breaks the line without starting a new paragraph (markdown's hard break).
|
|
440
|
+
|
|
441
|
+
A `- ` line always starts its own bullet. A plain line straight after a bullet continues that bullet; a blank line returns to prose.
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
2026-09-28 67.10.0 deployed
|
|
445
|
+
*9:00 AM* \
|
|
446
|
+
Existing refresh code already deletes opted-out cards.
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Without the `\`, the time and the sentence join into one line: `9:00 AM Existing refresh code…`.
|
|
450
|
+
|
|
451
|
+
This applies to event-line descriptions, pyramid, ring and cycle descriptions, boxes-and-lines descriptions, and multi-line note bodies (sequence, flowchart, state, class, ER, journey-map, countdown).
|
|
452
|
+
|
|
434
453
|
---
|
|
435
454
|
|
|
436
455
|
## 2. Universal Name Handling
|
|
@@ -727,6 +746,8 @@ tag Security as sec
|
|
|
727
746
|
|
|
728
747
|
Trailing `==` is optional.
|
|
729
748
|
|
|
749
|
+
- **Fold a section** with a bare `collapsed` flag (or `collapsed: true`) after the divider: `== Checkout == collapsed`. The messages under it fold away until the next divider. `== collapsed ==` is a section named "collapsed".
|
|
750
|
+
|
|
730
751
|
### 2.5 Notes
|
|
731
752
|
|
|
732
753
|
```
|
|
@@ -753,6 +774,8 @@ Content formatting:
|
|
|
753
774
|
- Inline markdown: `**bold**`, `*italic*`, `` `code` ``
|
|
754
775
|
- Links: `[text](url)` and bare URLs (auto-truncated in display)
|
|
755
776
|
- The note ends where the indentation does — there is **no `end` terminator** (a bare `end` line is rejected).
|
|
777
|
+
- Body lines join into one paragraph — a blank line or a trailing `\` keeps a break (§1.11).
|
|
778
|
+
- **Fold a multi-line note** with a bare `collapsed` flag (or `collapsed: true`) at the end of its opening line: `note right of API collapsed`. It draws only the first body line, with the collapse bar. The flag counts only on a line followed by an indented body, so `note right of DB collapsed` with no body is a note that reads "collapsed".
|
|
756
779
|
|
|
757
780
|
### 2.6 Structural Blocks
|
|
758
781
|
|
|
@@ -772,6 +795,7 @@ parallel label
|
|
|
772
795
|
```
|
|
773
796
|
|
|
774
797
|
- `parallel` requires a label
|
|
798
|
+
- `else` is bare. A second condition is `else if <condition>`; `else <label>` means the same and draws as `else if <label>`
|
|
775
799
|
- Blocks nest via indentation
|
|
776
800
|
- **No `end`/terminator keyword** — a block closes by dedenting (like multi-line notes). `end` and `activate`/`deactivate` are not dgmo syntax (a bare `end` line is rejected); activation is controlled by the `activations` option (§2.7), not per-message keywords.
|
|
777
801
|
- **Tags apply to participants, not messages** — there is no per-message tag/color. Color a participant by category with `<Participant> <tagAlias>: <Value>` after declaring a `tag <Name> as <alias>` group (§1.3). Message text is just the arrow label.
|
|
@@ -783,6 +807,27 @@ parallel label
|
|
|
783
807
|
- `collapse-notes` / `no-collapse-notes`
|
|
784
808
|
- `active-tag GroupName`
|
|
785
809
|
|
|
810
|
+
Options go in the header. Put every option line — `active-tag` included — after the `tag` groups and before the first participant declaration, `[Group]`, divider or message. An option after any of those is an error (`Options like 'active-tag Zone' must appear before the first message or declaration`).
|
|
811
|
+
|
|
812
|
+
```dgmo
|
|
813
|
+
sequence Checkout
|
|
814
|
+
tag Zone as z
|
|
815
|
+
Internal blue
|
|
816
|
+
External orange
|
|
817
|
+
active-tag Zone
|
|
818
|
+
|
|
819
|
+
Shop is a service z: Internal
|
|
820
|
+
Bank is a service z: External
|
|
821
|
+
|
|
822
|
+
Shop -charge-> Bank
|
|
823
|
+
if approved
|
|
824
|
+
Bank -receipt-> Shop
|
|
825
|
+
else if declined
|
|
826
|
+
Bank -decline code-> Shop
|
|
827
|
+
else
|
|
828
|
+
Bank -timeout-> Shop
|
|
829
|
+
```
|
|
830
|
+
|
|
786
831
|
---
|
|
787
832
|
|
|
788
833
|
## 4. Infrastructure Diagrams
|
|
@@ -955,7 +1000,7 @@ API Gateway
|
|
|
955
1000
|
|
|
956
1001
|
<!-- TIPS start -->
|
|
957
1002
|
|
|
958
|
-
**Styling tips:** write every connection as `Source -> Target` (or a single-line chain like `(Start) -> [Collect info] -> <Eligible?>`); write each connection on its own line. Every decision `<Question?>` MUST have at least two outgoing branches — usually `-yes->`/`-no->`, but use specific labels when the choices are not binary (e.g. `-retirement->`, `-disability->`, `-survivor->`); a decision with only one branch is invalid. Begin at exactly one start terminal `(Start)` and make every path terminate at a terminal node (`(Approved)`, `(Denied)`, `(End)`). Every node MUST connect to the rest of the graph: if a node cannot be traced from the start forward to a terminal, it is invalid — remove it, never leave it floating. Flowcharts have NO tag groups, node metadata, or manual node colors — do NOT write `tag … as …`, a `s: value` suffix, or a trailing color word; node colors are assigned automatically by shape (start terminal green, end terminals red, processes blue, decisions yellow). Just pick the right shape and let color follow. Label every decision edge so branches read unambiguously; keep each node to a short action phrase and phrase every decision as a question.
|
|
1003
|
+
**Styling tips:** write every connection as `Source -> Target` (or a single-line chain like `(Start) -> [Collect info] -> <Eligible?>`); write each connection on its own line. Every decision `<Question?>` MUST have at least two outgoing branches — usually `-yes->`/`-no->`, but use specific labels when the choices are not binary (e.g. `-retirement->`, `-disability->`, `-survivor->`); a decision with only one branch is invalid. Begin at exactly one start terminal `(Start)` and make every path terminate at a terminal node (`(Approved)`, `(Denied)`, `(End)`). Nothing points back at the start node: no arrow may end at `(Start)`, so a loop returns to a step after it (`-retry-> [Collect info]`), never to the start. Every node MUST connect to the rest of the graph: if a node cannot be traced from the start forward to a terminal, it is invalid — remove it, never leave it floating. Flowcharts have NO tag groups, node metadata, or manual node colors — do NOT write `tag … as …`, a `s: value` suffix, or a trailing color word; node colors are assigned automatically by shape (start terminal green, end terminals red, processes blue, decisions yellow). Just pick the right shape and let color follow. Label every decision edge so branches read unambiguously; keep each node to a short action phrase and phrase every decision as a question.
|
|
959
1004
|
|
|
960
1005
|
<!-- TIPS end -->
|
|
961
1006
|
|
|
@@ -1020,13 +1065,16 @@ Bracket syntax only.
|
|
|
1020
1065
|
|
|
1021
1066
|
### 4.7 Notes (Nodes)
|
|
1022
1067
|
|
|
1023
|
-
Attach an annotation to a node with `note
|
|
1024
|
-
|
|
1025
|
-
the
|
|
1068
|
+
Attach an annotation to a node with `note NodeLabel text` (quote the
|
|
1069
|
+
label when it has more than one word). A note names the node by its
|
|
1070
|
+
label, without the shape's brackets: the decision `<Email exists?>` takes
|
|
1071
|
+
`note "Email exists?" …`, never `note <Email exists?> …`. The note renders
|
|
1072
|
+
as a folded-corner box beside the node, expanded at rest.
|
|
1026
1073
|
|
|
1027
1074
|
```
|
|
1028
1075
|
note Validate checks the payload schema
|
|
1029
1076
|
note "Read Map" the map is half-burned
|
|
1077
|
+
note "Email exists?" checks the users table
|
|
1030
1078
|
```
|
|
1031
1079
|
|
|
1032
1080
|
Indent lines below the heading for a multi-line body (bullets + inline
|
|
@@ -1591,6 +1639,8 @@ All permutations supported: node→group, group→node, group→group. Brackets
|
|
|
1591
1639
|
Pricing Auth: Public
|
|
1592
1640
|
```
|
|
1593
1641
|
|
|
1642
|
+
**Collapse:** a bare `collapsed` flag at the end of a page line or a `[Container]` line (`Products collapsed`, `[Shop] collapsed`; legacy `collapsed: true`) starts it folded. Every render path draws the fold with the collapse bar and a hidden-page count. Only a page with children or a container with pages folds.
|
|
1643
|
+
|
|
1594
1644
|
### 11.5 Node Descriptions
|
|
1595
1645
|
|
|
1596
1646
|
```
|
|
@@ -1964,6 +2014,7 @@ Henry Turner + Carina Smyth m: 1751
|
|
|
1964
2014
|
- **Unknown/private person:** a bare `?` renders a faint, solid-bordered, name-only placeholder card; each `?` is a distinct person.
|
|
1965
2015
|
- **`generations`** (option): draws a left gutter of Roman-numeral generation labels (`Gen I`, `Gen II`, …) plus subtle zebra shading behind alternating generations.
|
|
1966
2016
|
- **`highlight <name>`** (directive): dims everyone outside that person's bloodline (ancestors + descendants + spouses stay lit).
|
|
2017
|
+
- **`active-tag <Group>`** (option): picks which tag group colours the cards when there are two or more (the built-in Sex group counts); `active-tag none` turns colouring off.
|
|
1967
2018
|
- **Sex → color:** `sex: m` → blue, `sex: f` → purple, unset → gray (25% tint). An explicit `tag`/inline color overrides the sex color.
|
|
1968
2019
|
- 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.
|
|
1969
2020
|
|
|
@@ -2103,6 +2154,8 @@ Nested groups (max depth 2):
|
|
|
2103
2154
|
|
|
2104
2155
|
Group metadata cascades to children (node metadata overrides). Nodes already declared above can be referenced inside groups to assign membership.
|
|
2105
2156
|
|
|
2157
|
+
A bare `collapsed` flag on the group line (`[AWS] collapsed`, or `[AWS] color: blue, collapsed`; legacy `collapsed: true`) starts the group folded: it draws as one pill with a member count and the collapse bar, and its edges end on the pill.
|
|
2158
|
+
|
|
2106
2159
|
### 13.5 Group-Targeted Edges
|
|
2107
2160
|
|
|
2108
2161
|
Node-to-group and group-to-group edges use bracket syntax `[Group Name]`:
|
|
@@ -2312,6 +2365,8 @@ marker
|
|
|
2312
2365
|
1718-07 Woodes Rogers arrives
|
|
2313
2366
|
```
|
|
2314
2367
|
|
|
2368
|
+
A bare `collapsed` flag on the lane line (`[Royal Navy] collapsed`, `[Royal Navy] blue collapsed`; legacy `collapsed: true`) starts the lane folded to one summary row with the collapse bar. Lanes fold only in the grouped swimlane layout.
|
|
2369
|
+
|
|
2315
2370
|
### 14.6 Options (Space-Separated, NO Colon)
|
|
2316
2371
|
|
|
2317
2372
|
```
|
|
@@ -2740,7 +2795,7 @@ tag Genre as g
|
|
|
2740
2795
|
- **Date** — optional, ISO only (`YYYY`, `YYYY-MM`, `YYYY-MM-DD`, `+HH:MM` / `+HH:MM:SS`, plus `YYYY BCE`/`BC`/`CE`/`AD`), formatted for reading as the card subtitle (`2008-09-02` → `Sep 2, 2008`). No `date:` key; no `M/D/YYYY`.
|
|
2741
2796
|
- **`TBD` (future events)** — write the literal `TBD` (case-insensitive) in the date slot for a **not-yet-scheduled** event: `TBD Console Port t: Engine`. Its caption reads `TBD` and it draws a **hollow dot + faded leader** (a faded shelf edge in `no-box`) so it reads as pending. To scale, its position is **inferred from its source-order dated neighbors**: a `TBD` followed by a dated event is interpolated into that gap; a **trailing** `TBD` (nothing dated after it) parks past the last real date and the spine **trails off dashed** — the open horizon. `TBD`s never trip the bad-date / out-of-order warnings.
|
|
2742
2797
|
- **Tag** — trailing same-line metadata (`g: Pop`), like timeline; colors the dot, leader, and card.
|
|
2743
|
-
- **Description** — bare indented body lines (like `pyramid`/`ring`); `- ` makes a bullet; inline markdown (`**bold**`, `*italic*`, `` `code` ``) supported.
|
|
2798
|
+
- **Description** — bare indented body lines (like `pyramid`/`ring`); `- ` makes a bullet; inline markdown (`**bold**`, `*italic*`, `` `code` ``) supported. Lines join into one paragraph — a blank line or a trailing `\` keeps a break (§1.11).
|
|
2744
2799
|
|
|
2745
2800
|
#### Eras
|
|
2746
2801
|
|
|
@@ -3327,7 +3382,7 @@ Act red
|
|
|
3327
3382
|
|
|
3328
3383
|
### Descriptions
|
|
3329
3384
|
|
|
3330
|
-
Indented lines under a node become the description. Inline markdown is supported (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`), and `- item` renders as `• item`.
|
|
3385
|
+
Indented lines under a node become the description. Inline markdown is supported (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`), and `- item` renders as `• item`. Lines join into one paragraph — a blank line or a trailing `\` keeps a break (§1.11).
|
|
3331
3386
|
|
|
3332
3387
|
```
|
|
3333
3388
|
Observe
|
|
@@ -3463,6 +3518,8 @@ persona Captain Mara
|
|
|
3463
3518
|
|
|
3464
3519
|
Phases are `[Bracket]` headers at indent 0. Steps live indented under them. Phases are optional — omit them for a continuous flat flow.
|
|
3465
3520
|
|
|
3521
|
+
A bare `collapsed` flag on the phase line (`[Research] collapsed`; legacy `collapsed: true`) starts the phase folded to a narrow column with the collapse bar. Nothing else may follow a phase header.
|
|
3522
|
+
|
|
3466
3523
|
```
|
|
3467
3524
|
[Research]
|
|
3468
3525
|
Compare specs score: 4
|
|
@@ -3610,7 +3667,7 @@ Physiological orange
|
|
|
3610
3667
|
|
|
3611
3668
|
### Descriptions
|
|
3612
3669
|
|
|
3613
|
-
Indented lines under a layer are description text. Markdown inline formatting (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`) is supported. Bullets written as `- item` render as `• item`.
|
|
3670
|
+
Indented lines under a layer are description text. Markdown inline formatting (`**bold**`, `*italic*`, `` `code` ``, `[links](url)`) is supported. Bullets written as `- item` render as `• item`. Lines join into one paragraph — a blank line or a trailing `\` keeps a break (§1.11).
|
|
3614
3671
|
|
|
3615
3672
|
### Directives
|
|
3616
3673
|
|
|
@@ -3679,7 +3736,7 @@ The Open Sea cyan
|
|
|
3679
3736
|
|
|
3680
3737
|
### Descriptions
|
|
3681
3738
|
|
|
3682
|
-
Indented lines under a layer are description text. Markdown inline formatting is supported. Bullets written as `- item` render as `• item`. Descriptions appear in a stacked side list with colored accent bars.
|
|
3739
|
+
Indented lines under a layer are description text. Markdown inline formatting is supported. Bullets written as `- item` render as `• item`. Lines join into one paragraph — a blank line or a trailing `\` keeps a break (§1.11). Descriptions appear in a stacked side list with colored accent bars.
|
|
3683
3740
|
|
|
3684
3741
|
### Directives
|
|
3685
3742
|
|
|
@@ -3903,86 +3960,6 @@ In the desktop app a block diagram is interactive: click a container header to c
|
|
|
3903
3960
|
|
|
3904
3961
|
---
|
|
3905
3962
|
|
|
3906
|
-
## 24E. Sketch Diagrams
|
|
3907
|
-
|
|
3908
|
-
<!-- TYPE:sketch -->
|
|
3909
|
-
|
|
3910
|
-
**Beta — expect rough edges and syntax changes.**
|
|
3911
|
-
|
|
3912
|
-
<!-- TIPS start -->
|
|
3913
|
-
|
|
3914
|
-
**Styling tips:** Sketch is a GUI-authored format — the desktop and web canvas editors generate this markup, so hand-writing it is the exception. If you generate it anyway: keep it SMALL (sketches read best under ~15 shapes), and either omit `at:` everywhere (shapes flow into rows) or use integer half-slot coordinates with shapes **at least 3 half-slots apart** on one axis (a footprint spans 2 half-units and the mandatory gap adds 1 more, so each shape claims a 3×3 block; 2 apart overlaps). A `[Box]` may hold another `[Box]`, to **depth 2** — a third level is refused and its shapes join the box above it. Alias any shape an edge references (`as con`). Never write `size:`, `shape:`, colors, or fonts — every shape is the same plain card. In sketch, `~` dashed means secondary emphasis, NOT async. Categorize with a tag group — kind-of-thing is meaning, and meaning lives in tags. Reach for `sketch` when the drawing itself is the content; reach for `boxes-and-lines` when topology should auto-lay-out.
|
|
3915
|
-
|
|
3916
|
-
<!-- TIPS end -->
|
|
3917
|
-
|
|
3918
|
-
A **GUI-first constrained canvas**: uniformly-sized shapes placed freely on a snap grid, arrows between them, meaning through tags. The renderer owns all styling — authors own placement, connection, naming, and tags. Every shape has ONE universal footprint (no resizing); text always fits (shrink → smart-wrap → `…`). Pick `sketch` when the spatial arrangement is yours to decide; pick `boxes-and-lines` when topology should auto-lay-out.
|
|
3919
|
-
|
|
3920
|
-
### Declaration
|
|
3921
|
-
|
|
3922
|
-
```
|
|
3923
|
-
sketch [Title]
|
|
3924
|
-
```
|
|
3925
|
-
|
|
3926
|
-
### Example
|
|
3927
|
-
|
|
3928
|
-
```
|
|
3929
|
-
sketch Plunder Pipeline
|
|
3930
|
-
|
|
3931
|
-
tag Crew
|
|
3932
|
-
Deck
|
|
3933
|
-
Hold
|
|
3934
|
-
|
|
3935
|
-
Spyglass Feed at: 0 0, crew: Deck
|
|
3936
|
-
-sightings-> con
|
|
3937
|
-
Captain's Console as con at: 2 0, crew: Deck
|
|
3938
|
-
-orders-> bq
|
|
3939
|
-
Divvy Service as dvy at: 4 0, crew: Hold
|
|
3940
|
-
|
|
3941
|
-
[Below Decks] at: 2 2, crew: Hold
|
|
3942
|
-
Booty Queue as bq at: 0 0
|
|
3943
|
-
~haul~> dvy
|
|
3944
|
-
Ship Ledger as ledger at: 2 0
|
|
3945
|
-
|
|
3946
|
-
[Armory] as armory at: 0 2, collapsed
|
|
3947
|
-
Powder Store at: 0 0
|
|
3948
|
-
```
|
|
3949
|
-
|
|
3950
|
-
### Shapes
|
|
3951
|
-
|
|
3952
|
-
One top-level line = one shape — a **bare name** plus same-line `key: value` metadata. Every shape is the same plain card — there are no shape kinds, and a `shape:` clause is an error (`E_SKETCH_SHAPE_UNSUPPORTED`); the shape still draws, without it. Duplicate labels are legal **when aliased** (`Cache as c1` / `Cache as c2`); unaliased duplicates merge (standard dgmo semantics).
|
|
3953
|
-
|
|
3954
|
-
### Coordinates — `at: C R`
|
|
3955
|
-
|
|
3956
|
-
Integer **half-slot steps** (a slot = one footprint + the mandatory gap), origin-normalized; box children are relative to the box origin. `at:` is **optional** — un-positioned shapes flow-place in rows below existing content. Hand-authored overlap auto-resolves with a warning; nothing renders broken.
|
|
3957
|
-
|
|
3958
|
-
### Lines
|
|
3959
|
-
|
|
3960
|
-
Indented under the source shape, targeting an alias (or an unambiguous bare label). Six forms: `-label->` one head · `<-label->` both heads · `-label-` no heads, plus `~` dashed twins. Unlabeled headless lines are `--` / `~~`. No left-pointing arrows — write `B -> A`, never `A <- B`. A tag on the edge tail (`crew: Hold`) colors the line. Both ends must attach.
|
|
3961
|
-
|
|
3962
|
-
### Boxes
|
|
3963
|
-
|
|
3964
|
-
`[Brackets]` = a **box** (labeled group frame) — the only bracket meaning in sketch. Label mandatory; one level only (no nested boxes); taggable (frame tints, cascades to children, individual overrides); bare `collapsed` folds it to a card with the collapse-bar and edges re-target the card. Interactive fold/unfold in the app; static export renders the authored state.
|
|
3965
|
-
|
|
3966
|
-
### Node Metadata
|
|
3967
|
-
|
|
3968
|
-
| Key | Type | Default | Description |
|
|
3969
|
-
| ----------- | -------------- | ----------------------- | -------------------------------------------------------- |
|
|
3970
|
-
| `at` | `C R` integers | flow-placed | Half-slot position (origin-normalized) |
|
|
3971
|
-
| `collapsed` | flag | — | Box only — start folded (collapse-bar) |
|
|
3972
|
-
| `<tag>` | declared value | untagged (neutral gray) | Tag value (cascades from box; edge tails color the line) |
|
|
3973
|
-
|
|
3974
|
-
### Directives
|
|
3975
|
-
|
|
3976
|
-
| Directive | Effect |
|
|
3977
|
-
| ----------- | -------------------- |
|
|
3978
|
-
| `no-legend` | Hide the tag legend. |
|
|
3979
|
-
|
|
3980
|
-
### Interactivity vs export
|
|
3981
|
-
|
|
3982
|
-
In the desktop and web app a sketch opens in the **canvas editor** (the code pane hides behind a toggle); boxes fold/unfold interactively. Static SVG / PNG export renders the authored state — the same interactive-vs-export split the map, treemap, and block charts use.
|
|
3983
|
-
|
|
3984
|
-
---
|
|
3985
|
-
|
|
3986
3963
|
## 24Ea. Whiteboard Diagrams
|
|
3987
3964
|
|
|
3988
3965
|
<!-- TYPE:whiteboard -->
|
|
@@ -3991,11 +3968,11 @@ In the desktop and web app a sketch opens in the **canvas editor** (the code pan
|
|
|
3991
3968
|
|
|
3992
3969
|
<!-- TIPS start -->
|
|
3993
3970
|
|
|
3994
|
-
**Styling tips:** Whiteboard is a canvas-first format: people draw on it, and pen strokes (`ink` lines) only ever come from drawing — never write an `ink` line. Generate the readable parts only: `rectangle`, `ellipse`, `database`, `queue` with a label, `at: X Y` (top-left, integer pixels) and `size: W H`; `arrow` with `from: X Y, to: X Y` and an optional label, or `line` the same way for a connection with no head; add `style: dashed` to an arrow or line for a tentative or optional link; `heads: both` for a two-way arrow; `bend: 40` (px, sign picks the side) to curve a link around something in its way; `text` at a point; `note` with `at: X Y` for a sticky-note comment or open question (a 160 × 99 yellow card by default; `size:` and `color:` are optional). A shape label or a note wraps to its width on its own, so never break a sentence by hand to fit; for separate lines (a heading, a list), drop the inline label and indent each line two spaces under the element line. Leave ~40px between shapes and keep boards small (under ~15 elements). Colours are palette names (red, green, blue, teal, purple, orange, yellow, cyan, gray); leave colour off for the default ink. An arrow or line end placed inside a shape or note attaches to it and is drawn to its border, so point ends at shape centres. `no-notes` hides every note when the board is shown. Reach for `whiteboard` for a loose drawing someone will scribble over; reach for `
|
|
3971
|
+
**Styling tips:** Whiteboard is a canvas-first format: people draw on it, and pen strokes (`ink` lines) only ever come from drawing — never write an `ink` line. Generate the readable parts only: `rectangle`, `ellipse`, `database`, `queue`, `file` (a page with a wavy bottom, for a document or file) with a label, `at: X Y` (top-left, integer pixels) and `size: W H`; `arrow` with `from: X Y, to: X Y` and an optional label, or `line` the same way for a connection with no head; add `style: dashed` to an arrow or line for a tentative or optional link; `heads: both` for a two-way arrow; `bend: 40` (px, sign picks the side) to curve a link around something in its way; `text` at a point; `note` with `at: X Y` for a sticky-note comment or open question (a 160 × 99 yellow card by default; `size:` and `color:` are optional). A shape label or a note wraps to its width on its own, so never break a sentence by hand to fit; for separate lines (a heading, a list), drop the inline label and indent each line two spaces under the element line. Leave ~40px between shapes and keep boards small (under ~15 elements). Colours are palette names (red, green, blue, teal, purple, orange, yellow, cyan, gray); leave colour off for the default ink. An arrow or line end placed inside a shape or note attaches to it and is drawn to its border, so point ends at shape centres. `no-notes` hides every note when the board is shown. Reach for `whiteboard` for a loose drawing someone will scribble over; reach for `boxes-and-lines` when topology should auto-lay-out.
|
|
3995
3972
|
|
|
3996
3973
|
<!-- TIPS end -->
|
|
3997
3974
|
|
|
3998
|
-
A **free-form whiteboard** on an infinite canvas: rectangles, ellipses, databases, queues, sticky notes, free arrows and lines, text, pasted images and freehand ink, each at absolute pixel positions. Shapes are clean vector outlines; only ink looks hand-made. The export is cropped to the drawing plus a margin. Elements draw in kind bands, bottom to top: images; shapes, sticky notes, arrows and lines (`rectangle`, `ellipse`, `database`, `queue`, `note`, `arrow`, `line`); text; ink. A band always draws above the one before it. Inside a band, file order decides: a later line draws on top, so shapes, notes and arrows stack either way — except that an arrow or line always draws just above the latest shape or note it is attached to. No syntax sets the band.
|
|
3975
|
+
A **free-form whiteboard** on an infinite canvas: rectangles, ellipses, databases, queues, files, sticky notes, free arrows and lines, text, pasted images and freehand ink, each at absolute pixel positions. Shapes are clean vector outlines; only ink looks hand-made. The export is cropped to the drawing plus a margin. Elements draw in kind bands, bottom to top: images; shapes, sticky notes, arrows and lines (`rectangle`, `ellipse`, `database`, `queue`, `file`, `note`, `arrow`, `line`); text; ink. A band always draws above the one before it. Inside a band, file order decides: a later line draws on top, so shapes, notes and arrows stack either way — except that an arrow or line always draws just above the latest shape or note it is attached to. No syntax sets the band.
|
|
3999
3976
|
|
|
4000
3977
|
### Declaration
|
|
4001
3978
|
|
|
@@ -4474,6 +4451,8 @@ Phase headers accept a trailing-token color for per-phase styling:
|
|
|
4474
4451
|
|
|
4475
4452
|
The phase bar tints to a soft mix of the color over the background. Phases without a color fall back to the neutral gray bar.
|
|
4476
4453
|
|
|
4454
|
+
A bare `collapsed` flag on the phase line (`[Departure] collapsed`, `[Departure] teal collapsed`; legacy `collapsed: true`) starts the phase folded: its task rows hide and the band keeps its summary chips and the collapse bar.
|
|
4455
|
+
|
|
4477
4456
|
### Display vs source ordering
|
|
4478
4457
|
|
|
4479
4458
|
Markers in cells are always **rendered in canonical alphabet order** (`R A C I`, `R A S C I`, `D A C I`) regardless of source order. Source casing and order are preserved in the file; mutations operate on source order to keep round-trips byte-stable except for the cell that changed.
|
|
@@ -4704,6 +4683,77 @@ The one directive is `url`. There are no elements, no indentation and no colons.
|
|
|
4704
4683
|
|
|
4705
4684
|
---
|
|
4706
4685
|
|
|
4686
|
+
## 25B. SWOT Analysis
|
|
4687
|
+
|
|
4688
|
+
<!-- TYPE:swot -->
|
|
4689
|
+
|
|
4690
|
+
<!-- TIPS start -->
|
|
4691
|
+
|
|
4692
|
+
**Styling tips:** Keep items to a few words, and let the section colours stand: a tag group earns its place only when the items sort into kinds, such as priority or owner. Declare the sections in any order; they always draw S W / O T.
|
|
4693
|
+
|
|
4694
|
+
<!-- TIPS end -->
|
|
4695
|
+
|
|
4696
|
+
### 25B.1 Declaration
|
|
4697
|
+
|
|
4698
|
+
```
|
|
4699
|
+
swot [Title]
|
|
4700
|
+
```
|
|
4701
|
+
|
|
4702
|
+
A SWOT analysis names four fixed panels: **strengths** and **weaknesses** are internal, **opportunities** and **threats** are external; strengths and opportunities help, weaknesses and threats harm. The panels always draw as a 2×2 in the order S W / O T, whatever order the source uses. At phone width the chart stays 2×2 and scales as a whole.
|
|
4703
|
+
|
|
4704
|
+
### 25B.2 Sections and items
|
|
4705
|
+
|
|
4706
|
+
```
|
|
4707
|
+
swot Tortuga Rum Co.
|
|
4708
|
+
tag Priority as p
|
|
4709
|
+
High red
|
|
4710
|
+
Low gray
|
|
4711
|
+
active-tag Priority
|
|
4712
|
+
x-label Helpful, Harmful
|
|
4713
|
+
y-label Internal, External
|
|
4714
|
+
|
|
4715
|
+
strengths
|
|
4716
|
+
Oldest still on the island p: Low
|
|
4717
|
+
Crew of 40 sworn tasters
|
|
4718
|
+
Trained in three ports
|
|
4719
|
+
weaknesses Soft spots yellow
|
|
4720
|
+
One barrel supplier p: High
|
|
4721
|
+
opportunities
|
|
4722
|
+
Navy rum ration contract
|
|
4723
|
+
threats
|
|
4724
|
+
Royal Navy blockade
|
|
4725
|
+
```
|
|
4726
|
+
|
|
4727
|
+
- **Section line**, indent 0: `strengths|weaknesses|opportunities|threats [Label] [color]`. The keyword is case-insensitive. The label defaults to Strengths, Weaknesses, Opportunities, Threats; the colour defaults to green, yellow, blue, red. Sections are keywords, never `[brackets]`.
|
|
4728
|
+
- **Item line**: indented under a section. Text is literal, so colons and commas stay (`Cost: 20% below rivals, margins thin`) unless the key is a declared tag alias (`p: High`). A colour word ending an item stays in the text (`Margins are in the red`). A leading `- ` is removed.
|
|
4729
|
+
- **Detail line**: indented one level under an item; drawn smaller and muted. There is one detail level.
|
|
4730
|
+
- A missing or empty section still draws its panel, with a muted "None listed".
|
|
4731
|
+
- Long text wraps and the panel grows; nothing is truncated. A row takes its tallest panel's height, and the two columns stay equal.
|
|
4732
|
+
|
|
4733
|
+
### 25B.3 Options
|
|
4734
|
+
|
|
4735
|
+
| Option | Effect |
|
|
4736
|
+
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
4737
|
+
| `tag`, `active-tag` | A tag recolours an item's dot, tints its row faintly in the tag colour, and adds the legend. An untagged item keeps its section's colour and no tint, and the header bands always keep the section colour |
|
|
4738
|
+
| `x-label A, B` | Column headers: a filled band over each column, in small caps. Default `Helpful, Harmful` |
|
|
4739
|
+
| `y-label A, B` | Row headers: a filled rail beside each row, rotated, in small caps. Default `Internal, External` |
|
|
4740
|
+
| `no-axes` | Hide the axis labels. Wins over `x-label` and `y-label` |
|
|
4741
|
+
| `no-tint-items` | Don't tint tagged rows; the dot alone carries the tag |
|
|
4742
|
+
| `no-legend` | Hide the tag legend |
|
|
4743
|
+
| `palette` | Draw in a built-in palette |
|
|
4744
|
+
|
|
4745
|
+
The TOWS strategy cross-matrix, scores or weights are not part of this chart.
|
|
4746
|
+
|
|
4747
|
+
### 25B.4 Diagnostics
|
|
4748
|
+
|
|
4749
|
+
| Code | Fires on |
|
|
4750
|
+
| -------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
4751
|
+
| `E_SWOT_UNKNOWN_SECTION` | an unknown word at indent 0, including `[Strengths]` and `strength`; the message names the nearest keyword |
|
|
4752
|
+
| `E_SWOT_DUPLICATE_SECTION` | the same section twice |
|
|
4753
|
+
| `E_SWOT_ORPHAN_ITEM` | an item before any section |
|
|
4754
|
+
| `E_SWOT_TOO_DEEP` | nesting below the detail level |
|
|
4755
|
+
| `W_SWOT_EMPTY_SECTION` | a missing or empty section; its panel still draws |
|
|
4756
|
+
|
|
4707
4757
|
## 26. Colon Usage Summary
|
|
4708
4758
|
|
|
4709
4759
|
### Constructs Where Colons Are REQUIRED
|
|
@@ -4805,16 +4855,16 @@ API description: Main gateway
|
|
|
4805
4855
|
|
|
4806
4856
|
Some constructs _look_ universal but are scoped to specific chart types. Don't transplant them across charts.
|
|
4807
4857
|
|
|
4808
|
-
| Construct | Scope
|
|
4809
|
-
| --------------------------------------------- |
|
|
4810
|
-
| Bare `collapsed` trailing flag (§1.8) | sequence, infra, gantt, kanban, mindmap, pert, state,
|
|
4811
|
-
| Same-line / indented metadata on declarations | all chart types except flowchart, state, data charts (§1.4)
|
|
4812
|
-
| Trailing-keyword flag list | wireframe only (§19)
|
|
4813
|
-
| `progress: <N>` key | gantt only (§13)
|
|
4814
|
-
| `score: <N>` + `emotion: <Word>` keys | journey-map only (§22)
|
|
4815
|
-
| `description: <text>` shorthand for layers | pyramid, ring (§23, §24)
|
|
4816
|
-
| `milestone` keyword | **removed** — use `<name> 0` (§13A)
|
|
4817
|
-
| `\|` operator as metadata delimiter | **removed** (§1.4). Surviving uses: wireframe `{A \| B}` braces, in-arrow `A -file\|name-> B`, quoted `"Order \| Items"`
|
|
4858
|
+
| Construct | Scope |
|
|
4859
|
+
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
4860
|
+
| Bare `collapsed` trailing flag (§1.8) | sequence (groups, sections, multi-line notes), infra, gantt, kanban, mindmap, pert, state, event-line (eras), block, wireframe, sitemap, boxes-and-lines, timeline (lanes), journey-map, raci. c4 parses it but draws nothing (c4 folds by drill level). Legacy: `collapsed: true` metadata |
|
|
4861
|
+
| Same-line / indented metadata on declarations | all chart types except flowchart, state, data charts (§1.4) |
|
|
4862
|
+
| Trailing-keyword flag list | wireframe only (§19) |
|
|
4863
|
+
| `progress: <N>` key | gantt only (§13) |
|
|
4864
|
+
| `score: <N>` + `emotion: <Word>` keys | journey-map only (§22) |
|
|
4865
|
+
| `description: <text>` shorthand for layers | pyramid, ring (§23, §24) |
|
|
4866
|
+
| `milestone` keyword | **removed** — use `<name> 0` (§13A) |
|
|
4867
|
+
| `\|` operator as metadata delimiter | **removed** (§1.4). Surviving uses: wireframe `{A \| B}` braces, in-arrow `A -file\|name-> B`, quoted `"Order \| Items"` |
|
|
4818
4868
|
|
|
4819
4869
|
### 26.4 Quoted Names + Aliases — Pick One
|
|
4820
4870
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
swot Coopérative du Rhum
|
|
2
|
+
no-axes
|
|
3
|
+
x-label Atouts, Risques
|
|
4
|
+
y-label Interne, Externe
|
|
5
|
+
|
|
6
|
+
// The source order is deliberately T O W S; the panels stay S W / O T.
|
|
7
|
+
threats Menaces
|
|
8
|
+
Blocus de la marine royale, qui ferme le port principal pendant toute la saison des alizés
|
|
9
|
+
opportunities Opportunités teal
|
|
10
|
+
Contrat de ration de rhum pour la marine
|
|
11
|
+
Ouverture d'une route commerciale vers les îles du sud
|
|
12
|
+
Demande croissante en Europe
|
|
13
|
+
weaknesses Faiblesses
|
|
14
|
+
Un seul fournisseur de tonneaux
|
|
15
|
+
strengths Forces
|
|
16
|
+
La plus ancienne distillerie de l'île
|
|
17
|
+
Quarante goûteurs assermentés, formés dans trois ports différents et capables de reconnaître un millésime à l'odeur
|
|
18
|
+
Formation reprise chaque hiver
|
|
19
|
+
Recette gardée depuis 1680
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
swot Tortuga Rum Co.
|
|
2
|
+
tag Priority as p
|
|
3
|
+
High red
|
|
4
|
+
Low gray
|
|
5
|
+
active-tag Priority
|
|
6
|
+
x-label Helpful, Harmful
|
|
7
|
+
y-label Internal, External
|
|
8
|
+
|
|
9
|
+
strengths
|
|
10
|
+
Oldest still on the island p: Low
|
|
11
|
+
Crew of 40 sworn tasters
|
|
12
|
+
Trained in three ports
|
|
13
|
+
weaknesses Soft spots yellow
|
|
14
|
+
One barrel supplier p: High
|
|
15
|
+
opportunities
|
|
16
|
+
Navy rum ration contract
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
swot Tortuga Rum Co.
|
|
2
|
+
|
|
3
|
+
strengths
|
|
4
|
+
Oldest still on the island
|
|
5
|
+
Crew of 40 sworn tasters
|
|
6
|
+
weaknesses
|
|
7
|
+
One barrel supplier
|
|
8
|
+
Cost: 20% above rivals, margins thin
|
|
9
|
+
opportunities
|
|
10
|
+
Navy rum ration contract
|
|
11
|
+
threats
|
|
12
|
+
Royal Navy blockade
|
|
13
|
+
Margins are in the red
|
|
@@ -9,6 +9,7 @@ rectangle Magic link at: 60 250, size: 180 70, color: green
|
|
|
9
9
|
arrow emails a code from: 150 95, to: 150 285, color: green
|
|
10
10
|
database Users at: 420 160, size: 140 100, color: purple, fill: solid
|
|
11
11
|
queue Email jobs at: 300 380, size: 200 64, color: orange
|
|
12
|
+
file Audit log at: 60 400, size: 140 80, color: gray
|
|
12
13
|
arrow from: 150 285, to: 400 412, color: orange, bend: 50
|
|
13
14
|
text keep it to ONE screen at: 62 184
|
|
14
15
|
text 2FA here?? at: 560 -4, color: red
|