@diagrammo/dgmo 0.77.0 → 0.78.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 (228) hide show
  1. package/README.md +17 -13
  2. package/dist/advanced.d.ts +19 -12
  3. package/dist/advanced.js +124 -120
  4. package/dist/block.css +1 -1
  5. package/dist/block.d.ts +2 -2
  6. package/dist/block.js +45 -41
  7. package/dist/{chart-meta-Cf_jkApJ.d.ts → chart-meta-BKN2ORkc.d.ts} +2 -2
  8. package/dist/chart-meta.d.ts +3 -3
  9. package/dist/chart-meta.js +30 -29
  10. package/dist/charts-d3-KEQ7XVSM.js +31 -0
  11. package/dist/{chunk-7IATMZSA.js → chunk-26EVL454.js} +1 -25
  12. package/dist/{chunk-3H4PDNP4.js → chunk-2NLBIZEW.js} +2 -2
  13. package/dist/{chunk-BH3BQICT.js → chunk-32VR65TL.js} +63 -36
  14. package/dist/{chunk-N5NQIZ56.js → chunk-36UQ77JV.js} +24 -24
  15. package/dist/chunk-3DPOIW3W.js +10 -0
  16. package/dist/{chunk-3SP6G4LN.js → chunk-3GLTQZKE.js} +2 -2
  17. package/dist/{chunk-DY7KDZUF.js → chunk-3OWIYK52.js} +2 -2
  18. package/dist/{chunk-3E4YB6TY.js → chunk-3XFOE3DQ.js} +12 -7
  19. package/dist/{chunk-W7UBPARG.js → chunk-3ZLQM6XN.js} +2 -2
  20. package/dist/{chunk-5GM6BZO7.js → chunk-4AWLEWSD.js} +5 -2
  21. package/dist/{chunk-SWUQJ5VR.js → chunk-4IGUEGD6.js} +80 -61
  22. package/dist/{chunk-QOVM5VRC.js → chunk-57GSSHBR.js} +2 -2
  23. package/dist/{chunk-5VMUVJO4.js → chunk-5G55TS3H.js} +2 -2
  24. package/dist/{chunk-U4DS2ODO.js → chunk-67I3HFSF.js} +9 -9
  25. package/dist/{chunk-WQXD3IIN.js → chunk-6B3M6LW6.js} +10 -8
  26. package/dist/{chunk-TKIPK5P6.js → chunk-6PHOZBW5.js} +4 -6
  27. package/dist/{chunk-5PFNUDXR.js → chunk-6VTLVU7D.js} +2 -2
  28. package/dist/{chunk-M5JT2AU7.js → chunk-6Z2NUJSX.js} +2 -2
  29. package/dist/{chunk-BWJLLNUX.js → chunk-7BNRHSSF.js} +2 -2
  30. package/dist/{chunk-JLODGGN2.js → chunk-7NNJXYXU.js} +2 -2
  31. package/dist/{chunk-FTTB64OJ.js → chunk-7SMVTA7I.js} +26 -26
  32. package/dist/{chunk-Z7KVOVE4.js → chunk-7WTFX6OA.js} +6 -3
  33. package/dist/{chunk-ZM27UI5O.js → chunk-A7Y32YD6.js} +2 -2
  34. package/dist/{chunk-FPRMP6YA.js → chunk-AHN2CVCH.js} +10 -7
  35. package/dist/{chunk-N6MZSBOL.js → chunk-AN7T6VP7.js} +2 -2
  36. package/dist/{chunk-F4X5NVKY.js → chunk-B6PVPAS5.js} +2 -2
  37. package/dist/{chunk-RV5A3EGI.js → chunk-BB2ORSTF.js} +19 -18
  38. package/dist/{chunk-SI3PYDL4.js → chunk-BJB4YDJP.js} +21 -21
  39. package/dist/{chunk-FR5EVD2X.js → chunk-BPM52K3Z.js} +38 -31
  40. package/dist/{chunk-TI4YUUW6.js → chunk-BSREARWG.js} +29 -28
  41. package/dist/{chunk-F4V67JXG.js → chunk-CTERZC4K.js} +2 -2
  42. package/dist/{chunk-WHWUVDYK.js → chunk-CYLSQO4L.js} +6 -6
  43. package/dist/{chunk-J76YDS4V.js → chunk-DCPD5SHV.js} +3 -3
  44. package/dist/{chunk-H7BYMIVK.js → chunk-ENDB5YSV.js} +67 -27
  45. package/dist/{chunk-RTTZIX34.js → chunk-EOB7XVYR.js} +2 -2
  46. package/dist/chunk-EPDBWATV.js +38 -0
  47. package/dist/{chunk-TPN7RJOM.js → chunk-FJADQOFQ.js} +3 -3
  48. package/dist/{chunk-MG3DE3VO.js → chunk-FLMXJMMY.js} +3 -3
  49. package/dist/{chunk-WGC42WJU.js → chunk-FWNJDD4U.js} +6 -2
  50. package/dist/{chunk-S5P5Z5Y5.js → chunk-GINNZHVN.js} +2 -2
  51. package/dist/{chunk-LYJ53DBK.js → chunk-GJH7ZEPH.js} +41 -36
  52. package/dist/{chunk-2MTM4E6M.js → chunk-GQEXY7XL.js} +68 -65
  53. package/dist/{chunk-XFXJXLK7.js → chunk-HHHYVTVS.js} +16 -16
  54. package/dist/chunk-ICLB27PZ.js +11 -0
  55. package/dist/{chunk-QMFIZQTB.js → chunk-IDGQB6XD.js} +6 -4
  56. package/dist/{chunk-R3XI2VC7.js → chunk-IDJGV6VM.js} +2 -1
  57. package/dist/{chunk-HDLRRY3N.js → chunk-IE47TYZT.js} +177 -118
  58. package/dist/{chunk-FJ57274M.js → chunk-IIEI7VK5.js} +15 -1
  59. package/dist/{chunk-XPBJVSRY.js → chunk-IMO46ROR.js} +38 -32
  60. package/dist/{chunk-VRPV6QXR.js → chunk-IZTU6WVR.js} +2 -2
  61. package/dist/{chunk-CIWFL2LM.js → chunk-JOD2CK2M.js} +16 -14
  62. package/dist/{chunk-XCFIAGT7.js → chunk-JUNTVLOU.js} +16 -15
  63. package/dist/{chunk-RWFMOVHG.js → chunk-KAZQX2EY.js} +2 -2
  64. package/dist/{chunk-NHQ7HUAS.js → chunk-KGX5LIUG.js} +10 -8
  65. package/dist/{chunk-Q74GP3GK.js → chunk-KO6DGOOB.js} +3 -3
  66. package/dist/{chunk-5ZD4DDG7.js → chunk-L26M3X7K.js} +16 -13
  67. package/dist/{chunk-RU2HHHYA.js → chunk-LD2JSKU3.js} +12 -2
  68. package/dist/{chunk-OO2L2LWV.js → chunk-LEBPWFVF.js} +50 -46
  69. package/dist/{chunk-MU3CJPJF.js → chunk-LGI735AJ.js} +2 -2
  70. package/dist/{chunk-OWVDD5EC.js → chunk-LMWXBFLA.js} +2 -2
  71. package/dist/{chunk-6IN4F4RH.js → chunk-M3LZCDB6.js} +40 -42
  72. package/dist/{chunk-YT5ICQ4R.js → chunk-MFK7LF66.js} +2 -2
  73. package/dist/{chunk-UH5YTZN7.js → chunk-MJYFPFZT.js} +110 -20
  74. package/dist/{chunk-2QRIMMIH.js → chunk-N56W4R66.js} +2 -2
  75. package/dist/{chunk-LXXVHLTH.js → chunk-NN5IDH2I.js} +2 -2
  76. package/dist/{chunk-46KVXDUJ.js → chunk-NS3KIRSW.js} +2 -2
  77. package/dist/{chunk-LM3HY3VG.js → chunk-P2DM7Q5U.js} +2 -2
  78. package/dist/{chunk-DJL5PO27.js → chunk-P4SQV3XD.js} +2 -2
  79. package/dist/{chunk-B52RL5VV.js → chunk-P54AX5XN.js} +9 -9
  80. package/dist/{chunk-MZEGUDTA.js → chunk-P64NBPSK.js} +14 -14
  81. package/dist/{chunk-FF7LRT5L.js → chunk-PIWUZFG7.js} +33 -25
  82. package/dist/{chunk-SWEKCK34.js → chunk-QAPFXLAC.js} +2 -2
  83. package/dist/chunk-QFIXL3OK.js +68 -0
  84. package/dist/{chunk-KRTLS3G6.js → chunk-QVMV4KCA.js} +2 -2
  85. package/dist/{chunk-76LHNLGX.js → chunk-R4YGH7DJ.js} +5 -3
  86. package/dist/{chunk-OZOHREFQ.js → chunk-RC3FM3FE.js} +12 -13
  87. package/dist/{chunk-UJBP57UJ.js → chunk-RC6GGF6X.js} +2 -2
  88. package/dist/{chunk-S6OXNZBM.js → chunk-RHZZVIGA.js} +3 -3
  89. package/dist/{chunk-MS5574I7.js → chunk-RIXWLFB4.js} +2 -2
  90. package/dist/{chunk-D3B6YEZK.js → chunk-RUNI4OXP.js} +18 -14
  91. package/dist/{chunk-ICVIJLBA.js → chunk-SFSJ6XWV.js} +2 -2
  92. package/dist/{chunk-QBM5BURJ.js → chunk-SNBEAO4Q.js} +8 -8
  93. package/dist/{chunk-DSXWJAOA.js → chunk-SXD6VY7D.js} +16 -14
  94. package/dist/{chunk-V4NHFY22.js → chunk-TLM3I4XF.js} +16 -16
  95. package/dist/{chunk-3O7ZYVJV.js → chunk-TO6TWNMF.js} +19 -15
  96. package/dist/{chunk-CYMYZYLI.js → chunk-U2JIFCJN.js} +18 -18
  97. package/dist/{chunk-SSEAULA5.js → chunk-U4ND3J6C.js} +18 -14
  98. package/dist/{chunk-QXMHBIQG.js → chunk-UCF6TKWV.js} +51 -48
  99. package/dist/{chunk-RGW26UAR.js → chunk-UDYJVX6Y.js} +9 -9
  100. package/dist/{chunk-7CXW6EGX.js → chunk-UQY2VLUK.js} +25 -23
  101. package/dist/{chunk-EUVUOPRC.js → chunk-VAA7QSZ7.js} +53 -32
  102. package/dist/{chunk-43AJKH2U.js → chunk-VQGQF7O7.js} +12 -10
  103. package/dist/{chunk-DEW62ON3.js → chunk-VSPNH7LC.js} +2 -2
  104. package/dist/{chunk-4YER7UCV.js → chunk-VUJQ6RU6.js} +2 -2
  105. package/dist/{chunk-CHOK7NCJ.js → chunk-VZD3ZV4Y.js} +26 -22
  106. package/dist/{chunk-NCT22MOD.js → chunk-WMIKC5XO.js} +2 -2
  107. package/dist/{chunk-C2WH3BMS.js → chunk-X326N4GN.js} +10 -7
  108. package/dist/chunk-XBJJP2HN.js +37 -0
  109. package/dist/{chunk-7NSNE52V.js → chunk-XCR3PDFF.js} +2 -2
  110. package/dist/{chunk-UBDVAHGK.js → chunk-XDPJMLOH.js} +30 -27
  111. package/dist/{chunk-CF3I5SOG.js → chunk-YKDZ3ZRI.js} +27 -25
  112. package/dist/{chunk-GLREDNBA.js → chunk-YVLTNNME.js} +12 -2
  113. package/dist/{chunk-6ZZKEYBS.js → chunk-ZGOBAMQ2.js} +15 -13
  114. package/dist/{chunk-6BVAW7KI.js → chunk-ZMCFUGKO.js} +49 -42
  115. package/dist/clock.js +11 -5
  116. package/dist/completion-registry.js +2 -2
  117. package/dist/countdown.js +26 -20
  118. package/dist/{d3-BiaJtaSw.d.ts → d3-CQT5bwpb.d.ts} +1 -1
  119. package/dist/{dgmo-router-BwXHZ_P3.d.ts → dgmo-router-C9CsswPZ.d.ts} +1 -1
  120. package/dist/{dgmo-router-A3LIHT6H.js → dgmo-router-XZNCLYTV.js} +30 -29
  121. package/dist/{dimensions-OFF4GRFL.js → dimensions-SIZMZ4DC.js} +8 -8
  122. package/dist/{flowchart-renderer-BBJUPORB.js → flowchart-renderer-FDJ4QQXE.js} +15 -14
  123. package/dist/index.d.ts +7 -7
  124. package/dist/index.js +58 -43
  125. package/dist/{layout-Y2V3LYV7.js → layout-5DZ2LI2R.js} +2 -2
  126. package/dist/{layout-ZAGUFT2G.js → layout-6I6LSBUR.js} +6 -5
  127. package/dist/{layout-2OJ25STS.js → layout-C2SCZV5M.js} +6 -5
  128. package/dist/{layout-6SKHNQYO.js → layout-CHWKNE3O.js} +3 -3
  129. package/dist/{layout-EM4DLMAX.js → layout-K4KML2DL.js} +3 -3
  130. package/dist/{layout-KQUSB45X.js → layout-S53FSD6R.js} +7 -6
  131. package/dist/{layout-ROORJQ4X.js → layout-TCFXB5XH.js} +7 -6
  132. package/dist/{layout-5ILNODTP.js → layout-XK6ZD7BU.js} +6 -5
  133. package/dist/{layout-B5GQVXXY.js → layout-YVY72CIG.js} +7 -6
  134. package/dist/{layout-VUZ3MLOI.js → layout-YY6VH5XH.js} +6 -5
  135. package/dist/{layout-RV2T2YTT.js → layout-ZDN252GR.js} +4 -3
  136. package/dist/{layout-search-UOKEMER5.js → layout-search-TSV4FURP.js} +7 -6
  137. package/dist/{legend-constants-PLN2YHGM.js → legend-constants-SB4PLHV5.js} +3 -3
  138. package/dist/{palettes-54YSI3IX.js → palettes-YIPSRYXP.js} +5 -3
  139. package/dist/{parser-GCVSRQPY.js → parser-2BX2EJUB.js} +3 -3
  140. package/dist/{parser-WVE6SKB7.js → parser-3UNIPVNY.js} +3 -3
  141. package/dist/{parser-5XFGK5C5.js → parser-4IHIVDJD.js} +5 -5
  142. package/dist/{parser-ZT3PU2HT.js → parser-62VNEQRT.js} +3 -3
  143. package/dist/{parser-PR3OR3LO.js → parser-6JNJHQAG.js} +3 -3
  144. package/dist/{parser-ZXQZZK6W.js → parser-6ZFQLLVE.js} +3 -2
  145. package/dist/{parser-WMJEPZDC.js → parser-BOPXE6RP.js} +3 -3
  146. package/dist/{parser-WWRRG2DV.js → parser-DFBQ2RID.js} +3 -3
  147. package/dist/{parser-2GMHFSTS.js → parser-EPKXJ2RL.js} +3 -3
  148. package/dist/{parser-ML3LVNDV.js → parser-G7E2BURB.js} +3 -3
  149. package/dist/{parser-QOIZGW7I.js → parser-GFGU5ZLQ.js} +3 -3
  150. package/dist/{parser-L7T7FY3H.js → parser-GKZWI5SZ.js} +3 -3
  151. package/dist/{parser-QYAIFXLP.js → parser-HSPODF4H.js} +3 -3
  152. package/dist/{parser-EQ4I3TSH.js → parser-IK3FXZ7D.js} +3 -3
  153. package/dist/{parser-LV7PQBUG.js → parser-LJWPKRDM.js} +3 -3
  154. package/dist/{parser-RDBXEVI4.js → parser-OYWUBQV4.js} +3 -3
  155. package/dist/{parser-6FUESG4N.js → parser-PD4TP6NM.js} +3 -3
  156. package/dist/{parser-E3OHNNTH.js → parser-R2JHC7LQ.js} +3 -3
  157. package/dist/{parser-CJNP7RKR.js → parser-RMZ6YI7H.js} +3 -3
  158. package/dist/{parser-TA5TYZNL.js → parser-RUJNN5PK.js} +3 -3
  159. package/dist/{parser-UTR5WE4O.js → parser-YWE7GHW6.js} +3 -3
  160. package/dist/{parser-3AOMUX5D.js → parser-Z5UK6ADF.js} +3 -3
  161. package/dist/{parser-YWQCC33R.js → parser-ZO5YT5SV.js} +3 -3
  162. package/dist/renderer-5TPUPMZ7.js +26 -0
  163. package/dist/{renderer-2NYQDW37.js → renderer-AIVALEQR.js} +7 -7
  164. package/dist/renderer-AMELXBNW.js +23 -0
  165. package/dist/renderer-BF7FYXG3.js +25 -0
  166. package/dist/renderer-CRRW7LTW.js +17 -0
  167. package/dist/renderer-CXU2MGSC.js +27 -0
  168. package/dist/renderer-DI66RLAG.js +30 -0
  169. package/dist/renderer-E2JTYQY5.js +39 -0
  170. package/dist/{renderer-Y3Y7PEUS.js → renderer-FA4BTAOL.js} +7 -7
  171. package/dist/{renderer-G2DPKJAN.js → renderer-FFGFTIT4.js} +15 -14
  172. package/dist/renderer-IVAM7Z3Y.js +27 -0
  173. package/dist/renderer-J6HK2KOW.js +23 -0
  174. package/dist/renderer-J7J3OVLQ.js +39 -0
  175. package/dist/{renderer-GHBF5PRH.js → renderer-JC7MK7SD.js} +6 -5
  176. package/dist/{renderer-VF7X66SL.js → renderer-JHQC5RGJ.js} +14 -14
  177. package/dist/renderer-JRITSZY3.js +28 -0
  178. package/dist/{renderer-ANJUDBOS.js → renderer-KD5X4RIS.js} +14 -13
  179. package/dist/{renderer-CVWQD442.js → renderer-KWNNWCGD.js} +6 -5
  180. package/dist/{renderer-FTX67CYZ.js → renderer-LGMIAG6N.js} +7 -6
  181. package/dist/{renderer-EDVCGIQO.js → renderer-LQN3FXAP.js} +33 -32
  182. package/dist/renderer-LRL4SU43.js +29 -0
  183. package/dist/{renderer-R5HIRN2M.js → renderer-MBL64AJI.js} +6 -6
  184. package/dist/renderer-NA3DTAWF.js +39 -0
  185. package/dist/renderer-OR5QHR7X.js +31 -0
  186. package/dist/renderer-SBVWHQVW.js +30 -0
  187. package/dist/{renderer-DNFV2IQI.js → renderer-TLOSBJKW.js} +13 -13
  188. package/dist/{renderer-EFQSMHID.js → renderer-UDWJRRIC.js} +11 -11
  189. package/dist/renderer-VHK6UAW2.js +20 -0
  190. package/dist/{renderer-2ANDPQWC.js → renderer-W5UG2HWT.js} +5 -5
  191. package/dist/renderer-WOOKJOBQ.js +25 -0
  192. package/dist/renderer-WYNLGZRF.js +25 -0
  193. package/dist/{renderer-RNFECJ5D.js → renderer-Y74Y54C3.js} +8 -8
  194. package/dist/renderer-ZUAXGHFC.js +28 -0
  195. package/dist/renderer-radial-YVUDGR7C.js +21 -0
  196. package/dist/{state-parser-TPA67IXM.js → state-parser-CT5HQQ7E.js} +3 -3
  197. package/dist/state-renderer-7O3QGNJ5.js +41 -0
  198. package/dist/{tag-groups-BAtkq0b_.d.ts → tag-groups-BoJg3lFV.d.ts} +0 -16
  199. package/dist/{themes-DpsyRSO7.d.ts → themes-CXYnNA4e.d.ts} +2 -2
  200. package/docs/architecture-report.md +3 -3
  201. package/docs/language-reference.md +122 -30
  202. package/docs/migration-sequence-color-to-tags.md +16 -8
  203. package/package.json +4 -4
  204. package/dist/charts-d3-HMEMHSSW.js +0 -29
  205. package/dist/chunk-53SEVJQM.js +0 -9
  206. package/dist/chunk-LP7EC4MI.js +0 -16
  207. package/dist/chunk-YM5RMLFO.js +0 -40
  208. package/dist/renderer-2LDT4TUX.js +0 -25
  209. package/dist/renderer-2RIIIO34.js +0 -39
  210. package/dist/renderer-3HFU3DTO.js +0 -25
  211. package/dist/renderer-4BF6ILP6.js +0 -27
  212. package/dist/renderer-5E2AH5TO.js +0 -38
  213. package/dist/renderer-62SLWRYF.js +0 -27
  214. package/dist/renderer-D6GJ6EVK.js +0 -30
  215. package/dist/renderer-GZLRX764.js +0 -24
  216. package/dist/renderer-H2HYLFN3.js +0 -20
  217. package/dist/renderer-IR5655M7.js +0 -28
  218. package/dist/renderer-L237AOOZ.js +0 -16
  219. package/dist/renderer-LSJWYGOL.js +0 -39
  220. package/dist/renderer-LWXDMZOV.js +0 -28
  221. package/dist/renderer-MYSVPERC.js +0 -22
  222. package/dist/renderer-OL5QSZPC.js +0 -31
  223. package/dist/renderer-P26HH3NA.js +0 -30
  224. package/dist/renderer-RPZVNCTF.js +0 -26
  225. package/dist/renderer-SDNWZDUY.js +0 -23
  226. package/dist/renderer-UKHH4UWV.js +0 -25
  227. package/dist/renderer-radial-QNGCGKZP.js +0 -21
  228. package/dist/state-renderer-ELWDRXD6.js +0 -40
