@diagrammo/dgmo 0.51.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.cursorrules +15 -19
  2. package/.github/copilot-instructions.md +15 -19
  3. package/.windsurfrules +15 -19
  4. package/SKILL.md +15 -19
  5. package/dist/advanced.d.ts +70 -42
  6. package/dist/advanced.js +115 -119
  7. package/dist/auto.js +125 -123
  8. package/dist/auto.mjs +952 -492
  9. package/dist/block.js +89 -52
  10. package/dist/{charts-d3-7E4B4IMW.js → charts-d3-MXEP6BNP.js} +7 -7
  11. package/dist/{chunk-CC4YRBWV.js → chunk-3HF5YEFJ.js} +17 -7
  12. package/dist/{chunk-5X6YQA2J.js → chunk-3HGU63UY.js} +12 -11
  13. package/dist/{chunk-4XFBQT5O.js → chunk-3LK5DNED.js} +2 -2
  14. package/dist/{chunk-IEDMFNU7.js → chunk-3QD7VP3U.js} +9 -4
  15. package/dist/{chunk-JJXGQIRV.js → chunk-3YRPZ7ZZ.js} +2 -2
  16. package/dist/{chunk-OJTXTQA2.js → chunk-44VCIPHF.js} +21 -17
  17. package/dist/{chunk-RAHVMKBG.js → chunk-4AQRFDXL.js} +2 -2
  18. package/dist/{chunk-6MNGECP2.js → chunk-4IHAV6O7.js} +2 -2
  19. package/dist/{chunk-ENRS56GC.js → chunk-4UNQ6X24.js} +10 -7
  20. package/dist/{chunk-JM4LEPY3.js → chunk-4YFKQ5WT.js} +6 -3
  21. package/dist/{chunk-U5SI5NIM.js → chunk-5223KXFD.js} +39 -22
  22. package/dist/{chunk-NI3XQBPB.js → chunk-5BHJZH62.js} +3 -3
  23. package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
  24. package/dist/{chunk-I2QZFCS2.js → chunk-5NGAO4QK.js} +4 -4
  25. package/dist/{chunk-BGP54HVR.js → chunk-5RP7JRVP.js} +4 -4
  26. package/dist/{chunk-IE477RQZ.js → chunk-5SEVICBT.js} +5 -5
  27. package/dist/{chunk-OZPBJM5Q.js → chunk-6EJITS44.js} +8 -5
  28. package/dist/{chunk-F3FYUFUH.js → chunk-6HQH6JZE.js} +12 -11
  29. package/dist/{chunk-X7EC3L2H.js → chunk-6LBQ7ELG.js} +14 -15
  30. package/dist/{chunk-5WPNFSXP.js → chunk-75G3Q4DK.js} +3 -3
  31. package/dist/{chunk-BYJBIALT.js → chunk-77FGAVZC.js} +10 -7
  32. package/dist/{chunk-2EQMXBBQ.js → chunk-7BIZCTAX.js} +2 -2
  33. package/dist/{chunk-B63YB7X3.js → chunk-7KINELPI.js} +110 -48
  34. package/dist/{chunk-AB7INMR5.js → chunk-7QE3XMRK.js} +15 -14
  35. package/dist/{chunk-IUJODQKX.js → chunk-AAXZDUOV.js} +15 -14
  36. package/dist/{chunk-2UJSV2VT.js → chunk-AL672HNE.js} +3 -3
  37. package/dist/{chunk-WQLMU7VG.js → chunk-ARGMQ3H4.js} +2 -2
  38. package/dist/{chunk-OU7HLO7I.js → chunk-AUIM2NVH.js} +3 -3
  39. package/dist/{chunk-RXKTSFDL.js → chunk-BKVOYV6I.js} +24 -32
  40. package/dist/{chunk-TK2VQQX2.js → chunk-BPIZNB5O.js} +14 -12
  41. package/dist/{chunk-3LV2NCB6.js → chunk-BPY242XU.js} +6 -4
  42. package/dist/{chunk-LV4BETUU.js → chunk-BRENJ2BQ.js} +32 -2
  43. package/dist/{chunk-Y6GBQTBK.js → chunk-CCNDLW7Z.js} +41 -19
  44. package/dist/{chunk-EXOQP75F.js → chunk-CIRFIL4M.js} +47 -27
  45. package/dist/{chunk-RBDIYLA5.js → chunk-DAOFNU6J.js} +17 -1
  46. package/dist/{chunk-4VWJ4LW2.js → chunk-DYWQFQJP.js} +44 -34
  47. package/dist/{chunk-QZPEGJOM.js → chunk-EMLPOL77.js} +15 -8
  48. package/dist/{chunk-IUO34HKW.js → chunk-FHGVORFO.js} +26 -22
  49. package/dist/{chunk-6H7O2OPM.js → chunk-FQ7HTV52.js} +4 -2
  50. package/dist/{chunk-7DYOELRK.js → chunk-FQMUHRVC.js} +69 -30
  51. package/dist/{chunk-AFIEPDLX.js → chunk-FT3ZYWET.js} +14 -3
  52. package/dist/{chunk-ND76YJCN.js → chunk-FUPF2UYQ.js} +35 -11
  53. package/dist/{chunk-6NFYEQDX.js → chunk-FY5MSZAP.js} +15 -3
  54. package/dist/{chunk-IEWG6J7C.js → chunk-GCYTI3DE.js} +40 -31
  55. package/dist/{chunk-GNSFLJAA.js → chunk-GJFAMOGK.js} +3 -3
  56. package/dist/{chunk-VNSXLA6G.js → chunk-H7KENAZO.js} +16 -12
  57. package/dist/{chunk-KFNWFNAA.js → chunk-HBPDFCQY.js} +3 -3
  58. package/dist/{chunk-467TVMQL.js → chunk-HHKO6SKY.js} +2 -2
  59. package/dist/{chunk-6K2M4VSR.js → chunk-HQQNCY7W.js} +21 -8
  60. package/dist/{chunk-ZJ3LS7DW.js → chunk-HWX6ZHF3.js} +2 -2
  61. package/dist/{chunk-Q62FEYK3.js → chunk-ICPJPQ5C.js} +2 -2
  62. package/dist/{chunk-MVN25IF6.js → chunk-IM6PDDCE.js} +4 -4
  63. package/dist/{chunk-65WJYYKJ.js → chunk-INE5YJBZ.js} +11 -6
  64. package/dist/{chunk-EDA6C7MV.js → chunk-J6QROYDA.js} +13 -9
  65. package/dist/{chunk-3ODS2VGL.js → chunk-J7KJR3R6.js} +116 -96
  66. package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
  67. package/dist/{chunk-GD6L76WD.js → chunk-JRCOYRRH.js} +19 -7
  68. package/dist/{chunk-G3PF3S7P.js → chunk-K2I2XOZD.js} +9 -9
  69. package/dist/{chunk-5PDTIBLV.js → chunk-K4EOKJA6.js} +17 -7
  70. package/dist/{chunk-5SVOCD5W.js → chunk-KGVZ5VGH.js} +10 -7
  71. package/dist/{chunk-QHI5XVUJ.js → chunk-LBMS4AW6.js} +20 -19
  72. package/dist/{chunk-FTBZV6NE.js → chunk-LGT3PZCJ.js} +22 -14
  73. package/dist/{chunk-E7Y3SYKW.js → chunk-LTXOLDUZ.js} +9 -6
  74. package/dist/{chunk-GTWKD3QT.js → chunk-MUE65OTD.js} +5 -4
  75. package/dist/{chunk-TRM2J7ZN.js → chunk-MUVJ57EP.js} +10 -14
  76. package/dist/{chunk-RBHWPDBB.js → chunk-NNS4E7CW.js} +6 -4
  77. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  78. package/dist/{chunk-NEQ6GJXB.js → chunk-ONU3U4GL.js} +2 -2
  79. package/dist/{chunk-XEQXCIBC.js → chunk-PRI2OD4E.js} +10 -3
  80. package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
  81. package/dist/{chunk-5PZT4DQG.js → chunk-QGATPIPX.js} +15 -9
  82. package/dist/{chunk-YGJZWZTY.js → chunk-QHXCAEMX.js} +7 -4
  83. package/dist/{chunk-RLFVAKEO.js → chunk-QJMKPUYK.js} +15 -5
  84. package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
  85. package/dist/{chunk-GROLTAWZ.js → chunk-QZX5S6R3.js} +2 -2
  86. package/dist/{chunk-TMACGPW5.js → chunk-R3YSD62R.js} +3 -3
  87. package/dist/{chunk-332ZR4QU.js → chunk-REJAIQ5S.js} +4 -4
  88. package/dist/{chunk-5F5ELR3V.js → chunk-ROOE4R4Y.js} +8 -5
  89. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  90. package/dist/{chunk-GGHRAITI.js → chunk-SMRFPVLQ.js} +3 -3
  91. package/dist/{chunk-JSSX2SX4.js → chunk-SWSIKFEB.js} +2 -2
  92. package/dist/{chunk-DY7XLRHK.js → chunk-T4A4TSTJ.js} +14 -15
  93. package/dist/{chunk-VB4UJ3H2.js → chunk-TJVLKNGR.js} +20 -10
  94. package/dist/{chunk-FC5I2KXV.js → chunk-TPFKKXCB.js} +3 -3
  95. package/dist/{chunk-AXW3M6OQ.js → chunk-TTIM6YTT.js} +28 -18
  96. package/dist/{chunk-WJ7RW65H.js → chunk-UBLHQTLV.js} +13 -12
  97. package/dist/{chunk-AE7II3E3.js → chunk-UNURMIQO.js} +2 -2
  98. package/dist/{chunk-PZDBOK2Q.js → chunk-VILVLS7P.js} +5 -3
  99. package/dist/{chunk-3YSQZ75W.js → chunk-VQOCMUWI.js} +37 -26
  100. package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
  101. package/dist/{chunk-4QZ43D7I.js → chunk-XD6ZYURY.js} +9 -4
  102. package/dist/{chunk-3JLKYGBQ.js → chunk-YIBAWQGJ.js} +6 -3
  103. package/dist/{chunk-ZO27FGJS.js → chunk-YTMTPUH4.js} +7 -4
  104. package/dist/{chunk-6BQFET7X.js → chunk-Z5QVYKR7.js} +11 -3
  105. package/dist/{chunk-KJGG2JKQ.js → chunk-ZEF5M5MB.js} +52 -45
  106. package/dist/{chunk-32XPAAET.js → chunk-ZJV7GYR4.js} +3 -3
  107. package/dist/{chunk-2ILHQOL3.js → chunk-ZNWAYU6N.js} +11 -7
  108. package/dist/cli.cjs +146 -145
  109. package/dist/clock.js +16 -22
  110. package/dist/dgmo-router-X7ZGAPIE.js +86 -0
  111. package/dist/{dimensions-F7B5C4BJ.js → dimensions-45H6JQEY.js} +6 -6
  112. package/dist/editor.js +4 -2
  113. package/dist/element.js +126 -124
  114. package/dist/element.mjs +952 -492
  115. package/dist/{flowchart-parser-MY53QWTZ.js → flowchart-parser-UKELHBSB.js} +4 -4
  116. package/dist/{flowchart-renderer-AQSMEMYF.js → flowchart-renderer-MNCDS7MV.js} +7 -7
  117. package/dist/highlight.d.ts +21 -1
  118. package/dist/highlight.js +93 -3
  119. package/dist/index.js +51 -51
  120. package/dist/{layout-JDJAEQ3P.js → layout-2L3WMRYU.js} +4 -4
  121. package/dist/{layout-MUPRALE5.js → layout-A4XWNVID.js} +4 -4
  122. package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
  123. package/dist/{layout-HYZPWAK5.js → layout-GM4UGR7B.js} +4 -3
  124. package/dist/{layout-CBCLPMSG.js → layout-GQQJXNYH.js} +4 -4
  125. package/dist/{layout-YVTNOTN4.js → layout-IIE2S5FK.js} +3 -3
  126. package/dist/{layout-4DIUOX2T.js → layout-VMCRX66I.js} +4 -4
  127. package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
  128. package/dist/{parser-BKI42XBQ.js → parser-2ECN6JA2.js} +4 -4
  129. package/dist/{parser-C3D7MVXY.js → parser-4WTIHM5J.js} +3 -3
  130. package/dist/{parser-5A2UWU6B.js → parser-5H2BTSJQ.js} +3 -3
  131. package/dist/{parser-OK2ILHRT.js → parser-75KVXUNS.js} +4 -4
  132. package/dist/{parser-SRVFR7PM.js → parser-774AC53T.js} +4 -4
  133. package/dist/{parser-BEPSWJAD.js → parser-BE4YCSRU.js} +3 -3
  134. package/dist/{parser-B77S5SZM.js → parser-CNGUQUQI.js} +3 -3
  135. package/dist/{parser-2Q2T4C3B.js → parser-DEUUSQIN.js} +7 -7
  136. package/dist/{parser-5PDYJGWA.js → parser-DQAFLUJB.js} +4 -4
  137. package/dist/{parser-KKTJ6M3Y.js → parser-EYCKNKQA.js} +5 -5
  138. package/dist/{parser-UKFFZCFJ.js → parser-FXISIU6A.js} +4 -4
  139. package/dist/{parser-UMWPLORP.js → parser-GTB4XC7P.js} +5 -5
  140. package/dist/{parser-Z4TZV2CB.js → parser-GVEPAUSD.js} +4 -4
  141. package/dist/{parser-AIMHGJRR.js → parser-HSQGTY4G.js} +4 -4
  142. package/dist/{parser-OUTPNJWC.js → parser-HVKRINUS.js} +3 -3
  143. package/dist/{parser-JA7JQ7NF.js → parser-J5MIEYO4.js} +5 -5
  144. package/dist/parser-KMZIXLDZ.js +13 -0
  145. package/dist/{parser-CDG7CHV5.js → parser-LJHXWSXU.js} +3 -3
  146. package/dist/{parser-PORDUX5E.js → parser-PT3W72G5.js} +4 -4
  147. package/dist/{parser-CZOJ7XQ6.js → parser-SBJQDPHL.js} +4 -4
  148. package/dist/{parser-I6GGFKOQ.js → parser-SUWWWCMX.js} +3 -3
  149. package/dist/{parser-AZJ25OKK.js → parser-SXDRNZOA.js} +4 -4
  150. package/dist/parser-UMILOW3M.js +14 -0
  151. package/dist/{parser-GKLZKEIK.js → parser-UP3AZ367.js} +4 -4
  152. package/dist/{parser-57ILIFZ2.js → parser-WHPRV3X5.js} +5 -5
  153. package/dist/{parser-H6ABKHZZ.js → parser-WX3UODSJ.js} +4 -4
  154. package/dist/{parser-FQ6GZFMR.js → parser-XCIEN3KN.js} +4 -4
  155. package/dist/{parser-E2RL6JYF.js → parser-XIRTUMVN.js} +5 -5
  156. package/dist/{parser-3A42DZ72.js → parser-YKCGIG45.js} +3 -3
  157. package/dist/{parser-EH5VE7ZN.js → parser-YKYMQG3B.js} +4 -4
  158. package/dist/{parser-6ZKABF5S.js → parser-ZGM2OJ6Y.js} +5 -5
  159. package/dist/{parser-4RFTKAQX.js → parser-ZL5QUFVH.js} +4 -4
  160. package/dist/pert.d.ts +2 -2
  161. package/dist/{renderer-RYR3TJ46.js → renderer-3F7OS2AX.js} +10 -10
  162. package/dist/{renderer-TGTUABCI.js → renderer-4QB4K7Q3.js} +6 -6
  163. package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
  164. package/dist/{renderer-3K3IB7D5.js → renderer-5H4SY7YY.js} +6 -6
  165. package/dist/{renderer-QIWVHWZO.js → renderer-5PIQPFOX.js} +4 -3
  166. package/dist/{renderer-NKJ24TEA.js → renderer-6MU37QF5.js} +6 -6
  167. package/dist/{renderer-QXPP4TA2.js → renderer-AQVMWJ4M.js} +9 -9
  168. package/dist/{renderer-2AUFT3E2.js → renderer-BDDW6K7N.js} +6 -6
  169. package/dist/{renderer-OYO67VZK.js → renderer-BNB3VIDY.js} +7 -7
  170. package/dist/{renderer-QXGN5H3A.js → renderer-CQY6ATOS.js} +5 -5
  171. package/dist/{renderer-CO2DW7S7.js → renderer-CVW75CXL.js} +9 -9
  172. package/dist/{renderer-KQB7UGDS.js → renderer-DT4XRFEP.js} +4 -3
  173. package/dist/{renderer-GQIESYEM.js → renderer-ERHBSTQT.js} +6 -6
  174. package/dist/{renderer-UV6MI64M.js → renderer-HSHHVYWF.js} +4 -3
  175. package/dist/{renderer-ARMJBP6C.js → renderer-IDPVUFNB.js} +8 -8
  176. package/dist/{renderer-QRWACQRI.js → renderer-ILX6BGKR.js} +6 -6
  177. package/dist/{renderer-F7U3MFCV.js → renderer-JP663HKG.js} +7 -7
  178. package/dist/{renderer-RGIYOTKJ.js → renderer-KNFTTOBL.js} +8 -8
  179. package/dist/{renderer-3YNIWF5I.js → renderer-MVUZBESR.js} +5 -5
  180. package/dist/{renderer-HYGHO4SJ.js → renderer-N4EBR2FV.js} +8 -8
  181. package/dist/{renderer-3YPZHMOU.js → renderer-NHO46CT2.js} +3 -3
  182. package/dist/{renderer-SRKDNDFB.js → renderer-NO2QJ5LZ.js} +7 -7
  183. package/dist/{renderer-2HTNBIF2.js → renderer-OGFV5RXX.js} +8 -8
  184. package/dist/{renderer-HCKJDFXD.js → renderer-PDLESJMS.js} +9 -9
  185. package/dist/{renderer-66MERVQ2.js → renderer-T4MTNINC.js} +6 -6
  186. package/dist/{renderer-RHT4MHFU.js → renderer-TOUGFGTM.js} +7 -7
  187. package/dist/{renderer-EDJ2O4S5.js → renderer-U3KPD43Y.js} +8 -8
  188. package/dist/{renderer-4WR6WMVF.js → renderer-X334IJU2.js} +6 -6
  189. package/dist/{renderer-JC3RDUT7.js → renderer-Y5OAMOCR.js} +6 -6
  190. package/dist/{renderer-GD2COXVL.js → renderer-YONAKAJU.js} +4 -4
  191. package/dist/{renderer-TXJFKPOG.js → renderer-YWMI6Y2U.js} +8 -8
  192. package/dist/{renderer-6RKQPNJI.js → renderer-ZWIH4WDW.js} +7 -7
  193. package/dist/{renderer-radial-FWABAZHB.js → renderer-radial-7CGZMVMS.js} +7 -7
  194. package/dist/{state-parser-6T6CNMPX.js → state-parser-BATWAID2.js} +4 -4
  195. package/dist/{state-renderer-AWZ3ECAX.js → state-renderer-3FKZJ3LP.js} +7 -7
  196. package/docs/ai-integration.md +15 -19
  197. package/docs/language-reference.md +13 -11
  198. package/package.json +1 -1
  199. package/dist/dgmo-router-Y2VEX46B.js +0 -86
  200. package/dist/parser-6BJEXUFX.js +0 -13
  201. package/dist/parser-OK22AC6Y.js +0 -14
