@diagrammo/dgmo 0.77.0 → 0.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +17 -13
  2. package/dist/advanced.d.ts +197 -23
  3. package/dist/advanced.js +161 -142
  4. package/dist/block.css +1 -1
  5. package/dist/block.d.ts +2 -2
  6. package/dist/block.js +62 -58
  7. package/dist/{calculator-CVQ54JNE.js → calculator-OHTCZSBW.js} +3 -3
  8. package/dist/{chart-meta-Cf_jkApJ.d.ts → chart-meta-B7lSmrzg.d.ts} +2 -2
  9. package/dist/chart-meta.d.ts +3 -3
  10. package/dist/chart-meta.js +45 -44
  11. package/dist/charts-d3-EST3Z5VG.js +31 -0
  12. package/dist/{chunk-U4DS2ODO.js → chunk-253E5ISJ.js} +9 -9
  13. package/dist/{chunk-7IATMZSA.js → chunk-26EVL454.js} +1 -25
  14. package/dist/{chunk-MG3DE3VO.js → chunk-2F7AG7LA.js} +4 -4
  15. package/dist/{chunk-OWVDD5EC.js → chunk-2R2M2C6V.js} +2 -2
  16. package/dist/{chunk-LYJ53DBK.js → chunk-2RAH6GVR.js} +56 -41
  17. package/dist/{chunk-Q74GP3GK.js → chunk-37NDM5NW.js} +3 -3
  18. package/dist/{chunk-N6MZSBOL.js → chunk-3BN3WCUD.js} +5 -2
  19. package/dist/chunk-3DPOIW3W.js +10 -0
  20. package/dist/{chunk-HDLRRY3N.js → chunk-3KFGPXHD.js} +195 -135
  21. package/dist/{chunk-NWNSXHA5.js → chunk-3KNA7OIO.js} +3 -3
  22. package/dist/{chunk-M5OOAP65.js → chunk-4CA7TJ44.js} +2 -1
  23. package/dist/{chunk-M5JT2AU7.js → chunk-4L43NPSQ.js} +10 -6
  24. package/dist/{chunk-4YER7UCV.js → chunk-4T6V7JJA.js} +3 -3
  25. package/dist/{chunk-3E4YB6TY.js → chunk-4YSWUQKZ.js} +12 -7
  26. package/dist/{chunk-6BVAW7KI.js → chunk-54JYWS7D.js} +50 -43
  27. package/dist/{chunk-7NSNE52V.js → chunk-55DMCFGM.js} +3 -3
  28. package/dist/{chunk-XPBJVSRY.js → chunk-5BV5MXLY.js} +38 -32
  29. package/dist/{chunk-5VMUVJO4.js → chunk-5DWF3N3V.js} +3 -3
  30. package/dist/{chunk-SSEAULA5.js → chunk-6775W3UW.js} +19 -15
  31. package/dist/{chunk-2QRIMMIH.js → chunk-6EMJRAEY.js} +3 -3
  32. package/dist/{chunk-OZOHREFQ.js → chunk-6FUIPWTS.js} +14 -15
  33. package/dist/{chunk-F4V67JXG.js → chunk-6JIMYPXR.js} +4 -4
  34. package/dist/{chunk-CHOK7NCJ.js → chunk-7AEMAUDF.js} +29 -25
  35. package/dist/{chunk-NVOU7N6C.js → chunk-7DCM3CB5.js} +2 -2
  36. package/dist/{chunk-UBDVAHGK.js → chunk-7EUTTKNU.js} +36 -31
  37. package/dist/{chunk-76NHL5UG.js → chunk-7I6NWTPE.js} +2 -2
  38. package/dist/{chunk-OKXWPKUC.js → chunk-7SHL2WME.js} +2 -2
  39. package/dist/{chunk-SWEKCK34.js → chunk-AFOHIR2O.js} +3 -3
  40. package/dist/{chunk-RWFMOVHG.js → chunk-AI7TZQ2R.js} +3 -3
  41. package/dist/{chunk-BWJLLNUX.js → chunk-ALVK3TBO.js} +3 -3
  42. package/dist/{chunk-GLREDNBA.js → chunk-AMQFJ7P7.js} +21 -2
  43. package/dist/{chunk-RGW26UAR.js → chunk-CCETDPLV.js} +11 -11
  44. package/dist/{chunk-5ZD4DDG7.js → chunk-CE654SL2.js} +17 -14
  45. package/dist/{chunk-TPN7RJOM.js → chunk-CFYTCBRH.js} +4 -4
  46. package/dist/{chunk-YT5ICQ4R.js → chunk-CKDYRVOC.js} +3 -3
  47. package/dist/{chunk-WQXD3IIN.js → chunk-CRBW2WS7.js} +11 -9
  48. package/dist/{chunk-J76YDS4V.js → chunk-CREALBZL.js} +3 -3
  49. package/dist/{chunk-MZEGUDTA.js → chunk-CSTYDCKB.js} +16 -16
  50. package/dist/{chunk-QBM5BURJ.js → chunk-DG5IQW74.js} +10 -10
  51. package/dist/{chunk-Y2CYNRL7.js → chunk-DN6K6QCF.js} +2 -2
  52. package/dist/{chunk-43AJKH2U.js → chunk-DQOCYWB6.js} +12 -10
  53. package/dist/{chunk-FTTB64OJ.js → chunk-EBEFYSVZ.js} +40 -40
  54. package/dist/{chunk-L65WI4HO.js → chunk-EDU2OCIQ.js} +2 -2
  55. package/dist/{chunk-SWUQJ5VR.js → chunk-EOG4QKKV.js} +108 -65
  56. package/dist/chunk-EPDBWATV.js +38 -0
  57. package/dist/{chunk-5GM6BZO7.js → chunk-F66R7CPY.js} +6 -3
  58. package/dist/{chunk-7BMX2M3F.js → chunk-FFDHZVEL.js} +2 -2
  59. package/dist/{chunk-WGC42WJU.js → chunk-FWNJDD4U.js} +6 -2
  60. package/dist/{chunk-SI3PYDL4.js → chunk-GWA6UGNX.js} +22 -22
  61. package/dist/{chunk-QMFIZQTB.js → chunk-HIOJSYDA.js} +7 -5
  62. package/dist/{chunk-NHQ7HUAS.js → chunk-HJ5DKZPO.js} +12 -10
  63. package/dist/{chunk-FPRMP6YA.js → chunk-HJZ4OET2.js} +32 -17
  64. package/dist/{chunk-N5NQIZ56.js → chunk-HLTVEXML.js} +25 -25
  65. package/dist/{chunk-6IN4F4RH.js → chunk-I6DFQQER.js} +42 -44
  66. package/dist/chunk-ICLB27PZ.js +11 -0
  67. package/dist/{chunk-R3XI2VC7.js → chunk-IDJGV6VM.js} +2 -1
  68. package/dist/{chunk-ZM27UI5O.js → chunk-IEK2FUWO.js} +19 -6
  69. package/dist/{chunk-FJ57274M.js → chunk-IIEI7VK5.js} +15 -1
  70. package/dist/{chunk-DY7KDZUF.js → chunk-IZK2H4KU.js} +3 -3
  71. package/dist/{chunk-CRLVJZWX.js → chunk-JOG6W3VS.js} +2 -2
  72. package/dist/{chunk-XFXJXLK7.js → chunk-JTLLQT34.js} +19 -19
  73. package/dist/{chunk-MS5574I7.js → chunk-K3K7JHZI.js} +2 -2
  74. package/dist/{chunk-GOW5VO6M.js → chunk-KHRZCKKG.js} +2 -2
  75. package/dist/{chunk-D3B6YEZK.js → chunk-KIF4UFD2.js} +20 -16
  76. package/dist/{chunk-EUVUOPRC.js → chunk-KYK6PMB5.js} +55 -34
  77. package/dist/{chunk-RU2HHHYA.js → chunk-LD2JSKU3.js} +12 -2
  78. package/dist/{chunk-CYMYZYLI.js → chunk-LJ7X6ZNV.js} +25 -28
  79. package/dist/{chunk-ICVIJLBA.js → chunk-LLYHYPYG.js} +4 -4
  80. package/dist/{chunk-VRPV6QXR.js → chunk-LLZVRWVS.js} +2 -2
  81. package/dist/{chunk-Z7KVOVE4.js → chunk-LXTMP3VT.js} +7 -4
  82. package/dist/{chunk-7CXW6EGX.js → chunk-MDUCF376.js} +28 -26
  83. package/dist/{chunk-KWSBNLSC.js → chunk-MQAD75AY.js} +2 -2
  84. package/dist/{chunk-XCFIAGT7.js → chunk-MUTZSF2A.js} +17 -16
  85. package/dist/{chunk-CF3I5SOG.js → chunk-NVI5G57O.js} +29 -27
  86. package/dist/{chunk-76LHNLGX.js → chunk-O2HU4AQN.js} +34 -5
  87. package/dist/{chunk-46KVXDUJ.js → chunk-O5QG5IFV.js} +12 -3
  88. package/dist/{chunk-V4NHFY22.js → chunk-OLRVGPJ3.js} +33 -20
  89. package/dist/{chunk-WHWUVDYK.js → chunk-OM6XZAKM.js} +7 -7
  90. package/dist/{chunk-DSXWJAOA.js → chunk-OMN4F42L.js} +17 -15
  91. package/dist/{chunk-LM3HY3VG.js → chunk-P4U5GST7.js} +3 -3
  92. package/dist/{chunk-BH3BQICT.js → chunk-PKW4TLJC.js} +88 -44
  93. package/dist/{chunk-GRN44Z6A.js → chunk-PQR7E3LY.js} +2 -2
  94. package/dist/{chunk-SH4PPRU7.js → chunk-Q5KGGW7Z.js} +2 -2
  95. package/dist/{chunk-RV5A3EGI.js → chunk-QDHOIBHZ.js} +21 -20
  96. package/dist/{chunk-UH5YTZN7.js → chunk-QDTFFVLT.js} +113 -23
  97. package/dist/chunk-QFIXL3OK.js +68 -0
  98. package/dist/{chunk-QXMHBIQG.js → chunk-QGXH64FT.js} +52 -49
  99. package/dist/{chunk-VS2M72PF.js → chunk-RLJKH4ZO.js} +4 -2
  100. package/dist/{chunk-6ZZKEYBS.js → chunk-RN3DOUOU.js} +17 -15
  101. package/dist/{chunk-VBJCGGNF.js → chunk-RPP3NHKV.js} +2 -2
  102. package/dist/{chunk-RTTZIX34.js → chunk-RVWWCQAB.js} +3 -3
  103. package/dist/{chunk-FR5EVD2X.js → chunk-RWF7TCGT.js} +68 -38
  104. package/dist/{chunk-LKS56RDT.js → chunk-S6GPBJWG.js} +2 -2
  105. package/dist/{chunk-UJBP57UJ.js → chunk-S7ZJEQPW.js} +4 -4
  106. package/dist/{chunk-3H4PDNP4.js → chunk-SEOM2BGQ.js} +3 -3
  107. package/dist/{chunk-5PFNUDXR.js → chunk-T3EW35M2.js} +3 -3
  108. package/dist/{chunk-3SP6G4LN.js → chunk-TPQ6Q7JP.js} +3 -3
  109. package/dist/{chunk-B52RL5VV.js → chunk-ULUZBEFO.js} +11 -11
  110. package/dist/{chunk-F4X5NVKY.js → chunk-UNYOWKEC.js} +13 -4
  111. package/dist/{chunk-DEW62ON3.js → chunk-VSPNH7LC.js} +2 -2
  112. package/dist/{chunk-C2WH3BMS.js → chunk-VTWUHX4H.js} +10 -7
  113. package/dist/{chunk-DJL5PO27.js → chunk-W4MC3KP6.js} +2 -2
  114. package/dist/{chunk-MU3CJPJF.js → chunk-W6DBWWPC.js} +3 -3
  115. package/dist/{chunk-JLODGGN2.js → chunk-WC72PTV4.js} +3 -3
  116. package/dist/{chunk-NCT22MOD.js → chunk-WMIKC5XO.js} +2 -2
  117. package/dist/{chunk-H7BYMIVK.js → chunk-WY4L675I.js} +70 -44
  118. package/dist/chunk-XBJJP2HN.js +37 -0
  119. package/dist/{chunk-KRTLS3G6.js → chunk-XDEEYDPQ.js} +4 -4
  120. package/dist/{chunk-S5P5Z5Y5.js → chunk-XNAMWOPJ.js} +3 -3
  121. package/dist/{chunk-2MTM4E6M.js → chunk-XND5JIJA.js} +68 -65
  122. package/dist/{chunk-S6OXNZBM.js → chunk-XWC4RQ7T.js} +4 -4
  123. package/dist/{chunk-UCZBRGJN.js → chunk-XXLAZQ5E.js} +2 -2
  124. package/dist/{chunk-LXXVHLTH.js → chunk-Y22BJKMK.js} +3 -3
  125. package/dist/{chunk-OO2L2LWV.js → chunk-Y2KFQX5K.js} +89 -66
  126. package/dist/{chunk-TI4YUUW6.js → chunk-Y3OLUMJH.js} +31 -30
  127. package/dist/{chunk-CIWFL2LM.js → chunk-Y3RYIGHZ.js} +17 -15
  128. package/dist/{chunk-MTGGOCND.js → chunk-YC6GVLTI.js} +61 -10
  129. package/dist/{chunk-TKIPK5P6.js → chunk-YD2HPT7W.js} +5 -7
  130. package/dist/{chunk-3O7ZYVJV.js → chunk-YPVP6I62.js} +19 -15
  131. package/dist/{chunk-FF7LRT5L.js → chunk-YQIZIKCK.js} +35 -27
  132. package/dist/{chunk-M526IKKH.js → chunk-Z4COUG7H.js} +2 -2
  133. package/dist/{chunk-LTTZX6RD.js → chunk-Z5ZCTCX4.js} +3 -3
  134. package/dist/{chunk-QOVM5VRC.js → chunk-ZASX45SU.js} +3 -3
  135. package/dist/{chunk-W7UBPARG.js → chunk-ZH3BWGTE.js} +3 -3
  136. package/dist/{chunk-TN754B3R.js → chunk-ZZZJVDIL.js} +2 -2
  137. package/dist/clock.js +11 -5
  138. package/dist/completion-registry.js +3 -3
  139. package/dist/countdown.js +26 -20
  140. package/dist/{d3-BiaJtaSw.d.ts → d3-Bje6Mla1.d.ts} +1 -1
  141. package/dist/dgmo-router-OXFV43XX.js +90 -0
  142. package/dist/{dgmo-router-BwXHZ_P3.d.ts → dgmo-router-zWf4Uxxg.d.ts} +1 -1
  143. package/dist/dimensions-AN34SPVX.js +22 -0
  144. package/dist/{flowchart-parser-NVBP3C5D.js → flowchart-parser-MRNAVG35.js} +4 -4
  145. package/dist/flowchart-renderer-IGSKJFMF.js +37 -0
  146. package/dist/index.d.ts +7 -7
  147. package/dist/index.js +75 -60
  148. package/dist/{layout-Y2V3LYV7.js → layout-5AYAYUJH.js} +2 -2
  149. package/dist/{layout-ZAGUFT2G.js → layout-6APS2RRG.js} +8 -7
  150. package/dist/{layout-B5GQVXXY.js → layout-6VUNAH6F.js} +8 -7
  151. package/dist/{layout-RV2T2YTT.js → layout-74HDWQYG.js} +6 -5
  152. package/dist/{layout-6SKHNQYO.js → layout-FCIYZV63.js} +4 -4
  153. package/dist/{layout-4LNMXLVK.js → layout-J2Z2SYH5.js} +3 -3
  154. package/dist/layout-LELNMRM5.js +16 -0
  155. package/dist/{layout-EM4DLMAX.js → layout-OPF6KTOH.js} +5 -5
  156. package/dist/layout-SUND6B7D.js +9 -0
  157. package/dist/layout-WASEHV3S.js +19 -0
  158. package/dist/{layout-SGYR6HBX.js → layout-XAJLQPI6.js} +3 -3
  159. package/dist/layout-XY45TFJ4.js +16 -0
  160. package/dist/layout-YPRXVCW5.js +19 -0
  161. package/dist/{layout-2OJ25STS.js → layout-ZJOWB27N.js} +9 -8
  162. package/dist/{layout-search-UOKEMER5.js → layout-search-3JKNSUTJ.js} +8 -7
  163. package/dist/{legend-constants-PLN2YHGM.js → legend-constants-RSWFR3L6.js} +4 -4
  164. package/dist/{palettes-54YSI3IX.js → palettes-IAF6WVL4.js} +5 -3
  165. package/dist/{parser-QOIZGW7I.js → parser-2Y7LWKNO.js} +4 -4
  166. package/dist/{parser-EQ4I3TSH.js → parser-4GUQUDAC.js} +5 -5
  167. package/dist/{parser-TA5TYZNL.js → parser-4OXANARZ.js} +5 -5
  168. package/dist/{parser-L7T7FY3H.js → parser-56UEMRXS.js} +4 -4
  169. package/dist/{parser-2GMHFSTS.js → parser-66QZQYGE.js} +4 -4
  170. package/dist/{parser-3AOMUX5D.js → parser-6SS7DKVW.js} +4 -4
  171. package/dist/{parser-QYAIFXLP.js → parser-AYURCBDZ.js} +4 -4
  172. package/dist/{parser-5XFGK5C5.js → parser-COPCQEHV.js} +6 -6
  173. package/dist/{parser-F4ZKDGUZ.js → parser-DEWJM5PX.js} +3 -3
  174. package/dist/{parser-ZXQZZK6W.js → parser-DQKZDA2J.js} +4 -3
  175. package/dist/{parser-WCFG3DZA.js → parser-EMPM3V35.js} +3 -3
  176. package/dist/{parser-6FUESG4N.js → parser-EP2JQJNV.js} +4 -4
  177. package/dist/{parser-ZYAFHXKQ.js → parser-FDDHTBRV.js} +4 -4
  178. package/dist/{parser-3KQONLXZ.js → parser-FDESUQ32.js} +3 -3
  179. package/dist/{parser-LV7PQBUG.js → parser-GK6CMK4P.js} +4 -4
  180. package/dist/{parser-WVE6SKB7.js → parser-H33OKBUB.js} +4 -4
  181. package/dist/{parser-ML3LVNDV.js → parser-HJBSWTDY.js} +4 -4
  182. package/dist/{parser-PR3OR3LO.js → parser-HRIKI5O3.js} +5 -5
  183. package/dist/{parser-H4ZUNLX4.js → parser-I77632XB.js} +3 -3
  184. package/dist/{parser-YWQCC33R.js → parser-JGMQE7FS.js} +4 -4
  185. package/dist/{parser-WMJEPZDC.js → parser-JIPG576H.js} +4 -4
  186. package/dist/{parser-E3OHNNTH.js → parser-JNJ2IFSO.js} +4 -4
  187. package/dist/{parser-CJNP7RKR.js → parser-LCUQTABE.js} +4 -4
  188. package/dist/{parser-4DLU4SNG.js → parser-LXU3MGG6.js} +3 -3
  189. package/dist/{parser-WWRRG2DV.js → parser-N4YB5EIZ.js} +4 -4
  190. package/dist/{parser-XVSDFO56.js → parser-NC36PRBR.js} +3 -3
  191. package/dist/{parser-RDBXEVI4.js → parser-O6WYAXTS.js} +4 -4
  192. package/dist/{parser-4KFJKLP2.js → parser-UHABNZBC.js} +3 -3
  193. package/dist/{parser-GCVSRQPY.js → parser-V6HULGXW.js} +4 -4
  194. package/dist/{parser-UTR5WE4O.js → parser-VVWZIMYS.js} +4 -4
  195. package/dist/{parser-B2XQNHZM.js → parser-YJGTPT7A.js} +3 -3
  196. package/dist/{parser-WQNT7T2P.js → parser-YQ5F7ATB.js} +3 -3
  197. package/dist/{parser-ZT3PU2HT.js → parser-ZUH2G7J2.js} +4 -4
  198. package/dist/renderer-2ZGZSSCV.js +39 -0
  199. package/dist/renderer-33AB7UAZ.js +35 -0
  200. package/dist/renderer-43KEDLTQ.js +23 -0
  201. package/dist/renderer-4E6NNPNU.js +29 -0
  202. package/dist/renderer-4HFT4HJG.js +39 -0
  203. package/dist/renderer-63MHARNI.js +20 -0
  204. package/dist/renderer-6HPV7BMG.js +23 -0
  205. package/dist/renderer-BVJ3NVRB.js +20 -0
  206. package/dist/renderer-DV44AS75.js +28 -0
  207. package/dist/renderer-FLLVGYUY.js +30 -0
  208. package/dist/renderer-FSV7MTW3.js +17 -0
  209. package/dist/renderer-H6XEVHKH.js +27 -0
  210. package/dist/renderer-HNEMQJXT.js +21 -0
  211. package/dist/{renderer-CVWQD442.js → renderer-IIN3RY4F.js} +6 -5
  212. package/dist/renderer-K2OWHNBV.js +25 -0
  213. package/dist/renderer-M6UIXQHH.js +27 -0
  214. package/dist/renderer-N5CRYFBI.js +31 -0
  215. package/dist/{renderer-VF7X66SL.js → renderer-O3O6A3RY.js} +16 -16
  216. package/dist/renderer-OVRX36WE.js +39 -0
  217. package/dist/renderer-PLKMHBAB.js +30 -0
  218. package/dist/{renderer-G2DPKJAN.js → renderer-REHVBQ57.js} +17 -16
  219. package/dist/{renderer-GHBF5PRH.js → renderer-RW446FGL.js} +6 -5
  220. package/dist/renderer-SJV75NUI.js +28 -0
  221. package/dist/renderer-TKWW45LZ.js +36 -0
  222. package/dist/{renderer-FTX67CYZ.js → renderer-UHLTPQTW.js} +7 -6
  223. package/dist/renderer-UNYFAMFE.js +16 -0
  224. package/dist/renderer-URXHBQOF.js +26 -0
  225. package/dist/renderer-VBAQQWDB.js +25 -0
  226. package/dist/renderer-VI72MVFW.js +77 -0
  227. package/dist/renderer-XGJIACBV.js +25 -0
  228. package/dist/renderer-XVTKGPYT.js +20 -0
  229. package/dist/{renderer-R5HIRN2M.js → renderer-YLIICO4R.js} +9 -9
  230. package/dist/renderer-ZG6GPWZF.js +27 -0
  231. package/dist/renderer-radial-7UHFYOOL.js +21 -0
  232. package/dist/{state-parser-TPA67IXM.js → state-parser-XT4ZPQAF.js} +5 -5
  233. package/dist/state-renderer-6TVII5ZJ.js +41 -0
  234. package/dist/{tag-groups-BAtkq0b_.d.ts → tag-groups-DIJV_50B.d.ts} +18 -9
  235. package/dist/{themes-DpsyRSO7.d.ts → themes-Bgkyh6gh.d.ts} +2 -2
  236. package/docs/architecture-report.md +3 -3
  237. package/docs/language-reference.md +128 -30
  238. package/docs/migration-sequence-color-to-tags.md +16 -8
  239. package/package.json +7 -6
  240. package/dist/charts-d3-HMEMHSSW.js +0 -29
  241. package/dist/chunk-53SEVJQM.js +0 -9
  242. package/dist/chunk-LP7EC4MI.js +0 -16
  243. package/dist/chunk-YM5RMLFO.js +0 -40
  244. package/dist/dgmo-router-A3LIHT6H.js +0 -89
  245. package/dist/dimensions-OFF4GRFL.js +0 -22
  246. package/dist/flowchart-renderer-BBJUPORB.js +0 -36
  247. package/dist/layout-5ILNODTP.js +0 -15
  248. package/dist/layout-IN53LAE6.js +0 -9
  249. package/dist/layout-KQUSB45X.js +0 -18
  250. package/dist/layout-ROORJQ4X.js +0 -18
  251. package/dist/layout-VUZ3MLOI.js +0 -15
  252. package/dist/renderer-2ANDPQWC.js +0 -16
  253. package/dist/renderer-2LDT4TUX.js +0 -25
  254. package/dist/renderer-2NYQDW37.js +0 -20
  255. package/dist/renderer-2RIIIO34.js +0 -39
  256. package/dist/renderer-3HFU3DTO.js +0 -25
  257. package/dist/renderer-4BF6ILP6.js +0 -27
  258. package/dist/renderer-5E2AH5TO.js +0 -38
  259. package/dist/renderer-62SLWRYF.js +0 -27
  260. package/dist/renderer-ANJUDBOS.js +0 -34
  261. package/dist/renderer-D6GJ6EVK.js +0 -30
  262. package/dist/renderer-DNFV2IQI.js +0 -36
  263. package/dist/renderer-EDVCGIQO.js +0 -76
  264. package/dist/renderer-EFQSMHID.js +0 -27
  265. package/dist/renderer-GZLRX764.js +0 -24
  266. package/dist/renderer-H2HYLFN3.js +0 -20
  267. package/dist/renderer-IR5655M7.js +0 -28
  268. package/dist/renderer-L237AOOZ.js +0 -16
  269. package/dist/renderer-LSJWYGOL.js +0 -39
  270. package/dist/renderer-LWXDMZOV.js +0 -28
  271. package/dist/renderer-MYSVPERC.js +0 -22
  272. package/dist/renderer-OL5QSZPC.js +0 -31
  273. package/dist/renderer-P26HH3NA.js +0 -30
  274. package/dist/renderer-RNFECJ5D.js +0 -21
  275. package/dist/renderer-RPZVNCTF.js +0 -26
  276. package/dist/renderer-SDNWZDUY.js +0 -23
  277. package/dist/renderer-UKHH4UWV.js +0 -25
  278. package/dist/renderer-Y3Y7PEUS.js +0 -20
  279. package/dist/renderer-radial-QNGCGKZP.js +0 -21
  280. package/dist/state-renderer-ELWDRXD6.js +0 -40
