@diagrammo/dgmo 0.87.0 → 0.89.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/README.md +4 -2
- package/dist/advanced.d.ts +47 -11
- package/dist/advanced.js +110 -106
- package/dist/{analyzer-R5UBTRO2.js → analyzer-7ZGAZIE6.js} +2 -2
- package/dist/block.js +26 -25
- package/dist/{chart-meta-PbgpGwYo.d.ts → chart-meta-Bev5Ebjr.d.ts} +1 -1
- package/dist/chart-meta.d.ts +2 -2
- package/dist/chart-meta.js +11 -11
- package/dist/{chart-types-Db_EGf1o.d.ts → chart-types-Bf8C5QQW.d.ts} +1 -1
- package/dist/{charts-d3-3BZRSZV6.js → charts-d3-KEQSUWKP.js} +10 -10
- package/dist/{chunk-LJFXC3IP.js → chunk-2GM7N5TV.js} +10 -10
- package/dist/{chunk-H2GEIFUF.js → chunk-3AQJNY65.js} +8 -8
- package/dist/chunk-44FTCIRI.js +438 -0
- package/dist/{chunk-WZ23JJ7U.js → chunk-4AJKOUBO.js} +11 -11
- package/dist/{chunk-YK4N6TBN.js → chunk-4R6OMKXB.js} +7 -7
- package/dist/{chunk-HEYGGSNQ.js → chunk-5LE2CTLS.js} +2 -2
- package/dist/{chunk-AGO3PFGS.js → chunk-7C2RAGPT.js} +46 -31
- package/dist/{chunk-VJ2KROJ5.js → chunk-7KPHRTND.js} +1 -1
- package/dist/{chunk-LHL6HDUL.js → chunk-7SX4IY6T.js} +84 -12
- package/dist/{chunk-LSQGJN5H.js → chunk-7W4XLIVH.js} +15 -15
- package/dist/{chunk-Q2U5635V.js → chunk-ABP5BUD6.js} +9 -430
- package/dist/{chunk-XUDGZJTJ.js → chunk-AZ24RI5L.js} +6 -6
- package/dist/{chunk-UMRZPRAN.js → chunk-BB6QKWHZ.js} +15 -15
- package/dist/{chunk-6I5UN4FD.js → chunk-C4FRGZGX.js} +4 -4
- package/dist/{chunk-3DOQOXXI.js → chunk-CNUN5GO6.js} +1 -1
- package/dist/{chunk-5KGM44TG.js → chunk-CX6OH5WP.js} +1 -1
- package/dist/{chunk-D4M25W6R.js → chunk-DDPGEGHB.js} +5 -5
- package/dist/{chunk-B7CU2HW5.js → chunk-DZPHN2WN.js} +9 -9
- package/dist/{chunk-O6MMQQLF.js → chunk-ECMA6XE2.js} +10 -10
- package/dist/{chunk-MGBV4JEI.js → chunk-EDXGEQW3.js} +1 -1
- package/dist/{chunk-FBKPSU3A.js → chunk-EXKCRXPO.js} +9 -9
- package/dist/{chunk-HTPZDZKQ.js → chunk-FKLE6QA3.js} +13 -13
- package/dist/{chunk-ERNCPKD4.js → chunk-G2KHLANR.js} +1 -1
- package/dist/{chunk-NJIGYGZS.js → chunk-HAMF4F3P.js} +12 -7
- package/dist/{chunk-UY6TEJJH.js → chunk-HJRP6PXL.js} +1 -1
- package/dist/{chunk-LNO3ASX5.js → chunk-HUNDJTTH.js} +1 -1
- package/dist/{chunk-RH2PROYG.js → chunk-I6GGMCTV.js} +4 -2
- package/dist/{chunk-DOXBS7F5.js → chunk-ID2K3IHI.js} +4 -4
- package/dist/{chunk-33FQ6HNV.js → chunk-IQ6P3HDE.js} +9 -9
- package/dist/{chunk-BAZT6CIF.js → chunk-ITSBBQTH.js} +7 -7
- package/dist/{chunk-UNNJCSSQ.js → chunk-JVZ7KFAX.js} +1 -1
- package/dist/{chunk-AQIBKTPG.js → chunk-K5XT7NHD.js} +3 -3
- package/dist/{chunk-HAH5X345.js → chunk-KATED53P.js} +1 -1
- package/dist/{chunk-7HWY4QAJ.js → chunk-L24LESXF.js} +1 -0
- package/dist/{chunk-VPASQOR3.js → chunk-LFKSHDVI.js} +1 -1
- package/dist/{chunk-XVSJYAK7.js → chunk-LPYYZCSI.js} +2 -2
- package/dist/{chunk-BV6PKJUS.js → chunk-LR6RRDWN.js} +5 -5
- package/dist/{chunk-DAX42XVH.js → chunk-LYLNMN77.js} +8 -8
- package/dist/{chunk-PJQZWJ5I.js → chunk-M2BCY7H3.js} +1015 -146
- package/dist/{chunk-A4XPI4YN.js → chunk-MFW6P7WH.js} +27 -0
- package/dist/{chunk-CFBY77QJ.js → chunk-N4BBSDWI.js} +9 -9
- package/dist/{chunk-IDJGV6VM.js → chunk-NIUO2TNR.js} +215 -1
- package/dist/{chunk-PLE2432T.js → chunk-NRPELUB6.js} +2 -2
- package/dist/{chunk-FM3WAVB6.js → chunk-NS7L7YKH.js} +1 -1
- package/dist/{chunk-YMG7JDEY.js → chunk-NSR2CGV6.js} +71 -24
- package/dist/{chunk-LD2JSKU3.js → chunk-OOCVGX4W.js} +15 -0
- package/dist/{chunk-N4XHXBDQ.js → chunk-PMNITNPR.js} +4 -4
- package/dist/{chunk-MSXRNVHB.js → chunk-Q6SQISHT.js} +12 -11
- package/dist/{chunk-UNAP6O26.js → chunk-QIOYTQDZ.js} +9 -9
- package/dist/{chunk-BT2WH2XT.js → chunk-RGWYZR3S.js} +1 -1
- package/dist/{chunk-PPH6ILHL.js → chunk-RPKBWJBB.js} +4 -4
- package/dist/{chunk-JD4RHBNX.js → chunk-RXIKESRI.js} +7 -7
- package/dist/{chunk-BMUWF77V.js → chunk-S2WE7TVK.js} +4 -4
- package/dist/{chunk-QFIXL3OK.js → chunk-SEKNYIMO.js} +1 -1
- package/dist/{chunk-FPXMCGS5.js → chunk-SLQT3JP3.js} +1 -1
- package/dist/{chunk-LL6D3MES.js → chunk-SOPM5PLO.js} +9 -9
- package/dist/{chunk-J7Q4VPBJ.js → chunk-TAP2NZEU.js} +22 -16
- package/dist/{chunk-RE6TVIAV.js → chunk-UKJLPA7R.js} +4 -4
- package/dist/{chunk-RGI64U3A.js → chunk-UQLHKLF4.js} +9 -9
- package/dist/{chunk-LPXC4I4R.js → chunk-UWKRPQZO.js} +61 -32
- package/dist/{chunk-XIFK423U.js → chunk-W7QN5BC5.js} +4 -4
- package/dist/{chunk-XWYR5T52.js → chunk-WEF6MXFG.js} +14 -14
- package/dist/{chunk-P5V63L35.js → chunk-WP22MHH6.js} +17 -17
- package/dist/{chunk-PUVTFUNH.js → chunk-WRCAH3UO.js} +18 -18
- package/dist/{chunk-N7XRBWXA.js → chunk-XJ2TBXHA.js} +10 -10
- package/dist/{chunk-DSG6GBUQ.js → chunk-XUCQVKLQ.js} +6 -6
- package/dist/{chunk-NZCSVD4M.js → chunk-Y7PSAHAY.js} +8 -8
- package/dist/{chunk-AAMCXQPP.js → chunk-YMFQLWZ2.js} +6 -6
- package/dist/completion-registry.d.ts +1 -1
- package/dist/completion-registry.js +4 -16
- package/dist/countdown.js +1 -1
- package/dist/{dgmo-router-F2DSURTR.js → dgmo-router-7WANZOBD.js} +11 -11
- package/dist/{dimensions-6QAWEGIR.js → dimensions-7MF7VSGS.js} +6 -6
- package/dist/{flowchart-renderer-THC6Y7EH.js → flowchart-renderer-DZQZRL2F.js} +6 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +28 -27
- package/dist/{layout-P6DTD4RT.js → layout-4RRC7XU7.js} +2 -2
- package/dist/{layout-QX5T6ZNE.js → layout-6L3BIFEZ.js} +4 -4
- package/dist/{layout-SOPAVXIH.js → layout-DXVAYF6W.js} +3 -3
- package/dist/{layout-LUQKAGGT.js → layout-EFEZ533S.js} +4 -4
- package/dist/{layout-EHTYSMV4.js → layout-H4K54IW3.js} +2 -2
- package/dist/{layout-AM57TGN5.js → layout-IGAVGDME.js} +3 -3
- package/dist/{layout-5NPBHV5F.js → layout-PP36LUTA.js} +2 -2
- package/dist/{layout-CUFA7XJD.js → layout-Q3RYSODA.js} +4 -4
- package/dist/layout-XUW444O5.js +1 -1
- package/dist/{layout-BOVTLAOT.js → layout-ZP7XYVXF.js} +2 -2
- package/dist/{layout-search-VKSBUCDM.js → layout-search-YKUL4VBV.js} +105 -6
- package/dist/{legend-constants-ZVO4FLAK.js → legend-constants-HE7FVDJP.js} +4 -2
- package/dist/{palettes-BIV54XLS.js → palettes-WZAIQTEG.js} +6 -4
- package/dist/{parser-ACW6C6OY.js → parser-337TACHB.js} +1 -1
- package/dist/{parser-WUK6CP5X.js → parser-GCCWMBTU.js} +3 -3
- package/dist/{parser-GPW4ZHPQ.js → parser-IMM2JJX3.js} +2 -1
- package/dist/{parser-JXS4426S.js → parser-P4TOQYNN.js} +2 -2
- package/dist/{parser-PVIWHVGY.js → parser-TL3JA4RI.js} +1 -1
- package/dist/{parser-C327BBE3.js → parser-UTXFJG4X.js} +1 -1
- package/dist/{renderer-RWJ45DWH.js → renderer-2ZQ6DPVD.js} +3 -3
- package/dist/{renderer-NHPKNNBD.js → renderer-3AD4NDF5.js} +9 -9
- package/dist/{renderer-2KVQGGTT.js → renderer-43ESBXVY.js} +8 -8
- package/dist/{renderer-A4LMOBZL.js → renderer-4JE5ORRO.js} +12 -12
- package/dist/{renderer-RAATRF6W.js → renderer-5GZNGZU5.js} +7 -7
- package/dist/{renderer-RMGN3Q7D.js → renderer-6OQM32X3.js} +3 -3
- package/dist/{renderer-222OTVQV.js → renderer-7HOSI6JJ.js} +4 -4
- package/dist/{renderer-NX4YKWCJ.js → renderer-7L7J4DHO.js} +8 -8
- package/dist/{renderer-DCFQDBGJ.js → renderer-7MCC6GKH.js} +2 -2
- package/dist/{renderer-3FF4QVGW.js → renderer-7VQOKAII.js} +8 -8
- package/dist/{renderer-4BHOELCE.js → renderer-BLHN3RCY.js} +3 -3
- package/dist/{renderer-PQYO2HCE.js → renderer-CEIX5JPA.js} +3 -3
- package/dist/{renderer-2OOPQ4CH.js → renderer-CHQZES6G.js} +3 -3
- package/dist/{renderer-36JH4OMC.js → renderer-DBNDLKPE.js} +9 -9
- package/dist/{renderer-KVAQE7PQ.js → renderer-DCJ4AQ3N.js} +7 -7
- package/dist/{renderer-LODEVN3V.js → renderer-EAORWLVK.js} +10 -10
- package/dist/{renderer-XRALFCIN.js → renderer-FCXRDYSJ.js} +8 -8
- package/dist/{renderer-YDAVCRTP.js → renderer-IR5GGAPB.js} +8 -8
- package/dist/{renderer-QM23SWAM.js → renderer-J4OS77PK.js} +2 -2
- package/dist/{renderer-4BIMRO4X.js → renderer-JR2XNZAH.js} +6 -6
- package/dist/{renderer-JKV2DBYP.js → renderer-JRVY7HAD.js} +6 -6
- package/dist/{renderer-R34GJL7U.js → renderer-NAA7D33G.js} +11 -11
- package/dist/{renderer-SDUSBCJI.js → renderer-P4XCRNCY.js} +7 -7
- package/dist/{renderer-A6ACVK4X.js → renderer-QQHQY3GT.js} +6 -6
- package/dist/{renderer-YIZ7G4HU.js → renderer-TJJGFQGT.js} +13 -13
- package/dist/{renderer-3CTUWCO7.js → renderer-VGQMJC5K.js} +12 -12
- package/dist/{renderer-ELYPDPNF.js → renderer-VYWCMRWA.js} +8 -7
- package/dist/{renderer-WH2HWE5Z.js → renderer-WB75JME5.js} +8 -8
- package/dist/{renderer-BICLPGAH.js → renderer-WQ654YT5.js} +2 -2
- package/dist/{renderer-6BUUTWVS.js → renderer-XFEZ5UBE.js} +8 -8
- package/dist/{renderer-4NZZ5J2F.js → renderer-XHEMXBQM.js} +7 -7
- package/dist/{renderer-RENDISO5.js → renderer-YTEZK3GC.js} +12 -12
- package/dist/{renderer-X5A5VIRD.js → renderer-ZXQXRNDR.js} +8 -8
- package/dist/{renderer-radial-XZ5TKUT4.js → renderer-radial-NA5DVBG4.js} +7 -7
- package/dist/{state-renderer-5IQ4OJUI.js → state-renderer-4S2C2CHB.js} +9 -9
- package/docs/ai-integration.md +5 -3
- package/docs/language-reference.md +2 -2
- package/package.json +1 -1
- package/dist/{chunk-3TYUXC7D.js → chunk-2SKMEL7V.js} +0 -0
- package/dist/{chunk-CLQIXD2C.js → chunk-7Z2VFRP5.js} +3 -3
- package/dist/{chunk-NF5YKFRH.js → chunk-B3S76BZO.js} +0 -0
- package/dist/{chunk-UIUXIDBX.js → chunk-CUYHST3B.js} +4 -4
- package/dist/{chunk-GUYVKGFN.js → chunk-DPSMX4EY.js} +0 -0
- package/dist/{chunk-2A4DQAXG.js → chunk-IIOLFAGJ.js} +3 -3
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
+
layoutBracket
|
|
3
|
+
} from "./chunk-ABP5BUD6.js";
|
|
4
|
+
import {
|
|
5
|
+
REGISTRY_BY_ID,
|
|
2
6
|
getRenderCategory,
|
|
3
7
|
parseArc,
|
|
4
8
|
parseDgmo,
|
|
@@ -8,19 +12,36 @@ import {
|
|
|
8
12
|
parseVenn,
|
|
9
13
|
parseVisualization,
|
|
10
14
|
parseWordcloud
|
|
11
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-Q6SQISHT.js";
|
|
12
16
|
import {
|
|
13
17
|
MAP_DX
|
|
14
18
|
} from "./chunk-EOYPX6SF.js";
|
|
19
|
+
import {
|
|
20
|
+
parseClock
|
|
21
|
+
} from "./chunk-WP2RLGDI.js";
|
|
22
|
+
import {
|
|
23
|
+
parseBracket
|
|
24
|
+
} from "./chunk-ZUCXFXLD.js";
|
|
25
|
+
import {
|
|
26
|
+
parseBody
|
|
27
|
+
} from "./chunk-47E5UTXE.js";
|
|
15
28
|
import {
|
|
16
29
|
renderDataChartD3
|
|
17
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-3AQJNY65.js";
|
|
18
31
|
import {
|
|
19
32
|
computeQuadrantPointLabels
|
|
20
33
|
} from "./chunk-KMU65FYM.js";
|
|
34
|
+
import {
|
|
35
|
+
parseChart,
|
|
36
|
+
parseFunctionChart,
|
|
37
|
+
parseFunnel,
|
|
38
|
+
parseHeatmap,
|
|
39
|
+
parseSankey,
|
|
40
|
+
parseScatter
|
|
41
|
+
} from "./chunk-7UDAIP6W.js";
|
|
21
42
|
import {
|
|
22
43
|
renderTimeline
|
|
23
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-UWKRPQZO.js";
|
|
24
45
|
import {
|
|
25
46
|
ScaleContext
|
|
26
47
|
} from "./chunk-24YPR5EH.js";
|
|
@@ -39,29 +60,134 @@ import {
|
|
|
39
60
|
renderChartTitle,
|
|
40
61
|
resolveExportPalette,
|
|
41
62
|
showTooltip
|
|
42
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-UKJLPA7R.js";
|
|
43
64
|
import {
|
|
44
65
|
legendInlineSupported
|
|
45
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-CNUN5GO6.js";
|
|
67
|
+
import {
|
|
68
|
+
compactNumber
|
|
69
|
+
} from "./chunk-NS7L7YKH.js";
|
|
46
70
|
import {
|
|
47
71
|
FONT_FAMILY
|
|
48
72
|
} from "./chunk-ICLB27PZ.js";
|
|
49
73
|
import {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
74
|
+
parseCycle
|
|
75
|
+
} from "./chunk-WQ6G6FFM.js";
|
|
76
|
+
import {
|
|
77
|
+
parseJourneyMap
|
|
78
|
+
} from "./chunk-B3S76BZO.js";
|
|
79
|
+
import {
|
|
80
|
+
parsePyramid
|
|
81
|
+
} from "./chunk-PIXJL77H.js";
|
|
82
|
+
import {
|
|
83
|
+
parseRing
|
|
84
|
+
} from "./chunk-3C2FWS2J.js";
|
|
85
|
+
import {
|
|
86
|
+
parseTreemap
|
|
87
|
+
} from "./chunk-P3SKSKJI.js";
|
|
88
|
+
import {
|
|
89
|
+
parseBlock
|
|
90
|
+
} from "./chunk-MY6GUH26.js";
|
|
91
|
+
import {
|
|
92
|
+
isBlockNode
|
|
93
|
+
} from "./chunk-XSVWUOUZ.js";
|
|
94
|
+
import {
|
|
95
|
+
parseGoal
|
|
96
|
+
} from "./chunk-BOO24UMJ.js";
|
|
97
|
+
import {
|
|
98
|
+
parseCountdown
|
|
99
|
+
} from "./chunk-JQ57AWDL.js";
|
|
100
|
+
import {
|
|
101
|
+
parseMap
|
|
102
|
+
} from "./chunk-HTWH2XQL.js";
|
|
103
|
+
import {
|
|
104
|
+
parseBoxesAndLines
|
|
105
|
+
} from "./chunk-MHAYUS65.js";
|
|
106
|
+
import {
|
|
107
|
+
parseSketch
|
|
108
|
+
} from "./chunk-RU725VCJ.js";
|
|
109
|
+
import {
|
|
110
|
+
parseSwimlane
|
|
111
|
+
} from "./chunk-C7QRRTAW.js";
|
|
112
|
+
import {
|
|
113
|
+
parseFamily
|
|
114
|
+
} from "./chunk-FKZ2Y3Q5.js";
|
|
115
|
+
import {
|
|
116
|
+
parseMindmap
|
|
117
|
+
} from "./chunk-NGC3IZRY.js";
|
|
118
|
+
import {
|
|
119
|
+
parseTechRadar
|
|
120
|
+
} from "./chunk-6K7RODXG.js";
|
|
121
|
+
import {
|
|
122
|
+
parseEventLine
|
|
123
|
+
} from "./chunk-66YFDTT6.js";
|
|
124
|
+
import {
|
|
125
|
+
parseTimelineDate
|
|
126
|
+
} from "./chunk-GDJW64XE.js";
|
|
127
|
+
import {
|
|
128
|
+
parseVersionControl
|
|
129
|
+
} from "./chunk-QFHWYWQL.js";
|
|
130
|
+
import {
|
|
131
|
+
parseKanban
|
|
132
|
+
} from "./chunk-DPSMX4EY.js";
|
|
133
|
+
import {
|
|
134
|
+
parseC4
|
|
135
|
+
} from "./chunk-GSYZZFI5.js";
|
|
136
|
+
import {
|
|
137
|
+
parseInfra
|
|
138
|
+
} from "./chunk-GUTZCRBT.js";
|
|
139
|
+
import {
|
|
140
|
+
parseGantt
|
|
141
|
+
} from "./chunk-ITSBBQTH.js";
|
|
142
|
+
import {
|
|
143
|
+
parseRaci
|
|
144
|
+
} from "./chunk-3RYBTEF5.js";
|
|
145
|
+
import {
|
|
146
|
+
parsePert
|
|
147
|
+
} from "./chunk-JVZ7KFAX.js";
|
|
148
|
+
import {
|
|
149
|
+
parseLiveLink
|
|
150
|
+
} from "./chunk-7WGCQE2E.js";
|
|
151
|
+
import {
|
|
152
|
+
getPalette
|
|
153
|
+
} from "./chunk-NIUO2TNR.js";
|
|
154
|
+
import {
|
|
155
|
+
parseSequenceDgmo
|
|
156
|
+
} from "./chunk-LFKSHDVI.js";
|
|
157
|
+
import {
|
|
158
|
+
parseFlowchart
|
|
159
|
+
} from "./chunk-JRUEIRJB.js";
|
|
160
|
+
import {
|
|
161
|
+
parseState
|
|
162
|
+
} from "./chunk-AYOVY75O.js";
|
|
163
|
+
import {
|
|
164
|
+
parseClassDiagram
|
|
165
|
+
} from "./chunk-MFW6P7WH.js";
|
|
166
|
+
import {
|
|
167
|
+
parseERDiagram
|
|
168
|
+
} from "./chunk-WPL5PFXE.js";
|
|
169
|
+
import {
|
|
170
|
+
parseOrg
|
|
171
|
+
} from "./chunk-FJNXXGTR.js";
|
|
172
|
+
import {
|
|
173
|
+
parseSitemap
|
|
174
|
+
} from "./chunk-UG2XG57E.js";
|
|
175
|
+
import {
|
|
176
|
+
parseWireframe
|
|
177
|
+
} from "./chunk-HSRQDWV7.js";
|
|
53
178
|
import {
|
|
54
179
|
resolveActiveTagGroup,
|
|
55
180
|
tagAttrKey
|
|
56
181
|
} from "./chunk-L5AFONQU.js";
|
|
57
182
|
import {
|
|
58
|
-
|
|
59
|
-
|
|
183
|
+
measureText,
|
|
184
|
+
wrapTextToWidth
|
|
185
|
+
} from "./chunk-KAO7JL4I.js";
|
|
60
186
|
import {
|
|
61
187
|
getSeriesColors,
|
|
62
188
|
mix,
|
|
63
189
|
themeBaseBg
|
|
64
|
-
} from "./chunk-
|
|
190
|
+
} from "./chunk-L24LESXF.js";
|
|
65
191
|
import {
|
|
66
192
|
emit,
|
|
67
193
|
makeDgmoError
|
|
@@ -128,8 +254,8 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
|
|
|
128
254
|
);
|
|
129
255
|
const innerWidth = width - sMarginLeft - rightMargin;
|
|
130
256
|
const innerHeight = height - sMarginTop - sMarginBottom;
|
|
131
|
-
const
|
|
132
|
-
const [minVal, maxVal] = d3Array.extent(
|
|
257
|
+
const allValues2 = data.flatMap((d) => d.values);
|
|
258
|
+
const [minVal, maxVal] = d3Array.extent(allValues2);
|
|
133
259
|
const valuePadding = (maxVal - minVal) * 0.1 || 1;
|
|
134
260
|
const yScale = d3Scale.scaleLinear().domain([minVal - valuePadding, maxVal + valuePadding]).range([innerHeight, 0]);
|
|
135
261
|
const xScale = d3Scale.scalePoint().domain(periods).range([0, innerWidth]).padding(0);
|
|
@@ -1951,13 +2077,13 @@ function resolveArcChordOverride(content, detectedType, palette) {
|
|
|
1951
2077
|
}
|
|
1952
2078
|
async function renderForExport(content, theme, palette, viewState, options) {
|
|
1953
2079
|
const exportMode = options?.exportMode ?? false;
|
|
1954
|
-
const { parseDgmoChartType } = await import("./dgmo-router-
|
|
2080
|
+
const { parseDgmoChartType } = await import("./dgmo-router-7WANZOBD.js");
|
|
1955
2081
|
const detectedTypeRaw = parseDgmoChartType(content);
|
|
1956
2082
|
const override = resolveArcChordOverride(content, detectedTypeRaw, palette);
|
|
1957
2083
|
const renderContent = override?.content ?? content;
|
|
1958
2084
|
const detectedType = override?.type ?? detectedTypeRaw;
|
|
1959
2085
|
if (detectedType !== null) {
|
|
1960
|
-
const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-
|
|
2086
|
+
const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-KEQSUWKP.js");
|
|
1961
2087
|
if (supportsD3DataChart(detectedType)) {
|
|
1962
2088
|
return renderDataChartD32(renderContent, theme, palette, {
|
|
1963
2089
|
...options?.width !== void 0 && { width: options.width },
|
|
@@ -1990,10 +2116,10 @@ function ctxTagOverride(ctx) {
|
|
|
1990
2116
|
}
|
|
1991
2117
|
async function exportEventLine(ctx) {
|
|
1992
2118
|
const { content, theme, palette } = ctx;
|
|
1993
|
-
const { parseEventLine } = await import("./parser-KFYRTGTC.js");
|
|
1994
|
-
const { renderEventLineForExport } = await import("./renderer-
|
|
2119
|
+
const { parseEventLine: parseEventLine2 } = await import("./parser-KFYRTGTC.js");
|
|
2120
|
+
const { renderEventLineForExport } = await import("./renderer-VGQMJC5K.js");
|
|
1995
2121
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
1996
|
-
const parsed =
|
|
2122
|
+
const parsed = parseEventLine2(content, effectivePalette);
|
|
1997
2123
|
if (parsed.error || parsed.events.length === 0) return "";
|
|
1998
2124
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
1999
2125
|
renderEventLineForExport(
|
|
@@ -2009,10 +2135,10 @@ async function exportEventLine(ctx) {
|
|
|
2009
2135
|
}
|
|
2010
2136
|
async function exportBody(ctx) {
|
|
2011
2137
|
const { content, theme, palette } = ctx;
|
|
2012
|
-
const { parseBody } = await import("./parser-AKBVJHMK.js");
|
|
2013
|
-
const { renderBodyForExport } = await import("./renderer-
|
|
2138
|
+
const { parseBody: parseBody2 } = await import("./parser-AKBVJHMK.js");
|
|
2139
|
+
const { renderBodyForExport } = await import("./renderer-JRVY7HAD.js");
|
|
2014
2140
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2015
|
-
const parsed =
|
|
2141
|
+
const parsed = parseBody2(content, effectivePalette);
|
|
2016
2142
|
if (parsed.error) return "";
|
|
2017
2143
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2018
2144
|
renderBodyForExport(
|
|
@@ -2027,10 +2153,10 @@ async function exportBody(ctx) {
|
|
|
2027
2153
|
}
|
|
2028
2154
|
async function exportVersionControl(ctx) {
|
|
2029
2155
|
const { content, theme, palette } = ctx;
|
|
2030
|
-
const { parseVersionControl } = await import("./parser-KZMJNKDW.js");
|
|
2031
|
-
const { renderVersionControlForExport } = await import("./renderer-
|
|
2156
|
+
const { parseVersionControl: parseVersionControl2 } = await import("./parser-KZMJNKDW.js");
|
|
2157
|
+
const { renderVersionControlForExport } = await import("./renderer-WQ654YT5.js");
|
|
2032
2158
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2033
|
-
const parsed =
|
|
2159
|
+
const parsed = parseVersionControl2(content, effectivePalette);
|
|
2034
2160
|
if (parsed.error || parsed.nodes.length === 0) return "";
|
|
2035
2161
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2036
2162
|
renderVersionControlForExport(
|
|
@@ -2052,13 +2178,13 @@ function unionHiddenAttributes(hideOption, ha) {
|
|
|
2052
2178
|
}
|
|
2053
2179
|
async function exportOrg(ctx) {
|
|
2054
2180
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2055
|
-
const { parseOrg, findOrgNodeIdByName } = await import("./parser-JOOAVBJI.js");
|
|
2056
|
-
const { layoutOrg } = await import("./layout-
|
|
2181
|
+
const { parseOrg: parseOrg2, findOrgNodeIdByName } = await import("./parser-JOOAVBJI.js");
|
|
2182
|
+
const { layoutOrg } = await import("./layout-6L3BIFEZ.js");
|
|
2057
2183
|
const { collapseOrgTree, focusOrgTree, unionCollapsedOrgNodes } = await import("./collapse-JRGPUE67.js");
|
|
2058
|
-
const { renderOrg, ancestorTrailReserve } = await import("./renderer-
|
|
2184
|
+
const { renderOrg, ancestorTrailReserve } = await import("./renderer-DBNDLKPE.js");
|
|
2059
2185
|
const isDark = ctx.isDark;
|
|
2060
2186
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2061
|
-
const orgParsed =
|
|
2187
|
+
const orgParsed = parseOrg2(content, effectivePalette);
|
|
2062
2188
|
if (orgParsed.error) return "";
|
|
2063
2189
|
const collapsedNodes = unionCollapsedOrgNodes(orgParsed, viewState?.cg);
|
|
2064
2190
|
const activeTagGroup = resolveActiveTagGroup(
|
|
@@ -2116,13 +2242,13 @@ async function exportOrg(ctx) {
|
|
|
2116
2242
|
}
|
|
2117
2243
|
async function exportSitemap(ctx) {
|
|
2118
2244
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2119
|
-
const { parseSitemap } = await import("./parser-OKB64MMN.js");
|
|
2120
|
-
const { layoutSitemap } = await import("./layout-
|
|
2245
|
+
const { parseSitemap: parseSitemap2 } = await import("./parser-OKB64MMN.js");
|
|
2246
|
+
const { layoutSitemap } = await import("./layout-EFEZ533S.js");
|
|
2121
2247
|
const { collapseSitemapTree } = await import("./collapse-ZWUFFCK2.js");
|
|
2122
|
-
const { renderSitemap } = await import("./renderer-
|
|
2248
|
+
const { renderSitemap } = await import("./renderer-WB75JME5.js");
|
|
2123
2249
|
const isDark = ctx.isDark;
|
|
2124
2250
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2125
|
-
const sitemapParsed =
|
|
2251
|
+
const sitemapParsed = parseSitemap2(content, effectivePalette);
|
|
2126
2252
|
if (sitemapParsed.error || sitemapParsed.roots.length === 0) return "";
|
|
2127
2253
|
const collapsedNodes = viewState?.cg ? new Set(viewState.cg) : void 0;
|
|
2128
2254
|
const activeTagGroup = resolveActiveTagGroup(
|
|
@@ -2147,7 +2273,7 @@ async function exportSitemap(ctx) {
|
|
|
2147
2273
|
const {
|
|
2148
2274
|
LEGEND_HEIGHT: SITEMAP_LEGEND_HEIGHT,
|
|
2149
2275
|
LEGEND_GROUP_GAP: SITEMAP_LEGEND_GROUP_GAP
|
|
2150
|
-
} = await import("./legend-constants-
|
|
2276
|
+
} = await import("./legend-constants-HE7FVDJP.js");
|
|
2151
2277
|
const suppressedLegendBand = sitemapLayout.legend.length > 0 && effectiveParsed.options["no-legend"] === "on" ? SITEMAP_LEGEND_HEIGHT + SITEMAP_LEGEND_GROUP_GAP : 0;
|
|
2152
2278
|
const exportWidth = sitemapLayout.width + PADDING * 2;
|
|
2153
2279
|
const exportHeight = sitemapLayout.height + PADDING * 2 + titleOffset - suppressedLegendBand;
|
|
@@ -2168,10 +2294,10 @@ async function exportSitemap(ctx) {
|
|
|
2168
2294
|
}
|
|
2169
2295
|
async function exportKanban(ctx) {
|
|
2170
2296
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2171
|
-
const { parseKanban } = await import("./parser-
|
|
2172
|
-
const { renderKanban } = await import("./renderer-
|
|
2297
|
+
const { parseKanban: parseKanban2 } = await import("./parser-337TACHB.js");
|
|
2298
|
+
const { renderKanban } = await import("./renderer-7VQOKAII.js");
|
|
2173
2299
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2174
|
-
const kanbanParsed =
|
|
2300
|
+
const kanbanParsed = parseKanban2(content, effectivePalette);
|
|
2175
2301
|
if (kanbanParsed.error || kanbanParsed.columns.length === 0) return "";
|
|
2176
2302
|
const container = document.createElement("div");
|
|
2177
2303
|
container.style.position = "absolute";
|
|
@@ -2200,11 +2326,11 @@ async function exportKanban(ctx) {
|
|
|
2200
2326
|
}
|
|
2201
2327
|
async function exportClass(ctx) {
|
|
2202
2328
|
const { content, theme, palette, exportMode } = ctx;
|
|
2203
|
-
const { parseClassDiagram } = await import("./parser-
|
|
2204
|
-
const { layoutClassDiagram } = await import("./layout-
|
|
2205
|
-
const { renderClassDiagram } = await import("./renderer-
|
|
2329
|
+
const { parseClassDiagram: parseClassDiagram2 } = await import("./parser-IMM2JJX3.js");
|
|
2330
|
+
const { layoutClassDiagram } = await import("./layout-4RRC7XU7.js");
|
|
2331
|
+
const { renderClassDiagram } = await import("./renderer-4JE5ORRO.js");
|
|
2206
2332
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2207
|
-
const classParsed =
|
|
2333
|
+
const classParsed = parseClassDiagram2(content, effectivePalette);
|
|
2208
2334
|
if (classParsed.error || classParsed.classes.length === 0) return "";
|
|
2209
2335
|
const classLayout = layoutClassDiagram(classParsed);
|
|
2210
2336
|
const PADDING = 20;
|
|
@@ -2227,11 +2353,11 @@ async function exportClass(ctx) {
|
|
|
2227
2353
|
}
|
|
2228
2354
|
async function exportEr(ctx) {
|
|
2229
2355
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2230
|
-
const { parseERDiagram } = await import("./parser-J4DVNL4W.js");
|
|
2231
|
-
const { layoutERDiagram } = await import("./layout-
|
|
2232
|
-
const { renderERDiagram } = await import("./renderer-
|
|
2356
|
+
const { parseERDiagram: parseERDiagram2 } = await import("./parser-J4DVNL4W.js");
|
|
2357
|
+
const { layoutERDiagram } = await import("./layout-H4K54IW3.js");
|
|
2358
|
+
const { renderERDiagram } = await import("./renderer-NAA7D33G.js");
|
|
2233
2359
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2234
|
-
const erParsed =
|
|
2360
|
+
const erParsed = parseERDiagram2(content, effectivePalette);
|
|
2235
2361
|
if (erParsed.error || erParsed.tables.length === 0) return "";
|
|
2236
2362
|
const erLayout = layoutERDiagram(erParsed);
|
|
2237
2363
|
const PADDING = 20;
|
|
@@ -2261,14 +2387,14 @@ async function exportEr(ctx) {
|
|
|
2261
2387
|
}
|
|
2262
2388
|
async function exportSketch(ctx) {
|
|
2263
2389
|
const { content, theme, viewState, exportMode } = ctx;
|
|
2264
|
-
const { parseSketch } = await import("./parser-KZMALSB2.js");
|
|
2390
|
+
const { parseSketch: parseSketch2 } = await import("./parser-KZMALSB2.js");
|
|
2265
2391
|
const effectivePalette = await resolveExportPalette(theme, ctx.palette);
|
|
2266
|
-
const parsed =
|
|
2392
|
+
const parsed = parseSketch2(content, effectivePalette);
|
|
2267
2393
|
if (parsed.error || parsed.nodes.length === 0 && parsed.boxes.length === 0) {
|
|
2268
2394
|
return "";
|
|
2269
2395
|
}
|
|
2270
2396
|
const { layoutSketch } = await import("./layout-MSSHF45T.js");
|
|
2271
|
-
const { renderSketchForExport } = await import("./renderer-
|
|
2397
|
+
const { renderSketchForExport } = await import("./renderer-5GZNGZU5.js");
|
|
2272
2398
|
const collapsedBoxes = viewState?.cg ? new Set(viewState.cg) : void 0;
|
|
2273
2399
|
const skLayout = layoutSketch(parsed, {
|
|
2274
2400
|
...collapsedBoxes !== void 0 && { collapsedBoxes }
|
|
@@ -2295,9 +2421,9 @@ async function exportSketch(ctx) {
|
|
|
2295
2421
|
}
|
|
2296
2422
|
async function exportBoxesAndLines(ctx) {
|
|
2297
2423
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2298
|
-
const { parseBoxesAndLines } = await import("./parser-KYPP2DX6.js");
|
|
2424
|
+
const { parseBoxesAndLines: parseBoxesAndLines2 } = await import("./parser-KYPP2DX6.js");
|
|
2299
2425
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2300
|
-
const blParsed =
|
|
2426
|
+
const blParsed = parseBoxesAndLines2(content, effectivePalette);
|
|
2301
2427
|
if (blParsed.error || blParsed.nodes.length === 0) return "";
|
|
2302
2428
|
let blHiddenTagValues;
|
|
2303
2429
|
if (viewState?.htv) {
|
|
@@ -2306,8 +2432,8 @@ async function exportBoxesAndLines(ctx) {
|
|
|
2306
2432
|
blHiddenTagValues.set(k, new Set(v));
|
|
2307
2433
|
}
|
|
2308
2434
|
}
|
|
2309
|
-
const { renderBoxesAndLinesForExport } = await import("./renderer-
|
|
2310
|
-
const { layoutBoxesAndLines } = await import("./layout-
|
|
2435
|
+
const { renderBoxesAndLinesForExport } = await import("./renderer-ZXQXRNDR.js");
|
|
2436
|
+
const { layoutBoxesAndLines } = await import("./layout-ZP7XYVXF.js");
|
|
2311
2437
|
const blLayout = await layoutBoxesAndLines(blParsed);
|
|
2312
2438
|
const PADDING = 20;
|
|
2313
2439
|
const titleOffset = blParsed.title ? 40 : 0;
|
|
@@ -2336,11 +2462,11 @@ async function exportBoxesAndLines(ctx) {
|
|
|
2336
2462
|
}
|
|
2337
2463
|
async function exportSwimlane(ctx) {
|
|
2338
2464
|
const { content, theme, palette } = ctx;
|
|
2339
|
-
const { parseSwimlane } = await import("./parser-ZLKYDFI5.js");
|
|
2465
|
+
const { parseSwimlane: parseSwimlane2 } = await import("./parser-ZLKYDFI5.js");
|
|
2340
2466
|
const { layoutSwimlane } = await import("./layout-RANVNAKI.js");
|
|
2341
|
-
const { renderSwimlaneForExport } = await import("./renderer-
|
|
2467
|
+
const { renderSwimlaneForExport } = await import("./renderer-J4OS77PK.js");
|
|
2342
2468
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2343
|
-
const swimParsed =
|
|
2469
|
+
const swimParsed = parseSwimlane2(content, effectivePalette);
|
|
2344
2470
|
if (swimParsed.error || swimParsed.nodes.length === 0) return "";
|
|
2345
2471
|
const swimLayout = layoutSwimlane(swimParsed);
|
|
2346
2472
|
const PADDING = 20;
|
|
@@ -2368,11 +2494,11 @@ async function exportSwimlane(ctx) {
|
|
|
2368
2494
|
}
|
|
2369
2495
|
async function exportFamily(ctx) {
|
|
2370
2496
|
const { content, theme, palette } = ctx;
|
|
2371
|
-
const { parseFamily } = await import("./parser-NPXPJHWN.js");
|
|
2497
|
+
const { parseFamily: parseFamily2 } = await import("./parser-NPXPJHWN.js");
|
|
2372
2498
|
const { layoutFamily } = await import("./layout-5VSMZPMG.js");
|
|
2373
|
-
const { renderFamilyForExport } = await import("./renderer-
|
|
2499
|
+
const { renderFamilyForExport } = await import("./renderer-XHEMXBQM.js");
|
|
2374
2500
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2375
|
-
const parsed =
|
|
2501
|
+
const parsed = parseFamily2(content, effectivePalette);
|
|
2376
2502
|
if (parsed.error || parsed.persons.size === 0) return "";
|
|
2377
2503
|
const layout = layoutFamily(parsed);
|
|
2378
2504
|
const PADDING = 20;
|
|
@@ -2400,13 +2526,13 @@ async function exportFamily(ctx) {
|
|
|
2400
2526
|
}
|
|
2401
2527
|
async function exportMindmap(ctx) {
|
|
2402
2528
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2403
|
-
const { parseMindmap } = await import("./parser-NGHQQGD2.js");
|
|
2404
|
-
const { layoutMindmap } = await import("./layout-
|
|
2529
|
+
const { parseMindmap: parseMindmap2 } = await import("./parser-NGHQQGD2.js");
|
|
2530
|
+
const { layoutMindmap } = await import("./layout-PP36LUTA.js");
|
|
2405
2531
|
const { collapseMindmapTree } = await import("./collapse-SLINJQW6.js");
|
|
2406
|
-
const { renderMindmap } = await import("./renderer-
|
|
2532
|
+
const { renderMindmap } = await import("./renderer-EAORWLVK.js");
|
|
2407
2533
|
const isDark = ctx.isDark;
|
|
2408
2534
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2409
|
-
const mmParsed =
|
|
2535
|
+
const mmParsed = parseMindmap2(content, effectivePalette);
|
|
2410
2536
|
if (mmParsed.error) return "";
|
|
2411
2537
|
const collapsedNodes = new Set(viewState?.cg ?? []);
|
|
2412
2538
|
const collectCollapsed = (nodes) => {
|
|
@@ -2453,11 +2579,11 @@ async function exportMindmap(ctx) {
|
|
|
2453
2579
|
}
|
|
2454
2580
|
async function exportWireframe(ctx) {
|
|
2455
2581
|
const { content, theme, palette } = ctx;
|
|
2456
|
-
const { parseWireframe } = await import("./parser-HCGXNHHL.js");
|
|
2582
|
+
const { parseWireframe: parseWireframe2 } = await import("./parser-HCGXNHHL.js");
|
|
2457
2583
|
const { layoutWireframe } = await import("./layout-UIV56NUA.js");
|
|
2458
|
-
const { renderWireframe } = await import("./renderer-
|
|
2584
|
+
const { renderWireframe } = await import("./renderer-2ZQ6DPVD.js");
|
|
2459
2585
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2460
|
-
const wireframeParsed =
|
|
2586
|
+
const wireframeParsed = parseWireframe2(content);
|
|
2461
2587
|
if (wireframeParsed.error || wireframeParsed.roots.length === 0 && wireframeParsed.modals.length === 0)
|
|
2462
2588
|
return "";
|
|
2463
2589
|
const wireframeLayout = layoutWireframe(wireframeParsed);
|
|
@@ -2478,16 +2604,16 @@ async function exportWireframe(ctx) {
|
|
|
2478
2604
|
}
|
|
2479
2605
|
async function exportC4(ctx) {
|
|
2480
2606
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2481
|
-
const { parseC4 } = await import("./parser-WEVTMBJ5.js");
|
|
2607
|
+
const { parseC4: parseC42 } = await import("./parser-WEVTMBJ5.js");
|
|
2482
2608
|
const {
|
|
2483
2609
|
layoutC4Context,
|
|
2484
2610
|
layoutC4Containers,
|
|
2485
2611
|
layoutC4Components,
|
|
2486
2612
|
layoutC4Deployment
|
|
2487
|
-
} = await import("./layout-
|
|
2488
|
-
const { renderC4Context, renderC4Containers } = await import("./renderer-
|
|
2613
|
+
} = await import("./layout-Q3RYSODA.js");
|
|
2614
|
+
const { renderC4Context, renderC4Containers } = await import("./renderer-IR5GGAPB.js");
|
|
2489
2615
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2490
|
-
const c4Parsed =
|
|
2616
|
+
const c4Parsed = parseC42(content, effectivePalette);
|
|
2491
2617
|
if (c4Parsed.error || c4Parsed.elements.length === 0) return "";
|
|
2492
2618
|
const c4Level = ctx.options?.c4Level ?? viewState?.c4l ?? "context";
|
|
2493
2619
|
const c4System = ctx.options?.c4System ?? viewState?.c4s;
|
|
@@ -2519,11 +2645,11 @@ async function exportC4(ctx) {
|
|
|
2519
2645
|
}
|
|
2520
2646
|
async function exportFlowchart(ctx) {
|
|
2521
2647
|
const { content, theme, palette } = ctx;
|
|
2522
|
-
const { parseFlowchart } = await import("./flowchart-parser-GG7XBLQH.js");
|
|
2648
|
+
const { parseFlowchart: parseFlowchart2 } = await import("./flowchart-parser-GG7XBLQH.js");
|
|
2523
2649
|
const { layoutGraph } = await import("./layout-XUW444O5.js");
|
|
2524
|
-
const { renderFlowchart } = await import("./flowchart-renderer-
|
|
2650
|
+
const { renderFlowchart } = await import("./flowchart-renderer-DZQZRL2F.js");
|
|
2525
2651
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2526
|
-
const fcParsed =
|
|
2652
|
+
const fcParsed = parseFlowchart2(content, effectivePalette);
|
|
2527
2653
|
if (fcParsed.error || fcParsed.nodes.length === 0) return "";
|
|
2528
2654
|
const layout = layoutGraph(fcParsed);
|
|
2529
2655
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
@@ -2540,12 +2666,12 @@ async function exportFlowchart(ctx) {
|
|
|
2540
2666
|
}
|
|
2541
2667
|
async function exportInfra(ctx) {
|
|
2542
2668
|
const { content, theme, palette, viewState } = ctx;
|
|
2543
|
-
const { parseInfra } = await import("./parser-DGF3ZEO6.js");
|
|
2669
|
+
const { parseInfra: parseInfra2 } = await import("./parser-DGF3ZEO6.js");
|
|
2544
2670
|
const { computeInfra } = await import("./compute-JAP5E2E4.js");
|
|
2545
2671
|
const { layoutInfra } = await import("./layout-SW3XWYKC.js");
|
|
2546
|
-
const { renderInfra, computeInfraLegendGroups } = await import("./renderer-
|
|
2672
|
+
const { renderInfra, computeInfraLegendGroups } = await import("./renderer-P4XCRNCY.js");
|
|
2547
2673
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2548
|
-
const infraParsed =
|
|
2674
|
+
const infraParsed = parseInfra2(content);
|
|
2549
2675
|
if (infraParsed.error || infraParsed.nodes.length === 0) return "";
|
|
2550
2676
|
const infraComputed = computeInfra(infraParsed);
|
|
2551
2677
|
const infraLayout = layoutInfra(infraComputed);
|
|
@@ -2590,12 +2716,12 @@ async function exportInfra(ctx) {
|
|
|
2590
2716
|
}
|
|
2591
2717
|
async function exportPert(ctx) {
|
|
2592
2718
|
const { content, theme, palette, viewState } = ctx;
|
|
2593
|
-
const { parsePert } = await import("./parser-
|
|
2594
|
-
const { analyzePert } = await import("./analyzer-
|
|
2595
|
-
const { layoutPert } = await import("./layout-
|
|
2596
|
-
const { renderPert, measurePertAnalysisBlock } = await import("./renderer-
|
|
2719
|
+
const { parsePert: parsePert2 } = await import("./parser-P4TOQYNN.js");
|
|
2720
|
+
const { analyzePert } = await import("./analyzer-7ZGAZIE6.js");
|
|
2721
|
+
const { layoutPert } = await import("./layout-IGAVGDME.js");
|
|
2722
|
+
const { renderPert, measurePertAnalysisBlock } = await import("./renderer-YTEZK3GC.js");
|
|
2597
2723
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2598
|
-
const pertParsed =
|
|
2724
|
+
const pertParsed = parsePert2(content, { palette: effectivePalette });
|
|
2599
2725
|
if (pertParsed.error || pertParsed.activities.length === 0) return "";
|
|
2600
2726
|
const pertResolved = analyzePert(pertParsed);
|
|
2601
2727
|
const pertLayout = layoutPert(pertResolved);
|
|
@@ -2636,11 +2762,11 @@ async function exportPert(ctx) {
|
|
|
2636
2762
|
}
|
|
2637
2763
|
async function exportGantt(ctx) {
|
|
2638
2764
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2639
|
-
const { parseGantt } = await import("./parser-
|
|
2765
|
+
const { parseGantt: parseGantt2 } = await import("./parser-GCCWMBTU.js");
|
|
2640
2766
|
const { calculateSchedule } = await import("./calculator-35YVW4QO.js");
|
|
2641
|
-
const { renderGantt } = await import("./renderer-
|
|
2767
|
+
const { renderGantt } = await import("./renderer-7L7J4DHO.js");
|
|
2642
2768
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2643
|
-
const ganttParsed =
|
|
2769
|
+
const ganttParsed = parseGantt2(content, effectivePalette);
|
|
2644
2770
|
const resolved = calculateSchedule(ganttParsed);
|
|
2645
2771
|
if (resolved.tasks.length === 0) return "";
|
|
2646
2772
|
const EXPORT_W = ctx.width;
|
|
@@ -2679,12 +2805,12 @@ async function exportGantt(ctx) {
|
|
|
2679
2805
|
}
|
|
2680
2806
|
async function exportState(ctx) {
|
|
2681
2807
|
const { content, theme, palette, viewState } = ctx;
|
|
2682
|
-
const { parseState } = await import("./state-parser-FE3RF6XY.js");
|
|
2808
|
+
const { parseState: parseState2 } = await import("./state-parser-FE3RF6XY.js");
|
|
2683
2809
|
const { layoutGraph } = await import("./layout-XUW444O5.js");
|
|
2684
|
-
const { renderState } = await import("./state-renderer-
|
|
2810
|
+
const { renderState } = await import("./state-renderer-4S2C2CHB.js");
|
|
2685
2811
|
const { collapseStateGroups } = await import("./state-collapse-HCGD6IVJ.js");
|
|
2686
2812
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2687
|
-
const stateParsed =
|
|
2813
|
+
const stateParsed = parseState2(content, effectivePalette);
|
|
2688
2814
|
if (stateParsed.error || stateParsed.nodes.length === 0) return "";
|
|
2689
2815
|
const sourceCollapsed = (stateParsed.groups ?? []).filter((g) => g.collapsed).map((g) => g.id);
|
|
2690
2816
|
const collapsedGroups = /* @__PURE__ */ new Set([
|
|
@@ -2718,10 +2844,10 @@ async function exportState(ctx) {
|
|
|
2718
2844
|
}
|
|
2719
2845
|
async function exportTechRadar(ctx) {
|
|
2720
2846
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2721
|
-
const { parseTechRadar } = await import("./parser-NOANDFJ4.js");
|
|
2722
|
-
const { renderTechRadarForExport } = await import("./renderer-
|
|
2847
|
+
const { parseTechRadar: parseTechRadar2 } = await import("./parser-NOANDFJ4.js");
|
|
2848
|
+
const { renderTechRadarForExport } = await import("./renderer-QQHQY3GT.js");
|
|
2723
2849
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2724
|
-
const radarParsed =
|
|
2850
|
+
const radarParsed = parseTechRadar2(content);
|
|
2725
2851
|
if (radarParsed.error || radarParsed.quadrants.length === 0) return "";
|
|
2726
2852
|
const RADAR_EXPORT_W = ctx.requestedWidth ?? 1300;
|
|
2727
2853
|
const RADAR_EXPORT_H = ctx.requestedHeight ?? 1500;
|
|
@@ -2739,11 +2865,11 @@ async function exportTechRadar(ctx) {
|
|
|
2739
2865
|
}
|
|
2740
2866
|
async function exportJourneyMap(ctx) {
|
|
2741
2867
|
const { content, theme, palette, exportMode } = ctx;
|
|
2742
|
-
const { parseJourneyMap } = await import("./parser-
|
|
2743
|
-
const { renderJourneyMap } = await import("./renderer-
|
|
2744
|
-
const { layoutJourneyMap } = await import("./layout-
|
|
2868
|
+
const { parseJourneyMap: parseJourneyMap2 } = await import("./parser-UTXFJG4X.js");
|
|
2869
|
+
const { renderJourneyMap } = await import("./renderer-3AD4NDF5.js");
|
|
2870
|
+
const { layoutJourneyMap } = await import("./layout-DXVAYF6W.js");
|
|
2745
2871
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2746
|
-
const jmParsed =
|
|
2872
|
+
const jmParsed = parseJourneyMap2(content, effectivePalette);
|
|
2747
2873
|
if (jmParsed.error || jmParsed.phases.length === 0 && jmParsed.steps.length === 0)
|
|
2748
2874
|
return "";
|
|
2749
2875
|
const jmLayout = layoutJourneyMap(jmParsed, effectivePalette, {
|
|
@@ -2761,10 +2887,10 @@ async function exportJourneyMap(ctx) {
|
|
|
2761
2887
|
}
|
|
2762
2888
|
async function exportCycle(ctx) {
|
|
2763
2889
|
const { content, theme, palette, viewState, exportMode } = ctx;
|
|
2764
|
-
const { parseCycle } = await import("./parser-7OEE7QT6.js");
|
|
2765
|
-
const { renderCycleForExport } = await import("./renderer-
|
|
2890
|
+
const { parseCycle: parseCycle2 } = await import("./parser-7OEE7QT6.js");
|
|
2891
|
+
const { renderCycleForExport } = await import("./renderer-JR2XNZAH.js");
|
|
2766
2892
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2767
|
-
const cycleParsed =
|
|
2893
|
+
const cycleParsed = parseCycle2(content);
|
|
2768
2894
|
if (cycleParsed.error || cycleParsed.nodes.length === 0) return "";
|
|
2769
2895
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2770
2896
|
renderCycleForExport(
|
|
@@ -2780,12 +2906,12 @@ async function exportCycle(ctx) {
|
|
|
2780
2906
|
}
|
|
2781
2907
|
async function exportMap(ctx) {
|
|
2782
2908
|
const { content, theme, palette, options } = ctx;
|
|
2783
|
-
const { parseMap } = await import("./parser-GEKPWSSK.js");
|
|
2909
|
+
const { parseMap: parseMap2 } = await import("./parser-GEKPWSSK.js");
|
|
2784
2910
|
const { resolveMap } = await import("./resolver-XSXE2TRX.js");
|
|
2785
|
-
const { renderMapForExport } = await import("./renderer-
|
|
2786
|
-
const { mapExportDimensions } = await import("./dimensions-
|
|
2911
|
+
const { renderMapForExport } = await import("./renderer-FCXRDYSJ.js");
|
|
2912
|
+
const { mapExportDimensions } = await import("./dimensions-7MF7VSGS.js");
|
|
2787
2913
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2788
|
-
const mapParsed =
|
|
2914
|
+
const mapParsed = parseMap2(content, effectivePalette);
|
|
2789
2915
|
const { data: mapData, reason } = await resolveMapDataSource(
|
|
2790
2916
|
options?.mapData
|
|
2791
2917
|
);
|
|
@@ -2816,10 +2942,10 @@ async function exportMap(ctx) {
|
|
|
2816
2942
|
}
|
|
2817
2943
|
async function exportPyramid(ctx) {
|
|
2818
2944
|
const { content, theme, palette } = ctx;
|
|
2819
|
-
const { parsePyramid } = await import("./parser-OVQTTTUJ.js");
|
|
2820
|
-
const { renderPyramidForExport } = await import("./renderer-
|
|
2945
|
+
const { parsePyramid: parsePyramid2 } = await import("./parser-OVQTTTUJ.js");
|
|
2946
|
+
const { renderPyramidForExport } = await import("./renderer-BLHN3RCY.js");
|
|
2821
2947
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2822
|
-
const pyramidParsed =
|
|
2948
|
+
const pyramidParsed = parsePyramid2(content);
|
|
2823
2949
|
if (pyramidParsed.error || pyramidParsed.layers.length === 0) return "";
|
|
2824
2950
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2825
2951
|
renderPyramidForExport(
|
|
@@ -2833,10 +2959,10 @@ async function exportPyramid(ctx) {
|
|
|
2833
2959
|
}
|
|
2834
2960
|
async function exportRing(ctx) {
|
|
2835
2961
|
const { content, theme, palette } = ctx;
|
|
2836
|
-
const { parseRing } = await import("./parser-GZ3LVF72.js");
|
|
2837
|
-
const { renderRingForExport } = await import("./renderer-
|
|
2962
|
+
const { parseRing: parseRing2 } = await import("./parser-GZ3LVF72.js");
|
|
2963
|
+
const { renderRingForExport } = await import("./renderer-CHQZES6G.js");
|
|
2838
2964
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2839
|
-
const ringParsed =
|
|
2965
|
+
const ringParsed = parseRing2(content);
|
|
2840
2966
|
if (ringParsed.error || ringParsed.layers.length === 0) return "";
|
|
2841
2967
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2842
2968
|
renderRingForExport(container, ringParsed, effectivePalette, ctx.isDark, {
|
|
@@ -2847,14 +2973,14 @@ async function exportRing(ctx) {
|
|
|
2847
2973
|
}
|
|
2848
2974
|
async function exportTreemap(ctx) {
|
|
2849
2975
|
const { content, theme, palette } = ctx;
|
|
2850
|
-
const { parseTreemap } = await import("./parser-AN3MGHRL.js");
|
|
2976
|
+
const { parseTreemap: parseTreemap2 } = await import("./parser-AN3MGHRL.js");
|
|
2851
2977
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2852
|
-
const treemapParsed =
|
|
2978
|
+
const treemapParsed = parseTreemap2(content, effectivePalette);
|
|
2853
2979
|
if (treemapParsed.error || treemapParsed.roots.length === 0) return "";
|
|
2854
2980
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2855
2981
|
const dims = { width: ctx.width, height: ctx.height };
|
|
2856
2982
|
if (treemapParsed.options.radial) {
|
|
2857
|
-
const { renderTreemapRadialForExport } = await import("./renderer-radial-
|
|
2983
|
+
const { renderTreemapRadialForExport } = await import("./renderer-radial-NA5DVBG4.js");
|
|
2858
2984
|
renderTreemapRadialForExport(
|
|
2859
2985
|
container,
|
|
2860
2986
|
treemapParsed,
|
|
@@ -2863,7 +2989,7 @@ async function exportTreemap(ctx) {
|
|
|
2863
2989
|
dims
|
|
2864
2990
|
);
|
|
2865
2991
|
} else {
|
|
2866
|
-
const { renderTreemapForExport } = await import("./renderer-
|
|
2992
|
+
const { renderTreemapForExport } = await import("./renderer-XFEZ5UBE.js");
|
|
2867
2993
|
renderTreemapForExport(
|
|
2868
2994
|
container,
|
|
2869
2995
|
treemapParsed,
|
|
@@ -2876,17 +3002,17 @@ async function exportTreemap(ctx) {
|
|
|
2876
3002
|
}
|
|
2877
3003
|
async function exportLiveLink(ctx) {
|
|
2878
3004
|
const { content, theme, palette } = ctx;
|
|
2879
|
-
const { parseLiveLink } = await import("./parser-XYY5NHP4.js");
|
|
2880
|
-
const { renderLiveLinkCard } = await import("./renderer-
|
|
3005
|
+
const { parseLiveLink: parseLiveLink2 } = await import("./parser-XYY5NHP4.js");
|
|
3006
|
+
const { renderLiveLinkCard } = await import("./renderer-TJJGFQGT.js");
|
|
2881
3007
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2882
|
-
return renderLiveLinkCard(
|
|
3008
|
+
return renderLiveLinkCard(parseLiveLink2(content), effectivePalette, theme);
|
|
2883
3009
|
}
|
|
2884
3010
|
async function exportBlock(ctx) {
|
|
2885
3011
|
const { content, theme, palette } = ctx;
|
|
2886
|
-
const { parseBlock } = await import("./parser-5655XSOR.js");
|
|
2887
|
-
const { renderBlockForExport } = await import("./renderer-
|
|
3012
|
+
const { parseBlock: parseBlock2 } = await import("./parser-5655XSOR.js");
|
|
3013
|
+
const { renderBlockForExport } = await import("./renderer-DCJ4AQ3N.js");
|
|
2888
3014
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2889
|
-
const blockParsed =
|
|
3015
|
+
const blockParsed = parseBlock2(content, effectivePalette);
|
|
2890
3016
|
if (blockParsed.error || blockParsed.top.rows.length === 0) return "";
|
|
2891
3017
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2892
3018
|
renderBlockForExport(container, blockParsed, effectivePalette, ctx.isDark, {
|
|
@@ -2897,10 +3023,10 @@ async function exportBlock(ctx) {
|
|
|
2897
3023
|
}
|
|
2898
3024
|
async function exportGoal(ctx) {
|
|
2899
3025
|
const { content, theme, palette } = ctx;
|
|
2900
|
-
const { parseGoal } = await import("./parser-SA3RAJFS.js");
|
|
2901
|
-
const { renderGoalForExport } = await import("./renderer-
|
|
3026
|
+
const { parseGoal: parseGoal2 } = await import("./parser-SA3RAJFS.js");
|
|
3027
|
+
const { renderGoalForExport } = await import("./renderer-7HOSI6JJ.js");
|
|
2902
3028
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2903
|
-
const parsed =
|
|
3029
|
+
const parsed = parseGoal2(content, effectivePalette);
|
|
2904
3030
|
if (parsed.error) return "";
|
|
2905
3031
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2906
3032
|
renderGoalForExport(container, parsed, effectivePalette, ctx.isDark, {
|
|
@@ -2911,10 +3037,10 @@ async function exportGoal(ctx) {
|
|
|
2911
3037
|
}
|
|
2912
3038
|
async function exportCountdown(ctx) {
|
|
2913
3039
|
const { content, theme, palette } = ctx;
|
|
2914
|
-
const { parseCountdown } = await import("./parser-LGS65QPN.js");
|
|
2915
|
-
const { renderCountdownForExport } = await import("./renderer-
|
|
3040
|
+
const { parseCountdown: parseCountdown2 } = await import("./parser-LGS65QPN.js");
|
|
3041
|
+
const { renderCountdownForExport } = await import("./renderer-7MCC6GKH.js");
|
|
2916
3042
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2917
|
-
const parsed =
|
|
3043
|
+
const parsed = parseCountdown2(content, effectivePalette);
|
|
2918
3044
|
if (parsed.error) return "";
|
|
2919
3045
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2920
3046
|
renderCountdownForExport(container, parsed, effectivePalette, ctx.isDark, {
|
|
@@ -2925,10 +3051,10 @@ async function exportCountdown(ctx) {
|
|
|
2925
3051
|
}
|
|
2926
3052
|
async function exportClock(ctx) {
|
|
2927
3053
|
const { content, theme, palette } = ctx;
|
|
2928
|
-
const { parseClock } = await import("./parser-256EIWB2.js");
|
|
2929
|
-
const { renderClockForExport } = await import("./renderer-
|
|
3054
|
+
const { parseClock: parseClock2 } = await import("./parser-256EIWB2.js");
|
|
3055
|
+
const { renderClockForExport } = await import("./renderer-CEIX5JPA.js");
|
|
2930
3056
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2931
|
-
const parsed =
|
|
3057
|
+
const parsed = parseClock2(content, effectivePalette);
|
|
2932
3058
|
if (parsed.error) return "";
|
|
2933
3059
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2934
3060
|
renderClockForExport(container, parsed, effectivePalette, ctx.isDark, {
|
|
@@ -2939,10 +3065,10 @@ async function exportClock(ctx) {
|
|
|
2939
3065
|
}
|
|
2940
3066
|
async function exportBracket(ctx) {
|
|
2941
3067
|
const { content, theme, palette } = ctx;
|
|
2942
|
-
const { parseBracket } = await import("./parser-DHSFIUPU.js");
|
|
2943
|
-
const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-
|
|
3068
|
+
const { parseBracket: parseBracket2 } = await import("./parser-DHSFIUPU.js");
|
|
3069
|
+
const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-VYWCMRWA.js");
|
|
2944
3070
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2945
|
-
const parsed =
|
|
3071
|
+
const parsed = parseBracket2(content, effectivePalette);
|
|
2946
3072
|
if (parsed.error) return "";
|
|
2947
3073
|
const { width, height } = bracketExportDimensions(parsed, effectivePalette);
|
|
2948
3074
|
const container = createExportContainer(width, height);
|
|
@@ -2954,10 +3080,10 @@ async function exportBracket(ctx) {
|
|
|
2954
3080
|
}
|
|
2955
3081
|
async function exportRaci(ctx) {
|
|
2956
3082
|
const { content, theme, palette } = ctx;
|
|
2957
|
-
const { parseRaci } = await import("./parser-LANGKWRG.js");
|
|
2958
|
-
const { renderRaciForExport } = await import("./renderer-
|
|
3083
|
+
const { parseRaci: parseRaci2 } = await import("./parser-LANGKWRG.js");
|
|
3084
|
+
const { renderRaciForExport } = await import("./renderer-6OQM32X3.js");
|
|
2959
3085
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
2960
|
-
const raciParsed =
|
|
3086
|
+
const raciParsed = parseRaci2(content, effectivePalette);
|
|
2961
3087
|
if (raciParsed.error) return "";
|
|
2962
3088
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
2963
3089
|
renderRaciForExport(container, raciParsed, effectivePalette, ctx.isDark, {
|
|
@@ -3087,9 +3213,9 @@ async function exportVisualization(ctx) {
|
|
|
3087
3213
|
const effectivePalette = await resolveExportPalette(theme, palette);
|
|
3088
3214
|
const isDark = ctx.isDark;
|
|
3089
3215
|
const container = createExportContainer(ctx.width, ctx.height);
|
|
3090
|
-
const { parseSequenceDgmo } = await import("./parser-
|
|
3091
|
-
const { renderSequenceDiagram } = await import("./renderer-
|
|
3092
|
-
const seqParsed =
|
|
3216
|
+
const { parseSequenceDgmo: parseSequenceDgmo2 } = await import("./parser-TL3JA4RI.js");
|
|
3217
|
+
const { renderSequenceDiagram } = await import("./renderer-43ESBXVY.js");
|
|
3218
|
+
const seqParsed = parseSequenceDgmo2(content, effectivePalette);
|
|
3093
3219
|
if (seqParsed.error || seqParsed.participants.length === 0) return "";
|
|
3094
3220
|
const collapsedSections = viewState?.cs ? new Set(viewState.cs) : void 0;
|
|
3095
3221
|
const collapsedGroups = viewState?.cg ? new Set(viewState.cg.map(Number).filter((n) => Number.isFinite(n))) : void 0;
|
|
@@ -3684,24 +3810,751 @@ function injectHoverStyles(svg, chartType, opts) {
|
|
|
3684
3810
|
}
|
|
3685
3811
|
|
|
3686
3812
|
// src/utils/root-a11y.ts
|
|
3687
|
-
function applyRootA11y(svg, chartType) {
|
|
3813
|
+
function applyRootA11y(svg, chartType, title) {
|
|
3688
3814
|
if (!chartType) return svg;
|
|
3689
3815
|
const m = svg.match(/<svg\b[^>]*>/);
|
|
3690
3816
|
if (!m) return svg;
|
|
3691
3817
|
const rootTag = m[0];
|
|
3692
3818
|
if (/\brole=/.test(rootTag) || /\baria-label=/.test(rootTag)) return svg;
|
|
3693
|
-
const
|
|
3819
|
+
const typeLabel = `${chartType.charAt(0).toUpperCase()}${chartType.slice(1)} diagram`;
|
|
3820
|
+
const label = title ? `${title} \u2014 ${typeLabel}` : typeLabel;
|
|
3694
3821
|
const withA11y = rootTag.replace(
|
|
3695
3822
|
/^<svg\b/,
|
|
3696
3823
|
`<svg role="img" aria-label="${escapeAttr(label)}"`
|
|
3697
3824
|
);
|
|
3698
3825
|
return svg.replace(rootTag, withA11y);
|
|
3699
3826
|
}
|
|
3827
|
+
function applyRootDesc(svg, summary) {
|
|
3828
|
+
if (!summary) return svg;
|
|
3829
|
+
const m = svg.match(/<svg\b[^>]*>/);
|
|
3830
|
+
if (!m) return svg;
|
|
3831
|
+
const rootTag = m[0];
|
|
3832
|
+
if (/\baria-describedby=/.test(rootTag)) return svg;
|
|
3833
|
+
const id = `dgmo-desc-${fnv1a(summary)}`;
|
|
3834
|
+
const withDesc = rootTag.replace(/^<svg\b/, `<svg aria-describedby="${id}"`) + `<desc id="${id}">${escapeAttr(summary)}</desc>`;
|
|
3835
|
+
return svg.replace(rootTag, () => withDesc);
|
|
3836
|
+
}
|
|
3837
|
+
function fnv1a(s) {
|
|
3838
|
+
let h = 2166136261;
|
|
3839
|
+
for (let i = 0; i < s.length; i++) {
|
|
3840
|
+
h ^= s.charCodeAt(i);
|
|
3841
|
+
h = Math.imul(h, 16777619);
|
|
3842
|
+
}
|
|
3843
|
+
return (h >>> 0).toString(16).padStart(8, "0");
|
|
3844
|
+
}
|
|
3700
3845
|
function escapeAttr(s) {
|
|
3701
3846
|
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
3702
3847
|
}
|
|
3703
3848
|
|
|
3849
|
+
// src/utils/diagram-summary.ts
|
|
3850
|
+
var MAX_NAMES = 5;
|
|
3851
|
+
function listNames(names) {
|
|
3852
|
+
const shown = names.length > MAX_NAMES + 1 ? names.slice(0, MAX_NAMES) : names.slice();
|
|
3853
|
+
const rest = names.length - shown.length;
|
|
3854
|
+
if (rest > 0) return `${shown.join(", ")} and ${rest} more`;
|
|
3855
|
+
if (shown.length <= 1) return shown.join("");
|
|
3856
|
+
return `${shown.slice(0, -1).join(", ")} and ${shown[shown.length - 1]}`;
|
|
3857
|
+
}
|
|
3858
|
+
function plural(n, one, many) {
|
|
3859
|
+
return `${n} ${n === 1 ? one : many}`;
|
|
3860
|
+
}
|
|
3861
|
+
function chartNoun(type) {
|
|
3862
|
+
const words = type.replace(/-/g, " ");
|
|
3863
|
+
return `${words.charAt(0).toUpperCase()}${words.slice(1)} chart`;
|
|
3864
|
+
}
|
|
3865
|
+
function allValues(parsed) {
|
|
3866
|
+
return parsed.data.flatMap((d) => [d.value, ...d.extraValues ?? []]);
|
|
3867
|
+
}
|
|
3868
|
+
function seriesNames(parsed) {
|
|
3869
|
+
if (parsed.seriesNames && parsed.seriesNames.length > 0) {
|
|
3870
|
+
return parsed.seriesNames;
|
|
3871
|
+
}
|
|
3872
|
+
return parsed.series ? [parsed.series] : [];
|
|
3873
|
+
}
|
|
3874
|
+
function seriesPhrase(parsed) {
|
|
3875
|
+
const names = seriesNames(parsed);
|
|
3876
|
+
if (names.length > 1) {
|
|
3877
|
+
return ` of ${plural(names.length, "series", "series")}, ${listNames(names)},`;
|
|
3878
|
+
}
|
|
3879
|
+
const one = names[0] ?? parsed.ylabel;
|
|
3880
|
+
return one ? ` of ${one}` : "";
|
|
3881
|
+
}
|
|
3882
|
+
function rangePhrase(values) {
|
|
3883
|
+
const lo = Math.min(...values);
|
|
3884
|
+
const hi = Math.max(...values);
|
|
3885
|
+
return lo === hi ? `every value is ${compactNumber(lo)}` : `values range from ${compactNumber(lo)} to ${compactNumber(hi)}`;
|
|
3886
|
+
}
|
|
3887
|
+
function summarizeChart(content) {
|
|
3888
|
+
const parsed = parseChart(content);
|
|
3889
|
+
if (parsed.error) return null;
|
|
3890
|
+
const noun = chartNoun(parsed.type);
|
|
3891
|
+
const points = parsed.data;
|
|
3892
|
+
if (points.length === 0) return `${noun} with no data.`;
|
|
3893
|
+
switch (parsed.type) {
|
|
3894
|
+
case "pie":
|
|
3895
|
+
case "polar-area": {
|
|
3896
|
+
const total = points.reduce((sum, d) => sum + d.value, 0);
|
|
3897
|
+
const parts = plural(
|
|
3898
|
+
points.length,
|
|
3899
|
+
parsed.type === "pie" ? "slice" : "wedge",
|
|
3900
|
+
parsed.type === "pie" ? "slices" : "wedges"
|
|
3901
|
+
);
|
|
3902
|
+
const largest = points.reduce((a, b) => b.value > a.value ? b : a);
|
|
3903
|
+
if (total <= 0) return `${noun} with ${parts}, all zero.`;
|
|
3904
|
+
const pct = Math.round(largest.value / total * 100);
|
|
3905
|
+
return `${noun} with ${parts} totalling ${compactNumber(total)}; the largest is ${largest.label} at ${pct}%.`;
|
|
3906
|
+
}
|
|
3907
|
+
case "radar":
|
|
3908
|
+
return `${noun}${seriesPhrase(parsed)} across ${plural(points.length, "axis", "axes")}; ${rangePhrase(allValues(parsed))}.`;
|
|
3909
|
+
case "line": {
|
|
3910
|
+
const first = points[0].label;
|
|
3911
|
+
const last = points[points.length - 1].label;
|
|
3912
|
+
const span = points.length === 1 ? `at ${first}` : `from ${first} to ${last}`;
|
|
3913
|
+
return `${noun}${seriesPhrase(parsed)} over ${plural(points.length, "point", "points")}, ${span}; ${rangePhrase(allValues(parsed))}.`;
|
|
3914
|
+
}
|
|
3915
|
+
case "bar": {
|
|
3916
|
+
const head = `${noun}${seriesPhrase(parsed)} for ${plural(points.length, "category", "categories")}`;
|
|
3917
|
+
if (seriesNames(parsed).length > 1 || points.length === 1) {
|
|
3918
|
+
return `${head}; ${rangePhrase(allValues(parsed))}.`;
|
|
3919
|
+
}
|
|
3920
|
+
const lo = points.reduce((a, b) => b.value < a.value ? b : a);
|
|
3921
|
+
const hi = points.reduce((a, b) => b.value > a.value ? b : a);
|
|
3922
|
+
return `${head}, from ${lo.label} at ${compactNumber(lo.value)} to ${hi.label} at ${compactNumber(hi.value)}.`;
|
|
3923
|
+
}
|
|
3924
|
+
}
|
|
3925
|
+
}
|
|
3926
|
+
function summarizeSequence(content) {
|
|
3927
|
+
const parsed = parseSequenceDgmo(content);
|
|
3928
|
+
if (parsed.error) return null;
|
|
3929
|
+
const names = parsed.participants.map((p) => p.label);
|
|
3930
|
+
if (names.length === 0) return "Sequence diagram with no participants.";
|
|
3931
|
+
const messages = parsed.messages.length;
|
|
3932
|
+
const exchange = messages === 0 ? "with no messages" : `exchanging ${plural(messages, "message", "messages")}`;
|
|
3933
|
+
return `Sequence diagram of ${plural(names.length, "participant", "participants")}, ${listNames(names)}, ${exchange}.`;
|
|
3934
|
+
}
|
|
3935
|
+
function countPeople(nodes) {
|
|
3936
|
+
return nodes.reduce(
|
|
3937
|
+
(n, node) => n + (node.isContainer ? 0 : 1) + countPeople(node.children),
|
|
3938
|
+
0
|
|
3939
|
+
);
|
|
3940
|
+
}
|
|
3941
|
+
function summarizeOrg(content) {
|
|
3942
|
+
const parsed = parseOrg(content);
|
|
3943
|
+
if (parsed.error) return null;
|
|
3944
|
+
const people = countPeople(parsed.roots);
|
|
3945
|
+
if (parsed.roots.length === 0) return "Org chart with no one in it.";
|
|
3946
|
+
const head = `Org chart of ${plural(people, "person", "people")}`;
|
|
3947
|
+
if (parsed.roots.length === 1) {
|
|
3948
|
+
const root = parsed.roots[0];
|
|
3949
|
+
const role = root.metadata["role"];
|
|
3950
|
+
return `${head}, headed by ${root.label}${role ? ` (${role})` : ""}.`;
|
|
3951
|
+
}
|
|
3952
|
+
const tops = parsed.roots.map((r) => r.label);
|
|
3953
|
+
return `${head} under ${plural(tops.length, "top-level entry", "top-level entries")}, ${listNames(tops)}.`;
|
|
3954
|
+
}
|
|
3955
|
+
function countTree(nodes) {
|
|
3956
|
+
return nodes.reduce(
|
|
3957
|
+
(n, node) => n + 1 + countTree(node.children),
|
|
3958
|
+
0
|
|
3959
|
+
);
|
|
3960
|
+
}
|
|
3961
|
+
function namedCount(names, one, many) {
|
|
3962
|
+
return names.length === 0 ? `no ${many}` : `${plural(names.length, one, many)}, ${listNames(names)}`;
|
|
3963
|
+
}
|
|
3964
|
+
function summarizeFlowchart(content) {
|
|
3965
|
+
const parsed = parseFlowchart(content);
|
|
3966
|
+
if (parsed.error) return null;
|
|
3967
|
+
if (parsed.nodes.length === 0) return "Flowchart with no steps.";
|
|
3968
|
+
const decisions = parsed.nodes.filter((n) => n.shape === "decision").length;
|
|
3969
|
+
const steps = `${plural(parsed.nodes.length, "step", "steps")}${decisions > 0 ? ` (${plural(decisions, "decision", "decisions")})` : ""}`;
|
|
3970
|
+
const entered = new Set(parsed.edges.map((e) => e.target));
|
|
3971
|
+
const starts = parsed.nodes.filter((n) => !entered.has(n.id)).map((n) => n.label);
|
|
3972
|
+
const start = starts.length > 0 ? `, starting at ${listNames(starts)}` : "";
|
|
3973
|
+
return `Flowchart of ${steps} and ${plural(parsed.edges.length, "connection", "connections")}${start}.`;
|
|
3974
|
+
}
|
|
3975
|
+
function summarizeState(content) {
|
|
3976
|
+
const parsed = parseState(content);
|
|
3977
|
+
if (parsed.error) return null;
|
|
3978
|
+
const states = parsed.nodes.filter((n) => n.shape !== "pseudostate").map((n) => n.label);
|
|
3979
|
+
return `State diagram of ${namedCount(states, "state", "states")}, with ${plural(parsed.edges.length, "transition", "transitions")}.`;
|
|
3980
|
+
}
|
|
3981
|
+
function summarizeClass(content) {
|
|
3982
|
+
const parsed = parseClassDiagram(content);
|
|
3983
|
+
if (parsed.error) return null;
|
|
3984
|
+
const names = parsed.classes.map((c) => c.name);
|
|
3985
|
+
return `Class diagram of ${namedCount(names, "class", "classes")}, with ${plural(parsed.relationships.length, "relationship", "relationships")}.`;
|
|
3986
|
+
}
|
|
3987
|
+
function summarizeEr(content) {
|
|
3988
|
+
const parsed = parseERDiagram(content);
|
|
3989
|
+
if (parsed.error) return null;
|
|
3990
|
+
const names = parsed.tables.map((t) => t.name);
|
|
3991
|
+
return `Entity-relationship diagram of ${namedCount(names, "table", "tables")}, with ${plural(parsed.relationships.length, "relationship", "relationships")}.`;
|
|
3992
|
+
}
|
|
3993
|
+
function summarizeKanban(content) {
|
|
3994
|
+
const parsed = parseKanban(content);
|
|
3995
|
+
if (parsed.error) return null;
|
|
3996
|
+
const cards = parsed.columns.reduce((n, c) => n + c.cards.length, 0);
|
|
3997
|
+
const columns = parsed.columns.map((c) => c.name);
|
|
3998
|
+
return `Kanban board with ${plural(cards, "card", "cards")} across ${namedCount(columns, "column", "columns")}.`;
|
|
3999
|
+
}
|
|
4000
|
+
function c4Counts(elements) {
|
|
4001
|
+
return elements.reduce(
|
|
4002
|
+
(acc, el) => {
|
|
4003
|
+
const below = c4Counts(el.children);
|
|
4004
|
+
return {
|
|
4005
|
+
elements: acc.elements + 1 + below.elements,
|
|
4006
|
+
relationships: acc.relationships + el.relationships.length + below.relationships
|
|
4007
|
+
};
|
|
4008
|
+
},
|
|
4009
|
+
{ elements: 0, relationships: 0 }
|
|
4010
|
+
);
|
|
4011
|
+
}
|
|
4012
|
+
function summarizeC4(content) {
|
|
4013
|
+
const parsed = parseC4(content);
|
|
4014
|
+
if (parsed.error) return null;
|
|
4015
|
+
const counts = c4Counts(parsed.elements);
|
|
4016
|
+
const relationships = counts.relationships + parsed.relationships.length;
|
|
4017
|
+
const top = parsed.elements.map((e) => e.name);
|
|
4018
|
+
const nested = counts.elements - top.length;
|
|
4019
|
+
return `C4 diagram of ${namedCount(top, "top-level element", "top-level elements")}${nested > 0 ? `, holding ${nested} more` : ""}, with ${plural(relationships, "relationship", "relationships")}.`;
|
|
4020
|
+
}
|
|
4021
|
+
function countPages(nodes) {
|
|
4022
|
+
return nodes.reduce(
|
|
4023
|
+
(n, node) => n + (node.isContainer ? 0 : 1) + countPages(node.children),
|
|
4024
|
+
0
|
|
4025
|
+
);
|
|
4026
|
+
}
|
|
4027
|
+
function summarizeSitemap(content) {
|
|
4028
|
+
const parsed = parseSitemap(content);
|
|
4029
|
+
if (parsed.error) return null;
|
|
4030
|
+
const tops = parsed.roots.map((r) => r.label);
|
|
4031
|
+
return `Sitemap of ${plural(countPages(parsed.roots), "page", "pages")} under ${namedCount(tops, "top-level entry", "top-level entries")}.`;
|
|
4032
|
+
}
|
|
4033
|
+
function summarizeInfra(content) {
|
|
4034
|
+
const parsed = parseInfra(content);
|
|
4035
|
+
if (parsed.error) return null;
|
|
4036
|
+
const names = parsed.nodes.map((n) => n.label);
|
|
4037
|
+
return `Infrastructure diagram of ${namedCount(names, "component", "components")}, with ${plural(parsed.edges.length, "connection", "connections")}.`;
|
|
4038
|
+
}
|
|
4039
|
+
function ganttTasks(nodes, acc) {
|
|
4040
|
+
for (const node of nodes) {
|
|
4041
|
+
if (node.kind === "task") acc.tasks.push(node.label);
|
|
4042
|
+
else {
|
|
4043
|
+
if (node.kind === "group") acc.groups += 1;
|
|
4044
|
+
ganttTasks(node.children, acc);
|
|
4045
|
+
}
|
|
4046
|
+
}
|
|
4047
|
+
return acc;
|
|
4048
|
+
}
|
|
4049
|
+
function summarizeGantt(content) {
|
|
4050
|
+
const parsed = parseGantt(content);
|
|
4051
|
+
if (parsed.error) return null;
|
|
4052
|
+
const { tasks, groups } = ganttTasks(parsed.nodes, { tasks: [], groups: 0 });
|
|
4053
|
+
return `Gantt chart of ${namedCount(tasks, "task", "tasks")}${groups > 0 ? `, in ${plural(groups, "group", "groups")}` : ""}.`;
|
|
4054
|
+
}
|
|
4055
|
+
function summarizePert(content) {
|
|
4056
|
+
const parsed = parsePert(content);
|
|
4057
|
+
if (parsed.error) return null;
|
|
4058
|
+
const names = parsed.activities.map((a) => a.name);
|
|
4059
|
+
return `PERT chart of ${namedCount(names, "activity", "activities")}, with ${plural(parsed.edges.length, "dependency", "dependencies")}.`;
|
|
4060
|
+
}
|
|
4061
|
+
function summarizeBoxesAndLines(content) {
|
|
4062
|
+
const parsed = parseBoxesAndLines(content);
|
|
4063
|
+
if (parsed.error) return null;
|
|
4064
|
+
const names = parsed.nodes.map((n) => n.label);
|
|
4065
|
+
return `Boxes and lines diagram of ${namedCount(names, "box", "boxes")}, with ${plural(parsed.edges.length, "line", "lines")}.`;
|
|
4066
|
+
}
|
|
4067
|
+
function summarizeSketch(content) {
|
|
4068
|
+
const parsed = parseSketch(content);
|
|
4069
|
+
if (parsed.error) return null;
|
|
4070
|
+
const names = parsed.nodes.map((n) => n.label);
|
|
4071
|
+
return `Sketch of ${namedCount(names, "shape", "shapes")}, with ${plural(parsed.edges.length, "connection", "connections")}.`;
|
|
4072
|
+
}
|
|
4073
|
+
function summarizeSwimlane(content) {
|
|
4074
|
+
const parsed = parseSwimlane(content);
|
|
4075
|
+
if (parsed.error) return null;
|
|
4076
|
+
const lanes = parsed.lanes.map((l) => l.label);
|
|
4077
|
+
return `Swimlane diagram of ${plural(parsed.nodes.length, "step", "steps")} across ${namedCount(lanes, "lane", "lanes")}, with ${plural(parsed.edges.length, "connection", "connections")}.`;
|
|
4078
|
+
}
|
|
4079
|
+
function summarizeFamily(content) {
|
|
4080
|
+
const parsed = parseFamily(content);
|
|
4081
|
+
if (parsed.error) return null;
|
|
4082
|
+
return `Family tree of ${plural(parsed.persons.size, "person", "people")} in ${plural(parsed.unions.length, "union", "unions")}.`;
|
|
4083
|
+
}
|
|
4084
|
+
function summarizeVersionControl(content) {
|
|
4085
|
+
const parsed = parseVersionControl(content);
|
|
4086
|
+
if (parsed.error) return null;
|
|
4087
|
+
const branches = parsed.branches.map((b) => b.name);
|
|
4088
|
+
return `Version control graph of ${plural(parsed.nodes.length, "commit", "commits")} on ${namedCount(branches, "branch", "branches")}.`;
|
|
4089
|
+
}
|
|
4090
|
+
function mindmapCounts(nodes) {
|
|
4091
|
+
return nodes.reduce(
|
|
4092
|
+
(acc, node) => {
|
|
4093
|
+
if (node.collapsed) {
|
|
4094
|
+
return {
|
|
4095
|
+
shown: acc.shown + 1,
|
|
4096
|
+
folded: acc.folded + countTree(node.children)
|
|
4097
|
+
};
|
|
4098
|
+
}
|
|
4099
|
+
const below = mindmapCounts(node.children);
|
|
4100
|
+
return {
|
|
4101
|
+
shown: acc.shown + 1 + below.shown,
|
|
4102
|
+
folded: acc.folded + below.folded
|
|
4103
|
+
};
|
|
4104
|
+
},
|
|
4105
|
+
{ shown: 0, folded: 0 }
|
|
4106
|
+
);
|
|
4107
|
+
}
|
|
4108
|
+
function summarizeMindmap(content) {
|
|
4109
|
+
const parsed = parseMindmap(content);
|
|
4110
|
+
if (parsed.error) return null;
|
|
4111
|
+
if (parsed.roots.length === 0) return "Mind map with no ideas.";
|
|
4112
|
+
const { shown, folded } = mindmapCounts(parsed.roots);
|
|
4113
|
+
const ideas = shown - parsed.roots.length;
|
|
4114
|
+
const centres = parsed.roots.map((r) => r.label);
|
|
4115
|
+
const hidden = folded > 0 ? `, with ${folded} more folded away` : "";
|
|
4116
|
+
return `Mind map of ${plural(ideas, "idea", "ideas")} around ${listNames(centres)}${hidden}.`;
|
|
4117
|
+
}
|
|
4118
|
+
function summarizeWireframe(content) {
|
|
4119
|
+
const parsed = parseWireframe(content);
|
|
4120
|
+
if (parsed.error) return null;
|
|
4121
|
+
const elements = countTree(parsed.roots);
|
|
4122
|
+
const tops = parsed.roots.map((r) => r.label).filter((l) => l.length > 0);
|
|
4123
|
+
const modals = parsed.modals.length > 0 ? `, plus ${plural(parsed.modals.length, "modal", "modals")}` : "";
|
|
4124
|
+
const noun = `${parsed.formFactor.charAt(0).toUpperCase()}${parsed.formFactor.slice(1)} wireframe`;
|
|
4125
|
+
return `${noun} of ${plural(elements, "element", "elements")}${tops.length > 0 ? `, in ${listNames(tops)}` : ""}${modals}.`;
|
|
4126
|
+
}
|
|
4127
|
+
function summarizeJourneyMap(content) {
|
|
4128
|
+
const parsed = parseJourneyMap(content);
|
|
4129
|
+
if (parsed.error) return null;
|
|
4130
|
+
const steps = parsed.steps.length + parsed.phases.reduce((n, p) => n + p.steps.length, 0);
|
|
4131
|
+
const phases = parsed.phases.map((p) => p.name);
|
|
4132
|
+
const who = parsed.persona ? ` for ${parsed.persona.name}` : "";
|
|
4133
|
+
return `Journey map${who} of ${plural(steps, "step", "steps")}${phases.length > 0 ? ` across ${namedCount(phases, "phase", "phases")}` : ""}.`;
|
|
4134
|
+
}
|
|
4135
|
+
function summarizeRaci(content) {
|
|
4136
|
+
const parsed = parseRaci(content);
|
|
4137
|
+
if (parsed.error) return null;
|
|
4138
|
+
const tasks = parsed.tasksWithoutPhase.length + parsed.phases.reduce((n, p) => n + p.tasks.length, 0);
|
|
4139
|
+
return `${parsed.variant.toUpperCase()} matrix of ${plural(tasks, "task", "tasks")} across ${namedCount(parsed.roleDisplayNames, "role", "roles")}.`;
|
|
4140
|
+
}
|
|
4141
|
+
function summarizeBody(content) {
|
|
4142
|
+
const parsed = parseBody(content);
|
|
4143
|
+
if (parsed.error) return null;
|
|
4144
|
+
const parts = parsed.parts.map((p) => p.name);
|
|
4145
|
+
return `Body diagram marking ${namedCount(parts, "part", "parts")}.`;
|
|
4146
|
+
}
|
|
4147
|
+
function summarizeBracket(content) {
|
|
4148
|
+
const parsed = parseBracket(content);
|
|
4149
|
+
if (parsed.error) return null;
|
|
4150
|
+
const layout = layoutBracket(parsed);
|
|
4151
|
+
const competitors = parsed.seeds.length > 0 ? parsed.seeds.length : new Set(
|
|
4152
|
+
layout.matches.flatMap(
|
|
4153
|
+
(m) => [m.top, m.bot].filter((n) => n !== null)
|
|
4154
|
+
)
|
|
4155
|
+
).size;
|
|
4156
|
+
const decided = layout.matches.filter((m) => m.winner !== null).length;
|
|
4157
|
+
const champion = layout.champion ? `; ${layout.champion} won` : "";
|
|
4158
|
+
return `Tournament bracket of ${plural(competitors, "competitor", "competitors")} in ${plural(layout.matches.length, "match", "matches")}, ${decided} decided${champion}.`;
|
|
4159
|
+
}
|
|
4160
|
+
function summarizeLiveLink(content) {
|
|
4161
|
+
const parsed = parseLiveLink(content);
|
|
4162
|
+
if (parsed.error || !parsed.id) return null;
|
|
4163
|
+
return `Card linking to the shared diagram ${parsed.title ?? parsed.id}.`;
|
|
4164
|
+
}
|
|
4165
|
+
function axisRange(name, values) {
|
|
4166
|
+
const lo = Math.min(...values);
|
|
4167
|
+
const hi = Math.max(...values);
|
|
4168
|
+
return lo === hi ? `${name} is ${compactNumber(lo)} throughout` : `${name} ranges from ${compactNumber(lo)} to ${compactNumber(hi)}`;
|
|
4169
|
+
}
|
|
4170
|
+
function summarizeScatter(content) {
|
|
4171
|
+
const parsed = parseScatter(content);
|
|
4172
|
+
if (parsed.error) return null;
|
|
4173
|
+
const points = parsed.scatterPoints ?? [];
|
|
4174
|
+
if (points.length === 0) return "Scatter chart with no points.";
|
|
4175
|
+
const categories = [
|
|
4176
|
+
...new Set(points.map((p) => p.category).filter((c) => !!c))
|
|
4177
|
+
];
|
|
4178
|
+
const groups = categories.length > 0 ? ` in ${namedCount(categories, "category", "categories")}` : "";
|
|
4179
|
+
const x = axisRange(
|
|
4180
|
+
parsed.xlabel ?? "x",
|
|
4181
|
+
points.map((p) => p.x)
|
|
4182
|
+
);
|
|
4183
|
+
const y = axisRange(
|
|
4184
|
+
parsed.ylabel ?? "y",
|
|
4185
|
+
points.map((p) => p.y)
|
|
4186
|
+
);
|
|
4187
|
+
return `Scatter chart of ${plural(points.length, "point", "points")}${groups}; ${x} and ${y}.`;
|
|
4188
|
+
}
|
|
4189
|
+
function summarizeSankey(content) {
|
|
4190
|
+
const parsed = parseSankey(content);
|
|
4191
|
+
if (parsed.error) return null;
|
|
4192
|
+
const links = parsed.links ?? [];
|
|
4193
|
+
if (links.length === 0) return "Sankey diagram with no flows.";
|
|
4194
|
+
const nodes = new Set(links.flatMap((l) => [l.source, l.target]));
|
|
4195
|
+
const entered = new Set(links.map((l) => l.target));
|
|
4196
|
+
const sources = [...nodes].filter((n) => !entered.has(n));
|
|
4197
|
+
const from = sources.length > 0 ? `, flowing from ${listNames(sources)}` : "";
|
|
4198
|
+
return `Sankey diagram of ${plural(links.length, "flow", "flows")} between ${plural(nodes.size, "node", "nodes")}${from}.`;
|
|
4199
|
+
}
|
|
4200
|
+
function summarizeHeatmap(content) {
|
|
4201
|
+
const parsed = parseHeatmap(content);
|
|
4202
|
+
if (parsed.error) return null;
|
|
4203
|
+
const rows = parsed.heatmapRows ?? [];
|
|
4204
|
+
const columns = parsed.columns ?? [];
|
|
4205
|
+
if (rows.length === 0) return "Heatmap with no rows.";
|
|
4206
|
+
let hot = { row: rows[0].label, col: 0, value: -Infinity };
|
|
4207
|
+
for (const row of rows) {
|
|
4208
|
+
row.values.forEach((value, col) => {
|
|
4209
|
+
if (value > hot.value) hot = { row: row.label, col, value };
|
|
4210
|
+
});
|
|
4211
|
+
}
|
|
4212
|
+
const head = `Heatmap of ${plural(rows.length, "row", "rows")} by ${plural(columns.length, "column", "columns")}`;
|
|
4213
|
+
if (hot.value === -Infinity) return `${head}, with no values.`;
|
|
4214
|
+
const where = columns[hot.col] ? `${hot.row}, ${columns[hot.col]}` : hot.row;
|
|
4215
|
+
return `${head}; ${rangePhrase(rows.flatMap((r) => r.values))}, highest at ${where}.`;
|
|
4216
|
+
}
|
|
4217
|
+
function summarizeFunnel(content) {
|
|
4218
|
+
const parsed = parseFunnel(content);
|
|
4219
|
+
if (parsed.error) return null;
|
|
4220
|
+
const stages = parsed.data;
|
|
4221
|
+
if (stages.length === 0) return "Funnel chart with no stages.";
|
|
4222
|
+
const first = stages[0];
|
|
4223
|
+
const last = stages[stages.length - 1];
|
|
4224
|
+
if (stages.length === 1) {
|
|
4225
|
+
return `Funnel chart of 1 stage, ${first.label} at ${compactNumber(first.value)}.`;
|
|
4226
|
+
}
|
|
4227
|
+
const kept = first.value > 0 ? ` (${Math.round(last.value / first.value * 100)}% of the first)` : "";
|
|
4228
|
+
return `Funnel chart of ${plural(stages.length, "stage", "stages")}, from ${first.label} at ${compactNumber(first.value)} to ${last.label} at ${compactNumber(last.value)}${kept}.`;
|
|
4229
|
+
}
|
|
4230
|
+
function summarizeFunction(content) {
|
|
4231
|
+
const parsed = parseFunctionChart(content);
|
|
4232
|
+
if (parsed.error) return null;
|
|
4233
|
+
const names = (parsed.functions ?? []).map((f) => f.name);
|
|
4234
|
+
const range = parsed.xRange ? ` for x from ${compactNumber(parsed.xRange.min)} to ${compactNumber(parsed.xRange.max)}` : "";
|
|
4235
|
+
return `Function plot of ${namedCount(names, "function", "functions")}${range && names.length > 0 ? `,${range}` : range}.`;
|
|
4236
|
+
}
|
|
4237
|
+
function dateSpan(dates, toValue) {
|
|
4238
|
+
const ranked = dates.map((d) => ({ d, t: toValue(d) })).filter(({ t }) => Number.isFinite(t)).sort((a, b) => a.t - b.t);
|
|
4239
|
+
if (ranked.length === 0) return "";
|
|
4240
|
+
const first = ranked[0];
|
|
4241
|
+
const last = ranked[ranked.length - 1];
|
|
4242
|
+
return first.t === last.t ? ` on ${first.d}` : ` from ${first.d} to ${last.d}`;
|
|
4243
|
+
}
|
|
4244
|
+
function summarizeTimeline(content) {
|
|
4245
|
+
const parsed = parseTimeline(content);
|
|
4246
|
+
if (parsed.error) return null;
|
|
4247
|
+
const events = parsed.timelineEvents;
|
|
4248
|
+
if (events.length === 0) return "Timeline with no events.";
|
|
4249
|
+
const dates = events.flatMap(
|
|
4250
|
+
(e) => e.endDate ? [e.date, e.endDate] : [e.date]
|
|
4251
|
+
);
|
|
4252
|
+
const groups = parsed.timelineGroups.map((g) => g.name);
|
|
4253
|
+
const span = dateSpan(dates, parseTimelineDate);
|
|
4254
|
+
const head = groups.length > 0 ? `Timeline of ${plural(events.length, "event", "events")} in ${namedCount(groups, "group", "groups")}${span ? `,${span}` : ""}` : `Timeline of ${plural(events.length, "event", "events")}${span}`;
|
|
4255
|
+
const marks = [
|
|
4256
|
+
parsed.timelineEras.length > 0 ? plural(parsed.timelineEras.length, "era", "eras") : null,
|
|
4257
|
+
parsed.timelineMarkers.length > 0 ? plural(parsed.timelineMarkers.length, "marker", "markers") : null
|
|
4258
|
+
].filter((x) => x !== null);
|
|
4259
|
+
return `${head}${marks.length > 0 ? `, marking ${marks.join(" and ")}` : ""}.`;
|
|
4260
|
+
}
|
|
4261
|
+
function summarizeEventLine(content) {
|
|
4262
|
+
const parsed = parseEventLine(content);
|
|
4263
|
+
if (parsed.error) return null;
|
|
4264
|
+
const events = parsed.events;
|
|
4265
|
+
if (events.length === 0) return "Event line with no events.";
|
|
4266
|
+
const folded = new Set(
|
|
4267
|
+
parsed.eras.filter((e) => e.collapsed).map((e) => e.name)
|
|
4268
|
+
);
|
|
4269
|
+
const hidden = events.filter((e) => e.era !== null && folded.has(e.era));
|
|
4270
|
+
const shown = events.length - hidden.length;
|
|
4271
|
+
const byValue = new Map(
|
|
4272
|
+
events.filter((e) => e.date !== null && !e.future && e.dateValue !== null).map((e) => [e.date, e.dateValue])
|
|
4273
|
+
);
|
|
4274
|
+
const span = dateSpan([...byValue.keys()], (d) => byValue.get(d));
|
|
4275
|
+
const eras = parsed.eras.length > 0 ? `, in ${plural(parsed.eras.length, "era", "eras")}` : "";
|
|
4276
|
+
const away = hidden.length > 0 ? `, with ${hidden.length} more folded away` : "";
|
|
4277
|
+
return `Event line of ${plural(shown, "event", "events")}${span}${eras}${away}.`;
|
|
4278
|
+
}
|
|
4279
|
+
function summarizeTechRadar(content) {
|
|
4280
|
+
const parsed = parseTechRadar(content);
|
|
4281
|
+
if (parsed.error) return null;
|
|
4282
|
+
const blips = parsed.quadrants.reduce((n, q) => n + q.blips.length, 0);
|
|
4283
|
+
const quadrants = parsed.quadrants.map((q) => q.name);
|
|
4284
|
+
const rings = parsed.rings.map((r) => r.name);
|
|
4285
|
+
return `Tech radar of ${plural(blips, "entry", "entries")} across ${namedCount(quadrants, "quadrant", "quadrants")}, in ${namedCount(rings, "ring", "rings")}.`;
|
|
4286
|
+
}
|
|
4287
|
+
function summarizeCycle(content) {
|
|
4288
|
+
const parsed = parseCycle(content);
|
|
4289
|
+
if (parsed.error) return null;
|
|
4290
|
+
const stages = parsed.nodes.map((n) => n.label);
|
|
4291
|
+
return `Cycle of ${namedCount(stages, "stage", "stages")}.`;
|
|
4292
|
+
}
|
|
4293
|
+
function summarizePyramid(content) {
|
|
4294
|
+
const parsed = parsePyramid(content);
|
|
4295
|
+
if (parsed.error) return null;
|
|
4296
|
+
const layers = parsed.layers.map((l) => l.label);
|
|
4297
|
+
const noun = parsed.inverted ? "Inverted pyramid" : "Pyramid";
|
|
4298
|
+
if (layers.length === 0) return `${noun} with no layers.`;
|
|
4299
|
+
return `${noun} of ${plural(layers.length, "layer", "layers")}, top to bottom: ${listNames(layers)}.`;
|
|
4300
|
+
}
|
|
4301
|
+
function summarizeRing(content) {
|
|
4302
|
+
const parsed = parseRing(content);
|
|
4303
|
+
if (parsed.error) return null;
|
|
4304
|
+
const layers = parsed.layers.map((l) => l.label);
|
|
4305
|
+
if (layers.length === 0) return "Ring diagram with no layers.";
|
|
4306
|
+
return `Ring diagram of ${plural(layers.length, "layer", "layers")}, centre outward: ${listNames(layers)}.`;
|
|
4307
|
+
}
|
|
4308
|
+
function treemapLeaves(nodes) {
|
|
4309
|
+
return nodes.flatMap(
|
|
4310
|
+
(n) => n.children.length > 0 ? treemapLeaves(n.children) : [n]
|
|
4311
|
+
);
|
|
4312
|
+
}
|
|
4313
|
+
function summarizeTreemap(content) {
|
|
4314
|
+
const parsed = parseTreemap(content);
|
|
4315
|
+
if (parsed.error) return null;
|
|
4316
|
+
const leaves = treemapLeaves(parsed.roots);
|
|
4317
|
+
if (leaves.length === 0) return "Treemap with no items.";
|
|
4318
|
+
const total = leaves.reduce((sum, n) => sum + (n.value ?? 0), 0);
|
|
4319
|
+
const largest = leaves.reduce(
|
|
4320
|
+
(a, b) => (b.value ?? 0) > (a.value ?? 0) ? b : a
|
|
4321
|
+
);
|
|
4322
|
+
const groups = parsed.roots.every((r) => r.children.length > 0) ? parsed.roots : [];
|
|
4323
|
+
const head = groups.length > 0 ? `Treemap of ${plural(leaves.length, "item", "items")} in ${namedCount(
|
|
4324
|
+
groups.map((g) => g.label),
|
|
4325
|
+
"group",
|
|
4326
|
+
"groups"
|
|
4327
|
+
)}, totalling ${compactNumber(total)}` : `Treemap of ${plural(leaves.length, "item", "items")} totalling ${compactNumber(total)}`;
|
|
4328
|
+
return `${head}; the largest is ${largest.label} at ${compactNumber(largest.value ?? 0)}.`;
|
|
4329
|
+
}
|
|
4330
|
+
function blockCounts(grid) {
|
|
4331
|
+
let shown = 0;
|
|
4332
|
+
let folded = 0;
|
|
4333
|
+
for (const cell of grid.rows.flat()) {
|
|
4334
|
+
if (!isBlockNode(cell)) continue;
|
|
4335
|
+
shown += 1;
|
|
4336
|
+
if (!cell.grid) continue;
|
|
4337
|
+
const inner = blockCounts(cell.grid);
|
|
4338
|
+
if (cell.collapsed) folded += inner.shown + inner.folded;
|
|
4339
|
+
else {
|
|
4340
|
+
shown += inner.shown;
|
|
4341
|
+
folded += inner.folded;
|
|
4342
|
+
}
|
|
4343
|
+
}
|
|
4344
|
+
return { shown, folded };
|
|
4345
|
+
}
|
|
4346
|
+
function summarizeBlock(content) {
|
|
4347
|
+
const parsed = parseBlock(content);
|
|
4348
|
+
if (parsed.error) return null;
|
|
4349
|
+
const { shown, folded } = blockCounts(parsed.top);
|
|
4350
|
+
if (shown === 0) return "Block diagram with no blocks.";
|
|
4351
|
+
const tops = parsed.top.rows.flat().filter(isBlockNode).map((b) => b.label);
|
|
4352
|
+
const away = folded > 0 ? `, with ${folded} more folded away` : "";
|
|
4353
|
+
return `Block diagram of ${plural(shown, "block", "blocks")}, in ${listNames(tops)}${away}.`;
|
|
4354
|
+
}
|
|
4355
|
+
function summarizeGoal(content) {
|
|
4356
|
+
const parsed = parseGoal(content);
|
|
4357
|
+
if (parsed.error) return null;
|
|
4358
|
+
const now = compactNumber(parsed.now);
|
|
4359
|
+
if (!parsed.hasTarget) return `Progress of ${now}, with no target set.`;
|
|
4360
|
+
const pct = Math.round(parsed.now / parsed.target * 100);
|
|
4361
|
+
return `Progress toward a target of ${compactNumber(parsed.target)}: ${now} so far, ${pct}%.`;
|
|
4362
|
+
}
|
|
4363
|
+
var MONTHS = [
|
|
4364
|
+
"January",
|
|
4365
|
+
"February",
|
|
4366
|
+
"March",
|
|
4367
|
+
"April",
|
|
4368
|
+
"May",
|
|
4369
|
+
"June",
|
|
4370
|
+
"July",
|
|
4371
|
+
"August",
|
|
4372
|
+
"September",
|
|
4373
|
+
"October",
|
|
4374
|
+
"November",
|
|
4375
|
+
"December"
|
|
4376
|
+
];
|
|
4377
|
+
var WEEKDAYS = [
|
|
4378
|
+
"Sunday",
|
|
4379
|
+
"Monday",
|
|
4380
|
+
"Tuesday",
|
|
4381
|
+
"Wednesday",
|
|
4382
|
+
"Thursday",
|
|
4383
|
+
"Friday",
|
|
4384
|
+
"Saturday"
|
|
4385
|
+
];
|
|
4386
|
+
var ORDINALS = ["first", "second", "third", "fourth", "fifth"];
|
|
4387
|
+
function cadencePhrase(rule) {
|
|
4388
|
+
const weekday = WEEKDAYS[rule.weekday ?? -1] ?? "the same day";
|
|
4389
|
+
switch (rule.kind) {
|
|
4390
|
+
case "month-day":
|
|
4391
|
+
return `every year on ${MONTHS[rule.month ?? -1] ?? "the same date"} ${rule.day ?? ""}`.trimEnd();
|
|
4392
|
+
case "nth-weekday":
|
|
4393
|
+
return `every month on the ${ORDINALS[(rule.nth ?? 0) - 1] ?? "same"} ${weekday}`;
|
|
4394
|
+
case "last-weekday":
|
|
4395
|
+
return `every month on the last ${weekday}`;
|
|
4396
|
+
case "weekly":
|
|
4397
|
+
return `every week on ${weekday}`;
|
|
4398
|
+
case "interval": {
|
|
4399
|
+
const n = rule.intervalN ?? 1;
|
|
4400
|
+
const unit = rule.intervalUnit ?? "day";
|
|
4401
|
+
return n === 1 ? `every ${unit}` : `every ${n} ${unit}s`;
|
|
4402
|
+
}
|
|
4403
|
+
}
|
|
4404
|
+
}
|
|
4405
|
+
function summarizeCountdown(content) {
|
|
4406
|
+
const parsed = parseCountdown(content);
|
|
4407
|
+
if (parsed.error) return null;
|
|
4408
|
+
if (parsed.rule)
|
|
4409
|
+
return `Countdown to an event that recurs ${cadencePhrase(parsed.rule)}.`;
|
|
4410
|
+
return parsed.target ? `Countdown to ${parsed.target}.` : "Countdown with no date set.";
|
|
4411
|
+
}
|
|
4412
|
+
function summarizeClock(content) {
|
|
4413
|
+
const parsed = parseClock(content);
|
|
4414
|
+
if (parsed.error) return null;
|
|
4415
|
+
const places = parsed.entries.map((e) => e.label);
|
|
4416
|
+
return `World clock of ${namedCount(places, "place", "places")}.`;
|
|
4417
|
+
}
|
|
4418
|
+
function poiName(pos) {
|
|
4419
|
+
return pos.kind === "name" ? pos.name : `${pos.lat}, ${pos.lon}`;
|
|
4420
|
+
}
|
|
4421
|
+
function summarizeMap(content) {
|
|
4422
|
+
const parsed = parseMap(content);
|
|
4423
|
+
if (parsed.error) return null;
|
|
4424
|
+
const parts = [];
|
|
4425
|
+
if (parsed.regions.length > 0) {
|
|
4426
|
+
parts.push(
|
|
4427
|
+
namedCount(
|
|
4428
|
+
parsed.regions.map((r) => r.name),
|
|
4429
|
+
"region",
|
|
4430
|
+
"regions"
|
|
4431
|
+
)
|
|
4432
|
+
);
|
|
4433
|
+
}
|
|
4434
|
+
if (parsed.pois.length > 0) {
|
|
4435
|
+
const names = parsed.pois.map((p) => p.label ?? poiName(p.pos));
|
|
4436
|
+
parts.push(namedCount(names, "marked place", "marked places"));
|
|
4437
|
+
}
|
|
4438
|
+
for (const route of parsed.routes) {
|
|
4439
|
+
const from = route.originLabel ?? poiName(route.origin);
|
|
4440
|
+
parts.push(
|
|
4441
|
+
`a route of ${plural(route.legs.length, "leg", "legs")} from ${from}`
|
|
4442
|
+
);
|
|
4443
|
+
}
|
|
4444
|
+
if (parsed.edges.length > 0) {
|
|
4445
|
+
parts.push(plural(parsed.edges.length, "connection", "connections"));
|
|
4446
|
+
}
|
|
4447
|
+
if (parts.length === 0) return "Map with nothing marked on it.";
|
|
4448
|
+
return `Map showing ${parts.length === 1 ? parts[0] : `${parts.slice(0, -1).join("; ")}; and ${parts[parts.length - 1]}`}.`;
|
|
4449
|
+
}
|
|
4450
|
+
function summarizeQuadrant(content) {
|
|
4451
|
+
const parsed = parseQuadrant(content);
|
|
4452
|
+
if (parsed.error) return null;
|
|
4453
|
+
const items = plural(parsed.quadrantPoints.length, "item", "items");
|
|
4454
|
+
const { topLeft, topRight, bottomLeft, bottomRight } = parsed.quadrantLabels;
|
|
4455
|
+
const names = [topLeft, topRight, bottomLeft, bottomRight].filter((q) => q !== null).map((q) => q.text);
|
|
4456
|
+
return names.length > 0 ? `Quadrant chart of ${items} across ${listNames(names)}.` : `Quadrant chart of ${items}.`;
|
|
4457
|
+
}
|
|
4458
|
+
function summarizeVenn(content) {
|
|
4459
|
+
const parsed = parseVenn(content);
|
|
4460
|
+
if (parsed.error) return null;
|
|
4461
|
+
const sets = parsed.vennSets.map((s) => s.name);
|
|
4462
|
+
const named = parsed.vennOverlaps.filter((o) => o.label).length;
|
|
4463
|
+
const overlaps = named > 0 ? `, with ${plural(named, "named overlap", "named overlaps")}` : "";
|
|
4464
|
+
return `Venn diagram of ${namedCount(sets, "set", "sets")}${overlaps}.`;
|
|
4465
|
+
}
|
|
4466
|
+
function summarizeSlope(content) {
|
|
4467
|
+
const parsed = parseSlope(content);
|
|
4468
|
+
if (parsed.error) return null;
|
|
4469
|
+
const periods = parsed.periods;
|
|
4470
|
+
const span = periods.length > 1 ? `, from ${periods[0]} to ${periods[periods.length - 1]}` : "";
|
|
4471
|
+
return `Slope chart of ${plural(parsed.data.length, "item", "items")} across ${plural(periods.length, "period", "periods")}${span}.`;
|
|
4472
|
+
}
|
|
4473
|
+
function summarizeArc(content) {
|
|
4474
|
+
const parsed = parseArc(content);
|
|
4475
|
+
if (parsed.error) return null;
|
|
4476
|
+
const nodes = new Set(parsed.links.flatMap((l) => [l.source, l.target]));
|
|
4477
|
+
const noun = parsed.layout === "chord" ? "Chord diagram" : "Arc diagram";
|
|
4478
|
+
const groups = parsed.arcNodeGroups.map((g) => g.name);
|
|
4479
|
+
const inGroups = groups.length > 0 ? ` in ${namedCount(groups, "group", "groups")}` : "";
|
|
4480
|
+
return `${noun} of ${plural(parsed.links.length, "link", "links")} between ${plural(nodes.size, "node", "nodes")}${inGroups}.`;
|
|
4481
|
+
}
|
|
4482
|
+
var TOP_WORDS = 3;
|
|
4483
|
+
function summarizeWordcloud(content) {
|
|
4484
|
+
const parsed = parseWordcloud(content);
|
|
4485
|
+
if (parsed.error) return null;
|
|
4486
|
+
const words = parsed.words;
|
|
4487
|
+
if (words.length === 0) return "Word cloud with no words.";
|
|
4488
|
+
const top = [...words].sort((a, b) => b.weight - a.weight).slice(0, TOP_WORDS).map((w) => w.text);
|
|
4489
|
+
return `Word cloud of ${plural(words.length, "word", "words")}; the largest ${top.length === 1 ? "is" : "are"} ${listNames(top)}.`;
|
|
4490
|
+
}
|
|
4491
|
+
var SUMMARIZERS = {
|
|
4492
|
+
sequence: summarizeSequence,
|
|
4493
|
+
org: summarizeOrg,
|
|
4494
|
+
flowchart: summarizeFlowchart,
|
|
4495
|
+
state: summarizeState,
|
|
4496
|
+
class: summarizeClass,
|
|
4497
|
+
er: summarizeEr,
|
|
4498
|
+
kanban: summarizeKanban,
|
|
4499
|
+
c4: summarizeC4,
|
|
4500
|
+
sitemap: summarizeSitemap,
|
|
4501
|
+
infra: summarizeInfra,
|
|
4502
|
+
gantt: summarizeGantt,
|
|
4503
|
+
pert: summarizePert,
|
|
4504
|
+
"boxes-and-lines": summarizeBoxesAndLines,
|
|
4505
|
+
sketch: summarizeSketch,
|
|
4506
|
+
swimlane: summarizeSwimlane,
|
|
4507
|
+
family: summarizeFamily,
|
|
4508
|
+
"version-control": summarizeVersionControl,
|
|
4509
|
+
mindmap: summarizeMindmap,
|
|
4510
|
+
wireframe: summarizeWireframe,
|
|
4511
|
+
"journey-map": summarizeJourneyMap,
|
|
4512
|
+
raci: summarizeRaci,
|
|
4513
|
+
body: summarizeBody,
|
|
4514
|
+
bracket: summarizeBracket,
|
|
4515
|
+
"live-link": summarizeLiveLink,
|
|
4516
|
+
bar: summarizeChart,
|
|
4517
|
+
line: summarizeChart,
|
|
4518
|
+
pie: summarizeChart,
|
|
4519
|
+
radar: summarizeChart,
|
|
4520
|
+
"polar-area": summarizeChart,
|
|
4521
|
+
scatter: summarizeScatter,
|
|
4522
|
+
sankey: summarizeSankey,
|
|
4523
|
+
heatmap: summarizeHeatmap,
|
|
4524
|
+
funnel: summarizeFunnel,
|
|
4525
|
+
function: summarizeFunction,
|
|
4526
|
+
timeline: summarizeTimeline,
|
|
4527
|
+
"event-line": summarizeEventLine,
|
|
4528
|
+
"tech-radar": summarizeTechRadar,
|
|
4529
|
+
cycle: summarizeCycle,
|
|
4530
|
+
pyramid: summarizePyramid,
|
|
4531
|
+
ring: summarizeRing,
|
|
4532
|
+
treemap: summarizeTreemap,
|
|
4533
|
+
block: summarizeBlock,
|
|
4534
|
+
goal: summarizeGoal,
|
|
4535
|
+
countdown: summarizeCountdown,
|
|
4536
|
+
clock: summarizeClock,
|
|
4537
|
+
map: summarizeMap,
|
|
4538
|
+
quadrant: summarizeQuadrant,
|
|
4539
|
+
venn: summarizeVenn,
|
|
4540
|
+
slope: summarizeSlope,
|
|
4541
|
+
arc: summarizeArc,
|
|
4542
|
+
wordcloud: summarizeWordcloud
|
|
4543
|
+
};
|
|
4544
|
+
function summarizeDiagram(content, chartType) {
|
|
4545
|
+
if (!chartType) return null;
|
|
4546
|
+
const summarize = SUMMARIZERS[chartType];
|
|
4547
|
+
return summarize ? summarize(content) : null;
|
|
4548
|
+
}
|
|
4549
|
+
|
|
3704
4550
|
// src/render.ts
|
|
4551
|
+
function diagramTitle(content, chartType) {
|
|
4552
|
+
const parse = chartType ? REGISTRY_BY_ID.get(chartType)?.parse : void 0;
|
|
4553
|
+
if (!parse) return null;
|
|
4554
|
+
const model = parse(content);
|
|
4555
|
+
const title = chartType === "gantt" ? model.options?.title : model.title;
|
|
4556
|
+
return typeof title === "string" && title.trim() ? title.trim() : null;
|
|
4557
|
+
}
|
|
3705
4558
|
var DOM_GLOBALS = [
|
|
3706
4559
|
"document",
|
|
3707
4560
|
"window",
|
|
@@ -3719,11 +4572,17 @@ function domState() {
|
|
|
3719
4572
|
};
|
|
3720
4573
|
}
|
|
3721
4574
|
async function installDom(state) {
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
4575
|
+
let win = state.window;
|
|
4576
|
+
if (win) {
|
|
4577
|
+
win.document.head.replaceChildren();
|
|
4578
|
+
win.document.body.replaceChildren();
|
|
4579
|
+
} else {
|
|
4580
|
+
const { JSDOM } = await loadJsdom();
|
|
4581
|
+
win = new JSDOM("<!DOCTYPE html><html><body></body></html>", {
|
|
4582
|
+
url: "http://localhost/"
|
|
4583
|
+
}).window;
|
|
4584
|
+
state.window = win;
|
|
4585
|
+
}
|
|
3727
4586
|
const values = {
|
|
3728
4587
|
document: win.document,
|
|
3729
4588
|
window: win,
|
|
@@ -3823,9 +4682,15 @@ async function render(content, options) {
|
|
|
3823
4682
|
...options?.width !== void 0 && { width: options.width },
|
|
3824
4683
|
...options?.height !== void 0 && { height: options.height }
|
|
3825
4684
|
});
|
|
3826
|
-
const svg2 =
|
|
3827
|
-
|
|
3828
|
-
|
|
4685
|
+
const svg2 = applyRootDesc(
|
|
4686
|
+
applyRootA11y(
|
|
4687
|
+
injectHoverStyles(raw, chartType, { bakeHover }),
|
|
4688
|
+
chartType,
|
|
4689
|
+
diagramTitle(content, parsed.chartType)
|
|
4690
|
+
),
|
|
4691
|
+
// The AUTHORED source and type: an arc `layout chord` is re-emitted
|
|
4692
|
+
// above as internal `chord` content, which no summarizer reads.
|
|
4693
|
+
summarizeDiagram(content, parsed.chartType)
|
|
3829
4694
|
);
|
|
3830
4695
|
return {
|
|
3831
4696
|
svg: svg2,
|
|
@@ -3863,9 +4728,13 @@ async function render(content, options) {
|
|
|
3863
4728
|
}
|
|
3864
4729
|
}
|
|
3865
4730
|
);
|
|
3866
|
-
svg =
|
|
3867
|
-
|
|
3868
|
-
|
|
4731
|
+
svg = applyRootDesc(
|
|
4732
|
+
applyRootA11y(
|
|
4733
|
+
injectHoverStyles(svg, chartType, { bakeHover }),
|
|
4734
|
+
chartType,
|
|
4735
|
+
diagramTitle(content, parsed.chartType)
|
|
4736
|
+
),
|
|
4737
|
+
summarizeDiagram(content, parsed.chartType)
|
|
3869
4738
|
);
|
|
3870
4739
|
} finally {
|
|
3871
4740
|
releaseDom();
|