@diagrammo/dgmo 0.92.0 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/dist/advanced.d.ts +85 -21
  2. package/dist/advanced.js +455 -422
  3. package/dist/block.d.ts +2 -2
  4. package/dist/block.js +75 -70
  5. package/dist/{chart-meta-BBqLnv5q.d.ts → chart-meta-BbjsRY7o.d.ts} +2 -2
  6. package/dist/chart-meta.d.ts +3 -3
  7. package/dist/chart-meta.js +25 -19
  8. package/dist/{chart-types-CbXlZFLd.d.ts → chart-types-Cppnp31G.d.ts} +173 -4
  9. package/dist/{charts-d3-QUUDVETP.js → charts-d3-ERYYVGP6.js} +7 -6
  10. package/dist/{chunk-HIWHIYLD.js → chunk-2TFXRBCD.js} +19 -19
  11. package/dist/{chunk-F7326NVM.js → chunk-3GCASUWA.js} +58 -25
  12. package/dist/{chunk-ZJAK6C7Y.js → chunk-3PP746YM.js} +6 -1
  13. package/dist/{chunk-WLLO3PZ3.js → chunk-472EOHVW.js} +17 -17
  14. package/dist/{chunk-LMP6Y7QO.js → chunk-4WQX55VX.js} +56 -24
  15. package/dist/{chunk-JLU52ZDT.js → chunk-5CBX66KB.js} +10 -10
  16. package/dist/{chunk-DEFBUZWV.js → chunk-5HAYT43L.js} +70 -54
  17. package/dist/{chunk-S7W75MIM.js → chunk-65GPEV5V.js} +21 -3
  18. package/dist/{chunk-Q6W2K33N.js → chunk-6XLMTAEX.js} +1 -1
  19. package/dist/{chunk-JKST4RTT.js → chunk-7OWK5K5C.js} +6 -6
  20. package/dist/{chunk-73EYNV4O.js → chunk-A5WIAMCT.js} +4 -6
  21. package/dist/{chunk-X5BUX2GK.js → chunk-ADVGV3P7.js} +1 -1
  22. package/dist/{chunk-45QUTYPD.js → chunk-CYDM2XII.js} +17 -17
  23. package/dist/chunk-CYTFO2LF.js +209 -0
  24. package/dist/{chunk-JRWUHLRP.js → chunk-D6PVMUCX.js} +51 -8
  25. package/dist/{chunk-BRSM6Z34.js → chunk-DAHQL57W.js} +14 -14
  26. package/dist/{chunk-RBFJT23E.js → chunk-EQWC76GQ.js} +6 -6
  27. package/dist/{chunk-ADNIO3XY.js → chunk-FIYW7JW4.js} +5 -5
  28. package/dist/{chunk-7ENDOHAA.js → chunk-FMAVHTYB.js} +919 -927
  29. package/dist/{chunk-3PFMGNOM.js → chunk-GJXMG4S3.js} +26 -11
  30. package/dist/chunk-GXCDD6NG.js +24 -0
  31. package/dist/{chunk-RJ2JW3FG.js → chunk-IESUM4N5.js} +2331 -2236
  32. package/dist/{chunk-62BP7AJU.js → chunk-IIV4SMJL.js} +18 -18
  33. package/dist/{chunk-5EBYPETE.js → chunk-J43OCO22.js} +3 -5
  34. package/dist/{chunk-L5NW3PVL.js → chunk-J6AEKIRQ.js} +1 -1
  35. package/dist/{chunk-2BJW7FSF.js → chunk-KBEWVCK3.js} +1 -1
  36. package/dist/{chunk-LRP5FXST.js → chunk-KCHQVED5.js} +18 -17
  37. package/dist/{chunk-Q6ZQX2HX.js → chunk-KCMGIYPO.js} +4 -6
  38. package/dist/{chunk-MDVJYRJT.js → chunk-KPGPK4SK.js} +22 -22
  39. package/dist/{chunk-Q2UFOKPB.js → chunk-KPSSNGAE.js} +22 -22
  40. package/dist/{chunk-V4D2ZQBE.js → chunk-KRPLP5LP.js} +6 -1
  41. package/dist/{chunk-BZX7QCXJ.js → chunk-KRU2LCIP.js} +15 -15
  42. package/dist/{chunk-HXULJZA2.js → chunk-LDDDKWL6.js} +6 -1
  43. package/dist/{chunk-NREU4JFE.js → chunk-LNVB75QU.js} +6 -8
  44. package/dist/{chunk-MX4SZLSV.js → chunk-LUDUDBO6.js} +16 -8
  45. package/dist/{chunk-2YAFDND3.js → chunk-M4NV5PPU.js} +4 -6
  46. package/dist/{chunk-26BBJUBW.js → chunk-M6ZQAFPD.js} +4 -6
  47. package/dist/{chunk-NPWVOFB3.js → chunk-MB2SQF7N.js} +1 -1
  48. package/dist/{chunk-6ZL2XYM7.js → chunk-MLY5ALOV.js} +6 -6
  49. package/dist/chunk-NJJCTEBM.js +416 -0
  50. package/dist/{chunk-OQW4ETJX.js → chunk-NM5V5EKY.js} +6 -1
  51. package/dist/{chunk-ONYO5WJW.js → chunk-NMK7KJZZ.js} +21 -21
  52. package/dist/{chunk-6BNNLVAR.js → chunk-NPDVWFAQ.js} +6 -1
  53. package/dist/{chunk-FTUMRSGT.js → chunk-P5FUWXPW.js} +4 -286
  54. package/dist/chunk-P7TRFL4P.js +54 -0
  55. package/dist/{chunk-A4PNWAUW.js → chunk-PGSGJLUR.js} +6 -1
  56. package/dist/{chunk-DRFGIOZ6.js → chunk-Q7Y6JQ3R.js} +4 -6
  57. package/dist/{chunk-J2E7EUER.js → chunk-QDRCWVV3.js} +17 -17
  58. package/dist/{chunk-MXAP37W6.js → chunk-TNV4F5WA.js} +16 -7
  59. package/dist/{chunk-EBSFSOJC.js → chunk-U7U64UUN.js} +22 -22
  60. package/dist/chunk-UCHZJJIT.js +421 -0
  61. package/dist/{chunk-FSJ3ZA6N.js → chunk-UG7AQQNR.js} +12 -12
  62. package/dist/{chunk-WFA6IULY.js → chunk-URRAWU5D.js} +5 -0
  63. package/dist/{chunk-VOR32OHN.js → chunk-USAGHYRD.js} +13 -15
  64. package/dist/{chunk-QUGC7GWB.js → chunk-UVX3IYXF.js} +15 -15
  65. package/dist/{chunk-B5PEKSRH.js → chunk-VSAKEMDD.js} +6 -1
  66. package/dist/{chunk-YRYKTYMQ.js → chunk-VSOZZYLK.js} +106 -12
  67. package/dist/{chunk-5SSTVFPX.js → chunk-WK5QEYFA.js} +5 -7
  68. package/dist/{chunk-KTGZDMDX.js → chunk-XUTR7GNT.js} +76 -28
  69. package/dist/{chunk-6WVX4KNP.js → chunk-YDZIVDVR.js} +97 -297
  70. package/dist/{chunk-URQIWIKX.js → chunk-YXXIRM4C.js} +3 -3
  71. package/dist/{chunk-H5UEVW6Q.js → chunk-ZD3QCNB7.js} +1 -1
  72. package/dist/{chunk-DUPZ2BBY.js → chunk-ZTLMEBAC.js} +66 -4
  73. package/dist/clock.js +168 -0
  74. package/dist/completion-registry.js +3 -1
  75. package/dist/countdown.js +36 -395
  76. package/dist/{dgmo-router-4UAPPIKN.js → dgmo-router-CZN36TR3.js} +50 -43
  77. package/dist/{dimensions-SCNVYLRF.js → dimensions-7HHKO5BS.js} +3 -3
  78. package/dist/{d3-BThYBTQk.d.ts → export-context-Ceh3wr0E.d.ts} +2 -8
  79. package/dist/{flowchart-parser-NA75YQ77.js → flowchart-parser-4MZPWYK6.js} +8 -3
  80. package/dist/{flowchart-renderer-6MGGX4RC.js → flowchart-renderer-5XDN575E.js} +13 -17
  81. package/dist/index.d.ts +8 -7
  82. package/dist/index.js +80 -74
  83. package/dist/{layout-S3RLVPH4.js → layout-33FHGDEV.js} +10 -12
  84. package/dist/{layout-MBVBAMPA.js → layout-3TSVAGWH.js} +2 -2
  85. package/dist/{layout-WRG4APSJ.js → layout-5GHV7HNM.js} +9 -13
  86. package/dist/layout-FTOGDNUL.js +23 -0
  87. package/dist/{layout-BNLFQHSB.js → layout-QXGPY7KA.js} +7 -9
  88. package/dist/{layout-search-PMYL3VWS.js → layout-search-EMTCDC3C.js} +8 -10
  89. package/dist/{palettes-IN7ZFRJM.js → palettes-4Y7CL2QL.js} +4 -2
  90. package/dist/{parser-3MK56JZC.js → parser-4Y6PODW6.js} +2 -2
  91. package/dist/{parser-2NWH5JUS.js → parser-A3AN76RQ.js} +2 -1
  92. package/dist/{parser-LCJ76UXS.js → parser-BT4NI6JY.js} +5 -1
  93. package/dist/{parser-FXDS4JDK.js → parser-F7NDRPMA.js} +2 -2
  94. package/dist/{parser-BES6LV3G.js → parser-GDLKUBTO.js} +5 -1
  95. package/dist/{parser-SEUTXN6U.js → parser-KJPPUN4D.js} +2 -2
  96. package/dist/{parser-SIKL4PLF.js → parser-KMKVFET2.js} +5 -1
  97. package/dist/{parser-5LW5JDYG.js → parser-NL73FSFI.js} +5 -1
  98. package/dist/{parser-VA7ZQQTA.js → parser-NUU3DVW4.js} +5 -1
  99. package/dist/{parser-L6RWDXQN.js → parser-OGF2CDA6.js} +8 -3
  100. package/dist/{parser-XZUKNZPB.js → parser-R3LPEQIT.js} +7 -1
  101. package/dist/{parser-X23GRTQJ.js → parser-RCIEKN7Y.js} +5 -1
  102. package/dist/{parser-GX5YLRIP.js → parser-VKYUAT4Y.js} +8 -3
  103. package/dist/{parser-QYISOAGR.js → parser-YX72VLDZ.js} +8 -3
  104. package/dist/redraw-MSXU4ZD2.js +73 -0
  105. package/dist/redraw-T324XAF3.js +1698 -0
  106. package/dist/{renderer-5VKPB4LL.js → renderer-37PLQHVB.js} +5 -5
  107. package/dist/{renderer-ISSDGK54.js → renderer-3F47TPZ2.js} +3 -3
  108. package/dist/{renderer-3QAFDXEY.js → renderer-5ITLW7MX.js} +14 -12
  109. package/dist/{renderer-ZZ6MWVB7.js → renderer-6GJWADLO.js} +4 -4
  110. package/dist/{renderer-MM27BSBO.js → renderer-7Y3LR4R2.js} +3 -4
  111. package/dist/{renderer-2FVUPBGV.js → renderer-AM7P4LN7.js} +1 -1
  112. package/dist/{renderer-ZHGHTSNG.js → renderer-BO73LSVT.js} +13 -12
  113. package/dist/{renderer-3IHQI4A4.js → renderer-CNRQFIEI.js} +11 -10
  114. package/dist/{renderer-OAR5VPH4.js → renderer-DAZWHNLI.js} +2 -2
  115. package/dist/{renderer-NDA2FFYB.js → renderer-DD6T3C4J.js} +5 -5
  116. package/dist/{renderer-WIU5BJUK.js → renderer-DDWDCM2K.js} +2 -2
  117. package/dist/{renderer-7ZZG5HR3.js → renderer-EVKWGUGT.js} +8 -9
  118. package/dist/{renderer-3JY6JAQJ.js → renderer-FL7EOSBU.js} +5 -6
  119. package/dist/{renderer-NIE5IW24.js → renderer-GFALLIYT.js} +8 -7
  120. package/dist/{renderer-O6DY46AV.js → renderer-GFGFHYWY.js} +7 -7
  121. package/dist/{renderer-5TZVFQ7K.js → renderer-GOXAP2IE.js} +7 -8
  122. package/dist/{renderer-NHTR7IRR.js → renderer-GPAVVUET.js} +4 -5
  123. package/dist/{renderer-TO2NVJP3.js → renderer-HJ54YXT3.js} +50 -45
  124. package/dist/{renderer-LM4ICK6I.js → renderer-HYGTMBHT.js} +4 -5
  125. package/dist/{renderer-S3YCLJKL.js → renderer-IHCWBFPI.js} +17 -20
  126. package/dist/{renderer-XO57LTU4.js → renderer-ISDKO3DI.js} +5 -5
  127. package/dist/{renderer-LQP3AGEJ.js → renderer-J3QWK6IM.js} +3 -4
  128. package/dist/{renderer-J666LZXJ.js → renderer-J6H4Q3RM.js} +7 -8
  129. package/dist/{renderer-ALWVK3EJ.js → renderer-JJ4QW3SK.js} +6 -6
  130. package/dist/{renderer-DC7C5Q3G.js → renderer-NOYLNVTI.js} +2 -2
  131. package/dist/{renderer-ZGY7P4BM.js → renderer-PBKTAWQV.js} +16 -20
  132. package/dist/{renderer-XGG2UNXT.js → renderer-POBGKIUT.js} +3 -4
  133. package/dist/{renderer-QGIHLZOJ.js → renderer-RDI2RYUP.js} +9 -10
  134. package/dist/{renderer-JEJT3YET.js → renderer-TSCSZ6CL.js} +2 -3
  135. package/dist/{renderer-VPIELEE5.js → renderer-VDBNC7A6.js} +8 -9
  136. package/dist/{renderer-J67LMOD5.js → renderer-VI34SD5V.js} +15 -15
  137. package/dist/{renderer-J5FKF423.js → renderer-W4MUMXJE.js} +7 -4
  138. package/dist/{renderer-RSK6QFWN.js → renderer-XJMVG2WJ.js} +7 -9
  139. package/dist/{state-parser-TIR2ORJY.js → state-parser-NPYTMRXP.js} +8 -3
  140. package/dist/{state-renderer-G6SUXU4J.js → state-renderer-44K2KDX7.js} +15 -19
  141. package/dist/{tag-groups-DsoVpAY-.d.ts → tag-groups-DydewK3D.d.ts} +2 -173
  142. package/dist/{themes-DRNjxX7Q.d.ts → themes-DzIH3Hjv.d.ts} +3 -2
  143. package/docs/ai-integration.md +1 -1
  144. package/docs/language-reference.md +23 -2
  145. package/gallery/fixtures/map-undirected-edges.dgmo +5 -5
  146. package/gallery/fixtures/whiteboard.dgmo +3 -0
  147. package/package.json +4 -6
  148. package/dist/chunk-3Y63RFJL.js +0 -75
  149. package/dist/chunk-5DH3KYFH.js +0 -20
  150. package/dist/chunk-O753JUEZ.js +0 -67
  151. package/dist/chunk-RJNZHFNG.js +0 -51
  152. package/dist/chunk-Z6DXWULM.js +0 -23
  153. package/dist/layout-5USEVQBY.js +0 -25
  154. package/dist/{chunk-YITHYQCL.js → chunk-4FT5KQ7H.js} +7 -7
  155. package/dist/{chunk-GE7ICBX6.js → chunk-4RY5D5RE.js} +4 -4
  156. package/dist/{chunk-DGUGE67L.js → chunk-CDYV46JE.js} +3 -3
  157. package/dist/{chunk-IGKFOHBG.js → chunk-CQYFZOUC.js} +13 -13
  158. package/dist/{chunk-TKAB3FTK.js → chunk-DRQSB72S.js} +11 -11
  159. package/dist/{chunk-ZKP77MB3.js → chunk-FVTYJUXR.js} +5 -5
  160. package/dist/{chunk-MA42PIGJ.js → chunk-H5NVCOEJ.js} +4 -4
  161. package/dist/{chunk-BEA4D7OS.js → chunk-IXHWS2HI.js} +3 -3
  162. package/dist/{chunk-QKY6W4NA.js → chunk-KHL652SX.js} +25 -25
  163. package/dist/{chunk-6OIMUSDX.js → chunk-MUJVNSEW.js} +9 -9
  164. package/dist/{chunk-YO6AQU4A.js → chunk-QJOVZ4TC.js} +12 -12
  165. package/dist/{chunk-SOHZDW6N.js → chunk-UXNA2H2V.js} +3 -3
  166. package/dist/{chunk-NO3UX6AP.js → chunk-V2NQV7VL.js} +4 -4
