@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
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-6EK55ART.js";
|
|
4
4
|
import {
|
|
5
5
|
noteBoxSize
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TYS6CSS5.js";
|
|
7
7
|
|
|
8
8
|
// src/utils/notes/build.ts
|
|
9
9
|
function buildPlacedNotes(anchors, noteByNode, direction, collapsedNotes) {
|
|
@@ -70,4 +70,4 @@ function buildPlacedNotes(anchors, noteByNode, direction, collapsedNotes) {
|
|
|
70
70
|
export {
|
|
71
71
|
buildPlacedNotes
|
|
72
72
|
};
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-JED6ZDEE.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
renderIntegratedLegend
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AUIM2NVH.js";
|
|
4
4
|
import {
|
|
5
5
|
getFigure,
|
|
6
6
|
getPartGeom,
|
|
@@ -11,13 +11,14 @@ import {
|
|
|
11
11
|
} from "./chunk-6KFWC4CO.js";
|
|
12
12
|
import {
|
|
13
13
|
getSeriesColors,
|
|
14
|
-
mix
|
|
15
|
-
|
|
14
|
+
mix,
|
|
15
|
+
themeBaseBg
|
|
16
|
+
} from "./chunk-WBM7ZNDI.js";
|
|
16
17
|
import {
|
|
17
18
|
resolveActiveTagGroup,
|
|
18
19
|
resolveTagColor,
|
|
19
20
|
tagAttrKey
|
|
20
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-HHKO6SKY.js";
|
|
21
22
|
import {
|
|
22
23
|
resolveColor
|
|
23
24
|
} from "./chunk-TLVIHFRO.js";
|
|
@@ -51,7 +52,7 @@ function sideCenter(centers, side, view) {
|
|
|
51
52
|
(best, c) => wantScreenRight ? c.x > best.x ? c : best : c.x < best.x ? c : best
|
|
52
53
|
);
|
|
53
54
|
}
|
|
54
|
-
function renderFigureBody(fig, view, parts, partColor, emphKey, form, palette, defs) {
|
|
55
|
+
function renderFigureBody(fig, view, parts, partColor, emphKey, form, palette, isDark, fillMode, defs) {
|
|
55
56
|
const [vx, vy, vw, vh] = fig.viewBox.split(" ").map(Number);
|
|
56
57
|
const muscleFill = mix(palette.bg, palette.border, 0.7);
|
|
57
58
|
const seam = palette.bg;
|
|
@@ -99,7 +100,16 @@ function renderFigureBody(fig, view, parts, partColor, emphKey, form, palette, d
|
|
|
99
100
|
);
|
|
100
101
|
if (sidePaths.length) paths = sidePaths;
|
|
101
102
|
}
|
|
102
|
-
if (
|
|
103
|
+
if (fillMode === "solid") {
|
|
104
|
+
for (const d of paths) {
|
|
105
|
+
out += `<path${dataLine} d="${d}" fill="${color}" stroke="${color}" stroke-width="1.5"/>`;
|
|
106
|
+
}
|
|
107
|
+
} else if (fillMode === "outline") {
|
|
108
|
+
const baseBg = themeBaseBg(palette, isDark);
|
|
109
|
+
for (const d of paths) {
|
|
110
|
+
out += `<path${dataLine} d="${d}" fill="${baseBg}" stroke="${color}" stroke-width="2.5"/>`;
|
|
111
|
+
}
|
|
112
|
+
} else if (form === "skin") {
|
|
103
113
|
for (const d of paths) {
|
|
104
114
|
out += `<path${dataLine} d="${d}" fill="${color}" fill-opacity="0.5" stroke="${color}" stroke-width="1.5"/>`;
|
|
105
115
|
}
|
|
@@ -186,6 +196,8 @@ function renderBody(container, parsed, palette, _isDark, _onClickItem, exportDim
|
|
|
186
196
|
emphKey,
|
|
187
197
|
parsed.options.form,
|
|
188
198
|
palette,
|
|
199
|
+
_isDark,
|
|
200
|
+
parsed.options.fillMode,
|
|
189
201
|
defs
|
|
190
202
|
)
|
|
191
203
|
);
|
|
@@ -322,4 +334,4 @@ export {
|
|
|
322
334
|
renderBody,
|
|
323
335
|
renderBodyForExport
|
|
324
336
|
};
|
|
325
|
-
//# sourceMappingURL=chunk-
|
|
337
|
+
//# sourceMappingURL=chunk-JRCOYRRH.js.map
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./chunk-BMR4CIEO.js";
|
|
7
7
|
import {
|
|
8
8
|
renderNodeCard
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OTOHI4JO.js";
|
|
10
10
|
import {
|
|
11
11
|
CARD_RADIUS,
|
|
12
12
|
HEADER_HEIGHT,
|
|
@@ -16,10 +16,10 @@ import {
|
|
|
16
16
|
} from "./chunk-3CIOJ5YJ.js";
|
|
17
17
|
import {
|
|
18
18
|
formatDateLabel
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-7KINELPI.js";
|
|
20
20
|
import {
|
|
21
21
|
renderIntegratedLegend
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-AUIM2NVH.js";
|
|
23
23
|
import {
|
|
24
24
|
TITLE_FONT_SIZE,
|
|
25
25
|
TITLE_FONT_WEIGHT,
|
|
@@ -29,19 +29,20 @@ import {
|
|
|
29
29
|
FONT_FAMILY
|
|
30
30
|
} from "./chunk-6KFWC4CO.js";
|
|
31
31
|
import {
|
|
32
|
-
CHAR_WIDTH_RATIO
|
|
33
|
-
|
|
32
|
+
CHAR_WIDTH_RATIO,
|
|
33
|
+
wrapTextToWidth
|
|
34
|
+
} from "./chunk-WCT3NYCV.js";
|
|
34
35
|
import {
|
|
35
36
|
contrastText,
|
|
36
37
|
getSeriesColors,
|
|
37
38
|
mix,
|
|
38
39
|
shapeFill,
|
|
39
40
|
themeBaseBg
|
|
40
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-WBM7ZNDI.js";
|
|
41
42
|
import {
|
|
42
43
|
resolveActiveTagGroup,
|
|
43
44
|
resolveTagColor
|
|
44
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-HHKO6SKY.js";
|
|
45
46
|
import {
|
|
46
47
|
resolveColor
|
|
47
48
|
} from "./chunk-TLVIHFRO.js";
|
|
@@ -58,6 +59,8 @@ var DESC_FONT = 11.5;
|
|
|
58
59
|
var DESC_LINE_H = 16;
|
|
59
60
|
var CARD_PAD = 9;
|
|
60
61
|
var CARD_BODY_TOP = HEADER_HEIGHT + SEPARATOR_GAP;
|
|
62
|
+
var TITLE_LINE_H = 16;
|
|
63
|
+
var TITLE_MAX_W = (CARD_W - CARD_PAD * 2) * 0.93;
|
|
61
64
|
var DOT_R = 5.5;
|
|
62
65
|
var MIN_SPACING = 96;
|
|
63
66
|
var LANE_GAP = 16;
|
|
@@ -136,7 +139,14 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
136
139
|
8,
|
|
137
140
|
Math.floor((CARD_W - CARD_PAD * 2) / (DESC_FONT * CHAR_WIDTH_RATIO))
|
|
138
141
|
);
|
|
139
|
-
const
|
|
142
|
+
const titleLayout = (label) => {
|
|
143
|
+
const lines = wrapTextToWidth(label, LABEL_FONT_SIZE, TITLE_MAX_W, {
|
|
144
|
+
hardBreak: true
|
|
145
|
+
});
|
|
146
|
+
const headerH = Math.max(HEADER_HEIGHT, lines.length * TITLE_LINE_H + 12);
|
|
147
|
+
return { lines, headerH };
|
|
148
|
+
};
|
|
149
|
+
const cardHeight = (headerH, lines, hasDate) => headerH + (hasDate ? DATE_SUBTITLE_H : 0) + (lines.length > 0 ? SEPARATOR_GAP + lines.length * DESC_LINE_H : 0) + (lines.length > 0 ? CARD_PAD : 6);
|
|
140
150
|
const eventColor = (ev) => {
|
|
141
151
|
if (!activeGroup) return accent;
|
|
142
152
|
const tc = resolveTagColor(
|
|
@@ -153,7 +163,7 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
153
163
|
const event = slot.event;
|
|
154
164
|
const solid2 = eventColor(event);
|
|
155
165
|
const cardFill2 = shapeFill(palette, solid2, isDark, {
|
|
156
|
-
|
|
166
|
+
mode: parsed.options.fillMode
|
|
157
167
|
});
|
|
158
168
|
const titleColor2 = contrastText(
|
|
159
169
|
cardFill2,
|
|
@@ -161,6 +171,7 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
161
171
|
palette.textOnFillDark
|
|
162
172
|
);
|
|
163
173
|
const lines2 = wrapDescription(event.description, charsPerLine);
|
|
174
|
+
const title2 = titleLayout(event.label);
|
|
164
175
|
return {
|
|
165
176
|
kind: "event",
|
|
166
177
|
event,
|
|
@@ -176,10 +187,12 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
176
187
|
color: solid2,
|
|
177
188
|
cardFill: cardFill2,
|
|
178
189
|
titleColor: titleColor2,
|
|
190
|
+
titleLines: title2.lines,
|
|
191
|
+
headerH: title2.headerH,
|
|
179
192
|
lines: lines2,
|
|
180
193
|
bulletColors: [],
|
|
181
194
|
bulletMeta: [],
|
|
182
|
-
cardH: cardHeight(lines2, !!event.date),
|
|
195
|
+
cardH: cardHeight(title2.headerH, lines2, !!event.date),
|
|
183
196
|
x: 0,
|
|
184
197
|
side,
|
|
185
198
|
lane: 0,
|
|
@@ -214,6 +227,7 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
214
227
|
const bulletColors = visibleMembers.map(eventColor);
|
|
215
228
|
const bulletMeta = visibleMembers.map((m) => m.metadata);
|
|
216
229
|
const lines = wrapDescription(memberStrs, charsPerLine);
|
|
230
|
+
const title = titleLayout(era.name);
|
|
217
231
|
return {
|
|
218
232
|
kind: "era",
|
|
219
233
|
event: null,
|
|
@@ -229,10 +243,12 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
229
243
|
color: solid,
|
|
230
244
|
cardFill,
|
|
231
245
|
titleColor,
|
|
246
|
+
titleLines: title.lines,
|
|
247
|
+
headerH: title.headerH,
|
|
232
248
|
lines,
|
|
233
249
|
bulletColors,
|
|
234
250
|
bulletMeta,
|
|
235
|
-
cardH: cardHeight(lines, false),
|
|
251
|
+
cardH: cardHeight(title.headerH, lines, false),
|
|
236
252
|
x: 0,
|
|
237
253
|
side,
|
|
238
254
|
lane: 0,
|
|
@@ -331,32 +347,6 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
331
347
|
p.x = H_MARGIN + i * spacing;
|
|
332
348
|
});
|
|
333
349
|
}
|
|
334
|
-
if (scaled) {
|
|
335
|
-
const SPREAD = CARD_W + FAN_GAP;
|
|
336
|
-
for (let iter = 0; iter < 8; iter++) {
|
|
337
|
-
let moved = false;
|
|
338
|
-
for (const side of ["above", "below"]) {
|
|
339
|
-
const obs = placed.filter((p) => p.side === side).sort((a, b) => a.x - b.x);
|
|
340
|
-
for (let i = 1; i < obs.length; i++) {
|
|
341
|
-
const p = obs[i];
|
|
342
|
-
if (p.kind !== "event") continue;
|
|
343
|
-
const prev = obs[i - 1];
|
|
344
|
-
if (prev.kind === "event" && p.dateValue === prev.dateValue)
|
|
345
|
-
continue;
|
|
346
|
-
const need = prev.x + SPREAD;
|
|
347
|
-
if (need <= p.x) continue;
|
|
348
|
-
const nxt = obs[i + 1];
|
|
349
|
-
const cap = nxt?.kind === "era" ? nxt.x - SPREAD : Infinity;
|
|
350
|
-
const target = Math.min(need, cap);
|
|
351
|
-
if (target > p.x + 0.5) {
|
|
352
|
-
p.x = target;
|
|
353
|
-
moved = true;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
if (!moved) break;
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
350
|
for (const side of ["above", "below"]) {
|
|
361
351
|
const arr = placed.filter((p) => p.side === side).sort((a, b) => a.x - b.x);
|
|
362
352
|
const laneRight = [];
|
|
@@ -536,30 +526,34 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
536
526
|
const dateH = dateStr ? DATE_SUBTITLE_H : 0;
|
|
537
527
|
if (parsed.options.noBox) {
|
|
538
528
|
const titleNearTop = p.side === "below";
|
|
539
|
-
const headBandTop = titleNearTop ? 0 : p.cardH -
|
|
540
|
-
const shelfTop = titleNearTop ? 0 : p.cardH -
|
|
541
|
-
const shelfH =
|
|
529
|
+
const headBandTop = titleNearTop ? 0 : p.cardH - p.headerH;
|
|
530
|
+
const shelfTop = titleNearTop ? 0 : p.cardH - p.headerH - dateH;
|
|
531
|
+
const shelfH = p.headerH + dateH;
|
|
542
532
|
const clipId = `dgmo-evt-shelf-${shelfClipSeq++}`;
|
|
543
533
|
cardG.append("clipPath").attr("id", clipId).append("rect").attr("x", 0).attr("y", shelfTop).attr("width", CARD_W).attr("height", shelfH).attr("rx", SHELF_EDGE);
|
|
544
534
|
cardG.append("rect").attr("x", 0).attr("y", shelfTop).attr("width", CARD_W).attr("height", shelfH).attr("clip-path", `url(#${clipId})`).attr(
|
|
545
535
|
"fill",
|
|
546
|
-
parsed.options.
|
|
536
|
+
parsed.options.fillMode ? p.color : mix(p.color, themeBaseBg(palette, isDark), SHELF_TINT)
|
|
547
537
|
);
|
|
548
538
|
const edgeY = titleNearTop ? shelfTop : shelfTop + shelfH - SHELF_EDGE;
|
|
549
539
|
cardG.append("rect").attr("x", 0).attr("y", edgeY).attr("width", CARD_W).attr("height", SHELF_EDGE).attr("clip-path", `url(#${clipId})`).attr("fill", p.color).attr("fill-opacity", p.future ? 0.4 : 1);
|
|
550
|
-
const shelfText = parsed.options.
|
|
551
|
-
|
|
540
|
+
const shelfText = parsed.options.fillMode ? contrastText(p.color, palette.textOnFillLight, palette.textOnFillDark) : p.color;
|
|
541
|
+
const titleMid = headBandTop + p.headerH / 2;
|
|
542
|
+
const titleTop = titleMid - (p.titleLines.length - 1) * TITLE_LINE_H / 2;
|
|
543
|
+
for (let ti = 0; ti < p.titleLines.length; ti++) {
|
|
544
|
+
cardG.append("text").attr("x", CARD_PAD).attr("y", titleTop + ti * TITLE_LINE_H + LABEL_FONT_SIZE / 2 - 2).attr("fill", shelfText).attr("font-family", FONT_FAMILY).attr("font-size", LABEL_FONT_SIZE).attr("font-weight", 700).text(p.titleLines[ti]);
|
|
545
|
+
}
|
|
552
546
|
if (dateStr) {
|
|
553
547
|
cardG.append("text").attr("x", CARD_PAD).attr(
|
|
554
548
|
"y",
|
|
555
|
-
(titleNearTop ?
|
|
549
|
+
(titleNearTop ? p.headerH : headBandTop - dateH) + DATE_SUBTITLE_FONT + 2
|
|
556
550
|
).attr(
|
|
557
551
|
"fill",
|
|
558
|
-
parsed.options.
|
|
552
|
+
parsed.options.fillMode ? mix(shelfText, p.color, 25) : mix(palette.text, palette.bg, 55)
|
|
559
553
|
).attr("font-family", FONT_FAMILY).attr("font-size", DATE_SUBTITLE_FONT).attr("font-weight", 600).text(dateStr);
|
|
560
554
|
}
|
|
561
555
|
if (p.lines.length > 0) {
|
|
562
|
-
const startBaseline = titleNearTop ?
|
|
556
|
+
const startBaseline = titleNearTop ? p.headerH + SEPARATOR_GAP + dateH + DESC_FONT : CARD_PAD + DESC_FONT;
|
|
563
557
|
renderBody(
|
|
564
558
|
cardG,
|
|
565
559
|
p.lines,
|
|
@@ -579,21 +573,22 @@ function renderEventLine(container, parsed, palette, isDark, onClickItem, export
|
|
|
579
573
|
stroke: p.color,
|
|
580
574
|
strokeWidth: NODE_STROKE_WIDTH,
|
|
581
575
|
label: p.label,
|
|
576
|
+
labelLines: p.titleLines,
|
|
582
577
|
labelColor: p.titleColor,
|
|
583
578
|
labelFontSize: LABEL_FONT_SIZE,
|
|
584
|
-
headerHeight:
|
|
579
|
+
headerHeight: p.headerH
|
|
585
580
|
});
|
|
586
581
|
if (dateStr) {
|
|
587
|
-
cardG.append("text").attr("x", CARD_W / 2).attr("y",
|
|
582
|
+
cardG.append("text").attr("x", CARD_W / 2).attr("y", p.headerH + DATE_SUBTITLE_FONT + 1).attr("text-anchor", "middle").attr("fill", mix(p.titleColor, p.cardFill, 60)).attr("font-family", FONT_FAMILY).attr("font-size", DATE_SUBTITLE_FONT).attr("font-weight", 600).text(dateStr);
|
|
588
583
|
}
|
|
589
584
|
if (p.lines.length > 0) {
|
|
590
|
-
cardG.append("line").attr("x1", 0).attr("y1",
|
|
585
|
+
cardG.append("line").attr("x1", 0).attr("y1", p.headerH + dateH).attr("x2", CARD_W).attr("y2", p.headerH + dateH).attr("stroke", p.titleColor).attr("stroke-opacity", 0.3).attr("stroke-width", 1);
|
|
591
586
|
renderBody(
|
|
592
587
|
cardG,
|
|
593
588
|
p.lines,
|
|
594
589
|
p.titleColor,
|
|
595
590
|
palette,
|
|
596
|
-
|
|
591
|
+
p.headerH + SEPARATOR_GAP + dateH + DESC_FONT,
|
|
597
592
|
p.bulletColors,
|
|
598
593
|
p.bulletMeta
|
|
599
594
|
);
|
|
@@ -987,4 +982,4 @@ export {
|
|
|
987
982
|
focusEventLine,
|
|
988
983
|
renderEventLineForExport
|
|
989
984
|
};
|
|
990
|
-
//# sourceMappingURL=chunk-
|
|
985
|
+
//# sourceMappingURL=chunk-K2I2XOZD.js.map
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
-
formatLocalISODate
|
|
3
|
-
|
|
4
|
-
} from "./chunk-L3UHP6TD.js";
|
|
2
|
+
formatLocalISODate
|
|
3
|
+
} from "./chunk-7L4UJOY6.js";
|
|
5
4
|
import {
|
|
6
5
|
parseDuration
|
|
7
6
|
} from "./chunk-USZW2HHU.js";
|
|
7
|
+
import {
|
|
8
|
+
parseDateToken,
|
|
9
|
+
toInternal
|
|
10
|
+
} from "./chunk-DAOFNU6J.js";
|
|
8
11
|
import {
|
|
9
12
|
AUTO_TAG_COLOR_SENTINEL,
|
|
10
13
|
finalizeAutoTagColors,
|
|
@@ -14,7 +17,7 @@ import {
|
|
|
14
17
|
tagAttrKey,
|
|
15
18
|
validateTagGroupNames,
|
|
16
19
|
validateTagValues
|
|
17
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-HHKO6SKY.js";
|
|
18
21
|
import {
|
|
19
22
|
normalizeName
|
|
20
23
|
} from "./chunk-NOTA6TEI.js";
|
|
@@ -25,7 +28,7 @@ import {
|
|
|
25
28
|
splitNameAndMeta,
|
|
26
29
|
warnUnknownMetaKeys,
|
|
27
30
|
withTagAliases
|
|
28
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-BRENJ2BQ.js";
|
|
29
32
|
import {
|
|
30
33
|
emit,
|
|
31
34
|
makeDgmoError,
|
|
@@ -81,7 +84,7 @@ var PERT_DX = {
|
|
|
81
84
|
const date = p.trimmed ?? p.value;
|
|
82
85
|
return date ? `Invalid date '${String(date)}' for ${String(key)}. Expected YYYY-MM-DD.` : `Invalid date for ${String(key)}. Expected YYYY-MM-DD.`;
|
|
83
86
|
},
|
|
84
|
-
hint: "Use a calendar-valid
|
|
87
|
+
hint: "Use a calendar-valid date \u2014 ISO (`2026-06-01`), slash (`6/1/2026`), or month-name (`Jun 1, 2026`).",
|
|
85
88
|
example: "pert\nstart-date 2026-13-99\nA 1 2 3\n"
|
|
86
89
|
},
|
|
87
90
|
NEAR_DIRECTIVE: {
|
|
@@ -135,11 +138,17 @@ var DIRECTIVE_KEYS = /* @__PURE__ */ new Set([
|
|
|
135
138
|
"start-date",
|
|
136
139
|
"end-date",
|
|
137
140
|
"no-title",
|
|
138
|
-
"
|
|
141
|
+
"fill-tint",
|
|
142
|
+
"fill-solid",
|
|
143
|
+
"fill-outline",
|
|
139
144
|
"sprint-length",
|
|
140
145
|
"sprint-number",
|
|
141
146
|
"sprint-start",
|
|
142
|
-
"active-tag"
|
|
147
|
+
"active-tag",
|
|
148
|
+
// Universal date directives (§ BL-121); effect captured in the prescan.
|
|
149
|
+
"year",
|
|
150
|
+
"date-order",
|
|
151
|
+
"no-current-year"
|
|
143
152
|
]);
|
|
144
153
|
var RESERVED_PIPE_KEYS = /* @__PURE__ */ new Set([
|
|
145
154
|
"confidence",
|
|
@@ -152,14 +161,16 @@ var NEAR_DIRECTIVE_HINTS = [
|
|
|
152
161
|
matches: /^(low|medium|high)$/i
|
|
153
162
|
},
|
|
154
163
|
{
|
|
164
|
+
// ISO, numeric slash (§ BL-121), or `now`. Month-name forms are omitted
|
|
165
|
+
// to avoid flagging activities like `start the engines`.
|
|
155
166
|
stem: "start",
|
|
156
167
|
canonical: "start-date",
|
|
157
|
-
matches: /^(\d{4}-\d{2}-\d{2}
|
|
168
|
+
matches: /^(\d{4}-\d{2}-\d{2}|\d{1,2}\/\d{1,2}(?:\/\d{2,4})?|now)$/i
|
|
158
169
|
},
|
|
159
170
|
{
|
|
160
171
|
stem: "end",
|
|
161
172
|
canonical: "end-date",
|
|
162
|
-
matches:
|
|
173
|
+
matches: /^(\d{4}-\d{2}-\d{2}|\d{1,2}\/\d{1,2}(?:\/\d{2,4})?)$/
|
|
163
174
|
},
|
|
164
175
|
{
|
|
165
176
|
stem: "time",
|
|
@@ -374,6 +385,15 @@ function parsePipeMetadata(raw, aliasMap = /* @__PURE__ */ new Map()) {
|
|
|
374
385
|
}
|
|
375
386
|
return out;
|
|
376
387
|
}
|
|
388
|
+
function prescanPertYear(lines, order) {
|
|
389
|
+
for (const raw of lines) {
|
|
390
|
+
const m = raw.trim().match(/^(?:start-date|end-date|sprint-start)\s+(.+)$/i);
|
|
391
|
+
if (!m) continue;
|
|
392
|
+
const res = parseDateToken(m[1].trim(), { dateOrder: order });
|
|
393
|
+
if (res?.token.year != null) return res.token.sign * res.token.year;
|
|
394
|
+
}
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
377
397
|
function parsePert(content, parseOpts = {}) {
|
|
378
398
|
const lines = content.split("\n");
|
|
379
399
|
const diagnostics = [];
|
|
@@ -384,6 +404,19 @@ function parsePert(content, parseOpts = {}) {
|
|
|
384
404
|
diagnostics.push(makeDgmoError(line, msg, "warning", code));
|
|
385
405
|
};
|
|
386
406
|
const today = formatLocalISODate(parseOpts.now ?? /* @__PURE__ */ new Date());
|
|
407
|
+
let dateOrder = "mdy";
|
|
408
|
+
let directiveYear = null;
|
|
409
|
+
let noCurrentYear = false;
|
|
410
|
+
for (const raw of lines) {
|
|
411
|
+
const t = raw.trim();
|
|
412
|
+
const dm = t.match(/^date-order\s+(mdy|dmy)$/i);
|
|
413
|
+
if (dm) dateOrder = dm[1].toLowerCase();
|
|
414
|
+
const ym = t.match(/^year\s+(\d{1,4})$/i);
|
|
415
|
+
if (ym) directiveYear = parseInt(ym[1], 10);
|
|
416
|
+
if (t.toLowerCase() === "no-current-year") noCurrentYear = true;
|
|
417
|
+
}
|
|
418
|
+
const currentYear = parseInt(today.slice(0, 4), 10);
|
|
419
|
+
const baseYear = directiveYear ?? prescanPertYear(lines, dateOrder);
|
|
387
420
|
const options = { ...DEFAULT_OPTIONS, today };
|
|
388
421
|
let title = null;
|
|
389
422
|
let firstAnchorLine = null;
|
|
@@ -629,7 +662,8 @@ function parsePert(content, parseOpts = {}) {
|
|
|
629
662
|
options,
|
|
630
663
|
diagnostics,
|
|
631
664
|
firstAnchorLine,
|
|
632
|
-
firstAnchorKey
|
|
665
|
+
firstAnchorKey,
|
|
666
|
+
{ order: dateOrder, baseYear, currentYear, noCurrentYear }
|
|
633
667
|
);
|
|
634
668
|
if (!hadAnchor && options.anchor !== null) {
|
|
635
669
|
firstAnchorLine = lineNumber;
|
|
@@ -640,7 +674,12 @@ function parsePert(content, parseOpts = {}) {
|
|
|
640
674
|
}
|
|
641
675
|
continue;
|
|
642
676
|
}
|
|
643
|
-
applyDirective(head, value, lineNumber, options, error, warn
|
|
677
|
+
applyDirective(head, value, lineNumber, options, error, warn, {
|
|
678
|
+
order: dateOrder,
|
|
679
|
+
baseYear,
|
|
680
|
+
currentYear,
|
|
681
|
+
noCurrentYear
|
|
682
|
+
});
|
|
644
683
|
continue;
|
|
645
684
|
}
|
|
646
685
|
}
|
|
@@ -907,8 +946,14 @@ function parsePert(content, parseOpts = {}) {
|
|
|
907
946
|
error: firstFatal ? firstFatal.message : null
|
|
908
947
|
};
|
|
909
948
|
}
|
|
910
|
-
function applyDirective(key, value, lineNumber, options, error, warn) {
|
|
949
|
+
function applyDirective(key, value, lineNumber, options, error, warn, dateCfg) {
|
|
911
950
|
switch (key) {
|
|
951
|
+
// Universal date directives (§ BL-121) — captured in the parsePert prescan;
|
|
952
|
+
// consumed here so they don't warn as unknown.
|
|
953
|
+
case "year":
|
|
954
|
+
case "date-order":
|
|
955
|
+
case "no-current-year":
|
|
956
|
+
return;
|
|
912
957
|
case "time-unit": {
|
|
913
958
|
const valid = [
|
|
914
959
|
"min",
|
|
@@ -939,8 +984,16 @@ function applyDirective(key, value, lineNumber, options, error, warn) {
|
|
|
939
984
|
options.noTitle = true;
|
|
940
985
|
return;
|
|
941
986
|
}
|
|
942
|
-
case "solid
|
|
943
|
-
options.
|
|
987
|
+
case "fill-solid": {
|
|
988
|
+
options.fillMode = "solid";
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
case "fill-outline": {
|
|
992
|
+
options.fillMode = "outline";
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
995
|
+
case "fill-tint": {
|
|
996
|
+
delete options.fillMode;
|
|
944
997
|
return;
|
|
945
998
|
}
|
|
946
999
|
case "active-tag": {
|
|
@@ -984,15 +1037,18 @@ function applyDirective(key, value, lineNumber, options, error, warn) {
|
|
|
984
1037
|
return;
|
|
985
1038
|
}
|
|
986
1039
|
case "sprint-start": {
|
|
987
|
-
|
|
1040
|
+
const res = parseDateToken(value.trim(), { dateOrder: dateCfg.order });
|
|
1041
|
+
const yr = res?.token.year ?? dateCfg.baseYear ?? dateCfg.currentYear;
|
|
1042
|
+
const iso = res?.consumed === value.trim().length && !res.token.invalidTime && res.token.grain >= 3 && !res.token.hasTime ? toInternal(res.token, yr) : null;
|
|
1043
|
+
if (!iso) {
|
|
988
1044
|
warn(
|
|
989
1045
|
lineNumber,
|
|
990
|
-
`sprint-start requires a full date (YYYY-MM-DD), got "${value}".`
|
|
1046
|
+
`sprint-start requires a full date (e.g. YYYY-MM-DD, 7/4, or Jul 4), got "${value}".`
|
|
991
1047
|
);
|
|
992
|
-
} else if (Number.isNaN((/* @__PURE__ */ new Date(
|
|
1048
|
+
} else if (Number.isNaN((/* @__PURE__ */ new Date(iso + "T00:00:00")).getTime())) {
|
|
993
1049
|
warn(lineNumber, `sprint-start is not a valid date: "${value}".`);
|
|
994
1050
|
} else {
|
|
995
|
-
options.sprintStart =
|
|
1051
|
+
options.sprintStart = iso;
|
|
996
1052
|
}
|
|
997
1053
|
return;
|
|
998
1054
|
}
|
|
@@ -1069,7 +1125,7 @@ function applyDirective(key, value, lineNumber, options, error, warn) {
|
|
|
1069
1125
|
}
|
|
1070
1126
|
}
|
|
1071
1127
|
}
|
|
1072
|
-
function applyAnchorDirective(key, value, lineNumber, options, diagnostics, firstAnchorLine, firstAnchorKey) {
|
|
1128
|
+
function applyAnchorDirective(key, value, lineNumber, options, diagnostics, firstAnchorLine, firstAnchorKey, dateCfg) {
|
|
1073
1129
|
if (options.anchor !== null) {
|
|
1074
1130
|
diagnostics.push(
|
|
1075
1131
|
emit(PERT_DX.BOTH_ANCHORS, lineNumber, {
|
|
@@ -1095,12 +1151,28 @@ function applyAnchorDirective(key, value, lineNumber, options, diagnostics, firs
|
|
|
1095
1151
|
options.anchor = { kind: "forward", date: options.today };
|
|
1096
1152
|
return;
|
|
1097
1153
|
}
|
|
1098
|
-
const
|
|
1099
|
-
if (
|
|
1154
|
+
const res = parseDateToken(trimmed, { dateOrder: dateCfg.order });
|
|
1155
|
+
if (res?.consumed !== trimmed.length || res.token.invalidTime || res.token.grain < 3) {
|
|
1156
|
+
diagnostics.push(emit(PERT_DX.INVALID_DATE, lineNumber, { trimmed, key }));
|
|
1157
|
+
return;
|
|
1158
|
+
}
|
|
1159
|
+
let year = res.token.year;
|
|
1160
|
+
if (year == null) {
|
|
1161
|
+
if (dateCfg.baseYear == null && dateCfg.noCurrentYear) {
|
|
1162
|
+
diagnostics.push(
|
|
1163
|
+
emit(PERT_DX.INVALID_DATE, lineNumber, { trimmed, key })
|
|
1164
|
+
);
|
|
1165
|
+
return;
|
|
1166
|
+
}
|
|
1167
|
+
year = dateCfg.baseYear ?? dateCfg.currentYear;
|
|
1168
|
+
}
|
|
1169
|
+
const probe = new Date(year, res.token.month - 1, res.token.day);
|
|
1170
|
+
if (probe.getFullYear() !== year || probe.getMonth() !== res.token.month - 1 || probe.getDate() !== res.token.day) {
|
|
1100
1171
|
diagnostics.push(emit(PERT_DX.INVALID_DATE, lineNumber, { trimmed, key }));
|
|
1101
1172
|
return;
|
|
1102
1173
|
}
|
|
1103
|
-
|
|
1174
|
+
const iso = toInternal(res.token, year);
|
|
1175
|
+
options.anchor = key === "start-date" ? { kind: "forward", date: iso } : { kind: "backward", date: iso };
|
|
1104
1176
|
}
|
|
1105
1177
|
function classifyGroup(group, edges) {
|
|
1106
1178
|
const members = new Set(group.activityIds);
|
|
@@ -1152,4 +1224,4 @@ export {
|
|
|
1152
1224
|
extractPertSymbols,
|
|
1153
1225
|
looksLikePert
|
|
1154
1226
|
};
|
|
1155
|
-
//# sourceMappingURL=chunk-
|
|
1227
|
+
//# sourceMappingURL=chunk-K4EOKJA6.js.map
|
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
} from "./chunk-3CIOJ5YJ.js";
|
|
15
15
|
import {
|
|
16
16
|
renderIntegratedLegend
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-AUIM2NVH.js";
|
|
18
18
|
import {
|
|
19
19
|
getMaxLegendReservedHeight
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-YAA6IID3.js";
|
|
21
21
|
import {
|
|
22
22
|
TITLE_FONT_SIZE,
|
|
23
23
|
TITLE_FONT_WEIGHT,
|
|
@@ -28,20 +28,23 @@ import {
|
|
|
28
28
|
} from "./chunk-6KFWC4CO.js";
|
|
29
29
|
import {
|
|
30
30
|
LEGEND_GROUP_GAP
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-QOOUC2J5.js";
|
|
32
32
|
import {
|
|
33
33
|
measureText
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-WCT3NYCV.js";
|
|
35
35
|
import {
|
|
36
36
|
contrastText,
|
|
37
37
|
mix,
|
|
38
38
|
shapeFill,
|
|
39
39
|
themeBaseBg
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-WBM7ZNDI.js";
|
|
41
41
|
import {
|
|
42
42
|
resolveTagColor,
|
|
43
43
|
tagAttrKey
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-HHKO6SKY.js";
|
|
45
|
+
import {
|
|
46
|
+
fillModeFromOptions
|
|
47
|
+
} from "./chunk-BRENJ2BQ.js";
|
|
45
48
|
import {
|
|
46
49
|
resolveColor
|
|
47
50
|
} from "./chunk-TLVIHFRO.js";
|
|
@@ -88,7 +91,7 @@ function baseColor(node, parsed, palette, activeTagGroup) {
|
|
|
88
91
|
function renderFamilyForExport(container, parsed, layout, palette, isDark, opts = {}) {
|
|
89
92
|
d3Selection.select(container).selectAll(":not([data-d3-tooltip])").remove();
|
|
90
93
|
const activeTagGroup = opts.activeTagGroup ?? null;
|
|
91
|
-
const
|
|
94
|
+
const fillMode = fillModeFromOptions(parsed.options);
|
|
92
95
|
const noDaggers = parsed.options["no-daggers"] === "true";
|
|
93
96
|
const baseBg = themeBaseBg(palette, isDark);
|
|
94
97
|
const PAD = 20;
|
|
@@ -202,7 +205,7 @@ function renderFamilyForExport(container, parsed, layout, palette, isDark, opts
|
|
|
202
205
|
for (const node of layout.nodes) {
|
|
203
206
|
const isPh = !!node.placeholder;
|
|
204
207
|
const base = baseColor(node, parsed, palette, activeTagGroup);
|
|
205
|
-
const fill = isPh ? mix(palette.textMuted, baseBg, 6) : shapeFill(palette, base, isDark, {
|
|
208
|
+
const fill = isPh ? mix(palette.textMuted, baseBg, 6) : shapeFill(palette, base, isDark, { mode: fillMode });
|
|
206
209
|
const stroke = isPh ? palette.textMuted : base;
|
|
207
210
|
const labelColor = isPh ? palette.textMuted : contrastText(fill, palette.textOnFillLight, palette.textOnFillDark);
|
|
208
211
|
const g = cardsG.append("g").attr("class", "family-card").attr("transform", `translate(${node.x}, ${node.y})`).attr("data-line-number", String(node.lineNumber)).attr("data-person-id", node.id);
|
|
@@ -223,7 +226,7 @@ function renderFamilyForExport(container, parsed, layout, palette, isDark, opts
|
|
|
223
226
|
focusG.append("circle").attr("cx", fx).attr("cy", fy).attr("r", 1.6).attr("fill", labelColor);
|
|
224
227
|
const rows = familyCardRows(node);
|
|
225
228
|
if (rows.length === 0) continue;
|
|
226
|
-
g.append("line").attr("x1", 0).attr("y1", HEADER_HEIGHT).attr("x2", node.width).attr("y2", HEADER_HEIGHT).attr("stroke", solid ? labelColor : stroke).attr("stroke-opacity", 0.3).attr("stroke-width", 1);
|
|
229
|
+
g.append("line").attr("x1", 0).attr("y1", HEADER_HEIGHT).attr("x2", node.width).attr("y2", HEADER_HEIGHT).attr("stroke", fillMode === "solid" ? labelColor : stroke).attr("stroke-opacity", 0.3).attr("stroke-width", 1);
|
|
227
230
|
const maxKeyWidth = Math.max(
|
|
228
231
|
0,
|
|
229
232
|
...rows.filter((r) => !r.year).map((r) => measureText(`${r.key}: `, META_FONT_SIZE))
|
|
@@ -270,4 +273,4 @@ export {
|
|
|
270
273
|
renderFamilyForExport,
|
|
271
274
|
renderFamily
|
|
272
275
|
};
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
276
|
+
//# sourceMappingURL=chunk-KGVZ5VGH.js.map
|