@diagrammo/dgmo 0.50.2 → 0.52.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 (257) hide show
  1. package/.cursorrules +15 -19
  2. package/.github/copilot-instructions.md +15 -19
  3. package/.windsurfrules +15 -19
  4. package/SKILL.md +15 -19
  5. package/dist/advanced.d.ts +155 -65
  6. package/dist/advanced.js +231 -189
  7. package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
  8. package/dist/auto.css +31 -8
  9. package/dist/auto.d.ts +6 -0
  10. package/dist/auto.js +171 -133
  11. package/dist/auto.mjs +3062 -1478
  12. package/dist/block.css +28 -8
  13. package/dist/block.js +138 -72
  14. package/dist/charts-d3-MXEP6BNP.js +26 -0
  15. package/dist/{chunk-3YPY3OXD.js → chunk-3HF5YEFJ.js} +17 -7
  16. package/dist/{chunk-4MJ7M6YL.js → chunk-3HGU63UY.js} +14 -13
  17. package/dist/chunk-3LK5DNED.js +35 -0
  18. package/dist/{chunk-3Y2DRD7S.js → chunk-3QD7VP3U.js} +9 -4
  19. package/dist/{chunk-6BFZKBGD.js → chunk-3YRPZ7ZZ.js} +2 -2
  20. package/dist/{chunk-WW32K72E.js → chunk-44VCIPHF.js} +25 -21
  21. package/dist/{chunk-TN35C5KM.js → chunk-4AQRFDXL.js} +2 -2
  22. package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
  23. package/dist/{chunk-PGEGPSCZ.js → chunk-4IHAV6O7.js} +2 -2
  24. package/dist/{chunk-7L3R6I3U.js → chunk-4UNQ6X24.js} +10 -7
  25. package/dist/{chunk-O7NUCTFU.js → chunk-4YFKQ5WT.js} +7 -4
  26. package/dist/{chunk-5WFIYXQ6.js → chunk-5223KXFD.js} +122 -242
  27. package/dist/{chunk-PFHVU7UA.js → chunk-5BHJZH62.js} +3 -3
  28. package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
  29. package/dist/{chunk-GKC3HILQ.js → chunk-5NGAO4QK.js} +27 -4
  30. package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
  31. package/dist/{chunk-DSWVNQVS.js → chunk-5RP7JRVP.js} +4 -59
  32. package/dist/{chunk-MCZ5LBZD.js → chunk-5SEVICBT.js} +8 -8
  33. package/dist/{chunk-GBE54KY6.js → chunk-6EJITS44.js} +8 -5
  34. package/dist/{chunk-BBGDM4NQ.js → chunk-6HQH6JZE.js} +35 -16
  35. package/dist/{chunk-66NVRO4K.js → chunk-6LBQ7ELG.js} +17 -18
  36. package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
  37. package/dist/{chunk-VBYSIOOY.js → chunk-75G3Q4DK.js} +3 -3
  38. package/dist/{chunk-3NODSS6A.js → chunk-77FGAVZC.js} +13 -10
  39. package/dist/{chunk-6IAA2QQ2.js → chunk-7BIZCTAX.js} +2 -2
  40. package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
  41. package/dist/{chunk-66RUL3XF.js → chunk-7KINELPI.js} +111 -49
  42. package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
  43. package/dist/{chunk-QJP6PG7F.js → chunk-7QE3XMRK.js} +19 -18
  44. package/dist/{chunk-P7CE7LXL.js → chunk-AAXZDUOV.js} +18 -17
  45. package/dist/{chunk-SXRTRMEE.js → chunk-AL672HNE.js} +3 -3
  46. package/dist/chunk-APKUAJ2L.js +220 -0
  47. package/dist/{chunk-SCHXJTZL.js → chunk-ARGMQ3H4.js} +2 -2
  48. package/dist/{chunk-HEVYAHLW.js → chunk-AUIM2NVH.js} +5 -5
  49. package/dist/{chunk-3LH5CLP4.js → chunk-BKVOYV6I.js} +143 -6
  50. package/dist/{chunk-RZ6YKEUJ.js → chunk-BPIZNB5O.js} +17 -15
  51. package/dist/{chunk-QROYX7TT.js → chunk-BPY242XU.js} +6 -4
  52. package/dist/{chunk-OTAL43EH.js → chunk-BRENJ2BQ.js} +39 -3
  53. package/dist/{chunk-FA6K3FWM.js → chunk-CCNDLW7Z.js} +44 -22
  54. package/dist/{chunk-2KGXHFYK.js → chunk-CIRFIL4M.js} +49 -29
  55. package/dist/chunk-DAOFNU6J.js +283 -0
  56. package/dist/{chunk-QJJZSROI.js → chunk-DYWQFQJP.js} +48 -38
  57. package/dist/{chunk-XEGTMVYY.js → chunk-EMLPOL77.js} +15 -8
  58. package/dist/{chunk-NWED7CYO.js → chunk-FHGVORFO.js} +29 -25
  59. package/dist/{chunk-U2HGPLZS.js → chunk-FQ7HTV52.js} +17 -2
  60. package/dist/{chunk-H73FP42Q.js → chunk-FQMUHRVC.js} +70 -31
  61. package/dist/{chunk-BTUTZMPT.js → chunk-FT3ZYWET.js} +108 -42
  62. package/dist/{chunk-T5SHNNGP.js → chunk-FUPF2UYQ.js} +92 -34
  63. package/dist/{chunk-3XPUDB7B.js → chunk-FY5MSZAP.js} +279 -39
  64. package/dist/{chunk-M5RXSRO2.js → chunk-GCYTI3DE.js} +42 -33
  65. package/dist/{chunk-DN66GPY5.js → chunk-GJFAMOGK.js} +24 -3
  66. package/dist/{chunk-F2L5GCQ4.js → chunk-GU46PPT3.js} +3 -3
  67. package/dist/{chunk-6IUAK7RZ.js → chunk-H6PI3KJT.js} +2 -2
  68. package/dist/{chunk-ONA5KPV3.js → chunk-H7KENAZO.js} +18 -14
  69. package/dist/{chunk-SQLNBA64.js → chunk-HBPDFCQY.js} +3 -3
  70. package/dist/{chunk-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
  71. package/dist/{chunk-FJUNPCYI.js → chunk-HHKO6SKY.js} +2 -2
  72. package/dist/{chunk-DZXYF2F5.js → chunk-HQQNCY7W.js} +21 -8
  73. package/dist/{chunk-7TV5Y53Y.js → chunk-HWX6ZHF3.js} +3 -3
  74. package/dist/{chunk-3P2DKJCG.js → chunk-ICPJPQ5C.js} +2 -2
  75. package/dist/{chunk-VUJGMJE6.js → chunk-IM6PDDCE.js} +4 -4
  76. package/dist/{chunk-JJUOHGX2.js → chunk-INE5YJBZ.js} +13 -8
  77. package/dist/{chunk-HTMN2Z6U.js → chunk-J6QROYDA.js} +58 -11
  78. package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
  79. package/dist/{chunk-SVTI362O.js → chunk-J7KJR3R6.js} +129 -109
  80. package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
  81. package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
  82. package/dist/{chunk-J6K7RP6P.js → chunk-JRCOYRRH.js} +19 -7
  83. package/dist/{chunk-7QKLIMRZ.js → chunk-K2I2XOZD.js} +46 -51
  84. package/dist/{chunk-EAMEADTV.js → chunk-K4EOKJA6.js} +96 -24
  85. package/dist/{chunk-5OWVC2A6.js → chunk-KGVZ5VGH.js} +13 -10
  86. package/dist/{chunk-DFTFPYUD.js → chunk-LBMS4AW6.js} +22 -21
  87. package/dist/{chunk-VVW3F3MD.js → chunk-LGT3PZCJ.js} +27 -19
  88. package/dist/{chunk-OMNGQPEZ.js → chunk-LTXOLDUZ.js} +9 -6
  89. package/dist/{chunk-Q4V4XQWV.js → chunk-MUE65OTD.js} +5 -4
  90. package/dist/{chunk-5GJYGP5Z.js → chunk-MUVJ57EP.js} +14 -18
  91. package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
  92. package/dist/{chunk-OTQKUHRS.js → chunk-NNS4E7CW.js} +6 -4
  93. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  94. package/dist/{chunk-KFZYNWWO.js → chunk-ONU3U4GL.js} +4 -4
  95. package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
  96. package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
  97. package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
  98. package/dist/{chunk-QXKWYZNR.js → chunk-PRI2OD4E.js} +10 -3
  99. package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
  100. package/dist/{chunk-C2CVAM3U.js → chunk-QGATPIPX.js} +170 -91
  101. package/dist/{chunk-PZFVK3IH.js → chunk-QHXCAEMX.js} +8 -5
  102. package/dist/{chunk-BH3UYK36.js → chunk-QJMKPUYK.js} +15 -5
  103. package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
  104. package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
  105. package/dist/{chunk-IUMPEA64.js → chunk-QZX5S6R3.js} +4 -4
  106. package/dist/{chunk-I7F2A35O.js → chunk-R3YSD62R.js} +25 -47
  107. package/dist/{chunk-NU3XLTGP.js → chunk-REJAIQ5S.js} +4 -4
  108. package/dist/{chunk-2C56LEML.js → chunk-ROOE4R4Y.js} +8 -5
  109. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  110. package/dist/{chunk-I2WKW7C7.js → chunk-SMRFPVLQ.js} +3 -3
  111. package/dist/{chunk-VDOOQZUD.js → chunk-SWSIKFEB.js} +4 -4
  112. package/dist/{chunk-HLJVEAOF.js → chunk-T4A4TSTJ.js} +19 -45
  113. package/dist/{chunk-KHEYDLMT.js → chunk-TJVLKNGR.js} +20 -10
  114. package/dist/{chunk-GL5UZ6NY.js → chunk-TPFKKXCB.js} +3 -3
  115. package/dist/{chunk-X6EZPSW6.js → chunk-TTIM6YTT.js} +31 -21
  116. package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
  117. package/dist/{chunk-T4VOVZT5.js → chunk-UBLHQTLV.js} +15 -14
  118. package/dist/{chunk-3LKM6FMW.js → chunk-UNURMIQO.js} +2 -2
  119. package/dist/{chunk-TSA237IM.js → chunk-VILVLS7P.js} +5 -3
  120. package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
  121. package/dist/{chunk-3XGZF2QJ.js → chunk-VQOCMUWI.js} +39 -28
  122. package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
  123. package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
  124. package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
  125. package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
  126. package/dist/{chunk-6HJBFVLO.js → chunk-XD6ZYURY.js} +9 -4
  127. package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
  128. package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
  129. package/dist/{chunk-F7BFXWNQ.js → chunk-YIBAWQGJ.js} +7 -4
  130. package/dist/{chunk-PH5X4GIP.js → chunk-YTMTPUH4.js} +8 -5
  131. package/dist/{chunk-3UIKSPFB.js → chunk-Z5QVYKR7.js} +11 -3
  132. package/dist/{chunk-KQ57MHRO.js → chunk-ZEF5M5MB.js} +155 -87
  133. package/dist/{chunk-LE4MYMLI.js → chunk-ZJV7GYR4.js} +6 -6
  134. package/dist/{chunk-XJLKLU4D.js → chunk-ZNWAYU6N.js} +11 -7
  135. package/dist/cli.cjs +165 -148
  136. package/dist/clock.js +105 -25
  137. package/dist/countdown.js +208 -82
  138. package/dist/dgmo-router-X7ZGAPIE.js +86 -0
  139. package/dist/dimensions-45H6JQEY.js +22 -0
  140. package/dist/editor.js +17 -2
  141. package/dist/element.d.ts +6 -0
  142. package/dist/element.js +172 -134
  143. package/dist/element.mjs +3026 -1463
  144. package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-UKELHBSB.js} +4 -4
  145. package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-MNCDS7MV.js} +10 -10
  146. package/dist/highlight.d.ts +21 -1
  147. package/dist/highlight.js +106 -3
  148. package/dist/index.d.ts +2 -2
  149. package/dist/index.js +59 -57
  150. package/dist/{layout-FWODLIMP.js → layout-2L3WMRYU.js} +6 -6
  151. package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
  152. package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
  153. package/dist/layout-A4XWNVID.js +14 -0
  154. package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
  155. package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
  156. package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
  157. package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
  158. package/dist/layout-G23F7LDH.js +9 -0
  159. package/dist/{layout-QNUQLEHU.js → layout-GM4UGR7B.js} +5 -4
  160. package/dist/{layout-7MZ5NF2N.js → layout-GQQJXNYH.js} +5 -5
  161. package/dist/{layout-5BG6DFCU.js → layout-IIE2S5FK.js} +6 -6
  162. package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
  163. package/dist/layout-VMCRX66I.js +14 -0
  164. package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
  165. package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
  166. package/dist/map-data/gazetteer.json +1 -1
  167. package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
  168. package/dist/{parser-D5VILGN2.js → parser-2ECN6JA2.js} +4 -4
  169. package/dist/{parser-LWKKBNSA.js → parser-4WTIHM5J.js} +3 -3
  170. package/dist/{parser-DFFEDKHH.js → parser-5H2BTSJQ.js} +3 -3
  171. package/dist/{parser-4NO6VZ6S.js → parser-75KVXUNS.js} +4 -4
  172. package/dist/{parser-VKOJM7KS.js → parser-774AC53T.js} +4 -4
  173. package/dist/{parser-IBWNAPY4.js → parser-BE4YCSRU.js} +3 -3
  174. package/dist/{parser-4AI5ZN5F.js → parser-CNGUQUQI.js} +3 -3
  175. package/dist/{parser-36HVKU5U.js → parser-DEUUSQIN.js} +7 -6
  176. package/dist/{parser-H3XEPFPV.js → parser-DQAFLUJB.js} +4 -4
  177. package/dist/{parser-5OXGPNBF.js → parser-EYCKNKQA.js} +5 -5
  178. package/dist/{parser-TGQZJ5OT.js → parser-FXISIU6A.js} +4 -4
  179. package/dist/{parser-JJR52VAT.js → parser-GTB4XC7P.js} +5 -5
  180. package/dist/{parser-AGVYTQXV.js → parser-GVEPAUSD.js} +4 -4
  181. package/dist/{parser-WAV5JRPT.js → parser-HSQGTY4G.js} +4 -4
  182. package/dist/{parser-YS7TOS2K.js → parser-HVKRINUS.js} +3 -3
  183. package/dist/{parser-W4PQUGX3.js → parser-J5MIEYO4.js} +5 -5
  184. package/dist/parser-KMZIXLDZ.js +13 -0
  185. package/dist/{parser-HYRTF3DO.js → parser-LJHXWSXU.js} +3 -3
  186. package/dist/{parser-KCR2WS3V.js → parser-PT3W72G5.js} +4 -4
  187. package/dist/{parser-CVMEDULU.js → parser-SBJQDPHL.js} +4 -4
  188. package/dist/{parser-RZPVAQVX.js → parser-SUWWWCMX.js} +4 -3
  189. package/dist/{parser-TXND652E.js → parser-SXDRNZOA.js} +4 -4
  190. package/dist/parser-UMILOW3M.js +14 -0
  191. package/dist/{parser-RV4M6AS2.js → parser-UP3AZ367.js} +4 -4
  192. package/dist/{parser-IJBMRXMC.js → parser-WHPRV3X5.js} +5 -5
  193. package/dist/{parser-MPCE5JBG.js → parser-WX3UODSJ.js} +4 -4
  194. package/dist/{parser-K3XXLMUW.js → parser-XCIEN3KN.js} +4 -4
  195. package/dist/{parser-AXKBDGNO.js → parser-XIRTUMVN.js} +5 -5
  196. package/dist/{parser-B5FVS7O6.js → parser-YKCGIG45.js} +3 -3
  197. package/dist/{parser-PSA4UBSP.js → parser-YKYMQG3B.js} +4 -4
  198. package/dist/{parser-MTOMTWTD.js → parser-ZGM2OJ6Y.js} +6 -5
  199. package/dist/{parser-CSFUN3CT.js → parser-ZL5QUFVH.js} +5 -4
  200. package/dist/pert.d.ts +2 -2
  201. package/dist/{renderer-PPIHO5FI.js → renderer-3F7OS2AX.js} +14 -13
  202. package/dist/{renderer-SBS3YWU5.js → renderer-4QB4K7Q3.js} +9 -9
  203. package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
  204. package/dist/{renderer-R2WNIC2C.js → renderer-5H4SY7YY.js} +9 -9
  205. package/dist/{renderer-DAXMXIKD.js → renderer-5PIQPFOX.js} +5 -4
  206. package/dist/{renderer-45PSOL3E.js → renderer-6MU37QF5.js} +6 -6
  207. package/dist/renderer-AQVMWJ4M.js +27 -0
  208. package/dist/{renderer-A5VE5BCI.js → renderer-BDDW6K7N.js} +9 -9
  209. package/dist/{renderer-AUW2BE6G.js → renderer-BNB3VIDY.js} +10 -10
  210. package/dist/{renderer-4ITCHBT7.js → renderer-CQY6ATOS.js} +6 -6
  211. package/dist/{renderer-6OKF44KS.js → renderer-CVW75CXL.js} +15 -15
  212. package/dist/{renderer-7RH2SI3B.js → renderer-DT4XRFEP.js} +5 -4
  213. package/dist/{renderer-B5TBNZJE.js → renderer-ERHBSTQT.js} +9 -9
  214. package/dist/{renderer-HVCU2C3Z.js → renderer-HSHHVYWF.js} +5 -4
  215. package/dist/renderer-IDPVUFNB.js +28 -0
  216. package/dist/renderer-ILX6BGKR.js +21 -0
  217. package/dist/renderer-JP663HKG.js +22 -0
  218. package/dist/{renderer-KS7YZJE2.js → renderer-KNFTTOBL.js} +11 -11
  219. package/dist/{renderer-2AZ5HJFK.js → renderer-MVUZBESR.js} +5 -5
  220. package/dist/{renderer-QAOBLRXV.js → renderer-N4EBR2FV.js} +11 -11
  221. package/dist/{renderer-P5ROYQGU.js → renderer-NHO46CT2.js} +4 -4
  222. package/dist/{renderer-NGXZTRK6.js → renderer-NO2QJ5LZ.js} +10 -10
  223. package/dist/{renderer-FPE3J5VZ.js → renderer-OGFV5RXX.js} +12 -12
  224. package/dist/{renderer-ODUUOPVT.js → renderer-PDLESJMS.js} +15 -15
  225. package/dist/renderer-T4MTNINC.js +24 -0
  226. package/dist/renderer-TOUGFGTM.js +24 -0
  227. package/dist/{renderer-BSR2O2H6.js → renderer-U3KPD43Y.js} +14 -13
  228. package/dist/{renderer-JCCHNECZ.js → renderer-X334IJU2.js} +10 -10
  229. package/dist/{renderer-5DSEWF74.js → renderer-Y5OAMOCR.js} +9 -9
  230. package/dist/{renderer-5KVCNMOJ.js → renderer-YONAKAJU.js} +5 -3
  231. package/dist/{renderer-7SD6MSBS.js → renderer-YWMI6Y2U.js} +12 -12
  232. package/dist/{renderer-2QPMJ2DA.js → renderer-ZWIH4WDW.js} +10 -10
  233. package/dist/renderer-radial-7CGZMVMS.js +21 -0
  234. package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
  235. package/dist/{state-parser-3REXRK3R.js → state-parser-BATWAID2.js} +4 -4
  236. package/dist/{state-renderer-XYLNRWXR.js → state-renderer-3FKZJ3LP.js} +10 -10
  237. package/dist/{themes-PdPR1-hC.d.ts → themes-32xj5ZTW.d.ts} +27 -0
  238. package/docs/ai-integration.md +15 -19
  239. package/docs/language-reference.md +106 -21
  240. package/gallery/fixtures/clock.dgmo +3 -3
  241. package/gallery/fixtures/countdown-tz.dgmo +5 -0
  242. package/package.json +1 -1
  243. package/dist/charts-d3-MUW3LTML.js +0 -26
  244. package/dist/dgmo-router-CE2G67FV.js +0 -84
  245. package/dist/dimensions-OTBKC5M6.js +0 -22
  246. package/dist/layout-6RDJHS6E.js +0 -9
  247. package/dist/layout-J36454XU.js +0 -14
  248. package/dist/layout-LD6XTLD6.js +0 -14
  249. package/dist/parser-4WQQQXCG.js +0 -13
  250. package/dist/parser-O4HIUN6G.js +0 -13
  251. package/dist/renderer-CYB4LK3G.js +0 -22
  252. package/dist/renderer-FF24KZCI.js +0 -24
  253. package/dist/renderer-FYSVXL7M.js +0 -28
  254. package/dist/renderer-HDCCZURL.js +0 -24
  255. package/dist/renderer-PSMMZCKH.js +0 -21
  256. package/dist/renderer-UYMQQCJK.js +0 -24
  257. package/dist/renderer-radial-F7X5F2VU.js +0 -21
