@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/auto/shared.ts
DELETED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared browser-embed helpers for the `@diagrammo/dgmo` client-side
|
|
3
|
-
* drop-ins (`./auto` script-tag renderer and `./element` custom element).
|
|
4
|
-
*
|
|
5
|
-
* These are the SVG sanitizer, theme resolver, the standard-block DOM
|
|
6
|
-
* assembler (canonical chrome from `src/embed` — BL-114), the error card,
|
|
7
|
-
* aria-label derivation, style injection, and share-URL builder — factored
|
|
8
|
-
* out of `auto/index.ts` so the two entries share one implementation rather
|
|
9
|
-
* than diverging copies. The `auto` entry's public `window.dgmo` surface is
|
|
10
|
-
* unaffected; it imports from here.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { encodeDiagramUrl } from '../sharing';
|
|
14
|
-
import { buildDgmoBlockHtml, errorBlockHtml } from '../embed';
|
|
15
|
-
import { CSS } from './styles';
|
|
16
|
-
import { safeHref } from '../utils/safe-href';
|
|
17
|
-
|
|
18
|
-
declare const __DGMO_VERSION__: string;
|
|
19
|
-
|
|
20
|
-
export const VERSION: string =
|
|
21
|
-
// Replaced at build time by tsup's `define`; otherwise stays as the literal
|
|
22
|
-
// so we never crash if env wiring drifts.
|
|
23
|
-
(typeof __DGMO_VERSION__ === 'string' && __DGMO_VERSION__) || 'dev';
|
|
24
|
-
|
|
25
|
-
/** Default hosted editor used by "Open in editor" share links. */
|
|
26
|
-
export { EDITOR_BASE_URL } from '../embed';
|
|
27
|
-
|
|
28
|
-
const ARIA_LABEL_MAX = 200;
|
|
29
|
-
const COPIED_INTERACTION_MS = 1500;
|
|
30
|
-
const LOG_PREFIX = '[dgmo]';
|
|
31
|
-
|
|
32
|
-
// Bidi override + control char strip for aria-label sanitization. The regex
|
|
33
|
-
// contains literal U+202A–U+202E and U+2066–U+2069 codepoints because eslint's
|
|
34
|
-
// `security/detect-bidi-characters` only matches by codepoint scan. The whole
|
|
35
|
-
// point of this regex is to strip those very characters from labels.
|
|
36
|
-
// eslint-disable-next-line no-control-regex, security/detect-bidi-characters
|
|
37
|
-
const ARIA_STRIP_RE = /[\x00-\x1F--]/g;
|
|
38
|
-
|
|
39
|
-
const STYLE_FLAG = 'dgmoAutoStyles';
|
|
40
|
-
|
|
41
|
-
export function sharedWarn(...args: unknown[]): void {
|
|
42
|
-
if (typeof console !== 'undefined' && console.warn) {
|
|
43
|
-
console.warn(LOG_PREFIX, ...args);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// ============================================================
|
|
48
|
-
// SVG sanitizer
|
|
49
|
-
// ============================================================
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Strip script-execution surface from a freshly parsed SVG tree before it
|
|
53
|
-
* lands in the live DOM. This is the safety net that lets us use innerHTML
|
|
54
|
-
* for SVG insertion without trusting renderer output to be fully sanitized.
|
|
55
|
-
*
|
|
56
|
-
* Removes `<script>`/`<foreignObject>`, any `on*` event-handler attribute,
|
|
57
|
-
* and any `href`/`xlink:href` failing the `safeHref` allowlist.
|
|
58
|
-
*/
|
|
59
|
-
export function sanitizeSvgInPlace(root: Element): void {
|
|
60
|
-
const dangerous = root.querySelectorAll('script, foreignObject');
|
|
61
|
-
dangerous.forEach((n) => n.remove());
|
|
62
|
-
|
|
63
|
-
const all: Element[] = [root, ...Array.from(root.querySelectorAll('*'))];
|
|
64
|
-
for (const node of all) {
|
|
65
|
-
for (const attr of Array.from(node.attributes)) {
|
|
66
|
-
if (attr.name.toLowerCase().startsWith('on')) {
|
|
67
|
-
node.removeAttribute(attr.name);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (node.hasAttribute('href')) {
|
|
71
|
-
const safe = safeHref(node.getAttribute('href'));
|
|
72
|
-
if (safe === null) node.removeAttribute('href');
|
|
73
|
-
}
|
|
74
|
-
if (node.hasAttributeNS('http://www.w3.org/1999/xlink', 'href')) {
|
|
75
|
-
const v = node.getAttributeNS('http://www.w3.org/1999/xlink', 'href');
|
|
76
|
-
if (safeHref(v) === null) {
|
|
77
|
-
node.removeAttributeNS('http://www.w3.org/1999/xlink', 'href');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// ============================================================
|
|
84
|
-
// Theme resolver
|
|
85
|
-
// ============================================================
|
|
86
|
-
|
|
87
|
-
export type ThemePreference = 'auto' | 'light' | 'dark' | 'transparent';
|
|
88
|
-
|
|
89
|
-
export function resolveTheme(
|
|
90
|
-
theme: ThemePreference | undefined
|
|
91
|
-
): 'light' | 'dark' | 'transparent' {
|
|
92
|
-
if (theme === 'light' || theme === 'dark' || theme === 'transparent') {
|
|
93
|
-
return theme;
|
|
94
|
-
}
|
|
95
|
-
if (typeof document === 'undefined') return 'light';
|
|
96
|
-
const html = document.documentElement;
|
|
97
|
-
// Explicit page theme always wins over OS preference.
|
|
98
|
-
const dataTheme = html.getAttribute('data-theme');
|
|
99
|
-
if (dataTheme === 'dark') return 'dark';
|
|
100
|
-
if (dataTheme === 'light') return 'light';
|
|
101
|
-
if (html.classList.contains('dark')) return 'dark';
|
|
102
|
-
if (html.classList.contains('light')) return 'light';
|
|
103
|
-
if (
|
|
104
|
-
typeof window !== 'undefined' &&
|
|
105
|
-
window.matchMedia &&
|
|
106
|
-
window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
107
|
-
) {
|
|
108
|
-
return 'dark';
|
|
109
|
-
}
|
|
110
|
-
return 'light';
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// ============================================================
|
|
114
|
-
// Style injection
|
|
115
|
-
// ============================================================
|
|
116
|
-
|
|
117
|
-
export function ensureStyles(): void {
|
|
118
|
-
if (typeof document === 'undefined') return;
|
|
119
|
-
const html = document.documentElement;
|
|
120
|
-
if (html?.dataset?.[STYLE_FLAG] === '1') return;
|
|
121
|
-
|
|
122
|
-
// If a <link rel="stylesheet"> for our css is already linked, skip inline.
|
|
123
|
-
const linked = document.querySelector(
|
|
124
|
-
'link[rel="stylesheet"][href*="auto.css"]'
|
|
125
|
-
);
|
|
126
|
-
if (linked) {
|
|
127
|
-
if (html && html.dataset) html.dataset[STYLE_FLAG] = '1';
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const style = document.createElement('style');
|
|
132
|
-
style.setAttribute('data-dgmo-auto', '');
|
|
133
|
-
style.textContent = CSS;
|
|
134
|
-
document.head.appendChild(style);
|
|
135
|
-
if (html && html.dataset) html.dataset[STYLE_FLAG] = '1';
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// ============================================================
|
|
139
|
-
// Aria-label derivation
|
|
140
|
-
// ============================================================
|
|
141
|
-
|
|
142
|
-
export function deriveAriaLabel(source: string): string {
|
|
143
|
-
const firstLine = source
|
|
144
|
-
.split('\n')
|
|
145
|
-
.map((l) => l.trim())
|
|
146
|
-
.find((l) => l.length > 0);
|
|
147
|
-
if (!firstLine) return 'DGMO diagram';
|
|
148
|
-
return firstLine.replace(ARIA_STRIP_RE, '').slice(0, ARIA_LABEL_MAX);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// ============================================================
|
|
152
|
-
// Standard block assembly (canonical chrome from src/embed — BL-114)
|
|
153
|
-
// ============================================================
|
|
154
|
-
|
|
155
|
-
export interface RenderedBlockOptions {
|
|
156
|
-
/** Trimmed DGMO source (copy payload + highlighted panel content). */
|
|
157
|
-
source: string;
|
|
158
|
-
/** Already-rendered AND sanitized SVG element to mount as the diagram. */
|
|
159
|
-
svgEl: Element;
|
|
160
|
-
/** `dgmo-theme-light` / `dgmo-theme-dark` / `dgmo-theme-transparent`. */
|
|
161
|
-
themeClass: string;
|
|
162
|
-
/** Emit the source disclosure + toolbar (showcase) or diagram-only. */
|
|
163
|
-
showSource: boolean;
|
|
164
|
-
/** Emit the open-in-editor toolbar link at all. */
|
|
165
|
-
showEditorLink: boolean;
|
|
166
|
-
/**
|
|
167
|
-
* Pre-built share URL (with the surface's UTM params) for the
|
|
168
|
-
* open-in-editor link. `null` (encode failed / too large) drops the link.
|
|
169
|
-
*/
|
|
170
|
-
shareUrl: string | null;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Assemble the standard DGMO embed block (`figure.dgmo` + hover-reveal icon
|
|
175
|
-
* toolbar + native `<details>` source panel) around an already-sanitized SVG
|
|
176
|
-
* node, and bind the toolbar's copy/open click handling.
|
|
177
|
-
*
|
|
178
|
-
* The markup comes from the canonical `buildDgmoBlockHtml` in `src/embed`;
|
|
179
|
-
* this wrapper only (1) mounts the live SVG node into the `.dgmo-svg` slot,
|
|
180
|
-
* (2) swaps the open-in-editor href for the surface's UTM-tagged share URL,
|
|
181
|
-
* and (3) attaches the click handler that `<details>` can't provide (copy).
|
|
182
|
-
*/
|
|
183
|
-
export function buildRenderedBlock(opts: RenderedBlockOptions): HTMLElement {
|
|
184
|
-
const html = buildDgmoBlockHtml(opts.source, '<div class="dgmo-svg"></div>', {
|
|
185
|
-
mode: opts.showSource ? 'showcase' : 'diagram',
|
|
186
|
-
showOpenInEditor: opts.showSource && opts.showEditorLink,
|
|
187
|
-
// Keep the legacy `.dgmo-rendered` + theme hooks so the anti-flash CSS,
|
|
188
|
-
// idempotency filters, and theme-scoped token colors keep working.
|
|
189
|
-
legacyClassNames: ['dgmo-rendered', opts.themeClass],
|
|
190
|
-
});
|
|
191
|
-
const holder = document.createElement('div');
|
|
192
|
-
// buildDgmoBlockHtml output is author-controlled markup with all
|
|
193
|
-
// user-supplied strings escaped; the SVG slot is empty at this point.
|
|
194
|
-
holder.innerHTML = html;
|
|
195
|
-
const wrapper = holder.firstElementChild as HTMLElement;
|
|
196
|
-
|
|
197
|
-
// Mount the sanitized SVG node directly (no serialize/re-parse round trip).
|
|
198
|
-
wrapper.querySelector('.dgmo-svg')?.appendChild(opts.svgEl);
|
|
199
|
-
|
|
200
|
-
// The canonical builder encodes a bare share URL; the browser surfaces
|
|
201
|
-
// carry UTM attribution, so swap in the pre-built URL (or drop the link
|
|
202
|
-
// when encoding failed — copy remains as the fallback affordance).
|
|
203
|
-
const open = wrapper.querySelector<HTMLAnchorElement>('a.dgmo-open');
|
|
204
|
-
if (open) {
|
|
205
|
-
if (opts.shareUrl) open.href = opts.shareUrl;
|
|
206
|
-
else open.remove();
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
bindBlockToolbar(wrapper);
|
|
210
|
-
return wrapper;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Click handling for the standard block toolbar (mirrors remark-dgmo's
|
|
215
|
-
* `bindDgmo` reference implementation, but bound per-wrapper because these
|
|
216
|
-
* surfaces build their DOM imperatively).
|
|
217
|
-
*
|
|
218
|
-
* The toolbar is the `<summary>` of the source `<details>`: clicks on the
|
|
219
|
-
* `</>` toggle keep the native default (toggling), while clicks on
|
|
220
|
-
* `.dgmo-toolbar-btn` (copy / open) must preventDefault so they don't ALSO
|
|
221
|
-
* toggle — which cancels an anchor's navigation, hence the manual
|
|
222
|
-
* `window.open`.
|
|
223
|
-
*/
|
|
224
|
-
function bindBlockToolbar(wrapper: HTMLElement): void {
|
|
225
|
-
wrapper.addEventListener('click', (e) => {
|
|
226
|
-
void handleToolbarClick(e);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
async function handleToolbarClick(e: Event): Promise<void> {
|
|
231
|
-
const target = e.target as Element | null;
|
|
232
|
-
if (!target || typeof target.closest !== 'function') return;
|
|
233
|
-
const btn = target.closest('.dgmo-toolbar-btn') as HTMLElement | null;
|
|
234
|
-
if (!btn) return;
|
|
235
|
-
|
|
236
|
-
const insideSummary = !!btn.closest('summary');
|
|
237
|
-
if (insideSummary) e.preventDefault();
|
|
238
|
-
|
|
239
|
-
if (btn.matches('button.dgmo-copy')) {
|
|
240
|
-
const copied = await copyText(btn.dataset['dgmoSource'] ?? '');
|
|
241
|
-
if (copied) {
|
|
242
|
-
btn.classList.add('dgmo-copy--success');
|
|
243
|
-
setTimeout(
|
|
244
|
-
() => btn.classList.remove('dgmo-copy--success'),
|
|
245
|
-
COPIED_INTERACTION_MS
|
|
246
|
-
);
|
|
247
|
-
} else {
|
|
248
|
-
sharedWarn('clipboard write failed');
|
|
249
|
-
}
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
if (insideSummary && btn.matches('a.dgmo-open')) {
|
|
254
|
-
const anchor = btn as HTMLAnchorElement;
|
|
255
|
-
if (anchor.href) {
|
|
256
|
-
window.open(
|
|
257
|
-
anchor.href,
|
|
258
|
-
anchor.target || '_blank',
|
|
259
|
-
'noopener,noreferrer'
|
|
260
|
-
);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
async function copyText(text: string): Promise<boolean> {
|
|
266
|
-
try {
|
|
267
|
-
if (navigator?.clipboard?.writeText) {
|
|
268
|
-
await navigator.clipboard.writeText(text);
|
|
269
|
-
return true;
|
|
270
|
-
}
|
|
271
|
-
} catch {
|
|
272
|
-
// fallthrough to execCommand
|
|
273
|
-
}
|
|
274
|
-
if (typeof document !== 'undefined') {
|
|
275
|
-
try {
|
|
276
|
-
const ta = document.createElement('textarea');
|
|
277
|
-
ta.value = text;
|
|
278
|
-
ta.setAttribute('readonly', '');
|
|
279
|
-
ta.style.position = 'absolute';
|
|
280
|
-
ta.style.left = '-9999px';
|
|
281
|
-
document.body.appendChild(ta);
|
|
282
|
-
ta.select();
|
|
283
|
-
const copied = document.execCommand('copy');
|
|
284
|
-
document.body.removeChild(ta);
|
|
285
|
-
return copied;
|
|
286
|
-
} catch {
|
|
287
|
-
return false;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// ============================================================
|
|
294
|
-
// Error card (canonical errorBlockHtml from src/embed)
|
|
295
|
-
// ============================================================
|
|
296
|
-
|
|
297
|
-
export interface BannerOptions {
|
|
298
|
-
message: string;
|
|
299
|
-
severity?: string;
|
|
300
|
-
line?: number;
|
|
301
|
-
column?: number;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Build the standard `.dgmo--error` card as a live DOM element. Message +
|
|
306
|
-
* location are folded into one line; the offending source is shown inside
|
|
307
|
-
* the card (canonical shape — same as remark-dgmo and the other adopters).
|
|
308
|
-
*/
|
|
309
|
-
export function buildErrorBlock(
|
|
310
|
-
opts: BannerOptions & { source: string }
|
|
311
|
-
): HTMLElement {
|
|
312
|
-
let message =
|
|
313
|
-
opts.severity && opts.severity !== 'error'
|
|
314
|
-
? `${opts.severity}: ${opts.message}`
|
|
315
|
-
: opts.message;
|
|
316
|
-
if (opts.line !== undefined && opts.line > 0) {
|
|
317
|
-
message +=
|
|
318
|
-
opts.column !== undefined
|
|
319
|
-
? ` (at ${opts.line}:${opts.column})`
|
|
320
|
-
: ` (at line ${opts.line})`;
|
|
321
|
-
}
|
|
322
|
-
const holder = document.createElement('div');
|
|
323
|
-
// errorBlockHtml escapes both message and source.
|
|
324
|
-
holder.innerHTML = errorBlockHtml(new Error(message), opts.source);
|
|
325
|
-
const card = holder.firstElementChild as HTMLElement;
|
|
326
|
-
// Mark processed so the auto surface's selectors never re-scan the card
|
|
327
|
-
// (its root carries the `.dgmo` class the scanner matches on).
|
|
328
|
-
card.setAttribute('data-dgmo-processed', 'true');
|
|
329
|
-
return card;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
// ============================================================
|
|
333
|
-
// Share URL builder ("Open in editor")
|
|
334
|
-
// ============================================================
|
|
335
|
-
|
|
336
|
-
export function buildShareUrl(
|
|
337
|
-
source: string,
|
|
338
|
-
opts: {
|
|
339
|
-
palette: string;
|
|
340
|
-
theme: 'light' | 'dark';
|
|
341
|
-
editorBase: string;
|
|
342
|
-
campaign: string;
|
|
343
|
-
utmSource: string;
|
|
344
|
-
}
|
|
345
|
-
): string | null {
|
|
346
|
-
const result = encodeDiagramUrl(source, {
|
|
347
|
-
baseUrl: opts.editorBase,
|
|
348
|
-
palette: opts.palette,
|
|
349
|
-
theme: opts.theme,
|
|
350
|
-
});
|
|
351
|
-
// `too-large` (or any encode failure) → no link; caller shows disabled btn.
|
|
352
|
-
if (!result.url) return null;
|
|
353
|
-
const utm = `utm_source=${encodeURIComponent(opts.utmSource)}&utm_medium=html&utm_campaign=${encodeURIComponent(opts.campaign)}`;
|
|
354
|
-
// encodeDiagramUrl returns `…?<query>#<hash>`. Inject UTM into BOTH the
|
|
355
|
-
// query (where analytics read them) and the hash (where iOS share-sheet
|
|
356
|
-
// preserves them).
|
|
357
|
-
const hashIdx = result.url.indexOf('#');
|
|
358
|
-
let withUtm: string;
|
|
359
|
-
if (hashIdx === -1) {
|
|
360
|
-
const sep = result.url.includes('?') ? '&' : '?';
|
|
361
|
-
withUtm = result.url + sep + utm;
|
|
362
|
-
} else {
|
|
363
|
-
const beforeHash = result.url.slice(0, hashIdx);
|
|
364
|
-
const afterHash = result.url.slice(hashIdx + 1);
|
|
365
|
-
const querySep = beforeHash.includes('?') ? '&' : '?';
|
|
366
|
-
const hashSep = afterHash.length > 0 ? '&' : '';
|
|
367
|
-
withUtm = beforeHash + querySep + utm + '#' + afterHash + hashSep + utm;
|
|
368
|
-
}
|
|
369
|
-
return safeHref(withUtm) ? withUtm : null;
|
|
370
|
-
}
|
package/src/auto/styles.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Static CSS for `@diagrammo/dgmo/auto` (and `./element`, which shares the
|
|
3
|
-
* same injector).
|
|
4
|
-
*
|
|
5
|
-
* As of BL-114 the diagram + source chrome is the canonical standard block
|
|
6
|
-
* from `src/embed` — its styles ship in `BLOCK_CSS` and are appended below.
|
|
7
|
-
* This file only keeps the auto-surface-specific rules: anti-flash hiding,
|
|
8
|
-
* the `.dgmo-rendered` container reset, and the loading hint.
|
|
9
|
-
*
|
|
10
|
-
* `BLOCK_CSS` keys its dark-mode overrides off `[data-theme="dark"]`; the
|
|
11
|
-
* browser surfaces resolve the theme themselves and stamp a
|
|
12
|
-
* `.dgmo-theme-dark` class on the wrapper, so a re-scoped copy of the dark
|
|
13
|
-
* rules is appended too (same adapter pattern as fumadocs/nextra's
|
|
14
|
-
* build-css.mjs, done here at module init).
|
|
15
|
-
*
|
|
16
|
-
* The string is a literal — no template interpolation of user-supplied
|
|
17
|
-
* values. All selectors are prefixed `.dgmo-` to avoid collisions with
|
|
18
|
-
* embedder styles. Class names are part of the SemVer-stable surface — see
|
|
19
|
-
* "SemVer policy" in the README HTML section.
|
|
20
|
-
*
|
|
21
|
-
* IMPORTANT: keep AUTO_BASE_CSS a single pure template literal — tsup's
|
|
22
|
-
* emitAutoCss extracts it (plus BLOCK_CSS) with a regex to build
|
|
23
|
-
* `dist/auto.css`, mirroring the concatenation done at the bottom of this
|
|
24
|
-
* file. Update tsup.config.ts if the assembly here changes.
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
import { BLOCK_CSS } from '../embed/css';
|
|
28
|
-
|
|
29
|
-
const AUTO_BASE_CSS: string = `
|
|
30
|
-
/* anti-flash: hide source elements until either render swaps them out
|
|
31
|
-
or the error path replaces them with the standard error card */
|
|
32
|
-
pre.dgmo, code.language-dgmo, pre > code.language-dgmo,
|
|
33
|
-
.dgmo:not(svg *):not(.dgmo-rendered):not(.dgmo-rendered *):not(.dgmo--error):not(.dgmo--error *) {
|
|
34
|
-
visibility: hidden;
|
|
35
|
-
}
|
|
36
|
-
.dgmo-rendered, .dgmo-rendered *,
|
|
37
|
-
.dgmo--error, .dgmo--error * {
|
|
38
|
-
visibility: visible !important;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.dgmo-rendered {
|
|
42
|
-
display: block;
|
|
43
|
-
position: relative;
|
|
44
|
-
margin: 1em 0;
|
|
45
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
|
|
46
|
-
Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
47
|
-
font-size: 14px;
|
|
48
|
-
line-height: 1.4;
|
|
49
|
-
color-scheme: light dark;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.dgmo--loading {
|
|
53
|
-
opacity: 0.6;
|
|
54
|
-
font-size: 12px;
|
|
55
|
-
font-family: ui-monospace, monospace;
|
|
56
|
-
}
|
|
57
|
-
`;
|
|
58
|
-
|
|
59
|
-
/** Re-scope BLOCK_CSS's \`[data-theme="dark"]\` rules to `.dgmo-theme-dark`. */
|
|
60
|
-
function darkScopedBlockCss(css: string): string {
|
|
61
|
-
const rules = css.match(/\[data-theme="dark"\][^{]*\{[^}]*\}/g) ?? [];
|
|
62
|
-
return rules
|
|
63
|
-
.map((rule) => rule.replace(/\[data-theme="dark"\]/g, '.dgmo-theme-dark'))
|
|
64
|
-
.join('\n');
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export const CSS: string =
|
|
68
|
-
AUTO_BASE_CSS +
|
|
69
|
-
'\n' +
|
|
70
|
-
BLOCK_CSS +
|
|
71
|
-
'\n' +
|
|
72
|
-
darkScopedBlockCss(BLOCK_CSS) +
|
|
73
|
-
'\n';
|
package/src/block/layout.ts
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Block diagram — Layout (deterministic grid solver)
|
|
3
|
-
// ============================================================
|
|
4
|
-
//
|
|
5
|
-
// No graph layout: block placement is fully determined by the grid. Sizing is
|
|
6
|
-
// intrinsic + bottom-up — each container sizes to its contents (a column is as
|
|
7
|
-
// wide as its widest cell, capped) so nesting never crushes inner blocks. A
|
|
8
|
-
// collapsed container renders as a compact header band (the collapse-bar lives
|
|
9
|
-
// in the renderer). Output is a tree of absolutely-positioned items the renderer
|
|
10
|
-
// walks; colours are resolved renderer-side (they're palette-dependent).
|
|
11
|
-
|
|
12
|
-
import { measureText } from '../utils/text-measure';
|
|
13
|
-
import type { BlockGrid, BlockNode } from './types';
|
|
14
|
-
import { isBlockNode } from './types';
|
|
15
|
-
|
|
16
|
-
export const BLOCK_GAP = 12;
|
|
17
|
-
export const BLOCK_PAD = 10;
|
|
18
|
-
export const BLOCK_LEAF_H = 46;
|
|
19
|
-
export const BLOCK_HEADER_H = 28;
|
|
20
|
-
export const BLOCK_COLLAPSED_H = 46;
|
|
21
|
-
export const BLOCK_BAR_H = 6; // collapse accent bar — COLLAPSE_BAR_HEIGHT convention
|
|
22
|
-
const MIN_COL = 104;
|
|
23
|
-
const MAX_COL = 250;
|
|
24
|
-
const LABEL_FS = 13;
|
|
25
|
-
|
|
26
|
-
export interface BlockLayoutItem {
|
|
27
|
-
type: 'leaf' | 'container' | 'collapsed' | 'empty';
|
|
28
|
-
x: number;
|
|
29
|
-
y: number;
|
|
30
|
-
w: number;
|
|
31
|
-
h: number;
|
|
32
|
-
label?: string;
|
|
33
|
-
node?: BlockNode;
|
|
34
|
-
lineNumber?: number;
|
|
35
|
-
/** Container children (a nested layout). */
|
|
36
|
-
inner?: BlockLayoutItem[];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface BlockLayoutResult {
|
|
40
|
-
width: number;
|
|
41
|
-
height: number;
|
|
42
|
-
items: BlockLayoutItem[];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface BlockLayoutOptions {
|
|
46
|
-
/** Block ids rendered folded (authored `collapsed` + app runtime toggles). */
|
|
47
|
-
collapsed?: ReadonlySet<string>;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function layoutBlock(
|
|
51
|
-
grid: BlockGrid,
|
|
52
|
-
opts: BlockLayoutOptions = {}
|
|
53
|
-
): BlockLayoutResult {
|
|
54
|
-
const collapsed = opts.collapsed ?? new Set<string>();
|
|
55
|
-
const node = layoutGrid(grid, 0, 0, null, collapsed);
|
|
56
|
-
return { width: node.w, height: node.h, items: node.items };
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// ── intrinsic sizing ────────────────────────────────────────
|
|
60
|
-
|
|
61
|
-
function maxSpanSum(g: BlockGrid): number {
|
|
62
|
-
return Math.max(
|
|
63
|
-
1,
|
|
64
|
-
...g.rows.map((r) => r.reduce((s, c) => s + (c.span || 1), 0))
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function leafW(node: BlockNode): number {
|
|
69
|
-
return Math.max(
|
|
70
|
-
MIN_COL,
|
|
71
|
-
Math.min(MAX_COL, measureText(node.label, LABEL_FS) + 2 * BLOCK_PAD + 14)
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function gridColW(g: BlockGrid): number {
|
|
76
|
-
let m = MIN_COL;
|
|
77
|
-
for (const row of g.rows)
|
|
78
|
-
for (const c of row) {
|
|
79
|
-
if (!isBlockNode(c)) continue;
|
|
80
|
-
const iw = c.grid ? intrinsicGridW(c.grid) + 2 * BLOCK_PAD : leafW(c);
|
|
81
|
-
m = Math.max(m, iw / (c.span || 1));
|
|
82
|
-
}
|
|
83
|
-
return m;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function intrinsicGridW(g: BlockGrid): number {
|
|
87
|
-
const cols = g.cols ?? maxSpanSum(g);
|
|
88
|
-
return cols * gridColW(g) + (cols + 1) * BLOCK_GAP;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
interface GridLayout {
|
|
92
|
-
x: number;
|
|
93
|
-
y: number;
|
|
94
|
-
w: number;
|
|
95
|
-
h: number;
|
|
96
|
-
items: BlockLayoutItem[];
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function layoutGrid(
|
|
100
|
-
g: BlockGrid,
|
|
101
|
-
ox: number,
|
|
102
|
-
oy: number,
|
|
103
|
-
forceColW: number | null,
|
|
104
|
-
collapsed: ReadonlySet<string>
|
|
105
|
-
): GridLayout {
|
|
106
|
-
const cols = g.cols ?? maxSpanSum(g);
|
|
107
|
-
const colW = forceColW ?? gridColW(g);
|
|
108
|
-
const gridW = cols * colW + (cols + 1) * BLOCK_GAP;
|
|
109
|
-
let cy = oy + BLOCK_GAP;
|
|
110
|
-
const items: BlockLayoutItem[] = [];
|
|
111
|
-
let maxRight = ox + BLOCK_GAP;
|
|
112
|
-
|
|
113
|
-
for (const row of g.rows) {
|
|
114
|
-
let cx = ox + BLOCK_GAP;
|
|
115
|
-
let rowH = BLOCK_LEAF_H;
|
|
116
|
-
const rowItems: BlockLayoutItem[] = [];
|
|
117
|
-
|
|
118
|
-
for (const cell of row) {
|
|
119
|
-
const span = cell.span || 1;
|
|
120
|
-
const cw = span * colW + (span - 1) * BLOCK_GAP;
|
|
121
|
-
|
|
122
|
-
if (!isBlockNode(cell)) {
|
|
123
|
-
rowItems.push({ type: 'empty', x: cx, y: cy, w: cw, h: BLOCK_LEAF_H });
|
|
124
|
-
cx += cw + BLOCK_GAP;
|
|
125
|
-
maxRight = Math.max(maxRight, cx - BLOCK_GAP);
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (cell.grid && collapsed.has(cell.id)) {
|
|
130
|
-
const item: BlockLayoutItem = {
|
|
131
|
-
type: 'collapsed',
|
|
132
|
-
x: cx,
|
|
133
|
-
y: cy,
|
|
134
|
-
w: cw,
|
|
135
|
-
h: BLOCK_COLLAPSED_H,
|
|
136
|
-
label: cell.label,
|
|
137
|
-
node: cell,
|
|
138
|
-
lineNumber: cell.lineNumber,
|
|
139
|
-
};
|
|
140
|
-
rowItems.push(item);
|
|
141
|
-
rowH = Math.max(rowH, BLOCK_COLLAPSED_H);
|
|
142
|
-
cx += cw + BLOCK_GAP;
|
|
143
|
-
maxRight = Math.max(maxRight, cx - BLOCK_GAP);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (cell.grid) {
|
|
148
|
-
const innerCols = cell.grid.cols ?? maxSpanSum(cell.grid);
|
|
149
|
-
const innerColW = Math.max(
|
|
150
|
-
MIN_COL * 0.66,
|
|
151
|
-
(cw - 2 * BLOCK_PAD - (innerCols + 1) * BLOCK_GAP) / innerCols
|
|
152
|
-
);
|
|
153
|
-
const inner = layoutGrid(
|
|
154
|
-
cell.grid,
|
|
155
|
-
cx + BLOCK_PAD,
|
|
156
|
-
cy + BLOCK_HEADER_H,
|
|
157
|
-
innerColW,
|
|
158
|
-
collapsed
|
|
159
|
-
);
|
|
160
|
-
const h = BLOCK_HEADER_H + inner.h + BLOCK_PAD;
|
|
161
|
-
rowItems.push({
|
|
162
|
-
type: 'container',
|
|
163
|
-
x: cx,
|
|
164
|
-
y: cy,
|
|
165
|
-
w: cw,
|
|
166
|
-
h,
|
|
167
|
-
label: cell.label,
|
|
168
|
-
node: cell,
|
|
169
|
-
lineNumber: cell.lineNumber,
|
|
170
|
-
inner: inner.items,
|
|
171
|
-
});
|
|
172
|
-
rowH = Math.max(rowH, h);
|
|
173
|
-
cx += cw + BLOCK_GAP;
|
|
174
|
-
maxRight = Math.max(maxRight, cx - BLOCK_GAP);
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
rowItems.push({
|
|
179
|
-
type: 'leaf',
|
|
180
|
-
x: cx,
|
|
181
|
-
y: cy,
|
|
182
|
-
w: cw,
|
|
183
|
-
h: BLOCK_LEAF_H,
|
|
184
|
-
label: cell.label,
|
|
185
|
-
node: cell,
|
|
186
|
-
lineNumber: cell.lineNumber,
|
|
187
|
-
});
|
|
188
|
-
cx += cw + BLOCK_GAP;
|
|
189
|
-
maxRight = Math.max(maxRight, cx - BLOCK_GAP);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
items.push(...rowItems);
|
|
193
|
-
cy += rowH + BLOCK_GAP;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
const fitW = Math.max(gridW, maxRight - ox + BLOCK_GAP);
|
|
197
|
-
return { x: ox, y: oy, w: fitW, h: cy - oy, items };
|
|
198
|
-
}
|