@@ -7,13 +7,13 @@ import {
7
7
  } from "./chunk-YYVTBZZC.js";
8
8
  import {
9
9
  renderIntegratedLegend
10
- } from "./chunk-OU7HLO7I.js";
10
+ } from "./chunk-AUIM2NVH.js";
11
11
  import {
12
12
  createTooltip,
13
13
  hideTooltip,
14
14
  renderChartTitle,
15
15
  showTooltip
16
- } from "./chunk-U6EQI3U6.js";
16
+ } from "./chunk-QBZYACOG.js";
17
17
  import {
18
18
  FONT_FAMILY
19
19
  } from "./chunk-6KFWC4CO.js";
@@ -31,17 +31,17 @@ import {
31
31
  } from "./chunk-QOOUC2J5.js";
32
32
  import {
33
33
  parseTimelineDate
34
- } from "./chunk-TMACGPW5.js";
34
+ } from "./chunk-R3YSD62R.js";
35
35
  import {
36
36
  getSeriesColors,
37
37
  mix,
38
38
  shapeFill,
39
39
  themeBaseBg
40
- } from "./chunk-P6T66CCZ.js";
40
+ } from "./chunk-WBM7ZNDI.js";
41
41
  import {
42
42
  resolveTagColor,
43
43
  tagAttrKey
44
- } from "./chunk-467TVMQL.js";
44
+ } from "./chunk-HHKO6SKY.js";
45
45
 
