@diagrammo/dgmo 0.71.0 → 0.73.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 (280) hide show
  1. package/dist/advanced.d.ts +54 -37
  2. package/dist/advanced.js +116 -117
  3. package/dist/{analyzer-HQUXKZ5J.js → analyzer-KQWXVQOI.js} +3 -3
  4. package/dist/block.d.ts +2 -2
  5. package/dist/block.js +64 -76
  6. package/dist/calculator-2Z5DUTOB.js +13 -0
  7. package/dist/{chart-meta-6JaOudSs.d.ts → chart-meta-lP8Rl19E.d.ts} +4 -3
  8. package/dist/chart-meta.d.ts +3 -3
  9. package/dist/chart-meta.js +49 -49
  10. package/dist/{charts-d3-6IHGTXBR.js → charts-d3-S6JPQQFZ.js} +12 -12
  11. package/dist/{chunk-YYVTBZZC.js → chunk-24YPR5EH.js} +1 -1
  12. package/dist/{chunk-7BHM774H.js → chunk-25LXU4OQ.js} +8 -8
  13. package/dist/{chunk-7SEQPFBX.js → chunk-2AC2KTVM.js} +33 -28
  14. package/dist/{chunk-NUF7YTHA.js → chunk-2M2UC5EU.js} +3 -3
  15. package/dist/{chunk-CGLBK5Q4.js → chunk-2PU5XWLA.js} +2 -2
  16. package/dist/{chunk-MWWRIOEN.js → chunk-2TFWQM3E.js} +3 -3
  17. package/dist/{chunk-FLXDMH7B.js → chunk-3ATHNEOQ.js} +30 -24
  18. package/dist/{chunk-FFD6A3B2.js → chunk-3AXUJ5PT.js} +16 -10
  19. package/dist/{chunk-IFJIYUI6.js → chunk-3OKBXV3I.js} +4 -4
  20. package/dist/{chunk-LJS4Z326.js → chunk-3X3UD7PN.js} +6 -6
  21. package/dist/{chunk-DPGI742S.js → chunk-4FKEI4MF.js} +4 -4
  22. package/dist/{chunk-WPXHTYET.js → chunk-4K5H6LON.js} +4 -4
  23. package/dist/{chunk-LTGOPJUV.js → chunk-4NYJEK4R.js} +3 -3
  24. package/dist/{chunk-MTPKBSTR.js → chunk-4SXHMFFP.js} +2 -2
  25. package/dist/{chunk-VE7PPEU3.js → chunk-54SJUHNY.js} +8 -8
  26. package/dist/{chunk-BYSRXYRW.js → chunk-5EI23VVR.js} +6 -6
  27. package/dist/{chunk-OLMWTJVU.js → chunk-5SI6T5A5.js} +1 -1
  28. package/dist/{chunk-UJXCDF4E.js → chunk-5VMUVJO4.js} +2 -2
  29. package/dist/{chunk-ZGVVPILJ.js → chunk-6DYZ2JM6.js} +2 -2
  30. package/dist/{chunk-ELIGVSLE.js → chunk-6G2GJGUC.js} +12 -6
  31. package/dist/{chunk-E36Q5ABQ.js → chunk-6LGPL4LP.js} +7 -7
  32. package/dist/{chunk-KJWIU5AM.js → chunk-7GYSVN4Z.js} +3 -3
  33. package/dist/{chunk-YTFA4VTW.js → chunk-7S5WQXI3.js} +3 -3
  34. package/dist/{chunk-MKNWMFZU.js → chunk-7VMUKH2Z.js} +31 -27
  35. package/dist/{chunk-ZNHPCITV.js → chunk-A34AXXBO.js} +8 -8
  36. package/dist/{chunk-TGGKBY22.js → chunk-ABH626W7.js} +15 -10
  37. package/dist/{chunk-722TKHMS.js → chunk-AG3Z47VY.js} +11 -11
  38. package/dist/{chunk-T7W5LM4N.js → chunk-AMYMV4JZ.js} +5 -5
  39. package/dist/{chunk-KOVRFBGR.js → chunk-ARM4G2HJ.js} +16 -11
  40. package/dist/{chunk-XQW4KFJ4.js → chunk-B5CIHVBP.js} +11 -11
  41. package/dist/{chunk-MC2H32SM.js → chunk-BVNTXVYJ.js} +4 -4
  42. package/dist/{chunk-T3LNWU7B.js → chunk-CLKRRKV6.js} +12 -12
  43. package/dist/{chunk-UY77QQWU.js → chunk-CVGTEAIO.js} +11 -7
  44. package/dist/{chunk-6EDBUKC7.js → chunk-D5ZZOTE6.js} +3 -3
  45. package/dist/{chunk-WMHHNK44.js → chunk-DGPFFRLS.js} +2 -2
  46. package/dist/{chunk-EETUTZ5C.js → chunk-DTYZAXEH.js} +2 -2
  47. package/dist/{chunk-UIBPFSIT.js → chunk-DZC2OCK3.js} +11 -11
  48. package/dist/{chunk-REBTZP3W.js → chunk-E27E4ZFN.js} +6 -6
  49. package/dist/{chunk-BSI5EOAX.js → chunk-E3BJVEMZ.js} +7 -11
  50. package/dist/{chunk-7NK42OIB.js → chunk-E6PNTYRK.js} +2 -2
  51. package/dist/{chunk-3SNE4CLI.js → chunk-EPJHJF3J.js} +7 -7
  52. package/dist/{chunk-HBVKOYZD.js → chunk-FGXBIOVK.js} +3 -3
  53. package/dist/{chunk-YCOGUPHL.js → chunk-FQDH6AL3.js} +10 -10
  54. package/dist/{chunk-XIZCHGP7.js → chunk-FQFQGPWA.js} +9 -9
  55. package/dist/{chunk-IKHV5IJB.js → chunk-GE5RO4BS.js} +2 -2
  56. package/dist/{chunk-KWRW6BLG.js → chunk-GLREDNBA.js} +2 -2
  57. package/dist/{chunk-UVAOL2EO.js → chunk-H454ZVAS.js} +291 -29
  58. package/dist/{chunk-VMXV2CL5.js → chunk-HQ34V2XV.js} +5 -5
  59. package/dist/{chunk-YG35ZCNW.js → chunk-I4YT5KL6.js} +36 -32
  60. package/dist/{chunk-QAJFIXJE.js → chunk-IDEJ3J4J.js} +28 -28
  61. package/dist/{chunk-TF7CFAZ5.js → chunk-IEZYF5CN.js} +4 -4
  62. package/dist/{chunk-RRX4Z4TH.js → chunk-IHOFUR74.js} +2 -2
  63. package/dist/{chunk-3HN32MEK.js → chunk-INOSOL3J.js} +4 -4
  64. package/dist/{chunk-HTGYAMOK.js → chunk-ITAFWUSB.js} +3 -3
  65. package/dist/{chunk-MX3BYU7V.js → chunk-JLSGQMRA.js} +3 -3
  66. package/dist/{chunk-5GTYY2XV.js → chunk-JPVRJS74.js} +7 -7
  67. package/dist/{chunk-C3MVZ7EW.js → chunk-K3O2CZTD.js} +7 -7
  68. package/dist/{chunk-2JY7KE7C.js → chunk-K7P4SCB3.js} +9 -9
  69. package/dist/{chunk-UTVKOGFF.js → chunk-KCHCOXAL.js} +94 -40
  70. package/dist/{chunk-VGLSKDDI.js → chunk-KI2L4DWM.js} +3 -3
  71. package/dist/{chunk-AEYRSPVV.js → chunk-KUDYLU3M.js} +3 -3
  72. package/dist/{chunk-FAJS2N4O.js → chunk-KZKRK57S.js} +12 -12
  73. package/dist/{chunk-4VUFJ7UA.js → chunk-LGASNVZE.js} +6 -6
  74. package/dist/{chunk-ET4R3AU5.js → chunk-LM3HY3VG.js} +2 -2
  75. package/dist/{chunk-RJI6MHHK.js → chunk-LMJKHQ4W.js} +6 -6
  76. package/dist/{chunk-ZJJWON5O.js → chunk-MK55PZVB.js} +268 -3
  77. package/dist/{chunk-RTTELOOP.js → chunk-MS5574I7.js} +3 -3
  78. package/dist/{chunk-I55PVEIX.js → chunk-MSVQ2YCY.js} +2 -2
  79. package/dist/{chunk-WEC3JPTN.js → chunk-MZMK474U.js} +8 -8
  80. package/dist/{chunk-NTBHGUXY.js → chunk-NE7JHZCQ.js} +4 -4
  81. package/dist/{chunk-JIWDWOYA.js → chunk-NQJ7DDUT.js} +4 -4
  82. package/dist/{chunk-6S53NO3M.js → chunk-O7ZKDUDX.js} +5 -5
  83. package/dist/{chunk-PBV2C3BW.js → chunk-OMQ5V5NH.js} +24 -20
  84. package/dist/{chunk-W27BULCB.js → chunk-OR3OX32W.js} +9 -9
  85. package/dist/{chunk-MFSTE3YG.js → chunk-OYK45NY5.js} +26 -18
  86. package/dist/{chunk-ISKO4MQ5.js → chunk-PFZDLHHG.js} +10 -10
  87. package/dist/{chunk-ENJWB5LU.js → chunk-PJHYUVD3.js} +28 -24
  88. package/dist/{chunk-K6MQJ5IV.js → chunk-Q446PFCV.js} +3 -3
  89. package/dist/{chunk-IW6N2JJL.js → chunk-Q74GP3GK.js} +2 -2
  90. package/dist/{chunk-7REARI5N.js → chunk-QFHPGDR5.js} +2 -2
  91. package/dist/{chunk-QPG55HGH.js → chunk-RJUMXXKR.js} +5 -5
  92. package/dist/{chunk-SPA7DCB3.js → chunk-RN3PAL4E.js} +3 -3
  93. package/dist/{chunk-IQ4W4Q2R.js → chunk-RXSAE6F5.js} +5 -5
  94. package/dist/{chunk-W7SZKJR6.js → chunk-RYHZFP7Y.js} +4 -4
  95. package/dist/{chunk-WF2HDQPG.js → chunk-S6OXNZBM.js} +3 -3
  96. package/dist/{chunk-UNM2PX5D.js → chunk-SNZFXGSE.js} +4 -4
  97. package/dist/{chunk-LSHROB27.js → chunk-T4L4LKXO.js} +5 -5
  98. package/dist/{chunk-CH4WODSG.js → chunk-TJS3J5B3.js} +19 -7
  99. package/dist/{chunk-7TSBM4BV.js → chunk-TP42IN23.js} +5 -5
  100. package/dist/{chunk-XJZSN42P.js → chunk-TTVHS3D5.js} +102 -100
  101. package/dist/{chunk-6PA32CUB.js → chunk-TXWW4UZM.js} +4 -4
  102. package/dist/{chunk-LUI425JB.js → chunk-V7E3RZLQ.js} +6 -6
  103. package/dist/{chunk-NNMNHE3J.js → chunk-VQEW7XMN.js} +3 -3
  104. package/dist/{chunk-YYBQ55V2.js → chunk-VWIXRNY2.js} +4 -4
  105. package/dist/{chunk-YH5KJIO5.js → chunk-W242EWZZ.js} +8 -8
  106. package/dist/{chunk-LXGUK56B.js → chunk-WDKLODC3.js} +11 -11
  107. package/dist/{chunk-OQKP2X3D.js → chunk-WFA6IULY.js} +57 -3
  108. package/dist/{chunk-HWNF22ZZ.js → chunk-WPEHUSUQ.js} +5 -5
  109. package/dist/{chunk-NJKUTY4M.js → chunk-WTMP6VZ6.js} +5 -5
  110. package/dist/{chunk-CR5WIA6I.js → chunk-X6LVGU4W.js} +13 -4
  111. package/dist/{chunk-IWNHEK5K.js → chunk-X6LXZJPT.js} +8 -8
  112. package/dist/{chunk-X2NX2SK6.js → chunk-XGBUCXU7.js} +5 -5
  113. package/dist/{chunk-NEC7R2CB.js → chunk-XL2C26LV.js} +3 -3
  114. package/dist/{chunk-EXNKNJ65.js → chunk-XOGQY4EC.js} +2 -2
  115. package/dist/{chunk-UNTFANSM.js → chunk-XOOYMOIW.js} +15 -10
  116. package/dist/{chunk-DEVZWCD5.js → chunk-XUCHK3OJ.js} +21 -12
  117. package/dist/{chunk-RNSGPTOZ.js → chunk-XVJWAE2F.js} +8 -8
  118. package/dist/{chunk-PZVYUQJA.js → chunk-YDA46XHI.js} +4 -4
  119. package/dist/{chunk-PLSTP7P4.js → chunk-YGKYQ7LA.js} +72 -387
  120. package/dist/{chunk-6CLC26GU.js → chunk-YJMWEZOB.js} +2 -2
  121. package/dist/{chunk-QX53GOI7.js → chunk-YT5ICQ4R.js} +2 -2
  122. package/dist/{chunk-376ATV2Q.js → chunk-ZIJXK3U5.js} +5 -5
  123. package/dist/{chunk-5DYDPP7K.js → chunk-ZQ5SROS2.js} +115 -240
  124. package/dist/completion-registry.js +24 -21
  125. package/dist/countdown.js +26 -6
  126. package/dist/{d3-Bfhj-XBX.d.ts → d3--y67plmW.d.ts} +1 -1
  127. package/dist/dgmo-router-AE6FUBV3.js +89 -0
  128. package/dist/{dgmo-router-Lya7cs3R.d.ts → dgmo-router-CY5j16Pl.d.ts} +1 -1
  129. package/dist/dimensions-PRZSDFWR.js +22 -0
  130. package/dist/flowchart-parser-HR25V5AH.js +21 -0
  131. package/dist/{flowchart-renderer-HB277GNE.js → flowchart-renderer-FY63GDRH.js} +13 -13
  132. package/dist/highlight.js +6 -18
  133. package/dist/index.d.ts +7 -7
  134. package/dist/index.js +65 -59
  135. package/dist/{layout-AWPST2S3.js → layout-43A4YMAH.js} +7 -7
  136. package/dist/layout-4URV4OXF.js +15 -0
  137. package/dist/{layout-RD7GDM4I.js → layout-B5GQVXXY.js} +4 -4
  138. package/dist/layout-BWHNERBW.js +15 -0
  139. package/dist/{layout-5RUQ5FBZ.js → layout-DAYQ46PS.js} +3 -3
  140. package/dist/{layout-LVMWK4QY.js → layout-KQUSB45X.js} +4 -4
  141. package/dist/{layout-2DVT24YY.js → layout-O4PR46GN.js} +6 -6
  142. package/dist/layout-PKGNLY6P.js +15 -0
  143. package/dist/{layout-WIMQIHBU.js → layout-ROORJQ4X.js} +4 -4
  144. package/dist/{layout-BGXLVSXL.js → layout-U5OVRUOK.js} +8 -8
  145. package/dist/{layout-search-C44CJQOB.js → layout-search-UOKEMER5.js} +4 -4
  146. package/dist/{legend-constants-FP5MFDD4.js → legend-constants-PLN2YHGM.js} +5 -5
  147. package/dist/{palettes-WQZ2TPVZ.js → palettes-54YSI3IX.js} +4 -4
  148. package/dist/parser-23MYMNF6.js +14 -0
  149. package/dist/parser-2FNHLEBN.js +12 -0
  150. package/dist/{parser-XM6JC3UK.js → parser-2FZ4BDEW.js} +6 -6
  151. package/dist/parser-3JDQL7QF.js +15 -0
  152. package/dist/parser-5CAGM3ED.js +16 -0
  153. package/dist/parser-5RY6ID5M.js +18 -0
  154. package/dist/parser-6YBYIFS2.js +13 -0
  155. package/dist/parser-A665TNOV.js +20 -0
  156. package/dist/parser-AN4SUBQ6.js +11 -0
  157. package/dist/parser-BC2TAVB3.js +11 -0
  158. package/dist/parser-BCQBK2XB.js +12 -0
  159. package/dist/parser-BTTFGJGI.js +12 -0
  160. package/dist/parser-CAAFD3HB.js +19 -0
  161. package/dist/parser-COBTDQPC.js +11 -0
  162. package/dist/parser-DBOJKLDF.js +14 -0
  163. package/dist/{parser-TJ3SP2MJ.js → parser-DIQ2E5MR.js} +7 -7
  164. package/dist/parser-EDXD6ZGJ.js +13 -0
  165. package/dist/parser-GPZYL6ZE.js +11 -0
  166. package/dist/parser-MDYNA6JL.js +17 -0
  167. package/dist/parser-PCALQIW2.js +17 -0
  168. package/dist/parser-PDPZ2I6C.js +13 -0
  169. package/dist/parser-SQFNO6XG.js +15 -0
  170. package/dist/{parser-ZIEEBJMU.js → parser-SQMOEVG4.js} +7 -7
  171. package/dist/parser-TATBFGQ2.js +15 -0
  172. package/dist/{parser-EX3AGFT5.js → parser-VJEHPDOO.js} +6 -6
  173. package/dist/{parser-O7GTECFP.js → parser-VQX2LVUJ.js} +5 -5
  174. package/dist/{parser-CDMP3UVH.js → parser-W2LEO5QM.js} +7 -7
  175. package/dist/parser-W3QZBUOF.js +13 -0
  176. package/dist/parser-WQCSMLUI.js +15 -0
  177. package/dist/parser-X5RGCC3C.js +11 -0
  178. package/dist/parser-XGUJ7SMG.js +13 -0
  179. package/dist/parser-XS7DL63K.js +16 -0
  180. package/dist/parser-XTSWP4N3.js +11 -0
  181. package/dist/pert.d.ts +10 -0
  182. package/dist/renderer-2DIH3YW6.js +27 -0
  183. package/dist/{renderer-JWSO5O2L.js → renderer-2E2Z5N66.js} +7 -7
  184. package/dist/renderer-4HGNWJRC.js +25 -0
  185. package/dist/renderer-6U6YW4HX.js +26 -0
  186. package/dist/renderer-AKZECRNK.js +39 -0
  187. package/dist/{renderer-7VPABTMS.js → renderer-BUMIZJIY.js} +15 -15
  188. package/dist/renderer-BY5AAKV7.js +25 -0
  189. package/dist/renderer-DU6D3S6K.js +27 -0
  190. package/dist/{renderer-5YV6KP4U.js → renderer-EAQNSDTC.js} +13 -13
  191. package/dist/{renderer-FAD65M5Z.js → renderer-EP4GRCDX.js} +6 -6
  192. package/dist/{renderer-LVAUI6T6.js → renderer-GQUJVPVA.js} +14 -14
  193. package/dist/renderer-HZCYBOAB.js +16 -0
  194. package/dist/renderer-IMZKZ6TV.js +23 -0
  195. package/dist/renderer-J2N5YBFP.js +16 -0
  196. package/dist/renderer-KJNTNI22.js +26 -0
  197. package/dist/renderer-LKZZID6J.js +76 -0
  198. package/dist/renderer-MCWAHNQG.js +22 -0
  199. package/dist/renderer-MJCSBYAR.js +25 -0
  200. package/dist/renderer-NXOSBZPO.js +30 -0
  201. package/dist/renderer-ODDULMVE.js +20 -0
  202. package/dist/renderer-OTHBTGBN.js +16 -0
  203. package/dist/{renderer-ZEPPPA3W.js → renderer-R7Q72DM4.js} +7 -7
  204. package/dist/renderer-S42JPAZO.js +24 -0
  205. package/dist/{renderer-QZRM6H4S.js → renderer-SCIHPARI.js} +5 -5
  206. package/dist/{renderer-BQWAUDEF.js → renderer-SW5YUK6H.js} +9 -9
  207. package/dist/{renderer-KFWZPVYT.js → renderer-TBWE67FB.js} +13 -13
  208. package/dist/renderer-V7476J5G.js +39 -0
  209. package/dist/renderer-VG4C23TY.js +21 -0
  210. package/dist/{renderer-S5MGQHRQ.js → renderer-WG6CUDWI.js} +14 -14
  211. package/dist/{renderer-2MEPYGAP.js → renderer-XL54ZE4H.js} +13 -13
  212. package/dist/{renderer-QOWN3XDI.js → renderer-XNLRQWM6.js} +14 -14
  213. package/dist/renderer-YIJYYZZE.js +28 -0
  214. package/dist/{renderer-7BGC4KPZ.js → renderer-YX6S3U4L.js} +12 -12
  215. package/dist/renderer-radial-ZZAAPDSY.js +21 -0
  216. package/dist/{resolver-B3TXWNWF.js → resolver-H5E6V7LJ.js} +3 -3
  217. package/dist/state-parser-4DJ67MNV.js +19 -0
  218. package/dist/state-renderer-IABX3URA.js +40 -0
  219. package/dist/{tag-groups-NUA2F1I5.d.ts → tag-groups-DrHT2tEc.d.ts} +10 -0
  220. package/dist/{themes-Dem5xalq.d.ts → themes-GWhsabnx.d.ts} +2 -2
  221. package/docs/language-reference.md +49 -11
  222. package/gallery/fixtures/countdown.dgmo +1 -1
  223. package/package.json +1 -1
  224. package/dist/calculator-4CNL2GKU.js +0 -13
  225. package/dist/dgmo-router-J6OWNMEJ.js +0 -89
  226. package/dist/dimensions-EFEBIRS6.js +0 -22
  227. package/dist/flowchart-parser-LZF2GW2P.js +0 -21
  228. package/dist/layout-BNR6ZDB6.js +0 -15
  229. package/dist/layout-N6ZOOAYT.js +0 -15
  230. package/dist/layout-PBB2RQJ4.js +0 -15
  231. package/dist/parser-2CXA7K5C.js +0 -13
  232. package/dist/parser-4E2TVMOK.js +0 -13
  233. package/dist/parser-52AZJ3BA.js +0 -17
  234. package/dist/parser-52BOCAVQ.js +0 -15
  235. package/dist/parser-5IPCYVXY.js +0 -12
  236. package/dist/parser-6BF5TJQH.js +0 -16
  237. package/dist/parser-6VZISXFY.js +0 -11
  238. package/dist/parser-6Y5BMNNJ.js +0 -14
  239. package/dist/parser-7HUZBXKW.js +0 -11
  240. package/dist/parser-AEJ73QJS.js +0 -11
  241. package/dist/parser-AWNEAGMJ.js +0 -12
  242. package/dist/parser-C2QRTZPJ.js +0 -13
  243. package/dist/parser-CBSYFN6U.js +0 -11
  244. package/dist/parser-CNKHKQKZ.js +0 -17
  245. package/dist/parser-GK3JWVHY.js +0 -18
  246. package/dist/parser-GZKR6BFA.js +0 -14
  247. package/dist/parser-K26KDCZN.js +0 -11
  248. package/dist/parser-LTJ5AKY4.js +0 -16
  249. package/dist/parser-NIGB4EYX.js +0 -12
  250. package/dist/parser-OHWDJGCP.js +0 -15
  251. package/dist/parser-QCVEWLCO.js +0 -15
  252. package/dist/parser-SUAOF72Y.js +0 -13
  253. package/dist/parser-W2HXBHNC.js +0 -11
  254. package/dist/parser-WF4R7225.js +0 -15
  255. package/dist/parser-XRZQ7SC7.js +0 -13
  256. package/dist/parser-YRJAGBV7.js +0 -19
  257. package/dist/parser-Z3LN7P6G.js +0 -20
  258. package/dist/renderer-35HBBPIQ.js +0 -26
  259. package/dist/renderer-3DSU72CP.js +0 -30
  260. package/dist/renderer-4CUV63GT.js +0 -39
  261. package/dist/renderer-4ORE7HJ3.js +0 -28
  262. package/dist/renderer-52KYFTNZ.js +0 -16
  263. package/dist/renderer-5FQFMCBZ.js +0 -39
  264. package/dist/renderer-ANWAX5QO.js +0 -27
  265. package/dist/renderer-DGZDRRJW.js +0 -76
  266. package/dist/renderer-E3UQ24DE.js +0 -25
  267. package/dist/renderer-FCIOD2QK.js +0 -22
  268. package/dist/renderer-H5QR3LC3.js +0 -16
  269. package/dist/renderer-JFZVWH2G.js +0 -16
  270. package/dist/renderer-JHWGW4Q7.js +0 -25
  271. package/dist/renderer-KQIJV5WD.js +0 -19
  272. package/dist/renderer-MZ4N2SVV.js +0 -25
  273. package/dist/renderer-QMSFXMAL.js +0 -21
  274. package/dist/renderer-V3PN5ZQS.js +0 -24
  275. package/dist/renderer-VOXE7V6L.js +0 -27
  276. package/dist/renderer-WBG576LB.js +0 -26
  277. package/dist/renderer-YXYEP46H.js +0 -23
  278. package/dist/renderer-radial-KZ3W4WXI.js +0 -21
  279. package/dist/state-parser-HJNCGIFT.js +0 -19
  280. package/dist/state-renderer-776LP3NE.js +0 -40
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-FJ57274M.js";
7
7
  import {
8
8
  ScaleContext
9
- } from "./chunk-YYVTBZZC.js";
9
+ } from "./chunk-24YPR5EH.js";
10
10
  import {
11
11
  serializeSvg
12
12
  } from "./chunk-RU2HHHYA.js";
