@diagrammo/dgmo 0.50.2 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/.cursorrules +15 -19
  2. package/.github/copilot-instructions.md +15 -19
  3. package/.windsurfrules +15 -19
  4. package/SKILL.md +15 -19
  5. package/dist/advanced.d.ts +155 -65
  6. package/dist/advanced.js +231 -189
  7. package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
  8. package/dist/auto.css +31 -8
  9. package/dist/auto.d.ts +6 -0
  10. package/dist/auto.js +171 -133
  11. package/dist/auto.mjs +3062 -1478
  12. package/dist/block.css +28 -8
  13. package/dist/block.js +138 -72
  14. package/dist/charts-d3-MXEP6BNP.js +26 -0
  15. package/dist/{chunk-3YPY3OXD.js → chunk-3HF5YEFJ.js} +17 -7
  16. package/dist/{chunk-4MJ7M6YL.js → chunk-3HGU63UY.js} +14 -13
  17. package/dist/chunk-3LK5DNED.js +35 -0
  18. package/dist/{chunk-3Y2DRD7S.js → chunk-3QD7VP3U.js} +9 -4
  19. package/dist/{chunk-6BFZKBGD.js → chunk-3YRPZ7ZZ.js} +2 -2
  20. package/dist/{chunk-WW32K72E.js → chunk-44VCIPHF.js} +25 -21
  21. package/dist/{chunk-TN35C5KM.js → chunk-4AQRFDXL.js} +2 -2
  22. package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
  23. package/dist/{chunk-PGEGPSCZ.js → chunk-4IHAV6O7.js} +2 -2
  24. package/dist/{chunk-7L3R6I3U.js → chunk-4UNQ6X24.js} +10 -7
  25. package/dist/{chunk-O7NUCTFU.js → chunk-4YFKQ5WT.js} +7 -4
  26. package/dist/{chunk-5WFIYXQ6.js → chunk-5223KXFD.js} +122 -242
  27. package/dist/{chunk-PFHVU7UA.js → chunk-5BHJZH62.js} +3 -3
  28. package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
  29. package/dist/{chunk-GKC3HILQ.js → chunk-5NGAO4QK.js} +27 -4
  30. package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
  31. package/dist/{chunk-DSWVNQVS.js → chunk-5RP7JRVP.js} +4 -59
  32. package/dist/{chunk-MCZ5LBZD.js → chunk-5SEVICBT.js} +8 -8
  33. package/dist/{chunk-GBE54KY6.js → chunk-6EJITS44.js} +8 -5
  34. package/dist/{chunk-BBGDM4NQ.js → chunk-6HQH6JZE.js} +35 -16
  35. package/dist/{chunk-66NVRO4K.js → chunk-6LBQ7ELG.js} +17 -18
  36. package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
  37. package/dist/{chunk-VBYSIOOY.js → chunk-75G3Q4DK.js} +3 -3
  38. package/dist/{chunk-3NODSS6A.js → chunk-77FGAVZC.js} +13 -10
  39. package/dist/{chunk-6IAA2QQ2.js → chunk-7BIZCTAX.js} +2 -2
  40. package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
  41. package/dist/{chunk-66RUL3XF.js → chunk-7KINELPI.js} +111 -49
  42. package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
  43. package/dist/{chunk-QJP6PG7F.js → chunk-7QE3XMRK.js} +19 -18
  44. package/dist/{chunk-P7CE7LXL.js → chunk-AAXZDUOV.js} +18 -17
  45. package/dist/{chunk-SXRTRMEE.js → chunk-AL672HNE.js} +3 -3
  46. package/dist/chunk-APKUAJ2L.js +220 -0
  47. package/dist/{chunk-SCHXJTZL.js → chunk-ARGMQ3H4.js} +2 -2
  48. package/dist/{chunk-HEVYAHLW.js → chunk-AUIM2NVH.js} +5 -5
  49. package/dist/{chunk-3LH5CLP4.js → chunk-BKVOYV6I.js} +143 -6
  50. package/dist/{chunk-RZ6YKEUJ.js → chunk-BPIZNB5O.js} +17 -15
  51. package/dist/{chunk-QROYX7TT.js → chunk-BPY242XU.js} +6 -4
  52. package/dist/{chunk-OTAL43EH.js → chunk-BRENJ2BQ.js} +39 -3
  53. package/dist/{chunk-FA6K3FWM.js → chunk-CCNDLW7Z.js} +44 -22
  54. package/dist/{chunk-2KGXHFYK.js → chunk-CIRFIL4M.js} +49 -29
  55. package/dist/chunk-DAOFNU6J.js +283 -0
  56. package/dist/{chunk-QJJZSROI.js → chunk-DYWQFQJP.js} +48 -38
  57. package/dist/{chunk-XEGTMVYY.js → chunk-EMLPOL77.js} +15 -8
  58. package/dist/{chunk-NWED7CYO.js → chunk-FHGVORFO.js} +29 -25
  59. package/dist/{chunk-U2HGPLZS.js → chunk-FQ7HTV52.js} +17 -2
  60. package/dist/{chunk-H73FP42Q.js → chunk-FQMUHRVC.js} +70 -31
  61. package/dist/{chunk-BTUTZMPT.js → chunk-FT3ZYWET.js} +108 -42
  62. package/dist/{chunk-T5SHNNGP.js → chunk-FUPF2UYQ.js} +92 -34
  63. package/dist/{chunk-3XPUDB7B.js → chunk-FY5MSZAP.js} +279 -39
  64. package/dist/{chunk-M5RXSRO2.js → chunk-GCYTI3DE.js} +42 -33
  65. package/dist/{chunk-DN66GPY5.js → chunk-GJFAMOGK.js} +24 -3
  66. package/dist/{chunk-F2L5GCQ4.js → chunk-GU46PPT3.js} +3 -3
  67. package/dist/{chunk-6IUAK7RZ.js → chunk-H6PI3KJT.js} +2 -2
  68. package/dist/{chunk-ONA5KPV3.js → chunk-H7KENAZO.js} +18 -14
  69. package/dist/{chunk-SQLNBA64.js → chunk-HBPDFCQY.js} +3 -3
  70. package/dist/{chunk-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
  71. package/dist/{chunk-FJUNPCYI.js → chunk-HHKO6SKY.js} +2 -2
  72. package/dist/{chunk-DZXYF2F5.js → chunk-HQQNCY7W.js} +21 -8
  73. package/dist/{chunk-7TV5Y53Y.js → chunk-HWX6ZHF3.js} +3 -3
  74. package/dist/{chunk-3P2DKJCG.js → chunk-ICPJPQ5C.js} +2 -2
  75. package/dist/{chunk-VUJGMJE6.js → chunk-IM6PDDCE.js} +4 -4
  76. package/dist/{chunk-JJUOHGX2.js → chunk-INE5YJBZ.js} +13 -8
  77. package/dist/{chunk-HTMN2Z6U.js → chunk-J6QROYDA.js} +58 -11
  78. package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
  79. package/dist/{chunk-SVTI362O.js → chunk-J7KJR3R6.js} +129 -109
  80. package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
  81. package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
  82. package/dist/{chunk-J6K7RP6P.js → chunk-JRCOYRRH.js} +19 -7
  83. package/dist/{chunk-7QKLIMRZ.js → chunk-K2I2XOZD.js} +46 -51
  84. package/dist/{chunk-EAMEADTV.js → chunk-K4EOKJA6.js} +96 -24
  85. package/dist/{chunk-5OWVC2A6.js → chunk-KGVZ5VGH.js} +13 -10
  86. package/dist/{chunk-DFTFPYUD.js → chunk-LBMS4AW6.js} +22 -21
  87. package/dist/{chunk-VVW3F3MD.js → chunk-LGT3PZCJ.js} +27 -19
  88. package/dist/{chunk-OMNGQPEZ.js → chunk-LTXOLDUZ.js} +9 -6
  89. package/dist/{chunk-Q4V4XQWV.js → chunk-MUE65OTD.js} +5 -4
  90. package/dist/{chunk-5GJYGP5Z.js → chunk-MUVJ57EP.js} +14 -18
  91. package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
  92. package/dist/{chunk-OTQKUHRS.js → chunk-NNS4E7CW.js} +6 -4
  93. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  94. package/dist/{chunk-KFZYNWWO.js → chunk-ONU3U4GL.js} +4 -4
  95. package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
  96. package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
  97. package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
  98. package/dist/{chunk-QXKWYZNR.js → chunk-PRI2OD4E.js} +10 -3
  99. package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
  100. package/dist/{chunk-C2CVAM3U.js → chunk-QGATPIPX.js} +170 -91
  101. package/dist/{chunk-PZFVK3IH.js → chunk-QHXCAEMX.js} +8 -5
  102. package/dist/{chunk-BH3UYK36.js → chunk-QJMKPUYK.js} +15 -5
  103. package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
  104. package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
  105. package/dist/{chunk-IUMPEA64.js → chunk-QZX5S6R3.js} +4 -4
  106. package/dist/{chunk-I7F2A35O.js → chunk-R3YSD62R.js} +25 -47
  107. package/dist/{chunk-NU3XLTGP.js → chunk-REJAIQ5S.js} +4 -4
  108. package/dist/{chunk-2C56LEML.js → chunk-ROOE4R4Y.js} +8 -5
  109. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  110. package/dist/{chunk-I2WKW7C7.js → chunk-SMRFPVLQ.js} +3 -3
  111. package/dist/{chunk-VDOOQZUD.js → chunk-SWSIKFEB.js} +4 -4
  112. package/dist/{chunk-HLJVEAOF.js → chunk-T4A4TSTJ.js} +19 -45
  113. package/dist/{chunk-KHEYDLMT.js → chunk-TJVLKNGR.js} +20 -10
  114. package/dist/{chunk-GL5UZ6NY.js → chunk-TPFKKXCB.js} +3 -3
  115. package/dist/{chunk-X6EZPSW6.js → chunk-TTIM6YTT.js} +31 -21
  116. package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
  117. package/dist/{chunk-T4VOVZT5.js → chunk-UBLHQTLV.js} +15 -14
  118. package/dist/{chunk-3LKM6FMW.js → chunk-UNURMIQO.js} +2 -2
  119. package/dist/{chunk-TSA237IM.js → chunk-VILVLS7P.js} +5 -3
  120. package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
  121. package/dist/{chunk-3XGZF2QJ.js → chunk-VQOCMUWI.js} +39 -28
  122. package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
  123. package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
  124. package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
  125. package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
  126. package/dist/{chunk-6HJBFVLO.js → chunk-XD6ZYURY.js} +9 -4
  127. package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
  128. package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
  129. package/dist/{chunk-F7BFXWNQ.js → chunk-YIBAWQGJ.js} +7 -4
  130. package/dist/{chunk-PH5X4GIP.js → chunk-YTMTPUH4.js} +8 -5
  131. package/dist/{chunk-3UIKSPFB.js → chunk-Z5QVYKR7.js} +11 -3
  132. package/dist/{chunk-KQ57MHRO.js → chunk-ZEF5M5MB.js} +155 -87
  133. package/dist/{chunk-LE4MYMLI.js → chunk-ZJV7GYR4.js} +6 -6
  134. package/dist/{chunk-XJLKLU4D.js → chunk-ZNWAYU6N.js} +11 -7
  135. package/dist/cli.cjs +165 -148
  136. package/dist/clock.js +105 -25
  137. package/dist/countdown.js +208 -82
  138. package/dist/dgmo-router-X7ZGAPIE.js +86 -0
  139. package/dist/dimensions-45H6JQEY.js +22 -0
  140. package/dist/editor.js +17 -2
  141. package/dist/element.d.ts +6 -0
  142. package/dist/element.js +172 -134
  143. package/dist/element.mjs +3026 -1463
  144. package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-UKELHBSB.js} +4 -4
  145. package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-MNCDS7MV.js} +10 -10
  146. package/dist/highlight.d.ts +21 -1
  147. package/dist/highlight.js +106 -3
  148. package/dist/index.d.ts +2 -2
  149. package/dist/index.js +59 -57
  150. package/dist/{layout-FWODLIMP.js → layout-2L3WMRYU.js} +6 -6
  151. package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
  152. package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
  153. package/dist/layout-A4XWNVID.js +14 -0
  154. package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
  155. package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
  156. package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
  157. package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
  158. package/dist/layout-G23F7LDH.js +9 -0
  159. package/dist/{layout-QNUQLEHU.js → layout-GM4UGR7B.js} +5 -4
  160. package/dist/{layout-7MZ5NF2N.js → layout-GQQJXNYH.js} +5 -5
  161. package/dist/{layout-5BG6DFCU.js → layout-IIE2S5FK.js} +6 -6
  162. package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
  163. package/dist/layout-VMCRX66I.js +14 -0
  164. package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
  165. package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
  166. package/dist/map-data/gazetteer.json +1 -1
  167. package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
  168. package/dist/{parser-D5VILGN2.js → parser-2ECN6JA2.js} +4 -4
  169. package/dist/{parser-LWKKBNSA.js → parser-4WTIHM5J.js} +3 -3
  170. package/dist/{parser-DFFEDKHH.js → parser-5H2BTSJQ.js} +3 -3
  171. package/dist/{parser-4NO6VZ6S.js → parser-75KVXUNS.js} +4 -4
  172. package/dist/{parser-VKOJM7KS.js → parser-774AC53T.js} +4 -4
  173. package/dist/{parser-IBWNAPY4.js → parser-BE4YCSRU.js} +3 -3
  174. package/dist/{parser-4AI5ZN5F.js → parser-CNGUQUQI.js} +3 -3
  175. package/dist/{parser-36HVKU5U.js → parser-DEUUSQIN.js} +7 -6
  176. package/dist/{parser-H3XEPFPV.js → parser-DQAFLUJB.js} +4 -4
  177. package/dist/{parser-5OXGPNBF.js → parser-EYCKNKQA.js} +5 -5
  178. package/dist/{parser-TGQZJ5OT.js → parser-FXISIU6A.js} +4 -4
  179. package/dist/{parser-JJR52VAT.js → parser-GTB4XC7P.js} +5 -5
  180. package/dist/{parser-AGVYTQXV.js → parser-GVEPAUSD.js} +4 -4
  181. package/dist/{parser-WAV5JRPT.js → parser-HSQGTY4G.js} +4 -4
  182. package/dist/{parser-YS7TOS2K.js → parser-HVKRINUS.js} +3 -3
  183. package/dist/{parser-W4PQUGX3.js → parser-J5MIEYO4.js} +5 -5
  184. package/dist/parser-KMZIXLDZ.js +13 -0
  185. package/dist/{parser-HYRTF3DO.js → parser-LJHXWSXU.js} +3 -3
  186. package/dist/{parser-KCR2WS3V.js → parser-PT3W72G5.js} +4 -4
  187. package/dist/{parser-CVMEDULU.js → parser-SBJQDPHL.js} +4 -4
  188. package/dist/{parser-RZPVAQVX.js → parser-SUWWWCMX.js} +4 -3
  189. package/dist/{parser-TXND652E.js → parser-SXDRNZOA.js} +4 -4
  190. package/dist/parser-UMILOW3M.js +14 -0
  191. package/dist/{parser-RV4M6AS2.js → parser-UP3AZ367.js} +4 -4
  192. package/dist/{parser-IJBMRXMC.js → parser-WHPRV3X5.js} +5 -5
  193. package/dist/{parser-MPCE5JBG.js → parser-WX3UODSJ.js} +4 -4
  194. package/dist/{parser-K3XXLMUW.js → parser-XCIEN3KN.js} +4 -4
  195. package/dist/{parser-AXKBDGNO.js → parser-XIRTUMVN.js} +5 -5
  196. package/dist/{parser-B5FVS7O6.js → parser-YKCGIG45.js} +3 -3
  197. package/dist/{parser-PSA4UBSP.js → parser-YKYMQG3B.js} +4 -4
  198. package/dist/{parser-MTOMTWTD.js → parser-ZGM2OJ6Y.js} +6 -5
  199. package/dist/{parser-CSFUN3CT.js → parser-ZL5QUFVH.js} +5 -4
  200. package/dist/pert.d.ts +2 -2
  201. package/dist/{renderer-PPIHO5FI.js → renderer-3F7OS2AX.js} +14 -13
  202. package/dist/{renderer-SBS3YWU5.js → renderer-4QB4K7Q3.js} +9 -9
  203. package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
  204. package/dist/{renderer-R2WNIC2C.js → renderer-5H4SY7YY.js} +9 -9
  205. package/dist/{renderer-DAXMXIKD.js → renderer-5PIQPFOX.js} +5 -4
  206. package/dist/{renderer-45PSOL3E.js → renderer-6MU37QF5.js} +6 -6
  207. package/dist/renderer-AQVMWJ4M.js +27 -0
  208. package/dist/{renderer-A5VE5BCI.js → renderer-BDDW6K7N.js} +9 -9
  209. package/dist/{renderer-AUW2BE6G.js → renderer-BNB3VIDY.js} +10 -10
  210. package/dist/{renderer-4ITCHBT7.js → renderer-CQY6ATOS.js} +6 -6
  211. package/dist/{renderer-6OKF44KS.js → renderer-CVW75CXL.js} +15 -15
  212. package/dist/{renderer-7RH2SI3B.js → renderer-DT4XRFEP.js} +5 -4
  213. package/dist/{renderer-B5TBNZJE.js → renderer-ERHBSTQT.js} +9 -9
  214. package/dist/{renderer-HVCU2C3Z.js → renderer-HSHHVYWF.js} +5 -4
  215. package/dist/renderer-IDPVUFNB.js +28 -0
  216. package/dist/renderer-ILX6BGKR.js +21 -0
  217. package/dist/renderer-JP663HKG.js +22 -0
  218. package/dist/{renderer-KS7YZJE2.js → renderer-KNFTTOBL.js} +11 -11
  219. package/dist/{renderer-2AZ5HJFK.js → renderer-MVUZBESR.js} +5 -5
  220. package/dist/{renderer-QAOBLRXV.js → renderer-N4EBR2FV.js} +11 -11
  221. package/dist/{renderer-P5ROYQGU.js → renderer-NHO46CT2.js} +4 -4
  222. package/dist/{renderer-NGXZTRK6.js → renderer-NO2QJ5LZ.js} +10 -10
  223. package/dist/{renderer-FPE3J5VZ.js → renderer-OGFV5RXX.js} +12 -12
  224. package/dist/{renderer-ODUUOPVT.js → renderer-PDLESJMS.js} +15 -15
  225. package/dist/renderer-T4MTNINC.js +24 -0
  226. package/dist/renderer-TOUGFGTM.js +24 -0
  227. package/dist/{renderer-BSR2O2H6.js → renderer-U3KPD43Y.js} +14 -13
  228. package/dist/{renderer-JCCHNECZ.js → renderer-X334IJU2.js} +10 -10
  229. package/dist/{renderer-5DSEWF74.js → renderer-Y5OAMOCR.js} +9 -9
  230. package/dist/{renderer-5KVCNMOJ.js → renderer-YONAKAJU.js} +5 -3
  231. package/dist/{renderer-7SD6MSBS.js → renderer-YWMI6Y2U.js} +12 -12
  232. package/dist/{renderer-2QPMJ2DA.js → renderer-ZWIH4WDW.js} +10 -10
  233. package/dist/renderer-radial-7CGZMVMS.js +21 -0
  234. package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
  235. package/dist/{state-parser-3REXRK3R.js → state-parser-BATWAID2.js} +4 -4
  236. package/dist/{state-renderer-XYLNRWXR.js → state-renderer-3FKZJ3LP.js} +10 -10
  237. package/dist/{themes-PdPR1-hC.d.ts → themes-32xj5ZTW.d.ts} +27 -0
  238. package/docs/ai-integration.md +15 -19
  239. package/docs/language-reference.md +106 -21
  240. package/gallery/fixtures/clock.dgmo +3 -3
  241. package/gallery/fixtures/countdown-tz.dgmo +5 -0
  242. package/package.json +1 -1
  243. package/dist/charts-d3-MUW3LTML.js +0 -26
  244. package/dist/dgmo-router-CE2G67FV.js +0 -84
  245. package/dist/dimensions-OTBKC5M6.js +0 -22
  246. package/dist/layout-6RDJHS6E.js +0 -9
  247. package/dist/layout-J36454XU.js +0 -14
  248. package/dist/layout-LD6XTLD6.js +0 -14
  249. package/dist/parser-4WQQQXCG.js +0 -13
  250. package/dist/parser-O4HIUN6G.js +0 -13
  251. package/dist/renderer-CYB4LK3G.js +0 -22
  252. package/dist/renderer-FF24KZCI.js +0 -24
  253. package/dist/renderer-FYSVXL7M.js +0 -28
  254. package/dist/renderer-HDCCZURL.js +0 -24
  255. package/dist/renderer-PSMMZCKH.js +0 -21
  256. package/dist/renderer-UYMQQCJK.js +0 -24
  257. package/dist/renderer-radial-F7X5F2VU.js +0 -21