46
46
  // src/timeline/renderer.ts
47
47
  import * as d3Scale from "d3-scale";
@@ -55,7 +55,7 @@ function getEraColors(palette) {
55
55
  palette.colors.purple
56
56
  ];
57
57
  }
58
- function renderEras(g, eras, scale, isVertical, innerWidth, innerHeight, onEnter, onLeave, hasScale = false, _tooltip = null, palette, reservedLabelY) {
58
+ function renderEras(g, eras, scale, isVertical, innerWidth, innerHeight, onEnter, onLeave, hasScale = false, _tooltip = null, palette, reservedLabelY, fillMode, outlineBg) {
59
59
  const eraColors = palette ? getEraColors(palette) : ["#3b6ea5", "#5b9357", "#c9a227", "#cc7a33", "#7d5ba6"];
60
60
  eras.forEach((era, i) => {
61
61
  const startVal = parseTimelineDate(era.startDate);
@@ -69,10 +69,20 @@ function renderEras(g, eras, scale, isVertical, innerWidth, innerHeight, onEnter
69
69
  let labelEl;
70
70
  let displayLabel = era.label;
71
71
  let truncated = false;
72
+ const outlineEra = fillMode === "outline" && outlineBg !== void 0;
73
+ const applyEraFill = (rect) => {
74
+ if (outlineEra) {
75
+ rect.attr("fill", outlineBg).attr("stroke", color).attr("stroke-width", 1);
76
+ } else {
77
+ rect.attr("fill", color).attr("opacity", 0.08);
78
+ }
79
+ };
72
80
  if (isVertical) {
73
81
  const y = Math.min(start, end);
74
82
  const h = Math.abs(end - start);
75
- eraG.append("rect").attr("x", 0).attr("y", y).attr("width", innerWidth).attr("height", h).attr("fill", color).attr("opacity", 0.08);
83
+ applyEraFill(
84
+ eraG.append("rect").attr("x", 0).attr("y", y).attr("width", innerWidth).attr("height", h)
85
+ );
76
86
  labelEl = eraG.append("text").attr("x", 6).attr("y", y + 18).attr("text-anchor", "start").attr("fill", color).attr("font-size", "13px").attr("font-weight", "600").attr("opacity", 0.8).text(displayLabel);
77
87
  } else {
78
88
  const x = Math.min(start, end);
@@ -80,7 +90,9 @@ function renderEras(g, eras, scale, isVertical, innerWidth, innerHeight, onEnter
80
90
  const useReservedRow = reservedLabelY != null;
81
91
  const rectTop = useReservedRow ? 0 : hasScale ? -48 : 0;
82
92
  const labelY = useReservedRow ? reservedLabelY : hasScale ? -32 : 18;
83
- eraG.append("rect").attr("x", x).attr("y", rectTop).attr("width", w).attr("height", innerHeight - rectTop).attr("fill", color).attr("opacity", 0.08);
93
+ applyEraFill(
94
+ eraG.append("rect").attr("x", x).attr("y", rectTop).attr("width", w).attr("height", innerHeight - rectTop)
95
+ );
84
96
  if (useReservedRow) {
85
97
  const maxW = Math.max(0, w - 8);
86
98
  displayLabel = truncateLegendText(era.label, 13, maxW);
@@ -97,7 +109,7 @@ function renderEras(g, eras, scale, isVertical, innerWidth, innerHeight, onEnter
97
109
  });
98
110
  });
99
111
  }
100
- function renderMarkers(g, markers, scale, isVertical, innerWidth, innerHeight, onEnter, onLeave, _hasScale = false, _tooltip = null, palette, reservedLabelY) {
112
+ function renderMarkers(g, markers, scale, isVertical, innerWidth, innerHeight, onEnter, onLeave, _hasScale = false, _tooltip = null, palette, reservedLabelY, fillMode, outlineBg) {
101
113
  const defaultColor = palette?.accent || "#3a9188";
102
114
  const positions = markers.map((m) => {
103
115
  const v = parseTimelineDate(m.date);
@@ -112,14 +124,24 @@ function renderMarkers(g, markers, scale, isVertical, innerWidth, innerHeight, o
112
124
  const color = marker.color || defaultColor;
113
125
  const lineOpacity = 0.5;
114
126
  const diamondSize = 5;
127
+ const outlineDiamond = fillMode === "outline" && outlineBg !== void 0;
128
+ const applyDiamondFill = (path) => {
129
+ if (outlineDiamond) {
130
+ path.attr("fill", outlineBg).attr("stroke", color).attr("stroke-width", 1.25).attr("opacity", 0.9);
131
+ } else {
132
+ path.attr("fill", color).attr("opacity", 0.9);
133
+ }
134
+ };
115
135
  const markerG = g.append("g").attr("class", "tl-marker").attr("data-marker-date", String(dateVal)).attr("data-line-number", String(marker.lineNumber)).style("cursor", "pointer");
116
136
  if (isVertical) {
117
137
  markerG.append("line").attr("x1", 0).attr("y1", pos).attr("x2", innerWidth).attr("y2", pos).attr("stroke", color).attr("stroke-width", 1.5).attr("stroke-dasharray", "6 4").attr("opacity", lineOpacity);
118
138
  markerG.append("text").attr("x", -diamondSize - 8).attr("y", pos - diamondSize - 4).attr("text-anchor", "middle").attr("fill", color).attr("font-size", "11px").attr("font-weight", "600").text(marker.label);
119
- markerG.append("path").attr(
120
- "d",
121
- `M${-diamondSize - 8},${pos} l${diamondSize},-${diamondSize} l${diamondSize},${diamondSize} l-${diamondSize},${diamondSize} Z`
122
- ).attr("fill", color).attr("opacity", 0.9);
139
+ applyDiamondFill(
140
+ markerG.append("path").attr(
141
+ "d",
142
+ `M${-diamondSize - 8},${pos} l${diamondSize},-${diamondSize} l${diamondSize},${diamondSize} l-${diamondSize},${diamondSize} Z`
143
+ )
144
+ );
123
145
  markerG.on("mouseenter", function() {
124
146
  onEnter(dateVal);
125
147
  }).on("mouseleave", function() {
@@ -145,10 +167,12 @@ function renderMarkers(g, markers, scale, isVertical, innerWidth, innerHeight, o
145
167
  truncated = displayLabel !== marker.label;
146
168
  }
147
169
  const labelEl = markerG.append("text").attr("x", pos).attr("y", labelY).attr("text-anchor", "middle").attr("fill", color).attr("font-size", "11px").attr("font-weight", "600").text(displayLabel);
148
- markerG.append("path").attr(
149
- "d",
150
- `M${pos},${diamondY - diamondSize} l${diamondSize},${diamondSize} l-${diamondSize},${diamondSize} l-${diamondSize},-${diamondSize} Z`
151
- ).attr("fill", color).attr("opacity", 0.9);
170
+ applyDiamondFill(
171
+ markerG.append("path").attr(
172
+ "d",
173
+ `M${pos},${diamondY - diamondSize} l${diamondSize},${diamondSize} l-${diamondSize},${diamondSize} l-${diamondSize},-${diamondSize} Z`
174
+ )
175
+ );
152
176
  markerG.append("line").attr("x1", pos).attr("y1", lineTop).attr("x2", pos).attr("y2", innerHeight).attr("stroke", color).attr("stroke-width", 1.5).attr("stroke-dasharray", "6 4").attr("opacity", lineOpacity);
153
177
  markerG.on("mouseenter", function() {
154
178
  onEnter(dateVal);
@@ -275,7 +299,7 @@ function renderTimelineGroupLegend(g, groups, groupColorMap, textColor, palette,
275
299
  }
276
300
  function setupTimeline(container, parsed, palette, isDark, exportDims, activeTagGroup, swimlaneTagGroup) {
277
301
  d3Selection.select(container).selectAll(":not([data-d3-tooltip])").remove();
278
- const solid = parsed.solidFill === true;
302
+ const fillMode = parsed.fillMode;
279
303
  const {
280
304
  timelineEvents,
281
305
  timelineGroups,
@@ -400,7 +424,7 @@ function setupTimeline(container, parsed, palette, isDark, exportDims, activeTag
400
424
  height,
401
425
  isVertical,
402
426
  tooltip,
403
- solid,
427
+ fillMode,
404
428
  textColor,
405
429
  mutedColor,
406
430
  bgColor,
@@ -530,7 +554,7 @@ function makeTimelineHoverHelpers() {
530
554
  }
531
555
  function renderTimelineTagLegendOverlay(container, parsed, palette, isDark, setup, hovers, onClickItem, exportDims, swimlaneTagGroup, activeTagGroup, onTagStateChange, viewMode, exportMode) {
532
556
  if (parsed.timelineTagGroups.length === 0) return;
533
- const { width, textColor, groupColorMap, solid } = setup;
557
+ const { width, textColor, groupColorMap, fillMode } = setup;
534
558
  const { FADE_OPACITY, fadeReset, fadeToTagValue } = hovers;
535
559
  const title = parsed.noTitle ? null : parsed.title;
536
560
  const { timelineEvents } = parsed;
@@ -683,8 +707,8 @@ function renderTimelineTagLegendOverlay(container, parsed, palette, isDark, setu
683
707
  } else {
684
708
  color = ev.group && groupColorMap.has(ev.group) ? groupColorMap.get(ev.group) : textColor;
685
709
  }
686
- el.selectAll("rect").attr("fill", shapeFill(palette, color, isDark, { solid })).attr("stroke", color);
687
- el.selectAll("circle:not(.tl-event-point-outline)").attr("fill", shapeFill(palette, color, isDark, { solid })).attr("stroke", color);
710
+ el.selectAll("rect").attr("fill", shapeFill(palette, color, isDark, { mode: fillMode })).attr("stroke", color);
711
+ el.selectAll("circle:not(.tl-event-point-outline)").attr("fill", shapeFill(palette, color, isDark, { mode: fillMode })).attr("stroke", color);
688
712
  });
689
713
  };
690
714
  var drawSwimlaneIcon = drawSwimlaneIcon2, relayout = relayout2, drawLegend = drawLegend2, recolorEvents = recolorEvents2;
@@ -717,7 +741,7 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
717
741
  width,
718
742
  height,
719
743
  tooltip,
720
- solid,
744
+ fillMode,
721
745
  textColor,
722
746
  bgColor,
723
747
  bg,
@@ -795,7 +819,9 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
795
819
  timelineScale,
796
820
  tooltip,
797
821
  palette,
798
- eraReserve ? eraLabelY : void 0
822
+ eraReserve ? eraLabelY : void 0,
823
+ fillMode,
824
+ bg
799
825
  );
800
826
  renderMarkers(
801
827
  g,
@@ -809,7 +835,9 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
809
835
  timelineScale,
810
836
  tooltip,
811
837
  palette,
812
- markerReserve ? markerLabelY : void 0
838
+ markerReserve ? markerLabelY : void 0,
839
+ fillMode,
840
+ bg
813
841
  );
814
842
  if (timelineScale) {
815
843
  renderTimeScale(
@@ -880,7 +908,7 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
880
908
  const rectW = Math.max(x2 - x, 4);
881
909
  const estLabelWidth = ev.label.length * sCharW + ctx.aesthetic(16);
882
910
  const labelFitsInside = rectW >= estLabelWidth;
883
- let fill = shapeFill(palette, color, isDark, { solid });
911
+ let fill = shapeFill(palette, color, isDark, { mode: fillMode });
884
912
  let stroke = color;
885
913
  if (ev.uncertain) {
886
914
  const gradientId = `uncertain-ts-${ev.lineNumber}`;
@@ -891,7 +919,7 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
891
919
  { offset: "0%", opacity: 1 },
892
920
  { offset: "80%", opacity: 1 },
893
921
  { offset: "100%", opacity: 0 }
894
- ]).enter().append("stop").attr("offset", (d) => d.offset).attr("stop-color", mix(color, bg, 30)).attr("stop-opacity", (d) => d.opacity);
922
+ ]).enter().append("stop").attr("offset", (d) => d.offset).attr("stop-color", fillMode === "outline" ? bg : mix(color, bg, 30)).attr("stop-opacity", (d) => d.opacity);
895
923
  defsEl.append("linearGradient").attr("id", strokeGradientId).attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%").selectAll("stop").data([
896
924
  { offset: "0%", opacity: 1 },
897
925
  { offset: "80%", opacity: 1 },
@@ -916,7 +944,7 @@ function renderTimelineHorizontalTimeSort(container, parsed, palette, isDark, se
916
944
  const wouldFlipLeft = x > innerWidth * 0.6;
917
945
  const labelFitsLeft = x - sPointGap - estLabelWidth > 0;
918
946
  const flipLeft = wouldFlipLeft && labelFitsLeft;
919
- evG.append("circle").attr("cx", x).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, color, isDark, { solid })).attr("stroke", color).attr("stroke-width", sPointStroke);
947
+ evG.append("circle").attr("cx", x).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, color, isDark, { mode: fillMode })).attr("stroke", color).attr("stroke-width", sPointStroke);
920
948
  evG.append("text").attr("x", flipLeft ? x - sPointGap : x + sPointGap).attr("y", y).attr("dy", "0.35em").attr("text-anchor", flipLeft ? "end" : "start").attr("fill", textColor).attr("font-size", `${sEventFontSm}px`).text(ev.label);
921
949
  }
922
950
  });
@@ -926,7 +954,7 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
926
954
  width,
927
955
  height,
928
956
  tooltip,
929
- solid,
957
+ fillMode,
930
958
  textColor,
931
959
  bgColor,
932
960
  bg,
@@ -1037,7 +1065,9 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1037
1065
  timelineScale,
1038
1066
  tooltip,
1039
1067
  palette,
1040
- eraReserve ? eraLabelY : void 0
1068
+ eraReserve ? eraLabelY : void 0,
1069
+ fillMode,
1070
+ bg
1041
1071
  );
1042
1072
  renderMarkers(
1043
1073
  g,
@@ -1051,7 +1081,9 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1051
1081
  timelineScale,
1052
1082
  tooltip,
1053
1083
  palette,
1054
- markerReserve ? markerLabelY : void 0
1084
+ markerReserve ? markerLabelY : void 0,
1085
+ fillMode,
1086
+ bg
1055
1087
  );
1056
1088
  if (timelineScale) {
1057
1089
  renderTimeScale(
@@ -1080,7 +1112,7 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1080
1112
  const sBandAccentW = ctx.structural(4);
1081
1113
  const clipId = `tl-band-clip-${tlBandClipCounter++}`;
1082
1114
  g.append("clipPath").attr("id", clipId).append("rect").attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", bandH).attr("rx", sBandRx);
1083
- g.append("rect").attr("class", "tl-group-header-bg").attr("data-group", lane.name).attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", bandH).attr("rx", sBandRx).attr("fill", shapeFill(palette, laneColor, isDark, { solid })).style("pointer-events", "none");
1115
+ g.append("rect").attr("class", "tl-group-header-bg").attr("data-group", lane.name).attr("x", bandX).attr("y", bandY).attr("width", bandW).attr("height", bandH).attr("rx", sBandRx).attr("fill", shapeFill(palette, laneColor, isDark, { mode: fillMode })).style("pointer-events", "none");
1084
1116
  g.append("rect").attr("class", "tl-group-header-accent").attr("data-group", lane.name).attr("x", bandX).attr("y", bandY).attr("width", sBandAccentW).attr("height", bandH).attr("fill", laneColor).attr("clip-path", `url(#${clipId})`).style("pointer-events", "none");
1085
1117
  const headerG = g.append("g").attr("class", "tl-group-header").attr("data-group", lane.name).style("cursor", "pointer").on("mouseenter", () => fadeToGroup(g, lane.name)).on("mouseleave", () => fadeReset(g)).on("click", () => toggleGroup(lane.name));
1086
1118
  headerG.append("text").attr("x", -margin.left + ctx.aesthetic(10)).attr("y", curY + sBarH / 2).attr("dy", "0.35em").attr("text-anchor", "start").attr("fill", textColor).attr("font-size", `${sLaneHeaderFont}px`).attr("font-weight", "600").text(`${toggleIcon} ${lane.name}`);
@@ -1093,7 +1125,7 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1093
1125
  const sx2 = xScale(laneMaxD);
1094
1126
  const groupBarW = Math.max(sx2 - sx1, ctx.structural(20));
1095
1127
  const groupBarG = g.append("g").attr("class", isCollapsed ? "tl-group-summary" : "tl-group-bar").attr("data-group", lane.name).style("cursor", "pointer").on("mouseenter", () => fadeToGroup(g, lane.name)).on("mouseleave", () => fadeReset(g)).on("click", () => toggleGroup(lane.name));
1096
- groupBarG.append("rect").attr("x", sx1).attr("y", curY).attr("width", groupBarW).attr("height", sBarH).attr("rx", sBarRx).attr("fill", shapeFill(palette, laneColor, isDark, { solid })).attr("stroke", laneColor).attr("stroke-width", sBarStroke);
1128
+ groupBarG.append("rect").attr("x", sx1).attr("y", curY).attr("width", groupBarW).attr("height", sBarH).attr("rx", sBarRx).attr("fill", shapeFill(palette, laneColor, isDark, { mode: fillMode })).attr("stroke", laneColor).attr("stroke-width", sBarStroke);
1097
1129
  }
1098
1130
  if (isCollapsed) {
1099
1131
  curY += rowH + sGroupGap;
@@ -1143,7 +1175,9 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1143
1175
  if (ev.endDate) {
1144
1176
  const x2 = xScale(parseTimelineDate(ev.endDate));
1145
1177
  const rectW = Math.max(x2 - x, 4);
1146
- let fill = shapeFill(palette, evColor, isDark, { solid });
1178
+ let fill = shapeFill(palette, evColor, isDark, {
1179
+ mode: fillMode
1180
+ });
1147
1181
  let stroke = evColor;
1148
1182
  if (ev.uncertain) {
1149
1183
  const gradientId = `uncertain-${ev.lineNumber}`;
@@ -1154,7 +1188,10 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1154
1188
  { offset: "0%", opacity: 1 },
1155
1189
  { offset: "80%", opacity: 1 },
1156
1190
  { offset: "100%", opacity: 0 }
1157
- ]).enter().append("stop").attr("offset", (d) => d.offset).attr("stop-color", mix(evColor, bg, 30)).attr("stop-opacity", (d) => d.opacity);
1191
+ ]).enter().append("stop").attr("offset", (d) => d.offset).attr(
1192
+ "stop-color",
1193
+ fillMode === "outline" ? bg : mix(evColor, bg, 30)
1194
+ ).attr("stop-opacity", (d) => d.opacity);
1158
1195
  defsEl.append("linearGradient").attr("id", strokeGradientId).attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%").selectAll("stop").data([
1159
1196
  { offset: "0%", opacity: 1 },
1160
1197
  { offset: "80%", opacity: 1 },
@@ -1165,7 +1202,7 @@ function renderTimelineHorizontalGrouped(container, parsed, palette, isDark, set
1165
1202
  }
1166
1203
  evG.append("rect").attr("x", x).attr("y", y - sBarH / 2).attr("width", rectW).attr("height", sBarH).attr("rx", sBarRx).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", sBarStroke);
1167
1204
  } else {
1168
- evG.append("circle").attr("cx", x).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, evColor, isDark, { solid })).attr("stroke", evColor).attr("stroke-width", sPointStroke);
1205
+ evG.append("circle").attr("cx", x).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, evColor, isDark, { mode: fillMode })).attr("stroke", evColor).attr("stroke-width", sPointStroke);
1169
1206
  }
1170
1207
  });