@@ -1,24 +1,27 @@
1
+ import {
2
+ EDGE_DASH
3
+ } from "./chunk-IIEI7VK5.js";
1
4
  import {
2
5
  layoutInlineHeader
3
- } from "./chunk-MG3DE3VO.js";
6
+ } from "./chunk-FLMXJMMY.js";
4
7
  import {
5
8
  TITLE_FONT_SIZE,
6
9
  TITLE_FONT_WEIGHT,
7
10
  TITLE_Y
8
- } from "./chunk-DEW62ON3.js";
11
+ } from "./chunk-VSPNH7LC.js";
9
12
  import {
10
13
  renderIntegratedLegend
11
- } from "./chunk-U4DS2ODO.js";
14
+ } from "./chunk-67I3HFSF.js";
12
15
  import {
13
16
  getLegendExtent,
14
17
  getMaxLegendReservedHeight
15
- } from "./chunk-VRPV6QXR.js";
18
+ } from "./chunk-IZTU6WVR.js";
16
19
  import {
17
20
  FONT_FAMILY
18
- } from "./chunk-53SEVJQM.js";
21
+ } from "./chunk-ICLB27PZ.js";
19
22
  import {
20
23
  LEGEND_GROUP_GAP
21
- } from "./chunk-YT5ICQ4R.js";
24
+ } from "./chunk-MFK7LF66.js";
22
25
  import {
23
26
  measureText
24
27
  } from "./chunk-MTGGOCND.js";