@@ -0,0 +1,283 @@
1
+ // src/utils/date.ts
2
+ var MONTHS_FULL = [
3
+ "january",
4
+ "february",
5
+ "march",
6
+ "april",
7
+ "may",
8
+ "june",
9
+ "july",
10
+ "august",
11
+ "september",
12
+ "october",
13
+ "november",
14
+ "december"
15
+ ];
16
+ var MONTHS_ABBR = [
17
+ "jan",
18
+ "feb",
19
+ "mar",
20
+ "apr",
21
+ "may",
22
+ "jun",
23
+ "jul",
24
+ "aug",
25
+ "sep",
26
+ "oct",
27
+ "nov",
28
+ "dec"
29
+ ];
30
+ function monthNameToNum(raw) {
31
+ const t = raw.toLowerCase().replace(/\.$/, "");
32
+ let i = MONTHS_FULL.indexOf(t);
33
+ if (i >= 0) return i + 1;
34
+ i = MONTHS_ABBR.indexOf(t.slice(0, 3));
35
+ return i >= 0 ? i + 1 : 0;
36
+ }
37
+ var MONTH_NAME_SCAN_RE = /\b(\d{1,2})\s+([A-Za-z]{3,9})\.?(?:\s+\d{4})?|\b([A-Za-z]{3,9})\.?\s+(\d{1,2})(?:,?\s+\d{4})?/g;
38
+ function scanMonthNameDates(line) {
39
+ const spans = [];
40
+ const re = new RegExp(MONTH_NAME_SCAN_RE.source, "g");
41
+ let m;
42
+ while ((m = re.exec(line)) !== null) {
43
+ const month = m[2] ?? m[3] ?? "";
44
+ if (monthNameToNum(month) <= 0) {
45
+ re.lastIndex = m.index + 1;
46
+ continue;
47
+ }
48
+ spans.push({ start: m.index, end: m.index + m[0].length });
49
+ }
50
+ return spans;
51
+ }
52
+ var ERA_RE = /^(\d{1,4})(?:-(\d{2})(?:-(\d{2}))?)?\s+(BCE|BC|CE|AD)\b/i;
53
+ var ISO_RE = /^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?/;
54
+ var MONTH_D_RE = /^([A-Za-z]{3,9})\.?\s+(\d{1,2})(?:,?\s+(\d{4}))?/;
55
+ var D_MONTH_RE = /^(\d{1,2})\s+([A-Za-z]{3,9})\.?(?:\s+(\d{4}))?/;
56
+ var SLASH_RE = /^(\d{1,2})[/-](\d{1,2})(?:[/-](\d{2,4}))?/;
57
+ var TIME_RE = /^[T ](\d{1,2}):(\d{2})(?::(\d{2}))?/;
58
+ function matchTime(rest) {
59
+ const m = rest.match(TIME_RE);
60
+ if (!m) return { hour: 0, minute: 0, second: 0, hasTime: false, consumed: 0 };
61
+ const hour = parseInt(m[1], 10);
62
+ const minute = parseInt(m[2], 10);
63
+ const second = m[3] !== void 0 ? parseInt(m[3], 10) : 0;
64
+ const ok = hour <= 23 && minute <= 59 && second <= 59;
65
+ return {
66
+ hour,
67
+ minute,
68
+ second,
69
+ hasTime: true,
70
+ consumed: m[0].length,
71
+ invalid: ok ? void 0 : m[0].trim()
72
+ };
73
+ }
74
+ function dayToken(year, month, day, sign = 1) {
75
+ return {
76
+ sign,
77
+ year,
78
+ month,
79
+ day,
80
+ hour: 0,
81
+ minute: 0,
82
+ second: 0,
83
+ grain: 3,
84
+ hasTime: false,
85
+ invalidTime: void 0
86
+ };
87
+ }
88
+ function parseDateToken(input, opts = {}) {
89
+ const order = opts.dateOrder ?? "mdy";
90
+ const era = input.match(ERA_RE);
91
+ if (era) {
92
+ const marker = era[4].toUpperCase();
93
+ const sign = marker === "BCE" || marker === "BC" ? -1 : 1;
94
+ const grain = era[3] ? 3 : era[2] ? 2 : 1;
95
+ return {
96
+ token: {
97
+ sign,
98
+ year: parseInt(era[1], 10),
99
+ month: era[2] ? parseInt(era[2], 10) : 1,
100
+ day: era[3] ? parseInt(era[3], 10) : 1,
101
+ hour: 0,
102
+ minute: 0,
103
+ second: 0,
104
+ grain,
105
+ hasTime: false
106
+ },
107
+ consumed: era[0].length
108
+ };
109
+ }
110
+ const iso = input.match(ISO_RE);
111
+ if (iso) {
112
+ const grain = iso[3] ? 3 : iso[2] ? 2 : 1;
113
+ let consumed = iso[0].length;
114
+ let time = {
115
+ hour: 0,
116
+ minute: 0,
117
+ second: 0,
118
+ hasTime: false,
119
+ consumed: 0
120
+ };
121
+ if (grain === 3) {
122
+ time = matchTime(input.slice(consumed));
123
+ consumed += time.consumed;
124
+ }
125
+ return {
126
+ token: {
127
+ sign: 1,
128
+ year: parseInt(iso[1], 10),
129
+ month: iso[2] ? parseInt(iso[2], 10) : 1,
130
+ day: iso[3] ? parseInt(iso[3], 10) : 1,
131
+ hour: time.hour,
132
+ minute: time.minute,
133
+ second: time.second,
134
+ grain,
135
+ hasTime: time.hasTime,
136
+ invalidTime: time.invalid
137
+ },
138
+ consumed
139
+ };
140
+ }
141
+ const md = input.match(MONTH_D_RE);
142
+ if (md && monthNameToNum(md[1]) > 0) {
143
+ const mo = monthNameToNum(md[1]);
144
+ const day = parseInt(md[2], 10);
145
+ const year = md[3] ? parseInt(md[3], 10) : null;
146
+ const tok = dayToken(year, mo, day);
147
+ const time = matchTime(input.slice(md[0].length));
148
+ tok.hour = time.hour;
149
+ tok.minute = time.minute;
150
+ tok.second = time.second;
151
+ tok.hasTime = time.hasTime;
152
+ tok.invalidTime = time.invalid;
153
+ return { token: tok, consumed: md[0].length + time.consumed };
154
+ }
155
+ const dm = input.match(D_MONTH_RE);
156
+ if (dm && monthNameToNum(dm[2]) > 0) {
157
+ const mo = monthNameToNum(dm[2]);
158
+ const day = parseInt(dm[1], 10);
159
+ const year = dm[3] ? parseInt(dm[3], 10) : null;
160
+ const tok = dayToken(year, mo, day);
161
+ const time = matchTime(input.slice(dm[0].length));
162
+ tok.hour = time.hour;
163
+ tok.minute = time.minute;
164
+ tok.second = time.second;
165
+ tok.hasTime = time.hasTime;
166
+ tok.invalidTime = time.invalid;
167
+ return { token: tok, consumed: dm[0].length + time.consumed };
168
+ }
169
+ const sl = input.match(SLASH_RE);
170
+ if (sl) {
171
+ const a = parseInt(sl[1], 10);
172
+ const b = parseInt(sl[2], 10);
173
+ let year = null;
174
+ if (sl[3]) {
175
+ year = parseInt(sl[3], 10);
176
+ if (sl[3].length === 2) year += 2e3;
177
+ }
178
+ let month;
179
+ let day;
180
+ if (a > 12 && b <= 12) {
181
+ day = a;
182
+ month = b;
183
+ } else if (b > 12 && a <= 12) {
184
+ month = a;
185
+ day = b;
186
+ } else if (order === "dmy") {
187
+ day = a;
188
+ month = b;
189
+ } else {
190
+ month = a;
191
+ day = b;
192
+ }
193
+ if (month < 1 || month > 12 || day < 1 || day > 31) return null;
194
+ const tok = dayToken(year, month, day);
195
+ const time = matchTime(input.slice(sl[0].length));
196
+ tok.hour = time.hour;
197
+ tok.minute = time.minute;
198
+ tok.second = time.second;
199
+ tok.hasTime = time.hasTime;
200
+ tok.invalidTime = time.invalid;
201
+ return { token: tok, consumed: sl[0].length + time.consumed };
202
+ }
203
+ return null;
204
+ }
205
+ function toInternal(token, resolvedYear) {
206
+ const y = token.year ?? resolvedYear;
207
+ const neg = token.sign < 0 ? "-" : "";
208
+ const yStr = String(y);
209
+ if (token.grain === 1) return `${neg}${yStr}`;
210
+ const mm = String(token.month).padStart(2, "0");
211
+ if (token.grain === 2) return `${neg}${yStr}-${mm}`;
212
+ const dd = String(token.day).padStart(2, "0");
213
+ let out = `${neg}${yStr}-${mm}-${dd}`;
214
+ if (token.hasTime) {
215
+ const hh = String(token.hour).padStart(2, "0");
216
+ const mi = String(token.minute).padStart(2, "0");
217
+ out += ` ${hh}:${mi}`;
218
+ if (token.second) out += `:${String(token.second).padStart(2, "0")}`;
219
+ }
220
+ return out;
221
+ }
222
+ function cmp(y, m, d, p) {
223
+ if (y !== p.y) return y - p.y;
224
+ if (m !== p.m) return m - p.m;
225
+ return d - p.d;
226
+ }
227
+ function resolveTokenYear(token, ctx) {
228
+ if (token.year != null) {
229
+ const signed = token.sign * token.year;
230
+ ctx.contextYear = signed;
231
+ ctx.prev = { y: signed, m: token.month, d: token.day };
232
+ return { internal: toInternal(token, token.year) };
233
+ }
234
+ let hint;
235
+ let error;
236
+ let y;
237
+ if (ctx.contextYear != null) {
238
+ y = ctx.contextYear;
239
+ } else if (ctx.noCurrentYear) {
240
+ error = "Date has no year and none can be derived. Add a full date, a `year 20XX` directive, or remove `no-current-year`.";
241
+ y = ctx.currentYear;
242
+ } else {
243
+ y = ctx.currentYear;
244
+ hint = "Date has no year; assuming the current year. Add `year 20XX` to make this diagram reproducible.";
245
+ }
246
+ if (ctx.prev && cmp(y, token.month, token.day, ctx.prev) < 0) {
247
+ y += 1;
248
+ }
249
+ ctx.contextYear = y;
250
+ ctx.prev = { y, m: token.month, d: token.day };
251
+ return { internal: toInternal(token, y), hint, error };
252
+ }
253
+ function makeYearContext(opts) {
254
+ const directiveYear = opts.directiveYear ?? null;
255
+ const seed = directiveYear ?? opts.prescanYear ?? null;
256
+ return {
257
+ order: opts.order ?? "mdy",
258
+ directiveYear,
259
+ currentYear: opts.currentYear ?? (/* @__PURE__ */ new Date()).getFullYear(),
260
+ noCurrentYear: opts.noCurrentYear ?? false,
261
+ contextYear: seed,
262
+ prev: null
263
+ };
264
+ }
265
+ function normalizeDate(raw, opts = {}) {
266
+ const s = raw.trim();
267
+ const res = parseDateToken(s, { dateOrder: opts.order });
268
+ if (!res) return null;
269
+ if (res.consumed !== s.length) return null;
270
+ if (res.token.invalidTime) return null;
271
+ const year = res.token.year ?? opts.year ?? opts.currentYear ?? (/* @__PURE__ */ new Date()).getFullYear();
272
+ return toInternal(res.token, year);
273
+ }
274
+
275
+ export {
276
+ scanMonthNameDates,
277
+ parseDateToken,
278
+ toInternal,
279
+ resolveTokenYear,
280
+ makeYearContext,
281
+ normalizeDate
282
+ };
283
+ //# sourceMappingURL=chunk-DAOFNU6J.js.map
@@ -2,7 +2,7 @@ import {
2
2
  computeQuadrantPointLabels,
3
3
  rectCircleOverlap,
4
4
  rectsOverlap
5
- } from "./chunk-HGN652MU.js";
5
+ } from "./chunk-VL2O2F3W.js";
6
6
  import {
7
7
  EXPORT_HEIGHT,
8
8
  EXPORT_WIDTH,
@@ -11,10 +11,10 @@ import {
11
11
  initD3Chart,
12
12
  renderChartTitle,
13
13
  resolveExportPalette
14
- } from "./chunk-U6EQI3U6.js";
14
+ } from "./chunk-QBZYACOG.js";
15
15
  import {
16
16
  computeLegendLayout
17
- } from "./chunk-7UEMZREK.js";
17
+ } from "./chunk-YAA6IID3.js";
18
18
  import {
19
19
  FONT_FAMILY
20
20
  } from "./chunk-6KFWC4CO.js";