1171
1208
  curY += (lane.events.length + 1) * rowH + sGroupGap;
@@ -1176,7 +1213,7 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1176
1213
  width,
1177
1214
  height,
1178
1215
  tooltip,
1179
- solid,
1216
+ fillMode,
1180
1217
  textColor,
1181
1218
  mutedColor,
1182
1219
  bgColor,
@@ -1269,7 +1306,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1269
1306
  () => fadeReset(g),
1270
1307
  timelineScale,
1271
1308
  tooltip,
1272
- palette
1309
+ palette,
1310
+ void 0,
1311
+ fillMode,
1312
+ bg
1273
1313
  );
1274
1314
  renderMarkers(
1275
1315
  g,
@@ -1282,7 +1322,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1282
1322
  () => fadeReset(g),
1283
1323
  timelineScale,
1284
1324
  tooltip,
1285
- palette
1325
+ palette,
1326
+ void 0,
1327
+ fillMode,
1328
+ bg
1286
1329
  );
1287
1330
  if (timelineScale) {
1288
1331
  renderTimeScale(
@@ -1334,7 +1377,9 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1334
1377
  if (ev.endDate) {
1335
1378
  const y2 = yScale(parseTimelineDate(ev.endDate));
1336
1379
  const rectH = Math.max(y2 - y, 4);
1337
- let fill = shapeFill(palette, evColor, isDark, { solid });
1380
+ let fill = shapeFill(palette, evColor, isDark, {
1381
+ mode: fillMode
1382
+ });
1338
1383
  let stroke = evColor;
1339
1384
  if (ev.uncertain) {
1340
1385
  const gradientId = `uncertain-vg-${ev.lineNumber}`;
@@ -1345,7 +1390,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1345
1390
  { offset: "0%", opacity: 1 },
1346
1391
  { offset: "80%", opacity: 1 },
1347
1392
  { offset: "100%", opacity: 0 }
1348
- ]).enter().append("stop").attr("offset", (d) => d.offset).attr("stop-color", mix(laneColor, bg, 30)).attr("stop-opacity", (d) => d.opacity);
1393
+ ]).enter().append("stop").attr("offset", (d) => d.offset).attr(
1394
+ "stop-color",
1395
+ fillMode === "outline" ? bg : mix(laneColor, bg, 30)
1396
+ ).attr("stop-opacity", (d) => d.opacity);
1349
1397
  defsEl.append("linearGradient").attr("id", strokeGradientId).attr("x1", "0%").attr("y1", "0%").attr("x2", "0%").attr("y2", "100%").selectAll("stop").data([
1350
1398
  { offset: "0%", opacity: 1 },
1351
1399
  { offset: "80%", opacity: 1 },
@@ -1357,7 +1405,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1357
1405
  evG.append("rect").attr("x", laneCenter - sBarW / 2).attr("y", y).attr("width", sBarW).attr("height", rectH).attr("rx", sBarRx).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", sBarStroke);
1358
1406
  evG.append("text").attr("x", laneCenter + sBarW + ctx.aesthetic(2)).attr("y", y + rectH / 2).attr("dy", "0.35em").attr("fill", textColor).attr("font-size", `${sEventFont}px`).text(ev.label);
1359
1407
  } else {
1360
- evG.append("circle").attr("cx", laneCenter).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, evColor, isDark, { solid })).attr("stroke", evColor).attr("stroke-width", sPointStroke);
1408
+ evG.append("circle").attr("cx", laneCenter).attr("cy", y).attr("r", sPointR).attr(
1409
+ "fill",
1410
+ shapeFill(palette, evColor, isDark, { mode: fillMode })
1411
+ ).attr("stroke", evColor).attr("stroke-width", sPointStroke);
1361
1412
  evG.append("text").attr("x", laneCenter + ctx.aesthetic(10)).attr("y", y).attr("dy", "0.35em").attr("fill", textColor).attr("font-size", `${sEventFont}px`).text(ev.label);
