@diagrammo/dgmo 0.52.0 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/.cursorrules +59 -58
  2. package/.github/copilot-instructions.md +59 -58
  3. package/.windsurfrules +59 -58
  4. package/SKILL.md +59 -58
  5. package/dist/advanced.d.ts +101 -230
  6. package/dist/advanced.js +330 -658
  7. package/dist/analyzer-TDN5KJFP.js +15 -0
  8. package/dist/auto.css +14 -6
  9. package/dist/auto.js +163 -139
  10. package/dist/auto.mjs +1859 -885
  11. package/dist/block.css +14 -6
  12. package/dist/block.js +96 -81
  13. package/dist/calculator-VBIT6GQF.js +11 -0
  14. package/dist/chart-meta-CPNVUZ5J.d.ts +232 -0
  15. package/dist/chart-meta.d.ts +2 -0
  16. package/dist/chart-meta.js +108 -0
  17. package/dist/charts-d3-25E4VWXO.js +27 -0
  18. package/dist/chunk-2CW5ZTNH.js +58 -0
  19. package/dist/{chunk-BPY242XU.js → chunk-2NYXI35Z.js} +32 -14
  20. package/dist/{chunk-AUIM2NVH.js → chunk-2NZOHEP4.js} +7 -8
  21. package/dist/{chunk-HFMYN6N2.js → chunk-3B2GXZCX.js} +4 -3
  22. package/dist/chunk-3FRO35WW.js +1158 -0
  23. package/dist/{chunk-J7TLCB2Q.js → chunk-3IUHKMJI.js} +2 -2
  24. package/dist/{chunk-R3YSD62R.js → chunk-3KHJJP3J.js} +3 -3
  25. package/dist/{chunk-6LBQ7ELG.js → chunk-3SBHODJ4.js} +36 -17
  26. package/dist/{chunk-4UNQ6X24.js → chunk-3SEEP2JM.js} +4 -4
  27. package/dist/{chunk-7L4UJOY6.js → chunk-3TYUXC7D.js} +2 -2
  28. package/dist/{chunk-Y2ZE3MSG.js → chunk-43E26CDA.js} +2 -2
  29. package/dist/{chunk-CCNDLW7Z.js → chunk-47JNEKJA.js} +9 -9
  30. package/dist/{chunk-WCT3NYCV.js → chunk-4ASYQ347.js} +33 -8
  31. package/dist/{chunk-I5IGB56C.js → chunk-4QV26TEG.js} +41 -1
  32. package/dist/{chunk-INE5YJBZ.js → chunk-4T6OCSJ2.js} +8 -8
  33. package/dist/{chunk-CXK4DZH3.js → chunk-4W2PE66Q.js} +12 -2
  34. package/dist/{chunk-7KINELPI.js → chunk-4ZIKWVSQ.js} +17 -16
  35. package/dist/{chunk-JED6ZDEE.js → chunk-5HWPEYWB.js} +2 -2
  36. package/dist/{chunk-HWX6ZHF3.js → chunk-5VXU6MND.js} +6 -6
  37. package/dist/{chunk-44VCIPHF.js → chunk-5XSNLXU5.js} +23 -20
  38. package/dist/{chunk-4AQRFDXL.js → chunk-62Y27T4C.js} +2 -2
  39. package/dist/{chunk-QHXCAEMX.js → chunk-6KL7TFLS.js} +5 -5
  40. package/dist/{chunk-5BHJZH62.js → chunk-6OYDOQ2Q.js} +18 -6
  41. package/dist/{chunk-5HILBT7X.js → chunk-7JDTNFAK.js} +3 -3
  42. package/dist/{chunk-JRCOYRRH.js → chunk-7K6NDSXH.js} +9 -9
  43. package/dist/{chunk-5NGAO4QK.js → chunk-7SP4C6EV.js} +11 -11
  44. package/dist/{chunk-I46X5VUA.js → chunk-7TF3QOOD.js} +25 -1
  45. package/dist/{chunk-WRNFDFPU.js → chunk-7U4OR7CD.js} +2 -2
  46. package/dist/{chunk-5RP7JRVP.js → chunk-7UPFTBOW.js} +21 -17
  47. package/dist/{chunk-AAXZDUOV.js → chunk-A3BDLDYG.js} +17 -16
  48. package/dist/{chunk-GCYTI3DE.js → chunk-ADCHLNWT.js} +56 -10
  49. package/dist/{chunk-QBZYACOG.js → chunk-ADYKAKE3.js} +3 -3
  50. package/dist/{chunk-HHKO6SKY.js → chunk-AHTTKERF.js} +3 -3
  51. package/dist/{chunk-BKVOYV6I.js → chunk-AJFHNS67.js} +15 -15
  52. package/dist/{chunk-EMLPOL77.js → chunk-AQEYUVGJ.js} +124 -41
  53. package/dist/{chunk-3LK5DNED.js → chunk-B4XS2AF2.js} +3 -3
  54. package/dist/{chunk-REJAIQ5S.js → chunk-B7N5KYXQ.js} +16 -16
  55. package/dist/chunk-BEOAKGNA.js +484 -0
  56. package/dist/{chunk-SMRFPVLQ.js → chunk-BM7MG6HT.js} +4 -4
  57. package/dist/{chunk-P3NRSSUU.js → chunk-BULHGPHK.js} +3 -3
  58. package/dist/{chunk-QZX5S6R3.js → chunk-BWYFIVZF.js} +149 -89
  59. package/dist/{chunk-UBLHQTLV.js → chunk-BZJIITYM.js} +11 -10
  60. package/dist/{chunk-PRI2OD4E.js → chunk-C2UORMIA.js} +11 -6
  61. package/dist/{chunk-3YRPZ7ZZ.js → chunk-CCGWX6AO.js} +4 -4
  62. package/dist/{chunk-H7KENAZO.js → chunk-COJW2NEY.js} +73 -13
  63. package/dist/{chunk-WBRZJOEC.js → chunk-COVYNAKJ.js} +6 -6
  64. package/dist/{chunk-7QE3XMRK.js → chunk-CSHFU6LT.js} +13 -13
  65. package/dist/{chunk-6EJITS44.js → chunk-DLU643TF.js} +7 -7
  66. package/dist/{chunk-LBMS4AW6.js → chunk-DPGQ5UMO.js} +14 -14
  67. package/dist/{chunk-LTXOLDUZ.js → chunk-EAI6XJ7D.js} +12 -5
  68. package/dist/{chunk-FT3ZYWET.js → chunk-EPRF3ZRV.js} +11 -10
  69. package/dist/chunk-EQOMY4PY.js +404 -0
  70. package/dist/{chunk-USZW2HHU.js → chunk-EQW6HOP4.js} +4 -3
  71. package/dist/{chunk-HBPDFCQY.js → chunk-F7XM366V.js} +10 -9
  72. package/dist/{chunk-DYWQFQJP.js → chunk-FFVFZLRT.js} +57 -24
  73. package/dist/{chunk-77FGAVZC.js → chunk-FR6UFVSV.js} +19 -17
  74. package/dist/{chunk-MUE65OTD.js → chunk-FVMKCZHF.js} +8 -6
  75. package/dist/{chunk-3QD7VP3U.js → chunk-GK32ZFZY.js} +17 -10
  76. package/dist/{chunk-TJVLKNGR.js → chunk-GKYHWJXI.js} +5 -5
  77. package/dist/{chunk-FQMUHRVC.js → chunk-GQ5ECRP4.js} +13 -10
  78. package/dist/{chunk-5QKQSSPO.js → chunk-GRM2A4BG.js} +4 -4
  79. package/dist/{chunk-OTOHI4JO.js → chunk-H3HFC3SQ.js} +2 -2
  80. package/dist/{chunk-BPIZNB5O.js → chunk-HAA25PLC.js} +10 -10
  81. package/dist/{chunk-YIBAWQGJ.js → chunk-HFEOOQ46.js} +4 -4
  82. package/dist/{chunk-J76PIKAT.js → chunk-HO3RCNF6.js} +3 -3
  83. package/dist/{chunk-7DF4J4RL.js → chunk-I47VHSPS.js} +19 -13
  84. package/dist/{chunk-5SEVICBT.js → chunk-ICKXIMBA.js} +10 -9
  85. package/dist/{chunk-A44USUV7.js → chunk-ICZ7M6IZ.js} +23 -17
  86. package/dist/{chunk-SWSIKFEB.js → chunk-IOIMQHQ6.js} +4 -4
  87. package/dist/{chunk-6HQH6JZE.js → chunk-IYNKLCAZ.js} +7 -7
  88. package/dist/{chunk-YAA6IID3.js → chunk-J7HQPVYH.js} +2 -2
  89. package/dist/{chunk-WBM7ZNDI.js → chunk-JYDMBWRP.js} +35 -18
  90. package/dist/{chunk-ZJV7GYR4.js → chunk-KBVOVDYP.js} +8 -8
  91. package/dist/{chunk-ICPJPQ5C.js → chunk-KDK5EKUR.js} +3 -3
  92. package/dist/{chunk-FHGVORFO.js → chunk-KINOX74I.js} +12 -12
  93. package/dist/{chunk-XD6ZYURY.js → chunk-KQ3FNRGR.js} +7 -14
  94. package/dist/{chunk-3HGU63UY.js → chunk-KQYQECWQ.js} +17 -16
  95. package/dist/{chunk-MUVJ57EP.js → chunk-KS5ZSM5T.js} +20 -17
  96. package/dist/{chunk-FY5MSZAP.js → chunk-KV4HLIJE.js} +21 -6
  97. package/dist/{chunk-LGT3PZCJ.js → chunk-LPJ6H5X4.js} +17 -17
  98. package/dist/{chunk-ONU3U4GL.js → chunk-LRSW4JLE.js} +52 -16
  99. package/dist/{chunk-TPFKKXCB.js → chunk-M24VXUFG.js} +7 -7
  100. package/dist/{chunk-QJMKPUYK.js → chunk-M3H7ZE6C.js} +21 -14
  101. package/dist/{chunk-QVENJMNX.js → chunk-MEQYZZFR.js} +2 -2
  102. package/dist/{chunk-75G3Q4DK.js → chunk-MTZOXISJ.js} +9 -9
  103. package/dist/{chunk-J7KJR3R6.js → chunk-N7BSBAVP.js} +133 -696
  104. package/dist/{chunk-VQOCMUWI.js → chunk-NUTWTV6G.js} +13 -11
  105. package/dist/{chunk-7BIZCTAX.js → chunk-O576GYAP.js} +3 -3
  106. package/dist/{chunk-H6PI3KJT.js → chunk-ODUT5WMC.js} +2 -2
  107. package/dist/{chunk-AL672HNE.js → chunk-OJ435DQZ.js} +17 -7
  108. package/dist/{chunk-3HF5YEFJ.js → chunk-OR3R27CU.js} +4 -4
  109. package/dist/{chunk-QGATPIPX.js → chunk-OSXQKC3S.js} +35 -23
  110. package/dist/{chunk-FUPF2UYQ.js → chunk-PIXZTCKH.js} +51 -108
  111. package/dist/{chunk-QOOUC2J5.js → chunk-Q5IHQ4NW.js} +12 -2
  112. package/dist/{chunk-4IHAV6O7.js → chunk-QBYP2FBZ.js} +10 -478
  113. package/dist/{chunk-GU46PPT3.js → chunk-QXGACPS2.js} +5 -5
  114. package/dist/{chunk-FMDSF3OV.js → chunk-QZAW5SFH.js} +2 -2
  115. package/dist/{chunk-YTMTPUH4.js → chunk-R5BGGBFF.js} +4 -4
  116. package/dist/{chunk-KGVZ5VGH.js → chunk-RIEAN4D5.js} +16 -12
  117. package/dist/{chunk-5223KXFD.js → chunk-RJ5LBZ5U.js} +7 -7
  118. package/dist/{chunk-K4EOKJA6.js → chunk-RRGKMJYL.js} +45 -18
  119. package/dist/{chunk-TTIM6YTT.js → chunk-S7FOIURR.js} +14 -13
  120. package/dist/{chunk-IM6PDDCE.js → chunk-S7YFT3PO.js} +78 -23
  121. package/dist/{chunk-ZEF5M5MB.js → chunk-SBOAZ7YK.js} +82 -296
  122. package/dist/{chunk-6NYWYNBI.js → chunk-SSHS42QG.js} +6 -6
  123. package/dist/{chunk-NNS4E7CW.js → chunk-T3FAJAJT.js} +18 -9
  124. package/dist/{chunk-ROOE4R4Y.js → chunk-T7Y554OK.js} +146 -18
  125. package/dist/chunk-TGOMHUOV.js +218 -0
  126. package/dist/{chunk-K2I2XOZD.js → chunk-TJN2OIVG.js} +30 -15
  127. package/dist/{chunk-VILVLS7P.js → chunk-TLNVYWPA.js} +8 -4
  128. package/dist/{chunk-GJFAMOGK.js → chunk-U4IN6AHE.js} +7 -7
  129. package/dist/chunk-U7VO6JAA.js +566 -0
  130. package/dist/{chunk-MX2EY5Y7.js → chunk-UEU6IYKY.js} +2 -2
  131. package/dist/{chunk-J6QROYDA.js → chunk-UIT7E6UF.js} +26 -10
  132. package/dist/{chunk-Z72XRXD4.js → chunk-UJRTPOHH.js} +3 -3
  133. package/dist/{chunk-TYS6CSS5.js → chunk-UU6LUYUH.js} +2 -2
  134. package/dist/{chunk-VL2O2F3W.js → chunk-VHO3YBTB.js} +2 -2
  135. package/dist/{chunk-4YFKQ5WT.js → chunk-VMSBMIHW.js} +5 -5
  136. package/dist/{chunk-Z5QVYKR7.js → chunk-VQFDBNYF.js} +4 -4
  137. package/dist/{chunk-UNURMIQO.js → chunk-W6PCFRPL.js} +4 -4
  138. package/dist/{chunk-FFUN5D66.js → chunk-WF64MW5G.js} +2 -2
  139. package/dist/{chunk-T4A4TSTJ.js → chunk-WKNAJ4BR.js} +20 -18
  140. package/dist/{chunk-CIRFIL4M.js → chunk-WW4BQ744.js} +11 -11
  141. package/dist/{chunk-ARGMQ3H4.js → chunk-WWHECSYZ.js} +3 -3
  142. package/dist/{chunk-ZNWAYU6N.js → chunk-XWODFBHJ.js} +73 -18
  143. package/dist/{chunk-HQQNCY7W.js → chunk-YENNFS5F.js} +10 -10
  144. package/dist/{chunk-TLVIHFRO.js → chunk-ZKPPI6BF.js} +2 -2
  145. package/dist/cli.cjs +173 -157
  146. package/dist/clock.js +9 -1
  147. package/dist/completion-registry.d.ts +129 -0
  148. package/dist/completion-registry.js +1270 -0
  149. package/dist/{compute-G55RG53N.js → compute-JAP5E2E4.js} +2 -2
  150. package/dist/countdown.js +4 -3
  151. package/dist/dgmo-router-TGZWFIZO.js +88 -0
  152. package/dist/dimensions-L6BXQXXL.js +22 -0
  153. package/dist/editor.js +51 -5
  154. package/dist/element.js +163 -139
  155. package/dist/element.mjs +1859 -885
  156. package/dist/flowchart-parser-UKYOW3VM.js +21 -0
  157. package/dist/{flowchart-renderer-MNCDS7MV.js → flowchart-renderer-DCFKUDDR.js} +16 -16
  158. package/dist/highlight.js +55 -6
  159. package/dist/index.d.ts +4 -2
  160. package/dist/index.js +89 -81
  161. package/dist/layout-25Y3VDYF.js +19 -0
  162. package/dist/layout-4SPLI4HG.js +15 -0
  163. package/dist/layout-5XGYNYVT.js +9 -0
  164. package/dist/{layout-OAC4PEAC.js → layout-A6OIGZN2.js} +7 -7
  165. package/dist/layout-AZUPXWSK.js +15 -0
  166. package/dist/{layout-F4WO357A.js → layout-CAAKQX4W.js} +3 -3
  167. package/dist/{layout-A5UHRWVH.js → layout-CB3XWCOI.js} +3 -3
  168. package/dist/layout-CH4HFFRD.js +15 -0
  169. package/dist/layout-G2ABQJQZ.js +20 -0
  170. package/dist/{layout-7QXCNOVS.js → layout-HBWT2G23.js} +3 -3
  171. package/dist/{layout-2L3WMRYU.js → layout-ITLPDG6M.js} +9 -8
  172. package/dist/layout-NF4EWFLT.js +17 -0
  173. package/dist/layout-NY7MHJCL.js +15 -0
  174. package/dist/layout-QBNAMEOA.js +19 -0
  175. package/dist/layout-SP7HJWKA.js +17 -0
  176. package/dist/{layout-search-55FU6HD3.js → layout-search-LUI475P3.js} +56 -35
  177. package/dist/legend-constants-B77VKB3R.js +54 -0
  178. package/dist/{palettes-UDLZ2SA4.js → palettes-FGTNFARW.js} +4 -4
  179. package/dist/parser-2UWWNTFL.js +12 -0
  180. package/dist/parser-3RXYQSA7.js +18 -0
  181. package/dist/parser-5C3PEZK3.js +11 -0
  182. package/dist/parser-66RYGJRB.js +20 -0
  183. package/dist/parser-6GN5YJBJ.js +13 -0
  184. package/dist/parser-6MQM7WT3.js +15 -0
  185. package/dist/{parser-DQAFLUJB.js → parser-7UI6UQ7B.js} +7 -7
  186. package/dist/parser-B2A7XOAK.js +12 -0
  187. package/dist/parser-CCNJKDDA.js +16 -0
  188. package/dist/parser-ESHNUFME.js +13 -0
  189. package/dist/parser-F4FEU57T.js +11 -0
  190. package/dist/parser-FHRMFUNX.js +15 -0
  191. package/dist/parser-FPCWDYQV.js +13 -0
  192. package/dist/parser-FY3YFFBS.js +20 -0
  193. package/dist/parser-GML6V2KZ.js +14 -0
  194. package/dist/parser-HA3PF5FL.js +15 -0
  195. package/dist/parser-KTYF6WO5.js +11 -0
  196. package/dist/{parser-ZL5QUFVH.js → parser-LTA2BOZO.js} +5 -5
  197. package/dist/parser-LU7UAKNB.js +13 -0
  198. package/dist/parser-MHKYQPC2.js +11 -0
  199. package/dist/parser-MVSYFK63.js +17 -0
  200. package/dist/parser-O7YQYFEN.js +15 -0
  201. package/dist/parser-OPIXXUY4.js +21 -0
  202. package/dist/parser-S4EJPNVN.js +19 -0
  203. package/dist/parser-T3D7BV6O.js +11 -0
  204. package/dist/{parser-YKYMQG3B.js → parser-VVE4THG3.js} +6 -6
  205. package/dist/parser-WPPJGB4R.js +12 -0
  206. package/dist/parser-X5XLFY4Z.js +22 -0
  207. package/dist/parser-XCPMEB2Z.js +11 -0
  208. package/dist/parser-XRDUX2AR.js +14 -0
  209. package/dist/parser-YPWYT46P.js +16 -0
  210. package/dist/parser-YULS5MLD.js +13 -0
  211. package/dist/pert.d.ts +2 -0
  212. package/dist/registry-CaSw0PSH.d.ts +350 -0
  213. package/dist/renderer-2DME63VZ.js +16 -0
  214. package/dist/renderer-3VY3VXJE.js +37 -0
  215. package/dist/renderer-4A32DX5L.js +24 -0
  216. package/dist/renderer-4K5YYX5R.js +28 -0
  217. package/dist/renderer-6CFML5G3.js +22 -0
  218. package/dist/renderer-7HMZ5OCJ.js +16 -0
  219. package/dist/renderer-7ZNVOVFG.js +16 -0
  220. package/dist/{renderer-CQY6ATOS.js → renderer-B7Y6I7JX.js} +9 -8
  221. package/dist/renderer-C3RI4OPJ.js +33 -0
  222. package/dist/renderer-CJ56SUMF.js +26 -0
  223. package/dist/renderer-COJZZ4F6.js +25 -0
  224. package/dist/renderer-FXMGCSRP.js +26 -0
  225. package/dist/{renderer-HSHHVYWF.js → renderer-G4UOW3RH.js} +7 -7
  226. package/dist/renderer-HQ4JFZOV.js +27 -0
  227. package/dist/{renderer-NHO46CT2.js → renderer-K7XLVPH5.js} +6 -6
  228. package/dist/{renderer-ZWIH4WDW.js → renderer-LHVCKEWF.js} +13 -13
  229. package/dist/renderer-OZX5KGQM.js +21 -0
  230. package/dist/{renderer-3F7OS2AX.js → renderer-P3YQES7B.js} +16 -16
  231. package/dist/renderer-PLVIARM7.js +24 -0
  232. package/dist/renderer-RA4PTAMF.js +19 -0
  233. package/dist/renderer-RMAM2SOJ.js +28 -0
  234. package/dist/renderer-SES7QZYL.js +37 -0
  235. package/dist/renderer-TQ5QDZOE.js +22 -0
  236. package/dist/renderer-V5SNTPAM.js +27 -0
  237. package/dist/{renderer-5DAKMIU2.js → renderer-WCWI4I6A.js} +5 -5
  238. package/dist/renderer-WVD6G2TS.js +34 -0
  239. package/dist/{renderer-DT4XRFEP.js → renderer-X2LYSMLU.js} +7 -7
  240. package/dist/renderer-Y3NXZINM.js +24 -0
  241. package/dist/{renderer-KNFTTOBL.js → renderer-YEFOOULC.js} +14 -14
  242. package/dist/renderer-YP3P6UVT.js +24 -0
  243. package/dist/renderer-YVMETH6V.js +29 -0
  244. package/dist/renderer-Z4GNKNXO.js +24 -0
  245. package/dist/renderer-radial-VYBZAXXE.js +21 -0
  246. package/dist/{resolver-EMTGNR3D.js → resolver-WFKZYBJ2.js} +4 -4
  247. package/dist/state-parser-VIW2WNA5.js +19 -0
  248. package/dist/state-renderer-H22AQD3U.js +38 -0
  249. package/dist/{themes-32xj5ZTW.d.ts → themes-tbBkIVsn.d.ts} +2 -349
  250. package/docs/ai-integration.md +59 -58
  251. package/docs/language-reference.md +323 -286
  252. package/fonts/Inter-Bold.woff2 +0 -0
  253. package/fonts/Inter-Regular.woff2 +0 -0
  254. package/gallery/fixtures/boxes-and-lines-diverging.dgmo +1 -2
  255. package/gallery/fixtures/boxes-and-lines.dgmo +1 -1
  256. package/gallery/fixtures/clock.dgmo +1 -1
  257. package/gallery/fixtures/event-line.dgmo +1 -1
  258. package/gallery/fixtures/gantt-full.dgmo +1 -1
  259. package/gallery/fixtures/gantt-sprints.dgmo +9 -9
  260. package/gallery/fixtures/gantt.dgmo +1 -1
  261. package/gallery/fixtures/legacy-syntax-backcompat.dgmo +16 -0
  262. package/gallery/fixtures/state-tags.dgmo +40 -0
  263. package/gallery/fixtures/swimlane.dgmo +1 -1
  264. package/gallery/fixtures/timeline-intraday.dgmo +1 -1
  265. package/package.json +9 -1
  266. package/dist/analyzer-BJ54GIFB.js +0 -15
  267. package/dist/calculator-LDYQCDDY.js +0 -11
  268. package/dist/charts-d3-MXEP6BNP.js +0 -26
  269. package/dist/chunk-BRENJ2BQ.js +0 -714
  270. package/dist/chunk-FQ7HTV52.js +0 -364
  271. package/dist/dgmo-router-X7ZGAPIE.js +0 -86
  272. package/dist/dimensions-45H6JQEY.js +0 -22
  273. package/dist/flowchart-parser-UKELHBSB.js +0 -21
  274. package/dist/layout-46N4JJYK.js +0 -17
  275. package/dist/layout-A4XWNVID.js +0 -14
  276. package/dist/layout-AM2JWW3X.js +0 -15
  277. package/dist/layout-EE6GE46Y.js +0 -17
  278. package/dist/layout-G23F7LDH.js +0 -9
  279. package/dist/layout-GM4UGR7B.js +0 -19
  280. package/dist/layout-GQQJXNYH.js +0 -15
  281. package/dist/layout-IIE2S5FK.js +0 -20
  282. package/dist/layout-VMCRX66I.js +0 -14
  283. package/dist/layout-ZDOSXL5G.js +0 -19
  284. package/dist/parser-2ECN6JA2.js +0 -16
  285. package/dist/parser-4WTIHM5J.js +0 -11
  286. package/dist/parser-5H2BTSJQ.js +0 -11
  287. package/dist/parser-75KVXUNS.js +0 -16
  288. package/dist/parser-774AC53T.js +0 -13
  289. package/dist/parser-BE4YCSRU.js +0 -11
  290. package/dist/parser-CNGUQUQI.js +0 -11
  291. package/dist/parser-DEUUSQIN.js +0 -22
  292. package/dist/parser-EYCKNKQA.js +0 -21
  293. package/dist/parser-FXISIU6A.js +0 -14
  294. package/dist/parser-GTB4XC7P.js +0 -18
  295. package/dist/parser-GVEPAUSD.js +0 -12
  296. package/dist/parser-HSQGTY4G.js +0 -19
  297. package/dist/parser-HVKRINUS.js +0 -11
  298. package/dist/parser-J5MIEYO4.js +0 -15
  299. package/dist/parser-KMZIXLDZ.js +0 -13
  300. package/dist/parser-LJHXWSXU.js +0 -14
  301. package/dist/parser-PT3W72G5.js +0 -15
  302. package/dist/parser-SBJQDPHL.js +0 -15
  303. package/dist/parser-SUWWWCMX.js +0 -12
  304. package/dist/parser-SXDRNZOA.js +0 -13
  305. package/dist/parser-UMILOW3M.js +0 -14
  306. package/dist/parser-UP3AZ367.js +0 -13
  307. package/dist/parser-WHPRV3X5.js +0 -20
  308. package/dist/parser-WX3UODSJ.js +0 -12
  309. package/dist/parser-XCIEN3KN.js +0 -13
  310. package/dist/parser-XIRTUMVN.js +0 -18
  311. package/dist/parser-YKCGIG45.js +0 -11
  312. package/dist/parser-ZGM2OJ6Y.js +0 -22
  313. package/dist/renderer-4QB4K7Q3.js +0 -24
  314. package/dist/renderer-5H4SY7YY.js +0 -22
  315. package/dist/renderer-5PIQPFOX.js +0 -16
  316. package/dist/renderer-6MU37QF5.js +0 -19
  317. package/dist/renderer-AQVMWJ4M.js +0 -27
  318. package/dist/renderer-BDDW6K7N.js +0 -24
  319. package/dist/renderer-BNB3VIDY.js +0 -26
  320. package/dist/renderer-CVW75CXL.js +0 -37
  321. package/dist/renderer-ERHBSTQT.js +0 -25
  322. package/dist/renderer-IDPVUFNB.js +0 -28
  323. package/dist/renderer-ILX6BGKR.js +0 -21
  324. package/dist/renderer-JP663HKG.js +0 -22
  325. package/dist/renderer-MVUZBESR.js +0 -16
  326. package/dist/renderer-N4EBR2FV.js +0 -28
  327. package/dist/renderer-NO2QJ5LZ.js +0 -27
  328. package/dist/renderer-OGFV5RXX.js +0 -34
  329. package/dist/renderer-PDLESJMS.js +0 -37
  330. package/dist/renderer-T4MTNINC.js +0 -24
  331. package/dist/renderer-TOUGFGTM.js +0 -24
  332. package/dist/renderer-U3KPD43Y.js +0 -34
  333. package/dist/renderer-X334IJU2.js +0 -26
  334. package/dist/renderer-Y5OAMOCR.js +0 -23
  335. package/dist/renderer-YONAKAJU.js +0 -16
  336. package/dist/renderer-YWMI6Y2U.js +0 -29
  337. package/dist/renderer-radial-7CGZMVMS.js +0 -21
  338. package/dist/state-parser-BATWAID2.js +0 -18
  339. package/dist/state-renderer-3FKZJ3LP.js +0 -34
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-PDKUANDZ.js";
5
5
  import {
6
6
  layoutGraph
7
- } from "./chunk-HFMYN6N2.js";
7
+ } from "./chunk-3B2GXZCX.js";
8
8
  import {
9
9
  appendArrowheadMarkers
10
10
  } from "./chunk-LP7EC4MI.js";