@@ -28,11 +31,11 @@ import {
28
31
  import {
29
32
  resolveTagColor,
30
33
  tagAttrKey
31
- } from "./chunk-76LHNLGX.js";
34
+ } from "./chunk-R4YGH7DJ.js";
32
35
  import {
33
36
  mix,
34
37
  themeBaseBg
35
- } from "./chunk-GLREDNBA.js";
38
+ } from "./chunk-YVLTNNME.js";
36
39
 
37
40
  // src/block/renderer.ts
38
41
  import * as d3Selection from "d3-selection";
@@ -303,7 +306,7 @@ function drawItems(g, items, ctx, path = []) {
303
306
  const { palette, fillMode } = ctx;
304
307
  for (const it of items) {
305
308
  if (it.type === "empty") {
306
- g.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 7).attr("fill", "none").attr("stroke", ctx.neutral).attr("stroke-width", 1).attr("stroke-dasharray", "3 4").attr("opacity", 0.7);
309
+ g.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 7).attr("fill", "none").attr("stroke", ctx.neutral).attr("stroke-width", 1).attr("stroke-dasharray", EDGE_DASH).attr("opacity", 0.7);
307
310
  continue;
308
311
  }
309
312
  const node = it.node;
@@ -322,7 +325,7 @@ function drawItems(g, items, ctx, path = []) {
322
325
  const cid = `dgmo-block-clip-${clipCounter++}`;
323
326
  cell.append("clipPath").attr("id", cid).append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 10);
