@diagrammo/dgmo 0.72.0 → 0.74.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 (273) hide show
  1. package/dist/advanced.d.ts +20 -11
  2. package/dist/advanced.js +115 -116
  3. package/dist/{analyzer-HQUXKZ5J.js → analyzer-FHRJUIMW.js} +3 -3
  4. package/dist/block.d.ts +2 -2
  5. package/dist/block.js +63 -75
  6. package/dist/calculator-CVQ54JNE.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-LWHTOVX7.js} +12 -12
  11. package/dist/{chunk-HKL66CKW.js → chunk-2MJSSDK5.js} +9 -9
  12. package/dist/{chunk-MFSTE3YG.js → chunk-2NRIGEHZ.js} +26 -18
  13. package/dist/{chunk-376ATV2Q.js → chunk-2QRIMMIH.js} +5 -5
  14. package/dist/{chunk-JIWDWOYA.js → chunk-3H4PDNP4.js} +4 -4
  15. package/dist/{chunk-MKNWMFZU.js → chunk-3SP6G4LN.js} +31 -27
  16. package/dist/{chunk-VE7PPEU3.js → chunk-474D3IUN.js} +8 -8
  17. package/dist/{chunk-MTPKBSTR.js → chunk-4SXHMFFP.js} +2 -2
  18. package/dist/{chunk-WPXHTYET.js → chunk-4YER7UCV.js} +4 -4
  19. package/dist/{chunk-P6RPHRX7.js → chunk-57Z2WXJ2.js} +6 -6
  20. package/dist/{chunk-7TSBM4BV.js → chunk-5KE6KHY6.js} +5 -5
  21. package/dist/{chunk-DZ34UUXC.js → chunk-5NAOTRLN.js} +11 -11
  22. package/dist/{chunk-MC2H32SM.js → chunk-5PFNUDXR.js} +4 -4
  23. package/dist/{chunk-OLMWTJVU.js → chunk-5SI6T5A5.js} +1 -1
  24. package/dist/{chunk-UJXCDF4E.js → chunk-5VMUVJO4.js} +2 -2
  25. package/dist/{chunk-ZGVVPILJ.js → chunk-6DYZ2JM6.js} +2 -2
  26. package/dist/{chunk-DPGI742S.js → chunk-76LHNLGX.js} +4 -4
  27. package/dist/{chunk-MX3BYU7V.js → chunk-76NHL5UG.js} +3 -3
  28. package/dist/{chunk-AEYRSPVV.js → chunk-7BMX2M3F.js} +3 -3
  29. package/dist/{chunk-FFD6A3B2.js → chunk-7NSNE52V.js} +18 -11
  30. package/dist/{chunk-2OTYNNHS.js → chunk-ALBVWTU4.js} +10 -10
  31. package/dist/{chunk-UF3EALKC.js → chunk-ALDU62VN.js} +10 -10
  32. package/dist/{chunk-W27BULCB.js → chunk-BBH5IAAR.js} +9 -9
  33. package/dist/{chunk-HWNF22ZZ.js → chunk-BWJLLNUX.js} +5 -5
  34. package/dist/{chunk-3HN32MEK.js → chunk-C2WH3BMS.js} +4 -4
  35. package/dist/{chunk-QITH5XOX.js → chunk-CDFIZHVD.js} +11 -11
  36. package/dist/{chunk-66VHK7PP.js → chunk-CMQJP5L4.js} +9 -9
  37. package/dist/{chunk-GK4AU57A.js → chunk-CQKD6GOC.js} +5 -5
  38. package/dist/{chunk-NUF7YTHA.js → chunk-CRLVJZWX.js} +3 -3
  39. package/dist/{chunk-WMHHNK44.js → chunk-DGPFFRLS.js} +2 -2
  40. package/dist/{chunk-UTVKOGFF.js → chunk-DJL5PO27.js} +94 -40
  41. package/dist/{chunk-RJI6MHHK.js → chunk-DU3OIBQE.js} +6 -6
  42. package/dist/{chunk-YYBQ55V2.js → chunk-DY7KDZUF.js} +4 -4
  43. package/dist/{chunk-BSI5EOAX.js → chunk-E3BJVEMZ.js} +7 -11
  44. package/dist/{chunk-7NK42OIB.js → chunk-E6PNTYRK.js} +2 -2
  45. package/dist/{chunk-VLXYWPPE.js → chunk-EPH4UMUE.js} +7 -7
  46. package/dist/{chunk-MUVASOBD.js → chunk-EV6BZMBZ.js} +10 -10
  47. package/dist/{chunk-MWWRIOEN.js → chunk-F4V67JXG.js} +3 -3
  48. package/dist/{chunk-HBVKOYZD.js → chunk-FGXBIOVK.js} +3 -3
  49. package/dist/{chunk-ELIGVSLE.js → chunk-FL5IKZQA.js} +12 -6
  50. package/dist/{chunk-W7SZKJR6.js → chunk-FPRMP6YA.js} +4 -4
  51. package/dist/{chunk-IKHV5IJB.js → chunk-GE5RO4BS.js} +2 -2
  52. package/dist/{chunk-CGLBK5Q4.js → chunk-GJQQCI63.js} +5 -4
  53. package/dist/{chunk-KWRW6BLG.js → chunk-GLREDNBA.js} +2 -2
  54. package/dist/{chunk-N5247W2W.js → chunk-GQJ35I2I.js} +61 -54
  55. package/dist/{chunk-VGLSKDDI.js → chunk-GRN44Z6A.js} +3 -3
  56. package/dist/{chunk-7U3NDE7T.js → chunk-HFCKU73Y.js} +7 -7
  57. package/dist/{chunk-KOVRFBGR.js → chunk-ICVIJLBA.js} +16 -11
  58. package/dist/{chunk-RRX4Z4TH.js → chunk-IHOFUR74.js} +2 -2
  59. package/dist/{chunk-UNM2PX5D.js → chunk-JLODGGN2.js} +4 -4
  60. package/dist/{chunk-UCGEBFUC.js → chunk-JSYAH7KR.js} +4 -4
  61. package/dist/{chunk-GCTKJDLY.js → chunk-KR432TCU.js} +10 -10
  62. package/dist/{chunk-PBV2C3BW.js → chunk-KRTLS3G6.js} +24 -20
  63. package/dist/{chunk-LTGOPJUV.js → chunk-KWSBNLSC.js} +3 -3
  64. package/dist/{chunk-XIZCHGP7.js → chunk-L2EA5YLO.js} +9 -9
  65. package/dist/{chunk-KJWIU5AM.js → chunk-LKS56RDT.js} +3 -3
  66. package/dist/{chunk-ET4R3AU5.js → chunk-LM3HY3VG.js} +2 -2
  67. package/dist/{chunk-O4OVVK6J.js → chunk-LSHMDQZQ.js} +7 -7
  68. package/dist/{chunk-FLXDMH7B.js → chunk-LXXVHLTH.js} +30 -24
  69. package/dist/{chunk-L3XB446I.js → chunk-LYLRNAX2.js} +2 -2
  70. package/dist/{chunk-UY77QQWU.js → chunk-M526IKKH.js} +11 -7
  71. package/dist/{chunk-YH5KJIO5.js → chunk-M5JT2AU7.js} +8 -8
  72. package/dist/{chunk-ZJJWON5O.js → chunk-M5OOAP65.js} +271 -5
  73. package/dist/{chunk-3SNE4CLI.js → chunk-MDEG62W7.js} +7 -7
  74. package/dist/{chunk-RTTELOOP.js → chunk-MS5574I7.js} +3 -3
  75. package/dist/{chunk-I55PVEIX.js → chunk-MSVQ2YCY.js} +2 -2
  76. package/dist/{chunk-FTPNAYL2.js → chunk-NHQ7HUAS.js} +4 -4
  77. package/dist/{chunk-2VBJCTSG.js → chunk-NW3VXCXR.js} +5 -5
  78. package/dist/{chunk-6PA32CUB.js → chunk-OKXWPKUC.js} +4 -4
  79. package/dist/{chunk-UKOOGXRF.js → chunk-PHRBLJ3K.js} +8 -8
  80. package/dist/{chunk-LSHROB27.js → chunk-Q6BAFS7I.js} +5 -5
  81. package/dist/{chunk-WRWUZ2C4.js → chunk-Q6LP67RP.js} +4 -4
  82. package/dist/{chunk-IW6N2JJL.js → chunk-Q74GP3GK.js} +2 -2
  83. package/dist/{chunk-IXVK7XCN.js → chunk-QMFIZQTB.js} +2 -2
  84. package/dist/{chunk-QAJFIXJE.js → chunk-QOVM5VRC.js} +28 -28
  85. package/dist/{chunk-6S53NO3M.js → chunk-QT5UMFPE.js} +5 -5
  86. package/dist/{chunk-HZQCKXPB.js → chunk-R5JPMW2F.js} +42 -42
  87. package/dist/{chunk-SPA7DCB3.js → chunk-RN3PAL4E.js} +3 -3
  88. package/dist/{chunk-REBTZP3W.js → chunk-RQ6SEQOT.js} +6 -6
  89. package/dist/{chunk-NTBHGUXY.js → chunk-RWFMOVHG.js} +4 -4
  90. package/dist/{chunk-QPG55HGH.js → chunk-S5P5Z5Y5.js} +5 -5
  91. package/dist/{chunk-WF2HDQPG.js → chunk-S6OXNZBM.js} +3 -3
  92. package/dist/{chunk-NEC7R2CB.js → chunk-SH4PPRU7.js} +3 -3
  93. package/dist/{chunk-UNTFANSM.js → chunk-SUA56ZSB.js} +15 -10
  94. package/dist/{chunk-7SEQPFBX.js → chunk-SWEKCK34.js} +33 -28
  95. package/dist/{chunk-BYSRXYRW.js → chunk-SXZS56YM.js} +6 -6
  96. package/dist/{chunk-7BHM774H.js → chunk-T6BO4VO6.js} +8 -8
  97. package/dist/{chunk-DHKVHP3Y.js → chunk-TC63QU4M.js} +18 -16
  98. package/dist/{chunk-NJKUTY4M.js → chunk-TDHD3HNO.js} +5 -5
  99. package/dist/{chunk-T7W5LM4N.js → chunk-TN754B3R.js} +5 -5
  100. package/dist/{chunk-DEVZWCD5.js → chunk-TPN7RJOM.js} +21 -12
  101. package/dist/{chunk-4VUFJ7UA.js → chunk-TTCXHFFB.js} +6 -6
  102. package/dist/{chunk-E36Q5ABQ.js → chunk-U74EGVOA.js} +7 -7
  103. package/dist/{chunk-NNMNHE3J.js → chunk-UCZBRGJN.js} +3 -3
  104. package/dist/{chunk-VMXV2CL5.js → chunk-UJBP57UJ.js} +29 -12
  105. package/dist/{chunk-PKTRDOBI.js → chunk-ULEWCCBN.js} +3 -3
  106. package/dist/{chunk-YTFA4VTW.js → chunk-VBJCGGNF.js} +3 -3
  107. package/dist/{chunk-TF7CFAZ5.js → chunk-W7UBPARG.js} +4 -4
  108. package/dist/{chunk-OQKP2X3D.js → chunk-WFA6IULY.js} +57 -3
  109. package/dist/{chunk-N34OTOGH.js → chunk-WQXD3IIN.js} +3 -3
  110. package/dist/{chunk-EETUTZ5C.js → chunk-WWQ6TUVK.js} +2 -2
  111. package/dist/{chunk-6OAKQTXQ.js → chunk-XCAEHWQB.js} +3 -3
  112. package/dist/{chunk-WEC3JPTN.js → chunk-XJLNQEQS.js} +8 -8
  113. package/dist/{chunk-EXNKNJ65.js → chunk-XOGQY4EC.js} +2 -2
  114. package/dist/{chunk-K6MQJ5IV.js → chunk-Y2CYNRL7.js} +3 -3
  115. package/dist/{chunk-PZVYUQJA.js → chunk-YDA46XHI.js} +4 -4
  116. package/dist/{chunk-U4NFAWQW.js → chunk-YJ5G2WRU.js} +9 -9
  117. package/dist/{chunk-6CLC26GU.js → chunk-YJMWEZOB.js} +2 -2
  118. package/dist/{chunk-6DGMS2WJ.js → chunk-YSMI6TNZ.js} +6 -6
  119. package/dist/{chunk-QX53GOI7.js → chunk-YT5ICQ4R.js} +2 -2
  120. package/dist/{chunk-7RAWNJI5.js → chunk-YXY6V2YN.js} +114 -107
  121. package/dist/{chunk-5DYDPP7K.js → chunk-Z7KVOVE4.js} +115 -240
  122. package/dist/{chunk-YG35ZCNW.js → chunk-ZM27UI5O.js} +36 -32
  123. package/dist/completion-registry.js +25 -21
  124. package/dist/countdown.js +26 -6
  125. package/dist/{d3-Bfhj-XBX.d.ts → d3--y67plmW.d.ts} +1 -1
  126. package/dist/{dgmo-router-Lya7cs3R.d.ts → dgmo-router-CY5j16Pl.d.ts} +1 -1
  127. package/dist/dgmo-router-KYNLRE7S.js +89 -0
  128. package/dist/dimensions-Q5SFPATB.js +22 -0
  129. package/dist/editor.js +1 -0
  130. package/dist/flowchart-parser-LY5GGQL2.js +21 -0
  131. package/dist/{flowchart-renderer-JMGOCLTQ.js → flowchart-renderer-TTUSBBQI.js} +12 -12
  132. package/dist/highlight.js +7 -18
  133. package/dist/index.d.ts +7 -7
  134. package/dist/index.js +60 -58
  135. package/dist/layout-5ILNODTP.js +15 -0
  136. package/dist/{layout-RD7GDM4I.js → layout-B5GQVXXY.js} +4 -4
  137. package/dist/{layout-5RUQ5FBZ.js → layout-DAYQ46PS.js} +3 -3
  138. package/dist/{layout-2DVT24YY.js → layout-EM4DLMAX.js} +6 -6
  139. package/dist/{layout-LVMWK4QY.js → layout-KQUSB45X.js} +4 -4
  140. package/dist/{layout-WIMQIHBU.js → layout-ROORJQ4X.js} +4 -4
  141. package/dist/layout-RV2T2YTT.js +15 -0
  142. package/dist/{layout-AWPST2S3.js → layout-UJ62RQQ3.js} +7 -7
  143. package/dist/layout-VUZ3MLOI.js +15 -0
  144. package/dist/{layout-BGXLVSXL.js → layout-ZAGUFT2G.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-2GMHFSTS.js +16 -0
  149. package/dist/parser-3AOMUX5D.js +14 -0
  150. package/dist/parser-3KQONLXZ.js +11 -0
  151. package/dist/parser-4DLU4SNG.js +11 -0
  152. package/dist/parser-4KFJKLP2.js +11 -0
  153. package/dist/{parser-CDMP3UVH.js → parser-5XFGK5C5.js} +7 -7
  154. package/dist/parser-6FUESG4N.js +13 -0
  155. package/dist/parser-B2XQNHZM.js +11 -0
  156. package/dist/parser-CJNP7RKR.js +13 -0
  157. package/dist/parser-E3OHNNTH.js +12 -0
  158. package/dist/parser-EQ4I3TSH.js +20 -0
  159. package/dist/parser-F4ZKDGUZ.js +12 -0
  160. package/dist/parser-GCVSRQPY.js +17 -0
  161. package/dist/parser-H4ZUNLX4.js +15 -0
  162. package/dist/parser-JYIZEKAS.js +19 -0
  163. package/dist/{parser-ZIEEBJMU.js → parser-L7RXUKYN.js} +7 -7
  164. package/dist/{parser-TJ3SP2MJ.js → parser-L7T7FY3H.js} +7 -7
  165. package/dist/parser-LUOINP6H.js +15 -0
  166. package/dist/parser-LV7PQBUG.js +13 -0
  167. package/dist/parser-ML3LVNDV.js +13 -0
  168. package/dist/parser-PR3OR3LO.js +14 -0
  169. package/dist/parser-QOIZGW7I.js +17 -0
  170. package/dist/parser-RDBXEVI4.js +12 -0
  171. package/dist/parser-TA5TYZNL.js +18 -0
  172. package/dist/parser-UTR5WE4O.js +13 -0
  173. package/dist/parser-WCFG3DZA.js +11 -0
  174. package/dist/{parser-XM6JC3UK.js → parser-WMJEPZDC.js} +6 -6
  175. package/dist/{parser-O7GTECFP.js → parser-WQNT7T2P.js} +5 -5
  176. package/dist/parser-WWRRG2DV.js +15 -0
  177. package/dist/parser-XVSDFO56.js +11 -0
  178. package/dist/parser-YWQCC33R.js +16 -0
  179. package/dist/{parser-EX3AGFT5.js → parser-ZT3PU2HT.js} +6 -6
  180. package/dist/parser-ZXQZZK6W.js +15 -0
  181. package/dist/pert.d.ts +10 -0
  182. package/dist/{renderer-WLA3NQCC.js → renderer-227JWWHX.js} +13 -13
  183. package/dist/renderer-2WW35ZIW.js +23 -0
  184. package/dist/renderer-3FB56573.js +22 -0
  185. package/dist/renderer-3LD3ANCP.js +25 -0
  186. package/dist/renderer-46QQH33X.js +27 -0
  187. package/dist/{renderer-2T2RAFWX.js → renderer-4K6KR3U3.js} +14 -14
  188. package/dist/{renderer-UPTO25OX.js → renderer-55JP6AO4.js} +12 -12
  189. package/dist/renderer-6HRDO635.js +26 -0
  190. package/dist/renderer-6IGQEVTE.js +20 -0
  191. package/dist/renderer-6SSIELBC.js +16 -0
  192. package/dist/{renderer-IH5C7NQT.js → renderer-AA5CC4VJ.js} +6 -6
  193. package/dist/renderer-BUEFD2IF.js +21 -0
  194. package/dist/{renderer-VP4DPLDY.js → renderer-CF5TYQT4.js} +6 -6
  195. package/dist/{renderer-W7JC2CTQ.js → renderer-E5BYZTVH.js} +6 -6
  196. package/dist/renderer-EJXFEA5C.js +25 -0
  197. package/dist/{renderer-FAD65M5Z.js → renderer-EP4GRCDX.js} +6 -6
  198. package/dist/renderer-IPNSOM5J.js +26 -0
  199. package/dist/{renderer-ACGZ5KJG.js → renderer-N2X3WYBY.js} +17 -17
  200. package/dist/{renderer-Y3D36RIT.js → renderer-NECP7G4X.js} +11 -11
  201. package/dist/renderer-OTHBTGBN.js +16 -0
  202. package/dist/{renderer-ZRHTC24Q.js → renderer-OWBIWBMK.js} +11 -11
  203. package/dist/{renderer-IZFO3G22.js → renderer-P55KPBIX.js} +17 -17
  204. package/dist/{renderer-K73COK5L.js → renderer-QLZVE45Z.js} +8 -8
  205. package/dist/{renderer-QZRM6H4S.js → renderer-SCIHPARI.js} +5 -5
  206. package/dist/{renderer-Y4VC3VH4.js → renderer-TI7QABY7.js} +14 -15
  207. package/dist/renderer-U6PK5ZKD.js +24 -0
  208. package/dist/renderer-UUPNOGO5.js +25 -0
  209. package/dist/{renderer-CB44E262.js → renderer-UXZEYV2X.js} +13 -13
  210. package/dist/renderer-UYYBJ7OB.js +76 -0
  211. package/dist/{renderer-CL4X5S3T.js → renderer-W7RKBG6C.js} +12 -12
  212. package/dist/{renderer-VEN6AIWW.js → renderer-XBL6CLN2.js} +12 -12
  213. package/dist/{renderer-E42I44WZ.js → renderer-YM7PLDBF.js} +13 -13
  214. package/dist/{renderer-2MEPYGAP.js → renderer-YQI5U6KJ.js} +13 -13
  215. package/dist/renderer-radial-MZP3SVTZ.js +21 -0
  216. package/dist/{resolver-B3TXWNWF.js → resolver-H5E6V7LJ.js} +3 -3
  217. package/dist/state-parser-TPA67IXM.js +19 -0
  218. package/dist/{state-renderer-FJ2GT4MU.js → state-renderer-OPP6YOJI.js} +17 -17
  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 +52 -13
  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-O55I5UXN.js +0 -89
  226. package/dist/dimensions-EFEBIRS6.js +0 -22
  227. package/dist/flowchart-parser-LZF2GW2P.js +0 -21
  228. package/dist/layout-4D5JRUHX.js +0 -15
  229. package/dist/layout-VMDNULKS.js +0 -15
  230. package/dist/layout-VVTXA3W2.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-4DFEFP4X.js +0 -26
  259. package/dist/renderer-52KYFTNZ.js +0 -16
  260. package/dist/renderer-B4Q6LUW2.js +0 -24
  261. package/dist/renderer-E3UQ24DE.js +0 -25
  262. package/dist/renderer-H5QR3LC3.js +0 -16
  263. package/dist/renderer-JHWGW4Q7.js +0 -25
  264. package/dist/renderer-KQIJV5WD.js +0 -19
  265. package/dist/renderer-MZ4N2SVV.js +0 -25
  266. package/dist/renderer-QMSFXMAL.js +0 -21
  267. package/dist/renderer-VOXE7V6L.js +0 -27
  268. package/dist/renderer-WBG576LB.js +0 -26
  269. package/dist/renderer-XR4SVKNE.js +0 -22
  270. package/dist/renderer-YROML2KW.js +0 -76
  271. package/dist/renderer-YXYEP46H.js +0 -23
  272. package/dist/renderer-radial-KZ3W4WXI.js +0 -21
  273. package/dist/state-parser-HJNCGIFT.js +0 -19
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  monthIndex,
3
3
  resolveNext,
4
+ ruleFromAnchor,
4
5
  targetToMs,
5
6
  weekdayIndex
6
- } from "./chunk-OQKP2X3D.js";
7
+ } from "./chunk-WFA6IULY.js";
7
8
  import {
8
9
  normalizeDate
9
10
  } from "./chunk-DAOFNU6J.js";
