@diagrammo/dgmo 0.53.0 → 0.54.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/dist/advanced.d.ts +36 -0
- package/dist/advanced.js +159 -154
- package/dist/auto.js +142 -128
- package/dist/auto.mjs +775 -466
- package/dist/block.js +62 -60
- package/dist/chart-meta.js +50 -47
- package/dist/{charts-d3-DH2XA45I.js → charts-d3-25E4VWXO.js} +9 -8
- package/dist/chunk-2CW5ZTNH.js +58 -0
- package/dist/{chunk-PKNNHU7H.js → chunk-2NYXI35Z.js} +17 -10
- package/dist/{chunk-W5KMNC5U.js → chunk-2NZOHEP4.js} +9 -10
- package/dist/{chunk-6DCOIN4W.js → chunk-3FRO35WW.js} +768 -2
- package/dist/{chunk-6AUZPPAV.js → chunk-3KHJJP3J.js} +2 -2
- package/dist/{chunk-X3RXGSCZ.js → chunk-3SBHODJ4.js} +11 -11
- package/dist/{chunk-KUSAVOWZ.js → chunk-3SEEP2JM.js} +3 -3
- package/dist/{chunk-QWIBT6DS.js → chunk-47JNEKJA.js} +10 -10
- package/dist/{chunk-LHILKFDP.js → chunk-4T6OCSJ2.js} +9 -9
- package/dist/{chunk-XQ4KN6JQ.js → chunk-4ZIKWVSQ.js} +16 -15
- package/dist/{chunk-GMAH572Z.js → chunk-5VXU6MND.js} +2 -2
- package/dist/{chunk-HORZ5H2L.js → chunk-5XSNLXU5.js} +17 -17
- package/dist/{chunk-BFDVEO5R.js → chunk-62Y27T4C.js} +2 -2
- package/dist/{chunk-R5NH5BZG.js → chunk-6KL7TFLS.js} +6 -6
- package/dist/{chunk-UVDCHR4E.js → chunk-6OYDOQ2Q.js} +2 -2
- package/dist/{chunk-QI3BOLQB.js → chunk-7K6NDSXH.js} +4 -4
- package/dist/{chunk-27STWBOK.js → chunk-7SP4C6EV.js} +6 -8
- package/dist/{chunk-I46X5VUA.js → chunk-7TF3QOOD.js} +25 -1
- package/dist/{chunk-FGDSTT3F.js → chunk-7U4OR7CD.js} +2 -2
- package/dist/{chunk-VKNCC2GX.js → chunk-7UPFTBOW.js} +13 -13
- package/dist/{chunk-FT7TPPZ5.js → chunk-A3BDLDYG.js} +12 -12
- package/dist/{chunk-AZNXGWDC.js → chunk-ADCHLNWT.js} +7 -7
- package/dist/{chunk-CMVZWP32.js → chunk-AHTTKERF.js} +2 -2
- package/dist/{chunk-GAWKIIPO.js → chunk-AJFHNS67.js} +7 -7
- package/dist/{chunk-Q7AH665U.js → chunk-AQEYUVGJ.js} +111 -35
- package/dist/{chunk-BR7AYN76.js → chunk-B7N5KYXQ.js} +12 -12
- package/dist/chunk-BEOAKGNA.js +484 -0
- package/dist/{chunk-GABSL6TH.js → chunk-BM7MG6HT.js} +3 -3
- package/dist/{chunk-UKP5HWB5.js → chunk-BWYFIVZF.js} +4 -4
- package/dist/{chunk-7GUF6SDR.js → chunk-BZJIITYM.js} +9 -9
- package/dist/{chunk-RW5PEJ7D.js → chunk-C2UORMIA.js} +3 -3
- package/dist/{chunk-FXCB7H5O.js → chunk-CCGWX6AO.js} +2 -2
- package/dist/{chunk-AHXIMHDQ.js → chunk-COJW2NEY.js} +9 -9
- package/dist/{chunk-XY3UDKKH.js → chunk-COVYNAKJ.js} +4 -4
- package/dist/{chunk-GQ644SPD.js → chunk-CSHFU6LT.js} +14 -14
- package/dist/{chunk-JTMSWEIW.js → chunk-DLU643TF.js} +4 -4
- package/dist/{chunk-QAALSCKI.js → chunk-DPGQ5UMO.js} +12 -12
- package/dist/{chunk-I64ECJX3.js → chunk-EAI6XJ7D.js} +3 -3
- package/dist/{chunk-DWUMPMV2.js → chunk-EPRF3ZRV.js} +2 -2
- package/dist/{chunk-AIMLCDAO.js → chunk-EQOMY4PY.js} +2 -2
- package/dist/{chunk-XEAQDIMF.js → chunk-F7XM366V.js} +6 -6
- package/dist/{chunk-SG4PRYO3.js → chunk-FFVFZLRT.js} +49 -18
- package/dist/{chunk-LC3FFD43.js → chunk-FR6UFVSV.js} +12 -12
- package/dist/{chunk-6HTRCTAS.js → chunk-FVMKCZHF.js} +6 -4
- package/dist/{chunk-FUKNRLIJ.js → chunk-GK32ZFZY.js} +6 -6
- package/dist/{chunk-6KY7OCZC.js → chunk-GKYHWJXI.js} +3 -3
- package/dist/{chunk-NNYFQOTK.js → chunk-GQ5ECRP4.js} +10 -8
- package/dist/{chunk-PT4SW76W.js → chunk-HAA25PLC.js} +9 -9
- package/dist/{chunk-J7HI6G3G.js → chunk-HFEOOQ46.js} +6 -6
- package/dist/{chunk-KKHCNSKK.js → chunk-I47VHSPS.js} +5 -5
- package/dist/{chunk-YG2BEIQU.js → chunk-ICKXIMBA.js} +11 -11
- package/dist/{chunk-A44USUV7.js → chunk-ICZ7M6IZ.js} +23 -17
- package/dist/{chunk-HE5J53SZ.js → chunk-IOIMQHQ6.js} +3 -3
- package/dist/{chunk-3BEKKRH5.js → chunk-IYNKLCAZ.js} +8 -8
- package/dist/{chunk-774C2FF3.js → chunk-J7HQPVYH.js} +2 -2
- package/dist/{chunk-UFQJMOVZ.js → chunk-KBVOVDYP.js} +6 -6
- package/dist/{chunk-JHOAH4TI.js → chunk-KDK5EKUR.js} +2 -2
- package/dist/{chunk-VIRANCNY.js → chunk-KINOX74I.js} +14 -14
- package/dist/{chunk-VJHBSPGF.js → chunk-KQ3FNRGR.js} +3 -3
- package/dist/{chunk-U7NKYLX2.js → chunk-KQYQECWQ.js} +13 -13
- package/dist/{chunk-GMIJ35PW.js → chunk-KS5ZSM5T.js} +13 -13
- package/dist/{chunk-FLDC7ZAK.js → chunk-KV4HLIJE.js} +2 -2
- package/dist/{chunk-PYO4TJJ3.js → chunk-LPJ6H5X4.js} +11 -11
- package/dist/{chunk-LQHVDZYC.js → chunk-LRSW4JLE.js} +4 -4
- package/dist/{chunk-VRRDUYOK.js → chunk-M24VXUFG.js} +3 -3
- package/dist/{chunk-22OQWBWD.js → chunk-M3H7ZE6C.js} +10 -10
- package/dist/{chunk-MA3HJZHB.js → chunk-MTZOXISJ.js} +7 -7
- package/dist/{chunk-GWQJKTFS.js → chunk-N7BSBAVP.js} +94 -94
- package/dist/{chunk-65V6IRFN.js → chunk-NUTWTV6G.js} +10 -10
- package/dist/{chunk-HNBY6CNV.js → chunk-O576GYAP.js} +2 -2
- package/dist/{chunk-3CZLWOCI.js → chunk-OJ435DQZ.js} +3 -3
- package/dist/{chunk-BD3WGY4T.js → chunk-OR3R27CU.js} +2 -2
- package/dist/{chunk-2QC4HXCY.js → chunk-OSXQKC3S.js} +8 -10
- package/dist/{chunk-4RGZFA7H.js → chunk-Q5IHQ4NW.js} +11 -1
- package/dist/{chunk-ALYZ3MAA.js → chunk-QBYP2FBZ.js} +8 -476
- package/dist/{chunk-4ASVFYB2.js → chunk-R5BGGBFF.js} +5 -5
- package/dist/{chunk-YR43LJT5.js → chunk-RIEAN4D5.js} +15 -12
- package/dist/{chunk-P3H7QVDH.js → chunk-RRGKMJYL.js} +6 -6
- package/dist/{chunk-XG4NWFPY.js → chunk-S7FOIURR.js} +13 -13
- package/dist/{chunk-NNUMX6WX.js → chunk-S7YFT3PO.js} +40 -15
- package/dist/{chunk-SQCBSFT5.js → chunk-SBOAZ7YK.js} +51 -263
- package/dist/{chunk-VGNIDAPQ.js → chunk-SSHS42QG.js} +4 -4
- package/dist/{chunk-SGPFVDUL.js → chunk-T3FAJAJT.js} +6 -6
- package/dist/{chunk-AN2DQB3G.js → chunk-T7Y554OK.js} +12 -12
- package/dist/chunk-TGOMHUOV.js +218 -0
- package/dist/{chunk-W2DINCHL.js → chunk-TJN2OIVG.js} +31 -16
- package/dist/{chunk-CK2GMDXD.js → chunk-TLNVYWPA.js} +2 -2
- package/dist/{chunk-CQFNIIQN.js → chunk-U4IN6AHE.js} +2 -2
- package/dist/{chunk-HOXKNRON.js → chunk-UEU6IYKY.js} +2 -2
- package/dist/{chunk-UK6DKJLD.js → chunk-UIT7E6UF.js} +4 -4
- package/dist/{chunk-IQJCVREL.js → chunk-VMSBMIHW.js} +6 -6
- package/dist/{chunk-FFXCKZOU.js → chunk-VQFDBNYF.js} +3 -3
- package/dist/{chunk-PV2QO7QL.js → chunk-W6PCFRPL.js} +2 -2
- package/dist/{chunk-UQRIKAMH.js → chunk-WKNAJ4BR.js} +13 -13
- package/dist/{chunk-4WGMGKCZ.js → chunk-WW4BQ744.js} +11 -11
- package/dist/{chunk-ZXUAPTCK.js → chunk-WWHECSYZ.js} +2 -2
- package/dist/{chunk-4K42RUGC.js → chunk-XWODFBHJ.js} +43 -12
- package/dist/{chunk-VAO6ANGC.js → chunk-YENNFS5F.js} +9 -9
- package/dist/cli.cjs +160 -146
- package/dist/completion-registry.d.ts +129 -0
- package/dist/completion-registry.js +1270 -0
- package/dist/{compute-G55RG53N.js → compute-JAP5E2E4.js} +2 -2
- package/dist/dgmo-router-TGZWFIZO.js +88 -0
- package/dist/{dimensions-K6PGYYGT.js → dimensions-L6BXQXXL.js} +8 -8
- package/dist/editor.js +18 -0
- package/dist/element.js +142 -128
- package/dist/element.mjs +775 -466
- package/dist/{flowchart-parser-LALR6J6F.js → flowchart-parser-UKYOW3VM.js} +5 -5
- package/dist/{flowchart-renderer-DXYB5YRF.js → flowchart-renderer-DCFKUDDR.js} +9 -9
- package/dist/highlight.js +18 -0
- package/dist/index.js +65 -62
- package/dist/{layout-WCAIKGZG.js → layout-25Y3VDYF.js} +5 -5
- package/dist/layout-4SPLI4HG.js +15 -0
- package/dist/{layout-E6HR6PXH.js → layout-A6OIGZN2.js} +3 -3
- package/dist/{layout-3BVDMKXI.js → layout-CH4HFFRD.js} +4 -4
- package/dist/{layout-ZE5DRJWX.js → layout-G2ABQJQZ.js} +4 -4
- package/dist/{layout-3V2A4MUE.js → layout-ITLPDG6M.js} +6 -5
- package/dist/{layout-WSMPBQ4Q.js → layout-NF4EWFLT.js} +3 -3
- package/dist/layout-NY7MHJCL.js +15 -0
- package/dist/{layout-4IHCMWZN.js → layout-QBNAMEOA.js} +4 -4
- package/dist/{layout-OL2XFJXA.js → layout-SP7HJWKA.js} +3 -3
- package/dist/{layout-search-34DPZD43.js → layout-search-LUI475P3.js} +9 -4
- package/dist/{legend-constants-P5EQWRQQ.js → legend-constants-B77VKB3R.js} +7 -2
- package/dist/{parser-5QPFOB5F.js → parser-2UWWNTFL.js} +4 -4
- package/dist/{parser-CKA3QMAG.js → parser-3RXYQSA7.js} +5 -5
- package/dist/{parser-GKP2MHHL.js → parser-5C3PEZK3.js} +3 -3
- package/dist/{parser-275KP7JO.js → parser-66RYGJRB.js} +5 -6
- package/dist/{parser-7JHWEWXM.js → parser-6GN5YJBJ.js} +4 -4
- package/dist/{parser-XVPTRWZ4.js → parser-6MQM7WT3.js} +4 -4
- package/dist/{parser-7JVIDLLR.js → parser-7UI6UQ7B.js} +4 -4
- package/dist/{parser-5HQXCNOS.js → parser-B2A7XOAK.js} +3 -3
- package/dist/{parser-UWRX52PC.js → parser-CCNJKDDA.js} +4 -4
- package/dist/{parser-CRKLXGW7.js → parser-ESHNUFME.js} +4 -4
- package/dist/{parser-EXNBDNGY.js → parser-F4FEU57T.js} +3 -3
- package/dist/{parser-IVGHXLZP.js → parser-FHRMFUNX.js} +4 -3
- package/dist/{parser-XNKJCMMA.js → parser-FPCWDYQV.js} +4 -4
- package/dist/{parser-ZQDQTB4X.js → parser-FY3YFFBS.js} +5 -5
- package/dist/{parser-VOERD6XR.js → parser-GML6V2KZ.js} +4 -4
- package/dist/{parser-3CODK6RG.js → parser-HA3PF5FL.js} +4 -4
- package/dist/{parser-GN2MM5CC.js → parser-KTYF6WO5.js} +3 -3
- package/dist/{parser-ZGNXYFPS.js → parser-LTA2BOZO.js} +3 -3
- package/dist/{parser-FOOFEJQU.js → parser-LU7UAKNB.js} +4 -4
- package/dist/{parser-NNIL3HXU.js → parser-MHKYQPC2.js} +3 -3
- package/dist/{parser-IKWK2ZU3.js → parser-MVSYFK63.js} +4 -5
- package/dist/{parser-3VSWEKBF.js → parser-O7YQYFEN.js} +4 -4
- package/dist/{parser-YSLNDFLV.js → parser-OPIXXUY4.js} +4 -5
- package/dist/{parser-RNLTBIJ6.js → parser-S4EJPNVN.js} +4 -4
- package/dist/{parser-G26MTBFS.js → parser-T3D7BV6O.js} +3 -3
- package/dist/{parser-3KIGEEJM.js → parser-VVE4THG3.js} +4 -4
- package/dist/{parser-5FGJSQNS.js → parser-WPPJGB4R.js} +4 -4
- package/dist/{parser-27Z76SN3.js → parser-X5XLFY4Z.js} +4 -4
- package/dist/{parser-6B6SSZT7.js → parser-XCPMEB2Z.js} +3 -3
- package/dist/{parser-6PPHAXXH.js → parser-XRDUX2AR.js} +5 -5
- package/dist/{parser-FF4BMRSB.js → parser-YPWYT46P.js} +4 -4
- package/dist/{parser-4E4I3GNT.js → parser-YULS5MLD.js} +4 -4
- package/dist/{renderer-ZBTEX2JK.js → renderer-2DME63VZ.js} +4 -4
- package/dist/{renderer-RLMOTXZ6.js → renderer-3VY3VXJE.js} +13 -13
- package/dist/{renderer-6WRYVM5R.js → renderer-4A32DX5L.js} +8 -8
- package/dist/{renderer-UPF7NRTI.js → renderer-4K5YYX5R.js} +11 -11
- package/dist/{renderer-HIFQVEJA.js → renderer-6CFML5G3.js} +9 -9
- package/dist/{renderer-7NQSTQMQ.js → renderer-7HMZ5OCJ.js} +4 -4
- package/dist/{renderer-NE5W7CQP.js → renderer-B7Y6I7JX.js} +6 -5
- package/dist/{renderer-LVZAHRP6.js → renderer-C3RI4OPJ.js} +11 -12
- package/dist/{renderer-COLQFSFV.js → renderer-CJ56SUMF.js} +9 -9
- package/dist/{renderer-WFSUBKUL.js → renderer-COJZZ4F6.js} +8 -8
- package/dist/{renderer-SQ54MDSA.js → renderer-FXMGCSRP.js} +9 -9
- package/dist/{renderer-TYHGXAVT.js → renderer-G4UOW3RH.js} +4 -4
- package/dist/{renderer-YUXGXGSW.js → renderer-HQ4JFZOV.js} +9 -9
- package/dist/{renderer-JTCX6PCG.js → renderer-LHVCKEWF.js} +9 -9
- package/dist/{renderer-WNFXYYGL.js → renderer-OZX5KGQM.js} +8 -8
- package/dist/{renderer-CWEFGEIC.js → renderer-P3YQES7B.js} +13 -13
- package/dist/{renderer-UKXW2QPE.js → renderer-PLVIARM7.js} +9 -8
- package/dist/{renderer-5MPN7CXZ.js → renderer-RA4PTAMF.js} +5 -5
- package/dist/{renderer-JCZG6AYU.js → renderer-RMAM2SOJ.js} +10 -10
- package/dist/{renderer-JWGQSTMR.js → renderer-SES7QZYL.js} +14 -14
- package/dist/{renderer-KARQF3F3.js → renderer-TQ5QDZOE.js} +8 -8
- package/dist/{renderer-6EN5XXJZ.js → renderer-V5SNTPAM.js} +10 -10
- package/dist/{renderer-QD2SJF2I.js → renderer-WVD6G2TS.js} +9 -9
- package/dist/{renderer-AK2WO4EI.js → renderer-X2LYSMLU.js} +4 -4
- package/dist/{renderer-VMH6L6CP.js → renderer-Y3NXZINM.js} +8 -8
- package/dist/{renderer-XTXSOK3L.js → renderer-YEFOOULC.js} +10 -10
- package/dist/{renderer-YUKPS27O.js → renderer-YP3P6UVT.js} +8 -8
- package/dist/{renderer-D3BRNOMV.js → renderer-YVMETH6V.js} +11 -11
- package/dist/{renderer-2C6DJRYN.js → renderer-Z4GNKNXO.js} +8 -8
- package/dist/{renderer-radial-WF6VOUOD.js → renderer-radial-VYBZAXXE.js} +9 -9
- package/dist/{state-parser-L7DHZIQO.js → state-parser-VIW2WNA5.js} +5 -5
- package/dist/{state-renderer-TFEUOP4H.js → state-renderer-H22AQD3U.js} +12 -12
- package/package.json +5 -1
- package/dist/chunk-YJVA3QUU.js +0 -734
- package/dist/dgmo-router-B4S23EBH.js +0 -86
- package/dist/layout-3M5UYJHY.js +0 -14
- package/dist/layout-KPQWJNAG.js +0 -14
|
@@ -0,0 +1,1270 @@
|
|
|
1
|
+
import {
|
|
2
|
+
chartTypes
|
|
3
|
+
} from "./chunk-TGOMHUOV.js";
|
|
4
|
+
import {
|
|
5
|
+
ALL_MARKERS
|
|
6
|
+
} from "./chunk-BEOAKGNA.js";
|
|
7
|
+
import {
|
|
8
|
+
GROUP_ONLY_METADATA,
|
|
9
|
+
STATE_KEYWORDS
|
|
10
|
+
} from "./chunk-BM7MG6HT.js";
|
|
11
|
+
import "./chunk-AHTTKERF.js";
|
|
12
|
+
import {
|
|
13
|
+
ALL_CHART_TYPES
|
|
14
|
+
} from "./chunk-3FRO35WW.js";
|
|
15
|
+
import "./chunk-ZKPPI6BF.js";
|
|
16
|
+
import "./chunk-4W2PE66Q.js";
|
|
17
|
+
import "./chunk-5WRI5ZAA.js";
|
|
18
|
+
|
|
19
|
+
// src/completion-registry.ts
|
|
20
|
+
var GLOBAL_DIRECTIVES = {
|
|
21
|
+
palette: {
|
|
22
|
+
description: "Color palette name",
|
|
23
|
+
values: [
|
|
24
|
+
"nord",
|
|
25
|
+
"catppuccin",
|
|
26
|
+
"tokyo-night",
|
|
27
|
+
"atlas",
|
|
28
|
+
"blueprint",
|
|
29
|
+
"slate",
|
|
30
|
+
"tidewater"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
theme: {
|
|
34
|
+
description: "Color theme",
|
|
35
|
+
values: ["light", "dark", "transparent"]
|
|
36
|
+
},
|
|
37
|
+
"no-title": {
|
|
38
|
+
description: "Hide the diagram title"
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
function withGlobals(directives = {}) {
|
|
42
|
+
return { directives: { ...GLOBAL_DIRECTIVES, ...directives } };
|
|
43
|
+
}
|
|
44
|
+
var DATE_DIRECTIVES = {
|
|
45
|
+
year: {
|
|
46
|
+
description: "Base year for bare month-day dates (e.g. `year 2026`); makes the diagram reproducible"
|
|
47
|
+
},
|
|
48
|
+
"date-order": {
|
|
49
|
+
description: "How numeric slash/dash dates read: mdy (US, default) or dmy (day-first)",
|
|
50
|
+
values: ["mdy", "dmy"]
|
|
51
|
+
},
|
|
52
|
+
"no-current-year": {
|
|
53
|
+
description: "Treat a fully-bare date (no year anywhere) as an error instead of assuming the current year"
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
|
|
57
|
+
// ── Data charts ──────────────────────────────────────────
|
|
58
|
+
[
|
|
59
|
+
"bar",
|
|
60
|
+
withGlobals({
|
|
61
|
+
"no-legend": { description: "Hide the legend" },
|
|
62
|
+
stack: {
|
|
63
|
+
description: "Multi-series block header \u2192 stacked bars (one bar/category)"
|
|
64
|
+
},
|
|
65
|
+
group: {
|
|
66
|
+
description: "Multi-series block header \u2192 clustered (side-by-side) bars"
|
|
67
|
+
},
|
|
68
|
+
"x-label": { description: "X-axis label" },
|
|
69
|
+
"y-label": { description: "Y-axis label" },
|
|
70
|
+
"orientation-horizontal": { description: "Switch to horizontal bars" },
|
|
71
|
+
"no-value": { description: "Hide value labels atop each bar" },
|
|
72
|
+
color: { description: "Bar color override" }
|
|
73
|
+
})
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"line",
|
|
77
|
+
withGlobals({
|
|
78
|
+
"no-legend": { description: "Hide the legend" },
|
|
79
|
+
series: { description: "Series name(s)" },
|
|
80
|
+
fill: { description: "Fill under the line (area chart)" },
|
|
81
|
+
"x-label": { description: "X-axis label" },
|
|
82
|
+
"y-label": { description: "Y-axis label (left axis)" },
|
|
83
|
+
"y-right-label": {
|
|
84
|
+
description: "Right y-axis label (dual-axis; group series beneath it)"
|
|
85
|
+
},
|
|
86
|
+
"no-value": { description: "Hide value labels at each point" }
|
|
87
|
+
})
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"pie",
|
|
91
|
+
withGlobals({
|
|
92
|
+
hole: {
|
|
93
|
+
description: "Doughnut ring (optional ratio 0\u20130.9); shows the total in center"
|
|
94
|
+
},
|
|
95
|
+
"no-center-total": {
|
|
96
|
+
description: "Hide the center total on a doughnut/hole pie"
|
|
97
|
+
},
|
|
98
|
+
"no-name": { description: "Hide name from segment labels" },
|
|
99
|
+
"no-value": { description: "Hide value from segment labels" },
|
|
100
|
+
"no-percent": { description: "Hide percent from segment labels" }
|
|
101
|
+
})
|
|
102
|
+
],
|
|
103
|
+
[
|
|
104
|
+
"polar-area",
|
|
105
|
+
withGlobals({
|
|
106
|
+
"no-name": { description: "Hide name from segment labels" },
|
|
107
|
+
"no-value": { description: "Hide value from segment labels" },
|
|
108
|
+
"no-percent": { description: "Hide percent from segment labels" }
|
|
109
|
+
})
|
|
110
|
+
],
|
|
111
|
+
[
|
|
112
|
+
"radar",
|
|
113
|
+
withGlobals({
|
|
114
|
+
"no-legend": { description: "Hide the legend" },
|
|
115
|
+
"no-value": { description: "Hide value labels at each vertex" }
|
|
116
|
+
})
|
|
117
|
+
],
|
|
118
|
+
// ── Extended charts ──────────────────────────────────────
|
|
119
|
+
[
|
|
120
|
+
"scatter",
|
|
121
|
+
withGlobals({
|
|
122
|
+
"no-legend": { description: "Hide the legend" },
|
|
123
|
+
"no-name": { description: "Hide point labels" },
|
|
124
|
+
"x-label": { description: "X-axis label" },
|
|
125
|
+
"y-label": { description: "Y-axis label" },
|
|
126
|
+
"size-label": { description: "Size axis label" }
|
|
127
|
+
})
|
|
128
|
+
],
|
|
129
|
+
[
|
|
130
|
+
"heatmap",
|
|
131
|
+
withGlobals({
|
|
132
|
+
columns: { description: "Column labels (required)" },
|
|
133
|
+
"no-value": { description: "Hide cell value text" }
|
|
134
|
+
})
|
|
135
|
+
],
|
|
136
|
+
[
|
|
137
|
+
"sankey",
|
|
138
|
+
// Spec §1.11 (decision #49): the emphasis family. `highlight` lights the
|
|
139
|
+
// named node's whole upstream+downstream flow closure and recedes the rest;
|
|
140
|
+
// `dim` recedes exactly the named nodes. Mutually exclusive, last-one-wins.
|
|
141
|
+
withGlobals({
|
|
142
|
+
highlight: {
|
|
143
|
+
description: "Light the named flow and recede everything else (highlight Barrel Aging)"
|
|
144
|
+
},
|
|
145
|
+
dim: {
|
|
146
|
+
description: "Recede the named nodes and their flows, leaving the rest untouched (dim Spoilage)"
|
|
147
|
+
}
|
|
148
|
+
})
|
|
149
|
+
],
|
|
150
|
+
[
|
|
151
|
+
"funnel",
|
|
152
|
+
withGlobals({
|
|
153
|
+
"no-name": { description: "Hide left-side stage names" },
|
|
154
|
+
"no-value": { description: "Hide in-band values" },
|
|
155
|
+
"no-percent": { description: "Hide right-side conversion percentages" }
|
|
156
|
+
})
|
|
157
|
+
],
|
|
158
|
+
[
|
|
159
|
+
"function",
|
|
160
|
+
withGlobals({
|
|
161
|
+
"no-legend": { description: "Hide the legend" },
|
|
162
|
+
x: { description: "X-axis range (start to end)" },
|
|
163
|
+
"x-label": { description: "X-axis label" },
|
|
164
|
+
"y-label": { description: "Y-axis label" },
|
|
165
|
+
shade: { description: "Fill area below curves with translucent color" }
|
|
166
|
+
})
|
|
167
|
+
],
|
|
168
|
+
// ── Visualizations ───────────────────────────────────────
|
|
169
|
+
["slope", withGlobals()],
|
|
170
|
+
[
|
|
171
|
+
"wordcloud",
|
|
172
|
+
withGlobals({
|
|
173
|
+
rotate: {
|
|
174
|
+
description: "Word rotation",
|
|
175
|
+
values: ["none", "mixed", "angled"]
|
|
176
|
+
},
|
|
177
|
+
max: { description: "Maximum word count" },
|
|
178
|
+
size: { description: "Font size range (min, max)" }
|
|
179
|
+
})
|
|
180
|
+
],
|
|
181
|
+
[
|
|
182
|
+
"arc",
|
|
183
|
+
withGlobals({
|
|
184
|
+
order: {
|
|
185
|
+
description: "Node ordering",
|
|
186
|
+
values: ["appearance", "name", "group", "degree"]
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
],
|
|
190
|
+
[
|
|
191
|
+
"timeline",
|
|
192
|
+
withGlobals({
|
|
193
|
+
"no-legend": { description: "Hide the legend" },
|
|
194
|
+
...DATE_DIRECTIVES,
|
|
195
|
+
"active-tag": { description: "Active tag group name" }
|
|
196
|
+
})
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
"event-line",
|
|
200
|
+
withGlobals({
|
|
201
|
+
...DATE_DIRECTIVES,
|
|
202
|
+
"no-scale": { description: "Space events evenly instead of by date" },
|
|
203
|
+
side: {
|
|
204
|
+
description: "Card placement: side above | below (default alternate)"
|
|
205
|
+
},
|
|
206
|
+
"no-box": {
|
|
207
|
+
description: "Card-less label/rule/description style (slides)"
|
|
208
|
+
},
|
|
209
|
+
"no-legend": { description: "Hide the tag legend" },
|
|
210
|
+
TBD: {
|
|
211
|
+
description: 'Date prefix for a not-yet-scheduled future event (e.g. "TBD Console Port")'
|
|
212
|
+
},
|
|
213
|
+
"active-tag": { description: "Active tag group name" }
|
|
214
|
+
})
|
|
215
|
+
],
|
|
216
|
+
["venn", withGlobals()],
|
|
217
|
+
[
|
|
218
|
+
"body",
|
|
219
|
+
withGlobals({
|
|
220
|
+
muscle: { description: "Muscle form (default)" },
|
|
221
|
+
skin: { description: "Skin silhouette form" },
|
|
222
|
+
male: { description: "Male figure (default)" },
|
|
223
|
+
front: { description: "Front view (default)" },
|
|
224
|
+
"no-legend": { description: "Hide the tag legend" },
|
|
225
|
+
"active-tag": { description: "Active tag group name" }
|
|
226
|
+
})
|
|
227
|
+
],
|
|
228
|
+
[
|
|
229
|
+
"quadrant",
|
|
230
|
+
withGlobals({
|
|
231
|
+
"x-label": { description: "X-axis labels (low, high)" },
|
|
232
|
+
"y-label": { description: "Y-axis labels (low, high)" }
|
|
233
|
+
})
|
|
234
|
+
],
|
|
235
|
+
// ── Diagrams ─────────────────────────────────────────────
|
|
236
|
+
[
|
|
237
|
+
"sequence",
|
|
238
|
+
withGlobals({
|
|
239
|
+
"no-legend": { description: "Hide the legend" },
|
|
240
|
+
activations: {
|
|
241
|
+
description: "Show activation bars",
|
|
242
|
+
values: ["on", "off"]
|
|
243
|
+
},
|
|
244
|
+
"active-tag": { description: "Active tag group name" }
|
|
245
|
+
})
|
|
246
|
+
],
|
|
247
|
+
[
|
|
248
|
+
"flowchart",
|
|
249
|
+
// Spec §5 §4.6: direction-lr, fill family, no-notes. The phantom
|
|
250
|
+
// `orientation-vertical` (never implemented) was deleted in decision #48.
|
|
251
|
+
withGlobals({
|
|
252
|
+
"direction-lr": { description: "Switch to left-to-right layout" },
|
|
253
|
+
"direction-tb": { description: "Top-to-bottom layout (the default)" },
|
|
254
|
+
"no-notes": { description: "Suppress all node note boxes" }
|
|
255
|
+
})
|
|
256
|
+
],
|
|
257
|
+
[
|
|
258
|
+
"class",
|
|
259
|
+
withGlobals({
|
|
260
|
+
"no-legend": { description: "Hide the legend" }
|
|
261
|
+
})
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
"er",
|
|
265
|
+
// Spec §9 §8.5: notation (chen/crow), active-tag.
|
|
266
|
+
withGlobals({
|
|
267
|
+
"no-legend": { description: "Hide the legend" },
|
|
268
|
+
notation: {
|
|
269
|
+
description: "ER notation style",
|
|
270
|
+
values: ["chen", "crow"]
|
|
271
|
+
},
|
|
272
|
+
"active-tag": { description: "Active tag group name" }
|
|
273
|
+
})
|
|
274
|
+
],
|
|
275
|
+
[
|
|
276
|
+
"org",
|
|
277
|
+
// Spec §7 §6.5: direction-tb, sub-node-label, show-sub-node-count,
|
|
278
|
+
// hide, active-tag. fill family via FILL_FAMILY_CAPABLE.
|
|
279
|
+
withGlobals({
|
|
280
|
+
"no-legend": { description: "Hide the legend" },
|
|
281
|
+
"direction-tb": { description: "Top-to-bottom layout (the default)" },
|
|
282
|
+
"direction-lr": { description: "Switch to left-to-right layout" },
|
|
283
|
+
"sub-node-label": { description: "Label for sub-nodes" },
|
|
284
|
+
"show-sub-node-count": { description: "Show sub-node counts" },
|
|
285
|
+
hide: { description: "Hide tag:value pairs" },
|
|
286
|
+
"active-tag": { description: "Active tag group name" }
|
|
287
|
+
})
|
|
288
|
+
],
|
|
289
|
+
[
|
|
290
|
+
"family",
|
|
291
|
+
// Spec §32: sex-as-color + tag legend; active-tag. Fill family via
|
|
292
|
+
// FILL_FAMILY_CAPABLE.
|
|
293
|
+
withGlobals({
|
|
294
|
+
"no-legend": { description: "Hide the legend" },
|
|
295
|
+
"active-tag": { description: "Active tag group name" },
|
|
296
|
+
highlight: {
|
|
297
|
+
description: "Dim everyone outside a person\u2019s bloodline (highlight Name)"
|
|
298
|
+
},
|
|
299
|
+
generations: {
|
|
300
|
+
description: "Show Roman-numeral generation labels in a left gutter"
|
|
301
|
+
},
|
|
302
|
+
"no-daggers": {
|
|
303
|
+
description: "Hide the deceased dagger (\u2020) marker"
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
],
|
|
307
|
+
[
|
|
308
|
+
"kanban",
|
|
309
|
+
// Spec §11 §10.4: hide, active-tag.
|
|
310
|
+
withGlobals({
|
|
311
|
+
"no-legend": { description: "Hide the legend" },
|
|
312
|
+
hide: { description: "Hide tag:value pairs" },
|
|
313
|
+
"active-tag": { description: "Active tag group name" }
|
|
314
|
+
})
|
|
315
|
+
],
|
|
316
|
+
// RACI / RASCI / DACI — one chart type (`raci`); the variant (RACI, RASCI,
|
|
317
|
+
// or DACI) is inferred from the markers used (D → DACI, S → RASCI).
|
|
318
|
+
[
|
|
319
|
+
"raci",
|
|
320
|
+
withGlobals({
|
|
321
|
+
"no-legend": { description: "Hide the legend" },
|
|
322
|
+
roles: {
|
|
323
|
+
description: "Declare role column order (inline `roles A, B, C` or indented block with per-role pipe metadata)"
|
|
324
|
+
},
|
|
325
|
+
"active-tag": { description: "Active tag group name" }
|
|
326
|
+
})
|
|
327
|
+
],
|
|
328
|
+
[
|
|
329
|
+
"c4",
|
|
330
|
+
// Spec §8 §7.7: direction booleans, active-tag.
|
|
331
|
+
withGlobals({
|
|
332
|
+
"no-legend": { description: "Hide the legend" },
|
|
333
|
+
"direction-tb": { description: "Top-to-bottom layout (the default)" },
|
|
334
|
+
"direction-lr": { description: "Switch to left-to-right layout" },
|
|
335
|
+
"active-tag": { description: "Active tag group name" }
|
|
336
|
+
})
|
|
337
|
+
],
|
|
338
|
+
[
|
|
339
|
+
"state",
|
|
340
|
+
// Spec §6 §5.6: direction booleans, fill family, no-notes, active-tag
|
|
341
|
+
// (decision #48 — state gained the standard tag system).
|
|
342
|
+
withGlobals({
|
|
343
|
+
"no-legend": { description: "Hide the legend" },
|
|
344
|
+
"direction-tb": { description: "Switch to top-to-bottom layout" },
|
|
345
|
+
"direction-lr": { description: "Left-to-right layout (the default)" },
|
|
346
|
+
"no-notes": { description: "Suppress all state note boxes" },
|
|
347
|
+
"active-tag": { description: "Active tag group name" }
|
|
348
|
+
})
|
|
349
|
+
],
|
|
350
|
+
[
|
|
351
|
+
"sitemap",
|
|
352
|
+
withGlobals({
|
|
353
|
+
"no-legend": { description: "Hide the legend" },
|
|
354
|
+
"direction-tb": { description: "Switch to top-to-bottom layout" },
|
|
355
|
+
"direction-lr": { description: "Left-to-right layout (the default)" },
|
|
356
|
+
"active-tag": { description: "Active tag group name" }
|
|
357
|
+
})
|
|
358
|
+
],
|
|
359
|
+
[
|
|
360
|
+
"infra",
|
|
361
|
+
withGlobals({
|
|
362
|
+
"no-legend": { description: "Hide the legend" },
|
|
363
|
+
"direction-tb": { description: "Switch to top-to-bottom layout" },
|
|
364
|
+
"direction-lr": { description: "Left-to-right layout (the default)" },
|
|
365
|
+
animate: { description: "Enable traffic animation" },
|
|
366
|
+
"default-latency-ms": { description: "Default latency for all nodes" },
|
|
367
|
+
"default-uptime": { description: "Default uptime for all nodes" },
|
|
368
|
+
"default-rps": { description: "Default RPS capacity for all nodes" },
|
|
369
|
+
"slo-availability": { description: "SLO availability target (0-1)" },
|
|
370
|
+
"slo-p90-latency-ms": { description: "SLO p90 latency target in ms" },
|
|
371
|
+
"slo-warning-margin": { description: "SLO warning margin percentage" },
|
|
372
|
+
"active-tag": { description: "Active tag group name" }
|
|
373
|
+
})
|
|
374
|
+
],
|
|
375
|
+
[
|
|
376
|
+
"pert",
|
|
377
|
+
withGlobals({
|
|
378
|
+
"no-legend": { description: "Hide the legend" },
|
|
379
|
+
...DATE_DIRECTIVES,
|
|
380
|
+
"time-unit": {
|
|
381
|
+
description: "Time unit for activity durations (sp = sprints)",
|
|
382
|
+
values: ["min", "h", "d", "bd", "w", "m", "q", "y", "sp"]
|
|
383
|
+
},
|
|
384
|
+
confidence: {
|
|
385
|
+
description: "Confidence factor for M-only durations",
|
|
386
|
+
values: ["high", "medium", "low"]
|
|
387
|
+
},
|
|
388
|
+
// Canonical direction booleans (§1.9); key+value `direction LR|TB`
|
|
389
|
+
// parses as legacy but is no longer offered.
|
|
390
|
+
"direction-tb": { description: "Switch to top-to-bottom layout" },
|
|
391
|
+
"direction-lr": { description: "Left-to-right layout (the default)" },
|
|
392
|
+
"node-detail": {
|
|
393
|
+
description: "Node visual density",
|
|
394
|
+
values: ["compact", "full"]
|
|
395
|
+
},
|
|
396
|
+
trials: {
|
|
397
|
+
description: "Monte Carlo trial count (auto-derived from activity count)"
|
|
398
|
+
},
|
|
399
|
+
seed: { description: "Monte Carlo PRNG seed (auto-derived from title)" },
|
|
400
|
+
"scrubber-trials": {
|
|
401
|
+
description: "Fast-MC trials for the duration scrubber (default 300)"
|
|
402
|
+
},
|
|
403
|
+
"start-date": { description: "Project start date (YYYY-MM-DD or now)" },
|
|
404
|
+
"end-date": { description: "Project end date (YYYY-MM-DD)" },
|
|
405
|
+
"sprint-length": { description: "Sprint duration (e.g. 2w)" },
|
|
406
|
+
"sprint-number": { description: "Starting sprint number" },
|
|
407
|
+
"sprint-start": { description: "Sprint start date (YYYY-MM-DD)" },
|
|
408
|
+
"active-tag": { description: "Active tag group name" }
|
|
409
|
+
})
|
|
410
|
+
],
|
|
411
|
+
[
|
|
412
|
+
"gantt",
|
|
413
|
+
// Spec §13 §12.2 Options.
|
|
414
|
+
withGlobals({
|
|
415
|
+
"no-legend": { description: "Hide the legend" },
|
|
416
|
+
...DATE_DIRECTIVES,
|
|
417
|
+
// Canonical since decision #48; bare `start` parses as a legacy alias
|
|
418
|
+
// but is no longer offered.
|
|
419
|
+
"start-date": { description: "Project start date (ISO, 7/4, or Jul 4)" },
|
|
420
|
+
"today-marker": {
|
|
421
|
+
description: "Today marker (bare = on, or a date)"
|
|
422
|
+
},
|
|
423
|
+
sort: { description: "Sort order", values: ["time", "group", "tag"] },
|
|
424
|
+
"critical-path": { description: "Show critical path" },
|
|
425
|
+
"no-dependencies": { description: "Hide dependency arrows" },
|
|
426
|
+
"sprint-length": { description: "Sprint duration (e.g. 2w)" },
|
|
427
|
+
"sprint-number": { description: "Starting sprint number" },
|
|
428
|
+
"sprint-start": { description: "Sprint start date (YYYY-MM-DD)" },
|
|
429
|
+
"active-tag": { description: "Active tag group name" },
|
|
430
|
+
// Legacy positive form `dependencies` — kept for back-compat. Use
|
|
431
|
+
// `no-dependencies` to suppress dependency arrows in new code.
|
|
432
|
+
dependencies: { description: "Show dependencies (legacy form)" }
|
|
433
|
+
})
|
|
434
|
+
],
|
|
435
|
+
[
|
|
436
|
+
"boxes-and-lines",
|
|
437
|
+
withGlobals({
|
|
438
|
+
"no-legend": { description: "Hide the legend" },
|
|
439
|
+
// Canonical direction booleans (§1.9); key+value `direction LR|TB`
|
|
440
|
+
// parses as legacy but is no longer offered.
|
|
441
|
+
"direction-tb": { description: "Switch to top-to-bottom layout" },
|
|
442
|
+
"direction-lr": { description: "Left-to-right layout (the default)" },
|
|
443
|
+
"active-tag": { description: "Active tag group name" },
|
|
444
|
+
hide: { description: "Hide tag:value pairs" },
|
|
445
|
+
heat: {
|
|
446
|
+
description: "Label for the value\u2192colour ramp, with an optional trailing [low] [high] color pair (pairs with the `heat:` key)"
|
|
447
|
+
},
|
|
448
|
+
// Values render by default (decision #48); legacy `show-values` is a
|
|
449
|
+
// parse-accepted no-op.
|
|
450
|
+
"no-value": { description: "Hide the per-box numeric value labels" }
|
|
451
|
+
})
|
|
452
|
+
],
|
|
453
|
+
[
|
|
454
|
+
"swimlane",
|
|
455
|
+
withGlobals({
|
|
456
|
+
// Canonical direction booleans (§1.9); key+value `direction LR|TB`
|
|
457
|
+
// parses as legacy but is no longer offered.
|
|
458
|
+
"direction-tb": { description: "Switch to vertical column lanes" },
|
|
459
|
+
"direction-lr": { description: "Horizontal band lanes (the default)" },
|
|
460
|
+
lane: { description: "Declare a lane (row) with an optional color" },
|
|
461
|
+
"active-tag": { description: "Active tag group name" }
|
|
462
|
+
})
|
|
463
|
+
],
|
|
464
|
+
[
|
|
465
|
+
"version-control",
|
|
466
|
+
withGlobals({
|
|
467
|
+
// Canonical direction booleans (§1.9); key+value `direction LR|TB`
|
|
468
|
+
// parses as legacy but is no longer offered.
|
|
469
|
+
"direction-tb": {
|
|
470
|
+
description: "Column lanes, newest down (the git-log view)"
|
|
471
|
+
},
|
|
472
|
+
"direction-lr": {
|
|
473
|
+
description: "Horizontal lanes, newest right (the default)"
|
|
474
|
+
},
|
|
475
|
+
merge: { description: "Merge a branch into the active branch" },
|
|
476
|
+
"cherry-pick": { description: "Copy a commit onto the active branch" },
|
|
477
|
+
rebase: { description: "Replay a branch onto another (rebase X onto Y)" },
|
|
478
|
+
reset: { description: "Move a branch pointer back (reset X to commit)" },
|
|
479
|
+
revert: { description: "Add an inverse commit undoing a commit" },
|
|
480
|
+
ref: {
|
|
481
|
+
description: "Pointer at a commit (ref origin/main at commit) \u2014 remotes / HEAD"
|
|
482
|
+
},
|
|
483
|
+
note: { description: "Numbered step annotation on the current commit" },
|
|
484
|
+
"no-labels": { description: "Hide commit messages" },
|
|
485
|
+
"no-lanes": { description: "Hide branch lanes" },
|
|
486
|
+
"no-head": { description: "Hide the HEAD marker" }
|
|
487
|
+
})
|
|
488
|
+
],
|
|
489
|
+
[
|
|
490
|
+
"mindmap",
|
|
491
|
+
withGlobals({
|
|
492
|
+
"no-legend": { description: "Hide the legend" },
|
|
493
|
+
"active-tag": { description: "Active tag group name" }
|
|
494
|
+
})
|
|
495
|
+
],
|
|
496
|
+
[
|
|
497
|
+
"wireframe",
|
|
498
|
+
withGlobals({
|
|
499
|
+
mobile: { description: "Use mobile (narrow vertical) layout" },
|
|
500
|
+
"active-tag": { description: "Active tag group name" }
|
|
501
|
+
})
|
|
502
|
+
],
|
|
503
|
+
[
|
|
504
|
+
"tech-radar",
|
|
505
|
+
// Spec §20 documents one directive: `no-blip-legend` (the listing is
|
|
506
|
+
// default-on everywhere per decision #48; legacy `show-blip-legend` is a
|
|
507
|
+
// parse-accepted no-op). `rings` is a structural block keyword;
|
|
508
|
+
// quadrant/ring/trend/color are pipe metadata that live in PIPE_METADATA.
|
|
509
|
+
withGlobals({
|
|
510
|
+
"no-legend": { description: "Hide the legend" },
|
|
511
|
+
"no-blip-legend": {
|
|
512
|
+
description: "Hide the four-column blip listing beside the radar"
|
|
513
|
+
}
|
|
514
|
+
})
|
|
515
|
+
],
|
|
516
|
+
[
|
|
517
|
+
"cycle",
|
|
518
|
+
withGlobals({
|
|
519
|
+
"direction-counterclockwise": {
|
|
520
|
+
description: "Reverse cycle direction to counterclockwise"
|
|
521
|
+
},
|
|
522
|
+
"circle-nodes": {
|
|
523
|
+
description: "Render nodes as circles instead of rectangles"
|
|
524
|
+
}
|
|
525
|
+
})
|
|
526
|
+
],
|
|
527
|
+
[
|
|
528
|
+
"journey-map",
|
|
529
|
+
// Spec §22 directives: `active-tag`. `persona` is a
|
|
530
|
+
// structural keyword (like `tag` / `roles`), not a directive.
|
|
531
|
+
// the fill family is added via FILL_FAMILY_CAPABLE below.
|
|
532
|
+
withGlobals({
|
|
533
|
+
"no-legend": { description: "Hide the legend" },
|
|
534
|
+
"active-tag": { description: "Active tag group name" }
|
|
535
|
+
})
|
|
536
|
+
],
|
|
537
|
+
[
|
|
538
|
+
"pyramid",
|
|
539
|
+
// Spec §23.5 documents `inverted`; the fill family is added via
|
|
540
|
+
// FILL_FAMILY_CAPABLE below (working but not yet in spec §23.5).
|
|
541
|
+
// `color`/`description` are layer pipe-metadata, not directives.
|
|
542
|
+
withGlobals({
|
|
543
|
+
inverted: { description: "Flip apex to the bottom (funnel orientation)" }
|
|
544
|
+
})
|
|
545
|
+
],
|
|
546
|
+
[
|
|
547
|
+
"ring",
|
|
548
|
+
// Per spec §24.5 the only chart-specific directive family is `fill-*`,
|
|
549
|
+
// applied via FILL_FAMILY_CAPABLE below. `color`/`description` are
|
|
550
|
+
// layer pipe-metadata, not directives — they live in PIPE_METADATA.
|
|
551
|
+
withGlobals({})
|
|
552
|
+
],
|
|
553
|
+
[
|
|
554
|
+
"treemap",
|
|
555
|
+
// Hierarchy sized by a bare trailing number; color modes + opt-outs.
|
|
556
|
+
withGlobals({
|
|
557
|
+
heat: {
|
|
558
|
+
description: "Name the color-by-value ramp (`heat <Label> [low] [high]`); pairs with the per-node `heat:` key"
|
|
559
|
+
},
|
|
560
|
+
depth: {
|
|
561
|
+
description: "Render N levels; deeper subtrees collapse to a drillable block"
|
|
562
|
+
},
|
|
563
|
+
// Decision #48: source-level pre-selection of the resting color
|
|
564
|
+
// dimension (tag group name, heat label, or `none` = branch mode).
|
|
565
|
+
"active-tag": {
|
|
566
|
+
description: "Resting color dimension: a tag group name, the heat label, or none (branch)"
|
|
567
|
+
},
|
|
568
|
+
// Canonical since decision #48; plural `no-values` parses as a legacy
|
|
569
|
+
// alias but is no longer offered.
|
|
570
|
+
"no-value": { description: "Hide value labels" },
|
|
571
|
+
"no-percent": { description: "Hide percentage labels" },
|
|
572
|
+
"no-headers": { description: "Hide parent header bars" },
|
|
573
|
+
"no-legend": { description: "Hide the legend" },
|
|
574
|
+
radial: {
|
|
575
|
+
description: "Render as a sunburst / hierarchical pie (concentric rings)"
|
|
576
|
+
}
|
|
577
|
+
})
|
|
578
|
+
],
|
|
579
|
+
[
|
|
580
|
+
"block",
|
|
581
|
+
// Author-controlled grid; columns are inferred from placement, so the only
|
|
582
|
+
// directives are an explicit `columns` override and `no-legend`.
|
|
583
|
+
withGlobals({
|
|
584
|
+
columns: {
|
|
585
|
+
description: "Grid width (columns); inferred from the widest row if omitted"
|
|
586
|
+
},
|
|
587
|
+
"no-legend": { description: "Hide the tag legend" }
|
|
588
|
+
})
|
|
589
|
+
],
|
|
590
|
+
[
|
|
591
|
+
"goal",
|
|
592
|
+
// Single now/target value. Mode is a bare flag (thermometer/gauge; the
|
|
593
|
+
// progress bar is the default). Fill family/`no-title` come via globals.
|
|
594
|
+
withGlobals({
|
|
595
|
+
thermometer: { description: "Render as a vertical thermometer" },
|
|
596
|
+
gauge: { description: "Render as a semicircular gauge dial" },
|
|
597
|
+
now: { description: "Current value (key value; no colon)" },
|
|
598
|
+
target: { description: "Goal value (must be > 0)" },
|
|
599
|
+
note: {
|
|
600
|
+
description: "Free-text caption block (indented body, simple markdown)"
|
|
601
|
+
},
|
|
602
|
+
"no-percent": { description: "Hide the % label" },
|
|
603
|
+
"no-value": { description: "Hide the raw now / target label" },
|
|
604
|
+
// Canonical since decision #48; singular `no-note` parses as a legacy
|
|
605
|
+
// alias but is no longer offered.
|
|
606
|
+
"no-notes": { description: "Suppress the note block even if present" },
|
|
607
|
+
"no-auto-color": {
|
|
608
|
+
description: "Disable traffic-light coloring; use the palette color"
|
|
609
|
+
}
|
|
610
|
+
})
|
|
611
|
+
],
|
|
612
|
+
[
|
|
613
|
+
"countdown",
|
|
614
|
+
// Live "N until X". One-shot `target` OR a recurring `every … on … at …`
|
|
615
|
+
// rule (never both). `units`/`round`/`fields` shape the display; `since*`
|
|
616
|
+
// number the ordinal. All space-separated key value (no colon).
|
|
617
|
+
withGlobals({
|
|
618
|
+
...DATE_DIRECTIVES,
|
|
619
|
+
target: {
|
|
620
|
+
description: "One-shot instant: a date/datetime (ISO, 7/4, or Jul 4) or `now` (key value)"
|
|
621
|
+
},
|
|
622
|
+
every: {
|
|
623
|
+
description: "Recurring: every <year|month|week|N days|weeks|months> [on <instant>] [at <time>] [from <date>]"
|
|
624
|
+
},
|
|
625
|
+
on: {
|
|
626
|
+
description: "Instant within the cadence: Aug 21 | 3rd Tuesday | last Friday | Friday"
|
|
627
|
+
},
|
|
628
|
+
at: {
|
|
629
|
+
description: "Time of day: 18:00 | 6pm | 6:30pm; default midnight"
|
|
630
|
+
},
|
|
631
|
+
from: {
|
|
632
|
+
description: "Interval anchor date: every [N] day|week|month from <date> (e.g. every month from 2026-01-31)"
|
|
633
|
+
},
|
|
634
|
+
units: {
|
|
635
|
+
description: "human (default) | days | full | clock | weeks | words"
|
|
636
|
+
},
|
|
637
|
+
round: { description: "up (default) | down | nearest" },
|
|
638
|
+
fields: { description: "full-mode segments: subset of d,h,m,s" },
|
|
639
|
+
"no-visual": {
|
|
640
|
+
description: "Suppress the default-on calendar band (header only)"
|
|
641
|
+
},
|
|
642
|
+
tz: {
|
|
643
|
+
description: "Pin authored times to an IANA zone (e.g. America/New_York) so the count never drifts with the viewer; default viewer-local"
|
|
644
|
+
},
|
|
645
|
+
lang: { description: "Locale for words/month names (en)" },
|
|
646
|
+
"on-day": { description: "Text shown on the occurrence day (recurring)" },
|
|
647
|
+
since: { description: 'Anchor year \u2192 enables the ordinal ("7th")' },
|
|
648
|
+
"since-label": {
|
|
649
|
+
description: 'Eyebrow template: Nth \u2192 ordinal word, N \u2192 number (e.g. "Nth Anniversary")'
|
|
650
|
+
},
|
|
651
|
+
expired: { description: "Text shown once a one-shot target passes" }
|
|
652
|
+
})
|
|
653
|
+
],
|
|
654
|
+
[
|
|
655
|
+
"clock",
|
|
656
|
+
// Live world-clock board. Each row's anchor is a city (gazetteer), an IANA
|
|
657
|
+
// zone, or a `UTC±HH:MM` offset (+ optional `as` alias).
|
|
658
|
+
// Directives shape the board; all space-separated key value (no colon).
|
|
659
|
+
withGlobals({
|
|
660
|
+
analog: { description: "Analog dials (default face is digital)" },
|
|
661
|
+
hours: {
|
|
662
|
+
description: "Working window: 9-17 | 9am-5pm | 8:30-17:15 (enables status)"
|
|
663
|
+
},
|
|
664
|
+
// Canonical since decision #48; `days` parses as a legacy alias but is
|
|
665
|
+
// no longer offered.
|
|
666
|
+
workweek: {
|
|
667
|
+
description: "Working days: mon-fri | mon,wed,fri (default mon-fri)"
|
|
668
|
+
},
|
|
669
|
+
"no-sun": {
|
|
670
|
+
description: "Hide the sundown/sunrise line (on by default)"
|
|
671
|
+
},
|
|
672
|
+
"time-24": {
|
|
673
|
+
description: "24-hour readout (12-hour am/pm is the default)"
|
|
674
|
+
},
|
|
675
|
+
// Canonical direction booleans (§1.9); key+value `direction lr|tb`
|
|
676
|
+
// (and its `columns` value alias) parses as legacy but is no longer
|
|
677
|
+
// offered.
|
|
678
|
+
"direction-lr": {
|
|
679
|
+
description: "Columns \u2014 panels in a horizontal strip (time on top)"
|
|
680
|
+
},
|
|
681
|
+
"direction-tb": {
|
|
682
|
+
description: "Rows \u2014 the default vertical stack"
|
|
683
|
+
},
|
|
684
|
+
"color-by": {
|
|
685
|
+
description: "What drives each place color: place (default) | work | daylight | time | none",
|
|
686
|
+
values: ["place", "work", "daylight", "time", "none"]
|
|
687
|
+
}
|
|
688
|
+
})
|
|
689
|
+
],
|
|
690
|
+
[
|
|
691
|
+
"bracket",
|
|
692
|
+
// Tournament bracket. `rounds`/`seed` shape the field; `single-elim` is the
|
|
693
|
+
// default format. `beats`/`vs` are infix match keywords (not directives).
|
|
694
|
+
withGlobals({
|
|
695
|
+
rounds: {
|
|
696
|
+
description: "Name the columns (comma-separated, or an indented block with per-round colors)"
|
|
697
|
+
},
|
|
698
|
+
seed: {
|
|
699
|
+
description: "Declare a seeded entrant (`seed N Name`) \u2192 day-0 skeleton"
|
|
700
|
+
},
|
|
701
|
+
tag: {
|
|
702
|
+
description: "Tag group \u2014 a competitor tag colors its box outline"
|
|
703
|
+
},
|
|
704
|
+
// `accent <color>` is a legacy alias (decision #48) — the title-line
|
|
705
|
+
// trailing color token is the canonical winner-accent slot, so the
|
|
706
|
+
// directive is no longer offered in completion.
|
|
707
|
+
"no-legend": { description: "Hide the tag legend" },
|
|
708
|
+
"no-round": { description: "Suppress the round/column labels" },
|
|
709
|
+
"single-elim": { description: "Single-elimination format (default)" },
|
|
710
|
+
"double-elim": {
|
|
711
|
+
description: "Double-elimination (reserved \u2014 not yet supported)"
|
|
712
|
+
},
|
|
713
|
+
seeded: { description: "Force seeded mode (full skeleton from day 0)" }
|
|
714
|
+
})
|
|
715
|
+
],
|
|
716
|
+
[
|
|
717
|
+
"sketch",
|
|
718
|
+
// GUI-first canvas: shapes carry their own metadata (shape:/at:); the only
|
|
719
|
+
// directives are legend/fill/description toggles.
|
|
720
|
+
withGlobals({
|
|
721
|
+
"no-legend": { description: "Hide the tag legend" },
|
|
722
|
+
"no-descriptions": {
|
|
723
|
+
description: "Hide card metadata rows \u2014 the name fills each card"
|
|
724
|
+
}
|
|
725
|
+
})
|
|
726
|
+
],
|
|
727
|
+
[
|
|
728
|
+
"map",
|
|
729
|
+
// Geographic map directives (§24B.2/.7). Cosmetics are ON by default — the
|
|
730
|
+
// only switches are bare `no-*` opt-outs, surfaced proactively so a
|
|
731
|
+
// zero-config map still hints at what can be turned off. `poi`/`route` are
|
|
732
|
+
// content keywords, not directives; metadata keys (heat/size/width/label/style)
|
|
733
|
+
// live in the reserved-key registry.
|
|
734
|
+
withGlobals({
|
|
735
|
+
"region-heat": {
|
|
736
|
+
description: "Label for the region value\u2192colour ramp, with an optional trailing [low] [high] color pair (pairs with the `heat:` key)"
|
|
737
|
+
},
|
|
738
|
+
"poi-size": {
|
|
739
|
+
description: "Label for the POI value\u2192marker-size channel (pairs with the `size:` key)"
|
|
740
|
+
},
|
|
741
|
+
"flow-width": {
|
|
742
|
+
description: "Label for the edge/leg value\u2192line-thickness channel (pairs with the `width:` key)"
|
|
743
|
+
},
|
|
744
|
+
locale: {
|
|
745
|
+
description: "Default country/state for bare place names, e.g. locale US-GA"
|
|
746
|
+
},
|
|
747
|
+
"active-tag": {
|
|
748
|
+
description: "Which tag group leads when several are present"
|
|
749
|
+
},
|
|
750
|
+
caption: { description: "Caption line (data-source attribution)" },
|
|
751
|
+
"no-title": { description: "Suppress the title banner" },
|
|
752
|
+
"no-legend": { description: "Suppress the legend" },
|
|
753
|
+
"no-coastline": {
|
|
754
|
+
description: "Turn off coastal water-lines (on by default)"
|
|
755
|
+
},
|
|
756
|
+
"no-relief": {
|
|
757
|
+
description: "Turn off mountain-range relief shading (on by default)"
|
|
758
|
+
},
|
|
759
|
+
"no-context-labels": {
|
|
760
|
+
description: "Turn off orientation labels for water + nearby countries"
|
|
761
|
+
},
|
|
762
|
+
"no-region-labels": {
|
|
763
|
+
description: "Turn off subdivision name labels (on by default)"
|
|
764
|
+
},
|
|
765
|
+
"no-region-heat-value": {
|
|
766
|
+
description: "Turn off the heat value shown under each region (on by default)"
|
|
767
|
+
},
|
|
768
|
+
"no-poi-labels": { description: "Turn off POI labels (on by default)" },
|
|
769
|
+
"no-colorize": {
|
|
770
|
+
description: "Force plain green-land reference dress (regions are auto-coloured by default)"
|
|
771
|
+
},
|
|
772
|
+
"no-cities": {
|
|
773
|
+
description: "Turn off the subtle city dots scattered across the basemap (on by default)"
|
|
774
|
+
},
|
|
775
|
+
"no-cluster-pois": {
|
|
776
|
+
description: "Always fan out coincident POI markers instead of collapsing them into a count badge"
|
|
777
|
+
}
|
|
778
|
+
})
|
|
779
|
+
]
|
|
780
|
+
]);
|
|
781
|
+
var FILL_FAMILY_CAPABLE = /* @__PURE__ */ new Set([
|
|
782
|
+
"sketch",
|
|
783
|
+
"flowchart",
|
|
784
|
+
"state",
|
|
785
|
+
"sequence",
|
|
786
|
+
"c4",
|
|
787
|
+
"org",
|
|
788
|
+
"family",
|
|
789
|
+
"kanban",
|
|
790
|
+
"journey-map",
|
|
791
|
+
"mindmap",
|
|
792
|
+
"cycle",
|
|
793
|
+
"pyramid",
|
|
794
|
+
"ring",
|
|
795
|
+
"funnel",
|
|
796
|
+
"class",
|
|
797
|
+
"er",
|
|
798
|
+
"sitemap",
|
|
799
|
+
"boxes-and-lines",
|
|
800
|
+
"wireframe",
|
|
801
|
+
"bar",
|
|
802
|
+
"pie",
|
|
803
|
+
"polar-area",
|
|
804
|
+
"radar",
|
|
805
|
+
"scatter",
|
|
806
|
+
"pert",
|
|
807
|
+
"block",
|
|
808
|
+
"swimlane",
|
|
809
|
+
"treemap",
|
|
810
|
+
"heatmap",
|
|
811
|
+
"venn",
|
|
812
|
+
"timeline",
|
|
813
|
+
"line",
|
|
814
|
+
"event-line",
|
|
815
|
+
"goal",
|
|
816
|
+
"quadrant",
|
|
817
|
+
"arc",
|
|
818
|
+
"bracket",
|
|
819
|
+
"body",
|
|
820
|
+
"clock",
|
|
821
|
+
"countdown",
|
|
822
|
+
"raci"
|
|
823
|
+
]);
|
|
824
|
+
for (const [type, spec] of COMPLETION_REGISTRY) {
|
|
825
|
+
if (FILL_FAMILY_CAPABLE.has(type)) {
|
|
826
|
+
spec.directives["fill-solid"] = {
|
|
827
|
+
description: "Render shapes with full intent color instead of the default 25% tint"
|
|
828
|
+
};
|
|
829
|
+
spec.directives["fill-outline"] = {
|
|
830
|
+
description: "No fill \u2014 theme-background shapes with the color carried by the outline"
|
|
831
|
+
};
|
|
832
|
+
spec.directives["fill-tint"] = {
|
|
833
|
+
description: "The default 25% tint fill, spelled explicitly (overrides an earlier fill-solid/fill-outline)"
|
|
834
|
+
};
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
var CHART_TYPE_DESCRIPTIONS = Object.fromEntries(
|
|
838
|
+
chartTypes.map((c) => [c.id, c.description])
|
|
839
|
+
);
|
|
840
|
+
var CHART_TYPES = [...ALL_CHART_TYPES].map((name) => ({
|
|
841
|
+
name,
|
|
842
|
+
description: CHART_TYPE_DESCRIPTIONS[name] ?? name
|
|
843
|
+
}));
|
|
844
|
+
var ENTITY_TYPES = /* @__PURE__ */ new Map([
|
|
845
|
+
["sequence", ["actor", "database", "queue", "cache"]],
|
|
846
|
+
[
|
|
847
|
+
"c4",
|
|
848
|
+
["person", "system", "container", "component", "external", "database"]
|
|
849
|
+
]
|
|
850
|
+
]);
|
|
851
|
+
var STRUCTURAL_KEYWORDS = /* @__PURE__ */ new Map([
|
|
852
|
+
["sequence", ["if", "else", "loop", "parallel", "note", "tag"]],
|
|
853
|
+
["gantt", ["era", "marker", "holiday", "workweek", "parallel", "tag"]],
|
|
854
|
+
["c4", ["containers", "components", "deployment", "tag"]],
|
|
855
|
+
["timeline", ["era", "marker", "tag"]],
|
|
856
|
+
["org", ["tag"]],
|
|
857
|
+
["family", ["tag"]],
|
|
858
|
+
["kanban", ["tag"]],
|
|
859
|
+
["sitemap", ["tag"]],
|
|
860
|
+
["infra", ["tag"]],
|
|
861
|
+
["pert", ["tag"]],
|
|
862
|
+
["mindmap", ["tag"]],
|
|
863
|
+
["treemap", ["tag"]],
|
|
864
|
+
["block", ["tag"]],
|
|
865
|
+
["sketch", ["tag"]],
|
|
866
|
+
["boxes-and-lines", ["tag"]],
|
|
867
|
+
["state", ["note", "tag"]],
|
|
868
|
+
["swimlane", ["lane", "tag"]],
|
|
869
|
+
[
|
|
870
|
+
"version-control",
|
|
871
|
+
["merge", "cherry-pick", "rebase", "reset", "revert", "ref", "note"]
|
|
872
|
+
],
|
|
873
|
+
["er", ["tag"]],
|
|
874
|
+
["cycle", ["direction-counterclockwise", "circle-nodes"]],
|
|
875
|
+
["journey-map", ["persona", "tag"]],
|
|
876
|
+
["raci", ["roles"]],
|
|
877
|
+
["tech-radar", ["rings"]],
|
|
878
|
+
[
|
|
879
|
+
"wireframe",
|
|
880
|
+
[
|
|
881
|
+
"nav",
|
|
882
|
+
"tabs",
|
|
883
|
+
"table",
|
|
884
|
+
"image",
|
|
885
|
+
"modal",
|
|
886
|
+
"skeleton",
|
|
887
|
+
"alert",
|
|
888
|
+
"progress",
|
|
889
|
+
"chart",
|
|
890
|
+
"mobile",
|
|
891
|
+
"tag"
|
|
892
|
+
]
|
|
893
|
+
],
|
|
894
|
+
["class", ["abstract", "interface", "enum", "extends", "implements"]]
|
|
895
|
+
]);
|
|
896
|
+
var TAG_SUPPORTING_TYPES = new Set(
|
|
897
|
+
[...STRUCTURAL_KEYWORDS].filter(([, kws]) => kws.includes("tag")).map(([type]) => type)
|
|
898
|
+
);
|
|
899
|
+
var REFERENCE_GRAMMAR = /* @__PURE__ */ new Map([
|
|
900
|
+
// Diagrams with a genuine reference position
|
|
901
|
+
["sequence", { hasReferenceGrammar: true, referenceOperators: ["->", "~>"] }],
|
|
902
|
+
["flowchart", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
903
|
+
["state", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
904
|
+
["sitemap", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
905
|
+
[
|
|
906
|
+
"c4",
|
|
907
|
+
{
|
|
908
|
+
hasReferenceGrammar: true,
|
|
909
|
+
referenceOperators: ["->", "<->", "~>", "<~>"]
|
|
910
|
+
}
|
|
911
|
+
],
|
|
912
|
+
// ER/class/infra reference grammars are irregular (cardinality / typed
|
|
913
|
+
// relationship operators / indented arrows); the app keeps a special-cased
|
|
914
|
+
// trigger for those, but they're still reference-grammar types here so the
|
|
915
|
+
// drift-guard covers their extractors.
|
|
916
|
+
["er", { hasReferenceGrammar: true, referenceOperators: ["--"] }],
|
|
917
|
+
[
|
|
918
|
+
"class",
|
|
919
|
+
{
|
|
920
|
+
hasReferenceGrammar: true,
|
|
921
|
+
referenceOperators: ["-->", "--|>", "..|>", "*--", "o--", "..>"]
|
|
922
|
+
}
|
|
923
|
+
],
|
|
924
|
+
["infra", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
925
|
+
// Swimlane edges are authored inline inside lane blocks (§27.6) and may
|
|
926
|
+
// forward-reference or cross lanes (`Lane.Node`). Only `->`: the message
|
|
927
|
+
// flow `~>` is a §27.8 reserved seam that the parser rejects today, so
|
|
928
|
+
// completion must not offer it.
|
|
929
|
+
["swimlane", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
930
|
+
["gantt", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
931
|
+
["pert", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
932
|
+
["arc", { hasReferenceGrammar: true, referenceOperators: ["->"] }],
|
|
933
|
+
["sankey", { hasReferenceGrammar: true, referenceOperators: ["->", "--"] }],
|
|
934
|
+
[
|
|
935
|
+
"boxes-and-lines",
|
|
936
|
+
{ hasReferenceGrammar: true, referenceOperators: ["->", "<->"] }
|
|
937
|
+
],
|
|
938
|
+
// Sketch edges reference aliases / unambiguous labels (spec §31.4);
|
|
939
|
+
// includes the net-new headless forms.
|
|
940
|
+
[
|
|
941
|
+
"sketch",
|
|
942
|
+
{
|
|
943
|
+
hasReferenceGrammar: true,
|
|
944
|
+
referenceOperators: ["->", "<->", "~>", "<~>", "--", "~~"]
|
|
945
|
+
}
|
|
946
|
+
],
|
|
947
|
+
// Venn references prior sets via the `+` intersection operator (not an arrow).
|
|
948
|
+
["venn", { hasReferenceGrammar: true, referenceOperators: ["+"] }],
|
|
949
|
+
// Family unions reference a prior/again-named person via the `+` couple operator.
|
|
950
|
+
["family", { hasReferenceGrammar: true, referenceOperators: ["+"] }]
|
|
951
|
+
]);
|
|
952
|
+
for (const type of ALL_CHART_TYPES) {
|
|
953
|
+
if (!REFERENCE_GRAMMAR.has(type)) {
|
|
954
|
+
REFERENCE_GRAMMAR.set(type, {
|
|
955
|
+
hasReferenceGrammar: false,
|
|
956
|
+
referenceOperators: []
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
var RACI_MARKER_ALPHABETS = /* @__PURE__ */ new Map([["raci", [...ALL_MARKERS]]]);
|
|
961
|
+
var WIREFRAME_FLAGS = [...STATE_KEYWORDS];
|
|
962
|
+
var WIREFRAME_GROUP_ONLY_FLAGS = [
|
|
963
|
+
...GROUP_ONLY_METADATA
|
|
964
|
+
];
|
|
965
|
+
var PIPE_METADATA = /* @__PURE__ */ new Map([
|
|
966
|
+
[
|
|
967
|
+
"sketch",
|
|
968
|
+
{
|
|
969
|
+
node: {
|
|
970
|
+
shape: {
|
|
971
|
+
description: "Morph from the default rectangle: database, queue, person, document, note"
|
|
972
|
+
},
|
|
973
|
+
at: {
|
|
974
|
+
description: "Half-slot position `at: C R` (integers; omit to flow-place)"
|
|
975
|
+
},
|
|
976
|
+
collapsed: {
|
|
977
|
+
description: "Bare flag on a [Box] line \u2014 start folded"
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
],
|
|
982
|
+
[
|
|
983
|
+
"infra",
|
|
984
|
+
{
|
|
985
|
+
node: {
|
|
986
|
+
description: { description: "Node description text" },
|
|
987
|
+
instances: {
|
|
988
|
+
description: "Instance count or auto-scaling range (N-M)"
|
|
989
|
+
},
|
|
990
|
+
"latency-ms": { description: "Per-request latency in milliseconds" },
|
|
991
|
+
"max-rps": { description: "Max requests per second per instance" },
|
|
992
|
+
"cache-hit": { description: "Cache hit percentage (0-100)" },
|
|
993
|
+
"firewall-block": { description: "Traffic blocked percentage" },
|
|
994
|
+
"ratelimit-rps": { description: "Max RPS allowed through" },
|
|
995
|
+
"cb-error-threshold": {
|
|
996
|
+
description: "Circuit breaker error threshold %"
|
|
997
|
+
},
|
|
998
|
+
"cb-latency-threshold-ms": {
|
|
999
|
+
description: "Circuit breaker latency threshold"
|
|
1000
|
+
},
|
|
1001
|
+
uptime: { description: "Component availability (0-1)" },
|
|
1002
|
+
concurrency: { description: "Concurrent request limit" },
|
|
1003
|
+
"duration-ms": { description: "Processing duration" },
|
|
1004
|
+
"cold-start-ms": { description: "Function cold-start time" },
|
|
1005
|
+
buffer: { description: "Queue/buffer capacity" },
|
|
1006
|
+
"drain-rate": { description: "Queue drain rate" },
|
|
1007
|
+
"retention-hours": { description: "Data retention period" },
|
|
1008
|
+
partitions: { description: "Queue/stream partition count" },
|
|
1009
|
+
"slo-availability": { description: "Node availability target (0-1)" },
|
|
1010
|
+
"slo-p90-latency-ms": { description: "Node p90 latency target" },
|
|
1011
|
+
"slo-warning-margin": { description: "Node SLO warning margin" }
|
|
1012
|
+
},
|
|
1013
|
+
edge: {
|
|
1014
|
+
split: { description: "Traffic split percentage (e.g., 60%)" },
|
|
1015
|
+
fanout: { description: "Fanout multiplier (integer >= 1)" }
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
],
|
|
1019
|
+
[
|
|
1020
|
+
"c4",
|
|
1021
|
+
{
|
|
1022
|
+
node: {
|
|
1023
|
+
description: { description: "Element description" },
|
|
1024
|
+
tech: { description: "Technology stack" },
|
|
1025
|
+
technology: { description: "Technology stack (alias for tech)" }
|
|
1026
|
+
},
|
|
1027
|
+
edge: {}
|
|
1028
|
+
}
|
|
1029
|
+
],
|
|
1030
|
+
[
|
|
1031
|
+
"gantt",
|
|
1032
|
+
{
|
|
1033
|
+
node: {
|
|
1034
|
+
duration: { description: "Task duration (e.g., 30bd, 5d, 1.5w)" },
|
|
1035
|
+
start: { description: "Explicit start date (e.g., 2024-01-15)" },
|
|
1036
|
+
progress: { description: "Task progress (0\u2013100)" },
|
|
1037
|
+
offset: { description: "Task start offset (e.g., 8bd, -3bd)" }
|
|
1038
|
+
},
|
|
1039
|
+
edge: {
|
|
1040
|
+
// Gantt "edge" = dependency arrow (TaskA -> TaskB | offset 2bd)
|
|
1041
|
+
offset: { description: "Dependency offset (e.g., 2bd, -1w)" }
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
],
|
|
1045
|
+
[
|
|
1046
|
+
"boxes-and-lines",
|
|
1047
|
+
{
|
|
1048
|
+
node: {
|
|
1049
|
+
description: { description: "Node description text" },
|
|
1050
|
+
heat: { description: "Numeric value for the heat (colour) ramp" }
|
|
1051
|
+
},
|
|
1052
|
+
edge: {}
|
|
1053
|
+
}
|
|
1054
|
+
],
|
|
1055
|
+
[
|
|
1056
|
+
"mindmap",
|
|
1057
|
+
{
|
|
1058
|
+
node: {
|
|
1059
|
+
description: { description: "Node description text" },
|
|
1060
|
+
collapsed: {
|
|
1061
|
+
description: "Legacy `collapsed: true` \u2014 canonical is the bare trailing `collapsed` flag on the node line"
|
|
1062
|
+
}
|
|
1063
|
+
},
|
|
1064
|
+
edge: {}
|
|
1065
|
+
}
|
|
1066
|
+
],
|
|
1067
|
+
[
|
|
1068
|
+
// Tech-radar pipe metadata (spec §20). Two contexts:
|
|
1069
|
+
// - quadrant: top-level quadrant headers (`Tools | quadrant: top-left, color: blue`)
|
|
1070
|
+
// - blip: indented blip lines (` Vite | ring: Adopt, trend: up`)
|
|
1071
|
+
"tech-radar",
|
|
1072
|
+
{
|
|
1073
|
+
quadrant: {
|
|
1074
|
+
quadrant: {
|
|
1075
|
+
description: "Quadrant position",
|
|
1076
|
+
values: ["top-left", "top-right", "bottom-left", "bottom-right"]
|
|
1077
|
+
},
|
|
1078
|
+
color: { description: "Override quadrant color" }
|
|
1079
|
+
},
|
|
1080
|
+
blip: {
|
|
1081
|
+
ring: { description: "Ring assignment (must match a declared ring)" },
|
|
1082
|
+
trend: {
|
|
1083
|
+
description: "Blip trend indicator",
|
|
1084
|
+
values: ["new", "up", "down", "stable"]
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
],
|
|
1089
|
+
[
|
|
1090
|
+
"cycle",
|
|
1091
|
+
{
|
|
1092
|
+
node: {
|
|
1093
|
+
color: { description: "Node fill color (palette name)" },
|
|
1094
|
+
span: { description: "Relative arc distance to next node" },
|
|
1095
|
+
description: { description: "Node description text" }
|
|
1096
|
+
},
|
|
1097
|
+
edge: {
|
|
1098
|
+
color: { description: "Edge stroke color (palette name)" },
|
|
1099
|
+
width: { description: "Edge stroke width in pixels" }
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
],
|
|
1103
|
+
[
|
|
1104
|
+
// RACI pipe metadata (spec §24A). Two contexts:
|
|
1105
|
+
// - role: declarations inside the `roles` block (`Cap | color: red`)
|
|
1106
|
+
// - phase: bracketed phase headers (`[Departure] | color: teal`)
|
|
1107
|
+
"raci",
|
|
1108
|
+
{
|
|
1109
|
+
role: {
|
|
1110
|
+
color: { description: "Role column tint (palette name)" }
|
|
1111
|
+
},
|
|
1112
|
+
phase: {
|
|
1113
|
+
color: { description: "Phase bar tint (palette name)" }
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
],
|
|
1117
|
+
[
|
|
1118
|
+
// Ring layer pipe metadata (spec §24.4). One context: `layer`.
|
|
1119
|
+
"ring",
|
|
1120
|
+
{
|
|
1121
|
+
layer: {
|
|
1122
|
+
color: { description: "Ring color (palette name)" },
|
|
1123
|
+
description: { description: "Layer description (one-liner shorthand)" }
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
],
|
|
1127
|
+
[
|
|
1128
|
+
// Pyramid layer pipe metadata (spec §23.4). Identical surface to ring.
|
|
1129
|
+
"pyramid",
|
|
1130
|
+
{
|
|
1131
|
+
layer: {
|
|
1132
|
+
color: { description: "Layer color (palette name)" },
|
|
1133
|
+
description: { description: "Layer description (one-liner shorthand)" }
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
],
|
|
1137
|
+
[
|
|
1138
|
+
// Journey-map step pipe metadata (spec §22).
|
|
1139
|
+
// Tag aliases (e.g. `ch: Web`) are user-defined via the `tag` block
|
|
1140
|
+
// and resolved dynamically — not part of the static map.
|
|
1141
|
+
"journey-map",
|
|
1142
|
+
{
|
|
1143
|
+
step: {
|
|
1144
|
+
score: { description: "Step score (1\u20135 integer; high = good)" },
|
|
1145
|
+
emotion: { description: "Emotional state at this step" },
|
|
1146
|
+
description: { description: "Step description text" },
|
|
1147
|
+
pain: { description: "Pain point at this step" },
|
|
1148
|
+
opportunity: { description: "Opportunity at this step" },
|
|
1149
|
+
thought: { description: "User thought at this step" }
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
],
|
|
1153
|
+
[
|
|
1154
|
+
"org",
|
|
1155
|
+
{
|
|
1156
|
+
node: {
|
|
1157
|
+
description: { description: "Person/team description" },
|
|
1158
|
+
role: { description: "Role or job title" },
|
|
1159
|
+
location: { description: "Office location" },
|
|
1160
|
+
email: { description: "Email address" },
|
|
1161
|
+
phone: { description: "Phone number" }
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
],
|
|
1165
|
+
[
|
|
1166
|
+
// Family §32: person metadata + the union-level marriage year.
|
|
1167
|
+
"family",
|
|
1168
|
+
{
|
|
1169
|
+
node: {
|
|
1170
|
+
sex: { description: "Sex: m or f (drives node color)" },
|
|
1171
|
+
b: { description: "Birth year" },
|
|
1172
|
+
d: { description: "Death year" },
|
|
1173
|
+
bp: { description: "Birth place" },
|
|
1174
|
+
dp: { description: "Death place" },
|
|
1175
|
+
occupation: { description: "Occupation" },
|
|
1176
|
+
military: { description: "Military service" },
|
|
1177
|
+
education: { description: "Education" },
|
|
1178
|
+
religion: { description: "Religion" },
|
|
1179
|
+
burial: { description: "Burial place" },
|
|
1180
|
+
m: { description: "Marriage year (on a union line)" }
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
],
|
|
1184
|
+
[
|
|
1185
|
+
"er",
|
|
1186
|
+
{
|
|
1187
|
+
node: {
|
|
1188
|
+
description: { description: "Entity description" },
|
|
1189
|
+
domain: { description: "Domain grouping" }
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1192
|
+
],
|
|
1193
|
+
[
|
|
1194
|
+
"class",
|
|
1195
|
+
{
|
|
1196
|
+
node: {
|
|
1197
|
+
description: { description: "Class description" }
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
],
|
|
1201
|
+
[
|
|
1202
|
+
"kanban",
|
|
1203
|
+
{
|
|
1204
|
+
node: {
|
|
1205
|
+
description: { description: "Card description" },
|
|
1206
|
+
assignee: { description: "Assigned person" },
|
|
1207
|
+
due: { description: "Due date (YYYY-MM-DD)" }
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
],
|
|
1211
|
+
[
|
|
1212
|
+
"sitemap",
|
|
1213
|
+
{
|
|
1214
|
+
node: {
|
|
1215
|
+
description: { description: "Page description" },
|
|
1216
|
+
status: { description: "Page status" }
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
],
|
|
1220
|
+
[
|
|
1221
|
+
"pert",
|
|
1222
|
+
{
|
|
1223
|
+
node: {
|
|
1224
|
+
description: { description: "Activity description" },
|
|
1225
|
+
confidence: {
|
|
1226
|
+
description: "Confidence factor",
|
|
1227
|
+
values: ["high", "medium", "low"]
|
|
1228
|
+
},
|
|
1229
|
+
collapsed: {
|
|
1230
|
+
description: "Collapse detail (legacy `collapsed: true`; on group lines the bare trailing `collapsed` flag is canonical)"
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
],
|
|
1235
|
+
[
|
|
1236
|
+
"timeline",
|
|
1237
|
+
{
|
|
1238
|
+
node: {
|
|
1239
|
+
description: { description: "Event description" },
|
|
1240
|
+
duration: { description: "Event duration (e.g., 30d, 1.5y)" }
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
]
|
|
1244
|
+
]);
|
|
1245
|
+
var METADATA_KEY_SET = /* @__PURE__ */ new Set([
|
|
1246
|
+
"chart",
|
|
1247
|
+
"title",
|
|
1248
|
+
// implicit directives recognized as metadata
|
|
1249
|
+
// Legacy key+value direction form (`direction LR|TB`) — no longer offered
|
|
1250
|
+
// by completion (the §1.9 booleans are canonical) but still parse-accepted,
|
|
1251
|
+
// so extractors must keep skipping it as a directive line.
|
|
1252
|
+
"direction",
|
|
1253
|
+
...[...COMPLETION_REGISTRY.values()].flatMap(
|
|
1254
|
+
(spec) => Object.keys(spec.directives)
|
|
1255
|
+
)
|
|
1256
|
+
]);
|
|
1257
|
+
export {
|
|
1258
|
+
CHART_TYPES,
|
|
1259
|
+
COMPLETION_REGISTRY,
|
|
1260
|
+
ENTITY_TYPES,
|
|
1261
|
+
METADATA_KEY_SET,
|
|
1262
|
+
PIPE_METADATA,
|
|
1263
|
+
RACI_MARKER_ALPHABETS,
|
|
1264
|
+
REFERENCE_GRAMMAR,
|
|
1265
|
+
STRUCTURAL_KEYWORDS,
|
|
1266
|
+
TAG_SUPPORTING_TYPES,
|
|
1267
|
+
WIREFRAME_FLAGS,
|
|
1268
|
+
WIREFRAME_GROUP_ONLY_FLAGS
|
|
1269
|
+
};
|
|
1270
|
+
//# sourceMappingURL=completion-registry.js.map
|