@@ -4,25 +4,32 @@ import {
4
4
  import {
5
5
  computeNodeSizing,
6
6
  layoutPert
7
- } from "./chunk-GOW5VO6M.js";
7
+ } from "./chunk-KHRZCKKG.js";
8
8
  import {
9
+ ScaleContext
10
+ } from "./chunk-24YPR5EH.js";
11
+ import {
12
+ ARROWHEAD_HEIGHT,
13
+ ARROWHEAD_WIDTH,
14
+ CARD_RADIUS,
9
15
  COLLAPSE_BAR_HEIGHT,
10
16
  CONTAINER_HEADER_HEIGHT,
11
17
  CONTAINER_LABEL_FONT_SIZE,
12
18
  CONTAINER_RADIUS,
19
+ EDGE_DASH,
13
20
  EDGE_STROKE_WIDTH,
21
+ HAIRLINE_DASH,
22
+ LABEL_FONT_SIZE,
23
+ META_FONT_SIZE,
14
24
  NODE_STROKE_WIDTH
15
- } from "./chunk-FJ57274M.js";
16
- import {
17
- ScaleContext
18
- } from "./chunk-24YPR5EH.js";
25
+ } from "./chunk-IIEI7VK5.js";
19
26
  import {
20
27
  INLINE_HEADER_PAD,
21
28
  layoutInlineHeader
22
- } from "./chunk-MG3DE3VO.js";
29
+ } from "./chunk-2F7AG7LA.js";
23
30
  import {
24
31
  serializeSvg
25
- } from "./chunk-RU2HHHYA.js";
32
+ } from "./chunk-LD2JSKU3.js";
26
33
  import {
27
34
  CAPTION_BOX_PADDING_X,
28
35
  CAPTION_BOX_PADDING_Y,
@@ -32,27 +39,27 @@ import {
32
39
  TITLE_FONT_SIZE,
33
40
  TITLE_FONT_WEIGHT,
34
41
  TITLE_Y
35
- } from "./chunk-DEW62ON3.js";
42
+ } from "./chunk-VSPNH7LC.js";
36
43
  import {
37
44
  renderIntegratedLegend
38
- } from "./chunk-U4DS2ODO.js";
45
+ } from "./chunk-253E5ISJ.js";
39
46
  import {
40
47
  getLegendExtent
41
- } from "./chunk-VRPV6QXR.js";
48
+ } from "./chunk-LLZVRWVS.js";
42
49
  import {
43
50
  FONT_FAMILY
44
- } from "./chunk-53SEVJQM.js";
51
+ } from "./chunk-ICLB27PZ.js";
45
52
  import {
46
53
  LEGEND_HEIGHT
47
- } from "./chunk-YT5ICQ4R.js";
54
+ } from "./chunk-CKDYRVOC.js";
48
55
  import {
49
56
  measureText,
50
57
  truncateText,
51
58
  wrapTextToWidth
52
- } from "./chunk-MTGGOCND.js";
59
+ } from "./chunk-YC6GVLTI.js";
53
60
  import {
54
61
  parsePert
55
- } from "./chunk-RWFMOVHG.js";
62
+ } from "./chunk-AI7TZQ2R.js";
56
63
  import {
57
64
  addCalendarDays,
58
65
  formatDuration,
@@ -61,23 +68,24 @@ import {
61
68
  formatSprintCell
62
69
  } from "./chunk-3TYUXC7D.js";
63
70
  import {
71
+ UNTAGGED_TAG_COLOR,
64
72
  resolveActiveTagGroup,
73
+ resolveGroupTagColor,
65
74
  resolveTagColor
66
- } from "./chunk-76LHNLGX.js";
75
+ } from "./chunk-O2HU4AQN.js";
67
76
  import {
68
77
  contrastText,
78
+ groupFill,
69
79
  mix,
70
80
  shapeFill,
71
81
  themeBaseBg
72
- } from "./chunk-GLREDNBA.js";
82
+ } from "./chunk-AMQFJ7P7.js";
73
83
 