@@ -7,11 +7,11 @@ import {
7
7
  } from "./chunk-YYVTBZZC.js";
8
8
  import {
9
9
  renderIntegratedLegend
10
- } from "./chunk-HEVYAHLW.js";
10
+ } from "./chunk-AUIM2NVH.js";
11
11
  import {
12
12
  controlsGroupCapsuleWidth,
13
13
  getMaxLegendReservedHeight
14
- } from "./chunk-7UEMZREK.js";
14
+ } from "./chunk-YAA6IID3.js";
15
15
  import {
16
16
  TITLE_FONT_SIZE,
17
17
  TITLE_FONT_WEIGHT,
@@ -34,23 +34,23 @@ import {
34
34
  LEGEND_PILL_PAD,
35
35
  measureLegendText,
36
36
  truncateLegendText
37
- } from "./chunk-HQCHYB5F.js";
37
+ } from "./chunk-QOOUC2J5.js";
38
38
  import {
39
39
  CHAR_WIDTH_RATIO,
40
40
  measureText,
41
41
  truncateText
42
- } from "./chunk-5LWQH6QV.js";
42
+ } from "./chunk-WCT3NYCV.js";
43
43
  import {
44
44
  contrastText,
45
45
  getSeriesColors,
46
46
  mix,
47
47
  shapeFill
48
- } from "./chunk-P6T66CCZ.js";
48
+ } from "./chunk-WBM7ZNDI.js";
49
49
  import {
50
50
  resolveActiveTagGroup,
51
51
  resolveTagColor,
52
52
  tagAttrKey
53
- } from "./chunk-FJUNPCYI.js";
53
+ } from "./chunk-HHKO6SKY.js";
54
54
  import {
55
55
  normalizeName
56
56
  } from "./chunk-NOTA6TEI.js";