@@ -14,7 +14,7 @@ import {
14
14
  renderNoteBadge,
15
15
  renderNoteBox,
16
16
  renderNoteConnector
17
- } from "./chunk-J7TLCB2Q.js";
17
+ } from "./chunk-3IUHKMJI.js";
18
18
  import {
19
19
  EDGE_STROKE_WIDTH,
20
20
  NODE_STROKE_WIDTH
@@ -22,6 +22,12 @@ import {
22
22
  import {
23
23
  ScaleContext
24
24
  } from "./chunk-YYVTBZZC.js";
25
+ import {
26
+ renderIntegratedLegend
27
+ } from "./chunk-2NZOHEP4.js";
28
+ import {
29
+ getMaxLegendReservedHeight
30
+ } from "./chunk-J7HQPVYH.js";
25
31
  import {
26
32
  TITLE_FONT_SIZE,
27
33
  TITLE_FONT_WEIGHT,
@@ -30,21 +36,27 @@ import {
30
36
  import {
31
37
  FONT_FAMILY
32
38
  } from "./chunk-6KFWC4CO.js";
39
+ import {
40
+ parseState
41
+ } from "./chunk-T7Y554OK.js";
33
42
  import {
34
43
  measureText
35
- } from "./chunk-WCT3NYCV.js";
44
+ } from "./chunk-4ASYQ347.js";
36
45
  import {
37
46
  contrastText,
38
47
  mix,
39
48
  shapeFill,
40
49
  themeBaseBg
41
- } from "./chunk-WBM7ZNDI.js";
50
+ } from "./chunk-JYDMBWRP.js";
42
51
  import {
43
- parseState
44
- } from "./chunk-ROOE4R4Y.js";
52
+ resolveActiveTagGroup,
53
+ resolveTagColor,
54
+ tagAttrKey
55
+ } from "./chunk-AHTTKERF.js";
45
56
  import {
46
- fillModeFromOptions
47
- } from "./chunk-BRENJ2BQ.js";
57
+ fillModeFromOptions,
58
+ legendSuppressed
59
+ } from "./chunk-3FRO35WW.js";
48
60
 
