@diagrammo/dgmo 0.46.0 → 0.48.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/dist/advanced.d.ts +3 -855
- package/dist/advanced.js +541 -70107
- package/dist/analyzer-UYKBXAKR.js +15 -0
- package/dist/auto.js +1 -1
- package/dist/auto.mjs +1 -1
- package/dist/block.js +83 -69417
- package/dist/calculator-LDYQCDDY.js +11 -0
- package/dist/charts-d3-QOZHKTCT.js +25 -0
- package/dist/chunk-2DXMZRWJ.js +800 -0
- package/dist/chunk-2LACINWN.js +786 -0
- package/dist/chunk-33LCUH4H.js +893 -0
- package/dist/chunk-3CIOJ5YJ.js +35 -0
- package/dist/chunk-3HDBAXF5.js +86 -0
- package/dist/chunk-3JLKYGBQ.js +290 -0
- package/dist/chunk-3MQQNXPD.js +415 -0
- package/dist/chunk-3R5POCTZ.js +967 -0
- package/dist/chunk-3SMGIJDD.js +112 -0
- package/dist/chunk-44CM72SQ.js +409 -0
- package/dist/chunk-4GRI7MEB.js +1604 -0
- package/dist/chunk-4OHACBGX.js +606 -0
- package/dist/chunk-5DH3KYFH.js +21 -0
- package/dist/chunk-5MLYVTYM.js +76 -0
- package/dist/chunk-5QXL4NYS.js +553 -0
- package/dist/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-6EK55ART.js +117 -0
- package/dist/chunk-6FZYCKXB.js +2065 -0
- package/dist/chunk-6HO5ZTXK.js +277 -0
- package/dist/chunk-6KFWC4CO.js +7 -0
- package/dist/chunk-6MTWIQVO.js +121 -0
- package/dist/chunk-6NYWYNBI.js +329 -0
- package/dist/chunk-6SM5NJQH.js +620 -0
- package/dist/chunk-725LDASD.js +422 -0
- package/dist/chunk-76OWZ3BA.js +130 -0
- package/{src/block/parser.ts → dist/chunk-7JEGTRLD.js} +100 -189
- package/dist/chunk-A44USUV7.js +923 -0
- package/dist/chunk-A4GOY3PE.js +25 -0
- package/dist/chunk-A4VFQH5G.js +251 -0
- package/dist/chunk-AELOBFW5.js +375 -0
- package/dist/chunk-AN2MOO5T.js +522 -0
- package/dist/chunk-BMR4CIEO.js +41 -0
- package/dist/chunk-BS7SV7C3.js +51 -0
- package/dist/chunk-BUPDIHML.js +613 -0
- package/dist/chunk-BUVJFRPY.js +887 -0
- package/dist/chunk-C3Z4DX3V.js +112 -0
- package/dist/chunk-CI2G3OEB.js +1818 -0
- package/dist/chunk-CKNVO24D.js +54 -0
- package/dist/chunk-CUVHQHZ7.js +391 -0
- package/dist/chunk-CXK4DZH3.js +114 -0
- package/dist/{editor.cjs → chunk-DKEPS5LH.js} +14 -225
- package/dist/chunk-DU7W62N5.js +487 -0
- package/dist/chunk-DZAQBW35.js +751 -0
- package/dist/chunk-EB6FPQUP.js +316 -0
- package/dist/chunk-EMS2SK26.js +376 -0
- package/dist/chunk-ERLBPDGU.js +510 -0
- package/dist/chunk-EVCVDTXE.js +732 -0
- package/dist/chunk-FCIIHT24.js +384 -0
- package/dist/chunk-FFUN5D66.js +97 -0
- package/dist/chunk-FITOLXSX.js +714 -0
- package/dist/chunk-FMDSF3OV.js +68 -0
- package/dist/chunk-FNB3PNGF.js +410 -0
- package/dist/chunk-G2H74XJZ.js +2104 -0
- package/dist/chunk-GMR5MFHJ.js +339 -0
- package/dist/chunk-H6PI3KJT.js +305 -0
- package/dist/chunk-I46X5VUA.js +59 -0
- package/dist/chunk-I5IGB56C.js +255 -0
- package/dist/chunk-IH6ZMVQ5.js +3950 -0
- package/dist/chunk-IJZFN3HM.js +463 -0
- package/dist/chunk-IPWPWM6R.js +3079 -0
- package/dist/chunk-IYULMRBE.js +23 -0
- package/dist/chunk-IZMRON6C.js +167 -0
- package/dist/chunk-J5FIXQRT.js +813 -0
- package/dist/chunk-JED6ZDEE.js +73 -0
- package/dist/chunk-JEUJOX5X.js +136 -0
- package/dist/chunk-JM4LEPY3.js +436 -0
- package/dist/chunk-L3UHP6TD.js +101 -0
- package/dist/chunk-L66GEFB6.js +524 -0
- package/dist/chunk-LIOHW36Z.js +469 -0
- package/dist/chunk-LP7EC4MI.js +16 -0
- package/dist/chunk-MITI6NOL.js +548 -0
- package/dist/chunk-MO5YHHMQ.js +168 -0
- package/dist/chunk-MZSBFAPJ.js +885 -0
- package/dist/chunk-NNAAJVBU.js +9 -0
- package/dist/chunk-NOTA6TEI.js +47 -0
- package/dist/chunk-NURGB5Z4.js +335 -0
- package/dist/chunk-NX4EQS3U.js +1062 -0
- package/dist/chunk-NXMESY4J.js +1 -0
- package/dist/chunk-OJR3MQYV.js +1458 -0
- package/dist/chunk-OURHMODR.js +454 -0
- package/dist/chunk-P235SVAH.js +1057 -0
- package/dist/chunk-P4RH4OSP.js +1038 -0
- package/dist/chunk-P6T66CCZ.js +226 -0
- package/dist/chunk-PBAHEPLQ.js +223 -0
- package/dist/chunk-PBHE5UG6.js +1530 -0
- package/dist/chunk-PDKUANDZ.js +35 -0
- package/dist/chunk-PWIHZ6NJ.js +296 -0
- package/{src/c4/layout.ts → dist/chunk-QEBUY5NY.js} +384 -1140
- package/dist/chunk-QLCCJEJI.js +253 -0
- package/dist/chunk-QOOUC2J5.js +52 -0
- package/dist/chunk-QYTPPDAO.js +402 -0
- package/dist/chunk-R3XI2VC7.js +801 -0
- package/dist/chunk-RCERWOJR.js +154 -0
- package/dist/chunk-RJE5JTVK.js +362 -0
- package/dist/chunk-RTLBSQ3G.js +1155 -0
- package/dist/chunk-RUNNI6VE.js +448 -0
- package/dist/chunk-RVMRZAPB.js +354 -0
- package/dist/chunk-RYEGFMUO.js +955 -0
- package/dist/chunk-RZCF2VVM.js +528 -0
- package/dist/chunk-SML67VPV.js +1025 -0
- package/dist/chunk-SQ7IY53Q.js +44 -0
- package/dist/chunk-SQAG3UXH.js +161 -0
- package/dist/chunk-SRTU6HMQ.js +1851 -0
- package/dist/chunk-T2OE3YQB.js +550 -0
- package/dist/chunk-T3UBLACL.js +299 -0
- package/dist/chunk-TLVIHFRO.js +296 -0
- package/dist/chunk-TYS6CSS5.js +52 -0
- package/dist/chunk-U6EQI3U6.js +130 -0
- package/dist/chunk-UJ4FJLBF.js +86 -0
- package/dist/chunk-ULOEATBZ.js +347 -0
- package/dist/chunk-UNCCZ3NU.js +127 -0
- package/dist/chunk-USZW2HHU.js +197 -0
- package/dist/chunk-UWN33VNX.js +1610 -0
- package/dist/chunk-UZ7EZW3B.js +40 -0
- package/dist/chunk-VOKGH627.js +37 -0
- package/dist/chunk-WBRZJOEC.js +204 -0
- package/dist/chunk-WCSOJFU3.js +380 -0
- package/dist/chunk-WCT3NYCV.js +160 -0
- package/dist/chunk-WVAJFAIA.js +529 -0
- package/dist/chunk-X5LCYCL5.js +394 -0
- package/dist/chunk-XAKEUMEJ.js +1256 -0
- package/dist/chunk-Y2ZE3MSG.js +590 -0
- package/dist/chunk-Y3J7VR52.js +646 -0
- package/dist/chunk-Y5QGVTVC.js +33 -0
- package/dist/chunk-YAA6IID3.js +548 -0
- package/dist/chunk-YGJTDXVR.js +692 -0
- package/{src/utils/time-ticks.ts → dist/chunk-YRYKTYMQ.js} +45 -112
- package/dist/chunk-YYVTBZZC.js +61 -0
- package/dist/chunk-Z5CGSFJB.js +647 -0
- package/{src/gantt/calculator.ts → dist/chunk-Z72XRXD4.js} +236 -428
- package/dist/chunk-ZGR7ULFJ.js +978 -0
- package/dist/chunk-ZJEL4H2R.js +851 -0
- package/dist/chunk-ZO27FGJS.js +554 -0
- package/dist/collapse-CLPJD2RL.js +11 -0
- package/dist/collapse-SLINJQW6.js +9 -0
- package/dist/collapse-ZWUFFCK2.js +9 -0
- package/dist/compute-G55RG53N.js +8 -0
- package/dist/dgmo-router-DZCIDUO5.js +73 -0
- package/dist/dimensions-J3FHIMJ6.js +22 -0
- package/dist/element.js +1 -1
- package/dist/element.mjs +1 -1
- package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
- package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
- package/dist/index.d.ts +3 -469
- package/dist/index.js +137 -69685
- package/dist/layout-46N4JJYK.js +17 -0
- package/dist/layout-5RA6QWR6.js +26 -0
- package/dist/layout-5T6RH5M6.js +14 -0
- package/dist/layout-7QXCNOVS.js +13 -0
- package/dist/layout-EE6GE46Y.js +17 -0
- package/dist/layout-G23F7LDH.js +9 -0
- package/dist/layout-HRBZPFCN.js +23 -0
- package/dist/layout-HWDSRX5E.js +20 -0
- package/dist/layout-HYZPWAK5.js +18 -0
- package/dist/layout-N76NR4ZO.js +19 -0
- package/dist/layout-OB3RI63S.js +14 -0
- package/dist/layout-S2QBYSK2.js +15 -0
- package/dist/layout-UM5F4DJB.js +15 -0
- package/dist/layout-search-OYV77HHS.js +1655 -0
- package/dist/load-data-EHDDZ5ZS.js +8 -0
- package/dist/palettes-PRJ2RI6D.js +56 -0
- package/dist/parser-2MFP2H2E.js +11 -0
- package/dist/parser-3STE62GB.js +21 -0
- package/dist/parser-4FL2CMDG.js +18 -0
- package/dist/parser-4OGOBJJ4.js +13 -0
- package/dist/parser-6BTRLKRZ.js +15 -0
- package/dist/parser-AQETEVRW.js +21 -0
- package/dist/parser-CFZD5IBL.js +12 -0
- package/dist/parser-FUSKFGZN.js +16 -0
- package/dist/parser-I6KXEYFK.js +13 -0
- package/dist/parser-IXSZZQHY.js +18 -0
- package/dist/parser-JAL2HD4I.js +13 -0
- package/dist/parser-KNSQSKQO.js +20 -0
- package/dist/parser-N5O4IHUN.js +13 -0
- package/dist/parser-NGU3ETO6.js +16 -0
- package/dist/parser-NRAI6O25.js +19 -0
- package/dist/parser-O5J4VBII.js +11 -0
- package/dist/parser-OV7NOBW6.js +21 -0
- package/dist/parser-PQ3POX45.js +23 -0
- package/dist/parser-TFZFBVWN.js +11 -0
- package/dist/parser-TRTHDFPP.js +18 -0
- package/dist/parser-VQP2UJ6W.js +11 -0
- package/dist/parser-XDVELHRK.js +13 -0
- package/dist/parser-XKRP7QKP.js +11 -0
- package/dist/parser-Y6WTBU76.js +14 -0
- package/dist/parser-ZSDPZYQP.js +12 -0
- package/dist/renderer-2XQQQ6QR.js +28 -0
- package/dist/renderer-5NDVNDAZ.js +26 -0
- package/dist/renderer-6EEZHMH4.js +26 -0
- package/dist/renderer-6W5462RB.js +43 -0
- package/dist/renderer-7MVLWWQD.js +22 -0
- package/dist/renderer-AWWAF6XD.js +33 -0
- package/dist/renderer-BYCNMBF7.js +34 -0
- package/dist/renderer-CLJHQPBJ.js +29 -0
- package/dist/renderer-GHPZMFU2.js +15 -0
- package/dist/renderer-JGBKUCZD.js +16 -0
- package/dist/renderer-KQB7UGDS.js +19 -0
- package/dist/renderer-PGX2TKVS.js +24 -0
- package/dist/renderer-QIWVHWZO.js +15 -0
- package/dist/renderer-RPOA5YPZ.js +35 -0
- package/dist/renderer-SMIBCRVB.js +24 -0
- package/dist/renderer-T7YKC5VP.js +28 -0
- package/dist/renderer-TOCOVLHS.js +37 -0
- package/dist/renderer-UWA5XS74.js +39 -0
- package/dist/renderer-VACVQYML.js +25 -0
- package/dist/renderer-W4M6QLIJ.js +37 -0
- package/dist/renderer-WZRREQ2P.js +23 -0
- package/dist/renderer-YY2OSF6E.js +27 -0
- package/dist/renderer-Z7I3W2PP.js +24 -0
- package/dist/renderer-ZGNTUWC4.js +22 -0
- package/dist/renderer-ZTR3DER3.js +19 -0
- package/dist/renderer-radial-C32GPJQ7.js +21 -0
- package/dist/resolver-NOAA7ID7.js +13 -0
- package/dist/state-collapse-HCGD6IVJ.js +8 -0
- package/dist/state-parser-Z2V23ATR.js +18 -0
- package/dist/state-renderer-RFYHSP4K.js +34 -0
- package/dist/themes-1-CuKpeH.d.ts +908 -0
- package/package.json +19 -70
- package/dist/advanced.cjs +0 -71648
- package/dist/advanced.d.cts +0 -6571
- package/dist/auto.cjs +0 -70648
- package/dist/auto.d.cts +0 -54
- package/dist/block.cjs +0 -70208
- package/dist/block.d.cts +0 -115
- package/dist/editor.d.cts +0 -26
- package/dist/element.cjs +0 -70530
- package/dist/element.d.cts +0 -62
- package/dist/highlight.cjs +0 -852
- package/dist/highlight.d.cts +0 -49
- package/dist/index.cjs +0 -70491
- package/dist/index.d.cts +0 -626
- package/dist/pert.cjs +0 -325
- package/dist/pert.d.cts +0 -559
- package/src/advanced.ts +0 -873
- package/src/arc/parser.ts +0 -15
- package/src/arc/renderer.ts +0 -633
- package/src/auto/index.ts +0 -621
- package/src/auto/shared.ts +0 -370
- package/src/auto/styles.ts +0 -73
- package/src/block/layout.ts +0 -198
- package/src/block/renderer.ts +0 -484
- package/src/block/types.ts +0 -67
- package/src/boxes-and-lines/collapse.ts +0 -96
- package/src/boxes-and-lines/focus.ts +0 -257
- package/src/boxes-and-lines/label-placement.ts +0 -339
- package/src/boxes-and-lines/layout-grouped.ts +0 -912
- package/src/boxes-and-lines/layout-layered.ts +0 -722
- package/src/boxes-and-lines/layout-search.ts +0 -1678
- package/src/boxes-and-lines/layout.ts +0 -398
- package/src/boxes-and-lines/parser.ts +0 -1181
- package/src/boxes-and-lines/renderer.ts +0 -1465
- package/src/boxes-and-lines/types.ts +0 -66
- package/src/c4/parser.ts +0 -1158
- package/src/c4/renderer.ts +0 -2008
- package/src/c4/types.ts +0 -89
- package/src/chart-type-registry.ts +0 -529
- package/src/chart-types.ts +0 -225
- package/src/chart.ts +0 -685
- package/src/charts-d3/bar.ts +0 -338
- package/src/charts-d3/chord.ts +0 -140
- package/src/charts-d3/function.ts +0 -147
- package/src/charts-d3/funnel.ts +0 -104
- package/src/charts-d3/heatmap.ts +0 -145
- package/src/charts-d3/index.ts +0 -337
- package/src/charts-d3/interactions.ts +0 -477
- package/src/charts-d3/line.ts +0 -344
- package/src/charts-d3/mount.ts +0 -151
- package/src/charts-d3/pie.ts +0 -117
- package/src/charts-d3/polar.ts +0 -89
- package/src/charts-d3/radar.ts +0 -0
- package/src/charts-d3/sankey.ts +0 -0
- package/src/charts-d3/scatter.ts +0 -185
- package/src/charts-d3/shared.ts +0 -208
- package/src/class/layout.ts +0 -326
- package/src/class/parser.ts +0 -635
- package/src/class/renderer.ts +0 -793
- package/src/class/types.ts +0 -58
- package/src/cli-banner.ts +0 -106
- package/src/cli.ts +0 -1080
- package/src/colors-diagnostics.ts +0 -35
- package/src/colors.ts +0 -379
- package/src/completion-types.ts +0 -27
- package/src/completion.ts +0 -2668
- package/src/cycle/layout.ts +0 -1026
- package/src/cycle/parser.ts +0 -387
- package/src/cycle/renderer.ts +0 -653
- package/src/cycle/types.ts +0 -101
- package/src/d3.ts +0 -1434
- package/src/data-chart-parser.ts +0 -1007
- package/src/dgmo-router.ts +0 -296
- package/src/diagnostics-registry.ts +0 -108
- package/src/diagnostics.ts +0 -0
- package/src/dimensions.ts +0 -20
- package/src/directives-registry.ts +0 -396
- package/src/editor/dgmo.grammar +0 -76
- package/src/editor/dgmo.grammar.d.ts +0 -2
- package/src/editor/dgmo.grammar.js +0 -18
- package/src/editor/dgmo.grammar.terms.d.ts +0 -5
- package/src/editor/dgmo.grammar.terms.js +0 -35
- package/src/editor/highlight-api.ts +0 -596
- package/src/editor/highlight.ts +0 -36
- package/src/editor/index.ts +0 -27
- package/src/editor/keywords.ts +0 -128
- package/src/editor/tokens.ts +0 -30
- package/src/element/index.ts +0 -432
- package/src/embed/css.ts +0 -312
- package/src/embed/escape.ts +0 -15
- package/src/embed/index.ts +0 -280
- package/src/er/classify.ts +0 -228
- package/src/er/layout.ts +0 -530
- package/src/er/parser.ts +0 -750
- package/src/er/renderer.ts +0 -725
- package/src/er/types.ts +0 -52
- package/src/error-card.ts +0 -269
- package/src/event-line/diagnostics.ts +0 -117
- package/src/event-line/parser.ts +0 -643
- package/src/event-line/renderer.ts +0 -1742
- package/src/event-line/types.ts +0 -74
- package/src/fonts.ts +0 -3
- package/src/gantt/parser.ts +0 -1641
- package/src/gantt/renderer.ts +0 -3787
- package/src/gantt/resolver.ts +0 -172
- package/src/gantt/types.ts +0 -206
- package/src/graph/diagnostics.ts +0 -64
- package/src/graph/edge-spline.ts +0 -29
- package/src/graph/flowchart-parser.ts +0 -759
- package/src/graph/flowchart-renderer.ts +0 -817
- package/src/graph/layout.ts +0 -472
- package/src/graph/notes.ts +0 -21
- package/src/graph/state-collapse.ts +0 -78
- package/src/graph/state-parser.ts +0 -574
- package/src/graph/state-renderer.ts +0 -653
- package/src/graph/types.ts +0 -65
- package/src/index.ts +0 -261
- package/src/infra/compute.ts +0 -1385
- package/src/infra/layout.ts +0 -888
- package/src/infra/parser.ts +0 -1234
- package/src/infra/renderer.ts +0 -2534
- package/src/infra/roles.ts +0 -75
- package/src/infra/types.ts +0 -216
- package/src/infra/validation.ts +0 -201
- package/src/journey-map/layout.ts +0 -490
- package/src/journey-map/parser.ts +0 -557
- package/src/journey-map/renderer.ts +0 -1580
- package/src/journey-map/types.ts +0 -47
- package/src/kanban/mutations.ts +0 -175
- package/src/kanban/parser.ts +0 -509
- package/src/kanban/renderer.ts +0 -1449
- package/src/kanban/types.ts +0 -39
- package/src/label-layout.ts +0 -368
- package/src/map/colorize.ts +0 -54
- package/src/map/completion.ts +0 -316
- package/src/map/context-labels.ts +0 -609
- package/src/map/data/PROVENANCE.json +0 -1
- package/src/map/data/README.md +0 -40
- package/src/map/data/airport-collisions.json +0 -1
- package/src/map/data/airports.json +0 -1
- package/src/map/data/gazetteer.json +0 -1
- package/src/map/data/lakes.json +0 -1
- package/src/map/data/mountain-ranges.json +0 -1
- package/src/map/data/na-lakes.json +0 -1
- package/src/map/data/na-land.json +0 -1
- package/src/map/data/region-names.json +0 -1
- package/src/map/data/rivers.json +0 -1
- package/src/map/data/types.ts +0 -121
- package/src/map/data/us-states.json +0 -1
- package/src/map/data/water-bodies.json +0 -1
- package/src/map/data/world-coarse.json +0 -1
- package/src/map/data/world-detail.json +0 -1
- package/src/map/diagnostics.ts +0 -134
- package/src/map/dimensions.ts +0 -150
- package/src/map/geo-query.ts +0 -295
- package/src/map/geo.ts +0 -438
- package/src/map/invert.ts +0 -111
- package/src/map/layout.ts +0 -5069
- package/src/map/legend-band.ts +0 -127
- package/src/map/load-data.ts +0 -186
- package/src/map/parser.ts +0 -783
- package/src/map/renderer.ts +0 -1445
- package/src/map/resolved-types.ts +0 -160
- package/src/map/resolver.ts +0 -1146
- package/src/map/types.ts +0 -194
- package/src/mindmap/collapse.ts +0 -67
- package/src/mindmap/layout.ts +0 -649
- package/src/mindmap/parser.ts +0 -430
- package/src/mindmap/renderer.ts +0 -637
- package/src/mindmap/text-wrap.ts +0 -218
- package/src/mindmap/types.ts +0 -56
- package/src/org/collapse.ts +0 -151
- package/src/org/layout.ts +0 -1262
- package/src/org/parser.ts +0 -519
- package/src/org/renderer.ts +0 -866
- package/src/org/resolver.ts +0 -636
- package/src/palettes/atlas.ts +0 -77
- package/src/palettes/blueprint.ts +0 -73
- package/src/palettes/catppuccin.ts +0 -84
- package/src/palettes/color-utils.ts +0 -443
- package/src/palettes/index.ts +0 -67
- package/src/palettes/nord.ts +0 -67
- package/src/palettes/registry.ts +0 -114
- package/src/palettes/slate.ts +0 -73
- package/src/palettes/tidewater.ts +0 -73
- package/src/palettes/tokyo-night.ts +0 -86
- package/src/palettes/types.ts +0 -88
- package/src/pert/analyzer.ts +0 -1183
- package/src/pert/diagnostics.ts +0 -110
- package/src/pert/index.ts +0 -43
- package/src/pert/internal.ts +0 -252
- package/src/pert/layout.ts +0 -971
- package/src/pert/monte-carlo.ts +0 -446
- package/src/pert/parser.ts +0 -1606
- package/src/pert/renderer.ts +0 -4009
- package/src/pert/share-normalize.ts +0 -62
- package/src/pert/types.ts +0 -604
- package/src/pyramid/parser.ts +0 -185
- package/src/pyramid/renderer.ts +0 -768
- package/src/pyramid/types.ts +0 -28
- package/src/quadrant/parser.ts +0 -18
- package/src/quadrant/renderer.ts +0 -638
- package/src/raci/diagnostics.ts +0 -213
- package/src/raci/index.ts +0 -23
- package/src/raci/mutations.ts +0 -321
- package/src/raci/parser.ts +0 -699
- package/src/raci/renderer.ts +0 -1627
- package/src/raci/types.ts +0 -82
- package/src/raci/variants.ts +0 -320
- package/src/render.ts +0 -268
- package/src/ring/parser.ts +0 -212
- package/src/ring/renderer.ts +0 -490
- package/src/ring/types.ts +0 -27
- package/src/sequence/collapse.ts +0 -174
- package/src/sequence/parser.ts +0 -1596
- package/src/sequence/participant-inference.ts +0 -152
- package/src/sequence/renderer.ts +0 -3168
- package/src/sequence/tag-resolution.ts +0 -164
- package/src/sharing.ts +0 -211
- package/src/sitemap/collapse.ts +0 -100
- package/src/sitemap/layout.ts +0 -925
- package/src/sitemap/parser.ts +0 -755
- package/src/sitemap/renderer.ts +0 -828
- package/src/sitemap/types.ts +0 -42
- package/src/slope/parser.ts +0 -18
- package/src/slope/renderer.ts +0 -378
- package/src/swimlane/diagnostics.ts +0 -94
- package/src/swimlane/layout.ts +0 -597
- package/src/swimlane/parser.ts +0 -613
- package/src/swimlane/renderer.ts +0 -681
- package/src/swimlane/types.ts +0 -151
- package/src/tech-radar/interactive.ts +0 -1129
- package/src/tech-radar/layout.ts +0 -197
- package/src/tech-radar/parser.ts +0 -436
- package/src/tech-radar/renderer.ts +0 -1239
- package/src/tech-radar/shared.ts +0 -151
- package/src/tech-radar/types.ts +0 -86
- package/src/themes.ts +0 -22
- package/src/timeline/parser.ts +0 -472
- package/src/timeline/renderer.ts +0 -3024
- package/src/timeline/types.ts +0 -33
- package/src/timeline/viz-parser.ts +0 -21
- package/src/treemap/diagnostics.ts +0 -62
- package/src/treemap/layout-radial.ts +0 -233
- package/src/treemap/layout.ts +0 -189
- package/src/treemap/parser.ts +0 -463
- package/src/treemap/renderer-radial.ts +0 -438
- package/src/treemap/renderer.ts +0 -572
- package/src/treemap/treemap-shared.ts +0 -309
- package/src/treemap/types.ts +0 -60
- package/src/utils/arrow-markers.ts +0 -51
- package/src/utils/arrows-diagnostics.ts +0 -62
- package/src/utils/arrows.ts +0 -227
- package/src/utils/brand.ts +0 -61
- package/src/utils/card.ts +0 -183
- package/src/utils/collapse-engine/tree-edges.ts +0 -115
- package/src/utils/collapse-engine/tree.ts +0 -117
- package/src/utils/d3-helpers.ts +0 -219
- package/src/utils/d3-types.ts +0 -9
- package/src/utils/description-helpers.ts +0 -38
- package/src/utils/duration.ts +0 -312
- package/src/utils/export-container.ts +0 -41
- package/src/utils/expr-eval.ts +0 -27
- package/src/utils/fit-canvas.ts +0 -64
- package/src/utils/hover-styles.ts +0 -673
- package/src/utils/inline-markdown.ts +0 -96
- package/src/utils/legend-constants.ts +0 -48
- package/src/utils/legend-d3.ts +0 -618
- package/src/utils/legend-integration.ts +0 -107
- package/src/utils/legend-layout.ts +0 -776
- package/src/utils/legend-svg.ts +0 -214
- package/src/utils/legend-types.ts +0 -272
- package/src/utils/name-normalize.ts +0 -163
- package/src/utils/note-box/constants.ts +0 -25
- package/src/utils/note-box/index.ts +0 -11
- package/src/utils/note-box/metrics.ts +0 -90
- package/src/utils/note-box/svg.ts +0 -331
- package/src/utils/notes/bounds.ts +0 -30
- package/src/utils/notes/build.ts +0 -131
- package/src/utils/notes/index.ts +0 -18
- package/src/utils/notes/model.ts +0 -19
- package/src/utils/notes/parse.ts +0 -131
- package/src/utils/notes/place.ts +0 -177
- package/src/utils/notes/resolve.ts +0 -88
- package/src/utils/number-format.ts +0 -36
- package/src/utils/parsing.ts +0 -953
- package/src/utils/reserved-key-registry.ts +0 -239
- package/src/utils/safe-href.ts +0 -38
- package/src/utils/scaling.ts +0 -97
- package/src/utils/svg-embed.ts +0 -251
- package/src/utils/tag-groups.ts +0 -607
- package/src/utils/text-measure.ts +0 -122
- package/src/utils/title-constants.ts +0 -24
- package/src/utils/visual-conventions.ts +0 -61
- package/src/utils/wrapped-desc.ts +0 -87
- package/src/venn/parser.ts +0 -18
- package/src/venn/renderer.ts +0 -1047
- package/src/version-control/diagnostics.ts +0 -67
- package/src/version-control/parser.ts +0 -544
- package/src/version-control/renderer.ts +0 -724
- package/src/version-control/types.ts +0 -100
- package/src/visualizations/parse.ts +0 -1560
- package/src/visualizations/types.ts +0 -262
- package/src/wireframe/layout.ts +0 -479
- package/src/wireframe/parser.ts +0 -1114
- package/src/wireframe/renderer.ts +0 -1318
- package/src/wireframe/types.ts +0 -110
- package/src/wordcloud/parser.ts +0 -18
- package/src/wordcloud/renderer.ts +0 -357
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Reserved-Key Registry — per-chart-type sets of attribute keys that
|
|
3
|
-
* trigger metadata dispatch in the unified §1.4 metadata grammar.
|
|
4
|
-
*
|
|
5
|
-
* See `docs/dgmo-language-spec.md` §1.4.3 for the canonical table.
|
|
6
|
-
*
|
|
7
|
-
* Two roles:
|
|
8
|
-
* - **Same-line dispatch (§1.4.1):** the parser flips into metadata
|
|
9
|
-
* mode the first time it encounters a `<key>:` token where `key`
|
|
10
|
-
* is in the registry. Everything left is the name region.
|
|
11
|
-
* - **Indented dispatch (§1.4.2):** an indented `key: value` line
|
|
12
|
-
* attaches as attribute metadata to the parent ONLY when `key`
|
|
13
|
-
* is in the registry. Other indented lines fall through to the
|
|
14
|
-
* chart's structural-child grammar.
|
|
15
|
-
*
|
|
16
|
-
* Tag aliases declared via `tag <Group> as <x>` are added to the
|
|
17
|
-
* effective registry for the duration of the parse — they are not
|
|
18
|
-
* baked into these static sets.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export interface ReservedKeyRegistry {
|
|
22
|
-
/** Reserved attribute keys for this chart type (static). */
|
|
23
|
-
readonly keys: ReadonlySet<string>;
|
|
24
|
-
/** Tag aliases declared during this parse (dynamic). */
|
|
25
|
-
readonly tagAliases: ReadonlySet<string>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Helper to build a registry with empty tag aliases. Parsers should
|
|
30
|
-
* call `withTagAliases()` once they've collected declared aliases.
|
|
31
|
-
*/
|
|
32
|
-
function staticRegistry(keys: readonly string[]): ReservedKeyRegistry {
|
|
33
|
-
return { keys: new Set(keys), tagAliases: new Set() };
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Return a new registry with the given tag-alias set merged in.
|
|
38
|
-
* Static `keys` are unchanged; aliases overlay the registry for
|
|
39
|
-
* the current parse.
|
|
40
|
-
*/
|
|
41
|
-
export function withTagAliases(
|
|
42
|
-
base: ReservedKeyRegistry,
|
|
43
|
-
aliases: ReadonlySet<string>
|
|
44
|
-
): ReservedKeyRegistry {
|
|
45
|
-
return { keys: base.keys, tagAliases: aliases };
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Test whether `key` is recognized by this registry (either static
|
|
50
|
-
* reserved key or active tag alias).
|
|
51
|
-
*/
|
|
52
|
-
export function isReservedKey(
|
|
53
|
-
registry: ReservedKeyRegistry,
|
|
54
|
-
key: string
|
|
55
|
-
): boolean {
|
|
56
|
-
return registry.keys.has(key) || registry.tagAliases.has(key);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// ── Per-chart-type registries (matches spec §1.4.3) ──────────
|
|
60
|
-
|
|
61
|
-
export const SEQUENCE_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
62
|
-
'color',
|
|
63
|
-
'description',
|
|
64
|
-
'role',
|
|
65
|
-
'collapsed',
|
|
66
|
-
// Participant layout-order override (§2.2). Colon-keyed `position: N`.
|
|
67
|
-
'position',
|
|
68
|
-
]);
|
|
69
|
-
|
|
70
|
-
export const INFRA_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
71
|
-
'color',
|
|
72
|
-
'description',
|
|
73
|
-
'collapsed',
|
|
74
|
-
'icon',
|
|
75
|
-
]);
|
|
76
|
-
|
|
77
|
-
// NOTE: `color` is deliberately OMITTED (unlike sibling registries) — per
|
|
78
|
-
// §24B.9 the map chart type carries color as a trailing token (peeled by
|
|
79
|
-
// `peelTrailingColorName`) / via the tag system, not a `color:` metadata key.
|
|
80
|
-
// The numeric data channel is PER-ELEMENT (decision #20): `heat:` (region
|
|
81
|
-
// choropleth shade), `size:` (POI marker radius), `width:` (edge/leg thickness)
|
|
82
|
-
// — each mirrors its directive (`region-heat`/`poi-size`/`flow-width`). All three
|
|
83
|
-
// are reserved so a wrong-channel key (e.g. `size:` on a region) lands in meta and
|
|
84
|
-
// the parser can reject it (§24B.10) instead of silently becoming a tag. `style`
|
|
85
|
-
// is the route/edge shape key. `description`/`date` had no v1 surface (they raise
|
|
86
|
-
// an unknown-key error rather than silently no-op).
|
|
87
|
-
export const MAP_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
88
|
-
'heat',
|
|
89
|
-
'size',
|
|
90
|
-
'width',
|
|
91
|
-
'label',
|
|
92
|
-
'style',
|
|
93
|
-
// `surface:` was removed in the 2026-06-02 defaults-on review — it is no longer
|
|
94
|
-
// a recognized metadata key (the route/edge surface feature was cut; §24B.7).
|
|
95
|
-
// A stray `surface: water` is no longer captured as a reserved key.
|
|
96
|
-
]);
|
|
97
|
-
|
|
98
|
-
export const ORG_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
99
|
-
'color',
|
|
100
|
-
'description',
|
|
101
|
-
'role',
|
|
102
|
-
'location',
|
|
103
|
-
'email',
|
|
104
|
-
'phone',
|
|
105
|
-
]);
|
|
106
|
-
|
|
107
|
-
export const C4_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
108
|
-
'color',
|
|
109
|
-
'description',
|
|
110
|
-
'tech',
|
|
111
|
-
'type',
|
|
112
|
-
'collapsed',
|
|
113
|
-
]);
|
|
114
|
-
|
|
115
|
-
export const ER_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
116
|
-
'color',
|
|
117
|
-
'description',
|
|
118
|
-
'domain',
|
|
119
|
-
]);
|
|
120
|
-
|
|
121
|
-
// event-line carries the date as a §15-style line-prefix (not a key) and the
|
|
122
|
-
// description as a pyramid/ring-style bare indented body (not a key), so the
|
|
123
|
-
// only static reserved key is `color`; tag aliases are added per-parse via
|
|
124
|
-
// withTagAliases. See spec §28 / decision #16.
|
|
125
|
-
export const EVENT_LINE_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
126
|
-
'color',
|
|
127
|
-
]);
|
|
128
|
-
|
|
129
|
-
export const KANBAN_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
130
|
-
'color',
|
|
131
|
-
'description',
|
|
132
|
-
'wip',
|
|
133
|
-
'assignee',
|
|
134
|
-
'due',
|
|
135
|
-
'collapsed', // `[Column] collapsed: true` view-state marker
|
|
136
|
-
]);
|
|
137
|
-
|
|
138
|
-
export const SITEMAP_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
139
|
-
'color',
|
|
140
|
-
'description',
|
|
141
|
-
'status',
|
|
142
|
-
]);
|
|
143
|
-
|
|
144
|
-
export const GANTT_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
145
|
-
'color',
|
|
146
|
-
'description',
|
|
147
|
-
'duration',
|
|
148
|
-
'offset',
|
|
149
|
-
'progress',
|
|
150
|
-
'start',
|
|
151
|
-
'collapsed', // `[Group] collapsed: true` view-state marker
|
|
152
|
-
]);
|
|
153
|
-
|
|
154
|
-
export const PERT_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
155
|
-
'color',
|
|
156
|
-
'description',
|
|
157
|
-
'confidence',
|
|
158
|
-
'collapsed',
|
|
159
|
-
]);
|
|
160
|
-
|
|
161
|
-
// `width`/`split`/`fanout` were copy-pasted from an infra-flavored template
|
|
162
|
-
// during the §1.4 metadata migration but boxes-and-lines never read them
|
|
163
|
-
// (split/fanout are infra-only edge-flow keys, consumed in src/infra/*). Removed
|
|
164
|
-
// 2026-06-03. The numeric ramp is `heat:` (decision #20 — value→colour ramp,
|
|
165
|
-
// same channel word as treemap + map `region-heat`; was `value:`).
|
|
166
|
-
export const BOXES_AND_LINES_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
167
|
-
'color',
|
|
168
|
-
'description',
|
|
169
|
-
'heat',
|
|
170
|
-
]);
|
|
171
|
-
|
|
172
|
-
export const TIMELINE_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
173
|
-
'color',
|
|
174
|
-
'description',
|
|
175
|
-
'duration',
|
|
176
|
-
]);
|
|
177
|
-
|
|
178
|
-
export const MINDMAP_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
179
|
-
'color',
|
|
180
|
-
'description',
|
|
181
|
-
'collapsed',
|
|
182
|
-
]);
|
|
183
|
-
|
|
184
|
-
export const TECH_RADAR_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
185
|
-
'color',
|
|
186
|
-
'description',
|
|
187
|
-
'quadrant',
|
|
188
|
-
'ring',
|
|
189
|
-
'trend',
|
|
190
|
-
]);
|
|
191
|
-
|
|
192
|
-
export const CYCLE_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
193
|
-
'color',
|
|
194
|
-
'description',
|
|
195
|
-
'width',
|
|
196
|
-
'span',
|
|
197
|
-
]);
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Journey-map: `score` and `emotion` replace the legacy bare-prefix
|
|
201
|
-
* positional shape. Annotation keys (`pain`, `opportunity`, `thought`)
|
|
202
|
-
* are also reserved so indented annotations dispatch correctly.
|
|
203
|
-
*/
|
|
204
|
-
export const JOURNEY_MAP_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
205
|
-
'color',
|
|
206
|
-
'description',
|
|
207
|
-
'score',
|
|
208
|
-
'emotion',
|
|
209
|
-
'pain',
|
|
210
|
-
'opportunity',
|
|
211
|
-
'thought',
|
|
212
|
-
]);
|
|
213
|
-
|
|
214
|
-
export const PYRAMID_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
215
|
-
'color',
|
|
216
|
-
'description',
|
|
217
|
-
]);
|
|
218
|
-
|
|
219
|
-
export const RING_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
220
|
-
'color',
|
|
221
|
-
'description',
|
|
222
|
-
]);
|
|
223
|
-
|
|
224
|
-
// Treemap: only `heat` (the color-by-value metric) is a reserved attribute key.
|
|
225
|
-
// Node SIZE is the bare trailing number (not a `value:` key — §1.5 idiom), and
|
|
226
|
-
// tag application uses declared tag aliases (added dynamically via withTagAliases).
|
|
227
|
-
export const TREEMAP_REGISTRY: ReservedKeyRegistry = staticRegistry(['heat']);
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* RACI/RASCI/DACI: only `color` and `description` are reserved as
|
|
231
|
-
* attribute keys. Role names declared via `roles` block are
|
|
232
|
-
* registered via a SEPARATE role-dispatch path (not through this
|
|
233
|
-
* registry), because `Cap: A R` is a role assignment, not generic
|
|
234
|
-
* metadata.
|
|
235
|
-
*/
|
|
236
|
-
export const RACI_REGISTRY: ReservedKeyRegistry = staticRegistry([
|
|
237
|
-
'color',
|
|
238
|
-
'description',
|
|
239
|
-
]);
|
package/src/utils/safe-href.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Protocol allowlist for user-supplied URLs emitted into rendered SVG/HTML.
|
|
3
|
-
*
|
|
4
|
-
* Returns the input URL unchanged when its scheme is `http:`, `https:`,
|
|
5
|
-
* `mailto:`, or it is a relative path (`./…`, `/…`, `../…`, `#…`, or no
|
|
6
|
-
* scheme at all). Returns `null` for any other scheme — `javascript:`,
|
|
7
|
-
* `data:`, `vbscript:`, `file:`, etc. — so callers can drop the link or
|
|
8
|
-
* render the text as plain text.
|
|
9
|
-
*
|
|
10
|
-
* The check is whitespace-tolerant and case-insensitive on the scheme,
|
|
11
|
-
* matching the parsing rules browsers apply when resolving an `href`.
|
|
12
|
-
*/
|
|
13
|
-
const ALLOWED_SCHEMES = ['http', 'https', 'mailto'] as const;
|
|
14
|
-
const SCHEME_RE = /^([a-z][a-z0-9+.-]*):/i;
|
|
15
|
-
|
|
16
|
-
// Browsers strip leading C0 control characters and ASCII whitespace before
|
|
17
|
-
// resolving a URL, so `\tjavascript:` would still execute. Mirror that here.
|
|
18
|
-
// eslint-disable-next-line no-control-regex
|
|
19
|
-
const LEADING_TRIM_RE = /^[\x00-\x20]+/;
|
|
20
|
-
|
|
21
|
-
export function safeHref(url: string | undefined | null): string | null {
|
|
22
|
-
if (typeof url !== 'string') return null;
|
|
23
|
-
const trimmed = url.replace(LEADING_TRIM_RE, '');
|
|
24
|
-
if (trimmed.length === 0) return null;
|
|
25
|
-
|
|
26
|
-
const match = SCHEME_RE.exec(trimmed);
|
|
27
|
-
if (!match) {
|
|
28
|
-
// No scheme — relative path / fragment / query. Allow.
|
|
29
|
-
return url;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Capture group 1 always exists when SCHEME_RE matches.
|
|
33
|
-
const scheme = match[1]!.toLowerCase();
|
|
34
|
-
if ((ALLOWED_SCHEMES as readonly string[]).includes(scheme)) {
|
|
35
|
-
return url;
|
|
36
|
-
}
|
|
37
|
-
return null;
|
|
38
|
-
}
|
package/src/utils/scaling.ts
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
const DEFAULT_MIN_SCALE_FACTOR = 0.5;
|
|
2
|
-
const TEXT_FLOOR = 9;
|
|
3
|
-
|
|
4
|
-
export class ScaleContext {
|
|
5
|
-
readonly factor: number;
|
|
6
|
-
readonly isBelowFloor: boolean;
|
|
7
|
-
|
|
8
|
-
private constructor(factor: number, minScaleFactor: number) {
|
|
9
|
-
this.factor = factor;
|
|
10
|
-
this.isBelowFloor = factor <= minScaleFactor;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
static from(
|
|
14
|
-
containerSize: number,
|
|
15
|
-
idealSize: number,
|
|
16
|
-
minScaleFactor = DEFAULT_MIN_SCALE_FACTOR
|
|
17
|
-
): ScaleContext {
|
|
18
|
-
if (idealSize <= 0) return ScaleContext.identity();
|
|
19
|
-
const raw = containerSize / idealSize;
|
|
20
|
-
const clamped = Math.max(Math.min(raw, 1), minScaleFactor);
|
|
21
|
-
return new ScaleContext(clamped, minScaleFactor);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Fit content into a bounding box, scaling by whichever dimension is more
|
|
26
|
-
* constraining (the smaller of the width- and height-fit ratios) so the
|
|
27
|
-
* diagram never overflows the canvas in either axis. Like {@link from}, the
|
|
28
|
-
* factor is clamped to `[minScaleFactor, 1]` (content is never enlarged, and
|
|
29
|
-
* never shrunk past the readability floor).
|
|
30
|
-
*/
|
|
31
|
-
static fromBox(
|
|
32
|
-
containerWidth: number,
|
|
33
|
-
idealWidth: number,
|
|
34
|
-
containerHeight: number,
|
|
35
|
-
idealHeight: number,
|
|
36
|
-
minScaleFactor = DEFAULT_MIN_SCALE_FACTOR
|
|
37
|
-
): ScaleContext {
|
|
38
|
-
const wRaw = idealWidth > 0 ? containerWidth / idealWidth : 1;
|
|
39
|
-
const hRaw = idealHeight > 0 ? containerHeight / idealHeight : 1;
|
|
40
|
-
const raw = Math.min(wRaw, hRaw);
|
|
41
|
-
const clamped = Math.max(Math.min(raw, 1), minScaleFactor);
|
|
42
|
-
return new ScaleContext(clamped, minScaleFactor);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Build a context from an explicit raw factor (clamped to
|
|
47
|
-
* `[minScaleFactor, 1]`). Used to refine a fit iteratively: layout scaling is
|
|
48
|
-
* non-linear (gaps shrink faster than floored text), so the first-pass factor
|
|
49
|
-
* can still overflow — re-measure the laid-out result and tighten.
|
|
50
|
-
*/
|
|
51
|
-
static fromFactor(
|
|
52
|
-
rawFactor: number,
|
|
53
|
-
minScaleFactor = DEFAULT_MIN_SCALE_FACTOR
|
|
54
|
-
): ScaleContext {
|
|
55
|
-
const clamped = Math.max(Math.min(rawFactor, 1), minScaleFactor);
|
|
56
|
-
return new ScaleContext(clamped, minScaleFactor);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
static identity(): ScaleContext {
|
|
60
|
-
return new ScaleContext(1, DEFAULT_MIN_SCALE_FACTOR);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
aesthetic(value: number): number {
|
|
64
|
-
if (this.factor >= 1) return value;
|
|
65
|
-
return value * this.factor ** 1.5;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
structural(value: number): number {
|
|
69
|
-
if (this.factor >= 1) return value;
|
|
70
|
-
return value * this.factor;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
text(fontSize: number, floor = TEXT_FLOOR): number {
|
|
74
|
-
if (this.factor >= 1) return fontSize;
|
|
75
|
-
return Math.max(fontSize * this.factor, floor);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// ============================================================
|
|
80
|
-
// ContentCounts — per-chart-type content tallies that feed the registry's
|
|
81
|
-
// `minDims` formulas (chart-type-registry.ts). The formulas themselves moved
|
|
82
|
-
// there (Story 111.5) so a chart type's sizing is defined in one descriptor.
|
|
83
|
-
// ============================================================
|
|
84
|
-
|
|
85
|
-
export interface ContentCounts {
|
|
86
|
-
items?: number;
|
|
87
|
-
columns?: number;
|
|
88
|
-
rows?: number;
|
|
89
|
-
participants?: number;
|
|
90
|
-
nodes?: number;
|
|
91
|
-
depth?: number;
|
|
92
|
-
messages?: number;
|
|
93
|
-
tasks?: number;
|
|
94
|
-
roles?: number;
|
|
95
|
-
blips?: number;
|
|
96
|
-
lanes?: number;
|
|
97
|
-
}
|
package/src/utils/svg-embed.ts
DELETED
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Make an SVG produced by `@diagrammo/dgmo`'s static `render()` suitable for
|
|
3
|
-
* responsive inline embedding in any host (Obsidian, remark/markdown, web
|
|
4
|
-
* pages):
|
|
5
|
-
*
|
|
6
|
-
* - dgmo renders diagrams inside a fixed export canvas (e.g.
|
|
7
|
-
* `viewBox="0 0 1200 800"`), with content often occupying only a fraction
|
|
8
|
-
* of it. We compute a tight content bounding box from element coordinates
|
|
9
|
-
* and set the root `viewBox` to bbox+padding, so the diagram's intrinsic
|
|
10
|
-
* aspect ratio matches its CONTENT — no dead space above/below or beside it.
|
|
11
|
-
* - Ensure the root `<svg>` has a `viewBox` so it scales responsively.
|
|
12
|
-
* - Strip fixed `width="N"` / `height="N"` so CSS (e.g. `width:100%;
|
|
13
|
-
* height:auto`, or an aspect-ratio derived from the tight viewBox) controls
|
|
14
|
-
* sizing.
|
|
15
|
-
* - Remove any inline `background:` from the root style so the page
|
|
16
|
-
* background shows through.
|
|
17
|
-
*
|
|
18
|
-
* This is intentionally a string transform, not a DOM `getBBox()` step: dgmo
|
|
19
|
-
* can dual-render light/dark SVGs where one is hidden by color-mode CSS, and
|
|
20
|
-
* `getBBox()` returns 0 for the hidden copy. Parsing coordinates from the
|
|
21
|
-
* markup measures both copies reliably and works server-side (Node).
|
|
22
|
-
*/
|
|
23
|
-
export function normalizeSvgForEmbed(input: string): string {
|
|
24
|
-
let svg = input;
|
|
25
|
-
const rootMatch = svg.match(/<svg[^>]*>/);
|
|
26
|
-
const rootTag = rootMatch?.[0] ?? '';
|
|
27
|
-
if (rootTag && !rootTag.includes('viewBox')) {
|
|
28
|
-
const wh = rootTag.match(/width="(\d+)"[^>]*height="(\d+)"/);
|
|
29
|
-
if (wh) {
|
|
30
|
-
svg = svg.replace(/<svg/, `<svg viewBox="0 0 ${wh[1]} ${wh[2]}"`);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const tight = computeBBox(svg);
|
|
35
|
-
if (tight && tight.width > 0 && tight.height > 0) {
|
|
36
|
-
const pad = 16;
|
|
37
|
-
const x = tight.x - pad;
|
|
38
|
-
const y = tight.y - pad;
|
|
39
|
-
const w = tight.width + pad * 2;
|
|
40
|
-
const h = tight.height + pad * 2;
|
|
41
|
-
// The renderer's viewBox is authoritative; computeBBox may only shave dead
|
|
42
|
-
// margins off it. computeBBox is a best-effort string parser with two
|
|
43
|
-
// failure modes, and the renderer's canvas bounds catch both:
|
|
44
|
-
// 1. OVER-shoot — it misreads path arc commands (`A rx ry rot … x y`) and
|
|
45
|
-
// yields a box that strays OUTSIDE the canvas (negative origin /
|
|
46
|
-
// over-wide). Applying it shifts the viewBox and CLIPS the diagram.
|
|
47
|
-
// 2. UNDER-shoot — it can't see elements positioned via `transform`
|
|
48
|
-
// (no x/y attrs), e.g. word-cloud words. It then measures only the
|
|
49
|
-
// stragglers (the title) and collapses the box to a tiny region,
|
|
50
|
-
// zooming that fragment to fill the frame.
|
|
51
|
-
// So only tighten when the computed box sits WITHIN the canvas AND still
|
|
52
|
-
// covers most of it; otherwise keep the renderer's correct bounds.
|
|
53
|
-
const canvas = readViewBox(svg);
|
|
54
|
-
const TOL = 2;
|
|
55
|
-
const MIN_COVERAGE = 0.5; // a real trim shaves margins, not the diagram
|
|
56
|
-
const trustworthy =
|
|
57
|
-
!canvas ||
|
|
58
|
-
(x >= canvas.x - TOL &&
|
|
59
|
-
y >= canvas.y - TOL &&
|
|
60
|
-
x + w <= canvas.x + canvas.width + TOL &&
|
|
61
|
-
y + h <= canvas.y + canvas.height + TOL &&
|
|
62
|
-
w >= canvas.width * MIN_COVERAGE &&
|
|
63
|
-
h >= canvas.height * MIN_COVERAGE);
|
|
64
|
-
if (trustworthy) {
|
|
65
|
-
const vb = `${x} ${y} ${w} ${h}`;
|
|
66
|
-
svg = svg.replace(/(<svg[^>]*?)viewBox="[^"]*"/, `$1viewBox="${vb}"`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
svg = svg.replace(/(<svg[^>]*?) width="[^"]*"/g, '$1');
|
|
71
|
-
svg = svg.replace(/(<svg[^>]*?) height="[^"]*"/g, '$1');
|
|
72
|
-
svg = svg.replace(/(<svg[^>]*?style="[^"]*?)background:[^;"]*;?\s*/g, '$1');
|
|
73
|
-
svg = svg.replace(/<svg\s{2,}/g, '<svg ');
|
|
74
|
-
return svg;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Parse the content bounding box of a normalized embed SVG, if one can be
|
|
79
|
-
* derived. Returns `null` when no usable coordinates are found (e.g. an empty
|
|
80
|
-
* diagram). Useful for hosts that want to set an explicit `aspect-ratio` from
|
|
81
|
-
* the tight viewBox.
|
|
82
|
-
*/
|
|
83
|
-
export function getEmbedSvgViewBox(
|
|
84
|
-
svg: string
|
|
85
|
-
): { x: number; y: number; width: number; height: number } | null {
|
|
86
|
-
const tight = computeBBox(svg);
|
|
87
|
-
if (!tight || tight.width <= 0 || tight.height <= 0) return null;
|
|
88
|
-
const pad = 16;
|
|
89
|
-
return {
|
|
90
|
-
x: tight.x - pad,
|
|
91
|
-
y: tight.y - pad,
|
|
92
|
-
width: tight.width + pad * 2,
|
|
93
|
-
height: tight.height + pad * 2,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** Read the root `<svg>` viewBox as numbers, if present and well-formed. */
|
|
98
|
-
function readViewBox(
|
|
99
|
-
svg: string
|
|
100
|
-
): { x: number; y: number; width: number; height: number } | null {
|
|
101
|
-
const m = svg.match(/<svg[^>]*?\bviewBox="([^"]+)"/);
|
|
102
|
-
if (!m) return null;
|
|
103
|
-
const n = m[1]!
|
|
104
|
-
.trim()
|
|
105
|
-
.split(/[\s,]+/)
|
|
106
|
-
.map(Number);
|
|
107
|
-
if (
|
|
108
|
-
n.length !== 4 ||
|
|
109
|
-
n.some((v) => !Number.isFinite(v)) ||
|
|
110
|
-
n[2]! <= 0 ||
|
|
111
|
-
n[3]! <= 0
|
|
112
|
-
)
|
|
113
|
-
return null;
|
|
114
|
-
return { x: n[0]!, y: n[1]!, width: n[2]!, height: n[3]! };
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Compute an approximate content bounding box from raw element coordinates.
|
|
119
|
-
*
|
|
120
|
-
* This is a regex walk, not a real SVG layout — it ignores `transform`
|
|
121
|
-
* attributes and uses a heuristic for text widths. dgmo's renderers mostly use
|
|
122
|
-
* absolute coordinates within their viewBox, so the approximation is close
|
|
123
|
-
* enough that the rendered output reliably fills the visible area.
|
|
124
|
-
*/
|
|
125
|
-
function computeBBox(
|
|
126
|
-
svg: string
|
|
127
|
-
): { x: number; y: number; width: number; height: number } | null {
|
|
128
|
-
const xs: number[] = [];
|
|
129
|
-
const ys: number[] = [];
|
|
130
|
-
|
|
131
|
-
function push(x: number, y: number): void {
|
|
132
|
-
if (Number.isFinite(x) && Number.isFinite(y)) {
|
|
133
|
-
xs.push(x);
|
|
134
|
-
ys.push(y);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function attr(tag: string, name: string): number | null {
|
|
139
|
-
const m = tag.match(new RegExp(`\\b${name}="([^"]*)"`));
|
|
140
|
-
if (!m) return null;
|
|
141
|
-
const n = parseFloat(m[1]!);
|
|
142
|
-
return Number.isFinite(n) ? n : null;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// <rect x y width height>
|
|
146
|
-
for (const m of svg.matchAll(/<rect\b[^>]*?\/?>/g)) {
|
|
147
|
-
const tag = m[0];
|
|
148
|
-
const x = attr(tag, 'x');
|
|
149
|
-
const y = attr(tag, 'y');
|
|
150
|
-
const w = attr(tag, 'width');
|
|
151
|
-
const h = attr(tag, 'height');
|
|
152
|
-
if (x !== null && y !== null && w !== null && h !== null) {
|
|
153
|
-
push(x, y);
|
|
154
|
-
push(x + w, y + h);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// <line x1 y1 x2 y2>
|
|
159
|
-
for (const m of svg.matchAll(/<line\b[^>]*?\/?>/g)) {
|
|
160
|
-
const tag = m[0];
|
|
161
|
-
const x1 = attr(tag, 'x1');
|
|
162
|
-
const y1 = attr(tag, 'y1');
|
|
163
|
-
const x2 = attr(tag, 'x2');
|
|
164
|
-
const y2 = attr(tag, 'y2');
|
|
165
|
-
if (x1 !== null && y1 !== null && x2 !== null && y2 !== null) {
|
|
166
|
-
push(x1, y1);
|
|
167
|
-
push(x2, y2);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// <circle cx cy r>
|
|
172
|
-
for (const m of svg.matchAll(/<circle\b[^>]*?\/?>/g)) {
|
|
173
|
-
const tag = m[0];
|
|
174
|
-
const cx = attr(tag, 'cx');
|
|
175
|
-
const cy = attr(tag, 'cy');
|
|
176
|
-
const r = attr(tag, 'r');
|
|
177
|
-
if (cx !== null && cy !== null && r !== null) {
|
|
178
|
-
push(cx - r, cy - r);
|
|
179
|
-
push(cx + r, cy + r);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// <ellipse cx cy rx ry>
|
|
184
|
-
for (const m of svg.matchAll(/<ellipse\b[^>]*?\/?>/g)) {
|
|
185
|
-
const tag = m[0];
|
|
186
|
-
const cx = attr(tag, 'cx');
|
|
187
|
-
const cy = attr(tag, 'cy');
|
|
188
|
-
const rx = attr(tag, 'rx');
|
|
189
|
-
const ry = attr(tag, 'ry');
|
|
190
|
-
if (cx !== null && cy !== null && rx !== null && ry !== null) {
|
|
191
|
-
push(cx - rx, cy - ry);
|
|
192
|
-
push(cx + rx, cy + ry);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// <text x y>some content</text>
|
|
197
|
-
// Approximate width: text content length × an empirical font width factor.
|
|
198
|
-
// dgmo uses Inter ~14px by default; ~7px per character is a usable rough
|
|
199
|
-
// estimate that won't drastically under- or over-count.
|
|
200
|
-
for (const m of svg.matchAll(/<text\b([^>]*?)>([\s\S]*?)<\/text>/g)) {
|
|
201
|
-
const tag = `<text${m[1]}>`;
|
|
202
|
-
const text = m[2]!.replace(/<[^>]+>/g, ''); // strip inner tags (tspan, etc.)
|
|
203
|
-
const x = attr(tag, 'x');
|
|
204
|
-
const y = attr(tag, 'y');
|
|
205
|
-
if (x !== null && y !== null) {
|
|
206
|
-
const w = text.length * 7;
|
|
207
|
-
// Honor text-anchor so the horizontal extent points the right way:
|
|
208
|
-
// `start` (SVG default) grows rightward from x, `end` grows leftward,
|
|
209
|
-
// `middle` straddles x. Assuming middle for everything under-measures
|
|
210
|
-
// start-anchored text (e.g. pyramid right-column descriptions), which
|
|
211
|
-
// collapses the tight viewBox and clips that text in embeds.
|
|
212
|
-
const anchor = tag.match(/\btext-anchor="([^"]*)"/)?.[1] ?? 'start';
|
|
213
|
-
const left =
|
|
214
|
-
anchor === 'middle' ? x - w / 2 : anchor === 'end' ? x - w : x;
|
|
215
|
-
const right =
|
|
216
|
-
anchor === 'middle' ? x + w / 2 : anchor === 'end' ? x : x + w;
|
|
217
|
-
push(left, y - 14);
|
|
218
|
-
push(right, y + 4);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// <path d="..."> — pull every coordinate pair out of the d attribute.
|
|
223
|
-
for (const m of svg.matchAll(/<path\b[^>]*?\bd="([^"]+)"/g)) {
|
|
224
|
-
const d = m[1]!;
|
|
225
|
-
const nums = d.match(/-?\d+(?:\.\d+)?/g);
|
|
226
|
-
if (!nums) continue;
|
|
227
|
-
for (let i = 0; i + 1 < nums.length; i += 2) {
|
|
228
|
-
push(parseFloat(nums[i]!), parseFloat(nums[i + 1]!));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// <polygon points="x,y x,y ..."> and <polyline>
|
|
233
|
-
for (const m of svg.matchAll(
|
|
234
|
-
/<(?:polygon|polyline)\b[^>]*?\bpoints="([^"]+)"/g
|
|
235
|
-
)) {
|
|
236
|
-
const nums = m[1]!.match(/-?\d+(?:\.\d+)?/g);
|
|
237
|
-
if (!nums) continue;
|
|
238
|
-
for (let i = 0; i + 1 < nums.length; i += 2) {
|
|
239
|
-
push(parseFloat(nums[i]!), parseFloat(nums[i + 1]!));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (xs.length === 0 || ys.length === 0) return null;
|
|
244
|
-
|
|
245
|
-
const minX = Math.min(...xs);
|
|
246
|
-
const maxX = Math.max(...xs);
|
|
247
|
-
const minY = Math.min(...ys);
|
|
248
|
-
const maxY = Math.max(...ys);
|
|
249
|
-
|
|
250
|
-
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
251
|
-
}
|