@@ -100,18 +100,13 @@ function computeBarLabel(label, x1, barWidth, innerWidth, textColor, onFillColor
100
100
  var BAND_ACCENT_W = 4;
101
101
  var BAND_RADIUS = 4;
102
102
  var bandClipCounter = 0;
103
- function renderLabelBand(svg, y, leftMargin, color, palette, isDark, cssPrefix, dataAttr, solid, barH = BAR_H, bandRadius = BAND_RADIUS, bandAccentW = BAND_ACCENT_W) {
103
+ function renderLabelBand(svg, y, leftMargin, color, palette, isDark, cssPrefix, dataAttr, fillMode, barH = BAR_H, bandRadius = BAND_RADIUS, bandAccentW = BAND_ACCENT_W) {
104
104
  const bandX = 5;
105
105
  const bandW = leftMargin - 7;
106
106
  const bandY = y - barH / 2;
107
107
  const clipId = `gantt-band-clip-${bandClipCounter++}`;
108
108
  svg.append("clipPath").attr("id", clipId).append("rect").attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", barH).attr("rx", bandRadius);
109
- const tint = svg.append("rect").attr("class", `gantt-${cssPrefix}-band-bg`).attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", barH).attr("rx", bandRadius).attr(
110
- "fill",
111
- shapeFill(palette, color, isDark, {
112
- ...solid !== void 0 && { solid }
113
- })
114
- ).style("pointer-events", "none");
109
+ const tint = svg.append("rect").attr("class", `gantt-${cssPrefix}-band-bg`).attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", barH).attr("rx", bandRadius).attr("fill", shapeFill(palette, color, isDark, { mode: fillMode })).style("pointer-events", "none");
115
110
  const accent = svg.append("rect").attr("class", `gantt-${cssPrefix}-band-accent`).attr("x", bandX).attr("y", bandY).attr("width", bandAccentW).attr("height", barH).attr("fill", color).attr("clip-path", `url(#${clipId})`).style("pointer-events", "none");
116
111
  if (dataAttr) {
117
112
  tint.attr(dataAttr.key, dataAttr.value);
@@ -127,7 +122,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
127
122
  container.innerHTML = "";
128
123
  bandClipCounter = 0;
129
124
  if (resolved.tasks.length === 0) return;
130
- const solid = false;
125
+ const fillMode = void 0;
131
126
  const onClickItem = options?.onClickItem;
132
127
  const collapsedGroups = options?.collapsedGroups ?? new Set(resolved.groups.filter((g2) => g2.collapsed).map((g2) => g2.name));
133
128
  const onToggleGroup = options?.onToggleGroup;
@@ -318,7 +313,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
318
313
  seriesColors,
319
314
  palette
320
315
  );
321
- const fillColor = shapeFill(palette, color, isDark, { solid });
316
+ const fillColor = shapeFill(palette, color, isDark, { mode: fillMode });
322
317
  el.select("rect").attr("fill", fillColor).attr("stroke", color);
323
318
  });