49
61
  // src/graph/state-renderer.ts
50
62
  import * as d3Selection from "d3-selection";
@@ -100,6 +112,23 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
100
112
  const sGroupExtraPadding = ctx.aesthetic(GROUP_EXTRA_PADDING);
101
113
  const showTitle = !!graph.title && graph.options["no-title"] !== "on";
102
114
  const titleHeight = showTitle ? 40 : 0;
115
+ const tagGroups = graph.tagGroups ?? [];
116
+ const activeTagGroup = resolveActiveTagGroup(
117
+ tagGroups,
118
+ graph.options["active-tag"]
119
+ );
120
+ const legendGroups = tagGroups;
121
+ const hasLegend = legendGroups.length > 0 && !legendSuppressed(graph.options);
122
+ const legendH = hasLegend ? ctx.structural(
123
+ getMaxLegendReservedHeight(
124
+ {
125
+ groups: legendGroups,
126
+ position: { placement: "top-center", titleRelation: "below-title" },
127
+ mode: exportDims ? "export" : "preview"
128
+ },
129
+ width
130
+ )
131
+ ) + 8 : 0;
103
132
  const diagramW = layout.width;
104
133
  const diagramH = layout.height;
105
134
  const { scale, offsetX, offsetY, canvasHeight } = fitDiagramToCanvas({
@@ -108,7 +137,9 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
108
137
  diagramW,
109
138
  diagramH,
110
139
  padding: sDiagramPadding,
111
- titleHeight,
140
+ // The legend band sits directly under the title, so it reserves the same
141
+ // top strip fitDiagramToCanvas already offsets the diagram by.
142
+ titleHeight: titleHeight + legendH,
112
143
  maxScale: MAX_SCALE,
113
144
  exportMode: !!exportDims
114
145
  });