@@ -12,14 +13,47 @@ import {
12
13
  fillModeFromToken,
13
14
  measureIndent,
14
15
  parseFirstLine
15
- } from "./chunk-ZJJWON5O.js";
16
+ } from "./chunk-M5OOAP65.js";
16
17
  import {
17
18
  makeDgmoError,
18
19
  makeFail
19
- } from "./chunk-OLMWTJVU.js";
20
+ } from "./chunk-5SI6T5A5.js";
20
21
 
21
22
  // src/countdown/parser.ts
22
- var TIME_24H_RE = /^(\d{1,2}):(\d{2})$/;
23
+ var RETIRED_SLOTS = /* @__PURE__ */ new Set(["on", "at", "from"]);
24
+ function retiredSlotMessage(slot) {
25
+ if (slot === "at")
26
+ return "`at` is gone \u2014 the time rides the anchor: `since 2026-01-05T18:00`, then `every week`.";
27
+ if (slot === "from")
28
+ return "`from` is gone \u2014 the anchor is `since <date>`: `since 2026-07-03`, then `every 2 weeks`.";
29
+ return "`on` is gone \u2014 the date lives in `since`: `since 2026-08-21`, then `every year`.";
30
+ }
31
+ function parseCadence(toks) {
32
+ const low = toks.map((t) => t.toLowerCase());
33
+ const head = low[0] ?? "";
34
+ if (low.length === 1) {
35
+ if (head === "year") return { kind: "year" };
36
+ if (head === "week") return { kind: "week" };
37
+ if (head === "month") return { kind: "month" };
38
+ if (head === "day") return { kind: "interval", n: 1, unit: "day" };
39
+ return null;
40
+ }
41
+ if (head === "month" && low[1] === "by") {
42
+ if (low[2] === "weekday" && low.length === 3)
43
+ return { kind: "month-weekday", last: false };
44
+ if (low[2] === "last" && low[3] === "weekday" && low.length === 4)
45
+ return { kind: "month-weekday", last: true };
46
+ return null;
47
+ }
48
+ if (low.length === 2 && /^\d+$/.test(head)) {
49
+ const unit = low[1].replace(/s$/, "");
50
+ if (unit === "day" || unit === "week" || unit === "month") {
51
+ const n = Number(head);
52
+ if (n >= 1) return { kind: "interval", n, unit };
53
+ }
54
+ }
55
+ return null;
56
+ }
23
57
  var AMPM_RE = /^(\d{1,2})(?::(\d{2}))?\s*([ap]m)$/i;