@@ -23,16 +23,16 @@ import {
23
23
  LEGEND_ENTRY_FONT_SIZE,
24
24
  LEGEND_HEIGHT,
25
25
  LEGEND_PILL_FONT_SIZE
26
- } from "./chunk-HQCHYB5F.js";
26
+ } from "./chunk-QOOUC2J5.js";
27
27
  import {
28
28
  measureText
29
- } from "./chunk-5LWQH6QV.js";
29
+ } from "./chunk-WCT3NYCV.js";
30
30
  import {
31
31
  getExtendedChartLegendGroups,
32
32
  getSimpleChartLegendGroups,
33
33
  parseChart,
34
34
  parseExtendedChart
35
- } from "./chunk-XEGTMVYY.js";
35
+ } from "./chunk-EMLPOL77.js";
36
36
  import {
37
37
  contrastText,
38
38
  getSegmentColors,
@@ -40,11 +40,12 @@ import {
40
40
  hexToHSL,
41
41
  hslToHex,
42
42
  mix,
43
- shapeFill
44
- } from "./chunk-P6T66CCZ.js";
43
+ shapeFill,
44
+ themeBaseBg
45
+ } from "./chunk-WBM7ZNDI.js";
45
46
  import {
46
47
  tagAttrKey
47
- } from "./chunk-FJUNPCYI.js";
48
+ } from "./chunk-HHKO6SKY.js";
48
49
 