324
327
  cell.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 10).attr("fill", fill2).attr("stroke", stroke).attr("stroke-width", 1.5);
325
- cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 4).attr("text-anchor", "middle").attr("font-size", 12.5).attr("font-weight", 700).attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 24, 12.5));
328
+ cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 4).attr("text-anchor", "middle").attr("font-size", 12.5).attr("font-weight", "bold").attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 24, 12.5));
326
329
  cell.append("rect").attr("x", it.x).attr("y", it.y + it.h - BLOCK_BAR_H).attr("width", it.w).attr("height", BLOCK_BAR_H).attr("fill", fillMode === "solid" && color ? palette.text : stroke).attr("clip-path", `url(#${cid})`);
327
330
  bindToggle(cell, it, ctx, it.h);
328
331
  continue;
@@ -338,7 +341,7 @@ function drawItems(g, items, ctx, path = []) {
338
341
  const grow = (headerFs - 13) / (20 - 13);
339
342
  const headerOpacity = 0.92 - grow * 0.3;
340
343
  const headerY = it.y + Math.round(headerFs * 0.7) + 7;
341
- cell.append("text").attr("x", it.x + it.w / 2).attr("y", headerY).attr("text-anchor", "middle").attr("font-size", headerFs).attr("font-weight", 700).attr("fill", palette.text).attr("opacity", headerOpacity).text(clipLabel(it.label ?? "", it.w - 24, headerFs));
344
+ cell.append("text").attr("x", it.x + it.w / 2).attr("y", headerY).attr("text-anchor", "middle").attr("font-size", headerFs).attr("font-weight", "bold").attr("fill", palette.text).attr("opacity", headerOpacity).text(clipLabel(it.label ?? "", it.w - 24, headerFs));
342
345
  bindToggle(cell, it, ctx, BLOCK_HEADER_H);
343
346
  if (it.inner) drawItems(g, it.inner, ctx, itemPath);
344
347
  continue;
@@ -346,7 +349,7 @@ function drawItems(g, items, ctx, path = []) {
346
349
  const fill = color ? fillMode === "solid" ? mix(color, palette.bg, 80) : fillMode === "outline" ? themeBaseBg(palette, ctx.isDark) : mix(color, palette.bg, 14) : palette.bg;
347
350
  cell.attr("data-leaf", "true");
348
351
  cell.append("rect").attr("x", it.x).attr("y", it.y).attr("width", it.w).attr("height", it.h).attr("rx", 8).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1.25);
349
- cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 5).attr("text-anchor", "middle").attr("font-size", 13).attr("font-weight", 600).attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 16, 13));
352
+ cell.append("text").attr("x", it.x + it.w / 2).attr("y", it.y + it.h / 2 + 5).attr("text-anchor", "middle").attr("font-size", 13).attr("font-weight", "bold").attr("fill", palette.text).text(clipLabel(it.label ?? "", it.w - 16, 13));
350
353
  }