@@ -1,19 +1,18 @@
1
1
  import {
2
2
  renderSitemap,
3
3
  renderSitemapForExport
4
- } from "./chunk-45QUTYPD.js";
5
- import "./chunk-S7W75MIM.js";
4
+ } from "./chunk-CYDM2XII.js";
6
5
  import "./chunk-R2K5L4UA.js";
7
- import "./chunk-Z6DXWULM.js";
6
+ import "./chunk-CYRB2JTN.js";
8
7
  import "./chunk-24YPR5EH.js";
9
- import "./chunk-NMS5XSLX.js";
10
- import "./chunk-XCKNFFKM.js";
11
8
  import "./chunk-42UJ23H3.js";
12
- import "./chunk-CYRB2JTN.js";
13
- import "./chunk-JILEYZ2V.js";
14
9
  import "./chunk-VLC6WNRD.js";
15
- import "./chunk-ICLB27PZ.js";
10
+ import "./chunk-XCKNFFKM.js";
11
+ import "./chunk-NMS5XSLX.js";
12
+ import "./chunk-JILEYZ2V.js";
16
13
  import "./chunk-IYULMRBE.js";
14
+ import "./chunk-65GPEV5V.js";
15
+ import "./chunk-ICLB27PZ.js";
17
16
  import "./chunk-4SACN2C5.js";