@@ -16,36 +16,36 @@ import {
16
16
  } from "./chunk-A4GOY3PE.js";
17
17
  import {
18
18
  renderIntegratedLegend
19
- } from "./chunk-6S53NO3M.js";
19
+ } from "./chunk-O7ZKDUDX.js";
20
20
  import {
21
21
  getMaxLegendReservedHeight
22
- } from "./chunk-MTPKBSTR.js";
22
+ } from "./chunk-4SXHMFFP.js";
23
23
  import {
24
24
  FONT_FAMILY
25
25
  } from "./chunk-UTCPNJND.js";
26
26
  import {
27
27
  LEGEND_HEIGHT,
28
28
  measureLegendText
29
- } from "./chunk-QX53GOI7.js";
29
+ } from "./chunk-YT5ICQ4R.js";
30
30
  import {
31
31
  measureText
32
32
  } from "./chunk-MTGGOCND.js";
33
33
  import {
34
34
  parseKanban
35
- } from "./chunk-MKNWMFZU.js";
35
+ } from "./chunk-7VMUKH2Z.js";
36
36
  import {
37
37
  tagAttrKey
38
- } from "./chunk-DPGI742S.js";
38
+ } from "./chunk-4FKEI4MF.js";
39
39
  import {
40
40
  fillModeFromOptions,
41
41
  legendSuppressed
42
- } from "./chunk-ZJJWON5O.js";
42
+ } from "./chunk-MK55PZVB.js";
43
43
  import {
44
44
  contrastText,
45
45
  mix,
46
46
  shapeFill,
47
47
  themeBaseBg
48
- } from "./chunk-KWRW6BLG.js";
48
+ } from "./chunk-GLREDNBA.js";
49
49
 