@@ -141,6 +172,21 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
141
172
  }
142
173
  }
143
174
  }
175
+ if (hasLegend) {
176
+ const legendG = svg.append("g").attr("transform", `translate(0, ${titleHeight + 4})`);
177
+ renderIntegratedLegend(legendG, {
178
+ groups: legendGroups,
179
+ activeGroup: activeTagGroup,
180
+ mode: exportDims ? "export" : "preview",
181
+ // Inactive sibling groups stay visible as collapsed pills so the user
182
+ // can click one to flip the active colouring dimension (as in b&l).
183
+ showInactivePills: true,
184
+ palette,
185
+ isDark,
186
+ width
187
+ });
188
+ legendG.selectAll("[data-legend-group]").classed("st-legend-group", true);
189
+ }
144
190
  const contentG = svg.append("g").attr("transform", `translate(${offsetX}, ${offsetY}) scale(${scale})`);
145
191
  for (const group of layout.groups) {
146
192
  if (group.collapsed) continue;
@@ -246,9 +292,22 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
246
292
  const colorOff = graph.options?.["color"] === "off";
247
293
  const fillMode = fillModeFromOptions(graph.options ?? {});
248
294
  const noNotes = graph.options?.["no-notes"] === "on";
295
+ const mutableTagGroups = [...tagGroups];
296
+ const nodeIntentColor = (node) => node.color ?? (activeTagGroup ? resolveTagColor(
297
+ node.metadata ?? {},
298
+ mutableTagGroups,
299
+ activeTagGroup
300
+ ) : void 0);
249
301
  for (const node of layout.nodes) {
250
302
  const isCollapsedGroup = collapsedGroupIds.has(node.id);
251
303
  const nodeG = contentG.append("g").attr("transform", `translate(${node.x}, ${node.y})`).attr("class", isCollapsedGroup ? "st-group-wrapper st-node" : "st-node").attr("data-line-number", String(node.lineNumber)).attr("data-node-id", node.id).style("cursor", "pointer");
304
+ if (activeTagGroup && node.shape !== "pseudostate") {
305
+ const tagKey = tagAttrKey(activeTagGroup);
306
+ const metaValue = node.metadata?.[tagKey];
307
+ if (metaValue) {
308
+ nodeG.attr(`data-tag-${tagKey}`, metaValue.toLowerCase());
309
+ }
310
+ }
252
311
  if (isCollapsedGroup) {
253
312
  nodeG.attr("data-group-toggle", node.id).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "false").attr("aria-label", `Expand group ${node.label}`);
254
313
  }
@@ -263,7 +322,7 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
263
322
  } else if (isCollapsedGroup) {
264
323
  const w = node.width;
265
324
  const h = node.height;
266
- const groupColor = node.color ?? stateDefaultColor(palette, colorOff);
325
+ const groupColor = nodeIntentColor(node) ?? stateDefaultColor(palette, colorOff);
267
326
  const fillColor = shapeFill(palette, groupColor, isDark, {
268
327
  mode: fillMode
269
328
  });
@@ -284,14 +343,15 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
284
343
  } else {
285
344
  const w = node.width;
286
345
  const h = node.height;
346
+ const intentColor = nodeIntentColor(node);
287
347
  const resolvedFill = stateFill(
288
348
  palette,
289
349
  isDark,
290
- node.color,
350
+ intentColor,
291
351
  colorOff,
292
352
  fillMode
293
353
  );
294
- nodeG.append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", sStateCornerRadius).attr("ry", sStateCornerRadius).attr("fill", resolvedFill).attr("stroke", stateStroke(palette, node.color, colorOff)).attr("stroke-width", sNodeStrokeWidth);
354
+ nodeG.append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", sStateCornerRadius).attr("ry", sStateCornerRadius).attr("fill", resolvedFill).attr("stroke", stateStroke(palette, intentColor, colorOff)).attr("stroke-width", sNodeStrokeWidth);
295
355
  nodeG.append("text").attr("x", 0).attr("y", 0).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr(
296
356
  "fill",
297
357
  contrastText(
@@ -379,4 +439,4 @@ export {
379
439
  renderState,
380
440
  renderStateForExport
381
441
  };
382
- //# sourceMappingURL=chunk-H7KENAZO.js.map
442
+ //# sourceMappingURL=chunk-COJW2NEY.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  buildPlacedNotes
3
- } from "./chunk-JED6ZDEE.js";
3
+ } from "./chunk-5HWPEYWB.js";
4
4
  import {
5
5
  noteCanvasShift
6
6
  } from "./chunk-6EK55ART.js";
7
- import {
8
- measureText
9
- } from "./chunk-WCT3NYCV.js";
10
7
  import {
11
8
  resolveNotes
12
- } from "./chunk-FMDSF3OV.js";
9
+ } from "./chunk-QZAW5SFH.js";
10
+ import {
11
+ measureText
12
+ } from "./chunk-4ASYQ347.js";
13
13
 