1362
1413
  }
1363
1414
  }
@@ -1397,7 +1448,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1397
1448
  () => fadeReset(g),
1398
1449
  timelineScale,
1399
1450
  tooltip,
1400
- palette
1451
+ palette,
1452
+ void 0,
1453
+ fillMode,
1454
+ bg
1401
1455
  );
1402
1456
  renderMarkers(
1403
1457
  g,
@@ -1410,7 +1464,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1410
1464
  () => fadeReset(g),
1411
1465
  timelineScale,
1412
1466
  tooltip,
1413
- palette
1467
+ palette,
1468
+ void 0,
1469
+ fillMode,
1470
+ bg
1414
1471
  );
1415
1472
  if (timelineScale) {
1416
1473
  renderTimeScale(
@@ -1461,7 +1518,9 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1461
1518
  if (ev.endDate) {
1462
1519
  const y2 = yScale(parseTimelineDate(ev.endDate));
1463
1520
  const rectH = Math.max(y2 - y, 4);
1464
- let fill = shapeFill(palette, color, isDark, { solid });
1521
+ let fill = shapeFill(palette, color, isDark, {
1522
+ mode: fillMode
1523
+ });
1465
1524
  let stroke = color;
1466
1525
  if (ev.uncertain) {
1467
1526
  const gradientId = `uncertain-v-${ev.lineNumber}`;
@@ -1472,7 +1531,10 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1472
1531
  { offset: "0%", opacity: 1 },
1473
1532
  { offset: "80%", opacity: 1 },
1474
1533
  { offset: "100%", opacity: 0 }
1475
- ]).enter().append("stop").attr("offset", (d) => d.offset).attr("stop-color", mix(color, bg, 30)).attr("stop-opacity", (d) => d.opacity);
1534
+ ]).enter().append("stop").attr("offset", (d) => d.offset).attr(
1535
+ "stop-color",
1536
+ fillMode === "outline" ? bg : mix(color, bg, 30)
1537
+ ).attr("stop-opacity", (d) => d.opacity);
1476
1538
  defsEl.append("linearGradient").attr("id", strokeGradientId).attr("x1", "0%").attr("y1", "0%").attr("x2", "0%").attr("y2", "100%").selectAll("stop").data([
1477
1539
  { offset: "0%", opacity: 1 },
1478
1540
  { offset: "80%", opacity: 1 },
@@ -1484,7 +1546,7 @@ function renderTimelineVertical(container, parsed, palette, isDark, setup, hover
1484
1546
  evG.append("rect").attr("x", axisX - sBarW / 2).attr("y", y).attr("width", sBarW).attr("height", rectH).attr("rx", sBarRx).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", sBarStroke);
1485
1547
  evG.append("text").attr("x", axisX + sBarW + ctx.aesthetic(4)).attr("y", y + rectH / 2).attr("dy", "0.35em").attr("fill", textColor).attr("font-size", `${sEventFontSm}px`).text(ev.label);
1486
1548
  } else {
1487
- evG.append("circle").attr("cx", axisX).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, color, isDark, { solid })).attr("stroke", color).attr("stroke-width", sPointStroke);
1549
+ evG.append("circle").attr("cx", axisX).attr("cy", y).attr("r", sPointR).attr("fill", shapeFill(palette, color, isDark, { mode: fillMode })).attr("stroke", color).attr("stroke-width", sPointStroke);
1488
1550
  evG.append("text").attr("x", axisX + sBarW + ctx.aesthetic(4)).attr("y", y).attr("dy", "0.35em").attr("fill", textColor).attr("font-size", `${sEventFontSm}px`).text(ev.label);
1489
1551
  }