18
17
  import "./chunk-TIIZIAGS.js";
19
18
  import "./chunk-UOCWYLYT.js";
@@ -2,19 +2,19 @@ import {
2
2
  ancestorTrailReserve,
3
3
  renderOrg,
4
4
  renderOrgForExport
5
- } from "./chunk-TKAB3FTK.js";
5
+ } from "./chunk-DRQSB72S.js";
6
6
  import "./chunk-A2A2I4Z4.js";
7
7
  import "./chunk-R2K5L4UA.js";
8
- import "./chunk-24YPR5EH.js";
9
- import "./chunk-NMS5XSLX.js";
10
- import "./chunk-XCKNFFKM.js";
11
8
  import "./chunk-TOHTKLKE.js";
12
9
  import "./chunk-CYRB2JTN.js";
13
- import "./chunk-JILEYZ2V.js";
10
+ import "./chunk-24YPR5EH.js";
14
11
  import "./chunk-VLC6WNRD.js";
15
- import "./chunk-ICLB27PZ.js";
12
+ import "./chunk-XCKNFFKM.js";
13
+ import "./chunk-NMS5XSLX.js";
14
+ import "./chunk-JILEYZ2V.js";
16
15
  import "./chunk-5OTA2PUH.js";
17
16
  import "./chunk-NOTA6TEI.js";