324
319
  }
@@ -419,7 +414,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
419
414
  isDark,
420
415
  "lane",
421
416
  { key: "data-lane", value: row.laneName },
422
- solid,
417
+ fillMode,
423
418
  sBarH,
424
419
  sBandRadius,
425
420
  sBandAccentW
@@ -446,7 +441,9 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
446
441
  toggleIcon + " " + row.laneName + (row.aggregateProgress !== null ? ` ${Math.round(row.aggregateProgress)}%` : "")
447
442
  );
448
443
  if (laneBarWidth > 0) {
449
- const barFill = shapeFill(palette, laneColor, isDark, { solid });
444
+ const barFill = shapeFill(palette, laneColor, isDark, {
445
+ mode: fillMode
446
+ });
450
447
  const laneBandG = g.append("g").attr("class", "gantt-lane-band-group").attr("data-lane", row.laneName).on("mouseenter", () => {
451
448
  highlightLane(g, svg, row.tagKey, row.laneName);
452
449
  if (row.laneStartDate && row.laneEndDate) {
@@ -492,7 +489,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
492
489
  isDark,
493
490
  "group",
494
491
  { key: "data-group", value: group.name },
495
- solid,
492
+ fillMode,
496
493
  sBarH,
497
494
  sBandRadius,
498
495
  sBandAccentW
@@ -539,7 +536,10 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
539
536
  resetHighlight(g, svg);
540
537
  hideGanttDateIndicators(g);
541
538
  });
542
- summaryG.append("rect").attr("x", gx1).attr("y", yOffset).attr("width", barWidth).attr("height", sBarH).attr("rx", 4).attr("fill", shapeFill(palette, groupColor, isDark, { solid })).attr("stroke", groupColor).attr("stroke-width", 2);
539
+ summaryG.append("rect").attr("x", gx1).attr("y", yOffset).attr("width", barWidth).attr("height", sBarH).attr("rx", 4).attr(
540
+ "fill",
541
+ shapeFill(palette, groupColor, isDark, { mode: fillMode })
542
+ ).attr("stroke", groupColor).attr("stroke-width", 2);
543
543
  if (group.progress !== null && group.progress > 0) {
544
544
  summaryG.append("rect").attr("x", gx1).attr("y", yOffset).attr("width", barWidth * Math.min(group.progress / 100, 1)).attr("height", sBarH).attr("fill", groupColor).attr("opacity", 0.5);
545
545
  }
@@ -551,7 +551,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
551
551
  innerWidth,
552
552
  palette.text,
553
553
  contrastText(
554
- shapeFill(palette, groupColor, isDark, { solid }),
554
+ shapeFill(palette, groupColor, isDark, { mode: fillMode }),
555
555
  palette.textOnFillLight,
556
556
  palette.textOnFillDark
557
557
  ),
@@ -569,7 +569,9 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
569
569
  });