1490
1552
  evG.append("text").attr("x", axisX - ctx.aesthetic(14)).attr(
@@ -1607,4 +1669,4 @@ export {
1607
1669
  formatDateLabel,
1608
1670
  renderTimeline
1609
1671
  };
1610
- //# sourceMappingURL=chunk-B63YB7X3.js.map
1672
+ //# sourceMappingURL=chunk-7KINELPI.js.map
@@ -25,13 +25,13 @@ import {
25
25
  } from "./chunk-3CIOJ5YJ.js";
26
26
  import {
27
27
  layoutOrg
28
- } from "./chunk-GROLTAWZ.js";
28
+ } from "./chunk-QZX5S6R3.js";
29
29
  import {
30
30
  ScaleContext
31
31
  } from "./chunk-YYVTBZZC.js";
32
32
  import {
33
33
  renderIntegratedLegend
34
- } from "./chunk-OU7HLO7I.js";
34
+ } from "./chunk-AUIM2NVH.js";
35
35
  import {
36
36
  getMaxLegendReservedHeight
37
37
  } from "./chunk-YAA6IID3.js";
@@ -55,17 +55,20 @@ import {
55
55
  } from "./chunk-WCT3NYCV.js";
56
56
  import {
57
57
  parseOrg
58
- } from "./chunk-RBHWPDBB.js";
58
+ } from "./chunk-NNS4E7CW.js";
59
59
  import {
60
60
  contrastText,
61
61
  mix,
62
62
  shapeFill,
63
63
  themeBaseBg
64
- } from "./chunk-P6T66CCZ.js";
64
+ } from "./chunk-WBM7ZNDI.js";
65
65
  import {
66
66
  resolveTagColor,
67
67
  tagAttrKey
68
- } from "./chunk-467TVMQL.js";
68
+ } from "./chunk-HHKO6SKY.js";
69
+ import {
70
+ fillModeFromOptions
71
+ } from "./chunk-BRENJ2BQ.js";
69
72
 