14
14
  // src/class/layout.ts
15
15
  import dagre from "@dagrejs/dagre";
@@ -201,4 +201,4 @@ function layoutClassDiagram(parsed, options) {
201
201
  export {
202
202
  layoutClassDiagram
203
203
  };
204
- //# sourceMappingURL=chunk-WBRZJOEC.js.map
204
+ //# sourceMappingURL=chunk-COVYNAKJ.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  renderCollapseBar,
7
7
  renderNodeCard
8
- } from "./chunk-OTOHI4JO.js";
8
+ } from "./chunk-H3HFC3SQ.js";
9
9
  import {
10
10
  CARD_RADIUS,
11
11
  COLLAPSE_BAR_HEIGHT,
@@ -25,16 +25,16 @@ import {
25
25
  } from "./chunk-3CIOJ5YJ.js";
26
26
  import {
27
27
  layoutOrg
28
- } from "./chunk-QZX5S6R3.js";
28
+ } from "./chunk-BWYFIVZF.js";
29
29
  import {
30
30
  ScaleContext
31
31
  } from "./chunk-YYVTBZZC.js";
32
32
  import {
33
33
  renderIntegratedLegend
34
- } from "./chunk-AUIM2NVH.js";
34
+ } from "./chunk-2NZOHEP4.js";
35
35
  import {
36
36
  getMaxLegendReservedHeight
37
- } from "./chunk-YAA6IID3.js";
37
+ } from "./chunk-J7HQPVYH.js";
38
38
  import {
39
39
  TITLE_FONT_SIZE,
40
40
  TITLE_FONT_WEIGHT
@@ -42,6 +42,9 @@ import {
42
42
  import {
43
43
  FONT_FAMILY
44
44
  } from "./chunk-6KFWC4CO.js";
45
+ import {
46
+ parseOrg
47
+ } from "./chunk-T3FAJAJT.js";
45
48
  import {
46
49
  EYE_CLOSED_PATH,
47
50
  EYE_OPEN_PATH,
@@ -49,26 +52,23 @@ import {
49
52
  LEGEND_EYE_SIZE,
50
53
  LEGEND_GROUP_GAP,
51
54
  LEGEND_HEIGHT
52
- } from "./chunk-QOOUC2J5.js";
55
+ } from "./chunk-Q5IHQ4NW.js";
53
56
  import {
54
57
  measureText
55
- } from "./chunk-WCT3NYCV.js";
56
- import {
57
- parseOrg
58
- } from "./chunk-NNS4E7CW.js";
58
+ } from "./chunk-4ASYQ347.js";
59
59
  import {
60
60
  contrastText,
61
61
  mix,
62
62
  shapeFill,
63
63
  themeBaseBg
64
- } from "./chunk-WBM7ZNDI.js";
64
+ } from "./chunk-JYDMBWRP.js";
65
65
  import {
66
66
  resolveTagColor,
67
67
  tagAttrKey
68
- } from "./chunk-HHKO6SKY.js";
68
+ } from "./chunk-AHTTKERF.js";
69
69
  import {
70
70
  fillModeFromOptions
71
- } from "./chunk-BRENJ2BQ.js";
71
+ } from "./chunk-3FRO35WW.js";
72
72
 