74
84
  // src/pert/renderer.ts
75
85
  import * as d3Selection from "d3-selection";
76
86
  import * as d3Shape from "d3-shape";
87
+ var PAST_PERCENTILE_DASH = "4 2";
77
88
  var DIAGRAM_PADDING = 20;
78
- var NODE_FONT_SIZE = 13;
79
- var NODE_CELL_FONT_SIZE = 11;
80
- var NODE_RADIUS = 6;
81
89
  function analysisBlockChrome(palette, isDark) {
82
90
  const surfaceBg = themeBaseBg(palette, isDark);
83
91
  return {
@@ -87,8 +95,6 @@ function analysisBlockChrome(palette, isDark) {
87
95
  }
88
96
  var NODE_TOP_ROW_HEIGHT = 26;
89
97
  var NODE_BOTTOM_ROW_HEIGHT = 26;
90
- var ARROWHEAD_W = 10;
91
- var ARROWHEAD_H = 7;
92
98
  var DURATION_FADE_OPACITY = 0.55;
93
99
  var PIN_ICON_W = 13;
94
100
  var PIN_ICON_H = 13;
@@ -208,15 +214,15 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
208
214
  const sLegendBottomGap = ctx.aesthetic(LEGEND_BOTTOM_GAP);
209
215
  const sLegendPillHeight = ctx.structural(LEGEND_PILL_HEIGHT);
210
216
  const sLegendBlockHeight = showTagLegend ? sLegendTopGap + sLegendPillHeight + sLegendBottomGap : 0;
211
- const sNodeRadius = ctx.structural(NODE_RADIUS);
217
+ const sNodeRadius = ctx.structural(CARD_RADIUS);
212
218
  const sNodeStrokeWidth = ctx.structural(NODE_STROKE_WIDTH);
213
- const sNodeFontSize = ctx.text(NODE_FONT_SIZE);
214
- const sNodeCellFontSize = ctx.text(NODE_CELL_FONT_SIZE);
219
+ const sNodeFontSize = ctx.text(LABEL_FONT_SIZE);
220
+ const sNodeCellFontSize = ctx.text(META_FONT_SIZE);
215
221
  const sNodeTopRowHeight = ctx.structural(NODE_TOP_ROW_HEIGHT);
216
222
  const sNodeBottomRowHeight = ctx.structural(NODE_BOTTOM_ROW_HEIGHT);
217
223
  const sEdgeStrokeWidth = ctx.structural(EDGE_STROKE_WIDTH);
218
- const sArrowheadW = ctx.structural(ARROWHEAD_W);
219
- const sArrowheadH = ctx.structural(ARROWHEAD_H);
224
+ const sArrowheadW = ctx.structural(ARROWHEAD_WIDTH);
225
+ const sArrowheadH = ctx.structural(ARROWHEAD_HEIGHT);
220
226
  const sContainerRadius = ctx.structural(CONTAINER_RADIUS);
221
227
  const sContainerLabelFontSize = ctx.text(CONTAINER_LABEL_FONT_SIZE);
222
228
  const sContainerHeaderHeight = ctx.structural(CONTAINER_HEADER_HEIGHT);
@@ -263,7 +269,7 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
263
269
  }
264
270
  if (effectiveSubtitle) {
265
271
  const subtitleY = effectiveTitle ? sTitleY + ctx.aesthetic(26) : sTitleY;
266
- svg.append("text").attr("class", "pert-subtitle").attr("x", svgW / 2).attr("y", subtitleY).attr("text-anchor", "middle").attr("fill", palette.textMuted).attr("font-size", sSubtitleFontSize).attr("font-weight", 400).text(effectiveSubtitle);
272
+ svg.append("text").attr("class", "pert-subtitle").attr("x", svgW / 2).attr("y", subtitleY).attr("text-anchor", "middle").attr("fill", palette.textMuted).attr("font-size", sSubtitleFontSize).attr("font-weight", "normal").text(effectiveSubtitle);
267
273
  }
268
274
  const offsetX = Math.max(sDiagramPad, (svgW - layout.width) / 2);
269
275
  const offsetY = sDiagramPad + sTitleHeight + (header.inline ? 0 : sLegendBlockHeight);
@@ -282,20 +288,30 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
282
288
  }