351
354
  }
352
355
  function bindToggle(cell, it, ctx, hitH) {
@@ -397,4 +400,4 @@ export {
397
400
  renderBlock,
398
401
  authoredCollapsedIds
399
402
  };
400
- //# sourceMappingURL=chunk-5ZD4DDG7.js.map
403
+ //# sourceMappingURL=chunk-L26M3X7K.js.map
@@ -13,11 +13,21 @@ function escapeAttributeMarkupChars(svg) {
13
13
  }
14
14
  );
15
15
  }
16
+ var ROUNDED_ATTRS = /(\s(?:font-size|stroke-width|rx|ry)=")(-?\d+\.\d{3,})"/g;
17
+ var ROUNDED_OPACITY_ATTRS = /(\s(?:opacity|fill-opacity|stroke-opacity)=")(-?\d+\.\d{5,})"/g;
18
+ function roundMagnitudeAttrs(svg) {
19
+ const round = (re, digits) => (s) => s.replace(re, (_m, prefix, value) => {
20
+ const n = Number(value);
21
+ if (!Number.isFinite(n)) return `${prefix}${value}"`;
22
+ return `${prefix}${String(Number(n.toFixed(digits)))}"`;
23
+ });
24
+ return round(ROUNDED_OPACITY_ATTRS, 4)(round(ROUNDED_ATTRS, 2)(svg));
25
+ }
16
26
  function serializeSvg(svgEl) {
17
- return escapeAttributeMarkupChars(svgEl.outerHTML);
27
+ return roundMagnitudeAttrs(escapeAttributeMarkupChars(svgEl.outerHTML));
18
28
  }
19
29
 
20
30
  export {
21
31
  serializeSvg
22
32
  };
23
- //# sourceMappingURL=chunk-RU2HHHYA.js.map
33
+ //# sourceMappingURL=chunk-LD2JSKU3.js.map
@@ -6,23 +6,30 @@ import {
6
6
  layoutPert
7
7
  } from "./chunk-GOW5VO6M.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-FLMXJMMY.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,19 +39,19 @@ 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-67I3HFSF.js";
39
46
  import {
40
47
  getLegendExtent
41
- } from "./chunk-VRPV6QXR.js";
48
+ } from "./chunk-IZTU6WVR.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-MFK7LF66.js";
48
55
  import {
49
56
  measureText,
50
57
  truncateText,
@@ -52,7 +59,7 @@ import {
52
59
  } from "./chunk-MTGGOCND.js";
53
60
  import {
54
61
  parsePert
55
- } from "./chunk-RWFMOVHG.js";
62
+ } from "./chunk-KAZQX2EY.js";
56
63
  import {
57
64
  addCalendarDays,
58
65
  formatDuration,
@@ -61,23 +68,22 @@ import {
61
68
  formatSprintCell
62
69
  } from "./chunk-3TYUXC7D.js";
63
70
  import {
71
+ UNTAGGED_TAG_COLOR,
64
72
  resolveActiveTagGroup,
65
73
  resolveTagColor
66
- } from "./chunk-76LHNLGX.js";
74
+ } from "./chunk-R4YGH7DJ.js";
67
75
  import {
68
76
  contrastText,
69
77
  mix,
70
78
  shapeFill,
71
79
  themeBaseBg
72
- } from "./chunk-GLREDNBA.js";
80
+ } from "./chunk-YVLTNNME.js";
73
81
 