73
73
  // src/org/renderer.ts
74
74
  import * as d3Selection from "d3-selection";
@@ -485,4 +485,4 @@ export {
485
485
  renderOrg,
486
486
  renderOrgForExport
487
487
  };
488
- //# sourceMappingURL=chunk-7QE3XMRK.js.map
488
+ //# sourceMappingURL=chunk-CSHFU6LT.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  GRAPH_DX
3
- } from "./chunk-I46X5VUA.js";
3
+ } from "./chunk-7TF3QOOD.js";
4
4
  import {
5
5
  tryCollectNote
6
- } from "./chunk-ARGMQ3H4.js";
6
+ } from "./chunk-WWHECSYZ.js";
7
7
  import {
8
8
  resolveNotes
9
- } from "./chunk-FMDSF3OV.js";
9
+ } from "./chunk-QZAW5SFH.js";
10
10
  import {
11
11
  parseInArrowLabel
12
- } from "./chunk-FFUN5D66.js";
12
+ } from "./chunk-WF64MW5G.js";
13
13
  import {
14
14
  displayName,
15
15
  normalizeName
@@ -21,7 +21,7 @@ import {
21
21
  measureIndent,
22
22
  parseFirstLine,
23
23
  tryParseSharedOption
24
- } from "./chunk-BRENJ2BQ.js";
24
+ } from "./chunk-3FRO35WW.js";
25
25
  import {
26
26
  NAME_DIAGNOSTIC_CODES,
27
27
  emit,
@@ -29,7 +29,7 @@ import {
29
29
  makeDgmoError,
30
30
  nameMergedMessage,
31
31
  suggest
32
- } from "./chunk-CXK4DZH3.js";
32
+ } from "./chunk-4W2PE66Q.js";
33
33
 