70
73
  // src/org/renderer.ts
71
74
  import * as d3Selection from "d3-selection";
@@ -77,11 +80,9 @@ var ANCESTOR_LABEL_FONT_SIZE = 11;
77
80
  var ANCESTOR_ROW_HEIGHT = 22;
78
81
  var ANCESTOR_TRAIL_BOTTOM_GAP = 16;
79
82
  var LEGEND_FIXED_GAP = 8;
80
- function nodeFill(palette, isDark, nodeColor, solid) {
83
+ function nodeFill(palette, isDark, nodeColor, fillMode) {
81
84
  const color = nodeColor ?? palette.primary;
82
- return shapeFill(palette, color, isDark, {
83
- ...solid !== void 0 && { solid }
84
- });
85
+ return shapeFill(palette, color, isDark, { mode: fillMode });
85
86
  }
86
87
  function nodeStroke(palette, nodeColor) {
87
88
  return nodeColor ?? palette.primary;
@@ -285,12 +286,12 @@ function renderOrg(container, parsed, layout, palette, isDark, onClickItem, expo
285
286
  onClickItem(node.lineNumber);
286
287
  });
287
288
  }
288
- const solid = parsed.options["solid-fill"] === "on";
289
+ const fillMode = fillModeFromOptions(parsed.options);
289
290
  const fill = nodeFill(
290
291
  palette,
291
292
  isDark,
292
293
  colorOff ? void 0 : node.color,
293
- solid
294
+ fillMode
294
295
  );
295
296
  const stroke = nodeStroke(palette, colorOff ? void 0 : node.color);