49
50
  // src/utils/legend-svg.ts
50
51
  function esc(s) {
@@ -220,12 +221,12 @@ function renderBar(svg, chart, width, height, colors, palette, isDark, textColor
220
221
  ) : 1;
221
222
  const horizontal = chart.orientation === "horizontal";
222
223
  const multiSeries = seriesCount > 1;
223
- const solid = chart.solidFill === true;
224
+ const fillMode = chart.fillMode;
224
225
  const colorFor = (seriesIdx, catIdx, override) => {
225
226
  if (override) return override;
226
227
  return multiSeries ? colors[seriesIdx % colors.length] : colors[catIdx % colors.length];
227
228
  };
228
- const fillOf = (c) => solid ? c : shapeFill(palette, c, isDark);
229
+ const fillOf = (c) => shapeFill(palette, c, isDark, { mode: fillMode });
229
230
  const top = reserveHeader(
230
231
  svg,
231
232
  chart,
@@ -402,7 +403,7 @@ function seriesValue(pt, s) {
402
403
  function renderLine(svg, chart, width, height, colors, palette, isDark, textColor, mutedColor, bgColor, hasTitle) {
403
404
  const data = chart.data;
404
405
  const isArea = chart.fill === true;
405
- const solid = chart.solidFill === true;
406
+ const solid = chart.fillMode === "solid";
406
407
  const seriesNames = chart.seriesNames?.length ? chart.seriesNames : [chart.series ?? ""];
407
408
  const seriesCount = Math.max(
408
409
  1,
@@ -558,7 +559,7 @@ function renderPie(svg, chart, width, height, palette, isDark, textColor, topIns
558
559
  if (data.length === 0) return;
559
560
  const holeRatio = chart.hole;
560
561
  const hasHole = holeRatio !== void 0;
561
- const solid = chart.solidFill === true;
562
+ const fillMode = chart.fillMode;
562
563
  const total = data.reduce((a, d) => a + d.value, 0);
563
564
  const cx = width / 2;
564
565
  const top = topInset + 12;
@@ -593,7 +594,7 @@ function renderPie(svg, chart, width, height, palette, isDark, textColor, topIns
593
594
  const g = svg.append("g").attr("transform", `translate(${cx},${cy})`);
594
595
  arcs.forEach((a, i) => {
595
596
  const stroke = strokeFor(i, data[i].color);
596
- const fill = solid ? stroke : shapeFill(palette, stroke, isDark);
597
+ const fill = shapeFill(palette, stroke, isDark, { mode: fillMode });
597
598
  const pct = Math.round(data[i].value / total * 100);
598
599
  const slice = g.append("path").attr("d", arcGen(a) ?? "").attr("fill", fill).attr("stroke", stroke).attr("stroke-width", 1.5);
599
600
  tagDatum(slice, {
@@ -644,7 +645,8 @@ function renderRadar(svg, chart, width, height, colors, palette, isDark, textCol
644
645
  const data = chart.data;
645
646
  const n = data.length;
646
647
  if (n < 3) return;
647
- const solid = chart.solidFill === true;
648
+ const fillMode = chart.fillMode;
649
+ const solid = fillMode === "solid";
648
650
  const seriesNames = chart.seriesNames?.length ? chart.seriesNames : [chart.series ?? ""];
649
651
  const seriesCount = Math.max(
650
652
  1,
@@ -688,7 +690,10 @@ function renderRadar(svg, chart, width, height, colors, palette, isDark, textCol
688
690
  const seriesLine = chart.seriesNameLineNumbers?.[s];
689
691
  if (seriesLine !== void 0) g.attr("data-line-number", seriesLine);
690
692
  const poly = data.map((d, i) => pt(i, seriesValue2(d, s) / maxValue * radius).join(",")).join(" ");
691
- g.append("polygon").attr("points", poly).attr("fill", solid || multi ? color : shapeFill(palette, color, isDark)).attr("fill-opacity", solid ? 0.6 : multi ? 0.2 : 1).attr("stroke", color).attr("stroke-width", 2);
693
+ g.append("polygon").attr("points", poly).attr(
694
+ "fill",
695
+ fillMode === "outline" ? "none" : solid || multi ? color : shapeFill(palette, color, isDark)
696
+ ).attr("fill-opacity", solid ? 0.6 : multi ? 0.2 : 1).attr("stroke", color).attr("stroke-width", 2);
692
697
  data.forEach((d, i) => {
693
698
  const v = seriesValue2(d, s);
694
699
  const [x, y] = pt(i, v / maxValue * radius);
@@ -719,7 +724,7 @@ function renderPolarArea(svg, chart, width, height, palette, isDark, textColor,
719
724
  const data = chart.data.filter((d) => d.value > 0);
720
725
  const n = data.length;
721
726
  if (n === 0) return;
722
- const solid = chart.solidFill === true;
727
+ const fillMode = chart.fillMode;
723
728
  const total = data.reduce((a, d) => a + d.value, 0);
724
729
  const maxValue = Math.max(...data.map((d) => d.value)) || 1;
725
730
  const cx = width / 2;
@@ -737,7 +742,7 @@ function renderPolarArea(svg, chart, width, height, palette, isDark, textColor,
737
742
  const a1 = a0 + seg;
738
743
  const arcGen = d3arc2().innerRadius(innerR).outerRadius(r).startAngle(a0).endAngle(a1);
739
744
  const pct = Math.round(d.value / total * 100);
740
- const sector = g.append("path").attr("d", arcGen({}) ?? "").attr("fill", solid ? stroke : shapeFill(palette, stroke, isDark)).attr("stroke", stroke).attr("stroke-width", 2);
745
+ const sector = g.append("path").attr("d", arcGen({}) ?? "").attr("fill", shapeFill(palette, stroke, isDark, { mode: fillMode })).attr("stroke", stroke).attr("stroke-width", 2);
741
746
  tagDatum(sector, {
742
747
  line: d.lineNumber,
743
748
  key: d.label,
@@ -768,7 +773,7 @@ function renderFunnel(svg, chart, width, height, colors, palette, isDark, topIns
768
773
  const sorted = [...chart.data].sort((a, b) => b.value - a.value);
769
774
  const n = sorted.length;
770
775
  if (n === 0) return;
771
- const solid = chart.solidFill === true;
776
+ const fillMode = chart.fillMode;
772
777
  const top = topInset + 8;
773
778
  const bottom = height - 30;
774
779
  const H = bottom - top;
@@ -826,7 +831,7 @@ function renderFunnel(svg, chart, width, height, colors, palette, isDark, topIns
826
831
  ({ plotW, cx } = layout(rightW));
827
832
  sorted.forEach((d, i) => {
828
833
  const stroke = d.color ?? colors[chart.data.indexOf(d) % colors.length];
829
- const fill = solid ? stroke : shapeFill(palette, stroke, isDark);
834
+ const fill = shapeFill(palette, stroke, isDark, { mode: fillMode });
830
835
  const { topW, botW } = bandWidthsAt(plotW, i);
831
836
  const y0 = top + i * bandH;
832
837
  const y1 = y0 + bandH;
@@ -850,7 +855,7 @@ function renderFunnel(svg, chart, width, height, colors, palette, isDark, topIns
850
855
  const valueInside = valueInsideAt(plotW, i);
851
856
  if (valueInside) {
852
857
  const valueSize = valueSizeAt(plotW, i);
853
- const valueFill = solid ? contrastText(fill, palette.textOnFillLight, palette.textOnFillDark) : stroke;
858
+ const valueFill = fillMode === "solid" ? contrastText(fill, palette.textOnFillLight, palette.textOnFillDark) : stroke;
854
859
  svg.append("text").attr("x", cx).attr("y", yMid + valueSize * 0.35).attr("text-anchor", "middle").attr("fill", valueFill).attr("font-size", valueSize).attr("font-weight", 700).attr("font-family", FONT_FAMILY).text(fmtNum(d.value));
855
860
  }
856
861
  const showValueRight = !chart.noValue && !valueInside;
@@ -883,12 +888,14 @@ function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bg
883
888
  minValue = Math.min(minValue, v);
884
889
  maxValue = Math.max(maxValue, v);
885
890
  }
886
- const solid = chart.solidFill === true;
891
+ const outline = chart.fillMode === "outline";
892
+ const fillMode = outline || chart.fillMode === "solid" ? "solid" : void 0;
893
+ const baseBg = themeBaseBg(palette, isDark);
887
894
  const gradientStops = [
888
- shapeFill(palette, palette.primary, isDark, { solid }),
889
- shapeFill(palette, palette.colors.cyan, isDark, { solid }),
890
- shapeFill(palette, palette.colors.yellow, isDark, { solid }),
891
- shapeFill(palette, palette.colors.orange, isDark, { solid })
895
+ shapeFill(palette, palette.primary, isDark, { mode: fillMode }),
896
+ shapeFill(palette, palette.colors.cyan, isDark, { mode: fillMode }),
897
+ shapeFill(palette, palette.colors.yellow, isDark, { mode: fillMode }),
898
+ shapeFill(palette, palette.colors.orange, isDark, { mode: fillMode })
892
899
  ];
893
900
  const gradientAt = (t) => {
894
901
  const tt = Math.max(0, Math.min(1, t));
@@ -938,25 +945,26 @@ function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bg
938
945
  svg.append("text").attr("class", "dgmo-axis-label").attr("data-filter-attr", "data-row-key").attr("data-filter-value", row.label).attr("x", left - 10).attr("y", top + ri * ch + ch / 2 + 4).attr("text-anchor", "end").attr("fill", textColor).attr("font-size", 13).attr("font-family", FONT_FAMILY).text(row.label);
939
946
  row.values.forEach((v, ci) => {
940
947
  const t = maxValue === minValue ? 0.5 : (v - minValue) / (maxValue - minValue);
941
- const cell = gradientAt(t);
948
+ const ramp = gradientAt(t);
949
+ const cell = outline ? baseBg : ramp;
942
950
  const colLabel = cols[ci] ?? `Col ${ci + 1}`;
943
951
  const cellKey = `${row.label} \xB7 ${colLabel}`;
944
- const r = svg.append("rect").attr("x", left + ci * cw).attr("y", top + ri * ch).attr("width", cw).attr("height", ch).attr("fill", cell).attr("stroke", bgColor).attr("stroke-width", 2).attr("data-row-key", row.label).attr("data-col-key", colLabel);
952
+ const r = svg.append("rect").attr("x", left + ci * cw).attr("y", top + ri * ch).attr("width", cw).attr("height", ch).attr("fill", cell).attr("stroke", outline ? ramp : bgColor).attr("stroke-width", outline ? 1.5 : 2).attr("data-row-key", row.label).attr("data-col-key", colLabel);
945
953
  tagDatum(r, {
946
954
  line: row.lineNumber,
947
955
  key: cellKey,
948
956
  name: cellKey,
949
957
  value: fmtNum(v),
950
- color: cell
958
+ color: ramp
951
959
  });
952
960
  if (!chart.noValue) {
953
- const label = svg.append("text").attr("x", left + ci * cw + cw / 2).attr("y", top + ri * ch + ch / 2 + cellFont / 3).attr("text-anchor", "middle").attr("fill", labelTint(cell)).attr("font-size", cellFont).attr("font-weight", 600).attr("font-family", FONT_FAMILY).text(fmtNum(v));
961
+ const label = svg.append("text").attr("x", left + ci * cw + cw / 2).attr("y", top + ri * ch + ch / 2 + cellFont / 3).attr("text-anchor", "middle").attr("fill", labelTint(ramp)).attr("font-size", cellFont).attr("font-weight", 600).attr("font-family", FONT_FAMILY).text(fmtNum(v));
954
962
  tagDatum(label, {
955
963
  line: row.lineNumber,
956
964
  key: cellKey,
957
965
  name: cellKey,
958
966
  value: fmtNum(v),
959
- color: cell
967
+ color: ramp
960
968
  });
961
969
  label.attr("data-row-key", row.label).attr("data-col-key", colLabel);
962
970
  }
@@ -1029,7 +1037,7 @@ function placeScatterHoverValue(cx, cy, r, labelText, valueText, labelRects, cir
1029
1037
  function renderScatter(svg, chart, width, height, colors, palette, isDark, textColor, mutedColor, topInset) {
1030
1038
  const points = chart.scatterPoints ?? [];
1031
1039
  if (points.length === 0) return;
1032
- const solid = chart.solidFill === true;
1040
+ const fillMode = chart.fillMode;
1033
1041
  const hasSize = points.some((p) => p.size !== void 0);
1034
1042
  const categories = [
1035
1043
  ...new Set(points.map((p) => p.category).filter(Boolean))
@@ -1111,7 +1119,7 @@ function renderScatter(svg, chart, width, height, colors, palette, isDark, textC
1111
1119
  points.forEach((p, i) => {
1112
1120
  const stroke = p.color ?? (p.category ? catColor(p.category, catIndex.get(p.category) ?? 0) : colors[i % colors.length]);
1113
1121
  const r = radii[i];
1114
- const dot = svg.append("circle").attr("cx", x(p.x)).attr("cy", y(p.y)).attr("r", r).attr("fill", solid ? stroke : shapeFill(palette, stroke, isDark)).attr("fill-opacity", FILL_OPACITY).attr("stroke", stroke).attr("stroke-width", 2);
1122
+ const dot = svg.append("circle").attr("cx", x(p.x)).attr("cy", y(p.y)).attr("r", r).attr("fill", shapeFill(palette, stroke, isDark, { mode: fillMode })).attr("fill-opacity", FILL_OPACITY).attr("stroke", stroke).attr("stroke-width", 2);
1115
1123
  tagDatum(dot, {
1116
1124
  line: p.lineNumber,
1117
1125
  key: p.name,
@@ -1162,7 +1170,7 @@ var NODE_GAP = 14;
1162
1170
  function renderSankey(svg, chart, width, height, colors, bgColor, textColor, topInset) {
1163
1171
  const links = chart.links ?? [];
1164
1172
  if (links.length === 0) return;
1165
- const solid = chart.solidFill === true;
1173
+ const solid = chart.fillMode === "solid";
1166
1174
  const names = Array.from(new Set(links.flatMap((l) => [l.source, l.target])));
1167
1175
  const node = /* @__PURE__ */ new Map();
1168
1176
  names.forEach(
@@ -1264,7 +1272,9 @@ function renderSankey(svg, chart, width, height, colors, bgColor, textColor, top
1264
1272
  ).attr("fill", color).attr("fill-opacity", 0.6);
1265
1273
  tagDatum(ribbon, {
1266
1274
  line: l.lineNumber,
1267
- key: `link:${s.name}\0${t.name}`,
1275
+ // U+241F (symbol-for-unit-separator) — collision-proof AND XML-legal;
1276
+ // a raw control char here corrupts the exported SVG (data-emph-key).
1277
+ key: `link:${s.name}\u241F${t.name}`,
1268
1278
  name: `${s.name} \u2192 ${t.name}`,
1269
1279
  value: String(l.value),
1270
1280
  color: s.raw
@@ -1291,7 +1301,7 @@ function renderSankey(svg, chart, width, height, colors, bgColor, textColor, top
1291
1301
  function renderChord(svg, chart, width, height, colors, palette, isDark, textColor, topInset) {
1292
1302
  const links = chart.links ?? [];
1293
1303
  if (links.length === 0) return;
1294
- const solid = chart.solidFill === true;
1304
+ const fillMode = chart.fillMode;
1295
1305
  const names = Array.from(new Set(links.flatMap((l) => [l.source, l.target])));
1296
1306
  const n = names.length;
1297
1307
  const idx = new Map(names.map((nm, i) => [nm, i]));
@@ -1351,7 +1361,7 @@ function renderChord(svg, chart, width, height, colors, palette, isDark, textCol
1351
1361
  names.forEach((nm, i) => {
1352
1362
  const [px, py] = pos(i);
1353
1363
  const stroke = colorOf(i);
1354
- const dot = svg.append("circle").attr("cx", px).attr("cy", py).attr("r", 10).attr("fill", solid ? stroke : shapeFill(palette, stroke, isDark)).attr("stroke", stroke).attr("stroke-width", 2);
1364
+ const dot = svg.append("circle").attr("cx", px).attr("cy", py).attr("r", 10).attr("fill", shapeFill(palette, stroke, isDark, { mode: fillMode })).attr("stroke", stroke).attr("stroke-width", 2);
1355
1365
  tagDatum(dot, { key: `node:${nm}`, name: nm, color: stroke });
1356
1366
  const c = Math.cos(angle(i));
1357
1367
  const lx = px + c * 16;
@@ -1701,4 +1711,4 @@ export {
1701
1711
  supportsD3DataChart,
1702
1712
  renderDataChartD3
1703
1713
  };
1704
- //# sourceMappingURL=chunk-QJJZSROI.js.map
1714
+ //# sourceMappingURL=chunk-DYWQFQJP.js.map
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  collectIndentedValues,
3
3
  extractColor,
4
+ fillModeFromToken,
4
5
  measureIndent,
5
6
  normalizeNumericToken,
6
7
  parseFirstLine,
7
8
  parseSeriesNames
8
- } from "./chunk-OTAL43EH.js";
9
+ } from "./chunk-BRENJ2BQ.js";
9
10
  import {
10
11
  RECOGNIZED_COLOR_NAMES,
11
12
  resolveColorWithDiagnostic
@@ -43,7 +44,9 @@ var KNOWN_OPTIONS = /* @__PURE__ */ new Set([
43
44
  var DEFAULT_HOLE = 0.6;
44
45
  var KNOWN_BOOLEANS = /* @__PURE__ */ new Set([
45
46
  "orientation-horizontal",
46
- "solid-fill",
47
+ "fill-tint",
48
+ "fill-solid",
49
+ "fill-outline",
47
50
  "no-title",
48
51
  "no-auto-y",
49
52
  "fill",
@@ -173,8 +176,10 @@ function parseChart(content, palette) {
173
176
  if (KNOWN_BOOLEANS.has(firstToken) && spaceIdx < 0) {
174
177
  if (firstToken === "orientation-horizontal") {
175
178
  result.orientation = "horizontal";
176
- } else if (firstToken === "solid-fill") {
177
- result.solidFill = true;
179
+ } else if (fillModeFromToken(firstToken) !== null) {
180
+ const fm = fillModeFromToken(firstToken);
181
+ if (fm === "tint") delete result.fillMode;
182
+ else result.fillMode = fm;
178
183
  } else if (firstToken === "no-title") {
179
184
  result.noTitle = true;
180
185
  } else if (firstToken === "no-auto-y") {
@@ -708,7 +713,7 @@ function parseExtendedChartFull(content, palette) {
708
713
  const spaceIdx2 = trimmed.indexOf(" ");
709
714
  const lastTok = trimmed.substring(trimmed.lastIndexOf(" ") + 1);
710
715
  const hasNumericSuffix = spaceIdx2 >= 0 && !isNaN(parseFloat(normalizeNumericToken(lastTok) ?? lastTok));
711
- const isBareKeywordOption = spaceIdx2 < 0 && /^(solid-fill|no-name|no-value|no-percent|shade|no-title)$/i.test(
716
+ const isBareKeywordOption = spaceIdx2 < 0 && /^(fill-tint|fill-solid|fill-outline|no-name|no-value|no-percent|shade|no-title)$/i.test(
712
717
  trimmed
713
718
  );
714
719
  const isLayoutDirective = spaceIdx2 >= 0 && trimmed.substring(0, spaceIdx2).toLowerCase() === "layout";
@@ -839,8 +844,10 @@ function parseExtendedChartFull(content, palette) {
839
844
  result.shade = true;
840
845
  continue;
841
846
  }
842
- if (firstToken === "solid-fill") {
843
- result.solidFill = true;
847
+ const fillFamily = fillModeFromToken(firstToken);
848
+ if (fillFamily !== null && spaceIdx < 0) {
849
+ if (fillFamily === "tint") delete result.fillMode;
850
+ else result.fillMode = fillFamily;
844
851
  continue;
845
852
  }
846
853
  if (firstToken === "no-title" && spaceIdx < 0) {
@@ -1057,4 +1064,4 @@ export {
1057
1064
  getSimpleChartLegendGroups,
1058
1065
  getExtendedChartLegendGroups
1059
1066
  };
1060
- //# sourceMappingURL=chunk-XEGTMVYY.js.map
1067
+ //# sourceMappingURL=chunk-EMLPOL77.js.map