@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/wireframe/types.ts
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Wireframe Diagram Types
|
|
3
|
-
// ============================================================
|
|
4
|
-
|
|
5
|
-
import type { DgmoError } from '../diagnostics';
|
|
6
|
-
import type { TagGroup } from '../utils/tag-groups';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* All wireframe element types.
|
|
10
|
-
* Visual-mnemonic elements are inferred from bracket syntax;
|
|
11
|
-
* keyword elements use a small vocabulary (9 keywords).
|
|
12
|
-
*/
|
|
13
|
-
export type WireframeElementType =
|
|
14
|
-
| 'group'
|
|
15
|
-
| 'textInput'
|
|
16
|
-
| 'button'
|
|
17
|
-
| 'dropdown'
|
|
18
|
-
| 'checkbox'
|
|
19
|
-
| 'radio'
|
|
20
|
-
| 'heading'
|
|
21
|
-
| 'divider'
|
|
22
|
-
| 'text'
|
|
23
|
-
| 'listItem'
|
|
24
|
-
| 'nav'
|
|
25
|
-
| 'tabs'
|
|
26
|
-
| 'table'
|
|
27
|
-
| 'image'
|
|
28
|
-
| 'modal'
|
|
29
|
-
| 'skeleton'
|
|
30
|
-
| 'alert'
|
|
31
|
-
| 'progress'
|
|
32
|
-
| 'chart';
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Single flat interface for all wireframe elements (ADR-8).
|
|
36
|
-
* No separate WireframeGroup — all elements carry group fields
|
|
37
|
-
* with sensible defaults (isContainer=false, orientation='vertical', isSkeleton=false).
|
|
38
|
-
*/
|
|
39
|
-
export interface WireframeElement {
|
|
40
|
-
readonly id: string;
|
|
41
|
-
readonly type: WireframeElementType;
|
|
42
|
-
/** Display label / placeholder text / heading text */
|
|
43
|
-
readonly label: string;
|
|
44
|
-
/** Child elements (non-empty only when isContainer=true) */
|
|
45
|
-
readonly children: readonly WireframeElement[];
|
|
46
|
-
/** Pipe metadata key-value pairs */
|
|
47
|
-
readonly metadata: Readonly<Record<string, string>>;
|
|
48
|
-
/** State keywords: disabled, active, ghost, destructive, etc. */
|
|
49
|
-
readonly states: readonly string[];
|
|
50
|
-
/** Free-text annotations from pipe metadata */
|
|
51
|
-
readonly annotations: readonly string[];
|
|
52
|
-
/** 1-based line number in source */
|
|
53
|
-
readonly lineNumber: number;
|
|
54
|
-
/** Measured indentation (column) */
|
|
55
|
-
readonly indent: number;
|
|
56
|
-
/** True when element has children (set during parse via indent stack) */
|
|
57
|
-
readonly isContainer: boolean;
|
|
58
|
-
/** Stacking direction for group children */
|
|
59
|
-
readonly orientation: 'vertical' | 'horizontal';
|
|
60
|
-
/** True when inside a skeleton block */
|
|
61
|
-
readonly isSkeleton: boolean;
|
|
62
|
-
|
|
63
|
-
// ── Type-specific fields ─────────────────────────────────
|
|
64
|
-
/** Heading level: 1 for `#`, 2 for `##` */
|
|
65
|
-
readonly headingLevel?: number;
|
|
66
|
-
/** Dropdown options (for type='dropdown') */
|
|
67
|
-
readonly options?: readonly string[];
|
|
68
|
-
/** Checked state (for type='checkbox') */
|
|
69
|
-
readonly checked?: boolean;
|
|
70
|
-
/** Selected state (for type='radio') */
|
|
71
|
-
readonly selected?: boolean;
|
|
72
|
-
/** Image hint: 'default' | 'round' | 'wide' */
|
|
73
|
-
readonly imageHint?: 'default' | 'round' | 'wide';
|
|
74
|
-
/** Progress value 0-100 (for type='progress') */
|
|
75
|
-
readonly progressValue?: number;
|
|
76
|
-
/** Chart hint: 'line' | 'bar' | 'pie' */
|
|
77
|
-
readonly chartHint?: 'line' | 'bar' | 'pie';
|
|
78
|
-
/** Table dimensions for skeleton shorthand (for type='table') */
|
|
79
|
-
readonly tableRows?: number;
|
|
80
|
-
readonly tableCols?: number;
|
|
81
|
-
/** Table header row labels (for type='table') */
|
|
82
|
-
readonly tableHeaders?: readonly string[];
|
|
83
|
-
/** Table data rows — each row is an array of cell content strings (for type='table') */
|
|
84
|
-
readonly tableData?: ReadonlyArray<readonly string[]>;
|
|
85
|
-
/** Inline elements on the same line (multi-element line) */
|
|
86
|
-
readonly inlineElements?: readonly WireframeElement[];
|
|
87
|
-
/** Label element for label-field pairing */
|
|
88
|
-
readonly labelFor?: WireframeElement;
|
|
89
|
-
/** Color from tag system */
|
|
90
|
-
readonly color?: string;
|
|
91
|
-
/** Field variant: password, textarea */
|
|
92
|
-
readonly fieldVariant?: 'password' | 'textarea';
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** Form factor / layout mode */
|
|
96
|
-
export type WireframeFormFactor = 'desktop' | 'mobile';
|
|
97
|
-
|
|
98
|
-
export interface ParsedWireframe {
|
|
99
|
-
readonly title: string | null;
|
|
100
|
-
readonly titleLineNumber: number | null;
|
|
101
|
-
readonly formFactor: WireframeFormFactor;
|
|
102
|
-
/** Top-level elements (roots of the hierarchy) */
|
|
103
|
-
readonly roots: readonly WireframeElement[];
|
|
104
|
-
/** Modal elements (rendered separately below main) */
|
|
105
|
-
readonly modals: readonly WireframeElement[];
|
|
106
|
-
readonly tagGroups: readonly TagGroup[];
|
|
107
|
-
readonly options: Readonly<Record<string, string>>;
|
|
108
|
-
readonly diagnostics: readonly DgmoError[];
|
|
109
|
-
readonly error: string | null;
|
|
110
|
-
}
|
package/src/wordcloud/parser.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// wordcloud parser door — Story 109.2 (arch-review).
|
|
3
|
-
//
|
|
4
|
-
// The six visualizations share one parse state machine (visualizations/parse.ts);
|
|
5
|
-
// this is wordcloud's typed entry point into it, returning the narrowed
|
|
6
|
-
// ParsedWordcloud shape. The registry binds the 'wordcloud' chart type to this door.
|
|
7
|
-
// ============================================================
|
|
8
|
-
|
|
9
|
-
import type { PaletteColors } from '../palettes';
|
|
10
|
-
import { parseVisualization } from '../visualizations/parse';
|
|
11
|
-
import type { ParsedWordcloud } from '../visualizations/types';
|
|
12
|
-
|
|
13
|
-
export function parseWordcloud(
|
|
14
|
-
content: string,
|
|
15
|
-
palette?: PaletteColors
|
|
16
|
-
): ParsedWordcloud {
|
|
17
|
-
return parseVisualization(content, palette) as ParsedWordcloud;
|
|
18
|
-
}
|
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Wordcloud renderer — Story 109.2 (arch-review). Extracted from d3.ts.
|
|
3
|
-
// ============================================================
|
|
4
|
-
|
|
5
|
-
import * as d3Selection from 'd3-selection';
|
|
6
|
-
import cloud from 'd3-cloud';
|
|
7
|
-
import { FONT_FAMILY } from '../fonts';
|
|
8
|
-
import { measureText } from '../utils/text-measure';
|
|
9
|
-
import type { D3ExportDimensions } from '../utils/d3-types';
|
|
10
|
-
import { ScaleContext } from '../utils/scaling';
|
|
11
|
-
import { initD3Chart, renderChartTitle } from '../utils/d3-helpers';
|
|
12
|
-
import type {
|
|
13
|
-
ParsedWordcloud,
|
|
14
|
-
WordCloudWord,
|
|
15
|
-
WordCloudRotate,
|
|
16
|
-
} from '../visualizations/types';
|
|
17
|
-
import type { PaletteColors } from '../palettes';
|
|
18
|
-
import { getSeriesColors } from '../palettes';
|
|
19
|
-
|
|
20
|
-
function getRotateFn(mode: WordCloudRotate): () => number {
|
|
21
|
-
if (mode === 'mixed') return () => (Math.random() > 0.5 ? 0 : 90);
|
|
22
|
-
if (mode === 'angled') return () => Math.round(Math.random() * 30 - 15);
|
|
23
|
-
return () => 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* d3-cloud rasterizes each glyph to a canvas sprite for pixel-perfect
|
|
28
|
-
* collision detection. In headless Node (jsdom), `getContext('2d')` returns
|
|
29
|
-
* null, so d3-cloud throws (`getImageData` on null). This detects whether a
|
|
30
|
-
* usable 2D canvas exists; when it doesn't, we fall back to a canvas-free
|
|
31
|
-
* spiral packer so word clouds still render in SSG (remark wrappers), the MCP
|
|
32
|
-
* server, and the CLI.
|
|
33
|
-
*/
|
|
34
|
-
function hasCanvas2d(): boolean {
|
|
35
|
-
try {
|
|
36
|
-
if (typeof document === 'undefined') return false;
|
|
37
|
-
const canvas = document.createElement('canvas');
|
|
38
|
-
return typeof canvas.getContext === 'function' && !!canvas.getContext('2d');
|
|
39
|
-
} catch {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function estimateWordWidth(text: string, size: number): number {
|
|
45
|
-
return measureText(text, size);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
type PlacedCloudWord = WordCloudWord & {
|
|
49
|
-
size: number;
|
|
50
|
-
x: number;
|
|
51
|
-
y: number;
|
|
52
|
-
rotate: number;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Canvas-free word-cloud layout. Places the largest words first at the centre
|
|
57
|
-
* and walks an Archimedean spiral outward, using axis-aligned bounding-box
|
|
58
|
-
* overlap tests (text width estimated from font metrics). Returns words in
|
|
59
|
-
* placement order with `x`/`y` relative to the cloud centre — the same shape
|
|
60
|
-
* d3-cloud hands to its `end` callback — so the existing draw code is reused.
|
|
61
|
-
* Words that can't be placed within the box are dropped, matching d3-cloud.
|
|
62
|
-
*/
|
|
63
|
-
function layoutWordsNoCanvas(
|
|
64
|
-
words: Array<WordCloudWord & { size: number }>,
|
|
65
|
-
width: number,
|
|
66
|
-
height: number,
|
|
67
|
-
padding: number,
|
|
68
|
-
rotateFn: () => number
|
|
69
|
-
): PlacedCloudWord[] {
|
|
70
|
-
const sorted = [...words].sort((a, b) => b.size - a.size);
|
|
71
|
-
const placed: Array<PlacedCloudWord & { halfW: number; halfH: number }> = [];
|
|
72
|
-
const maxR = Math.sqrt(width * width + height * height) / 2;
|
|
73
|
-
// Bias the spiral to the box aspect so wide clouds spread horizontally.
|
|
74
|
-
const aspect = width > 0 ? height / width : 1;
|
|
75
|
-
|
|
76
|
-
for (const w of sorted) {
|
|
77
|
-
const rotate = rotateFn();
|
|
78
|
-
const rawW = estimateWordWidth(w.text, w.size) + padding * 2;
|
|
79
|
-
const rawH = w.size + padding * 2;
|
|
80
|
-
const rad = (rotate * Math.PI) / 180;
|
|
81
|
-
const cos = Math.abs(Math.cos(rad));
|
|
82
|
-
const sin = Math.abs(Math.sin(rad));
|
|
83
|
-
const halfW = (rawW * cos + rawH * sin) / 2;
|
|
84
|
-
const halfH = (rawW * sin + rawH * cos) / 2;
|
|
85
|
-
|
|
86
|
-
let spot: { x: number; y: number } | null = null;
|
|
87
|
-
for (let t = 0; t < 4000; t++) {
|
|
88
|
-
const a = t * 0.25;
|
|
89
|
-
const r = a * 1.4;
|
|
90
|
-
if (r > maxR) break;
|
|
91
|
-
const x = Math.cos(a) * r;
|
|
92
|
-
const y = Math.sin(a) * r * aspect;
|
|
93
|
-
if (
|
|
94
|
-
x - halfW < -width / 2 ||
|
|
95
|
-
x + halfW > width / 2 ||
|
|
96
|
-
y - halfH < -height / 2 ||
|
|
97
|
-
y + halfH > height / 2
|
|
98
|
-
) {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
let collides = false;
|
|
102
|
-
for (const p of placed) {
|
|
103
|
-
if (
|
|
104
|
-
Math.abs(x - p.x) < halfW + p.halfW &&
|
|
105
|
-
Math.abs(y - p.y) < halfH + p.halfH
|
|
106
|
-
) {
|
|
107
|
-
collides = true;
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
if (!collides) {
|
|
112
|
-
spot = { x, y };
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (!spot) continue;
|
|
117
|
-
placed.push({ ...w, rotate, x: spot.x, y: spot.y, halfW, halfH });
|
|
118
|
-
}
|
|
119
|
-
return placed;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ============================================================
|
|
123
|
-
// Word Cloud Renderer
|
|
124
|
-
// ============================================================
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Renders a word cloud into the given container using d3-cloud.
|
|
128
|
-
*/
|
|
129
|
-
export function renderWordCloud(
|
|
130
|
-
container: HTMLDivElement,
|
|
131
|
-
parsed: ParsedWordcloud,
|
|
132
|
-
palette: PaletteColors,
|
|
133
|
-
_isDark: boolean,
|
|
134
|
-
onClickItem?: (lineNumber: number) => void,
|
|
135
|
-
exportDims?: D3ExportDimensions
|
|
136
|
-
): void {
|
|
137
|
-
const { words, cloudOptions } = parsed;
|
|
138
|
-
const title = parsed.noTitle ? null : parsed.title;
|
|
139
|
-
if (words.length === 0) return;
|
|
140
|
-
|
|
141
|
-
const init = initD3Chart(container, palette, exportDims);
|
|
142
|
-
if (!init) return;
|
|
143
|
-
const { svg, width, height, textColor, colors } = init;
|
|
144
|
-
|
|
145
|
-
const idealWidth = Math.max(400, words.length * 30);
|
|
146
|
-
const ctx = exportDims
|
|
147
|
-
? ScaleContext.identity()
|
|
148
|
-
: ScaleContext.from(width, idealWidth);
|
|
149
|
-
|
|
150
|
-
const sTitleHeight = title ? ctx.aesthetic(40) : 0;
|
|
151
|
-
const cloudHeight = height - sTitleHeight;
|
|
152
|
-
const sPadding = ctx.structural(2);
|
|
153
|
-
|
|
154
|
-
svg.attr('preserveAspectRatio', 'xMidYMid meet');
|
|
155
|
-
if (ctx.isBelowFloor) {
|
|
156
|
-
svg.attr('width', '100%');
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const { minSize, maxSize } = cloudOptions;
|
|
160
|
-
const sMinSize = ctx.text(minSize);
|
|
161
|
-
const sMaxSize = ctx.text(maxSize);
|
|
162
|
-
const weights = words.map((w) => w.weight);
|
|
163
|
-
const minWeight = Math.min(...weights);
|
|
164
|
-
const maxWeight = Math.max(...weights);
|
|
165
|
-
const range = maxWeight - minWeight || 1;
|
|
166
|
-
|
|
167
|
-
const fontSize = (weight: number): number => {
|
|
168
|
-
const t = (weight - minWeight) / range;
|
|
169
|
-
return sMinSize + Math.sqrt(t) * (sMaxSize - sMinSize);
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
const rotateFn = getRotateFn(cloudOptions.rotate);
|
|
173
|
-
|
|
174
|
-
renderChartTitle(
|
|
175
|
-
svg,
|
|
176
|
-
title,
|
|
177
|
-
parsed.titleLineNumber,
|
|
178
|
-
width,
|
|
179
|
-
textColor,
|
|
180
|
-
onClickItem
|
|
181
|
-
);
|
|
182
|
-
|
|
183
|
-
const g = svg
|
|
184
|
-
.append('g')
|
|
185
|
-
.attr(
|
|
186
|
-
'transform',
|
|
187
|
-
`translate(${width / 2},${sTitleHeight + cloudHeight / 2})`
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
const sized = words.map((w) => ({ ...w, size: fontSize(w.weight) }));
|
|
191
|
-
|
|
192
|
-
const draw = (
|
|
193
|
-
layoutWords: Array<{
|
|
194
|
-
text?: string;
|
|
195
|
-
size?: number;
|
|
196
|
-
x?: number;
|
|
197
|
-
y?: number;
|
|
198
|
-
rotate?: number;
|
|
199
|
-
}>
|
|
200
|
-
): void => {
|
|
201
|
-
g.selectAll('text')
|
|
202
|
-
.data(layoutWords)
|
|
203
|
-
.join('text')
|
|
204
|
-
.style('font-size', (d) => `${d.size}px`)
|
|
205
|
-
.style('font-family', FONT_FAMILY)
|
|
206
|
-
.style('font-weight', '600')
|
|
207
|
-
// colors is non-empty; modulo guarantees in-bounds.
|
|
208
|
-
.style('fill', (_d, i) => colors[i % colors.length]!)
|
|
209
|
-
.style('cursor', (d) =>
|
|
210
|
-
onClickItem && (d as WordCloudWord).lineNumber ? 'pointer' : 'default'
|
|
211
|
-
)
|
|
212
|
-
.attr('text-anchor', 'middle')
|
|
213
|
-
.attr('transform', (d) => `translate(${d.x},${d.y}) rotate(${d.rotate})`)
|
|
214
|
-
.attr('data-line-number', (d) => {
|
|
215
|
-
const ln = (d as WordCloudWord).lineNumber;
|
|
216
|
-
return ln ? String(ln) : null;
|
|
217
|
-
})
|
|
218
|
-
.text((d) => d.text!)
|
|
219
|
-
.on('click', (_event, d) => {
|
|
220
|
-
const ln = (d as WordCloudWord).lineNumber;
|
|
221
|
-
if (onClickItem && ln) onClickItem(ln);
|
|
222
|
-
});
|
|
223
|
-
};
|
|
224
|
-
|
|
225
|
-
// No real 2D canvas (headless Node) → fall back to the spiral packer.
|
|
226
|
-
if (!hasCanvas2d()) {
|
|
227
|
-
draw(layoutWordsNoCanvas(sized, width, cloudHeight, sPadding, rotateFn));
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
cloud<WordCloudWord & cloud.Word>()
|
|
232
|
-
.size([width, cloudHeight])
|
|
233
|
-
.words(sized)
|
|
234
|
-
.padding(sPadding)
|
|
235
|
-
.rotate(rotateFn)
|
|
236
|
-
.fontSize((d) => d.size!)
|
|
237
|
-
.font(FONT_FAMILY)
|
|
238
|
-
.on('end', draw)
|
|
239
|
-
.start();
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// ============================================================
|
|
243
|
-
// Word Cloud Renderer (for export — returns Promise)
|
|
244
|
-
// ============================================================
|
|
245
|
-
|
|
246
|
-
export function renderWordCloudAsync(
|
|
247
|
-
container: HTMLDivElement,
|
|
248
|
-
parsed: ParsedWordcloud,
|
|
249
|
-
palette: PaletteColors,
|
|
250
|
-
_isDark: boolean,
|
|
251
|
-
exportDims?: D3ExportDimensions
|
|
252
|
-
): Promise<void> {
|
|
253
|
-
return new Promise((resolve) => {
|
|
254
|
-
d3Selection.select(container).selectAll(':not([data-d3-tooltip])').remove();
|
|
255
|
-
|
|
256
|
-
const { words, cloudOptions } = parsed;
|
|
257
|
-
const title = parsed.noTitle ? null : parsed.title;
|
|
258
|
-
if (words.length === 0) {
|
|
259
|
-
resolve();
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
const width = exportDims?.width ?? container.clientWidth;
|
|
264
|
-
const height = exportDims?.height ?? container.clientHeight;
|
|
265
|
-
if (width <= 0 || height <= 0) {
|
|
266
|
-
resolve();
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
const titleHeight = title ? 40 : 0;
|
|
271
|
-
const cloudHeight = height - titleHeight;
|
|
272
|
-
|
|
273
|
-
const textColor = palette.text;
|
|
274
|
-
const bgColor = palette.bg;
|
|
275
|
-
const colors = getSeriesColors(palette);
|
|
276
|
-
|
|
277
|
-
const { minSize, maxSize } = cloudOptions;
|
|
278
|
-
const weights = words.map((w) => w.weight);
|
|
279
|
-
const minWeight = Math.min(...weights);
|
|
280
|
-
const maxWeight = Math.max(...weights);
|
|
281
|
-
const range = maxWeight - minWeight || 1;
|
|
282
|
-
|
|
283
|
-
const fontSize = (weight: number): number => {
|
|
284
|
-
const t = (weight - minWeight) / range;
|
|
285
|
-
return minSize + Math.sqrt(t) * (maxSize - minSize);
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
const rotateFn = getRotateFn(cloudOptions.rotate);
|
|
289
|
-
|
|
290
|
-
const svg = d3Selection
|
|
291
|
-
.select(container)
|
|
292
|
-
.append('svg')
|
|
293
|
-
.attr('width', width)
|
|
294
|
-
.attr('height', height)
|
|
295
|
-
.attr('viewBox', `0 0 ${width} ${height}`)
|
|
296
|
-
.attr('preserveAspectRatio', 'xMidYMid meet')
|
|
297
|
-
.style('background', bgColor);
|
|
298
|
-
|
|
299
|
-
renderChartTitle(svg, title, parsed.titleLineNumber, width, textColor);
|
|
300
|
-
|
|
301
|
-
const g = svg
|
|
302
|
-
.append('g')
|
|
303
|
-
.attr(
|
|
304
|
-
'transform',
|
|
305
|
-
`translate(${width / 2},${titleHeight + cloudHeight / 2})`
|
|
306
|
-
);
|
|
307
|
-
|
|
308
|
-
const sized = words.map((w) => ({ ...w, size: fontSize(w.weight) }));
|
|
309
|
-
|
|
310
|
-
const draw = (
|
|
311
|
-
layoutWords: Array<{
|
|
312
|
-
text?: string;
|
|
313
|
-
size?: number;
|
|
314
|
-
x?: number;
|
|
315
|
-
y?: number;
|
|
316
|
-
rotate?: number;
|
|
317
|
-
}>
|
|
318
|
-
): void => {
|
|
319
|
-
g.selectAll('text')
|
|
320
|
-
.data(layoutWords)
|
|
321
|
-
.join('text')
|
|
322
|
-
.style('font-size', (d) => `${d.size}px`)
|
|
323
|
-
.style('font-family', FONT_FAMILY)
|
|
324
|
-
.style('font-weight', '600')
|
|
325
|
-
// colors is non-empty; modulo guarantees in-bounds.
|
|
326
|
-
.style('fill', (_d, i) => colors[i % colors.length]!)
|
|
327
|
-
.attr('text-anchor', 'middle')
|
|
328
|
-
.attr(
|
|
329
|
-
'transform',
|
|
330
|
-
(d) => `translate(${d.x},${d.y}) rotate(${d.rotate})`
|
|
331
|
-
)
|
|
332
|
-
.text((d) => d.text!);
|
|
333
|
-
resolve();
|
|
334
|
-
};
|
|
335
|
-
|
|
336
|
-
// No real 2D canvas (headless Node: SSG wrappers, MCP, CLI) → d3-cloud's
|
|
337
|
-
// sprite rasterization can't run. Use the canvas-free spiral packer.
|
|
338
|
-
if (!hasCanvas2d()) {
|
|
339
|
-
draw(layoutWordsNoCanvas(sized, width, cloudHeight, 2, rotateFn));
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
cloud<WordCloudWord & cloud.Word>()
|
|
344
|
-
.size([width, cloudHeight])
|
|
345
|
-
.words(sized)
|
|
346
|
-
.padding(2)
|
|
347
|
-
.rotate(rotateFn)
|
|
348
|
-
.fontSize((d) => d.size!)
|
|
349
|
-
.font(FONT_FAMILY)
|
|
350
|
-
.on('end', draw)
|
|
351
|
-
.start();
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// ============================================================
|
|
356
|
-
// Venn Diagram Math Helpers
|
|
357
|
-
// ============================================================
|