34
34
  // src/graph/flowchart-parser.ts
35
35
  function nodeId(shape, label) {
@@ -470,4 +470,4 @@ export {
470
470
  looksLikeFlowchart,
471
471
  extractSymbols
472
472
  };
473
- //# sourceMappingURL=chunk-6EJITS44.js.map
473
+ //# sourceMappingURL=chunk-DLU643TF.js.map
@@ -4,7 +4,7 @@ import {
4
4
  layoutC4Containers,
5
5
  layoutC4Context,
6
6
  layoutC4Deployment
7
- } from "./chunk-ONU3U4GL.js";
7
+ } from "./chunk-LRSW4JLE.js";
8
8
  import {
9
9
  renderInlineText
10
10
  } from "./chunk-3HDBAXF5.js";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-3CIOJ5YJ.js";
18
18
  import {
19
19
  renderIntegratedLegend
20
- } from "./chunk-AUIM2NVH.js";
20
+ } from "./chunk-2NZOHEP4.js";
21
21
  import {
22
22
  TITLE_FONT_SIZE,
23
23
  TITLE_FONT_WEIGHT
@@ -25,30 +25,30 @@ import {
25
25
  import {
26
26
  FONT_FAMILY
27
27
  } from "./chunk-6KFWC4CO.js";
28
- import {
29
- LEGEND_HEIGHT
30
- } from "./chunk-QOOUC2J5.js";
31
- import {
32
- measureText,
33
- wrapTextToWidth
34
- } from "./chunk-WCT3NYCV.js";
35
28
  import {
36
29
  parseC4
37
- } from "./chunk-BPY242XU.js";
30
+ } from "./chunk-2NYXI35Z.js";
38
31
  import {
39
32
  preprocessDescriptionLine
40
33
  } from "./chunk-IYULMRBE.js";
34
+ import {
35
+ LEGEND_HEIGHT
36
+ } from "./chunk-Q5IHQ4NW.js";
37
+ import {
38
+ measureText,
39
+ wrapTextToWidth
40
+ } from "./chunk-4ASYQ347.js";
41
41
  import {
42
42
  contrastText,
43
43
  mix,
44
44
  shapeFill
45
- } from "./chunk-WBM7ZNDI.js";
45
+ } from "./chunk-JYDMBWRP.js";
46
46
  import {
47
47
  tagAttrKey
48
- } from "./chunk-HHKO6SKY.js";
48
+ } from "./chunk-AHTTKERF.js";
49
49
  import {
50
50
  fillModeFromOptions
51
- } from "./chunk-BRENJ2BQ.js";
51
+ } from "./chunk-3FRO35WW.js";
52
52
 