17
+ import "./chunk-ICLB27PZ.js";
18
18
  import "./chunk-4SACN2C5.js";
19
19
  import "./chunk-TIIZIAGS.js";
20
20
  import "./chunk-UOCWYLYT.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  renderVersionControl,
3
3
  renderVersionControlForExport
4
- } from "./chunk-NO3UX6AP.js";
5
- import "./chunk-XCKNFFKM.js";
4
+ } from "./chunk-V2NQV7VL.js";
6
5
  import "./chunk-VLC6WNRD.js";
6
+ import "./chunk-XCKNFFKM.js";
7
7
  import "./chunk-ICLB27PZ.js";
8
8
  import "./chunk-6GXLAKUH.js";
9
9
  import "./chunk-3J7O3CU6.js";
@@ -1,33 +1,29 @@
1
1
  import {
2
2
  renderClassDiagram,
3
3
  renderClassDiagramForExport
4
- } from "./chunk-Q2UFOKPB.js";
5
- import "./chunk-5EBYPETE.js";
6
- import "./chunk-HXULJZA2.js";
7
- import "./chunk-X5BUX2GK.js";
4
+ } from "./chunk-KPSSNGAE.js";
5
+ import "./chunk-J43OCO22.js";
6
+ import "./chunk-LDDDKWL6.js";
7
+ import "./chunk-ADVGV3P7.js";
8
8
  import "./chunk-EJS3K44P.js";
9
- import "./chunk-FTUMRSGT.js";
10
- import "./chunk-RJNZHFNG.js";
11
- import "./chunk-JRWUHLRP.js";
12
- import "./chunk-5DH3KYFH.js";
9
+ import "./chunk-P5FUWXPW.js";
13
10
  import "./chunk-QT3KDDXK.js";
14
- import "./chunk-NPWVOFB3.js";
15
- import "./chunk-S7W75MIM.js";
16
- import "./chunk-Z6DXWULM.js";
17
- import "./chunk-24YPR5EH.js";
18
- import "./chunk-NMS5XSLX.js";
19
- import "./chunk-XCKNFFKM.js";
20
11
  import "./chunk-TOHTKLKE.js";
21
- import "./chunk-42UJ23H3.js";
22
12
  import "./chunk-CYRB2JTN.js";
23
- import "./chunk-JILEYZ2V.js";
13
+ import "./chunk-24YPR5EH.js";
14
+ import "./chunk-42UJ23H3.js";
24
15
  import "./chunk-VLC6WNRD.js";
25
- import "./chunk-ICLB27PZ.js";
26
- import "./chunk-Q6ZQX2HX.js";
27
- import "./chunk-3Y63RFJL.js";
28
- import "./chunk-O753JUEZ.js";
16
+ import "./chunk-XCKNFFKM.js";
17
+ import "./chunk-NMS5XSLX.js";
18
+ import "./chunk-JILEYZ2V.js";
19
+ import "./chunk-KCMGIYPO.js";
29
20
  import "./chunk-N7VMGZCU.js";
21
+ import "./chunk-NJJCTEBM.js";
30
22
  import "./chunk-NOTA6TEI.js";
23
+ import "./chunk-D6PVMUCX.js";
24
+ import "./chunk-MB2SQF7N.js";
25
+ import "./chunk-65GPEV5V.js";
26
+ import "./chunk-ICLB27PZ.js";
31
27
  import "./chunk-4SACN2C5.js";
32
28
  import "./chunk-TIIZIAGS.js";
33
29
  import "./chunk-UOCWYLYT.js";
@@ -1,12 +1,11 @@
1
1
  import {
2
2
  renderPyramid,
3
3
  renderPyramidForExport
4
- } from "./chunk-JKST4RTT.js";
5
- import "./chunk-NPWVOFB3.js";
6
- import "./chunk-S7W75MIM.js";
7
- import "./chunk-Z6DXWULM.js";
4
+ } from "./chunk-7OWK5K5C.js";
8
5
  import "./chunk-24YPR5EH.js";