24
58
  function targetToMs2(target, tz = null) {
25
59
  const ms = targetToMs(target, tz);
@@ -33,33 +67,6 @@ function isValidZone(zone) {
33
67
  return false;
34
68
  }
35
69
  }
36
- function ordinalToken(tok) {
37
- const t = tok.toLowerCase();
38
- if (t === "last") return -1;
39
- const m = t.match(/^(\d+)(?:st|nd|rd|th)?$/);
40
- if (m) {
41
- const n = Number(m[1]);
42
- return n >= 1 && n <= 5 ? n : null;
43
- }
44
- return null;
45
- }
46
- function parse24h(tok) {
47
- const m = tok.match(TIME_24H_RE);
48
- if (!m) return null;
49
- const hour = Number(m[1]);
50
- const minute = Number(m[2]);
51
- if (hour > 23 || minute > 59) return null;
52
- return { hour, minute };
53
- }
54
- function parseAt(rest, lineNum, softError) {
55
- const tok = rest.trim();
56
- const t = parse24h(tok);
57
- if (t) return t;
58
- const fixed = ampmTo24h(tok);
59
- if (fixed) return parse24h(fixed);
60
- softError(lineNum, `"at" needs a time like 18:00 or 6:30pm (got "${rest}").`);
61
- return null;
62
- }
63
70
  function ampmTo24h(tok) {
64
71
  const m = tok.match(AMPM_RE);
65
72
  if (!m) return null;
@@ -80,7 +87,7 @@ function parseCountdown(content, palette) {
80
87
  resolvedMs: null,
81
88
  hasTime: false,
82
89
  tz: null,
83
- since: null,
90
+ sinceMs: null,
84
91
  sinceLabel: null,
85
92
  units: "human",
86
93
  round: "up",
@@ -104,16 +111,13 @@ function parseCountdown(content, palette) {
104
111
  const lines = content.split("\n");
105
112
  let headerParsed = false;
106
113
  let cadence = null;
107
- let intervalN = 1;
108
- let intervalUnit = "day";
109
- let onSpec = null;
110
- let atTime = null;
114
+ let sinceRaw = null;
115
+ let sinceLine = 0;
116
+ let sinceMs = null;
117
+ let sinceHasTime = false;
111
118
  let targetRaw = null;
112
119
  let targetIsNow = false;
113
120
  let targetLine = 1;
114
- let fromRaw = null;
115
- let fromLine = 1;
116
- let anchorMs = null;
117
121
  let targetMs = null;
118
122
  let hasTargetLine = false;
119
123
  let hasEvery = false;
@@ -178,73 +182,23 @@ function parseCountdown(content, palette) {
178
182
  // (each slot may also appear on its own line — handled below.)
179
183
  case "every": {
180
184
  hasEvery = true;
181
- const seg = {
182
- cadence: [],
183
- on: [],
184
- at: [],
185
- from: []
186
- };
187
- let cur = "cadence";
188
- for (const tok of rest.split(/\s+/).filter(Boolean)) {
189
- const low = tok.toLowerCase();
190
- if (low === "on" || low === "at" || low === "from") cur = low;
191
- else seg[cur].push(tok);
192
- }
193
- const head = (seg.cadence[0] ?? "").toLowerCase();
194
- const bareInterval = (head === "day" || head === "week" || head === "month") && seg.from.length > 0 && seg.on.length === 0;
195
- if (bareInterval) {
196
- cadence = "interval";
197
- intervalN = 1;
198
- intervalUnit = head;
199
- } else if (head === "year" || head === "month" || head === "week") {
200
- cadence = head;
201
- } else if (head === "day") {
202
- softError(
203
- lineNum,
204
- "`every day` needs `from <date>` (an interval anchor)."
205
- );
206
- break;
207
- } else if (/^\d+$/.test(head) && seg.cadence[1]) {
208
- const unit = seg.cadence[1].toLowerCase().replace(/s$/, "");
209
- if (unit === "day" || unit === "week" || unit === "month") {
210
- cadence = "interval";
211
- intervalN = Number(head);
212
- intervalUnit = unit;
213
- } else {
214
- softError(
215
- lineNum,
216
- `every ${head} <days|weeks|months> \u2014 unknown unit "${seg.cadence[1]}".`
217
- );
218
- }
219
- } else {
185
+ const toks = rest.split(/\s+/).filter(Boolean);
186
+ const stray = toks.find((t) => RETIRED_SLOTS.has(t.toLowerCase()));
187
+ if (stray)
188
+ return fail(lineNum, retiredSlotMessage(stray.toLowerCase()));
189
+ const parsed = parseCadence(toks);
190
+ if (!parsed) {
220
191
  emitFreeProseError(lineNum, rest, softError);
221
192
  break;
222
193
  }
223
- if (seg.on.length)
224
- onSpec = parseOn(seg.on.join(" "), lineNum, softError);
225
- if (seg.at.length)
226
- atTime = parseAt(seg.at.join(" "), lineNum, softError);
227
- if (seg.from.length) {
228
- fromRaw = seg.from.join(" ");
229
- fromLine = lineNum;
230
- }
231
- break;
232
- }
233
- // Standalone slot lines (lenient multi-line form).
234
- case "on": {
235
- onSpec = parseOn(rest, lineNum, softError);
236
- break;
237
- }
238
- case "at": {
239
- const t = parseAt(rest, lineNum, softError);
240
- if (t) atTime = t;
241
- break;
242
- }
243
- case "from": {
244
- fromRaw = rest;
245
- fromLine = lineNum;
194
+ cadence = parsed;
246
195
  break;
247
196
  }
197
+ // The standalone slot lines are retired alongside their `every` slots.
198
+ case "on":
199
+ case "at":
200
+ case "from":
201
+ return fail(lineNum, retiredSlotMessage(key));
248
202
  // ── Universal date directives (§ BL-121) ──
249
203
  case "date-order": {
250
204
  const v = rest.toLowerCase();
@@ -261,9 +215,8 @@ function parseCountdown(content, palette) {
261
215
  }
262
216
  // ── Ordinal / since — numbers a yearly occurrence (resolvedYear − since) ──
263
217
  case "since": {
264
- const y = Number(rest);
265
- if (Number.isInteger(y) && y > 0) result.since = y;
266
- else softError(lineNum, `"since" needs a year (got "${rest}").`);
218
+ sinceRaw = rest;
219
+ sinceLine = lineNum;
267
220
  break;
268
221
  }
269
222
  // The eyebrow template: `Nth` → ordinal word, `N` → the number.
@@ -368,177 +321,99 @@ function parseCountdown(content, palette) {
368
321
  }
369
322
  }
370
323
  }
371
- if (fromRaw !== null) {
372
- const iso = normalizeDate(fromRaw, { order: dateOrder, year: baseYear });
373
- const ms = targetToMs2(iso ?? fromRaw, result.tz);
324
+ if (sinceRaw !== null) {
325
+ if (/^\d{4}$/.test(sinceRaw.trim())) {
326
+ return fail(
327
+ sinceLine,
328
+ `"since" needs a full date now (got the bare year "${sinceRaw.trim()}") \u2014 write \`since ${sinceRaw.trim()}-06-14\`. The month and day that used to sit on \`every \u2026 on\` come from here.`
329
+ );
330
+ }
331
+ const iso = normalizeDate(sinceRaw, { order: dateOrder, year: baseYear });
332
+ const effective = iso ?? sinceRaw;
333
+ const ms = targetToMs2(effective, result.tz);
374
334
  if (ms === null) {
375
- softError(fromLine, `"from" needs an anchor date (got "${fromRaw}").`);
376
- } else {
377
- anchorMs = ms;
335
+ return fail(
336
+ sinceLine,
337
+ `"since" needs a date or datetime (got "${sinceRaw}").`
338
+ );
378
339
  }
340
+ sinceMs = ms;
341
+ sinceHasTime = effective.includes(":");
379
342
  }
380
- if (hasEvery && hasTargetLine) {
381
- softError(
382
- result.titleLineNumber ?? 1,
383
- "A countdown has either `target` (one-shot) or `every` (recurring), not both."
343
+ const titleLine = result.titleLineNumber ?? 1;
344
+ if ((hasEvery || sinceRaw !== null) && hasTargetLine) {
345
+ return fail(
346
+ titleLine,
347
+ "A countdown has either `target` (one-shot) or `since`/`every` (recurring), not both."
384
348
  );
385
349
  }
386
- if (result.expired !== null && hasEvery) {
350
+ if (hasEvery && sinceMs === null) {
351
+ return fail(
352
+ titleLine,
353
+ "`every` needs a `since <date>` to recur from \u2014 it carries the cadence, the anchor carries the date."
354
+ );
355
+ }
356
+ if (result.expired !== null && (hasEvery || sinceMs !== null)) {
387
357
  warn(
388
- result.titleLineNumber ?? 1,
358
+ titleLine,
389
359
  "`expired` applies only to one-shot `target` blocks; recurring blocks roll forward."
390
360
  );
391
361
  }
392
- if (hasEvery && cadence) {
393
- const rule = assembleRule(
394
- cadence,
395
- { intervalN, intervalUnit, anchorMs },
396
- onSpec,
397
- atTime,
398
- result.titleLineNumber ?? 1,
399
- softError
362
+ if (sinceMs !== null) {
363
+ const rule = ruleFromAnchor(
364
+ cadence ?? { kind: "year" },
365
+ sinceMs,
366
+ !sinceHasTime,
367
+ result.tz
400
368
  );
401
- if (rule) {
402
- const tzRule = result.tz ? { ...rule, tz: result.tz } : rule;
403
- result.rule = tzRule;
404
- result.resolvedMs = resolveNext(tzRule, Date.now());
405
- if (atTime) result.hasTime = true;
406
- }
369
+ result.rule = rule;
370
+ result.resolvedMs = resolveNext(rule, Date.now());
371
+ result.sinceMs = sinceMs;
372
+ if (sinceHasTime) result.hasTime = true;
407
373
  } else if (targetMs !== null) {
408
374
  result.targetMs = targetMs;
409
375
  result.resolvedMs = targetMs;
410
376
  }
411
377
  if (result.resolvedMs === null && result.error === null) {
412
- if (!hasEvery && !hasTargetLine) {
378
+ if (!hasTargetLine && sinceRaw === null) {
413
379
  softError(
414
- result.titleLineNumber ?? 1,
415
- "Missing `target` or `every` \u2014 a countdown needs one."
380
+ titleLine,
381
+ "Missing `target` (one-shot) or `since <date>` (recurring) \u2014 a countdown needs one."
416
382
  );
417
383
  }
418
384
  }
419
385
  return result;
420
386
  }
421
- function parseOn(rest, lineNum, softError) {
422
- const toks = rest.split(/\s+/).filter(Boolean);
423
- if (toks.length === 0) {
424
- softError(
425
- lineNum,
426
- '"on" needs a target (e.g. "Aug 21", "3rd Tuesday", "Friday").'
427
- );
428
- return null;
429
- }
430
- const ord = ordinalToken(toks[0]);
431
- if (ord !== null && toks[1]) {
432
- const wd2 = weekdayIndex(toks[1]);
433
- if (wd2 === null) {
434
- softError(lineNum, `"${toks[1]}" is not a weekday.`);
435
- return null;
436
- }
437
- return { nth: ord, weekday: wd2 };
438
- }
439
- const mo = monthIndex(toks[0]);
440
- if (mo !== null && toks[1]) {
441
- const day = Number(toks[1].replace(/(st|nd|rd|th)$/i, ""));
442
- if (!Number.isInteger(day) || day < 1 || day > 31) {
443
- softError(lineNum, `"${toks[1]}" is not a valid day of month.`);
444
- return null;
445
- }
446
- return { month: mo, day };
447
- }
448
- const wd = weekdayIndex(toks[0]);
449
- if (wd !== null) return { weekday: wd };
450
- softError(
451
- lineNum,
452
- `"on ${rest}" \u2014 use "Aug 21", "3rd Tuesday", "last Friday", or a weekday.`
453
- );
454
- return null;
455
- }
456
- function assembleRule(cadence, interval, onSpec, atTime, lineNum, softError) {
457
- const hour = atTime?.hour ?? 0;
458
- const minute = atTime?.minute ?? 0;
459
- const allDay = atTime === null;
460
- if (cadence === "interval") {
461
- return {
462
- kind: "interval",
463
- intervalN: interval.intervalN,
464
- intervalUnit: interval.intervalUnit,
465
- anchorMs: interval.anchorMs ?? void 0,
466
- hour,
467
- minute,
468
- allDay
469
- };
470
- }
471
- if (cadence === "year") {
472
- if (onSpec?.month === void 0 || onSpec.day === void 0) {
473
- softError(
474
- lineNum,
475
- "`every year` needs `on <Month> <Day>` (e.g. on Aug 21)."
476
- );
477
- return null;
478
- }
479
- return {
480
- kind: "month-day",
481
- month: onSpec.month,
482
- day: onSpec.day,
483
- hour,
484
- minute,
485
- allDay
486
- };
487
- }
488
- if (cadence === "month") {
489
- if (onSpec?.nth === void 0 || onSpec.weekday === void 0) {
490
- softError(
491
- lineNum,
492
- "`every month` needs `on <nth> <weekday>`, `on last <weekday>`, or `from <date>`."
493
- );
494
- return null;
495
- }
496
- return onSpec.nth < 0 ? { kind: "last-weekday", weekday: onSpec.weekday, hour, minute, allDay } : {
497
- kind: "nth-weekday",
498
- nth: onSpec.nth,
499
- weekday: onSpec.weekday,
500
- hour,
501
- minute,
502
- allDay
503
- };
504
- }
505
- if (onSpec?.weekday === void 0 || onSpec.nth !== void 0) {
506
- softError(lineNum, "`every week` needs `on <weekday>` (e.g. on Friday).");
507
- return null;
508
- }
509
- return { kind: "weekly", weekday: onSpec.weekday, hour, minute, allDay };
510
- }
511
387
  function emitFreeProseError(lineNum, rest, softError) {
512
388
  const toks = rest.split(/\s+/).filter(Boolean);
513
389
  const problems = [];
514
- let onPart = "";
515
- let atPart = "";
390
+ let suggestion = "every year";
516
391
  for (let i = 0; i < toks.length; i++) {
517
392
  const tok = toks[i];
518
393
  const fixed = ampmTo24h(tok);
519
394
  if (fixed) {
520
- problems.push(`"${tok}": use 24h time (${fixed})`);
521
- atPart = ` at ${fixed}`;
395
+ problems.push(
396
+ `"${tok}": a time belongs on the anchor (since \u2026T${fixed})`
397
+ );
398
+ continue;
399
+ }
400
+ if (weekdayIndex(tok) !== null) {
401
+ problems.push(`"${tok}": a weekday belongs on the anchor`);
402
+ suggestion = "every week";
522
403
  continue;
523
404
  }
524
- const wd = weekdayIndex(tok);
525
- if (wd !== null) onPart = `week on ${tok}`;
526
- const mo = monthIndex(tok);
527
- if (mo !== null && toks[i + 1] && /^\d/.test(toks[i + 1])) {
528
- onPart = `year on ${tok} ${toks[i + 1]}`;
405
+ if (monthIndex(tok) !== null && toks[i + 1] && /^\d/.test(toks[i + 1])) {
406
+ problems.push(`"${tok} ${toks[i + 1]}": a date belongs on the anchor`);
407
+ suggestion = "every year";
529
408
  }
530
409
  }
531
- if (!onPart && !atPart) {
410
+ if (problems.length === 0)
532
411
  problems.push(
533
- "bare cadence \u2014 use year | month | week | N days|weeks|months"
412
+ "unknown cadence \u2014 use year | month | month by [last] weekday | week | day | N days|weeks|months"
534
413
  );
535
- } else if (onPart.startsWith("week")) {
536
- problems.push("bare weekday needs a cadence");
537
- }
538
- const suggestion = onPart ? `every ${onPart}${atPart}` : `every week \u2026${atPart}`;
539
414
  softError(
540
415
  lineNum,
541
- `Free-form recurrence rejected. ${problems.join("; ")}. Try: ${suggestion}`
416
+ `\`every\` takes a cadence only. ${problems.join("; ")}. Try: \`since <date>\` + \`${suggestion}\`.`
542
417
  );
543
418
  }
544
419
 
@@ -546,4 +421,4 @@ export {
546
421
  targetToMs2 as targetToMs,
547
422
  parseCountdown
548
423
  };
549
- //# sourceMappingURL=chunk-5DYDPP7K.js.map
424
+ //# sourceMappingURL=chunk-Z7KVOVE4.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-76LHNLGX.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-M5OOAP65.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-ZM27UI5O.js.map
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  ALL_MARKERS
3
- } from "./chunk-I55PVEIX.js";
3
+ } from "./chunk-MSVQ2YCY.js";
4
4
  import {
5
5
  GROUP_ONLY_METADATA,
6
6
  STATE_KEYWORDS
7
- } from "./chunk-YYBQ55V2.js";
8
- import "./chunk-DPGI742S.js";
7
+ } from "./chunk-DY7KDZUF.js";
8
+ import "./chunk-76LHNLGX.js";
9
9
  import {
10
10
  ALL_CHART_TYPES,
11
11
  chartTypes
12
- } from "./chunk-ZJJWON5O.js";
13
- import "./chunk-EXNKNJ65.js";
14
- import "./chunk-OLMWTJVU.js";
12
+ } from "./chunk-M5OOAP65.js";
13
+ import "./chunk-XOGQY4EC.js";
14
+ import "./chunk-5SI6T5A5.js";
15
15
  import "./chunk-5WRI5ZAA.js";
16
16
 
17
17
  // src/utils/offered-types.ts
@@ -258,6 +258,7 @@ var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
258
258
  description: "Show activation bars",
259
259
  values: ["on", "off"]
260
260
  },
261
+ autonumber: { description: "Number messages in source order" },
261
262
  "active-tag": { description: "Active tag group name" }
262
263
  })
263
264
  ],
@@ -632,25 +633,26 @@ var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
632
633
  ],
633
634
  [
634
635
  "countdown",
635
- // Live "N until X". One-shot `target` OR a recurring `every … on … at …`
636
- // rule (never both). `units`/`round`/`fields` shape the display; `since*`
637
- // number the ordinal. All space-separated key value (no colon).
636
+ // Live "N until X". One-shot `target` OR a recurring `since <date>` (+ an
637
+ // optional `every <cadence>`), never both. Every calendar field comes from
638
+ // the anchor, so `on`/`at`/`from` are gone (decision #56).
639
+ // `units`/`round`/`fields` shape the display; `since-label` opts into the
640
+ // ordinal eyebrow. All space-separated key value (no colon).
638
641
  withGlobals({
639
642
  ...DATE_DIRECTIVES,
640
643
  target: {
641
644
  description: "One-shot instant: a date/datetime (ISO, 7/4, or Jul 4) or `now` (key value)"
642
645
  },
643
646
  every: {
644
- description: "Recurring: every <year|month|week|N days|weeks|months> [on <instant>] [at <time>] [from <date>]"
645
- },
646
- on: {
647
- description: "Instant within the cadence: Aug 21 | 3rd Tuesday | last Friday | Friday"
648
- },
649
- at: {
650
- description: "Time of day: 18:00 | 6pm | 6:30pm; default midnight"
651
- },
652
- from: {
653
- description: "Interval anchor date: every [N] day|week|month from <date> (e.g. every month from 2026-01-31)"
647
+ description: "Cadence only \u2014 year | month | month by weekday | month by last weekday | week | day | N days|weeks|months. Omit it and yearly is assumed",
648
+ values: [
649
+ "year",
650
+ "month",
651
+ "month by weekday",
652
+ "month by last weekday",
653
+ "week",
654
+ "day"
655
+ ]
654
656
  },
655
657
  units: {
656
658
  description: "human (default) | days | full | clock | weeks | words"
@@ -665,9 +667,11 @@ var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
665
667
  },
666
668
  lang: { description: "Locale for words/month names (en)" },
667
669
  "on-day": { description: "Text shown on the occurrence day (recurring)" },
668
- since: { description: 'Anchor year \u2192 enables the ordinal ("7th")' },
670
+ since: {
671
+ description: "Recurring anchor \u2014 the whole origin instant (2015-06-14, or 2026-01-05T18:00 for a timed one). Every calendar field derives from it"
672
+ },
669
673
  "since-label": {
670
- description: 'Eyebrow template: Nth \u2192 ordinal word, N \u2192 number (e.g. "Nth Anniversary")'
674
+ description: 'Opt into the ordinal eyebrow: Nth \u2192 ordinal word, N \u2192 number (e.g. "Nth Anniversary")'
671
675
  },
672
676
  expired: { description: "Text shown once a one-shot target passes" }
673
677
  })