53
53
  // src/c4/renderer.ts
54
54
  import * as d3Selection from "d3-selection";
@@ -1036,4 +1036,4 @@ export {
1036
1036
  renderC4Deployment,
1037
1037
  renderC4DeploymentForExport
1038
1038
  };
1039
- //# sourceMappingURL=chunk-LBMS4AW6.js.map
1039
+ //# sourceMappingURL=chunk-DPGQ5UMO.js.map
@@ -4,16 +4,16 @@ import {
4
4
  matchTagBlockHeading,
5
5
  stripDefaultModifier,
6
6
  tagAttrKey
7
- } from "./chunk-HHKO6SKY.js";
7
+ } from "./chunk-AHTTKERF.js";
8
8
  import {
9
9
  FILL_FAMILY_TOKENS,
10
10
  extractColor,
11
11
  measureIndent,
12
12
  parseFirstLine
13
- } from "./chunk-BRENJ2BQ.js";
13
+ } from "./chunk-3FRO35WW.js";
14
14
  import {
15
15
  emit
16
- } from "./chunk-CXK4DZH3.js";
16
+ } from "./chunk-4W2PE66Q.js";
17
17
 
18
18
  // src/swimlane/diagnostics.ts
19
19
  var SWIMLANE_DX = {
@@ -303,6 +303,12 @@ function parseSwimlane(content, palette) {
303
303
  options[trimmed.toLowerCase()] = "on";
304
304
  continue;
305
305
  }
306
+ const dirBool = indent === 0 ? trimmed.match(/^direction-(lr|tb)$/i) : null;
307
+ if (dirBool) {
308
+ direction = dirBool[1].toUpperCase();
309
+ options["direction"] = direction;
310
+ continue;
311
+ }
306
312
  if (indent === 0 && /^direction\s+/i.test(trimmed)) {
307
313
  const val = trimmed.replace(/^direction\s+/i, "").trim().toUpperCase();
308
314
  if (val === "LR" || val === "TB") {
@@ -525,7 +531,8 @@ function parseSwimlane(content, palette) {
525
531
  if (cIdx > 0) trimmed = trimmed.slice(0, cIdx).trim();
526
532
  if (!trimmed) continue;
527
533
  const indent = measureIndent(raw);
528
- if (indent === 0 && /^direction\s+/i.test(trimmed)) continue;
534
+ if (indent === 0 && /^direction(?:\s+|-(?:lr|tb)$)/i.test(trimmed))
535
+ continue;
529
536
  if (indent === 0 && FILL_FAMILY_TOKENS.has(trimmed.toLowerCase())) continue;
530
537
  if (matchTagBlockHeading(trimmed) && indent === 0) {
531
538
  inTagBlock = true;
@@ -685,4 +692,4 @@ export {
685
692
  SWIMLANE_DIAGNOSTICS,
686
693
  parseSwimlane
687
694
  };
688
- //# sourceMappingURL=chunk-LTXOLDUZ.js.map
695
+ //# sourceMappingURL=chunk-EAI6XJ7D.js.map
@@ -12,11 +12,11 @@ import {
12
12
  fillModeFromToken,
13
13
  measureIndent,
14
14
  parseFirstLine
15
- } from "./chunk-BRENJ2BQ.js";
15
+ } from "./chunk-3FRO35WW.js";
16
16
  import {
17
17
  makeDgmoError,
18
18
  makeFail
19
- } from "./chunk-CXK4DZH3.js";
19
+ } from "./chunk-4W2PE66Q.js";
20
20
 
21
21
  // src/countdown/parser.ts
22
22
  var TIME_24H_RE = /^(\d{1,2}):(\d{2})$/;
@@ -52,19 +52,20 @@ function parse24h(tok) {
52
52
  return { hour, minute };
53
53
  }
54
54
  function parseAt(rest, lineNum, softError) {
55
- const t = parse24h(rest.trim());
55
+ const tok = rest.trim();
56
+ const t = parse24h(tok);
56
57
  if (t) return t;
57
- const fixed = ampmTo24h(rest.trim());
58
- softError(
59
- lineNum,
60
- fixed ? `"at ${rest}": use 24h time (${fixed}).` : `"at" needs a 24h time like 18:00 (got "${rest}").`
61
- );
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}").`);
62
61
  return null;
63
62
  }
64
63
  function ampmTo24h(tok) {
65
64
  const m = tok.match(AMPM_RE);
66
65
  if (!m) return null;
67
- let hour = Number(m[1]) % 12;
66
+ const h = Number(m[1]);
67
+ if (h < 1 || h > 12) return null;
68
+ let hour = h % 12;
68
69
  if (/pm/i.test(m[3])) hour += 12;
69
70
  return `${String(hour).padStart(2, "0")}:${m[2] ?? "00"}`;
70
71
  }
@@ -545,4 +546,4 @@ export {
545
546
  targetToMs2 as targetToMs,
546
547
  parseCountdown
547
548
  };
548
- //# sourceMappingURL=chunk-FT3ZYWET.js.map
549
+ //# sourceMappingURL=chunk-EPRF3ZRV.js.map