74
82
  // src/pert/renderer.ts
75
83
  import * as d3Selection from "d3-selection";
76
84
  import * as d3Shape from "d3-shape";
85
+ var PAST_PERCENTILE_DASH = "4 2";
77
86
  var DIAGRAM_PADDING = 20;
78
- var NODE_FONT_SIZE = 13;
79
- var NODE_CELL_FONT_SIZE = 11;
80
- var NODE_RADIUS = 6;
81
87
  function analysisBlockChrome(palette, isDark) {
82
88
  const surfaceBg = themeBaseBg(palette, isDark);
83
89
  return {
@@ -87,8 +93,6 @@ function analysisBlockChrome(palette, isDark) {
87
93
  }
88
94
  var NODE_TOP_ROW_HEIGHT = 26;
89
95
  var NODE_BOTTOM_ROW_HEIGHT = 26;
90
- var ARROWHEAD_W = 10;
91
- var ARROWHEAD_H = 7;
92
96
  var DURATION_FADE_OPACITY = 0.55;
93
97
  var PIN_ICON_W = 13;
94
98
  var PIN_ICON_H = 13;
@@ -208,15 +212,15 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
208
212
  const sLegendBottomGap = ctx.aesthetic(LEGEND_BOTTOM_GAP);
209
213
  const sLegendPillHeight = ctx.structural(LEGEND_PILL_HEIGHT);
210
214
  const sLegendBlockHeight = showTagLegend ? sLegendTopGap + sLegendPillHeight + sLegendBottomGap : 0;
211
- const sNodeRadius = ctx.structural(NODE_RADIUS);
215
+ const sNodeRadius = ctx.structural(CARD_RADIUS);
212
216
  const sNodeStrokeWidth = ctx.structural(NODE_STROKE_WIDTH);
213
- const sNodeFontSize = ctx.text(NODE_FONT_SIZE);
214
- const sNodeCellFontSize = ctx.text(NODE_CELL_FONT_SIZE);
217
+ const sNodeFontSize = ctx.text(LABEL_FONT_SIZE);
218
+ const sNodeCellFontSize = ctx.text(META_FONT_SIZE);
215
219
  const sNodeTopRowHeight = ctx.structural(NODE_TOP_ROW_HEIGHT);
216
220
  const sNodeBottomRowHeight = ctx.structural(NODE_BOTTOM_ROW_HEIGHT);
217
221
  const sEdgeStrokeWidth = ctx.structural(EDGE_STROKE_WIDTH);
218
- const sArrowheadW = ctx.structural(ARROWHEAD_W);
219
- const sArrowheadH = ctx.structural(ARROWHEAD_H);
222
+ const sArrowheadW = ctx.structural(ARROWHEAD_WIDTH);
223
+ const sArrowheadH = ctx.structural(ARROWHEAD_HEIGHT);
220
224
  const sContainerRadius = ctx.structural(CONTAINER_RADIUS);
221
225
  const sContainerLabelFontSize = ctx.text(CONTAINER_LABEL_FONT_SIZE);
222
226
  const sContainerHeaderHeight = ctx.structural(CONTAINER_HEADER_HEIGHT);
@@ -263,7 +267,7 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
263
267
  }
264
268
  if (effectiveSubtitle) {
265
269
  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);
270
+ 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
271
  }