283
289
  const root = svg.append("g").attr("transform", `translate(${offsetX}, ${offsetY})`);
284
290
  const sizing = computeNodeSizing(resolved);
285
- renderGroups(root, resolved, layout, palette, isDark, collapsedSet, sizing, {
286
- nodeRadius: sNodeRadius,
287
- nodeStrokeWidth: sNodeStrokeWidth,
288
- containerRadius: sContainerRadius,
289
- containerLabelFontSize: sContainerLabelFontSize,
290
- containerHeaderHeight: sContainerHeaderHeight,
291
- collapseBarHeight: sCollapseBarHeight,
292
- nodeTopRowHeight: sNodeTopRowHeight,
293
- nodeBottomRowHeight: sNodeBottomRowHeight,
294
- nodeFontSize: sNodeFontSize,
295
- nodeCellFontSize: sNodeCellFontSize,
296
- pinIconW: sPinIconW,
297
- pinIconH: sPinIconH
298
- });
291
+ renderGroups(
292
+ root,
293
+ resolved,
294
+ layout,
295
+ palette,
296
+ isDark,
297
+ collapsedSet,
298
+ sizing,
299
+ {
300
+ nodeRadius: sNodeRadius,
301
+ nodeStrokeWidth: sNodeStrokeWidth,
302
+ containerRadius: sContainerRadius,
303
+ containerLabelFontSize: sContainerLabelFontSize,
304
+ containerHeaderHeight: sContainerHeaderHeight,
305
+ collapseBarHeight: sCollapseBarHeight,
306
+ nodeTopRowHeight: sNodeTopRowHeight,
307
+ nodeBottomRowHeight: sNodeBottomRowHeight,
308
+ nodeFontSize: sNodeFontSize,
309
+ nodeCellFontSize: sNodeCellFontSize,
310
+ pinIconW: sPinIconW,
311
+ pinIconH: sPinIconH
312
+ },
313
+ tagLegendActive
314
+ );
299
315
  renderEdges(root, resolved, layout, palette, collapsedSet, {
300
316
  edgeStrokeWidth: sEdgeStrokeWidth,
301
317
  edgeLabelFontSize: ctx.text(10)
@@ -660,7 +676,7 @@ function renderPertAnalysisBlock(container, resolved, palette, isDark, options)
660
676
  const svg = d3Selection.select(container).append("svg").attr("width", width).attr("height", totalHeight).attr("viewBox", `0 0 ${width} ${totalHeight}`).attr("preserveAspectRatio", "xMidYMin meet").style("font-family", FONT_FAMILY).style("overflow", "visible");
661
677
  paintAnalysisLayer(svg, resolved, palette, isDark, state, 0, 0, width);
662
678
  }
663
- function buildArrowheads(defs, palette, arrowW = ARROWHEAD_W, arrowH = ARROWHEAD_H) {
679
+ function buildArrowheads(defs, palette, arrowW = ARROWHEAD_WIDTH, arrowH = ARROWHEAD_HEIGHT) {
664
680
  const mk = (id, fill) => {
665
681
  defs.append("marker").attr("id", id).attr("viewBox", `0 0 ${arrowW} ${arrowH}`).attr("refX", arrowW).attr("refY", arrowH / 2).attr("markerWidth", arrowW).attr("markerHeight", arrowH).attr("orient", "auto").append("polygon").attr("points", `0,0 ${arrowW},${arrowH / 2} 0,${arrowH}`).attr("fill", fill);
666
682
  };
@@ -671,13 +687,13 @@ function buildArrowheads(defs, palette, arrowW = ARROWHEAD_W, arrowH = ARROWHEAD
671
687
  mk("pert-arrow-green", palette.colors.green);
672
688
  mk("pert-arrow-blue", palette.colors.blue);
673
689
  }
674
- function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, sizing, sc = {}) {
690
+ function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, sizing, sc = {}, activeTagGroup = null) {
675
691
  if (layout.groups.length === 0) return;
676
692
  const layer = root.append("g").attr("class", "pert-groups");
677
693
  const unit = resolved.options.timeUnit;
678
694
  const fillMode = resolved.options.fillMode;
679
- const containerFill = mix(palette.surface, palette.bg, 40);
680
- const containerStroke = palette.textMuted;
695
+ const neutralContainerFill = mix(palette.surface, palette.bg, 40);
696
+ const neutralContainerStroke = palette.textMuted;
681
697
  const mcOn = resolved.monteCarloResult !== null;
682
698
  const groupHasCritical = (groupId) => resolved.activities.some(
683
699
  (a) => a.activity.groupId === groupId && a.isCriticalPath
@@ -690,6 +706,13 @@ function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, siz
690
706
  const isCollapsed = collapsedSet.has(grp.id);
691
707
  const memberBand = groupBand(grp.id, resolvedGroup?.criticality ?? null);
692
708
  const memberCritical = groupHasCritical(grp.id);
709
+ const grpTagColor = resolveGroupTagColor(
710
+ resolvedGroup?.group.tags,
711
+ resolved.tagGroups,
712
+ activeTagGroup
713
+ );
714
+ const containerFill = grpTagColor ? groupFill(palette, isDark, grpTagColor) : neutralContainerFill;
715
+ const containerStroke = grpTagColor ?? neutralContainerStroke;
693
716
  const g = layer.append("g").attr(
694
717
  "class",
695
718
  isCollapsed ? "pert-group pert-group-collapsed" : "pert-group"
@@ -736,7 +759,7 @@ function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, siz
736
759
  palette.textOnFillLight,
737
760
  palette.textOnFillDark
738
761
  );
739
- const sNR = sc.nodeRadius ?? NODE_RADIUS;
762
+ const sNR = sc.nodeRadius ?? CARD_RADIUS;
740
763
  const sCBH = sc.collapseBarHeight ?? COLLAPSE_BAR_HEIGHT;
741
764
  drawTextbookCard(g, {
742
765
  width: grp.width,
@@ -775,7 +798,7 @@ function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, siz
775
798
  const sCLFS = sc.containerLabelFontSize ?? CONTAINER_LABEL_FONT_SIZE;
776
799
  const sCHH = sc.containerHeaderHeight ?? CONTAINER_HEADER_HEIGHT;
777
800
  const sNSW = sc.nodeStrokeWidth ?? NODE_STROKE_WIDTH;
778
- g.append("rect").attr("x", grp.x).attr("y", grp.y).attr("width", grp.width).attr("height", grp.height).attr("rx", sCR).attr("ry", sCR).attr("fill", containerFill).attr("stroke", containerStroke).attr("stroke-opacity", 0.35).attr("stroke-width", sNSW);
801
+ g.append("rect").attr("x", grp.x).attr("y", grp.y).attr("width", grp.width).attr("height", grp.height).attr("rx", sCR).attr("ry", sCR).attr("fill", containerFill).attr("stroke", containerStroke).attr("stroke-opacity", grpTagColor ? 1 : 0.35).attr("stroke-width", sNSW);
779
802
  g.append("text").attr("x", grp.x + grp.width / 2).attr("y", grp.y + sCHH / 2 + sCLFS / 2 - 2).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("fill", palette.text).attr("font-size", sCLFS).attr("font-weight", "bold").text(label);
780
803
  }
781
804
  }
@@ -884,7 +907,7 @@ function renderNodes(root, _defs, resolved, layout, palette, isDark, sizing, onC
884
907
  if (r.activity.groupId && collapsedSet.has(r.activity.groupId)) continue;
885
908
  const isCritical = r.isCriticalPath;
886
909
  const isTbd = tbdSet.has(node.id);
887
- const dashArray = isTbd ? "4,3" : "none";
910
+ const dashArray = isTbd ? EDGE_DASH : "none";
888
911
  const isTopMu = topMuIds.has(node.id);
889
912
  const isBottomMu = bottomMuIds.has(node.id);
890
913
  let band;
@@ -924,7 +947,7 @@ function renderNodes(root, _defs, resolved, layout, palette, isDark, sizing, onC
924
947
  resolved.tagGroups,
925
948
  activeTagGroup
926
949
  );
927
- const hasTagColor = tagColor !== void 0 && tagColor !== "#999999";
950
+ const hasTagColor = tagColor !== void 0 && tagColor !== UNTAGGED_TAG_COLOR;
928
951
  const tagBandFill = hasTagColor ? shapeFill(palette, tagColor, isDark, { mode: fillMode }) : void 0;
929
952
  const tagLabelColor = hasTagColor ? contrastText(
930
953
  tagBandFill,
@@ -1009,12 +1032,12 @@ function computeDurationEmphasis(activities) {
1009
1032
  }
1010
1033
  function drawTextbookCard(g, a) {
1011
1034
  const { width: w, height: h, x, y } = a;
1012
- const sNR = a.sNodeRadius ?? NODE_RADIUS;
1035
+ const sNR = a.sNodeRadius ?? CARD_RADIUS;
1013
1036
  const sNSW = a.sNodeStrokeWidth ?? NODE_STROKE_WIDTH;
1014
1037
  const sTRH = a.sNodeTopRowHeight ?? NODE_TOP_ROW_HEIGHT;
1015
1038
  const sBRH = a.sNodeBottomRowHeight ?? NODE_BOTTOM_ROW_HEIGHT;
1016
- const sNFS = a.sNodeFontSize ?? NODE_FONT_SIZE;
1017
- const sNCFS = a.sNodeCellFontSize ?? NODE_CELL_FONT_SIZE;
1039
+ const sNFS = a.sNodeFontSize ?? LABEL_FONT_SIZE;
1040
+ const sNCFS = a.sNodeCellFontSize ?? META_FONT_SIZE;
1018
1041
  const sPIW = a.sPinIconW ?? PIN_ICON_W;
1019
1042
  const sPIH = a.sPinIconH ?? PIN_ICON_H;
1020
1043
  const outerColW = a.outerColW;
@@ -1108,11 +1131,11 @@ function drawTextbookCard(g, a) {
1108
1131
  }
1109
1132
  function drawMilestonePill(g, a) {
1110
1133
  const { width: w, height: h, x, y } = a;
1111
- const sNR = a.sNodeRadius ?? NODE_RADIUS;
1134
+ const sNR = a.sNodeRadius ?? CARD_RADIUS;
1112
1135
  const sNSW = a.sNodeStrokeWidth ?? NODE_STROKE_WIDTH;
1113
1136
  const topRowH = a.sNodeTopRowHeight ?? NODE_TOP_ROW_HEIGHT;
1114
1137
  const botRowH = a.sNodeBottomRowHeight ?? NODE_BOTTOM_ROW_HEIGHT;
1115
- const sNCFS = a.sNodeCellFontSize ?? NODE_CELL_FONT_SIZE;
1138
+ const sNCFS = a.sNodeCellFontSize ?? META_FONT_SIZE;
1116
1139
  const sPIW = a.sPinIconW ?? PIN_ICON_W;
1117
1140
  const sPIH = a.sPinIconH ?? PIN_ICON_H;
1118
1141
  const topY = y + topRowH;
@@ -1258,8 +1281,8 @@ function renderFieldLegendBlock(svg, args) {
1258
1281
  const gridBottom = y + height;
1259
1282
  const rowH = (gridBottom - gridTop) / 2;
1260
1283
  const block = svg.append("g").attr("class", "pert-field-legend").attr("data-pert-field-legend", "");
1261
- block.append("rect").attr("class", "pert-field-legend-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", "none").attr("stroke", baseColor).attr("stroke-opacity", 0.4).attr("stroke-width", 1);
1262
- block.append("text").attr("class", "pert-field-legend-header").attr("x", x + width / 2).attr("y", headerY).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "700").text("Field labels");
1284
+ block.append("rect").attr("class", "pert-field-legend-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS).attr("fill", "none").attr("stroke", baseColor).attr("stroke-opacity", 0.4).attr("stroke-width", 1);
1285
+ block.append("text").attr("class", "pert-field-legend-header").attr("x", x + width / 2).attr("y", headerY).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "bold").text("Field labels");
1263
1286
  const grid = (x1, y1, x2, y2) => {
1264
1287
  block.append("line").attr("x1", x1).attr("y1", y1).attr("x2", x2).attr("y2", y2).attr("stroke", baseColor).attr("stroke-opacity", 0.3).attr("stroke-width", 1);
1265
1288
  };
@@ -1285,7 +1308,7 @@ function renderFieldLegendBlock(svg, args) {
1285
1308
  const stackTop = cellTop + Math.max((rowH - stackHeight) / 2, 0);
1286
1309
  const labelY = stackTop + FIELD_LEGEND_LABEL_FONT_SIZE;
1287
1310
  const firstDescY = labelY + FIELD_LEGEND_LABEL_DESC_GAP + FIELD_LEGEND_DESC_FONT_SIZE;
1288
- cellG.append("text").attr("class", "pert-field-legend-label").attr("x", cx).attr("y", labelY).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("font-size", FIELD_LEGEND_LABEL_FONT_SIZE).attr("font-weight", 600).attr("fill", labelColor).text(cell.label);
1311
+ cellG.append("text").attr("class", "pert-field-legend-label").attr("x", cx).attr("y", labelY).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("font-size", FIELD_LEGEND_LABEL_FONT_SIZE).attr("font-weight", "bold").attr("fill", labelColor).text(cell.label);
1289
1312
  const descText = cellG.append("text").attr("class", "pert-field-legend-desc").attr("x", cx).attr("y", firstDescY).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("font-size", FIELD_LEGEND_DESC_FONT_SIZE).attr("fill", labelColor).attr("opacity", 0.85);
1290
1313
  descLines.forEach((line2, idx) => {
1291
1314
  const tspan = descText.append("tspan").attr("x", cx).text(line2);
@@ -1343,8 +1366,8 @@ function renderTornadoBlock(svg, rows, args) {
1343
1366
  palette.textOnFillDark
1344
1367
  );
1345
1368
  const block = svg.append("g").attr("class", "pert-tornado-block").attr("data-pert-tornado", "");
1346
- block.append("rect").attr("class", "pert-tornado-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
1347
- block.append("text").attr("class", "pert-tornado-header").attr("x", x + width / 2).attr("y", y + CAPTION_BOX_PADDING_Y + CAPTION_FONT_SIZE).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "700").text("Activity Risk");
1369
+ block.append("rect").attr("class", "pert-tornado-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
1370
+ block.append("text").attr("class", "pert-tornado-header").attr("x", x + width / 2).attr("y", y + CAPTION_BOX_PADDING_Y + CAPTION_FONT_SIZE).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "bold").text("Activity Risk");
1348
1371
  const fmt = (v) => {
1349
1372
  const r = Math.round(v * 100) / 100;
1350
1373
  return r.toFixed(2).replace(/\.?0+$/, "");
@@ -1497,7 +1520,7 @@ function renderScurveBlock(svg, data, args) {
1497
1520
  palette.textOnFillDark
1498
1521
  );
1499
1522
  const block = svg.append("g").attr("class", "pert-scurve-block").attr("data-pert-scurve", "");
1500
- block.append("rect").attr("class", "pert-scurve-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
1523
+ block.append("rect").attr("class", "pert-scurve-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
1501
1524
  const SCURVE_DEADLINE_LABEL_HEIGHT = 16;
1502
1525
  const hasDeadline = data.deadlineDays !== null;
1503
1526
  const plotLeft = x + SCURVE_PLOT_PADDING_X;
@@ -1527,7 +1550,7 @@ function renderScurveBlock(svg, data, args) {
1527
1550
  block.append("text").attr("class", "pert-scurve-y-axis-title").attr(
1528
1551
  "transform",
1529
1552
  `translate(${yAxisLabelCx}, ${yAxisLabelCy}) rotate(-90)`
1530
- ).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", SCURVE_TICK_FONT_SIZE - 1).attr("font-weight", "600").attr("opacity", 0.85).text(data.yAxisLabel);
1553
+ ).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", SCURVE_TICK_FONT_SIZE - 1).attr("font-weight", "bold").attr("opacity", 0.85).text(data.yAxisLabel);
1531
1554
  if (data.p84Days > data.p16Days) {
1532
1555
  const bandLeftRaw = xScale(data.p16Days);
1533
1556
  const bandRightRaw = xScale(data.p84Days);
@@ -1545,7 +1568,7 @@ function renderScurveBlock(svg, data, args) {
1545
1568
  let anchor = "middle";
1546
1569
  if (dx <= plotLeft + edgePad) anchor = "start";
1547
1570
  else if (dx >= plotRight - edgePad) anchor = "end";
1548
- block.append("text").attr("class", "pert-scurve-deadline-label").attr("x", dx).attr("y", plotTop - 4).attr("text-anchor", anchor).attr("fill", deadlineColor).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "700").text(`Deadline \xB7 ${formatScurveDate(data.deadlineDate)}`);
1571
+ block.append("text").attr("class", "pert-scurve-deadline-label").attr("x", dx).attr("y", plotTop - 4).attr("text-anchor", anchor).attr("fill", deadlineColor).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "bold").text(`Deadline \xB7 ${formatScurveDate(data.deadlineDate)}`);
1549
1572
  block.append("line").attr("class", "pert-scurve-deadline-line").attr("x1", dx).attr("x2", dx).attr("y1", plotTop).attr("y2", plotBottom).attr("stroke", deadlineColor).attr("stroke-width", 1.5).attr("opacity", 0.9);
1550
1573
  }
1551
1574
  }
@@ -1619,11 +1642,11 @@ function renderScurveBlock(svg, data, args) {
1619
1642
  }
1620
1643
  const labelFill = mix(color, palette.text, 25);
1621
1644
  const dotGroup = block.append("g").attr("class", "pert-scurve-percentile").attr("data-percentile", d.label);
1622
- dotGroup.append("line").attr("class", "pert-scurve-percentile-tick").attr("x1", cx).attr("x2", cx).attr("y1", cy).attr("y2", plotBottom).attr("stroke", color).attr("stroke-width", 1).attr("stroke-dasharray", d.isPast ? "4,2" : "3 3").attr("opacity", 0.7);
1645
+ dotGroup.append("line").attr("class", "pert-scurve-percentile-tick").attr("x1", cx).attr("x2", cx).attr("y1", cy).attr("y2", plotBottom).attr("stroke", color).attr("stroke-width", 1).attr("stroke-dasharray", d.isPast ? PAST_PERCENTILE_DASH : HAIRLINE_DASH).attr("opacity", 0.7);
1623
1646
  dotGroup.append("circle").attr("class", "pert-scurve-percentile-dot").attr("cx", cx).attr("cy", cy).attr("r", SCURVE_PERCENTILE_RADIUS).attr("fill", color).attr("stroke", fill).attr("stroke-width", 1.5).attr("data-percentile", d.label);
1624
1647
  dotGroup.append("circle").attr("class", "pert-scurve-percentile-hit").attr("cx", cx).attr("cy", cy).attr("r", 14).attr("fill", "transparent").attr("pointer-events", "all");
1625
- dotGroup.append("text").attr("class", "pert-scurve-percentile-label").attr("x", labelX).attr("y", cy + SCURVE_TICK_FONT_SIZE / 3).attr("text-anchor", labelAnchor).attr("fill", labelFill).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "700").attr("paint-order", "stroke fill").attr("stroke", fill).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.95).text(inlineText);
1626
- dotGroup.append("text").attr("class", "pert-scurve-percentile-verbose").attr("x", labelX).attr("y", cy + SCURVE_TICK_FONT_SIZE / 3).attr("text-anchor", labelAnchor).attr("fill", labelFill).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "700").attr("paint-order", "stroke fill").attr("stroke", fill).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.95).text(verboseText);
1648
+ dotGroup.append("text").attr("class", "pert-scurve-percentile-label").attr("x", labelX).attr("y", cy + SCURVE_TICK_FONT_SIZE / 3).attr("text-anchor", labelAnchor).attr("fill", labelFill).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "bold").attr("paint-order", "stroke fill").attr("stroke", fill).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.95).text(inlineText);
1649
+ dotGroup.append("text").attr("class", "pert-scurve-percentile-verbose").attr("x", labelX).attr("y", cy + SCURVE_TICK_FONT_SIZE / 3).attr("text-anchor", labelAnchor).attr("fill", labelFill).attr("font-size", SCURVE_TICK_FONT_SIZE).attr("font-weight", "bold").attr("paint-order", "stroke fill").attr("stroke", fill).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.95).text(verboseText);
1627
1650
  }
1628
1651
  const N_X_TICKS = isAnchored ? 5 : 6;
1629
1652
  const LABEL_W_EST = isAnchored ? 48 : 36;
@@ -1708,4 +1731,4 @@ export {
1708
1731
  measurePertAnalysisBlock,
1709
1732
  renderPertAnalysisBlock
1710
1733
  };
1711
- //# sourceMappingURL=chunk-OO2L2LWV.js.map
1734
+ //# sourceMappingURL=chunk-Y2KFQX5K.js.map
@@ -3,52 +3,55 @@ import {
3
3
  layoutJourneyMap,
4
4
  scoreToColor,
5
5
  scoreToCurveY
6
- } from "./chunk-F4V67JXG.js";
6
+ } from "./chunk-6JIMYPXR.js";
7
7
  import {
8
8
  wrapNoteBody
9
- } from "./chunk-MU3CJPJF.js";
9
+ } from "./chunk-W6DBWWPC.js";
10
10
  import {
11
11
  NOTE_BULLET_INDENT
12
12
  } from "./chunk-5DH3KYFH.js";
13
13
  import {
14
14
  renderInlineText
15
- } from "./chunk-WGC42WJU.js";
16
- import {
17
- CARD_RADIUS
18
- } from "./chunk-FJ57274M.js";
15
+ } from "./chunk-FWNJDD4U.js";
19
16
  import {
20
17
  ScaleContext
21
18
  } from "./chunk-24YPR5EH.js";
19
+ import {
20
+ CARD_RADIUS,
21
+ CONTAINER_RADIUS,
22
+ GRID_DASH,
23
+ NODE_STROKE_WIDTH
24
+ } from "./chunk-IIEI7VK5.js";
22
25
  import {
23
26
  serializeSvg
24
- } from "./chunk-RU2HHHYA.js";
27
+ } from "./chunk-LD2JSKU3.js";
25
28
  import {
26
29
  renderIntegratedLegend
27
- } from "./chunk-U4DS2ODO.js";
30
+ } from "./chunk-253E5ISJ.js";
28
31
  import {
29
32
  FONT_FAMILY
30
- } from "./chunk-53SEVJQM.js";
33
+ } from "./chunk-ICLB27PZ.js";
31
34
  import {
32
35
  measureText,
33
36
  truncateText,
34
37
  wrapTextToWidth
35
- } from "./chunk-MTGGOCND.js";
38
+ } from "./chunk-YC6GVLTI.js";
36
39
  import {
37
40
  parseJourneyMap
38
- } from "./chunk-2QRIMMIH.js";
41
+ } from "./chunk-6EMJRAEY.js";
39
42
  import {
40
43
  resolveActiveTagGroup,
41
44
  tagAttrKey
42
- } from "./chunk-76LHNLGX.js";
45
+ } from "./chunk-O2HU4AQN.js";
43
46
  import {
44
47
  fillModeFromOptions
45
- } from "./chunk-M5OOAP65.js";
48
+ } from "./chunk-4CA7TJ44.js";
46
49
  import {
47
50
  contrastText,
48
51
  mix,
49
52
  shapeFill,
50
53
  themeBaseBg
51
- } from "./chunk-GLREDNBA.js";
54
+ } from "./chunk-AMQFJ7P7.js";
52
55
 