9
6
  import "./chunk-VLC6WNRD.js";
7
+ import "./chunk-MB2SQF7N.js";
8
+ import "./chunk-65GPEV5V.js";
10
9
  import "./chunk-ICLB27PZ.js";
11
10
  import "./chunk-TIIZIAGS.js";
12
11
  import "./chunk-KAO7JL4I.js";
@@ -1,22 +1,21 @@
1
1
  import {
2
2
  renderMindmap,
3
3
  renderMindmapForExport
4
- } from "./chunk-HIWHIYLD.js";
4
+ } from "./chunk-2TFXRBCD.js";
5
5
  import "./chunk-BQMHJ6OW.js";
6
6
  import "./chunk-B5DHFFZP.js";
7
- import "./chunk-S7W75MIM.js";
8
- import "./chunk-Z6DXWULM.js";
9
- import "./chunk-24YPR5EH.js";
10
- import "./chunk-NMS5XSLX.js";
11
- import "./chunk-XCKNFFKM.js";
7
+ import "./chunk-XIUGSUE4.js";
12
8
  import "./chunk-TOHTKLKE.js";
13
- import "./chunk-42UJ23H3.js";
14
9
  import "./chunk-CYRB2JTN.js";
15
- import "./chunk-JILEYZ2V.js";
10
+ import "./chunk-24YPR5EH.js";
11
+ import "./chunk-42UJ23H3.js";
16
12
  import "./chunk-VLC6WNRD.js";
17
- import "./chunk-ICLB27PZ.js";
18
- import "./chunk-XIUGSUE4.js";
13
+ import "./chunk-XCKNFFKM.js";
14
+ import "./chunk-NMS5XSLX.js";
15
+ import "./chunk-JILEYZ2V.js";
19
16
  import "./chunk-IYULMRBE.js";
17
+ import "./chunk-65GPEV5V.js";
18
+ import "./chunk-ICLB27PZ.js";
20
19
  import "./chunk-4SACN2C5.js";
21
20
  import "./chunk-TIIZIAGS.js";
22
21
  import "./chunk-UOCWYLYT.js";
@@ -1,11 +1,10 @@
1
1
  import {
2
2
  renderGoal,
3
3
  renderGoalForExport
4
- } from "./chunk-URQIWIKX.js";
4
+ } from "./chunk-YXXIRM4C.js";
5
5
  import "./chunk-CN4RDJDV.js";
6
- import "./chunk-S7W75MIM.js";
7
- import "./chunk-Z6DXWULM.js";
8
6
  import "./chunk-VLC6WNRD.js";
7
+ import "./chunk-65GPEV5V.js";
9
8
  import "./chunk-ICLB27PZ.js";
10
9
  import "./chunk-4SACN2C5.js";
11
10
  import "./chunk-TIIZIAGS.js";
@@ -8,22 +8,21 @@ import {
8
8
  renderC4ContextForExport,
9
9
  renderC4Deployment,
10
10
  renderC4DeploymentForExport
11
- } from "./chunk-BZX7QCXJ.js";
11
+ } from "./chunk-KRU2LCIP.js";
12
12
  import "./chunk-5KKZXA44.js";
13
13
  import "./chunk-XBJJP2HN.js";
14
- import "./chunk-S7W75MIM.js";
15
- import "./chunk-Z6DXWULM.js";
16
- import "./chunk-NMS5XSLX.js";
17
- import "./chunk-XCKNFFKM.js";
18
14
  import "./chunk-CYRB2JTN.js";
19
- import "./chunk-JILEYZ2V.js";
15
+ import "./chunk-IXHWS2HI.js";
20
16
  import "./chunk-VLC6WNRD.js";
21
- import "./chunk-ICLB27PZ.js";
22
- import "./chunk-BEA4D7OS.js";
17
+ import "./chunk-XCKNFFKM.js";
18
+ import "./chunk-NMS5XSLX.js";
19
+ import "./chunk-JILEYZ2V.js";
23
20
  import "./chunk-C3Z4DX3V.js";
24
- import "./chunk-N7VMGZCU.js";
25
21
  import "./chunk-IYULMRBE.js";
22
+ import "./chunk-N7VMGZCU.js";
26
23
  import "./chunk-NOTA6TEI.js";
24
+ import "./chunk-65GPEV5V.js";
25
+ import "./chunk-ICLB27PZ.js";
27
26
  import "./chunk-4SACN2C5.js";
28
27
  import "./chunk-TIIZIAGS.js";
29
28
  import "./chunk-UOCWYLYT.js";
@@ -3,26 +3,26 @@ import {
3
3
  focusEventLine,
4
4
  renderEventLine,
5
5
  renderEventLineForExport
6
- } from "./chunk-62BP7AJU.js";
7
- import "./chunk-NPWVOFB3.js";
8
- import "./chunk-S7W75MIM.js";
6
+ } from "./chunk-IIV4SMJL.js";
9
7
  import "./chunk-R2K5L4UA.js";
10
- import "./chunk-Z6DXWULM.js";
11
- import "./chunk-F7326NVM.js";
12
- import "./chunk-YRYKTYMQ.js";
13
- import "./chunk-24YPR5EH.js";
14
- import "./chunk-NMS5XSLX.js";
15
- import "./chunk-XCKNFFKM.js";
16
- import "./chunk-Q6W2K33N.js";
8
+ import "./chunk-3GCASUWA.js";
9
+ import "./chunk-6XLMTAEX.js";
10
+ import "./chunk-VSOZZYLK.js";
11
+ import "./chunk-BQO24BDM.js";
17
12
  import "./chunk-TOHTKLKE.js";
18
- import "./chunk-42UJ23H3.js";
19
13
  import "./chunk-CYRB2JTN.js";
