@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.
- package/.cursorrules +15 -19
- package/.github/copilot-instructions.md +15 -19
- package/.windsurfrules +15 -19
- package/SKILL.md +15 -19
- package/dist/advanced.d.ts +155 -65
- package/dist/advanced.js +231 -189
- package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
- package/dist/auto.css +31 -8
- package/dist/auto.d.ts +6 -0
- package/dist/auto.js +171 -133
- package/dist/auto.mjs +3062 -1478
- package/dist/block.css +28 -8
- package/dist/block.js +138 -72
- package/dist/charts-d3-MXEP6BNP.js +26 -0
- package/dist/{chunk-3YPY3OXD.js → chunk-3HF5YEFJ.js} +17 -7
- package/dist/{chunk-4MJ7M6YL.js → chunk-3HGU63UY.js} +14 -13
- package/dist/chunk-3LK5DNED.js +35 -0
- package/dist/{chunk-3Y2DRD7S.js → chunk-3QD7VP3U.js} +9 -4
- package/dist/{chunk-6BFZKBGD.js → chunk-3YRPZ7ZZ.js} +2 -2
- package/dist/{chunk-WW32K72E.js → chunk-44VCIPHF.js} +25 -21
- package/dist/{chunk-TN35C5KM.js → chunk-4AQRFDXL.js} +2 -2
- package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
- package/dist/{chunk-PGEGPSCZ.js → chunk-4IHAV6O7.js} +2 -2
- package/dist/{chunk-7L3R6I3U.js → chunk-4UNQ6X24.js} +10 -7
- package/dist/{chunk-O7NUCTFU.js → chunk-4YFKQ5WT.js} +7 -4
- package/dist/{chunk-5WFIYXQ6.js → chunk-5223KXFD.js} +122 -242
- package/dist/{chunk-PFHVU7UA.js → chunk-5BHJZH62.js} +3 -3
- package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
- package/dist/{chunk-GKC3HILQ.js → chunk-5NGAO4QK.js} +27 -4
- package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
- package/dist/{chunk-DSWVNQVS.js → chunk-5RP7JRVP.js} +4 -59
- package/dist/{chunk-MCZ5LBZD.js → chunk-5SEVICBT.js} +8 -8
- package/dist/{chunk-GBE54KY6.js → chunk-6EJITS44.js} +8 -5
- package/dist/{chunk-BBGDM4NQ.js → chunk-6HQH6JZE.js} +35 -16
- package/dist/{chunk-66NVRO4K.js → chunk-6LBQ7ELG.js} +17 -18
- package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
- package/dist/{chunk-VBYSIOOY.js → chunk-75G3Q4DK.js} +3 -3
- package/dist/{chunk-3NODSS6A.js → chunk-77FGAVZC.js} +13 -10
- package/dist/{chunk-6IAA2QQ2.js → chunk-7BIZCTAX.js} +2 -2
- package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
- package/dist/{chunk-66RUL3XF.js → chunk-7KINELPI.js} +111 -49
- package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
- package/dist/{chunk-QJP6PG7F.js → chunk-7QE3XMRK.js} +19 -18
- package/dist/{chunk-P7CE7LXL.js → chunk-AAXZDUOV.js} +18 -17
- package/dist/{chunk-SXRTRMEE.js → chunk-AL672HNE.js} +3 -3
- package/dist/chunk-APKUAJ2L.js +220 -0
- package/dist/{chunk-SCHXJTZL.js → chunk-ARGMQ3H4.js} +2 -2
- package/dist/{chunk-HEVYAHLW.js → chunk-AUIM2NVH.js} +5 -5
- package/dist/{chunk-3LH5CLP4.js → chunk-BKVOYV6I.js} +143 -6
- package/dist/{chunk-RZ6YKEUJ.js → chunk-BPIZNB5O.js} +17 -15
- package/dist/{chunk-QROYX7TT.js → chunk-BPY242XU.js} +6 -4
- package/dist/{chunk-OTAL43EH.js → chunk-BRENJ2BQ.js} +39 -3
- package/dist/{chunk-FA6K3FWM.js → chunk-CCNDLW7Z.js} +44 -22
- package/dist/{chunk-2KGXHFYK.js → chunk-CIRFIL4M.js} +49 -29
- package/dist/chunk-DAOFNU6J.js +283 -0
- package/dist/{chunk-QJJZSROI.js → chunk-DYWQFQJP.js} +48 -38
- package/dist/{chunk-XEGTMVYY.js → chunk-EMLPOL77.js} +15 -8
- package/dist/{chunk-NWED7CYO.js → chunk-FHGVORFO.js} +29 -25
- package/dist/{chunk-U2HGPLZS.js → chunk-FQ7HTV52.js} +17 -2
- package/dist/{chunk-H73FP42Q.js → chunk-FQMUHRVC.js} +70 -31
- package/dist/{chunk-BTUTZMPT.js → chunk-FT3ZYWET.js} +108 -42
- package/dist/{chunk-T5SHNNGP.js → chunk-FUPF2UYQ.js} +92 -34
- package/dist/{chunk-3XPUDB7B.js → chunk-FY5MSZAP.js} +279 -39
- package/dist/{chunk-M5RXSRO2.js → chunk-GCYTI3DE.js} +42 -33
- package/dist/{chunk-DN66GPY5.js → chunk-GJFAMOGK.js} +24 -3
- package/dist/{chunk-F2L5GCQ4.js → chunk-GU46PPT3.js} +3 -3
- package/dist/{chunk-6IUAK7RZ.js → chunk-H6PI3KJT.js} +2 -2
- package/dist/{chunk-ONA5KPV3.js → chunk-H7KENAZO.js} +18 -14
- package/dist/{chunk-SQLNBA64.js → chunk-HBPDFCQY.js} +3 -3
- package/dist/{chunk-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
- package/dist/{chunk-FJUNPCYI.js → chunk-HHKO6SKY.js} +2 -2
- package/dist/{chunk-DZXYF2F5.js → chunk-HQQNCY7W.js} +21 -8
- package/dist/{chunk-7TV5Y53Y.js → chunk-HWX6ZHF3.js} +3 -3
- package/dist/{chunk-3P2DKJCG.js → chunk-ICPJPQ5C.js} +2 -2
- package/dist/{chunk-VUJGMJE6.js → chunk-IM6PDDCE.js} +4 -4
- package/dist/{chunk-JJUOHGX2.js → chunk-INE5YJBZ.js} +13 -8
- package/dist/{chunk-HTMN2Z6U.js → chunk-J6QROYDA.js} +58 -11
- package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
- package/dist/{chunk-SVTI362O.js → chunk-J7KJR3R6.js} +129 -109
- package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
- package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
- package/dist/{chunk-J6K7RP6P.js → chunk-JRCOYRRH.js} +19 -7
- package/dist/{chunk-7QKLIMRZ.js → chunk-K2I2XOZD.js} +46 -51
- package/dist/{chunk-EAMEADTV.js → chunk-K4EOKJA6.js} +96 -24
- package/dist/{chunk-5OWVC2A6.js → chunk-KGVZ5VGH.js} +13 -10
- package/dist/{chunk-DFTFPYUD.js → chunk-LBMS4AW6.js} +22 -21
- package/dist/{chunk-VVW3F3MD.js → chunk-LGT3PZCJ.js} +27 -19
- package/dist/{chunk-OMNGQPEZ.js → chunk-LTXOLDUZ.js} +9 -6
- package/dist/{chunk-Q4V4XQWV.js → chunk-MUE65OTD.js} +5 -4
- package/dist/{chunk-5GJYGP5Z.js → chunk-MUVJ57EP.js} +14 -18
- package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
- package/dist/{chunk-OTQKUHRS.js → chunk-NNS4E7CW.js} +6 -4
- package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
- package/dist/{chunk-KFZYNWWO.js → chunk-ONU3U4GL.js} +4 -4
- package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
- package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
- package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
- package/dist/{chunk-QXKWYZNR.js → chunk-PRI2OD4E.js} +10 -3
- package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
- package/dist/{chunk-C2CVAM3U.js → chunk-QGATPIPX.js} +170 -91
- package/dist/{chunk-PZFVK3IH.js → chunk-QHXCAEMX.js} +8 -5
- package/dist/{chunk-BH3UYK36.js → chunk-QJMKPUYK.js} +15 -5
- package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
- package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
- package/dist/{chunk-IUMPEA64.js → chunk-QZX5S6R3.js} +4 -4
- package/dist/{chunk-I7F2A35O.js → chunk-R3YSD62R.js} +25 -47
- package/dist/{chunk-NU3XLTGP.js → chunk-REJAIQ5S.js} +4 -4
- package/dist/{chunk-2C56LEML.js → chunk-ROOE4R4Y.js} +8 -5
- package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
- package/dist/{chunk-I2WKW7C7.js → chunk-SMRFPVLQ.js} +3 -3
- package/dist/{chunk-VDOOQZUD.js → chunk-SWSIKFEB.js} +4 -4
- package/dist/{chunk-HLJVEAOF.js → chunk-T4A4TSTJ.js} +19 -45
- package/dist/{chunk-KHEYDLMT.js → chunk-TJVLKNGR.js} +20 -10
- package/dist/{chunk-GL5UZ6NY.js → chunk-TPFKKXCB.js} +3 -3
- package/dist/{chunk-X6EZPSW6.js → chunk-TTIM6YTT.js} +31 -21
- package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
- package/dist/{chunk-T4VOVZT5.js → chunk-UBLHQTLV.js} +15 -14
- package/dist/{chunk-3LKM6FMW.js → chunk-UNURMIQO.js} +2 -2
- package/dist/{chunk-TSA237IM.js → chunk-VILVLS7P.js} +5 -3
- package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
- package/dist/{chunk-3XGZF2QJ.js → chunk-VQOCMUWI.js} +39 -28
- package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
- package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
- package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
- package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
- package/dist/{chunk-6HJBFVLO.js → chunk-XD6ZYURY.js} +9 -4
- package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
- package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
- package/dist/{chunk-F7BFXWNQ.js → chunk-YIBAWQGJ.js} +7 -4
- package/dist/{chunk-PH5X4GIP.js → chunk-YTMTPUH4.js} +8 -5
- package/dist/{chunk-3UIKSPFB.js → chunk-Z5QVYKR7.js} +11 -3
- package/dist/{chunk-KQ57MHRO.js → chunk-ZEF5M5MB.js} +155 -87
- package/dist/{chunk-LE4MYMLI.js → chunk-ZJV7GYR4.js} +6 -6
- package/dist/{chunk-XJLKLU4D.js → chunk-ZNWAYU6N.js} +11 -7
- package/dist/cli.cjs +165 -148
- package/dist/clock.js +105 -25
- package/dist/countdown.js +208 -82
- package/dist/dgmo-router-X7ZGAPIE.js +86 -0
- package/dist/dimensions-45H6JQEY.js +22 -0
- package/dist/editor.js +17 -2
- package/dist/element.d.ts +6 -0
- package/dist/element.js +172 -134
- package/dist/element.mjs +3026 -1463
- package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-UKELHBSB.js} +4 -4
- package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-MNCDS7MV.js} +10 -10
- package/dist/highlight.d.ts +21 -1
- package/dist/highlight.js +106 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +59 -57
- package/dist/{layout-FWODLIMP.js → layout-2L3WMRYU.js} +6 -6
- package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
- package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
- package/dist/layout-A4XWNVID.js +14 -0
- package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
- package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
- package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
- package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
- package/dist/layout-G23F7LDH.js +9 -0
- package/dist/{layout-QNUQLEHU.js → layout-GM4UGR7B.js} +5 -4
- package/dist/{layout-7MZ5NF2N.js → layout-GQQJXNYH.js} +5 -5
- package/dist/{layout-5BG6DFCU.js → layout-IIE2S5FK.js} +6 -6
- package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
- package/dist/layout-VMCRX66I.js +14 -0
- package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
- package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
- package/dist/map-data/gazetteer.json +1 -1
- package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
- package/dist/{parser-D5VILGN2.js → parser-2ECN6JA2.js} +4 -4
- package/dist/{parser-LWKKBNSA.js → parser-4WTIHM5J.js} +3 -3
- package/dist/{parser-DFFEDKHH.js → parser-5H2BTSJQ.js} +3 -3
- package/dist/{parser-4NO6VZ6S.js → parser-75KVXUNS.js} +4 -4
- package/dist/{parser-VKOJM7KS.js → parser-774AC53T.js} +4 -4
- package/dist/{parser-IBWNAPY4.js → parser-BE4YCSRU.js} +3 -3
- package/dist/{parser-4AI5ZN5F.js → parser-CNGUQUQI.js} +3 -3
- package/dist/{parser-36HVKU5U.js → parser-DEUUSQIN.js} +7 -6
- package/dist/{parser-H3XEPFPV.js → parser-DQAFLUJB.js} +4 -4
- package/dist/{parser-5OXGPNBF.js → parser-EYCKNKQA.js} +5 -5
- package/dist/{parser-TGQZJ5OT.js → parser-FXISIU6A.js} +4 -4
- package/dist/{parser-JJR52VAT.js → parser-GTB4XC7P.js} +5 -5
- package/dist/{parser-AGVYTQXV.js → parser-GVEPAUSD.js} +4 -4
- package/dist/{parser-WAV5JRPT.js → parser-HSQGTY4G.js} +4 -4
- package/dist/{parser-YS7TOS2K.js → parser-HVKRINUS.js} +3 -3
- package/dist/{parser-W4PQUGX3.js → parser-J5MIEYO4.js} +5 -5
- package/dist/parser-KMZIXLDZ.js +13 -0
- package/dist/{parser-HYRTF3DO.js → parser-LJHXWSXU.js} +3 -3
- package/dist/{parser-KCR2WS3V.js → parser-PT3W72G5.js} +4 -4
- package/dist/{parser-CVMEDULU.js → parser-SBJQDPHL.js} +4 -4
- package/dist/{parser-RZPVAQVX.js → parser-SUWWWCMX.js} +4 -3
- package/dist/{parser-TXND652E.js → parser-SXDRNZOA.js} +4 -4
- package/dist/parser-UMILOW3M.js +14 -0
- package/dist/{parser-RV4M6AS2.js → parser-UP3AZ367.js} +4 -4
- package/dist/{parser-IJBMRXMC.js → parser-WHPRV3X5.js} +5 -5
- package/dist/{parser-MPCE5JBG.js → parser-WX3UODSJ.js} +4 -4
- package/dist/{parser-K3XXLMUW.js → parser-XCIEN3KN.js} +4 -4
- package/dist/{parser-AXKBDGNO.js → parser-XIRTUMVN.js} +5 -5
- package/dist/{parser-B5FVS7O6.js → parser-YKCGIG45.js} +3 -3
- package/dist/{parser-PSA4UBSP.js → parser-YKYMQG3B.js} +4 -4
- package/dist/{parser-MTOMTWTD.js → parser-ZGM2OJ6Y.js} +6 -5
- package/dist/{parser-CSFUN3CT.js → parser-ZL5QUFVH.js} +5 -4
- package/dist/pert.d.ts +2 -2
- package/dist/{renderer-PPIHO5FI.js → renderer-3F7OS2AX.js} +14 -13
- package/dist/{renderer-SBS3YWU5.js → renderer-4QB4K7Q3.js} +9 -9
- package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
- package/dist/{renderer-R2WNIC2C.js → renderer-5H4SY7YY.js} +9 -9
- package/dist/{renderer-DAXMXIKD.js → renderer-5PIQPFOX.js} +5 -4
- package/dist/{renderer-45PSOL3E.js → renderer-6MU37QF5.js} +6 -6
- package/dist/renderer-AQVMWJ4M.js +27 -0
- package/dist/{renderer-A5VE5BCI.js → renderer-BDDW6K7N.js} +9 -9
- package/dist/{renderer-AUW2BE6G.js → renderer-BNB3VIDY.js} +10 -10
- package/dist/{renderer-4ITCHBT7.js → renderer-CQY6ATOS.js} +6 -6
- package/dist/{renderer-6OKF44KS.js → renderer-CVW75CXL.js} +15 -15
- package/dist/{renderer-7RH2SI3B.js → renderer-DT4XRFEP.js} +5 -4
- package/dist/{renderer-B5TBNZJE.js → renderer-ERHBSTQT.js} +9 -9
- package/dist/{renderer-HVCU2C3Z.js → renderer-HSHHVYWF.js} +5 -4
- package/dist/renderer-IDPVUFNB.js +28 -0
- package/dist/renderer-ILX6BGKR.js +21 -0
- package/dist/renderer-JP663HKG.js +22 -0
- package/dist/{renderer-KS7YZJE2.js → renderer-KNFTTOBL.js} +11 -11
- package/dist/{renderer-2AZ5HJFK.js → renderer-MVUZBESR.js} +5 -5
- package/dist/{renderer-QAOBLRXV.js → renderer-N4EBR2FV.js} +11 -11
- package/dist/{renderer-P5ROYQGU.js → renderer-NHO46CT2.js} +4 -4
- package/dist/{renderer-NGXZTRK6.js → renderer-NO2QJ5LZ.js} +10 -10
- package/dist/{renderer-FPE3J5VZ.js → renderer-OGFV5RXX.js} +12 -12
- package/dist/{renderer-ODUUOPVT.js → renderer-PDLESJMS.js} +15 -15
- package/dist/renderer-T4MTNINC.js +24 -0
- package/dist/renderer-TOUGFGTM.js +24 -0
- package/dist/{renderer-BSR2O2H6.js → renderer-U3KPD43Y.js} +14 -13
- package/dist/{renderer-JCCHNECZ.js → renderer-X334IJU2.js} +10 -10
- package/dist/{renderer-5DSEWF74.js → renderer-Y5OAMOCR.js} +9 -9
- package/dist/{renderer-5KVCNMOJ.js → renderer-YONAKAJU.js} +5 -3
- package/dist/{renderer-7SD6MSBS.js → renderer-YWMI6Y2U.js} +12 -12
- package/dist/{renderer-2QPMJ2DA.js → renderer-ZWIH4WDW.js} +10 -10
- package/dist/renderer-radial-7CGZMVMS.js +21 -0
- package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
- package/dist/{state-parser-3REXRK3R.js → state-parser-BATWAID2.js} +4 -4
- package/dist/{state-renderer-XYLNRWXR.js → state-renderer-3FKZJ3LP.js} +10 -10
- package/dist/{themes-PdPR1-hC.d.ts → themes-32xj5ZTW.d.ts} +27 -0
- package/docs/ai-integration.md +15 -19
- package/docs/language-reference.md +106 -21
- package/gallery/fixtures/clock.dgmo +3 -3
- package/gallery/fixtures/countdown-tz.dgmo +5 -0
- package/package.json +1 -1
- package/dist/charts-d3-MUW3LTML.js +0 -26
- package/dist/dgmo-router-CE2G67FV.js +0 -84
- package/dist/dimensions-OTBKC5M6.js +0 -22
- package/dist/layout-6RDJHS6E.js +0 -9
- package/dist/layout-J36454XU.js +0 -14
- package/dist/layout-LD6XTLD6.js +0 -14
- package/dist/parser-4WQQQXCG.js +0 -13
- package/dist/parser-O4HIUN6G.js +0 -13
- package/dist/renderer-CYB4LK3G.js +0 -22
- package/dist/renderer-FF24KZCI.js +0 -24
- package/dist/renderer-FYSVXL7M.js +0 -28
- package/dist/renderer-HDCCZURL.js +0 -24
- package/dist/renderer-PSMMZCKH.js +0 -21
- package/dist/renderer-UYMQQCJK.js +0 -24
- 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-
|
|
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-
|
|
14
|
+
} from "./chunk-QBZYACOG.js";
|
|
15
15
|
import {
|
|
16
16
|
computeLegendLayout
|
|
17
|
-
} from "./chunk-
|
|
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-
|
|
26
|
+
} from "./chunk-QOOUC2J5.js";
|
|
27
27
|
import {
|
|
28
28
|
measureText
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-WCT3NYCV.js";
|
|
30
30
|
import {
|
|
31
31
|
getExtendedChartLegendGroups,
|
|
32
32
|
getSimpleChartLegendGroups,
|
|
33
33
|
parseChart,
|
|
34
34
|
parseExtendedChart
|
|
35
|
-
} from "./chunk-
|
|
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
|
-
|
|
43
|
+
shapeFill,
|
|
44
|
+
themeBaseBg
|
|
45
|
+
} from "./chunk-WBM7ZNDI.js";
|
|
45
46
|
import {
|
|
46
47
|
tagAttrKey
|
|
47
|
-
} from "./chunk-
|
|
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
|
|
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) =>
|
|
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.
|
|
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
|
|
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 =
|
|
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
|
|
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(
|
|
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
|
|
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",
|
|
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
|
|
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 =
|
|
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
|
|
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, {
|
|
889
|
-
shapeFill(palette, palette.colors.cyan, isDark, {
|
|
890
|
-
shapeFill(palette, palette.colors.yellow, isDark, {
|
|
891
|
-
shapeFill(palette, palette.colors.orange, isDark, {
|
|
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
|
|
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:
|
|
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(
|
|
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:
|
|
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
|
|
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",
|
|
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.
|
|
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
|
-
|
|
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
|
|
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",
|
|
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-
|
|
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-
|
|
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
|
-
"
|
|
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
|
|
177
|
-
|
|
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 && /^(
|
|
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
|
-
|
|
843
|
-
|
|
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-
|
|
1067
|
+
//# sourceMappingURL=chunk-EMLPOL77.js.map
|