570
570
  } else {
571
571
  const groupBarWidth = Math.max(gx2 - gx1, 2);
572
- const bandFill = shapeFill(palette, groupColor, isDark, { solid });
572
+ const bandFill = shapeFill(palette, groupColor, isDark, {
573
+ mode: fillMode
574
+ });
573
575
  const groupBarG = g.append("g").attr("class", "gantt-group-bar").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).on("mouseenter", () => {
574
576
  highlightGroup(g, svg, group.name);
575
577
  showGanttDateIndicators(
@@ -596,7 +598,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
596
598
  innerWidth,
597
599
  palette.text,
598
600
  contrastText(
599
- shapeFill(palette, groupColor, isDark, { solid }),
601
+ shapeFill(palette, groupColor, isDark, { mode: fillMode }),
600
602
  palette.textOnFillLight,
601
603
  palette.textOnFillDark
602
604
  ),
@@ -676,7 +678,9 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
676
678
  const x1 = xScale(tStart);
677
679
  const x2 = xScale(tEnd);
678
680
  const barWidth = Math.max(x2 - x1, 2);
679
- const fillColor = shapeFill(palette, barColor, isDark, { solid });
681
+ const fillColor = shapeFill(palette, barColor, isDark, {
682
+ mode: fillMode
683
+ });
680
684
  const taskG = g.append("g").attr("class", "gantt-task").attr("data-line-number", String(task.lineNumber)).attr("data-task-name", task.label).attr("data-task-id", task.id).attr("data-group", topGroup).style("cursor", onClickItem ? "pointer" : "default").on("click", () => {
681
685
  if (onClickItem) onClickItem(task.lineNumber);
682
686
  }).on("mouseenter", () => {
@@ -747,7 +751,7 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
747
751
  innerWidth,
748
752
  palette.text,
749
753
  contrastText(
750
- shapeFill(palette, barColor, isDark, { solid }),
754
+ shapeFill(palette, barColor, isDark, { mode: fillMode }),
751
755
  palette.textOnFillLight,
752
756
  palette.textOnFillDark
753
757
  ),
@@ -2101,4 +2105,4 @@ export {
2101
2105
  renderGantt,
2102
2106
  buildTagLaneRowList
2103
2107
  };
2104
- //# sourceMappingURL=chunk-NWED7CYO.js.map
2108
+ //# sourceMappingURL=chunk-FHGVORFO.js.map
@@ -1,5 +1,12 @@
1
1
  // src/directives-registry.ts
2
2
  var DIRECTIVES_REGISTRY = [
3
+ // ── Universal date handling (§ BL-121) ───────────────────
4
+ // Accepted in every date-bearing chart (gantt, pert, countdown, timeline,
5
+ // event-line). Handled inline by each parser's prescan — no parser-Set
6
+ // membership here — so they only contribute highlighting (DIRECTIVE_KEYWORDS).
7
+ { token: "year", category: "directive" },
8
+ { token: "date-order", category: "directive" },
9
+ { token: "no-current-year", category: "directive" },
3
10
  // ── Infra ────────────────────────────────────────────────
4
11
  // Top-level SLO options that are ALSO accepted as node colon-properties
5
12
  // (dual membership). Highlight bare (kept in DIRECTIVE_KEYWORDS) — their
@@ -58,7 +65,9 @@ var DIRECTIVES_REGISTRY = [
58
65
  { token: "sprint-length", category: "directive", gantt: ["option"] },
59
66
  { token: "sprint-number", category: "directive", gantt: ["option"] },
60
67
  { token: "sprint-start", category: "directive", gantt: ["option"] },
61
- { token: "solid-fill", category: "directive", gantt: ["boolean"] },
68
+ { token: "fill-tint", category: "directive", gantt: ["boolean"] },
69
+ { token: "fill-solid", category: "directive", gantt: ["boolean"] },
70
+ { token: "fill-outline", category: "directive", gantt: ["boolean"] },
62
71
  // `chart` is a wireframe element keyword (CONTROL); gantt also accepts it as
63
72
  // an option. Highlight family is control.
64
73
  { token: "chart", category: "control", gantt: ["option"] },
@@ -86,6 +95,12 @@ var DIRECTIVES_REGISTRY = [
86
95
  { token: "no-colorize", category: "directive", map: true },
87
96
  { token: "no-cities", category: "directive", map: true },
88
97
  { token: "no-cluster-pois", category: "directive", map: true },
98
+ // ── Clock channel (BL-122): live local-time cards on POIs flagged `clock` ──
99
+ // Activation is the per-POI `clock` flag (peeled in the map parser, not a
100
+ // directive). `hours 9-17` / `days mon-fri` are the global availability
101
+ // window (reused verbatim from the clock chart type).
102
+ { token: "hours", category: "directive", map: true },
103
+ { token: "days", category: "directive", map: true },
89
104
  // ── Shared across types ──────────────────────────────────
90
105
  // `active-tag`: infra top-level option + gantt option + map directive.
91
106
  {
@@ -346,4 +361,4 @@ export {
346
361
  REGISTRY_MODIFIER_TOKENS,
347
362
  REGISTRY_COLON_KEY_TOKENS
348
363
  };
349
- //# sourceMappingURL=chunk-U2HGPLZS.js.map
364
+ //# sourceMappingURL=chunk-FQ7HTV52.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  VARIANTS,
9
9
  allTasks
10
- } from "./chunk-PGEGPSCZ.js";
10
+ } from "./chunk-4IHAV6O7.js";
11
11
  import {
12
12
  TITLE_FONT_SIZE,
13
13
  TITLE_FONT_WEIGHT,
@@ -20,12 +20,15 @@ import {
20
20
  measureText,
21
21
  truncateText,
22
22
  wrapTextToWidth
23
- } from "./chunk-5LWQH6QV.js";
23
+ } from "./chunk-WCT3NYCV.js";
24
24
  import {
25
25
  contrastText,
26
26
  mix,
27
27
  themeBaseBg
28
- } from "./chunk-P6T66CCZ.js";
28
+ } from "./chunk-WBM7ZNDI.js";
29
+ import {
30
+ fillModeFromOptions
31
+ } from "./chunk-BRENJ2BQ.js";
29
32
 
30
33
  // src/raci/renderer.ts
31
34
  import * as d3Selection from "d3-selection";
@@ -158,7 +161,7 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
158
161
  if (width <= 0 || height <= 0) return;
159
162
  const tasksAll = [...allTasks(parsed)];
160
163
  if (tasksAll.length === 0 && parsed.phases.length === 0) return;
161
- const solid = parsed.options["solid-fill"] === "on";
164
+ const fillMode = fillModeFromOptions(parsed.options);
162
165
  const surfaceBg = themeBaseBg(palette, isDark);
163
166
  const roleCount = Math.max(1, parsed.roles.length);
164
167
  const idealWidth = roleCount * ROLE_COL_MAX + TASK_LABEL_MAX + 2 * H_MARGIN;
@@ -312,7 +315,7 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
312
315
  legendChipW,
313
316
  palette,
314
317
  surfaceBg,
315
- solid,
318
+ fillMode,
316
319
  onMarkerDragStart,
317
320
  sLegendChipGap,
318
321
  sLegendHeight,
@@ -332,7 +335,14 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
332
335
  if (taskIdx < 0) return;
333
336
  const yTop = rowYs[i];
334
337
  const rh = taskRowContent.get(row.task.id)?.rowHeight ?? sRowHeight;
335
- bandsG.append("rect").attr("class", "raci-row-band").attr("data-task-id", row.task.id).attr("x", sHMargin).attr("y", yTop + 2).attr("width", innerWidth).attr("height", rh - 4).attr("rx", 6).attr("fill", mix(autoAccent(taskIdx, palette), surfaceBg, 12));
338
+ const bandAccent = autoAccent(taskIdx, palette);
339
+ const band = bandsG.append("rect").attr("class", "raci-row-band").attr("data-task-id", row.task.id).attr("x", sHMargin).attr("y", yTop + 2).attr("width", innerWidth).attr("height", rh - 4).attr("rx", 6).attr(
340
+ "fill",
341
+ fillMode === "outline" ? surfaceBg : mix(bandAccent, surfaceBg, 12)
342
+ );
343
+ if (fillMode === "outline") {
344
+ band.attr("stroke", bandAccent).attr("stroke-width", 1);
345
+ }
336
346
  });
337
347
  }
338
348
  const columnsG = svg.append("g").attr("class", "raci-columns");
@@ -340,14 +350,21 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
340
350
  const cx = roleX(i) + sColumnInset;
341
351
  const cw = roleColW - 2 * sColumnInset;
342
352
  const roleColor = parsed.roleColors[i] ?? autoAccent(i, palette);
343
- const bodyFill = mix(roleColor, themeBaseBg(palette, isDark), 16);
344
- const headerFill = mix(roleColor, themeBaseBg(palette, isDark), 30);
353
+ const outline = fillMode === "outline";
354
+ const bodyFill = outline ? surfaceBg : mix(roleColor, themeBaseBg(palette, isDark), 16);
355
+ const headerFill = outline ? surfaceBg : mix(roleColor, themeBaseBg(palette, isDark), 30);
345
356
  const colG = columnsG.append("g").attr("class", "raci-column").attr("data-role-id", roleId);
346
- colG.append("rect").attr("class", "raci-column-body").attr("x", cx).attr("y", headerY).attr("width", cw).attr("height", colTotalHeight).attr("rx", sColumnRadius).attr("fill", bodyFill);
347
- colG.append("path").attr("class", "raci-column-header").attr(
357
+ const bodyRect = colG.append("rect").attr("class", "raci-column-body").attr("x", cx).attr("y", headerY).attr("width", cw).attr("height", colTotalHeight).attr("rx", sColumnRadius).attr("fill", bodyFill);
358
+ if (outline) {
359
+ bodyRect.attr("stroke", roleColor).attr("stroke-width", 1);
360
+ }
361
+ const headerPath = colG.append("path").attr("class", "raci-column-header").attr(
348
362
  "d",
349
363
  topRoundedRectPath(cx, headerY, cw, sHeaderHeight, sColumnRadius)
350
364
  ).attr("fill", headerFill);
365
+ if (outline) {
366
+ headerPath.attr("stroke", roleColor).attr("stroke-width", 1);
367
+ }
351
368
  const cxText = roleX(i) + roleColW / 2;
352
369
  colG.append("text").attr("class", "raci-column-label").attr("x", cxText).attr("y", headerY + sHeaderHeight / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", sRoleHeaderFont).attr("font-weight", 600).attr("fill", palette.text).text(
353
370
  truncateText(
@@ -400,7 +417,7 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
400
417
  roleColW,
401
418
  parsed.variant,
402
419
  surfaceBg,
403
- solid,
420
+ fillMode,
404
421
  chartCanShowSummaries,
405
422
  sPhaseHeight,
406
423
  sPhaseFont,
@@ -419,7 +436,7 @@ function renderRaci(container, parsed, palette, isDark, handlers, exportDims) {
419
436
  roleColW,
420
437
  palette,
421
438
  surfaceBg,
422
- solid,
439
+ fillMode,
423
440
  taskDiagnostics,
424
441
  hasAnyDiagnostic,
425
442
  taskRowContent.get(row.task.id),
@@ -482,7 +499,7 @@ function setupColumnHover(svg) {
482
499
  svg.on("mouseover", (event) => set(findRole(event.target)));
483
500
  svg.on("mouseleave", () => set(null));
484
501
  }
485
- function renderLegend(svg, markers, variant, x, y, mode, chipW, palette, surfaceBg, solid, _onMarkerDragStart, sLegendChipGap, sLegendHeight, sNodeRadius, sNodeStrokeWidth, sLegendLetterFont, sLegendLabelFont) {
502
+ function renderLegend(svg, markers, variant, x, y, mode, chipW, palette, surfaceBg, fillMode, _onMarkerDragStart, sLegendChipGap, sLegendHeight, sNodeRadius, sNodeStrokeWidth, sLegendLetterFont, sLegendLabelFont) {
486
503
  if (markers.length === 0) return;
487
504
  const labels = MARKER_LABELS[variant];
488
505
  const legendG = svg.append("g").attr("class", "raci-legend").attr("aria-label", `${variant.toUpperCase()} marker legend`);
@@ -492,12 +509,12 @@ function renderLegend(svg, markers, variant, x, y, mode, chipW, palette, surface
492
509
  const labelText = labels[marker];
493
510
  const chipG = legendG.append("g").attr("class", "raci-legend-chip").attr("data-marker", marker).style("cursor", "grab");
494
511
  if (mode === "letters") {
495
- const fill2 = solid ? rawColor : mix(rawColor, surfaceBg, TINT_PCT);
496
- const stroke2 = solid ? mix(rawColor, surfaceBg, 70) : rawColor;
512
+ const fill2 = fillMode === "solid" ? rawColor : fillMode === "outline" ? surfaceBg : mix(rawColor, surfaceBg, TINT_PCT);
513
+ const stroke2 = fillMode === "solid" ? mix(rawColor, surfaceBg, 70) : rawColor;
497
514
  chipG.append("rect").attr("x", cx).attr("y", y).attr("width", chipW).attr("height", sLegendHeight).attr("rx", sNodeRadius).attr("fill", fill2).attr("stroke", stroke2).attr("stroke-width", sNodeStrokeWidth);
498
515
  chipG.append("text").attr("x", cx + chipW / 2).attr("y", y + sLegendHeight / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", sLegendLetterFont).attr("font-weight", 700).attr(
499
516
  "fill",
500
- solid ? contrastText(
517
+ fillMode === "solid" ? contrastText(
501
518
  fill2,
502
519
  palette.textOnFillLight,
503
520
  palette.textOnFillDark
@@ -505,16 +522,32 @@ function renderLegend(svg, markers, variant, x, y, mode, chipW, palette, surface
505
522
  ).text(marker);
506
523
  return;
507
524
  }
508
- const fill = solid ? rawColor : mix(rawColor, surfaceBg, TINT_PCT);
509
- const stroke = mix(rawColor, surfaceBg, 70);
525
+ let fill;
526
+ if (fillMode === "outline") {
527
+ const gradId = `raci-legend-grad-${marker}`;
528
+ let defs = svg.select("defs");
529
+ if (defs.empty()) defs = svg.append("defs");
530
+ if (defs.select(`#${gradId}`).empty()) {
531
+ const grad = defs.append("linearGradient").attr("id", gradId).attr("x1", "0%").attr("y1", "0%").attr("x2", "0%").attr("y2", "100%");
532
+ grad.append("stop").attr("offset", "0%").attr("stop-color", mix(rawColor, surfaceBg, 38));
533
+ grad.append("stop").attr("offset", "100%").attr("stop-color", mix(rawColor, surfaceBg, 8));
534
+ }
535
+ fill = `url(#${gradId})`;
536
+ } else {
537
+ fill = fillMode === "solid" ? rawColor : mix(rawColor, surfaceBg, TINT_PCT);
538
+ }
539
+ const stroke = fillMode === "outline" ? rawColor : mix(rawColor, surfaceBg, 70);
510
540
  chipG.append("rect").attr("x", cx).attr("y", y).attr("width", chipW).attr("height", sLegendHeight).attr("rx", sNodeRadius).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", sNodeStrokeWidth);
511
541
  const slabPad = 4;
512
542
  const slabW = 24;
513
- const slabFill = solid ? mix(rawColor, surfaceBg, 70) : mix(rawColor, surfaceBg, 55);
514
- chipG.append("rect").attr("x", cx + slabPad).attr("y", y + slabPad).attr("width", slabW).attr("height", sLegendHeight - 2 * slabPad).attr("rx", 4).attr("fill", slabFill);
543
+ const slabFill = fillMode === "solid" ? mix(rawColor, surfaceBg, 70) : fillMode === "outline" ? surfaceBg : mix(rawColor, surfaceBg, 55);
544
+ const slabRect = chipG.append("rect").attr("x", cx + slabPad).attr("y", y + slabPad).attr("width", slabW).attr("height", sLegendHeight - 2 * slabPad).attr("rx", 4).attr("fill", slabFill);
545
+ if (fillMode === "outline") {
546
+ slabRect.attr("stroke", rawColor).attr("stroke-width", 1);
547
+ }
515
548
  chipG.append("text").attr("x", cx + slabPad + slabW / 2).attr("y", y + sLegendHeight / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", sLegendLetterFont).attr("font-weight", 700).attr(
516
549
  "fill",
517
- solid ? contrastText(
550
+ fillMode === "solid" ? contrastText(
518
551
  slabFill,
519
552
  palette.textOnFillLight,
520
553
  palette.textOnFillDark
@@ -532,10 +565,16 @@ function renderLegend(svg, markers, variant, x, y, mode, chipW, palette, surface
532
565
  function renderRaciForExport(container, parsed, palette, isDark, exportDims) {
533
566
  renderRaci(container, parsed, palette, isDark, {}, exportDims);
534
567
  }
535
- function renderPhaseBar(svg, phase, x, y, width, palette, collapsed, autoColor, roles, roleX, roleColW, variant, surfaceBg, solid, showSummary, sPhaseHeight, sPhaseFont, sColumnInset, sNodeRadius) {
568
+ function renderPhaseBar(svg, phase, x, y, width, palette, collapsed, autoColor, roles, roleX, roleColW, variant, surfaceBg, fillMode, showSummary, sPhaseHeight, sPhaseFont, sColumnInset, sNodeRadius) {
536
569
  const phaseG = svg.append("g").attr("class", "raci-phase").attr("data-section", `phase-${phase.id}`).attr("data-section-toggle", "").attr("data-line-number", String(phase.lineNumber)).attr("data-phase-id", phase.id).attr("data-collapsed", collapsed ? "1" : "0").style("cursor", "pointer");
537
- const phaseFill = mix(phase.color ?? autoColor, palette.bg, 30);
538
- phaseG.append("rect").attr("x", x).attr("y", y + 4).attr("width", width).attr("height", sPhaseHeight - 8).attr("fill", phaseFill).attr("rx", 4);
570
+ const phaseColor = phase.color ?? autoColor;
571
+ const phaseRect = phaseG.append("rect").attr("x", x).attr("y", y + 4).attr("width", width).attr("height", sPhaseHeight - 8).attr(
572
+ "fill",
573
+ fillMode === "outline" ? surfaceBg : mix(phaseColor, palette.bg, 30)
574
+ ).attr("rx", 4);
575
+ if (fillMode === "outline") {
576
+ phaseRect.attr("stroke", phaseColor).attr("stroke-width", 1.25);
577
+ }
539
578
  const chevX = x + 12;
540
579
  const chevY = y + sPhaseHeight / 2;
541
580
  phaseG.append("text").attr("x", chevX).attr("y", chevY).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-family", FONT_FAMILY).attr("font-size", 9).attr("fill", palette.text).attr("opacity", 0.6).text(collapsed ? "\u25B6" : "\u25BC");
@@ -568,13 +607,13 @@ function renderPhaseBar(svg, phase, x, y, width, palette, collapsed, autoColor,
568
607
  ordered.forEach((marker, i) => {
569
608
  const cx = startX + i * (sliceW + SLICE_GAP);
570
609
  const rawColor = markerColor(marker, palette);
571
- const fill = solid ? rawColor : mix(rawColor, surfaceBg, TINT_PCT);
572
- const stroke = solid ? mix(rawColor, surfaceBg, 70) : rawColor;
610
+ const fill = fillMode === "solid" ? rawColor : fillMode === "outline" ? surfaceBg : mix(rawColor, surfaceBg, TINT_PCT);
611
+ const stroke = fillMode === "solid" ? mix(rawColor, surfaceBg, 70) : rawColor;
573
612
  const chipG = phaseG.append("g").attr("class", "raci-phase-summary");
574
613
  chipG.append("rect").attr("x", cx).attr("y", summaryY).attr("width", sliceW).attr("height", SUMMARY_CHIP_H).attr("rx", sNodeRadius).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1.25);
575
614
  chipG.append("text").attr("x", cx + sliceW / 2).attr("y", summaryY + SUMMARY_CHIP_H / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", SUMMARY_LETTER_FONT).attr("font-weight", 700).attr(
576
615
  "fill",
577
- solid ? contrastText(
616
+ fillMode === "solid" ? contrastText(
578
617
  fill,
579
618
  palette.textOnFillLight,
580
619
  palette.textOnFillDark
@@ -585,7 +624,7 @@ function renderPhaseBar(svg, phase, x, y, width, palette, collapsed, autoColor,
585
624
  }
586
625
  }
587
626
  var SLICE_GAP = 4;
588
- function renderTaskRow(svg, task, parsed, x, y, labelW, roleX, roleColW, palette, surfaceBg, solid, taskDiagnostics, _hasAnyDiagnostic, rowContent, onClickLine, _onMarkerDragStart, sLabelFont, sDescFont, sCellPad, sRowHeight, sColumnInset, sNodeRadius, sNodeStrokeWidth, sMarkerFont, sLegendLabelFont, sStackTopGap, sViolationLineHeight) {
627
+ function renderTaskRow(svg, task, parsed, x, y, labelW, roleX, roleColW, palette, surfaceBg, fillMode, taskDiagnostics, _hasAnyDiagnostic, rowContent, onClickLine, _onMarkerDragStart, sLabelFont, sDescFont, sCellPad, sRowHeight, sColumnInset, sNodeRadius, sNodeStrokeWidth, sMarkerFont, sLegendLabelFont, sStackTopGap, sViolationLineHeight) {
589
628
  const rowG = svg.append("g").attr("class", "raci-task-row").attr("data-task-id", task.id).attr("data-line-number", String(task.lineNumber));
590
629
  const labelX = x + 8;
591
630
  const labelMaxW = labelW - 16;
@@ -664,7 +703,7 @@ function renderTaskRow(svg, task, parsed, x, y, labelW, roleX, roleColW, palette
664
703
  const variantLabels = MARKER_LABELS[parsed.variant];
665
704
  markers.forEach((m, i) => {
666
705
  const rawColor = markerColor(m, palette);
667
- const fill = solid ? rawColor : mix(rawColor, surfaceBg, TINT_PCT);
706
+ const fill = fillMode === "solid" ? rawColor : fillMode === "outline" ? surfaceBg : mix(rawColor, surfaceBg, TINT_PCT);
668
707
  const stroke = rawColor;
669
708
  const sliceX = cx + i * (sliceW + SLICE_GAP);
670
709
  const sliceG = cellG.append("g").attr("class", "raci-marker-slice").attr("data-marker", m).style("cursor", "grab");
@@ -676,7 +715,7 @@ function renderTaskRow(svg, task, parsed, x, y, labelW, roleX, roleColW, palette
676
715
  const textFont = showFullLabel ? sLegendLabelFont : sMarkerFont;
677
716
  sliceG.append("text").attr("x", sliceX + sliceW / 2).attr("y", cy + ch / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", textFont).attr("font-weight", MARKER_FONT_WEIGHT).attr(
678
717
  "fill",
679
- solid ? contrastText(
718
+ fillMode === "solid" ? contrastText(
680
719
  fill,
681
720
  palette.textOnFillLight,
682
721
  palette.textOnFillDark
@@ -747,4 +786,4 @@ export {
747
786
  renderRaci,
748
787
  renderRaciForExport
749
788
  };
750
- //# sourceMappingURL=chunk-H73FP42Q.js.map
789
+ //# sourceMappingURL=chunk-FQMUHRVC.js.map