50
50
  // src/kanban/renderer.ts
51
51
  import * as d3Selection from "d3-selection";
@@ -168,6 +168,14 @@ var COLUMN_RADIUS = 8;
168
168
  var COLUMN_HEADER_RADIUS = 8;
169
169
  var COLLAPSED_COLUMN_WIDTH = 40;
170
170
  var COLLAPSED_LANE_HEIGHT = 26;
171
+ var COLLAPSED_CHIP_HEIGHT = 16;
172
+ var COLLAPSED_CHIP_GAP = 4;
173
+ var COLLAPSED_CHIP_INSET = 6;
174
+ var COLLAPSED_CHIP_RADIUS = 5;
175
+ var COLLAPSED_NAME_GAP = 10;
176
+ var COLLAPSED_CHIP_MAX_SLOTS = 4;
177
+ var COLLAPSED_CHIP_MIN_WIDTH = 22;
178
+ var COLLAPSED_CHIP_LABEL_PADDING = 10;
171
179
  function resolveCardTagMeta(card, tagGroups, hiddenMetaGroups) {
172
180
  const meta = [];
173
181
  for (const group of tagGroups) {
@@ -200,7 +208,38 @@ function resolveCardTagColor(card, tagGroups, activeTagGroup) {
200
208
  );
201
209
  return entry?.color;
202
210
  }
203
- function computeLayout(parsed, _palette, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sCardTitleFontSize = CARD_TITLE_FONT_SIZE, sColumnHeaderFontSize = COLUMN_HEADER_FONT_SIZE, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardPaddingX = CARD_PADDING_X, sCardPaddingY = CARD_PADDING_Y, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardMetaFontSize = CARD_META_FONT_SIZE, sCardGap = CARD_GAP, sColumnMinWidth = COLUMN_MIN_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH) {
211
+ function collapsedChips(cards, group) {
212
+ if (!group) return [];
213
+ const legendOrder = new Map(
214
+ group.entries.map((entry, index) => [entry.value.toLowerCase(), index])
215
+ );
216
+ const tagKey = tagAttrKey(group.name);
217
+ const byValue = /* @__PURE__ */ new Map();
218
+ for (const card of cards) {
219
+ const raw = card.tags[tagKey] ?? group.defaultValue;
220
+ if (!raw) continue;
221
+ const key = raw.toLowerCase();
222
+ const seen = byValue.get(key);
223
+ if (seen) {
224
+ seen.count++;
225
+ continue;
226
+ }
227
+ const entry = group.entries.find((e) => e.value.toLowerCase() === key);
228
+ byValue.set(key, {
229
+ value: entry?.value ?? raw,
230
+ count: 1,
231
+ ...entry?.color !== void 0 && { color: entry.color }
232
+ });
233
+ }
234
+ const rank = (key) => legendOrder.get(key) ?? Number.MAX_SAFE_INTEGER;
235
+ return [...byValue.entries()].sort(
236
+ ([aKey, a], [bKey, b]) => b.count - a.count || rank(aKey) - rank(bKey) || aKey.localeCompare(bKey)
237
+ ).map(([, entry]) => entry);
238
+ }
239
+ function collapsedLaneLabel(laneName, total) {
240
+ return `${laneName} (${total})`;
241
+ }
242
+ function computeLayout(parsed, _palette, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sCardTitleFontSize = CARD_TITLE_FONT_SIZE, sColumnHeaderFontSize = COLUMN_HEADER_FONT_SIZE, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardPaddingX = CARD_PADDING_X, sCardPaddingY = CARD_PADDING_Y, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardMetaFontSize = CARD_META_FONT_SIZE, sCardGap = CARD_GAP, sColumnMinWidth = COLUMN_MIN_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH, activeTagGroup = null, sCollapsedChipHeight = COLLAPSED_CHIP_HEIGHT, sCollapsedChipGap = COLLAPSED_CHIP_GAP, sCollapsedNameGap = COLLAPSED_NAME_GAP) {
204
243
  const showTitle = !!parsed.title && parsed.options["no-title"] !== "on";
205
244
  const headerHeight = showTitle ? sTitleHeight + 8 : 0;
206
245
  const startY = sDiagramPadding + headerHeight;
@@ -270,6 +309,31 @@ function computeLayout(parsed, _palette, collapsedColumns, hiddenMetaGroups, sDi
270
309
  cardLayouts
271
310
  });
272
311
  }
312
+ const layoutActiveGroup = activeTagGroup ? parsed.tagGroups.find(
313
+ (g) => g.name.toLowerCase() === activeTagGroup.toLowerCase()
314
+ ) : void 0;
315
+ if (layoutActiveGroup) {
316
+ let nameExtent = 0;
317
+ let mostChips = 0;
318
+ for (const col of visibleColumns) {
319
+ if (!(collapsedColumns?.has(col.id) ?? false)) continue;
320
+ nameExtent = Math.max(
321
+ nameExtent,
322
+ measureText(col.name, sCardTitleFontSize, { bold: true })
323
+ );
324
+ mostChips = Math.max(
325
+ mostChips,
326
+ collapsedChips(col.cards, layoutActiveGroup).length
327
+ );
328
+ }
329
+ const slots = Math.min(mostChips, COLLAPSED_CHIP_MAX_SLOTS);
330
+ if (slots > 0) {
331
+ maxColumnHeight = Math.max(
332
+ maxColumnHeight,
333
+ sColumnHeaderHeight + sColumnPadding + nameExtent + sCollapsedNameGap + slots * sCollapsedChipHeight + (slots - 1) * sCollapsedChipGap + sColumnPadding
334
+ );
335
+ }
336
+ }
273
337
  let currentX = sDiagramPadding;
274
338
  for (const cl of columnLayouts) {
275
339
  cl.x = currentX;
@@ -327,6 +391,11 @@ function renderKanban(container, parsed, palette, isDark, options) {
327
391
  const sColumnHeaderRadius = ctx.structural(COLUMN_HEADER_RADIUS);
328
392
  const sCollapsedColumnWidth = ctx.structural(COLLAPSED_COLUMN_WIDTH);
329
393
  const sCollapsedLaneHeight = ctx.structural(COLLAPSED_LANE_HEIGHT);
394
+ const sCollapsedChipHeight = ctx.structural(COLLAPSED_CHIP_HEIGHT);
395
+ const sCollapsedChipGap = ctx.aesthetic(COLLAPSED_CHIP_GAP);
396
+ const sCollapsedChipInset = ctx.aesthetic(COLLAPSED_CHIP_INSET);
397
+ const sCollapsedChipRadius = ctx.structural(COLLAPSED_CHIP_RADIUS);
398
+ const sCollapsedNameGap = ctx.aesthetic(COLLAPSED_NAME_GAP);
330
399
  const sTitleFontSize = ctx.text(TITLE_FONT_SIZE);
331
400
  const sLaneHeaderWidth = ctx.structural(LANE_HEADER_WIDTH);
332
401
  const sLaneGap = ctx.aesthetic(LANE_GAP);
@@ -350,7 +419,11 @@ function renderKanban(container, parsed, palette, isDark, options) {
350
419
  sCardGap,
351
420
  sColumnMinWidth,
352
421
  sColumnGap,
353
- sCollapsedColumnWidth
422
+ sCollapsedColumnWidth,
423
+ activeTagGroup,
424
+ sCollapsedChipHeight,
425
+ sCollapsedChipGap,
426
+ sCollapsedNameGap
354
427
  );
355
428
  const width = exportDims?.width ?? layout.totalWidth;
356
429
  const height = exportDims?.height ?? layout.totalHeight;
@@ -441,12 +514,31 @@ function renderKanban(container, parsed, palette, isDark, options) {
441
514
  sCardPaddingX,
442
515
  sCardStrokeWidth,
443
516
  sCardTitleFontSize,
444
- sCardMetaFontSize
517
+ sCardMetaFontSize,
518
+ {
519
+ height: sCollapsedChipHeight,
520
+ gap: sCollapsedChipGap,
521
+ inset: sCollapsedChipInset,
522
+ radius: sCollapsedChipRadius,
523
+ nameGap: sCollapsedNameGap,
524
+ fontSize: sCardMetaFontSize
525
+ }
445
526
  );
446
527
  return;
447
528
  }
448
529
  const defaultColBg = isDark ? mix(palette.surface, palette.bg, 50) : mix(palette.surface, palette.bg, 30);
449
530
  const defaultColHeaderBg = isDark ? mix(palette.surface, palette.bg, 70) : mix(palette.surface, palette.bg, 50);
531
+ const activeGroup = activeTagGroup ? parsed.tagGroups.find(
532
+ (g) => g.name.toLowerCase() === activeTagGroup.toLowerCase()
533
+ ) : void 0;
534
+ const collapsedNameExtent = layout.columns.reduce(
535
+ (max, cl) => collapsedColumns?.has(cl.column.id) ?? false ? Math.max(
536
+ max,
537
+ measureText(cl.column.name, sCardTitleFontSize, { bold: true })
538
+ ) : max,
539
+ 0
540
+ );
541
+ const collapsedChipTop = sColumnHeaderHeight + sColumnPadding + collapsedNameExtent + sCollapsedNameGap;
450
542
  for (const colLayout of layout.columns) {
451
543
  const col = colLayout.column;
452
544
  const isColCollapsed = collapsedColumns?.has(col.id) ?? false;
@@ -466,6 +558,53 @@ function renderKanban(container, parsed, palette, isDark, options) {
466
558
  g.append("rect").attr("x", colLayout.x).attr("y", colLayout.y).attr("width", sCollapsedColumnWidth).attr("height", sColumnHeaderHeight).attr("rx", sColumnHeaderRadius).attr("fill", thisColHeaderBg);
467
559
  g.append("text").attr("x", colLayout.x + sCollapsedColumnWidth / 2).attr("y", colLayout.y + sColumnHeaderHeight / 2).attr("dominant-baseline", "central").attr("font-size", sWipFontSize).attr("font-weight", "bold").attr("fill", col.color ? onHeaderText : palette.textMuted).attr("text-anchor", "middle").text(String(col.cards.length));
468
560
  g.append("text").attr("x", colLayout.x + sCollapsedColumnWidth / 2).attr("y", colLayout.y + sColumnHeaderHeight + sColumnPadding).attr("font-size", sCardTitleFontSize).attr("font-weight", "bold").attr("fill", palette.text).attr("text-anchor", "middle").attr("writing-mode", "tb").text(col.name);
561
+ const chips = collapsedChips(col.cards, activeGroup);
562
+ if (chips.length > 0) {
563
+ const chipX = colLayout.x + sCollapsedChipInset;
564
+ const chipW = sCollapsedColumnWidth - sCollapsedChipInset * 2;
565
+ const step = sCollapsedChipHeight + sCollapsedChipGap;
566
+ const room = colLayout.height - collapsedChipTop - sColumnPadding;
567
+ const slots = Math.max(
568
+ 0,
569
+ Math.floor((room + sCollapsedChipGap) / step)
570
+ );
571
+ const shown = chips.length > slots ? Math.max(0, slots - 1) : chips.length;
572
+ const hidden = chips.length - shown;
573
+ const cg = g.append("g").attr("class", "kanban-collapsed-chips");
574
+ const drawChip = (index, fill, stroke, label, title) => {
575
+ const y = colLayout.y + collapsedChipTop + index * step;
576
+ const chip = cg.append("g").attr("class", "kanban-collapsed-chip").attr("data-tag-value", title);
577
+ chip.append("rect").attr("x", chipX).attr("y", y).attr("width", chipW).attr("height", sCollapsedChipHeight).attr("rx", sCollapsedChipRadius).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1);
578
+ chip.append("text").attr("x", chipX + chipW / 2).attr("y", y + sCollapsedChipHeight / 2).attr("dominant-baseline", "central").attr("text-anchor", "middle").attr("font-size", sCardMetaFontSize).attr("font-weight", "bold").attr(
579
+ "fill",
580
+ contrastText(
581
+ fill,
582
+ palette.textOnFillLight,
583
+ palette.textOnFillDark
584
+ )
585
+ ).text(label);
586
+ };
587
+ for (let i = 0; i < shown; i++) {
588
+ const chip = chips[i];
589
+ const intent = chip.color ?? palette.textMuted;
590
+ drawChip(
591
+ i,
592
+ shapeFill(palette, intent, isDark, { mode: fillMode }),
593
+ intent,
594
+ String(chip.count),
595
+ chip.value
596
+ );
597
+ }
598
+ if (hidden > 0 && shown < slots) {
599
+ drawChip(
600
+ shown,
601
+ fillMode === "outline" ? baseBg : defaultColHeaderBg,
602
+ palette.textMuted,
603
+ `+${hidden}`,
604
+ `${hidden} more`
605
+ );
606
+ }
607
+ }
469
608
  continue;
470
609
  }
471
610
  g.append("rect").attr("x", colLayout.x).attr("y", colLayout.y).attr("width", colLayout.width).attr("height", colLayout.height).attr("rx", sColumnRadius).attr("fill", fillMode === "outline" ? baseBg : thisColBg).call((sel) => {
@@ -558,6 +697,12 @@ function renderKanbanForExport(content, theme, palette) {
558
697
  }
559
698
  var LANE_HEADER_WIDTH = 140;
560
699
  var LANE_GAP = 14;
700
+ var LANE_HEADER_TRIM = 8;
701
+ var LANE_LABEL_X = 10;
702
+ var LANE_DOT_ADVANCE = 14;
703
+ var LANE_LABEL_BASELINE = 20;
704
+ var COLLAPSED_LANE_FONT_SIZE = 10;
705
+ var LANE_FONT_SIZE = 12;
561
706
  function drawSwimlaneIcon(parent, x, y, isActive, palette) {
562
707
  const iconG = parent.append("g").attr("class", "kanban-swimlane-icon").attr("transform", `translate(${x}, ${y})`);
563
708
  iconG.append("rect").attr("x", -5).attr("y", -5).attr("width", 22).attr("height", 18).attr("fill", "transparent");
@@ -611,11 +756,66 @@ function computeCardHeight(card, tagGroups, hiddenMetaGroups, sCardSeparatorGap
611
756
  const metaHeight = metaCount > 0 ? sCardSeparatorGap + 1 + sCardPaddingY + metaCount * sCardMetaLineHeight : 0;
612
757
  return sCardHeaderHeight + sCardPaddingY + metaHeight;
613
758
  }
614
- function computeSwimlaneLayout(parsed, buckets, baseLayout, collapsedLanes, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sLaneHeaderWidth = LANE_HEADER_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardPaddingY = CARD_PADDING_Y, sCardGap = CARD_GAP, sCollapsedLaneHeight = COLLAPSED_LANE_HEIGHT, sLaneGap = LANE_GAP, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT) {
759
+ function computeSwimlaneLayout(parsed, buckets, baseLayout, collapsedLanes, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sLaneHeaderWidth = LANE_HEADER_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardPaddingY = CARD_PADDING_Y, sCardGap = CARD_GAP, sCollapsedLaneHeight = COLLAPSED_LANE_HEIGHT, sLaneGap = LANE_GAP, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT, activeGroup, chipStyle) {
615
760
  const headerHeight = parsed.title && parsed.options["no-title"] !== "on" ? sTitleHeight + 8 : 0;
616
761
  const startY = sDiagramPadding + headerHeight;
762
+ const laneChipsByLane = /* @__PURE__ */ new Map();
763
+ let chipStartX = 0;
764
+ let chipWidth = 0;
765
+ let chipSlots = 0;
766
+ if (activeGroup && chipStyle) {
767
+ let widestLabel = 0;
768
+ for (const bucket of buckets) {
769
+ if (!(collapsedLanes?.has(bucket.laneName) ?? false)) continue;
770
+ const cards = Object.values(bucket.cellsByColumn).flat();
771
+ const chips = collapsedChips(cards, activeGroup);
772
+ if (chips.length === 0) continue;
773
+ laneChipsByLane.set(bucket.laneName, chips);
774
+ chipSlots = Math.max(chipSlots, chips.length);
775
+ widestLabel = Math.max(
776
+ widestLabel,
777
+ LANE_LABEL_X + (bucket.laneColor ? LANE_DOT_ADVANCE : 0) + measureText(
778
+ collapsedLaneLabel(bucket.laneName, cards.length),
779
+ COLLAPSED_LANE_FONT_SIZE
780
+ )
781
+ );
782
+ }
783
+ chipSlots = Math.min(chipSlots, COLLAPSED_CHIP_MAX_SLOTS);
784
+ if (chipSlots > 0) {
785
+ let widestChipLabel = 0;
786
+ for (const chips of laneChipsByLane.values()) {
787
+ const shown = chips.length > chipSlots ? chipSlots - 1 : chips.length;
788
+ for (let i = 0; i < shown; i++) {
789
+ widestChipLabel = Math.max(
790
+ widestChipLabel,
791
+ measureText(String(chips[i].count), chipStyle.fontSize, {
792
+ bold: true
793
+ })
794
+ );
795
+ }
796
+ if (chips.length > shown) {
797
+ widestChipLabel = Math.max(
798
+ widestChipLabel,
799
+ measureText(`+${chips.length - shown}`, chipStyle.fontSize, {
800
+ bold: true
801
+ })
802
+ );
803
+ }
804
+ }
805
+ chipWidth = Math.max(
806
+ COLLAPSED_CHIP_MIN_WIDTH,
807
+ widestChipLabel + COLLAPSED_CHIP_LABEL_PADDING
808
+ );
809
+ chipStartX = widestLabel + chipStyle.nameGap;
810
+ }
811
+ }
812
+ const ribbonWidth = chipSlots > 0 ? chipSlots * chipWidth + (chipSlots - 1) * (chipStyle?.gap ?? 0) : 0;
813
+ const laneHeaderWidth = ribbonWidth > 0 ? Math.max(
814
+ sLaneHeaderWidth,
815
+ chipStartX + ribbonWidth + (chipStyle?.inset ?? 0) + LANE_HEADER_TRIM
816
+ ) : sLaneHeaderWidth;
617
817
  const columnXs = [];
618
- let currentX = sDiagramPadding + sLaneHeaderWidth;
818
+ let currentX = sDiagramPadding + laneHeaderWidth;
619
819
  for (const col of baseLayout.columns) {
620
820
  const isColCollapsed = collapsedColumns?.has(col.column.id) ?? false;
621
821
  const w = isColCollapsed ? sCollapsedColumnWidth : col.width;
@@ -634,7 +834,13 @@ function computeSwimlaneLayout(parsed, buckets, baseLayout, collapsedLanes, coll
634
834
  cards: bucket.cellsByColumn[colInfo.column.id] ?? [],
635
835
  cardLayouts: []
636
836
  }));
637
- lanes.push({ bucket, y: laneY, height: sCollapsedLaneHeight, cells: cells2 });
837
+ lanes.push({
838
+ bucket,
839
+ y: laneY,
840
+ height: sCollapsedLaneHeight,
841
+ cells: cells2,
842
+ chips: laneChipsByLane.get(bucket.laneName) ?? []
843
+ });
638
844
  laneY += sCollapsedLaneHeight + sLaneGap;
639
845
  continue;
640
846
  }
@@ -693,15 +899,35 @@ function computeSwimlaneLayout(parsed, buckets, baseLayout, collapsedLanes, coll
693
899
  }
694
900
  return { column: tmp.column, cards: tmp.cards, cardLayouts };
695
901
  });
696
- lanes.push({ bucket, y: laneY, height: laneHeight, cells });
902
+ lanes.push({ bucket, y: laneY, height: laneHeight, cells, chips: [] });
697
903
  laneY += laneHeight + sLaneGap;
698
904
  }
699
905
  const totalHeight = laneY - sLaneGap + sColumnPadding + sDiagramPadding;
700
- return { columnXs, lanes, totalWidth, totalHeight, startY };
906
+ return {
907
+ columnXs,
908
+ lanes,
909
+ totalWidth,
910
+ totalHeight,
911
+ startY,
912
+ laneHeaderWidth,
913
+ laneChips: { startX: chipStartX, chipWidth, slots: chipSlots }
914
+ };
701
915
  }
702
- function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, isDark, activeTagGroup, collapsedLanes, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sLaneHeaderWidth = LANE_HEADER_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardPaddingY = CARD_PADDING_Y, sCardGap = CARD_GAP, sCollapsedLaneHeight = COLLAPSED_LANE_HEIGHT, sLaneGap = LANE_GAP, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT, sColumnHeaderFontSize = COLUMN_HEADER_FONT_SIZE, sColumnRadius = COLUMN_RADIUS, sColumnHeaderRadius = COLUMN_HEADER_RADIUS, sWipFontSize = WIP_FONT_SIZE, sCardRadius = CARD_RADIUS, sCardPaddingX = CARD_PADDING_X, sCardStrokeWidth = CARD_STROKE_WIDTH, sCardTitleFontSize = CARD_TITLE_FONT_SIZE, sCardMetaFontSize = CARD_META_FONT_SIZE) {
916
+ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, isDark, activeTagGroup, collapsedLanes, collapsedColumns, hiddenMetaGroups, sDiagramPadding = DIAGRAM_PADDING, sTitleHeight = TITLE_HEIGHT, sLaneHeaderWidth = LANE_HEADER_WIDTH, sColumnGap = COLUMN_GAP, sCollapsedColumnWidth = COLLAPSED_COLUMN_WIDTH, sColumnHeaderHeight = COLUMN_HEADER_HEIGHT, sColumnPadding = COLUMN_PADDING, sCardHeaderHeight = CARD_HEADER_HEIGHT, sCardPaddingY = CARD_PADDING_Y, sCardGap = CARD_GAP, sCollapsedLaneHeight = COLLAPSED_LANE_HEIGHT, sLaneGap = LANE_GAP, sCardSeparatorGap = CARD_SEPARATOR_GAP, sCardMetaLineHeight = CARD_META_LINE_HEIGHT, sColumnHeaderFontSize = COLUMN_HEADER_FONT_SIZE, sColumnRadius = COLUMN_RADIUS, sColumnHeaderRadius = COLUMN_HEADER_RADIUS, sWipFontSize = WIP_FONT_SIZE, sCardRadius = CARD_RADIUS, sCardPaddingX = CARD_PADDING_X, sCardStrokeWidth = CARD_STROKE_WIDTH, sCardTitleFontSize = CARD_TITLE_FONT_SIZE, sCardMetaFontSize = CARD_META_FONT_SIZE, chipStyle = {
917
+ height: COLLAPSED_CHIP_HEIGHT,
918
+ gap: COLLAPSED_CHIP_GAP,
919
+ inset: COLLAPSED_CHIP_INSET,
920
+ radius: COLLAPSED_CHIP_RADIUS,
921
+ nameGap: COLLAPSED_NAME_GAP,
922
+ fontSize: CARD_META_FONT_SIZE
923
+ }) {
703
924
  const visibleColumns = parsed.columns.filter((c) => !isArchiveColumn(c.name));
704
925
  const buckets = bucketCardsBySwimlane(visibleColumns, swimlaneGroup);
926
+ const fillMode = fillModeFromOptions(parsed.options);
927
+ const baseBg = themeBaseBg(palette, isDark);
928
+ const activeGroup = activeTagGroup && activeTagGroup.toLowerCase() !== swimlaneGroup.name.toLowerCase() ? parsed.tagGroups.find(
929
+ (g) => g.name.toLowerCase() === activeTagGroup.toLowerCase()
930
+ ) : void 0;
705
931
  const grid = computeSwimlaneLayout(
706
932
  parsed,
707
933
  buckets,
@@ -722,7 +948,9 @@ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, is
722
948
  sCollapsedLaneHeight,
723
949
  sLaneGap,
724
950
  sCardSeparatorGap,
725
- sCardMetaLineHeight
951
+ sCardMetaLineHeight,
952
+ activeGroup,
953
+ chipStyle
726
954
  );
727
955
  const currentW = parseFloat(svg.attr("width") || "0");
728
956
  const currentH = parseFloat(svg.attr("height") || "0");
@@ -746,9 +974,7 @@ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, is
746
974
  const col = colInfo.column;
747
975
  const isColCollapsed = collapsedColumns?.has(col.id) ?? false;
748
976
  const headerG = svg.append("g").attr("class", "kanban-column kanban-column-header").attr("data-column-id", col.id).attr("data-line-number", col.lineNumber);
749
- const colHeaderBg = col.color ? shapeFill(palette, col.color, isDark, {
750
- mode: fillModeFromOptions(parsed.options)
751
- }) : defaultColHeaderBg;
977
+ const colHeaderBg = col.color ? shapeFill(palette, col.color, isDark, { mode: fillMode }) : defaultColHeaderBg;
752
978
  headerG.append("rect").attr("x", colInfo.x).attr("y", grid.startY).attr("width", colInfo.width).attr("height", sColumnHeaderHeight).attr("rx", sColumnHeaderRadius).attr("fill", colHeaderBg);
753
979
  if (isColCollapsed) {
754
980
  headerG.append("text").attr("x", colInfo.x + colInfo.width / 2).attr("y", grid.startY + sColumnHeaderHeight / 2).attr("dominant-baseline", "central").attr("font-size", sWipFontSize).attr("font-weight", "bold").attr("fill", palette.textMuted).attr("text-anchor", "middle").text(String(col.cards.length));
@@ -766,17 +992,53 @@ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, is
766
992
  "transform",
767
993
  `translate(${sDiagramPadding}, ${lane.y - sColumnPadding})`
768
994
  );
769
- headerG.append("rect").attr("x", 0).attr("y", 0).attr("width", sLaneHeaderWidth - 8).attr("height", lane.height + sColumnPadding * 2).attr("rx", sColumnRadius).attr("fill", defaultColBg);
770
- let labelX = 10;
995
+ headerG.append("rect").attr("x", 0).attr("y", 0).attr("width", grid.laneHeaderWidth - LANE_HEADER_TRIM).attr("height", lane.height + sColumnPadding * 2).attr("rx", sColumnRadius).attr("fill", defaultColBg);
996
+ let labelX = LANE_LABEL_X;
771
997
  const totalCards = lane.cells.reduce((s, c) => s + c.cards.length, 0);
772
998
  if (lane.bucket.laneColor) {
773
999
  headerG.append("circle").attr("cx", labelX + 4).attr("cy", 16).attr("r", 4).attr("fill", lane.bucket.laneColor);
774
- labelX += 14;
1000
+ labelX += LANE_DOT_ADVANCE;
775
1001
  }
776
1002
  if (isLaneCollapsed) {
777
- headerG.append("text").attr("x", labelX).attr("y", 20).attr("font-size", 10).attr("fill", palette.textMuted).text(`${lane.bucket.laneName} (${totalCards})`);
1003
+ headerG.append("text").attr("x", labelX).attr("y", LANE_LABEL_BASELINE).attr("font-size", COLLAPSED_LANE_FONT_SIZE).attr("fill", palette.textMuted).text(collapsedLaneLabel(lane.bucket.laneName, totalCards));
778
1004
  } else {
779
- headerG.append("text").attr("x", labelX).attr("y", 20).attr("font-size", 12).attr("font-weight", "bold").attr("fill", lane.bucket.isFallback ? palette.textMuted : palette.text).text(lane.bucket.laneName);
1005
+ headerG.append("text").attr("x", labelX).attr("y", LANE_LABEL_BASELINE).attr("font-size", LANE_FONT_SIZE).attr("font-weight", "bold").attr("fill", lane.bucket.isFallback ? palette.textMuted : palette.text).text(lane.bucket.laneName);
1006
+ }
1007
+ if (isLaneCollapsed && lane.chips.length > 0 && grid.laneChips.slots > 0) {
1008
+ const { startX, chipWidth, slots } = grid.laneChips;
1009
+ const shown = lane.chips.length > slots ? Math.max(0, slots - 1) : lane.chips.length;
1010
+ const hidden = lane.chips.length - shown;
1011
+ const step = chipWidth + chipStyle.gap;
1012
+ const chipY = LANE_LABEL_BASELINE - chipStyle.height / 2 - 4;
1013
+ const cg = headerG.append("g").attr("class", "kanban-collapsed-chips");
1014
+ const drawChip = (index, fill, stroke, label, title) => {
1015
+ const chip = cg.append("g").attr("class", "kanban-collapsed-chip").attr("data-tag-value", title);
1016
+ chip.append("rect").attr("x", startX + index * step).attr("y", chipY).attr("width", chipWidth).attr("height", chipStyle.height).attr("rx", chipStyle.radius).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1);
1017
+ chip.append("text").attr("x", startX + index * step + chipWidth / 2).attr("y", chipY + chipStyle.height / 2).attr("dominant-baseline", "central").attr("text-anchor", "middle").attr("font-size", chipStyle.fontSize).attr("font-weight", "bold").attr(
1018
+ "fill",
1019
+ contrastText(fill, palette.textOnFillLight, palette.textOnFillDark)
1020
+ ).text(label);
1021
+ };
1022
+ for (let i = 0; i < shown; i++) {
1023
+ const chip = lane.chips[i];
1024
+ const intent = chip.color ?? palette.textMuted;
1025
+ drawChip(
1026
+ i,
1027
+ shapeFill(palette, intent, isDark, { mode: fillMode }),
1028
+ intent,
1029
+ String(chip.count),
1030
+ chip.value
1031
+ );
1032
+ }
1033
+ if (hidden > 0 && shown < slots) {
1034
+ drawChip(
1035
+ shown,
1036
+ fillMode === "outline" ? baseBg : defaultColHeaderBg,
1037
+ palette.textMuted,
1038
+ `+${hidden}`,
1039
+ `${hidden} more`
1040
+ );
1041
+ }
780
1042
  }