296
297
  const labelColor = contrastText(
@@ -319,7 +320,7 @@ function renderOrg(container, parsed, layout, palette, isDark, onClickItem, expo
319
320
  fontSize: sMetaFontSize,
320
321
  lineHeight: sMetaLineHeight,
321
322
  separatorGap: sSeparatorGap,
322
- separatorColor: solid ? labelColor : stroke,
323
+ separatorColor: fillMode === "solid" ? labelColor : stroke,
323
324
  textColor: labelColor
324
325
  }
325
326
  }
@@ -331,7 +332,7 @@ function renderOrg(container, parsed, layout, palette, isDark, onClickItem, expo
331
332
  barHeight: sCollapseBarHeight,
332
333
  inset: sCollapseBarInset,
333
334
  rx: sCardRadius,
334
- fill: solid ? labelColor : nodeStroke(palette, colorOff ? void 0 : node.color),
335
+ fill: fillMode === "solid" ? labelColor : nodeStroke(palette, colorOff ? void 0 : node.color),
335
336
  clipId: `clip-${node.id}`,
336
337
  className: "org-collapse-bar"
337
338
  });
@@ -484,4 +485,4 @@ export {
484
485
  renderOrg,
485
486
  renderOrgForExport
486
487
  };
487
- //# sourceMappingURL=chunk-AB7INMR5.js.map
488
+ //# sourceMappingURL=chunk-7QE3XMRK.js.map
@@ -7,7 +7,7 @@ import {
7
7
  renderNoteBadge,
8
8
  renderNoteBox,
9
9
  renderNoteConnector
10
- } from "./chunk-JEUJOX5X.js";
10
+ } from "./chunk-J7TLCB2Q.js";
11
11
  import {
12
12
  extractExportSvg,
13
13
  runInExportContainer
@@ -21,7 +21,7 @@ import {
21
21
  } from "./chunk-YYVTBZZC.js";
22
22
  import {
23
23
  renderIntegratedLegend
24
- } from "./chunk-OU7HLO7I.js";
24
+ } from "./chunk-AUIM2NVH.js";
25
25
  import {
26
26
  TITLE_FONT_SIZE,
27
27
  TITLE_FONT_WEIGHT,
@@ -39,10 +39,13 @@ import {
39
39
  import {
40
40
  contrastText,
41
41
  shapeFill
42
- } from "./chunk-P6T66CCZ.js";
42
+ } from "./chunk-WBM7ZNDI.js";
43
43
  import {
44
44
  parseClassDiagram
45
- } from "./chunk-FC5I2KXV.js";
45
+ } from "./chunk-TPFKKXCB.js";
46
+ import {
47
+ fillModeFromOptions
48
+ } from "./chunk-BRENJ2BQ.js";
46
49
 
47
50
  // src/class/renderer.ts
48
51
  import * as d3Selection from "d3-selection";
@@ -68,11 +71,9 @@ function modifierColor(modifier, palette, colorOff) {
68
71
  return palette.colors.teal;
69
72
  }
70
73
  }
71
- function nodeFill(palette, isDark, modifier, nodeColor, colorOff, solid) {
74
+ function nodeFill(palette, isDark, modifier, nodeColor, colorOff, fillMode) {
72
75
  const color = nodeColor ?? modifierColor(modifier, palette, colorOff);
73
- return shapeFill(palette, color, isDark, {
74
- ...solid !== void 0 && { solid }
75
- });
76
+ return shapeFill(palette, color, isDark, { mode: fillMode });
76
77
  }
77
78
  function nodeStroke(palette, modifier, nodeColor, colorOff) {
78
79
  return nodeColor ?? modifierColor(modifier, palette, colorOff);
@@ -259,14 +260,14 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
259
260
  const colorOff = !!parsed.options?.["no-auto-color"];
260
261
  const neutralize = hasLegend && !isLegendExpanded && !node.color;
261
262
  const effectiveColor = neutralize ? palette.primary : node.color;
262
- const solid = parsed.options?.["solid-fill"] === "on";
263
+ const fillMode = fillModeFromOptions(parsed.options ?? {});
263
264
  const fill = nodeFill(
264
265
  palette,
265
266
  isDark,
266
267
  node.modifier,
267
268
  effectiveColor,
268
269
  colorOff,
269
- solid
270
+ fillMode
270
271
  );
271
272
  const stroke = nodeStroke(palette, node.modifier, effectiveColor, colorOff);
272
273
  const onFillText = contrastText(
@@ -289,14 +290,14 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
289
290
  const fields = node.members.filter((m) => !m.isMethod);
290
291
  const methods = node.members.filter((m) => m.isMethod);
291
292
  if (isEnum) {
292
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
293
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
293
294
  let memberY = yPos + sCompartmentPaddingY;
294
295
  for (const member of node.members) {
295
296
  nodeG.append("text").attr("x", -w / 2 + sMemberPaddingX).attr("y", memberY + sMemberLineHeight / 2).attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", sMemberFontSize).text(member.name);
296
297
  memberY += sMemberLineHeight;
297
298
  }
298
299
  } else {
299
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
300
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
300
301
  if (fields.length > 0) {
301
302
  let memberY = yPos + sCompartmentPaddingY;
302
303
  for (const field of fields) {
@@ -312,7 +313,7 @@ function renderClassDiagram(container, parsed, layout, palette, isDark, onClickI
312
313
  }
313
314
  }
314
315
  yPos += node.fieldsHeight;
315
- nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", solid ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
316
+ nodeG.append("line").attr("x1", -w / 2).attr("y1", yPos).attr("x2", w / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.5);
316
317
  if (methods.length > 0) {
317
318
  let memberY = yPos + sCompartmentPaddingY;
318
319
  for (const method of methods) {
@@ -407,4 +408,4 @@ export {
407
408
  renderClassDiagram,
408
409
  renderClassDiagramForExport
409
410
  };
410
- //# sourceMappingURL=chunk-IUJODQKX.js.map
411
+ //# sourceMappingURL=chunk-AAXZDUOV.js.map
@@ -10,7 +10,7 @@ import {
10
10
  tagAttrKey,
11
11
  validateTagGroupNames,
12
12
  validateTagValues
13
- } from "./chunk-467TVMQL.js";
13
+ } from "./chunk-HHKO6SKY.js";
14
14
  import {
15
15
  MINDMAP_REGISTRY,
16
16
  OPTION_NOCOLON_RE,
@@ -21,7 +21,7 @@ import {
21
21
  tryParseSharedOption,
22
22
  warnUnknownMetaKeys,
23
23
  withTagAliases
24
- } from "./chunk-LV4BETUU.js";
24
+ } from "./chunk-BRENJ2BQ.js";
25
25
  import {
26
26
  formatDgmoError,
27
27
  makeDgmoError,
@@ -313,4 +313,4 @@ function findMetadataParent(indent, indentStack) {
313
313
  export {
314
314
  parseMindmap
315
315
  };
316
- //# sourceMappingURL=chunk-2UJSV2VT.js.map
316
+ //# sourceMappingURL=chunk-AL672HNE.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  extractColor,
3
3
  measureIndent
4
- } from "./chunk-LV4BETUU.js";
4
+ } from "./chunk-BRENJ2BQ.js";
5
5
  import {
6
6
  makeDgmoError
7
7
  } from "./chunk-CXK4DZH3.js";
@@ -73,4 +73,4 @@ function tryCollectNote(lines, index, indent, palette, diagnostics) {
73
73
  export {
74
74
  tryCollectNote
75
75
  };
76
- //# sourceMappingURL=chunk-WQLMU7VG.js.map
76
+ //# sourceMappingURL=chunk-ARGMQ3H4.js.map