20
- import "./chunk-JILEYZ2V.js";
14
+ import "./chunk-24YPR5EH.js";
15
+ import "./chunk-42UJ23H3.js";
21
16
  import "./chunk-VLC6WNRD.js";
22
- import "./chunk-ICLB27PZ.js";
23
- import "./chunk-BQO24BDM.js";
17
+ import "./chunk-XCKNFFKM.js";
18
+ import "./chunk-NMS5XSLX.js";
19
+ import "./chunk-JILEYZ2V.js";
24
20
  import "./chunk-MKSTL6DR.js";
25
- import "./chunk-7ENDOHAA.js";
21
+ import "./chunk-GXCDD6NG.js";
22
+ import "./chunk-FMAVHTYB.js";
23
+ import "./chunk-MB2SQF7N.js";
24
+ import "./chunk-65GPEV5V.js";
25
+ import "./chunk-ICLB27PZ.js";
26
26
  import "./chunk-3UR4F7FE.js";
27
27
  import "./chunk-4SACN2C5.js";
28
28
  import "./chunk-TIIZIAGS.js";
@@ -2,14 +2,17 @@ import {
2
2
  MARKER_LABELS,
3
3
  renderRaci,
4
4
  renderRaciForExport
5
- } from "./chunk-6ZL2XYM7.js";
5
+ } from "./chunk-MLY5ALOV.js";
6
6
  import "./chunk-24YPR5EH.js";
7
- import "./chunk-XCKNFFKM.js";
8
7
  import "./chunk-VLC6WNRD.js";
9
- import "./chunk-ICLB27PZ.js";
10
- import "./chunk-V4D2ZQBE.js";
8
+ import "./chunk-XCKNFFKM.js";
9
+ import "./chunk-KRPLP5LP.js";
10
+ import "./chunk-CYTFO2LF.js";
11
+ import "./chunk-FMAVHTYB.js";
11
12
  import "./chunk-NOTA6TEI.js";
13
+ import "./chunk-ICLB27PZ.js";
12
14
  import "./chunk-4WW3SGMH.js";
15
+ import "./chunk-3UR4F7FE.js";
13
16
  import "./chunk-TIIZIAGS.js";
14
17
  import "./chunk-KAO7JL4I.js";
15
18
  import "./chunk-6GXLAKUH.js";
@@ -1,20 +1,18 @@
1
1
  import {
2
2
  renderBoxesAndLines,
3
3
  renderBoxesAndLinesForExport
4
- } from "./chunk-EBSFSOJC.js";
4
+ } from "./chunk-U7U64UUN.js";
5
5
  import "./chunk-B5DHFFZP.js";
6
6
  import "./chunk-XBJJP2HN.js";
7
- import "./chunk-JRWUHLRP.js";
8
- import "./chunk-5DH3KYFH.js";
9
- import "./chunk-NPWVOFB3.js";
10
- import "./chunk-S7W75MIM.js";
11
- import "./chunk-Z6DXWULM.js";
12
7
  import "./chunk-24YPR5EH.js";
13
- import "./chunk-NMS5XSLX.js";
14
- import "./chunk-XCKNFFKM.js";
15
8
  import "./chunk-42UJ23H3.js";
16
- import "./chunk-JILEYZ2V.js";
17
9
  import "./chunk-VLC6WNRD.js";
10
+ import "./chunk-XCKNFFKM.js";
11
+ import "./chunk-NMS5XSLX.js";
12
+ import "./chunk-JILEYZ2V.js";
13
+ import "./chunk-D6PVMUCX.js";
14
+ import "./chunk-MB2SQF7N.js";
15
+ import "./chunk-65GPEV5V.js";
18
16
  import "./chunk-ICLB27PZ.js";
19
17
  import "./chunk-4SACN2C5.js";
20
18
  import "./chunk-TIIZIAGS.js";
@@ -1,14 +1,19 @@
1
1
  import {
2
2
  looksLikeState,
3
3
  parseState
4
- } from "./chunk-2YAFDND3.js";
4
+ } from "./chunk-M4NV5PPU.js";
5
5
  import "./chunk-NXMESY4J.js";
6
- import "./chunk-3Y63RFJL.js";
7
- import "./chunk-O753JUEZ.js";
8
6
  import "./chunk-N7VMGZCU.js";
7
+ import "./chunk-NJJCTEBM.js";
9
8
  import "./chunk-NOTA6TEI.js";
9
+ import "./chunk-D6PVMUCX.js";
10
+ import "./chunk-MB2SQF7N.js";
11
+ import "./chunk-65GPEV5V.js";
12
+ import "./chunk-ICLB27PZ.js";
10
13
  import "./chunk-4SACN2C5.js";
11
14
  import "./chunk-TIIZIAGS.js";
15
+ import "./chunk-KAO7JL4I.js";
16
+ import "./chunk-6GXLAKUH.js";
12
17
  import "./chunk-3J7O3CU6.js";
13
18
  import "./chunk-BYU54C3S.js";
14
19
  import "./chunk-YLJ4XMA6.js";
@@ -1,36 +1,32 @@
1
1
  import {
2
2
  renderState,
3
3
  renderStateForExport
4
- } from "./chunk-MDVJYRJT.js";
4
+ } from "./chunk-KPGPK4SK.js";
5
5
  import "./chunk-26EVL454.js";
6
- import "./chunk-5SSTVFPX.js";
6
+ import "./chunk-WK5QEYFA.js";
7
+ import "./chunk-LDDDKWL6.js";
7
8
  import "./chunk-XBJJP2HN.js";
8
- import "./chunk-HXULJZA2.js";
9
- import "./chunk-X5BUX2GK.js";
9
+ import "./chunk-ADVGV3P7.js";
10
10
  import "./chunk-EJS3K44P.js";
11
- import "./chunk-FTUMRSGT.js";
12
- import "./chunk-RJNZHFNG.js";
13
- import "./chunk-JRWUHLRP.js";
14
- import "./chunk-5DH3KYFH.js";
11
+ import "./chunk-P5FUWXPW.js";
15
12
  import "./chunk-QT3KDDXK.js";