268
272
  const offsetX = Math.max(sDiagramPad, (svgW - layout.width) / 2);
269
273
  const offsetY = sDiagramPad + sTitleHeight + (header.inline ? 0 : sLegendBlockHeight);
@@ -660,7 +664,7 @@ function renderPertAnalysisBlock(container, resolved, palette, isDark, options)
660
664
  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
665
  paintAnalysisLayer(svg, resolved, palette, isDark, state, 0, 0, width);
662
666
  }
663
- function buildArrowheads(defs, palette, arrowW = ARROWHEAD_W, arrowH = ARROWHEAD_H) {
667
+ function buildArrowheads(defs, palette, arrowW = ARROWHEAD_WIDTH, arrowH = ARROWHEAD_HEIGHT) {
664
668
  const mk = (id, fill) => {
665
669
  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
670
  };
@@ -736,7 +740,7 @@ function renderGroups(root, resolved, layout, palette, isDark, collapsedSet, siz
736
740
  palette.textOnFillLight,
737
741
  palette.textOnFillDark
738
742
  );
739
- const sNR = sc.nodeRadius ?? NODE_RADIUS;
743
+ const sNR = sc.nodeRadius ?? CARD_RADIUS;
740
744
  const sCBH = sc.collapseBarHeight ?? COLLAPSE_BAR_HEIGHT;
741
745
  drawTextbookCard(g, {
742
746
  width: grp.width,
@@ -884,7 +888,7 @@ function renderNodes(root, _defs, resolved, layout, palette, isDark, sizing, onC
884
888
  if (r.activity.groupId && collapsedSet.has(r.activity.groupId)) continue;
885
889
  const isCritical = r.isCriticalPath;
886
890
  const isTbd = tbdSet.has(node.id);
887
- const dashArray = isTbd ? "4,3" : "none";
891
+ const dashArray = isTbd ? EDGE_DASH : "none";
888
892
  const isTopMu = topMuIds.has(node.id);
889
893
  const isBottomMu = bottomMuIds.has(node.id);
890
894
  let band;
@@ -924,7 +928,7 @@ function renderNodes(root, _defs, resolved, layout, palette, isDark, sizing, onC
924
928
  resolved.tagGroups,
925
929
  activeTagGroup
926
930
  );
927
- const hasTagColor = tagColor !== void 0 && tagColor !== "#999999";
931
+ const hasTagColor = tagColor !== void 0 && tagColor !== UNTAGGED_TAG_COLOR;
928
932
  const tagBandFill = hasTagColor ? shapeFill(palette, tagColor, isDark, { mode: fillMode }) : void 0;
929
933
  const tagLabelColor = hasTagColor ? contrastText(
930
934
  tagBandFill,
@@ -1009,12 +1013,12 @@ function computeDurationEmphasis(activities) {
1009
1013
  }
1010
1014
  function drawTextbookCard(g, a) {
1011
1015
  const { width: w, height: h, x, y } = a;
1012
- const sNR = a.sNodeRadius ?? NODE_RADIUS;
1016
+ const sNR = a.sNodeRadius ?? CARD_RADIUS;
1013
1017
  const sNSW = a.sNodeStrokeWidth ?? NODE_STROKE_WIDTH;
1014
1018
  const sTRH = a.sNodeTopRowHeight ?? NODE_TOP_ROW_HEIGHT;
1015
1019
  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;
1020
+ const sNFS = a.sNodeFontSize ?? LABEL_FONT_SIZE;
1021
+ const sNCFS = a.sNodeCellFontSize ?? META_FONT_SIZE;
1018
1022
  const sPIW = a.sPinIconW ?? PIN_ICON_W;
1019
1023
  const sPIH = a.sPinIconH ?? PIN_ICON_H;
1020
1024
  const outerColW = a.outerColW;
@@ -1108,11 +1112,11 @@ function drawTextbookCard(g, a) {
1108
1112
  }
1109
1113
  function drawMilestonePill(g, a) {
1110
1114
  const { width: w, height: h, x, y } = a;
1111
- const sNR = a.sNodeRadius ?? NODE_RADIUS;
1115
+ const sNR = a.sNodeRadius ?? CARD_RADIUS;
1112
1116
  const sNSW = a.sNodeStrokeWidth ?? NODE_STROKE_WIDTH;
1113
1117
  const topRowH = a.sNodeTopRowHeight ?? NODE_TOP_ROW_HEIGHT;
1114
1118
  const botRowH = a.sNodeBottomRowHeight ?? NODE_BOTTOM_ROW_HEIGHT;
1115
- const sNCFS = a.sNodeCellFontSize ?? NODE_CELL_FONT_SIZE;
1119
+ const sNCFS = a.sNodeCellFontSize ?? META_FONT_SIZE;
1116
1120
  const sPIW = a.sPinIconW ?? PIN_ICON_W;
1117
1121
  const sPIH = a.sPinIconH ?? PIN_ICON_H;
1118
1122
  const topY = y + topRowH;
@@ -1258,8 +1262,8 @@ function renderFieldLegendBlock(svg, args) {
1258
1262
  const gridBottom = y + height;
1259
1263
  const rowH = (gridBottom - gridTop) / 2;
1260
1264
  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");
1265
+ 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);
1266
+ 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
1267
  const grid = (x1, y1, x2, y2) => {
1264
1268
  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
1269
  };
@@ -1285,7 +1289,7 @@ function renderFieldLegendBlock(svg, args) {
1285
1289
  const stackTop = cellTop + Math.max((rowH - stackHeight) / 2, 0);
1286
1290
  const labelY = stackTop + FIELD_LEGEND_LABEL_FONT_SIZE;
1287
1291
  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);
1292
+ 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
1293
  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
1294
  descLines.forEach((line2, idx) => {
1291
1295
  const tspan = descText.append("tspan").attr("x", cx).text(line2);
@@ -1343,8 +1347,8 @@ function renderTornadoBlock(svg, rows, args) {
1343
1347
  palette.textOnFillDark
1344
1348
  );
1345
1349
  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");
1350
+ 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);
1351
+ 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
1352
  const fmt = (v) => {
1349
1353
  const r = Math.round(v * 100) / 100;
1350
1354
  return r.toFixed(2).replace(/\.?0+$/, "");
@@ -1497,7 +1501,7 @@ function renderScurveBlock(svg, data, args) {
1497
1501
  palette.textOnFillDark
1498
1502
  );
1499
1503
  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);
1504
+ 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
1505
  const SCURVE_DEADLINE_LABEL_HEIGHT = 16;
1502
1506
  const hasDeadline = data.deadlineDays !== null;
1503
1507
  const plotLeft = x + SCURVE_PLOT_PADDING_X;
@@ -1527,7 +1531,7 @@ function renderScurveBlock(svg, data, args) {
1527
1531
  block.append("text").attr("class", "pert-scurve-y-axis-title").attr(
1528
1532
  "transform",
1529
1533
  `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);
1534
+ ).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
1535
  if (data.p84Days > data.p16Days) {
1532
1536
  const bandLeftRaw = xScale(data.p16Days);
1533
1537
  const bandRightRaw = xScale(data.p84Days);
@@ -1545,7 +1549,7 @@ function renderScurveBlock(svg, data, args) {
1545
1549
  let anchor = "middle";
1546
1550
  if (dx <= plotLeft + edgePad) anchor = "start";
1547
1551
  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)}`);
1552
+ 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
1553
  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
1554
  }
1551
1555
  }
@@ -1619,11 +1623,11 @@ function renderScurveBlock(svg, data, args) {
1619
1623
  }
1620
1624
  const labelFill = mix(color, palette.text, 25);
1621
1625
  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);
1626
+ 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
1627
  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
1628
  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);
1629
+ 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);
1630
+ 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
1631
  }
1628
1632
  const N_X_TICKS = isAnchored ? 5 : 6;
1629
1633
  const LABEL_W_EST = isAnchored ? 48 : 36;
@@ -1708,4 +1712,4 @@ export {
1708
1712
  measurePertAnalysisBlock,
1709
1713
  renderPertAnalysisBlock
1710
1714
  };
1711
- //# sourceMappingURL=chunk-OO2L2LWV.js.map
1715
+ //# sourceMappingURL=chunk-LEBPWFVF.js.map
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-5DH3KYFH.js";
10
10
  import {
11
11
  wrapDescriptionLines
12
- } from "./chunk-NCT22MOD.js";
12
+ } from "./chunk-WMIKC5XO.js";
13
13
  import {
14
14
  measureText
15
15
  } from "./chunk-MTGGOCND.js";
@@ -49,4 +49,4 @@ export {
49
49
  wrapNoteBody,
50
50
  noteBoxSize
51
51
  };
52
- //# sourceMappingURL=chunk-MU3CJPJF.js.map
52
+ //# sourceMappingURL=chunk-LGI735AJ.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-6EK55ART.js";
4
4
  import {
5
5
  noteBoxSize
6
- } from "./chunk-MU3CJPJF.js";
6
+ } from "./chunk-LGI735AJ.js";
7
7
 
8
8
  // src/utils/notes/build.ts
9
9
  function buildPlacedNotes(anchors, noteByNode, direction, collapsedNotes) {
@@ -70,4 +70,4 @@ function buildPlacedNotes(anchors, noteByNode, direction, collapsedNotes) {
70
70
  export {
71
71
  buildPlacedNotes
72
72
  };
73
- //# sourceMappingURL=chunk-OWVDD5EC.js.map
73
+ //# sourceMappingURL=chunk-LMWXBFLA.js.map