781
1043
  if (isLaneCollapsed) {
782
1044
  for (const cell of lane.cells) {
@@ -796,7 +1058,7 @@ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, is
796
1058
  }
797
1059
  }
798
1060
  }
799
- laneG.append("line").attr("x1", sDiagramPadding + sLaneHeaderWidth).attr("x2", grid.totalWidth - sDiagramPadding).attr("y1", lane.y + lane.height + sColumnPadding).attr("y2", lane.y + lane.height + sColumnPadding).attr("stroke", palette.border ?? palette.textMuted).attr("stroke-opacity", 0.4).attr("stroke-width", 1);
1061
+ laneG.append("line").attr("x1", sDiagramPadding + grid.laneHeaderWidth).attr("x2", grid.totalWidth - sDiagramPadding).attr("y1", lane.y + lane.height + sColumnPadding).attr("y2", lane.y + lane.height + sColumnPadding).attr("stroke", palette.border ?? palette.textMuted).attr("stroke-opacity", 0.4).attr("stroke-width", 1);
800
1062
  if (!isLaneCollapsed) {
801
1063
  for (const cell of lane.cells) {
802
1064
  const isColCollapsed = collapsedColumns?.has(cell.column.id) ?? false;
@@ -820,7 +1082,7 @@ function renderSwimlaneBoard(svg, parsed, baseLayout, swimlaneGroup, palette, is
820
1082
  palette,
821
1083
  isDark,
822
1084
  hiddenMetaGroups,
823
- fillModeFromOptions(parsed.options),
1085
+ fillMode,
824
1086
  sCardRadius,
825
1087
  sCardPaddingX,
826
1088
  sCardPaddingY,
@@ -892,4 +1154,4 @@ export {
892
1154
  renderKanban,
893
1155
  renderKanbanForExport
894
1156
  };
895
- //# sourceMappingURL=chunk-UVAOL2EO.js.map
1157
+ //# sourceMappingURL=chunk-H454ZVAS.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  extractDatePrefix,
3
3
  parseTimelineDate
4
- } from "./chunk-NNMNHE3J.js";
4
+ } from "./chunk-VQEW7XMN.js";
5
5
  import {
6
6
  makeYearContext,
7
7
  parseDateToken,
@@ -16,7 +16,7 @@ import {
16
16
  tagAttrKey,
17
17
  validateTagGroupNames,
18
18
  validateTagValues
19
- } from "./chunk-DPGI742S.js";
19
+ } from "./chunk-4FKEI4MF.js";
20
20
  import {
21
21
  EVENT_LINE_REGISTRY,
22
22
  extractColor,
@@ -27,14 +27,14 @@ import {
27
27
  tryParseSharedOption,
28
28
  warnUnknownMetaKeys,
29
29
  withTagAliases
30
- } from "./chunk-ZJJWON5O.js";
30
+ } from "./chunk-MK55PZVB.js";
31
31
  import {
32
32
  emit,
33
33
  formatDgmoError,
34
34
  makeDgmoError,
35
35
  makeFail,
36
36
  suggest
37
- } from "./chunk-OLMWTJVU.js";
37
+ } from "./chunk-5SI6T5A5.js";
38
38
 