16
- import "./chunk-NPWVOFB3.js";
17
- import "./chunk-S7W75MIM.js";
18
- import "./chunk-Z6DXWULM.js";
19
13
  import "./chunk-EPDBWATV.js";
14
+ import "./chunk-CYRB2JTN.js";
20
15
  import "./chunk-24YPR5EH.js";
21
- import "./chunk-NMS5XSLX.js";
22
- import "./chunk-XCKNFFKM.js";
23
16
  import "./chunk-42UJ23H3.js";
24
- import "./chunk-CYRB2JTN.js";
25
- import "./chunk-JILEYZ2V.js";
26
17
  import "./chunk-VLC6WNRD.js";
27
- import "./chunk-ICLB27PZ.js";
28
- import "./chunk-2YAFDND3.js";
18
+ import "./chunk-XCKNFFKM.js";
19
+ import "./chunk-NMS5XSLX.js";
20
+ import "./chunk-JILEYZ2V.js";
21
+ import "./chunk-M4NV5PPU.js";
29
22
  import "./chunk-NXMESY4J.js";
30
- import "./chunk-3Y63RFJL.js";
31
- import "./chunk-O753JUEZ.js";
32
23
  import "./chunk-N7VMGZCU.js";
24
+ import "./chunk-NJJCTEBM.js";
33
25
  import "./chunk-NOTA6TEI.js";
26
+ import "./chunk-D6PVMUCX.js";
27
+ import "./chunk-MB2SQF7N.js";
28
+ import "./chunk-65GPEV5V.js";
29
+ import "./chunk-ICLB27PZ.js";
34
30
  import "./chunk-4SACN2C5.js";
35
31
  import "./chunk-TIIZIAGS.js";
36
32
  import "./chunk-UOCWYLYT.js";
