@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
package/src/utils/arrows.ts
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Shared Arrow Parsing Utility
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// Labeled arrow syntax (always left-to-right):
|
|
6
|
-
// Sync: `-label->`
|
|
7
|
-
// Async: `~label~>`
|
|
8
|
-
//
|
|
9
|
-
// In-arrow label character-set contract (see docs/dgmo-language-spec.md
|
|
10
|
-
// §"In-Arrow Message Labels"):
|
|
11
|
-
// - Allowed: any codepoint except the forbidden substrings and forbidden
|
|
12
|
-
// control characters below.
|
|
13
|
-
// - Forbidden substrings: "->", "~>" (arrow-token lookalikes inside labels).
|
|
14
|
-
// Use the post-colon form for labels that need these symbols:
|
|
15
|
-
// `A -> B: uses -> to chain`
|
|
16
|
-
// - Forbidden characters: C0 control chars U+0000–U+001F EXCEPT U+0009 (tab),
|
|
17
|
-
// and U+007F (DEL).
|
|
18
|
-
// - Whitespace: leading/trailing trimmed; internal runs (incl. tab, NBSP,
|
|
19
|
-
// ZWSP) preserved — never collapsed.
|
|
20
|
-
// - Plain text only: no markdown interpretation. `*`, `_`, backticks,
|
|
21
|
-
// `[`, `]`, `{`, `}` are literal characters.
|
|
22
|
-
|
|
23
|
-
import type { DgmoError } from '../diagnostics';
|
|
24
|
-
import { makeDgmoError } from '../diagnostics';
|
|
25
|
-
|
|
26
|
-
interface ParsedArrow {
|
|
27
|
-
from: string;
|
|
28
|
-
to: string;
|
|
29
|
-
label: string;
|
|
30
|
-
async: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ============================================================
|
|
34
|
-
// Diagnostic codes (TD-16)
|
|
35
|
-
// ============================================================
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Stable diagnostic codes for in-arrow label parsing errors.
|
|
39
|
-
*
|
|
40
|
-
* **Active codes** — emitted by the parser pipeline today:
|
|
41
|
-
* - `ARROW_SUBSTRING_IN_LABEL` (TD-13)
|
|
42
|
-
* - `CONTROL_CHAR_IN_LABEL` (TD-14)
|
|
43
|
-
*
|
|
44
|
-
* See `docs/dgmo-language-spec-decisions.md` → TD-16 for the rationale.
|
|
45
|
-
*/
|
|
46
|
-
export const ARROW_DIAGNOSTIC_CODES = {
|
|
47
|
-
/** Active: label contains `->` or `~>` substring (TD-13). */
|
|
48
|
-
ARROW_SUBSTRING_IN_LABEL: 'E_ARROW_SUBSTRING_IN_LABEL',
|
|
49
|
-
/** Active: label contains a forbidden control character (TD-14). */
|
|
50
|
-
CONTROL_CHAR_IN_LABEL: 'E_CONTROL_CHAR_IN_LABEL',
|
|
51
|
-
} as const;
|
|
52
|
-
|
|
53
|
-
// ============================================================
|
|
54
|
-
// validateLabelCharacters (TD-13, TD-14)
|
|
55
|
-
// ============================================================
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Validate an in-arrow label against the TD-13 and TD-14 character-set
|
|
59
|
-
* contract. Returns diagnostics (possibly empty). Does NOT mutate the label —
|
|
60
|
-
* callers that want a normalized label should trim before calling.
|
|
61
|
-
*
|
|
62
|
-
* TD-13: label must not contain the substrings "->" or "~>".
|
|
63
|
-
* TD-14: label must not contain C0 control chars other than tab, and no DEL.
|
|
64
|
-
*/
|
|
65
|
-
export function validateLabelCharacters(
|
|
66
|
-
label: string,
|
|
67
|
-
lineNumber: number
|
|
68
|
-
): DgmoError[] {
|
|
69
|
-
const out: DgmoError[] = [];
|
|
70
|
-
|
|
71
|
-
// TD-13: forbidden substrings
|
|
72
|
-
if (label.includes('->') || label.includes('~>')) {
|
|
73
|
-
out.push(
|
|
74
|
-
makeDgmoError(
|
|
75
|
-
lineNumber,
|
|
76
|
-
'Arrow symbols (-> or ~>) are not allowed inside a label. ' +
|
|
77
|
-
'Move the label after the arrow: "A -> B: uses -> to chain". ' +
|
|
78
|
-
'See "In-Arrow Message Labels" → Forbidden.',
|
|
79
|
-
'error',
|
|
80
|
-
ARROW_DIAGNOSTIC_CODES.ARROW_SUBSTRING_IN_LABEL
|
|
81
|
-
)
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// TD-14: control chars (iterate codepoints to handle surrogate pairs)
|
|
86
|
-
for (const ch of label) {
|
|
87
|
-
const cp = ch.codePointAt(0)!;
|
|
88
|
-
const isC0 = cp >= 0x00 && cp <= 0x1f && cp !== 0x09; // allow tab
|
|
89
|
-
const isDel = cp === 0x7f;
|
|
90
|
-
if (isC0 || isDel) {
|
|
91
|
-
const hex = cp.toString(16).toUpperCase().padStart(4, '0');
|
|
92
|
-
out.push(
|
|
93
|
-
makeDgmoError(
|
|
94
|
-
lineNumber,
|
|
95
|
-
`Label contains a control character (U+${hex}). ` +
|
|
96
|
-
'Remove it and use plain text.',
|
|
97
|
-
'error',
|
|
98
|
-
ARROW_DIAGNOSTIC_CODES.CONTROL_CHAR_IN_LABEL
|
|
99
|
-
)
|
|
100
|
-
);
|
|
101
|
-
break; // one diagnostic per label is enough
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return out;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// ============================================================
|
|
109
|
-
// parseInArrowLabel (TD-1, TD-8, TD-10, TD-13, TD-14)
|
|
110
|
-
// ============================================================
|
|
111
|
-
|
|
112
|
-
export interface ParseInArrowLabelResult {
|
|
113
|
-
/** Cleaned label (trimmed; `undefined` if empty after trim per TD-10). */
|
|
114
|
-
label: string | undefined;
|
|
115
|
-
diagnostics: DgmoError[];
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Normalize and validate a raw in-arrow label.
|
|
120
|
-
*
|
|
121
|
-
* Behavior:
|
|
122
|
-
* - Trims leading/trailing whitespace (TD-8: internal whitespace preserved).
|
|
123
|
-
* - Empty-after-trim → `{ label: undefined }` (TD-10 normalization).
|
|
124
|
-
* - TD-13: emits `E_ARROW_SUBSTRING_IN_LABEL` if `->` or `~>` is present.
|
|
125
|
-
* - TD-14: emits `E_CONTROL_CHAR_IN_LABEL` for forbidden control chars.
|
|
126
|
-
*
|
|
127
|
-
* This helper is intentionally chart-agnostic: it operates on an already
|
|
128
|
-
* extracted label string, leaving each chart's existing arrow-finding
|
|
129
|
-
* tokenization in place. Edges no longer have a color slot on any chart
|
|
130
|
-
* type (see spec §1.7 "Edge color is not a feature"); arrow content is
|
|
131
|
-
* pure label text.
|
|
132
|
-
*/
|
|
133
|
-
export function parseInArrowLabel(
|
|
134
|
-
rawLabel: string,
|
|
135
|
-
lineNumber: number
|
|
136
|
-
): ParseInArrowLabelResult {
|
|
137
|
-
const trimmed = rawLabel.trim();
|
|
138
|
-
|
|
139
|
-
// TD-10: empty/whitespace-only label normalizes to undefined
|
|
140
|
-
if (trimmed.length === 0) {
|
|
141
|
-
return { label: undefined, diagnostics: [] };
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// TD-13 / TD-14 validation
|
|
145
|
-
const diagnostics = validateLabelCharacters(trimmed, lineNumber);
|
|
146
|
-
|
|
147
|
-
return { label: trimmed, diagnostics };
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Forward (call) patterns — participant names may contain spaces, so use non-greedy (.+?)
|
|
151
|
-
const SYNC_LABELED_RE = /^(.+?)\s*-(.+)->\s*(.+)$/;
|
|
152
|
-
const ASYNC_LABELED_RE = /^(.+?)\s*~(.+)~>\s*(.+)$/;
|
|
153
|
-
|
|
154
|
-
// Deprecated patterns — produce errors
|
|
155
|
-
const RETURN_SYNC_LABELED_RE = /^(.+?)\s*<-(.+)-\s*(.+)$/;
|
|
156
|
-
const RETURN_ASYNC_LABELED_RE = /^(.+?)\s*<~(.+)~\s*(.+)$/;
|
|
157
|
-
const BIDI_SYNC_RE = /^(.+?)\s*<-(.+)->\s*(.+)$/;
|
|
158
|
-
const BIDI_ASYNC_RE = /^(.+?)\s*<~(.+)~>\s*(.+)$/;
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Try to parse a labeled arrow from a trimmed line.
|
|
162
|
-
*
|
|
163
|
-
* Returns:
|
|
164
|
-
* - `ParsedArrow` if matched and valid
|
|
165
|
-
* - `{ error: string }` if matched but invalid (deprecated syntax)
|
|
166
|
-
* - `null` if not a labeled arrow (caller should fall through to bare patterns)
|
|
167
|
-
*
|
|
168
|
-
* Note: arrow-char-in-label validation (TD-13) is NOT performed here —
|
|
169
|
-
* callers must route the returned `label` through `parseInArrowLabel` or
|
|
170
|
-
* `validateLabelCharacters` to get the unified `E_ARROW_SUBSTRING_IN_LABEL`
|
|
171
|
-
* diagnostic with the correct code. In practice this path is unreachable
|
|
172
|
-
* because arrow regexes are greedy enough to absorb inner `->`/`~>` tokens
|
|
173
|
-
* into the source/destination captures, but the check remains at the
|
|
174
|
-
* validator level for defense in depth.
|
|
175
|
-
*/
|
|
176
|
-
export function parseArrow(
|
|
177
|
-
line: string
|
|
178
|
-
): ParsedArrow | { error: string } | null {
|
|
179
|
-
// Check bidi patterns first — return error
|
|
180
|
-
if (BIDI_SYNC_RE.test(line) || BIDI_ASYNC_RE.test(line)) {
|
|
181
|
-
return {
|
|
182
|
-
error:
|
|
183
|
-
"Bidirectional arrows are no longer supported. Use two separate lines: 'A -msg-> B' and 'B -msg-> A'",
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Check deprecated return arrow patterns — return error
|
|
188
|
-
if (RETURN_SYNC_LABELED_RE.test(line) || RETURN_ASYNC_LABELED_RE.test(line)) {
|
|
189
|
-
const m =
|
|
190
|
-
line.match(RETURN_SYNC_LABELED_RE) ?? line.match(RETURN_ASYNC_LABELED_RE);
|
|
191
|
-
// RETURN_*_LABELED_RE both have 3 capture groups by construction.
|
|
192
|
-
const from = m![3]!;
|
|
193
|
-
const to = m![1]!;
|
|
194
|
-
const label = m![2]!.trim();
|
|
195
|
-
return {
|
|
196
|
-
error: `Left-pointing arrows are no longer supported. Write '${from} -${label}-> ${to}' instead`,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
const patterns: {
|
|
201
|
-
re: RegExp;
|
|
202
|
-
async: boolean;
|
|
203
|
-
}[] = [
|
|
204
|
-
{ re: SYNC_LABELED_RE, async: false },
|
|
205
|
-
{ re: ASYNC_LABELED_RE, async: true },
|
|
206
|
-
];
|
|
207
|
-
|
|
208
|
-
for (const { re, async: isAsync } of patterns) {
|
|
209
|
-
const m = line.match(re);
|
|
210
|
-
if (!m) continue;
|
|
211
|
-
|
|
212
|
-
// SYNC_LABELED_RE / ASYNC_LABELED_RE both have 3 capture groups.
|
|
213
|
-
const label = m[2]!.trim();
|
|
214
|
-
|
|
215
|
-
// Empty label (e.g. `--> B`) — fall through to plain arrow handling
|
|
216
|
-
if (!label) return null;
|
|
217
|
-
|
|
218
|
-
return {
|
|
219
|
-
from: m[1]!,
|
|
220
|
-
to: m[3]!,
|
|
221
|
-
label,
|
|
222
|
-
async: isAsync,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
return null;
|
|
227
|
-
}
|
package/src/utils/brand.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Branded types — compile-time nominal typing
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// `Brand<T, B>` produces a type that is structurally `T` but
|
|
6
|
-
// nominally distinct from other brands and from plain `T`. The
|
|
7
|
-
// brand-marker property is `__brand` and is never actually written
|
|
8
|
-
// at runtime — TypeScript intersects the type purely for compile-
|
|
9
|
-
// time tracking.
|
|
10
|
-
//
|
|
11
|
-
// Used to catch ID-mixing bugs at compile time:
|
|
12
|
-
//
|
|
13
|
-
// type NodeId = Brand<string, 'NodeId'>;
|
|
14
|
-
// type GroupId = Brand<string, 'GroupId'>;
|
|
15
|
-
//
|
|
16
|
-
// function findNode(id: NodeId): Node;
|
|
17
|
-
// findNode(someGroupId); // Type error — GroupId not assignable to NodeId.
|
|
18
|
-
//
|
|
19
|
-
// Brands erase fully at compile time: zero runtime cost, no
|
|
20
|
-
// transformation, no extra JS output.
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Tag a primitive type `T` with a phantom brand `B`. The brand
|
|
24
|
-
* exists only in the type system — `Brand<string, 'X'>` is a `string`
|
|
25
|
-
* at runtime, but TypeScript treats it as nominally distinct from
|
|
26
|
-
* plain `string` and from any other `Brand<string, ...>`.
|
|
27
|
-
*/
|
|
28
|
-
export type Brand<T, B extends string> = T & { readonly __brand: B };
|
|
29
|
-
|
|
30
|
-
// ============================================================
|
|
31
|
-
// Writable<T> — escape hatch for parsers that need a mutable
|
|
32
|
-
// construction phase before returning a `readonly`-typed value.
|
|
33
|
-
// ============================================================
|
|
34
|
-
//
|
|
35
|
-
// Usage:
|
|
36
|
-
//
|
|
37
|
-
// interface ParsedKanban {
|
|
38
|
-
// readonly columns: readonly KanbanColumn[];
|
|
39
|
-
// ...
|
|
40
|
-
// }
|
|
41
|
-
//
|
|
42
|
-
// function parseKanban(): ParsedKanban {
|
|
43
|
-
// const result: Writable<ParsedKanban> = { columns: [], ... };
|
|
44
|
-
// result.columns.push(...); // OK — Writable strips the readonly
|
|
45
|
-
// return result; // OK — assignable back to ParsedKanban
|
|
46
|
-
// }
|
|
47
|
-
//
|
|
48
|
-
// `Writable<T>` flips `readonly` modifiers off shallowly. Nested
|
|
49
|
-
// `readonly` arrays/objects keep their immutability — `WritableDeep`
|
|
50
|
-
// is intentionally NOT provided because parsers rarely need it and
|
|
51
|
-
// it's a sharp tool.
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Strip top-level `readonly` modifiers from an object type, including
|
|
55
|
-
* unwrapping `readonly T[]` array fields to mutable `T[]`. Element types
|
|
56
|
-
* inside arrays/objects keep their own immutability — Writable is
|
|
57
|
-
* intentionally shallow.
|
|
58
|
-
*/
|
|
59
|
-
export type Writable<T> = {
|
|
60
|
-
-readonly [K in keyof T]: T[K] extends readonly (infer U)[] ? U[] : T[K];
|
|
61
|
-
};
|
package/src/utils/card.ts
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Node-card door (Story 111.1)
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// The node card described in docs/architecture/diagram-visual-conventions.md §1
|
|
6
|
-
// (rect → label → header separator → metadata rows) and the collapse accent bar
|
|
7
|
-
// (§3) were hand-rolled inline in every structured-diagram renderer. This module
|
|
8
|
-
// owns that drawing behind one interface, mirroring the `renderIntegratedLegend`
|
|
9
|
-
// door (utils/legend-integration.ts): the renderer creates its wrapper `<g>` and
|
|
10
|
-
// resolves geometry + colors (scaling and palette stay the renderer's job — see
|
|
11
|
-
// ScaleContext / 111.3), then makes one call.
|
|
12
|
-
//
|
|
13
|
-
// Output is byte-identical to the prior inline code: same element order, same
|
|
14
|
-
// attributes, same values. Scaled numbers are passed IN (the door never calls
|
|
15
|
-
// ScaleContext), so rounding order is unchanged.
|
|
16
|
-
|
|
17
|
-
import type { D3Sel } from './legend-types';
|
|
18
|
-
import { measureText } from './text-measure';
|
|
19
|
-
|
|
20
|
-
/** One resolved metadata row: a display key (already mapped) and its value. */
|
|
21
|
-
export type CardMetaRow = readonly [displayKey: string, value: string];
|
|
22
|
-
|
|
23
|
-
export interface CardMetaOptions {
|
|
24
|
-
/** Rows in display order. */
|
|
25
|
-
rows: readonly CardMetaRow[];
|
|
26
|
-
/** Scaled metadata font size. */
|
|
27
|
-
fontSize: number;
|
|
28
|
-
/** Scaled metadata line height. */
|
|
29
|
-
lineHeight: number;
|
|
30
|
-
/** Scaled gap between the header separator and the first row baseline. */
|
|
31
|
-
separatorGap: number;
|
|
32
|
-
/** Header separator stroke color (callers pass `solid ? labelColor : stroke`). */
|
|
33
|
-
separatorColor: string;
|
|
34
|
-
/** Fill for both key and value text (node cards use the label color for both). */
|
|
35
|
-
textColor: string;
|
|
36
|
-
/** Left inset for the key column (defaults to 10, the convention value). */
|
|
37
|
-
keyX?: number;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface NodeCardOptions {
|
|
41
|
-
/** Card width (already laid out). */
|
|
42
|
-
width: number;
|
|
43
|
-
/** Card height (already laid out). */
|
|
44
|
-
height: number;
|
|
45
|
-
/** Scaled corner radius. */
|
|
46
|
-
rx: number;
|
|
47
|
-
/** Resolved card fill. */
|
|
48
|
-
fill: string;
|
|
49
|
-
/** Resolved card stroke. */
|
|
50
|
-
stroke: string;
|
|
51
|
-
/** Scaled stroke width. */
|
|
52
|
-
strokeWidth: number;
|
|
53
|
-
/** Dashed border (e.g. org `isContainer`); uses the `'6 3'` convention pattern. */
|
|
54
|
-
dashed?: boolean;
|
|
55
|
-
/** Label text. */
|
|
56
|
-
label: string;
|
|
57
|
-
/** Resolved label color (also used for metadata text). */
|
|
58
|
-
labelColor: string;
|
|
59
|
-
/** Scaled label font size. */
|
|
60
|
-
labelFontSize: number;
|
|
61
|
-
/** Scaled header band height (positions the label and the separator). */
|
|
62
|
-
headerHeight: number;
|
|
63
|
-
/** Metadata block; omit (or pass empty rows) for a card with no separator/meta. */
|
|
64
|
-
meta?: CardMetaOptions;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Draw a node card (rect → label → optional separator + metadata rows) into
|
|
69
|
-
* `container` (the renderer's wrapper `<g>`). Reproduces conventions §1 exactly.
|
|
70
|
-
*/
|
|
71
|
-
export function renderNodeCard(container: D3Sel, opts: NodeCardOptions): void {
|
|
72
|
-
const rect = container
|
|
73
|
-
.append('rect')
|
|
74
|
-
.attr('x', 0)
|
|
75
|
-
.attr('y', 0)
|
|
76
|
-
.attr('width', opts.width)
|
|
77
|
-
.attr('height', opts.height)
|
|
78
|
-
.attr('rx', opts.rx)
|
|
79
|
-
.attr('fill', opts.fill)
|
|
80
|
-
.attr('stroke', opts.stroke)
|
|
81
|
-
.attr('stroke-width', opts.strokeWidth);
|
|
82
|
-
|
|
83
|
-
if (opts.dashed) {
|
|
84
|
-
rect.attr('stroke-dasharray', '6 3');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
container
|
|
88
|
-
.append('text')
|
|
89
|
-
.attr('x', opts.width / 2)
|
|
90
|
-
.attr('y', opts.headerHeight / 2 + opts.labelFontSize / 2 - 2)
|
|
91
|
-
.attr('text-anchor', 'middle')
|
|
92
|
-
.attr('fill', opts.labelColor)
|
|
93
|
-
.attr('font-size', opts.labelFontSize)
|
|
94
|
-
.attr('font-weight', 'bold')
|
|
95
|
-
.text(opts.label);
|
|
96
|
-
|
|
97
|
-
const meta = opts.meta;
|
|
98
|
-
if (!meta || meta.rows.length === 0) return;
|
|
99
|
-
|
|
100
|
-
container
|
|
101
|
-
.append('line')
|
|
102
|
-
.attr('x1', 0)
|
|
103
|
-
.attr('y1', opts.headerHeight)
|
|
104
|
-
.attr('x2', opts.width)
|
|
105
|
-
.attr('y2', opts.headerHeight)
|
|
106
|
-
.attr('stroke', meta.separatorColor)
|
|
107
|
-
.attr('stroke-opacity', 0.3)
|
|
108
|
-
.attr('stroke-width', 1);
|
|
109
|
-
|
|
110
|
-
const keyX = meta.keyX ?? 10;
|
|
111
|
-
const maxKeyWidth = Math.max(
|
|
112
|
-
...meta.rows.map(([key]) => measureText(`${key}: `, meta.fontSize))
|
|
113
|
-
);
|
|
114
|
-
const valueX = keyX + maxKeyWidth;
|
|
115
|
-
const metaStartY = opts.headerHeight + meta.separatorGap + meta.fontSize;
|
|
116
|
-
|
|
117
|
-
for (let i = 0; i < meta.rows.length; i++) {
|
|
118
|
-
const [displayKey, value] = meta.rows[i]!;
|
|
119
|
-
const rowY = metaStartY + i * meta.lineHeight;
|
|
120
|
-
|
|
121
|
-
container
|
|
122
|
-
.append('text')
|
|
123
|
-
.attr('x', keyX)
|
|
124
|
-
.attr('y', rowY)
|
|
125
|
-
.attr('fill', meta.textColor)
|
|
126
|
-
.attr('font-size', meta.fontSize)
|
|
127
|
-
.text(`${displayKey}: `);
|
|
128
|
-
|
|
129
|
-
container
|
|
130
|
-
.append('text')
|
|
131
|
-
.attr('x', valueX)
|
|
132
|
-
.attr('y', rowY)
|
|
133
|
-
.attr('fill', meta.textColor)
|
|
134
|
-
.attr('font-size', meta.fontSize)
|
|
135
|
-
.text(value);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export interface CollapseBarOptions {
|
|
140
|
-
/** Card width. */
|
|
141
|
-
width: number;
|
|
142
|
-
/** Card height (the bar sits at the bottom). */
|
|
143
|
-
height: number;
|
|
144
|
-
/** Scaled bar height. */
|
|
145
|
-
barHeight: number;
|
|
146
|
-
/** Scaled horizontal inset from each edge (usually 0). */
|
|
147
|
-
inset: number;
|
|
148
|
-
/** Scaled corner radius for the clip rect (matches the card). */
|
|
149
|
-
rx: number;
|
|
150
|
-
/** Bar fill (callers pass `solid ? labelColor : stroke`). */
|
|
151
|
-
fill: string;
|
|
152
|
-
/** Unique clip-path id (kept renderer-local to avoid collisions). */
|
|
153
|
-
clipId: string;
|
|
154
|
-
/** Wrapper class for the bar rect (e.g. `org-collapse-bar`). */
|
|
155
|
-
className: string;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Draw the collapse accent bar (conventions §3) at the bottom of a card,
|
|
160
|
-
* clipped to the card's rounded corners. Reproduces the prior inline code.
|
|
161
|
-
*/
|
|
162
|
-
export function renderCollapseBar(
|
|
163
|
-
container: D3Sel,
|
|
164
|
-
opts: CollapseBarOptions
|
|
165
|
-
): void {
|
|
166
|
-
container
|
|
167
|
-
.append('clipPath')
|
|
168
|
-
.attr('id', opts.clipId)
|
|
169
|
-
.append('rect')
|
|
170
|
-
.attr('width', opts.width)
|
|
171
|
-
.attr('height', opts.height)
|
|
172
|
-
.attr('rx', opts.rx);
|
|
173
|
-
|
|
174
|
-
container
|
|
175
|
-
.append('rect')
|
|
176
|
-
.attr('x', opts.inset)
|
|
177
|
-
.attr('y', opts.height - opts.barHeight)
|
|
178
|
-
.attr('width', opts.width - opts.inset * 2)
|
|
179
|
-
.attr('height', opts.barHeight)
|
|
180
|
-
.attr('fill', opts.fill)
|
|
181
|
-
.attr('clip-path', `url(#${opts.clipId})`)
|
|
182
|
-
.attr('class', opts.className);
|
|
183
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Collapse Engine — edge re-termination for trees (Story 110.1)
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// The remap phase for hierarchical chart types with cross-links (sitemap). An
|
|
6
|
-
// edge whose endpoint was pruned is walked up the ORIGINAL tree to the
|
|
7
|
-
// outermost visible collapsed-container ancestor and re-terminated there.
|
|
8
|
-
// Matches sitemap semantics exactly: no dedup (parallel edges keep distinct
|
|
9
|
-
// labels for multigraph routing), self-loops dropped, unreachable edges dropped.
|
|
10
|
-
|
|
11
|
-
import type { TreeCollapseShape } from './tree';
|
|
12
|
-
import { collectTreeIds } from './tree';
|
|
13
|
-
|
|
14
|
-
type NodeShape<N> = Pick<TreeCollapseShape<N>, 'getId' | 'getChildren'>;
|
|
15
|
-
|
|
16
|
-
export interface EdgeEndpointShape<E> {
|
|
17
|
-
getSource(edge: E): string;
|
|
18
|
-
getTarget(edge: E): string;
|
|
19
|
-
/** Return a copy of `edge` with re-terminated endpoints. */
|
|
20
|
-
withEndpoints(edge: E, source: string, target: string): E;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function buildParentMap<N>(
|
|
24
|
-
roots: readonly N[],
|
|
25
|
-
shape: NodeShape<N>
|
|
26
|
-
): Map<string, string> {
|
|
27
|
-
const map = new Map<string, string>();
|
|
28
|
-
const walk = (nodes: readonly N[]): void => {
|
|
29
|
-
for (const node of nodes) {
|
|
30
|
-
for (const child of shape.getChildren(node)) {
|
|
31
|
-
map.set(shape.getId(child), shape.getId(node));
|
|
32
|
-
walk([child]);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
walk(roots);
|
|
37
|
-
return map;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Walk up the original tree to the outermost visible ancestor that is itself a
|
|
42
|
-
* collapsed container — the node that should absorb the edge endpoint.
|
|
43
|
-
*/
|
|
44
|
-
function findVisibleAncestor(
|
|
45
|
-
nodeId: string,
|
|
46
|
-
parentMap: Map<string, string>,
|
|
47
|
-
visibleIds: Set<string>,
|
|
48
|
-
collapsedIds: Set<string>
|
|
49
|
-
): string | null {
|
|
50
|
-
let current = nodeId;
|
|
51
|
-
while (true) {
|
|
52
|
-
const parentId = parentMap.get(current);
|
|
53
|
-
if (!parentId) return null;
|
|
54
|
-
if (visibleIds.has(parentId) && collapsedIds.has(parentId)) {
|
|
55
|
-
return parentId;
|
|
56
|
-
}
|
|
57
|
-
current = parentId;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Re-terminate edges that reference pruned nodes. Both-visible edges pass
|
|
63
|
-
* through (shallow-copied via `withEndpoints`); a hidden endpoint re-terminates
|
|
64
|
-
* to its visible collapsed-container ancestor, or the edge is dropped if there
|
|
65
|
-
* is none; resulting self-loops are dropped.
|
|
66
|
-
*/
|
|
67
|
-
export function reterminateEdges<N, E>(
|
|
68
|
-
originalRoots: readonly N[],
|
|
69
|
-
prunedRoots: readonly N[],
|
|
70
|
-
edges: readonly E[],
|
|
71
|
-
collapsedIds: Set<string>,
|
|
72
|
-
nodeShape: NodeShape<N>,
|
|
73
|
-
edgeShape: EdgeEndpointShape<E>
|
|
74
|
-
): E[] {
|
|
75
|
-
const visibleIds = collectTreeIds(prunedRoots, nodeShape);
|
|
76
|
-
const parentMap = buildParentMap(originalRoots, nodeShape);
|
|
77
|
-
const result: E[] = [];
|
|
78
|
-
|
|
79
|
-
for (const edge of edges) {
|
|
80
|
-
let sourceId = edgeShape.getSource(edge);
|
|
81
|
-
let targetId = edgeShape.getTarget(edge);
|
|
82
|
-
const sourceVisible = visibleIds.has(sourceId);
|
|
83
|
-
const targetVisible = visibleIds.has(targetId);
|
|
84
|
-
|
|
85
|
-
if (sourceVisible && targetVisible) {
|
|
86
|
-
result.push(edgeShape.withEndpoints(edge, sourceId, targetId));
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (!sourceVisible) {
|
|
91
|
-
const ancestor = findVisibleAncestor(
|
|
92
|
-
sourceId,
|
|
93
|
-
parentMap,
|
|
94
|
-
visibleIds,
|
|
95
|
-
collapsedIds
|
|
96
|
-
);
|
|
97
|
-
if (!ancestor) continue;
|
|
98
|
-
sourceId = ancestor;
|
|
99
|
-
}
|
|
100
|
-
if (!targetVisible) {
|
|
101
|
-
const ancestor = findVisibleAncestor(
|
|
102
|
-
targetId,
|
|
103
|
-
parentMap,
|
|
104
|
-
visibleIds,
|
|
105
|
-
collapsedIds
|
|
106
|
-
);
|
|
107
|
-
if (!ancestor) continue;
|
|
108
|
-
targetId = ancestor;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (sourceId === targetId) continue;
|
|
112
|
-
result.push(edgeShape.withEndpoints(edge, sourceId, targetId));
|
|
113
|
-
}
|
|
114
|
-
return result;
|
|
115
|
-
}
|