39
39
  // src/event-line/diagnostics.ts
40
40
  var EVENT_LINE_DX = {
@@ -686,4 +686,4 @@ export {
686
686
  EVENT_LINE_DIAGNOSTICS,
687
687
  parseEventLine
688
688
  };
689
- //# sourceMappingURL=chunk-VMXV2CL5.js.map
689
+ //# sourceMappingURL=chunk-HQ34V2XV.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-C3Z4DX3V.js";
4
4
  import {
5
5
  parseInArrowLabel
6
- } from "./chunk-RRX4Z4TH.js";
6
+ } from "./chunk-IHOFUR74.js";
7
7
  import {
8
8
  tryStripDescriptionKeyword
9
9
  } from "./chunk-IYULMRBE.js";
@@ -18,8 +18,9 @@ import {
18
18
  stripDefaultModifier,
19
19
  tagAttrKey,
20
20
  validateTagGroupNames
21
- } from "./chunk-DPGI742S.js";
21
+ } from "./chunk-4FKEI4MF.js";
22
22
  import {
23
+ AliasRegistry,
23
24
  C4_REGISTRY,
24
25
  OPTION_NOCOLON_RE,
25
26
  extractColor,
@@ -29,13 +30,13 @@ import {
29
30
  splitNameAndMeta,
30
31
  warnUnknownMetaKeys,
31
32
  withTagAliases
32
- } from "./chunk-ZJJWON5O.js";
33
+ } from "./chunk-MK55PZVB.js";
33
34
  import {
34
35
  formatDgmoError,
35
36
  makeDgmoError,
36
37
  makeFail,
37
38
  suggest
38
- } from "./chunk-OLMWTJVU.js";
39
+ } from "./chunk-5SI6T5A5.js";
39
40
 