@@ -79,177 +79,6 @@ interface EmitOptions {
79
79
  declare function emit(spec: DiagnosticSpec, line: number, params?: DiagnosticParams, opts?: EmitOptions): DgmoError;
80
80
  declare function formatDgmoError(err: DgmoError): string;
81
81
 
82
- /**
83
- * Compact view state schema (ADR-6).
84
- * All fields optional. Only non-default values are encoded.
85
- * `tag: null` means "user chose none"; absent `tag` means "use DSL default" (ADR-5).
86
- */
87
- interface CompactViewState {
88
- tag?: string | null;
89
- cs?: number[];
90
- cg?: string[];
91
- swim?: string | null;
92
- cl?: string[];
93
- cc?: string[];
94
- rm?: string;
95
- htv?: Record<string, string[]>;
96
- ha?: string[];
97
- sem?: boolean;
98
- cm?: boolean;
99
- c4l?: string;
100
- c4s?: string;
101
- c4c?: string;
102
- rps?: number;
103
- spd?: number;
104
- io?: Record<string, number>;
105
- hd?: boolean;
106
- cbd?: boolean;
107
- rq?: string;
108
- an?: boolean;
109
- fl?: boolean;
110
- }
111
- interface DecodedDiagramUrl {
112
- dsl: string;
113
- viewState: CompactViewState;
114
- palette?: string;
115
- theme?: 'light' | 'dark';
116
- filename?: string;
117
- }
118
- interface EncodeDiagramUrlOptions {
119
- baseUrl?: string;
120
- viewState?: CompactViewState;
121
- palette?: string;
122
- theme?: 'light' | 'dark';
123
- filename?: string;
124
- /**
125
- * Where this link was generated, carried through to the editor (#718).
126
- *
127
- * The only value in use is `embed`, written by the toolbar link an embedded
128
- * diagram renders. It exists because that last hop is otherwise unmeasurable:
129
- * the anchor carries `rel="noopener noreferrer"`, so the editor sees no
130
- * referrer, and every other `?dgmo=` arrival — a pasted snapshot link, a
131
- * shared file — is byte-identical without it.
132
- *
133
- * 🔴 It is a LABEL on a link, not a fact about a person. Nothing about who
134
- * followed it is recorded; the editor counts arrivals carrying this and
135
- * nothing else. And like every part of this URL it can be pasted onward, so
136
- * a second reader opening the same link counts too — which is still the embed
137
- * link being followed, one hop later, and is the honest reading of the number.
138
- */
139
- via?: 'embed';
140
- }
141
- type EncodeDiagramUrlResult = {
142
- url: string;
143
- error?: undefined;
144
- } | {
145
- url?: undefined;
146
- error: 'too-large';
147
- compressedSize: number;
148
- limit: number;
149
- };
150
- /**
151
- * Encode a CompactViewState to a compressed string for URL embedding.
152
- * Returns empty string if state has no keys (ADR-4).
153
- */
154
- declare function encodeViewState(state: CompactViewState): string;
155
- /**
156
- * Decode a compressed view state string back to CompactViewState.
157
- * Returns empty object on failure (no crash).
158
- */
159
- declare function decodeViewState(encoded: string): CompactViewState;
160
- /**
161
- * Compress a DGMO DSL string into a shareable URL.
162
- * Returns `{ url }` on success, or `{ error: 'too-large', compressedSize, limit }` if the
163
- * compressed payload exceeds the 8 KB limit.
164
- */
165
- declare function encodeDiagramUrl(dsl: string, options?: EncodeDiagramUrlOptions): EncodeDiagramUrlResult;
166
- /**
167
- * Decode a DGMO DSL string and view state from a URL query string or hash.
168
- * Accepts any of:
169
- * - `?dgmo=<payload>&vs=<state>`
170
- * - `#dgmo=<payload>&vs=<state>` (backwards compat)
171
- * - `dgmo=<payload>`
172
- * - `<bare payload>`
173
- *
174
- * Returns `{ dsl, viewState }`. The DSL is empty string on invalid input.
175
- */
176
- declare function decodeDiagramUrl(hash: string): DecodedDiagramUrl;
177
-
178
- /**
179
- * Color definitions for a single mode (light or dark).
180
- * 10 semantic UI colors + 9 named accent colors = 19 total.
181
- *
182
- * `readonly` on every field (and the nested `colors` map) by design —
183
- * palettes flow from the registry into every renderer; nothing in the
184
- * pipeline should ever mutate a palette in place.
185
- */
186
- interface PaletteColors {
187
- /** Main background (#eceff4 light / #2e3440 dark for Nord) */
188
- readonly bg: string;
189
- /** Cards, panels (#e5e9f0 / #3b4252) */
190
- readonly surface: string;
191
- /** Popovers, dropdowns (#e5e9f0 / #434c5e) */
192
- readonly overlay: string;
193
- /** Borders, dividers, muted (#d8dee9 / #4c566a) */
194
- readonly border: string;
195
- /** Primary text (#2e3440 / #eceff4) */
196
- readonly text: string;
197
- /** Secondary/diminished text (#4c566a / #d8dee9) */
198
- readonly textMuted: string;
199
- /**
200
- * Light-mode arg for `contrastText()` when text is rendered on a
201
- * tinted shape fill (e.g. `shapeFill()` output). Must guarantee
202
- * ≥ 4.5:1 WCAG AA against any `shapeFill()` the palette can produce.
203
- * Distinct from `colors.white` because palette-aesthetic anchors don't
204
- * always meet contrast requirements (TD-5).
205
- */
206
- readonly textOnFillLight: string;
207
- /** Dark-mode counterpart to `textOnFillLight`. */
208
- readonly textOnFillDark: string;
209
- /** Primary accent — buttons, links */
210
- readonly primary: string;
211
- /** Secondary accent */
212
- readonly secondary: string;
213
- /** Tertiary accent */
214
- readonly accent: string;
215
- /** Error/danger */
216
- readonly destructive: string;
217
- /**
218
- * Used for: inline annotations (red), pie charts, cScale,
219
- * series rotation, journey actors, Gantt tasks.
220
- */
221
- readonly colors: {
222
- readonly red: string;
223
- readonly orange: string;
224
- readonly yellow: string;
225
- readonly green: string;
226
- readonly blue: string;
227
- readonly purple: string;
228
- readonly teal: string;
229
- readonly cyan: string;
230
- readonly gray: string;
231
- readonly black: string;
232
- readonly white: string;
233
- };
234
- }
235
- /**
236
- * Complete palette definition. One object per color scheme.
237
- * This is what palette authors create — the single artifact for NFR1.
238
- *
239
- * Palettes are immutable from the consumer's perspective; the registry
240
- * hands out the same frozen-shape object on every `getPalette(id)`.
241
- */
242
- interface PaletteConfig {
243
- /** Registry key: 'nord', 'slate', 'catppuccin' */
244
- readonly id: string;
245
- /** Display name: 'Nord', 'Slate', 'Catppuccin' */
246
- readonly name: string;
247
- /** Light mode color definitions */
248
- readonly light: PaletteColors;
249
- /** Dark mode color definitions */
250
- readonly dark: PaletteColors;
251
- }
252
-
253
82
  /** A single entry inside a tag group: `Value color` */
254
83
  interface TagEntry {
255
84
  readonly value: string;
@@ -344,5 +173,5 @@ declare function resolveActiveTagGroup(tagGroups: ReadonlyArray<{
344
173
  name: string;
345
174
  }>, explicitActiveTag: string | undefined, programmaticOverride?: string | null): string | null;
346
175
 
347
- export { emit as e, formatDgmoError as f, autoTagColorCycle as k, decodeDiagramUrl as l, decodeViewState as m, encodeDiagramUrl as n, encodeViewState as o, makeDgmoError as p, resolveTagColor as q, resolveActiveTagGroup as r, resolveTagValue as s, tagAttrKey as t };
348
- export type { CompactViewState as C, DgmoError as D, EmitOptions as E, PaletteConfig as P, TagGroup as T, PaletteColors as a, DiagnosticSpec as b, DgmoSeverity as c, DiagnosticParams as d, TagEntry as g, DecodedDiagramUrl as h, EncodeDiagramUrlOptions as i, EncodeDiagramUrlResult as j };
176
+ export { emit as e, formatDgmoError as f, autoTagColorCycle as g, resolveTagColor as h, resolveTagValue as i, makeDgmoError as m, resolveActiveTagGroup as r, tagAttrKey as t };
177
+ export type { DgmoError as D, EmitOptions as E, TagGroup as T, DiagnosticSpec as a, DgmoSeverity as b, DiagnosticParams as c, TagEntry as d };
@@ -1,5 +1,6 @@
1
- import { P as PaletteConfig, D as DgmoError } from './tag-groups-DsoVpAY-.js';
2
- import { A as AirportData, G as Gazetteer, R as RegionName } from './d3-BThYBTQk.js';
1
+ import { P as PaletteConfig } from './chart-types-Cppnp31G.js';
2
+ import { D as DgmoError } from './tag-groups-DydewK3D.js';
3
+ import { A as AirportData, G as Gazetteer, R as RegionName } from './export-context-Ceh3wr0E.js';
3
4
 
4
5
  /**
5
6
  * All built-in palettes, keyed by camelCase id. Use directly with render():
@@ -112,7 +112,7 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
112
112
  - **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.
113
113
  <!-- TITLE end -->
114
114
  <!-- CATEGORIZE start -->
115
- - **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, family and sketch** take the tag group but no `active-tag` line — declare the group and stop there; on event-line, family and sketch the line would be drawn as an element. **Class, flowchart, whiteboard, 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.
115
+ - **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, family, sketch and whiteboard** take the tag group but no `active-tag` line — declare the group and stop there; on event-line, family and sketch 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.
116
116
  <!-- CATEGORIZE end -->
117
117
  - **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
118
118
  - **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.