53
56
  // src/journey-map/renderer.ts
54
57
  import * as d3 from "d3-selection";
@@ -58,10 +61,8 @@ var PADDING = DIAGRAM_PADDING;
58
61
  var CARD_PADDING_X = 10;
59
62
  var CARD_PADDING_Y = 6;
60
63
  var CARD_HEADER_HEIGHT = 24;
61
- var CARD_STROKE_WIDTH = 1.5;
62
64
  var CARD_META_LINE_HEIGHT = 14;
63
65
  var CARD_GAP_INTERNAL = 8;
64
- var COLUMN_RADIUS = 8;
65
66
  var COLUMN_HEADER_HEIGHT = 36;
66
67
  var COLUMN_PADDING = 12;
67
68
  var FONT_SIZE_TITLE = 18;
@@ -173,8 +174,8 @@ function renderJourneyMap(container, parsed, palette, isDark, options) {
173
174
  1.2,
174
175
  fillMode
175
176
  );
176
- personaG.append("rect").attr("x", panelX).attr("y", panelY).attr("width", panelWidth).attr("height", panelHeight).attr("rx", CARD_RADIUS).attr("fill", "none").attr("stroke", personaColor).attr("stroke-width", CARD_STROKE_WIDTH);
177
- personaG.append("text").attr("x", textX).attr("y", panelY + CARD_PADDING_Y + FONT_SIZE_STEP).attr("font-size", FONT_SIZE_STEP).attr("font-weight", "500").attr("fill", onPersonaText).text(
177
+ personaG.append("rect").attr("x", panelX).attr("y", panelY).attr("width", panelWidth).attr("height", panelHeight).attr("rx", CARD_RADIUS).attr("fill", "none").attr("stroke", personaColor).attr("stroke-width", NODE_STROKE_WIDTH);
178
+ personaG.append("text").attr("x", textX).attr("y", panelY + CARD_PADDING_Y + FONT_SIZE_STEP).attr("font-size", FONT_SIZE_STEP).attr("font-weight", "normal").attr("fill", onPersonaText).text(
178
179
  truncateText(parsed.persona.name, FONT_SIZE_STEP, textAreaWidth)
179
180
  );
180
181
  for (let li = 0; li < descLines.length; li++) {
@@ -270,7 +271,7 @@ function renderJourneyMap(container, parsed, palette, isDark, options) {
270
271
  const curveG = svg.append("g").attr("class", "journey-curve-area");
271
272
  for (let score = 1; score <= 5; score++) {
272
273
  const y = scoreToCurveY(score, layout.curveAreaBottom);
273
- curveG.append("line").attr("x1", PADDING).attr("x2", layout.totalWidth - PADDING).attr("y1", y).attr("y2", y).attr("stroke", palette.textMuted).attr("stroke-opacity", GRID_LINE_OPACITY).attr("stroke-dasharray", "4,4");
274
+ curveG.append("line").attr("x1", PADDING).attr("x2", layout.totalWidth - PADDING).attr("y1", y).attr("y2", y).attr("stroke", palette.textMuted).attr("stroke-opacity", GRID_LINE_OPACITY).attr("stroke-dasharray", GRID_DASH);
274
275
  }
275
276
  if (layout.curvePoints.length >= 2) {
276
277
  const first = layout.curvePoints[0];
@@ -376,9 +377,9 @@ function renderJourneyMap(container, parsed, palette, isDark, options) {
376
377
  const isCollapsed = collapsedPhases.has(pl.phase.name);
377
378
  const phaseG = phasesG.append("g").attr("class", "journey-phase").attr("data-line-number", pl.phase.lineNumber);
378
379
  const colBg = isDark ? mix(palette.surface, palette.bg, 50) : mix(palette.surface, palette.bg, 30);
379
- phaseG.append("rect").attr("x", pl.x).attr("y", pl.y).attr("width", pl.width).attr("height", pl.height).attr("rx", COLUMN_RADIUS).attr("fill", colBg);
380
- phaseG.append("rect").attr("x", pl.x).attr("y", pl.y).attr("width", pl.width).attr("height", COLUMN_HEADER_HEIGHT).attr("rx", COLUMN_RADIUS).attr("fill", pl.headerColor);
381
- phaseG.append("rect").attr("x", pl.x).attr("y", pl.y + COLUMN_HEADER_HEIGHT - COLUMN_RADIUS).attr("width", pl.width).attr("height", COLUMN_RADIUS).attr("fill", pl.headerColor);
380
+ phaseG.append("rect").attr("x", pl.x).attr("y", pl.y).attr("width", pl.width).attr("height", pl.height).attr("rx", CONTAINER_RADIUS).attr("fill", colBg);
381
+ phaseG.append("rect").attr("x", pl.x).attr("y", pl.y).attr("width", pl.width).attr("height", COLUMN_HEADER_HEIGHT).attr("rx", CONTAINER_RADIUS).attr("fill", pl.headerColor);
382
+ phaseG.append("rect").attr("x", pl.x).attr("y", pl.y + COLUMN_HEADER_HEIGHT - CONTAINER_RADIUS).attr("width", pl.width).attr("height", CONTAINER_RADIUS).attr("fill", pl.headerColor);
382
383
  const onHeaderText = contrastText(
383
384
  pl.headerColor,
384
385
  palette.textOnFillLight,
@@ -435,7 +436,7 @@ function renderJourneyMap(container, parsed, palette, isDark, options) {
435
436
  { mode: fillMode }
436
437
  );
437
438
  const rowStroke = stepColor ?? palette.textMuted;
438
- itemG.append("rect").attr("x", listX).attr("y", itemY).attr("width", cardW).attr("height", COLLAPSED_CARD_H).attr("rx", CARD_RADIUS).attr("fill", rowFill).attr("stroke", rowStroke).attr("stroke-width", CARD_STROKE_WIDTH);
439
+ itemG.append("rect").attr("x", listX).attr("y", itemY).attr("width", cardW).attr("height", COLLAPSED_CARD_H).attr("rx", CARD_RADIUS).attr("fill", rowFill).attr("stroke", rowStroke).attr("stroke-width", NODE_STROKE_WIDTH);
439
440
  const faceCx = listX + CARD_PADDING_X + COLLAPSED_FACE_R;
440
441
  const faceCy = itemY + COLLAPSED_CARD_H / 2;
441
442
  if (step.score !== void 0) {
@@ -567,8 +568,8 @@ function renderJourneyMap(container, parsed, palette, isDark, options) {
567
568
  const scoreColor = scoreToColor(score, palette);
568
569
  const tintedBg = fillMode === "outline" ? themeBaseBg(palette, isDark) : mix(scoreColor, palette.surface, 20);
569
570
  const g = overlayG.append("g").attr("class", "journey-thought-hover");
570
- g.append("rect").attr("x", bx).attr("y", by).attr("width", bw).attr("height", bh).attr("rx", CARD_RADIUS).attr("fill", tintedBg).attr("stroke", scoreColor).attr("stroke-width", CARD_STROKE_WIDTH);
571
- g.append("line").attr("x1", fcx).attr("y1", by + bh).attr("x2", fcx).attr("y2", fcy - FACE_HOVER_R - 1).attr("stroke", scoreColor).attr("stroke-width", CARD_STROKE_WIDTH);
571
+ g.append("rect").attr("x", bx).attr("y", by).attr("width", bw).attr("height", bh).attr("rx", CARD_RADIUS).attr("fill", tintedBg).attr("stroke", scoreColor).attr("stroke-width", NODE_STROKE_WIDTH);
572
+ g.append("line").attr("x1", fcx).attr("y1", by + bh).attr("x2", fcx).attr("y2", fcy - FACE_HOVER_R - 1).attr("stroke", scoreColor).attr("stroke-width", NODE_STROKE_WIDTH);
572
573
  const centerX = bx + bw / 2;
573
574
  for (let i = 0; i < lines.length; i++) {
574
575
  g.append("text").attr("x", centerX).attr("y", by + THOUGHT_PAD_Y + (i + 1) * THOUGHT_LINE_H - 2).attr("text-anchor", "middle").attr("font-size", THOUGHT_FONT).attr("font-style", "italic").attr("fill", palette.textMuted).text(lines[i]);
@@ -688,11 +689,11 @@ function renderStepCard(parent, sl, palette, isDark, activeGroup, tagGroups, onN
688
689
  palette.textOnFillLight,
689
690
  palette.textOnFillDark
690
691
  );
691
- stepG.append("rect").attr("x", cx).attr("y", cy).attr("width", sl.width).attr("height", sl.height).attr("rx", CARD_RADIUS).attr("fill", cardFill).attr("stroke", cardStroke).attr("stroke-width", CARD_STROKE_WIDTH);
692
+ stepG.append("rect").attr("x", cx).attr("y", cy).attr("width", sl.width).attr("height", sl.height).attr("rx", CARD_RADIUS).attr("fill", cardFill).attr("stroke", cardStroke).attr("stroke-width", NODE_STROKE_WIDTH);
692
693
  const titleMaxW = sl.width - CARD_PADDING_X * 2;
693
694
  const titleLines = wrapTextToWidth(sl.step.title, FONT_SIZE_STEP, titleMaxW);
694
695
  for (let i = 0; i < titleLines.length; i++) {
695
- stepG.append("text").attr("x", cx + CARD_PADDING_X).attr("y", cy + CARD_PADDING_Y + FONT_SIZE_STEP + i * TITLE_LINE_HEIGHT).attr("font-size", FONT_SIZE_STEP).attr("font-weight", "500").attr("fill", onCardText).text(titleLines[i]);
696
+ stepG.append("text").attr("x", cx + CARD_PADDING_X).attr("y", cy + CARD_PADDING_Y + FONT_SIZE_STEP + i * TITLE_LINE_HEIGHT).attr("font-size", FONT_SIZE_STEP).attr("font-weight", "normal").attr("fill", onCardText).text(titleLines[i]);
696
697
  }
697
698
  const titleBlockH = CARD_PADDING_Y + titleLines.length * TITLE_LINE_HEIGHT + CARD_PADDING_Y;
698
699
  const cardAnnotations = sl.step.annotations;
@@ -747,7 +748,7 @@ function renderStepCard(parent, sl, palette, isDark, activeGroup, tagGroups, onN
747
748
  const stripFill = shapeFill(palette, stripColor, isDark, {
748
749
  mode: fillMode
749
750
  });
750
- stepG.append("rect").attr("x", cx).attr("y", stripY).attr("width", sl.width).attr("height", TAG_STRIP_HEIGHT).attr("rx", CARD_RADIUS).attr("fill", stripFill).attr("stroke", stripColor).attr("stroke-width", CARD_STROKE_WIDTH);
751
+ stepG.append("rect").attr("x", cx).attr("y", stripY).attr("width", sl.width).attr("height", TAG_STRIP_HEIGHT).attr("rx", CARD_RADIUS).attr("fill", stripFill).attr("stroke", stripColor).attr("stroke-width", NODE_STROKE_WIDTH);
751
752
  const stripTextColor = contrastText(
752
753
  stripFill,
753
754
  palette.textOnFillLight,
@@ -809,7 +810,7 @@ function addEmotionLabel(faceG, pt, palette) {
809
810
  EMOTION_LABEL_MAX_WIDTH
810
811
  );
811
812
  const y = pt.y + FACE_RADIUS + 5 + EMOTION_LABEL_FONT_SIZE;
812
- faceG.append("text").attr("class", "journey-emotion-label").attr("x", pt.x).attr("y", y).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("font-size", EMOTION_LABEL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.text).attr("stroke", palette.bg).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.8).attr("paint-order", "stroke").attr("pointer-events", "none").text(text);
813
+ faceG.append("text").attr("class", "journey-emotion-label").attr("x", pt.x).attr("y", y).attr("text-anchor", "middle").attr("font-family", FONT_FAMILY).attr("font-size", EMOTION_LABEL_FONT_SIZE).attr("font-weight", "normal").attr("fill", palette.text).attr("stroke", palette.bg).attr("stroke-width", 3).attr("stroke-linejoin", "round").attr("stroke-opacity", 0.8).attr("paint-order", "stroke").attr("pointer-events", "none").text(text);
813
814
  }
814
815
  function annotationColor(type, palette) {
815
816
  switch (type) {
@@ -877,4 +878,4 @@ export {
877
878
  renderJourneyMap,
878
879
  renderJourneyMapForExport
879
880
  };
880
- //# sourceMappingURL=chunk-TI4YUUW6.js.map
881
+ //# sourceMappingURL=chunk-Y3OLUMJH.js.map