40
41
  // src/c4/parser.ts
41
42
  var CONTAINER_RE = /^\[([^\]]+)\](?:\s+(collapsed)|\s+collapsed:\s*(\S+))?$/;
@@ -182,10 +183,10 @@ function parseC4(content, palette) {
182
183
  let inDeployment = false;
183
184
  let currentTagGroup = null;
184
185
  const metaAliasMap = /* @__PURE__ */ new Map();
185
- const nameAliasMap = /* @__PURE__ */ new Map();
186
+ const nameAliasMap = new AliasRegistry();
186
187
  function resolveNameRef(rawName) {
187
188
  const trimmed = rawName.trim();
188
- return nameAliasMap.get(trimmed) ?? peelQuotedName(trimmed);
189
+ return nameAliasMap.resolve(trimmed) ?? peelQuotedName(trimmed);
189
190
  }
190
191
  const knownNames = /* @__PURE__ */ new Map();
191
192
  const elementMetadata = /* @__PURE__ */ new WeakMap();
@@ -195,6 +196,7 @@ function parseC4(content, palette) {
195
196
  for (let i = 0; i < lines.length; i++) {
196
197
  const line = lines[i];
197
198
  const lineNumber = i + 1;
199
+ nameAliasMap.at(lineNumber);
198
200
  const trimmed = line.trim();
199
201
  if (!trimmed) {
200
202
  if (currentTagGroup) currentTagGroup = null;
@@ -245,6 +247,30 @@ function parseC4(content, palette) {
245
247
  result.tagGroups.push(currentTagGroup);
246
248
  continue;
247
249
  }
250
+ if (currentTagGroup && !contentStarted) {
251
+ const indent2 = measureIndent(line);
252
+ if (indent2 > 0) {
253
+ const { text: cleanEntry, isDefault } = stripDefaultModifier(trimmed);
254
+ const { label, color } = extractColor(
255
+ cleanEntry,
256
+ palette,
257
+ result.diagnostics,
258
+ lineNumber
259
+ );
260
+ if (isDefault) {
261
+ currentTagGroup.defaultValue = label;
262
+ } else if (currentTagGroup.entries.length === 0) {
263
+ currentTagGroup.defaultValue = label;
264
+ }
265
+ currentTagGroup.entries.push({
266
+ value: label,
267
+ color: color ?? AUTO_TAG_COLOR_SENTINEL,
268
+ lineNumber
269
+ });
270
+ continue;
271
+ }
272
+ currentTagGroup = null;
273
+ }
248
274
  if (!contentStarted && !currentTagGroup && measureIndent(line) === 0) {
249
275
  if (KNOWN_C4_BOOLEANS.has(trimmed.toLowerCase())) {
250
276
  const boolKey = trimmed.toLowerCase();
@@ -272,30 +298,6 @@ function parseC4(content, palette) {
272
298
  }
273
299
  }
274
300
  }
275
- if (currentTagGroup && !contentStarted) {
276
- const indent2 = measureIndent(line);
277
- if (indent2 > 0) {
278
- const { text: cleanEntry, isDefault } = stripDefaultModifier(trimmed);
279
- const { label, color } = extractColor(
280
- cleanEntry,
281
- palette,
282
- result.diagnostics,
283
- lineNumber
284
- );
285
- if (isDefault) {
286
- currentTagGroup.defaultValue = label;
287
- } else if (currentTagGroup.entries.length === 0) {
288
- currentTagGroup.defaultValue = label;
289
- }
290
- currentTagGroup.entries.push({
291
- value: label,
292
- color: color ?? AUTO_TAG_COLOR_SENTINEL,
293
- lineNumber
294
- });
295
- continue;
296
- }
297
- currentTagGroup = null;
298
- }
299
301
  contentStarted = true;
300
302
  currentTagGroup = null;
301
303
  if (!sawChartType) {
@@ -528,7 +530,8 @@ function parseC4(content, palette) {
528
530
  }
529
531
  namePart = peelQuotedName(namePart);
530
532
  if (declaredAlias !== void 0)
531
- nameAliasMap.set(declaredAlias, namePart);
533
+ nameAliasMap.declare(declaredAlias, namePart, lineNumber);
534
+ nameAliasMap.noteCanonical(namePart, lineNumber);
532
535
  let elementType;
533
536
  let explicitShape = null;
534
537
  if (rawType === "external") {
@@ -750,6 +753,7 @@ function parseC4(content, palette) {
750
753
  "W_ACTIVE_TAG_NO_MATCH"
751
754
  );
752
755
  }
756
+ result.diagnostics.push(...nameAliasMap.finish());
753
757
  return result;
754
758
  }
755
759
  function findParentElement(indent, stack) {
@@ -845,4 +849,4 @@ function validateDeploymentRefs(result, knownNames, pushWarning) {
845
849
  export {
846
850
  parseC4
847
851
  };
848
- //# sourceMappingURL=chunk-YG35ZCNW.js.map
852
+ //# sourceMappingURL=chunk-I4YT5KL6.js.map