@diagrammo/dgmo 0.73.0 → 0.75.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced.d.ts +11 -49
- package/dist/advanced.js +94 -94
- package/dist/{analyzer-KQWXVQOI.js → analyzer-QTDQEMS5.js} +4 -6
- package/dist/block.js +49 -49
- package/dist/{calculator-2Z5DUTOB.js → calculator-CVQ54JNE.js} +3 -3
- package/dist/chart-meta.js +42 -42
- package/dist/{charts-d3-S6JPQQFZ.js → charts-d3-SQEVMIAM.js} +8 -8
- package/dist/{chunk-OYK45NY5.js → chunk-2NRIGEHZ.js} +3 -3
- package/dist/{chunk-ZIJXK3U5.js → chunk-2QRIMMIH.js} +3 -3
- package/dist/{chunk-PFZDLHHG.js → chunk-32MOGTKT.js} +43 -206
- package/dist/{chunk-NQJ7DDUT.js → chunk-3H4PDNP4.js} +3 -3
- package/dist/{chunk-K7P4SCB3.js → chunk-3LJNQ6LR.js} +7 -7
- package/dist/{chunk-7VMUKH2Z.js → chunk-3SP6G4LN.js} +3 -3
- package/dist/{chunk-2PU5XWLA.js → chunk-3SQJZMPO.js} +4 -129
- package/dist/{chunk-4K5H6LON.js → chunk-4YER7UCV.js} +3 -3
- package/dist/{chunk-BVNTXVYJ.js → chunk-5PFNUDXR.js} +3 -3
- package/dist/{chunk-OR3OX32W.js → chunk-76IBFEYW.js} +6 -6
- package/dist/{chunk-4FKEI4MF.js → chunk-76LHNLGX.js} +2 -2
- package/dist/{chunk-JLSGQMRA.js → chunk-76NHL5UG.js} +2 -2
- package/dist/{chunk-KUDYLU3M.js → chunk-7BMX2M3F.js} +2 -2
- package/dist/{chunk-FQDH6AL3.js → chunk-7EZ5AKBK.js} +6 -6
- package/dist/{chunk-CLKRRKV6.js → chunk-7G4XMHDB.js} +8 -8
- package/dist/{chunk-3AXUJ5PT.js → chunk-7NSNE52V.js} +5 -4
- package/dist/{chunk-XVJWAE2F.js → chunk-AFR6GWXD.js} +5 -5
- package/dist/{chunk-25LXU4OQ.js → chunk-AYM472K3.js} +7 -7
- package/dist/{chunk-K3O2CZTD.js → chunk-BCB24FG7.js} +4 -4
- package/dist/{chunk-E27E4ZFN.js → chunk-BFTRW24X.js} +3 -3
- package/dist/{chunk-WPEHUSUQ.js → chunk-BWJLLNUX.js} +3 -3
- package/dist/{chunk-INOSOL3J.js → chunk-C2WH3BMS.js} +2 -2
- package/dist/{chunk-TP42IN23.js → chunk-CAPR5DET.js} +4 -4
- package/dist/{chunk-ABH626W7.js → chunk-CLQJAGWL.js} +58 -54
- package/dist/{chunk-3X3UD7PN.js → chunk-COCMMQXW.js} +4 -4
- package/dist/{chunk-V7E3RZLQ.js → chunk-CQKD6GOC.js} +3 -3
- package/dist/{chunk-2M2UC5EU.js → chunk-CRLVJZWX.js} +2 -2
- package/dist/{chunk-A4GOY3PE.js → chunk-DEW62ON3.js} +1 -3
- package/dist/{chunk-KCHCOXAL.js → chunk-DJL5PO27.js} +2 -2
- package/dist/{chunk-5EI23VVR.js → chunk-DSH7NJ2G.js} +5 -5
- package/dist/{chunk-LMJKHQ4W.js → chunk-DU3OIBQE.js} +3 -3
- package/dist/{chunk-VWIXRNY2.js → chunk-DY7KDZUF.js} +3 -3
- package/dist/{chunk-DTYZAXEH.js → chunk-F4CPZRG2.js} +3 -3
- package/dist/{chunk-2TFWQM3E.js → chunk-F4V67JXG.js} +2 -2
- package/dist/{chunk-RYHZFP7Y.js → chunk-FPRMP6YA.js} +3 -3
- package/dist/{chunk-H454ZVAS.js → chunk-GEURKGZS.js} +6 -6
- package/dist/{chunk-KI2L4DWM.js → chunk-GRN44Z6A.js} +2 -2
- package/dist/{chunk-X6LXZJPT.js → chunk-HFCKU73Y.js} +6 -6
- package/dist/{chunk-FQFQGPWA.js → chunk-HGFKDSKZ.js} +5 -5
- package/dist/{chunk-XGBUCXU7.js → chunk-HOIAQ3P2.js} +3 -3
- package/dist/{chunk-ARM4G2HJ.js → chunk-ICVIJLBA.js} +4 -4
- package/dist/{chunk-FGXBIOVK.js → chunk-IFC3JXCT.js} +2 -2
- package/dist/{chunk-B5CIHVBP.js → chunk-IGQW7TKM.js} +7 -7
- package/dist/{chunk-DZC2OCK3.js → chunk-IHUOYDLN.js} +8 -8
- package/dist/{chunk-54SJUHNY.js → chunk-JL7BDLC6.js} +6 -6
- package/dist/{chunk-SNZFXGSE.js → chunk-JLODGGN2.js} +3 -3
- package/dist/{chunk-3OKBXV3I.js → chunk-JQ575OAK.js} +3 -3
- package/dist/{chunk-OMQ5V5NH.js → chunk-KRTLS3G6.js} +4 -4
- package/dist/{chunk-4NYJEK4R.js → chunk-KWSBNLSC.js} +2 -2
- package/dist/{chunk-7GYSVN4Z.js → chunk-LKS56RDT.js} +2 -2
- package/dist/{chunk-3ATHNEOQ.js → chunk-LXXVHLTH.js} +3 -3
- package/dist/{chunk-QFHPGDR5.js → chunk-LYLRNAX2.js} +2 -2
- package/dist/{chunk-TTVHS3D5.js → chunk-M3IVOGZE.js} +102 -97
- package/dist/{chunk-CVGTEAIO.js → chunk-M526IKKH.js} +2 -2
- package/dist/{chunk-W242EWZZ.js → chunk-M5JT2AU7.js} +4 -4
- package/dist/{chunk-MK55PZVB.js → chunk-M5OOAP65.js} +4 -3
- package/dist/{chunk-YJMWEZOB.js → chunk-MG3DE3VO.js} +2 -2
- package/dist/{chunk-TJS3J5B3.js → chunk-NHQ7HUAS.js} +3 -3
- package/dist/{chunk-TXWW4UZM.js → chunk-OKXWPKUC.js} +2 -2
- package/dist/{chunk-PJHYUVD3.js → chunk-OUJG73YJ.js} +7 -7
- package/dist/{chunk-T4L4LKXO.js → chunk-Q6BAFS7I.js} +3 -3
- package/dist/{chunk-KZKRK57S.js → chunk-QI4Q5ZZH.js} +7 -7
- package/dist/{chunk-D5ZZOTE6.js → chunk-QMFIZQTB.js} +2 -2
- package/dist/{chunk-IDEJ3J4J.js → chunk-QOVM5VRC.js} +3 -3
- package/dist/{chunk-O7ZKDUDX.js → chunk-QT5UMFPE.js} +2 -2
- package/dist/{chunk-JPVRJS74.js → chunk-QUYYL3LP.js} +4 -4
- package/dist/{chunk-YGKYQ7LA.js → chunk-R5JPMW2F.js} +40 -40
- package/dist/{chunk-NE7JHZCQ.js → chunk-RWFMOVHG.js} +3 -3
- package/dist/{chunk-RJUMXXKR.js → chunk-S5P5Z5Y5.js} +3 -3
- package/dist/{chunk-XL2C26LV.js → chunk-SH4PPRU7.js} +2 -2
- package/dist/{chunk-XOOYMOIW.js → chunk-SUA56ZSB.js} +3 -3
- package/dist/{chunk-2AC2KTVM.js → chunk-SWEKCK34.js} +3 -3
- package/dist/{chunk-WTMP6VZ6.js → chunk-TDHD3HNO.js} +3 -3
- package/dist/{chunk-AMYMV4JZ.js → chunk-TN754B3R.js} +2 -2
- package/dist/{chunk-XUCHK3OJ.js → chunk-TPN7RJOM.js} +3 -3
- package/dist/{chunk-6G2GJGUC.js → chunk-U5B3TUEW.js} +3 -3
- package/dist/{chunk-6LGPL4LP.js → chunk-U74EGVOA.js} +4 -4
- package/dist/{chunk-LGASNVZE.js → chunk-U7AO6FRL.js} +4 -4
- package/dist/{chunk-RN3PAL4E.js → chunk-UBW53CNS.js} +2 -2
- package/dist/{chunk-VQEW7XMN.js → chunk-UCZBRGJN.js} +2 -2
- package/dist/{chunk-HQ34V2XV.js → chunk-UJBP57UJ.js} +28 -11
- package/dist/{chunk-EPJHJF3J.js → chunk-UTTRJ6KN.js} +5 -5
- package/dist/{chunk-RXSAE6F5.js → chunk-UWYZIGCB.js} +3 -3
- package/dist/{chunk-7S5WQXI3.js → chunk-VBJCGGNF.js} +2 -2
- package/dist/{chunk-IEZYF5CN.js → chunk-W7UBPARG.js} +3 -3
- package/dist/{chunk-X6LVGU4W.js → chunk-WQXD3IIN.js} +2 -2
- package/dist/{chunk-ITAFWUSB.js → chunk-XCAEHWQB.js} +3 -3
- package/dist/{chunk-WDKLODC3.js → chunk-XFLLYY3V.js} +7 -7
- package/dist/{chunk-MZMK474U.js → chunk-XHROEQ23.js} +6 -6
- package/dist/{chunk-Q446PFCV.js → chunk-Y2CYNRL7.js} +2 -2
- package/dist/{chunk-A34AXXBO.js → chunk-YVDBBWEP.js} +5 -5
- package/dist/{chunk-ZQ5SROS2.js → chunk-Z7KVOVE4.js} +2 -2
- package/dist/{chunk-I4YT5KL6.js → chunk-ZM27UI5O.js} +3 -3
- package/dist/{chunk-AG3Z47VY.js → chunk-ZMKCG3FT.js} +6 -6
- package/dist/completion-registry.js +4 -3
- package/dist/dgmo-router-KYNLRE7S.js +89 -0
- package/dist/{dimensions-PRZSDFWR.js → dimensions-NLQ64ED5.js} +6 -6
- package/dist/editor.js +1 -0
- package/dist/{flowchart-parser-HR25V5AH.js → flowchart-parser-LY5GGQL2.js} +4 -4
- package/dist/{flowchart-renderer-FY63GDRH.js → flowchart-renderer-RIJ5FZKO.js} +6 -6
- package/dist/highlight.js +1 -0
- package/dist/index.js +49 -49
- package/dist/{layout-PKGNLY6P.js → layout-5ILNODTP.js} +4 -4
- package/dist/{layout-O4PR46GN.js → layout-EM4DLMAX.js} +3 -3
- package/dist/{layout-BWHNERBW.js → layout-RV2T2YTT.js} +4 -4
- package/dist/{layout-43A4YMAH.js → layout-UJ62RQQ3.js} +3 -3
- package/dist/{layout-4URV4OXF.js → layout-VUZ3MLOI.js} +4 -4
- package/dist/{layout-U5OVRUOK.js → layout-ZAGUFT2G.js} +4 -4
- package/dist/{parser-XS7DL63K.js → parser-2GMHFSTS.js} +4 -4
- package/dist/{parser-23MYMNF6.js → parser-3AOMUX5D.js} +4 -4
- package/dist/{parser-XTSWP4N3.js → parser-3KQONLXZ.js} +3 -3
- package/dist/{parser-X5RGCC3C.js → parser-4DLU4SNG.js} +3 -3
- package/dist/{parser-AN4SUBQ6.js → parser-4KFJKLP2.js} +3 -3
- package/dist/{parser-W2LEO5QM.js → parser-5XFGK5C5.js} +4 -4
- package/dist/{parser-PDPZ2I6C.js → parser-6FUESG4N.js} +4 -4
- package/dist/{parser-GPZYL6ZE.js → parser-B2XQNHZM.js} +3 -3
- package/dist/{parser-W3QZBUOF.js → parser-CJNP7RKR.js} +4 -4
- package/dist/{parser-BTTFGJGI.js → parser-E3OHNNTH.js} +4 -4
- package/dist/{parser-A665TNOV.js → parser-EQ4I3TSH.js} +5 -5
- package/dist/{parser-2FNHLEBN.js → parser-F4ZKDGUZ.js} +3 -3
- package/dist/{parser-PCALQIW2.js → parser-GCVSRQPY.js} +4 -4
- package/dist/{parser-3JDQL7QF.js → parser-H4ZUNLX4.js} +3 -3
- package/dist/{parser-CAAFD3HB.js → parser-JYIZEKAS.js} +4 -4
- package/dist/{parser-SQMOEVG4.js → parser-L7RXUKYN.js} +4 -4
- package/dist/{parser-DIQ2E5MR.js → parser-L7T7FY3H.js} +4 -4
- package/dist/{parser-SQFNO6XG.js → parser-LUOINP6H.js} +4 -4
- package/dist/{parser-XGUJ7SMG.js → parser-LV7PQBUG.js} +4 -4
- package/dist/{parser-EDXD6ZGJ.js → parser-ML3LVNDV.js} +4 -4
- package/dist/{parser-DBOJKLDF.js → parser-PR3OR3LO.js} +5 -5
- package/dist/{parser-MDYNA6JL.js → parser-QOIZGW7I.js} +4 -4
- package/dist/{parser-BCQBK2XB.js → parser-RDBXEVI4.js} +4 -4
- package/dist/{parser-5RY6ID5M.js → parser-TA5TYZNL.js} +5 -5
- package/dist/{parser-6YBYIFS2.js → parser-UTR5WE4O.js} +4 -4
- package/dist/{parser-COBTDQPC.js → parser-WCFG3DZA.js} +3 -3
- package/dist/{parser-2FZ4BDEW.js → parser-WMJEPZDC.js} +4 -4
- package/dist/{parser-VQX2LVUJ.js → parser-WQNT7T2P.js} +3 -3
- package/dist/{parser-TATBFGQ2.js → parser-WWRRG2DV.js} +4 -4
- package/dist/{parser-BC2TAVB3.js → parser-XVSDFO56.js} +3 -3
- package/dist/{parser-5CAGM3ED.js → parser-YWQCC33R.js} +4 -4
- package/dist/{parser-VJEHPDOO.js → parser-ZT3PU2HT.js} +4 -4
- package/dist/{parser-WQCSMLUI.js → parser-ZXQZZK6W.js} +3 -3
- package/dist/pert.d.ts +4 -33
- package/dist/{renderer-MCWAHNQG.js → renderer-3FB56573.js} +5 -5
- package/dist/{renderer-2E2Z5N66.js → renderer-4EWGZLJ6.js} +4 -4
- package/dist/{renderer-J2N5YBFP.js → renderer-4PNVGHVA.js} +5 -5
- package/dist/{renderer-S42JPAZO.js → renderer-5W3HWIUL.js} +6 -6
- package/dist/{renderer-DU6D3S6K.js → renderer-73QHYZ2Q.js} +8 -8
- package/dist/{renderer-V7476J5G.js → renderer-A2YWSBPY.js} +9 -9
- package/dist/{renderer-VG4C23TY.js → renderer-BUEFD2IF.js} +5 -5
- package/dist/{renderer-XNLRQWM6.js → renderer-CGOPX4HW.js} +9 -10
- package/dist/{renderer-ODDULMVE.js → renderer-CO5O5VR5.js} +6 -6
- package/dist/{renderer-SW5YUK6H.js → renderer-D7N7PPB7.js} +5 -5
- package/dist/{renderer-KJNTNI22.js → renderer-DKW273R7.js} +7 -7
- package/dist/{renderer-6U6YW4HX.js → renderer-F24V3RD3.js} +7 -7
- package/dist/{renderer-EAQNSDTC.js → renderer-FGGDZZFQ.js} +8 -8
- package/dist/{renderer-HZCYBOAB.js → renderer-FUJNSC5X.js} +4 -4
- package/dist/{renderer-XL54ZE4H.js → renderer-GF6S5ZX6.js} +8 -8
- package/dist/{renderer-NXOSBZPO.js → renderer-GJDVPXI3.js} +9 -9
- package/dist/{renderer-YX6S3U4L.js → renderer-JMJ7Q5OC.js} +7 -7
- package/dist/{renderer-WG6CUDWI.js → renderer-KMOGGMM7.js} +9 -9
- package/dist/{renderer-AKZECRNK.js → renderer-LBNVKVO3.js} +9 -9
- package/dist/{renderer-BUMIZJIY.js → renderer-MUW4G2N6.js} +10 -10
- package/dist/{renderer-IMZKZ6TV.js → renderer-PIEPRK6M.js} +8 -8
- package/dist/{renderer-4HGNWJRC.js → renderer-PKRKLOYR.js} +7 -7
- package/dist/{renderer-YIJYYZZE.js → renderer-PR3KLNST.js} +7 -7
- package/dist/{renderer-SCIHPARI.js → renderer-QAMOXOZ2.js} +3 -3
- package/dist/{renderer-MJCSBYAR.js → renderer-RUHC6D3B.js} +7 -7
- package/dist/{renderer-2DIH3YW6.js → renderer-UUP6OX6F.js} +7 -7
- package/dist/renderer-UYYBJ7OB.js +76 -0
- package/dist/{renderer-BY5AAKV7.js → renderer-UYZSP7MF.js} +7 -7
- package/dist/{renderer-GQUJVPVA.js → renderer-WDSBFDQ2.js} +8 -8
- package/dist/{renderer-TBWE67FB.js → renderer-XBL6CLN2.js} +7 -7
- package/dist/{renderer-R7Q72DM4.js → renderer-ZAJ5353N.js} +4 -4
- package/dist/{renderer-radial-ZZAAPDSY.js → renderer-radial-MZP3SVTZ.js} +6 -6
- package/dist/{state-parser-4DJ67MNV.js → state-parser-TPA67IXM.js} +5 -5
- package/dist/{state-renderer-IABX3URA.js → state-renderer-454ADT7E.js} +9 -9
- package/docs/language-reference.md +7 -6
- package/package.json +2 -2
- package/dist/dgmo-router-AE6FUBV3.js +0 -89
- package/dist/renderer-LKZZID6J.js +0 -76
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
analyzePert
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3SQJZMPO.js";
|
|
4
4
|
import {
|
|
5
5
|
computeNodeSizing,
|
|
6
6
|
layoutPert
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
INLINE_HEADER_PAD,
|
|
21
21
|
layoutInlineHeader
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MG3DE3VO.js";
|
|
23
23
|
import {
|
|
24
24
|
serializeSvg
|
|
25
25
|
} from "./chunk-RU2HHHYA.js";
|
|
@@ -27,16 +27,15 @@ import {
|
|
|
27
27
|
CAPTION_BOX_PADDING_X,
|
|
28
28
|
CAPTION_BOX_PADDING_Y,
|
|
29
29
|
CAPTION_FONT_SIZE,
|
|
30
|
-
CAPTION_FONT_WEIGHT,
|
|
31
30
|
CAPTION_LINE_HEIGHT,
|
|
32
31
|
CAPTION_TOP_GAP,
|
|
33
32
|
TITLE_FONT_SIZE,
|
|
34
33
|
TITLE_FONT_WEIGHT,
|
|
35
34
|
TITLE_Y
|
|
36
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-DEW62ON3.js";
|
|
37
36
|
import {
|
|
38
37
|
renderIntegratedLegend
|
|
39
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-QT5UMFPE.js";
|
|
40
39
|
import {
|
|
41
40
|
getLegendExtent
|
|
42
41
|
} from "./chunk-4SXHMFFP.js";
|
|
@@ -53,7 +52,7 @@ import {
|
|
|
53
52
|
} from "./chunk-MTGGOCND.js";
|
|
54
53
|
import {
|
|
55
54
|
parsePert
|
|
56
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-RWFMOVHG.js";
|
|
57
56
|
import {
|
|
58
57
|
addCalendarDays,
|
|
59
58
|
formatDuration,
|
|
@@ -64,7 +63,7 @@ import {
|
|
|
64
63
|
import {
|
|
65
64
|
resolveActiveTagGroup,
|
|
66
65
|
resolveTagColor
|
|
67
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-76LHNLGX.js";
|
|
68
67
|
import {
|
|
69
68
|
contrastText,
|
|
70
69
|
mix,
|
|
@@ -169,25 +168,14 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
|
|
|
169
168
|
const effectiveTitle = options.title;
|
|
170
169
|
const effectiveSubtitle = options.subtitle ?? null;
|
|
171
170
|
const titleHeight = effectiveTitle ? 80 : effectiveSubtitle ? 50 : 0;
|
|
172
|
-
const anchorAnnotation = anchorAnnotationText(resolved);
|
|
173
171
|
const collapsedSet = new Set(options.collapsedGroupIds ?? []);
|
|
174
|
-
const
|
|
175
|
-
const captionBullets = captionRows !== null && captionRows.length > 0 ? bulletizeCaption(captionRows) : [];
|
|
176
|
-
if (anchorAnnotation) {
|
|
177
|
-
captionBullets.push({
|
|
178
|
-
text: anchorAnnotation,
|
|
179
|
-
level: 0,
|
|
180
|
-
italic: true
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
const analysisLayer = computeAnalysisLayer(resolved, captionBullets, {
|
|
184
|
-
showSummary: options.showSummary ?? true,
|
|
172
|
+
const analysisLayer = computeAnalysisLayer(resolved, {
|
|
185
173
|
showTornado: options.showTornado ?? false,
|
|
186
174
|
showScurve: options.showScurve ?? false,
|
|
187
175
|
showFieldLegend: options.showFieldLegend ?? false
|
|
188
176
|
});
|
|
189
177
|
const standaloneFieldLegendWidthForExport = layout.width;
|
|
190
|
-
const
|
|
178
|
+
const analysisBlockHeightAt = (contentWidth) => analysisLayer.analysisHasContent ? CAPTION_TOP_GAP + analysisContentHeightAt(analysisLayer, contentWidth) : 0;
|
|
191
179
|
const fieldLegendBlockHeight = analysisLayer.fieldLegendStandalone ? CAPTION_TOP_GAP + fieldLegendHeightFor(standaloneFieldLegendWidthForExport) : 0;
|
|
192
180
|
const showLegend = options.showLegend ?? true;
|
|
193
181
|
const tagLegendActive = resolveActiveTagGroup(
|
|
@@ -200,7 +188,7 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
|
|
|
200
188
|
const naturalChartWidth = layout.width + DIAGRAM_PADDING * 2;
|
|
201
189
|
const minAnalysisRowW = analysisLayer.analysisHasContent ? analysisLayer.minContentWidth + 2 * DIAGRAM_PADDING : 0;
|
|
202
190
|
const naturalWidth = Math.max(naturalChartWidth, minAnalysisRowW);
|
|
203
|
-
const naturalHeight = layout.height + DIAGRAM_PADDING * 2 + titleHeight + legendBlockHeight +
|
|
191
|
+
const naturalHeight = layout.height + DIAGRAM_PADDING * 2 + titleHeight + legendBlockHeight + analysisBlockHeightAt(naturalWidth - DIAGRAM_PADDING * 2) + fieldLegendBlockHeight;
|
|
204
192
|
const exportWidth = Math.max(
|
|
205
193
|
options.exportDims?.width ?? naturalWidth,
|
|
206
194
|
naturalWidth
|
|
@@ -236,7 +224,7 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
|
|
|
236
224
|
const sPinIconW = ctx.structural(PIN_ICON_W);
|
|
237
225
|
const sPinIconH = ctx.structural(PIN_ICON_H);
|
|
238
226
|
const scaledWidth = layout.width + sDiagramPad * 2;
|
|
239
|
-
const scaledHeight = layout.height + sDiagramPad * 2 + sTitleHeight + sLegendBlockHeight +
|
|
227
|
+
const scaledHeight = layout.height + sDiagramPad * 2 + sTitleHeight + sLegendBlockHeight + analysisBlockHeightAt(scaledWidth - sDiagramPad * 2) + fieldLegendBlockHeight;
|
|
240
228
|
const svgW = ctx.isBelowFloor ? exportWidth : scaledWidth;
|
|
241
229
|
const svgH = ctx.isBelowFloor ? exportHeight : scaledHeight;
|
|
242
230
|
const inlineRequested = resolved.options.legendInline === true && showTagLegend;
|
|
@@ -340,7 +328,6 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
|
|
|
340
328
|
palette,
|
|
341
329
|
isDark,
|
|
342
330
|
analysisLayer,
|
|
343
|
-
captionBullets,
|
|
344
331
|
sDiagramPad,
|
|
345
332
|
offsetY + layout.height,
|
|
346
333
|
svgW - 2 * sDiagramPad
|
|
@@ -358,16 +345,9 @@ function renderPertForExport(content, theme, palette, now) {
|
|
|
358
345
|
const hasTitle = !!parsed.title && !resolved.options.noTitle;
|
|
359
346
|
const hasSubtitle = resolved.projectSubtitle !== null;
|
|
360
347
|
const titleHeight = hasTitle ? 80 : hasSubtitle ? 50 : 0;
|
|
361
|
-
const captionBullets = resolved.summaryRows !== null && resolved.summaryRows.length > 0 ? bulletizeCaption(resolved.summaryRows) : [];
|
|
362
|
-
const anchorNote = anchorAnnotationText(resolved);
|
|
363
|
-
if (anchorNote) {
|
|
364
|
-
captionBullets.push({ text: anchorNote, level: 0, italic: true });
|
|
365
|
-
}
|
|
366
|
-
const captionBoxHeight = captionBullets.length > 0 ? captionBullets.length * CAPTION_LINE_HEIGHT + 2 * CAPTION_BOX_PADDING_Y + CAPTION_HEADER_BAND_HEIGHT : 0;
|
|
367
|
-
const captionBlockHeight = captionBullets.length > 0 ? CAPTION_TOP_GAP + captionBoxHeight : 0;
|
|
368
348
|
const legendBlockHeight = resolved.tagGroups.length > 0 ? LEGEND_TOP_GAP + LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0;
|
|
369
349
|
const exportWidth = layout.width + DIAGRAM_PADDING * 2;
|
|
370
|
-
const exportHeight = layout.height + DIAGRAM_PADDING * 2 + titleHeight + legendBlockHeight
|
|
350
|
+
const exportHeight = layout.height + DIAGRAM_PADDING * 2 + titleHeight + legendBlockHeight;
|
|
371
351
|
const container = document.createElement("div");
|
|
372
352
|
container.style.width = `${exportWidth}px`;
|
|
373
353
|
container.style.height = `${exportHeight}px`;
|
|
@@ -392,25 +372,17 @@ function renderPertForExport(content, theme, palette, now) {
|
|
|
392
372
|
document.body.removeChild(container);
|
|
393
373
|
}
|
|
394
374
|
}
|
|
395
|
-
function computeAnalysisLayer(resolved,
|
|
396
|
-
const summaryRendered = opts.showSummary && captionBullets.length > 0;
|
|
397
|
-
const captionBoxHeight = summaryRendered ? captionBullets.length * CAPTION_LINE_HEIGHT + 2 * CAPTION_BOX_PADDING_Y + CAPTION_HEADER_BAND_HEIGHT : 0;
|
|
375
|
+
function computeAnalysisLayer(resolved, opts) {
|
|
398
376
|
let tornadoRows = opts.showTornado ? buildTornadoRows(resolved) : [];
|
|
399
377
|
const showTornado = tornadoRows.length > 0;
|
|
400
378
|
let tornadoBoxHeight = showTornado ? tornadoBoxHeightFor(tornadoRows) : 0;
|
|
401
379
|
const scurveData = opts.showScurve ? buildScurveData(resolved) : null;
|
|
402
380
|
const showScurve = scurveData !== null;
|
|
403
381
|
const scurveBoxHeight = showScurve ? SCURVE_BOX_HEIGHT : 0;
|
|
404
|
-
const fieldLegendInAnalysisRow = opts.showFieldLegend && (
|
|
405
|
-
const col1Width =
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
) : fieldLegendInAnalysisRow ? SUMMARY_MAX_W : 0;
|
|
409
|
-
const fieldLegendCol1Height = fieldLegendInAnalysisRow ? fieldLegendHeightFor(col1Width) : 0;
|
|
410
|
-
const col1Items = [];
|
|
411
|
-
if (summaryRendered) col1Items.push(captionBoxHeight);
|
|
412
|
-
if (fieldLegendInAnalysisRow) col1Items.push(fieldLegendCol1Height);
|
|
413
|
-
const col1Height = col1Items.length ? col1Items.reduce((a, b) => a + b, 0) + (col1Items.length - 1) * COL1_VSTACK_GAP : 0;
|
|
382
|
+
const fieldLegendInAnalysisRow = opts.showFieldLegend && (showTornado || showScurve);
|
|
383
|
+
const col1Width = fieldLegendInAnalysisRow ? FIELD_LEGEND_COL1_W : 0;
|
|
384
|
+
const col1Height = fieldLegendInAnalysisRow ? fieldLegendHeightFor(col1Width) : 0;
|
|
385
|
+
const fieldLegendCol1Height = col1Height;
|
|
414
386
|
let analysisRowHeight = Math.max(
|
|
415
387
|
col1Height,
|
|
416
388
|
scurveBoxHeight,
|
|
@@ -433,11 +405,11 @@ function computeAnalysisLayer(resolved, captionBullets, opts) {
|
|
|
433
405
|
analysisCharts.push({ kind: "tornado", contentHeight: tornadoBoxHeight });
|
|
434
406
|
if (showScurve)
|
|
435
407
|
analysisCharts.push({ kind: "scurve", contentHeight: scurveBoxHeight });
|
|
436
|
-
const analysisHasContent =
|
|
408
|
+
const analysisHasContent = analysisCharts.length > 0 || fieldLegendInAnalysisRow;
|
|
437
409
|
const fieldLegendStandalone = opts.showFieldLegend && !fieldLegendInAnalysisRow;
|
|
438
410
|
let minContentWidth = 0;
|
|
439
411
|
if (analysisHasContent) {
|
|
440
|
-
const col1Used =
|
|
412
|
+
const col1Used = fieldLegendInAnalysisRow;
|
|
441
413
|
if (col1Used) minContentWidth += col1Width;
|
|
442
414
|
for (const w of analysisCharts) {
|
|
443
415
|
minContentWidth += w.kind === "tornado" ? TORNADO_MIN_W : SCURVE_MIN_W;
|
|
@@ -446,7 +418,6 @@ function computeAnalysisLayer(resolved, captionBullets, opts) {
|
|
|
446
418
|
if (colCount > 1) minContentWidth += (colCount - 1) * ANALYSIS_GAP;
|
|
447
419
|
}
|
|
448
420
|
return {
|
|
449
|
-
summaryRendered,
|
|
450
421
|
showTornado,
|
|
451
422
|
showScurve,
|
|
452
423
|
fieldLegendInAnalysisRow,
|
|
@@ -455,7 +426,6 @@ function computeAnalysisLayer(resolved, captionBullets, opts) {
|
|
|
455
426
|
tornadoRows,
|
|
456
427
|
scurveData,
|
|
457
428
|
analysisCharts,
|
|
458
|
-
captionBoxHeight,
|
|
459
429
|
fieldLegendCol1Height,
|
|
460
430
|
tornadoBoxHeight,
|
|
461
431
|
scurveBoxHeight,
|
|
@@ -469,9 +439,11 @@ function analysisLayerHeightAt(state, availableWidth) {
|
|
|
469
439
|
if (!state.analysisHasContent) {
|
|
470
440
|
return state.fieldLegendStandalone ? CAPTION_TOP_GAP + fieldLegendHeightFor(availableWidth) : 0;
|
|
471
441
|
}
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
442
|
+
return CAPTION_TOP_GAP + analysisContentHeightAt(state, availableWidth);
|
|
443
|
+
}
|
|
444
|
+
function analysisContentHeightAt(state, availableWidth) {
|
|
445
|
+
if (!state.analysisHasContent) return 0;
|
|
446
|
+
if (availableWidth >= state.minContentWidth) return state.analysisRowHeight;
|
|
475
447
|
const rows = packRows(state, availableWidth);
|
|
476
448
|
let total = 0;
|
|
477
449
|
rows.forEach((row, i) => {
|
|
@@ -485,9 +457,9 @@ function analysisLayerHeightAt(state, availableWidth) {
|
|
|
485
457
|
total += rowHeight;
|
|
486
458
|
if (i < rows.length - 1) total += ANALYSIS_GAP;
|
|
487
459
|
});
|
|
488
|
-
return
|
|
460
|
+
return total;
|
|
489
461
|
}
|
|
490
|
-
function paintAnalysisLayer(svg, resolved, palette, isDark, state,
|
|
462
|
+
function paintAnalysisLayer(svg, resolved, palette, isDark, state, x, y, availableWidth) {
|
|
491
463
|
if (!state.analysisHasContent) {
|
|
492
464
|
if (!state.fieldLegendStandalone) return 0;
|
|
493
465
|
const bandY = y + CAPTION_TOP_GAP;
|
|
@@ -509,7 +481,6 @@ function paintAnalysisLayer(svg, resolved, palette, isDark, state, captionBullet
|
|
|
509
481
|
palette,
|
|
510
482
|
isDark,
|
|
511
483
|
state,
|
|
512
|
-
captionBullets,
|
|
513
484
|
x,
|
|
514
485
|
y,
|
|
515
486
|
availableWidth
|
|
@@ -521,15 +492,14 @@ function paintAnalysisLayer(svg, resolved, palette, isDark, state, captionBullet
|
|
|
521
492
|
palette,
|
|
522
493
|
isDark,
|
|
523
494
|
state,
|
|
524
|
-
captionBullets,
|
|
525
495
|
x,
|
|
526
496
|
y,
|
|
527
497
|
availableWidth
|
|
528
498
|
);
|
|
529
499
|
}
|
|
530
|
-
function paintAnalysisRowMode(svg, resolved, palette, isDark, state,
|
|
500
|
+
function paintAnalysisRowMode(svg, resolved, palette, isDark, state, x, y, availableWidth) {
|
|
531
501
|
const bandY = y + CAPTION_TOP_GAP;
|
|
532
|
-
const col1Used = state.
|
|
502
|
+
const col1Used = state.fieldLegendInAnalysisRow;
|
|
533
503
|
const colCount = (col1Used ? 1 : 0) + state.analysisCharts.length;
|
|
534
504
|
const nGaps = Math.max(0, colCount - 1);
|
|
535
505
|
const usableWidth = availableWidth - nGaps * ANALYSIS_GAP;
|
|
@@ -550,35 +520,18 @@ function paintAnalysisRowMode(svg, resolved, palette, isDark, state, captionBull
|
|
|
550
520
|
fillMode: resolved.options.fillMode
|
|
551
521
|
});
|
|
552
522
|
} else {
|
|
553
|
-
const scurveTitle = !state.summaryRendered && captionBullets.length > 0 ? (
|
|
554
|
-
// In-bounds by length check.
|
|
555
|
-
captionBullets[0].text
|
|
556
|
-
) : void 0;
|
|
557
523
|
renderScurveBlock(svg, state.scurveData, {
|
|
558
524
|
...args,
|
|
559
|
-
unit: resolved.options.timeUnit
|
|
560
|
-
...scurveTitle !== void 0 && { title: scurveTitle }
|
|
525
|
+
unit: resolved.options.timeUnit
|
|
561
526
|
});
|
|
562
527
|
}
|
|
563
528
|
cursorX += chartWidth + ANALYSIS_GAP;
|
|
564
529
|
}
|
|
565
530
|
if (col1Used) {
|
|
566
|
-
let stackY = bandY;
|
|
567
|
-
if (state.summaryRendered) {
|
|
568
|
-
renderCaptionBlock(svg, captionBullets, {
|
|
569
|
-
x: cursorX,
|
|
570
|
-
y: stackY,
|
|
571
|
-
width: state.col1Width,
|
|
572
|
-
height: state.captionBoxHeight,
|
|
573
|
-
palette,
|
|
574
|
-
isDark
|
|
575
|
-
});
|
|
576
|
-
stackY += state.captionBoxHeight + COL1_VSTACK_GAP;
|
|
577
|
-
}
|
|
578
531
|
if (state.fieldLegendInAnalysisRow) {
|
|
579
532
|
renderFieldLegendBlock(svg, {
|
|
580
533
|
x: cursorX,
|
|
581
|
-
y:
|
|
534
|
+
y: bandY,
|
|
582
535
|
width: state.col1Width,
|
|
583
536
|
height: state.fieldLegendCol1Height,
|
|
584
537
|
palette,
|
|
@@ -588,7 +541,6 @@ function paintAnalysisRowMode(svg, resolved, palette, isDark, state, captionBull
|
|
|
588
541
|
}
|
|
589
542
|
return CAPTION_TOP_GAP + state.analysisRowHeight;
|
|
590
543
|
}
|
|
591
|
-
var FIELD_LEGEND_MIN_W = 220;
|
|
592
544
|
function packRows(state, availableWidth) {
|
|
593
545
|
const rows = [];
|
|
594
546
|
const charts = state.analysisCharts;
|
|
@@ -608,23 +560,7 @@ function packRows(state, availableWidth) {
|
|
|
608
560
|
} else if (charts.length === 1) {
|
|
609
561
|
rows.push([{ kind: charts[0].kind, paintWidth: availableWidth }]);
|
|
610
562
|
}
|
|
611
|
-
|
|
612
|
-
const hasField = state.fieldLegendInAnalysisRow;
|
|
613
|
-
if (hasSummary && hasField) {
|
|
614
|
-
const summaryW = state.col1Width;
|
|
615
|
-
const fieldW = availableWidth - summaryW - ANALYSIS_GAP;
|
|
616
|
-
if (fieldW >= FIELD_LEGEND_MIN_W) {
|
|
617
|
-
rows.push([
|
|
618
|
-
{ kind: "summary", paintWidth: summaryW },
|
|
619
|
-
{ kind: "field", paintWidth: fieldW }
|
|
620
|
-
]);
|
|
621
|
-
} else {
|
|
622
|
-
rows.push([{ kind: "summary", paintWidth: summaryW }]);
|
|
623
|
-
rows.push([{ kind: "field", paintWidth: availableWidth }]);
|
|
624
|
-
}
|
|
625
|
-
} else if (hasSummary) {
|
|
626
|
-
rows.push([{ kind: "summary", paintWidth: state.col1Width }]);
|
|
627
|
-
} else if (hasField) {
|
|
563
|
+
if (state.fieldLegendInAnalysisRow) {
|
|
628
564
|
rows.push([{ kind: "field", paintWidth: availableWidth }]);
|
|
629
565
|
}
|
|
630
566
|
return rows;
|
|
@@ -635,13 +571,11 @@ function itemContentHeight(state, kind, paintWidth) {
|
|
|
635
571
|
return state.tornadoBoxHeight;
|
|
636
572
|
case "scurve":
|
|
637
573
|
return state.scurveBoxHeight;
|
|
638
|
-
case "summary":
|
|
639
|
-
return state.captionBoxHeight;
|
|
640
574
|
case "field":
|
|
641
575
|
return fieldLegendHeightFor(paintWidth);
|
|
642
576
|
}
|
|
643
577
|
}
|
|
644
|
-
function paintAnalysisStackMode(svg, resolved, palette, isDark, state,
|
|
578
|
+
function paintAnalysisStackMode(svg, resolved, palette, isDark, state, x, y, availableWidth) {
|
|
645
579
|
const rows = packRows(state, availableWidth);
|
|
646
580
|
let cursorY = y + CAPTION_TOP_GAP;
|
|
647
581
|
rows.forEach((row, rowIndex) => {
|
|
@@ -672,21 +606,12 @@ function paintAnalysisStackMode(svg, resolved, palette, isDark, state, captionBu
|
|
|
672
606
|
fillMode: resolved.options.fillMode
|
|
673
607
|
});
|
|
674
608
|
break;
|
|
675
|
-
case "scurve":
|
|
676
|
-
const scurveTitle = !state.summaryRendered && captionBullets.length > 0 ? (
|
|
677
|
-
// In-bounds by length check.
|
|
678
|
-
captionBullets[0].text
|
|
679
|
-
) : void 0;
|
|
609
|
+
case "scurve":
|
|
680
610
|
renderScurveBlock(svg, state.scurveData, {
|
|
681
611
|
...args,
|
|
682
|
-
unit: resolved.options.timeUnit
|
|
683
|
-
...scurveTitle !== void 0 && { title: scurveTitle }
|
|
612
|
+
unit: resolved.options.timeUnit
|
|
684
613
|
});
|
|
685
614
|
break;
|
|
686
|
-
}
|
|
687
|
-
case "summary":
|
|
688
|
-
renderCaptionBlock(svg, captionBullets, args);
|
|
689
|
-
break;
|
|
690
615
|
case "field":
|
|
691
616
|
renderFieldLegendBlock(svg, args);
|
|
692
617
|
break;
|
|
@@ -699,14 +624,7 @@ function paintAnalysisStackMode(svg, resolved, palette, isDark, state, captionBu
|
|
|
699
624
|
return cursorY - y;
|
|
700
625
|
}
|
|
701
626
|
function measurePertAnalysisBlock(resolved, width, options) {
|
|
702
|
-
const
|
|
703
|
-
const captionBullets = captionRows !== null && captionRows.length > 0 ? bulletizeCaption(captionRows) : [];
|
|
704
|
-
const anchorAnnotation = anchorAnnotationText(resolved);
|
|
705
|
-
if (anchorAnnotation) {
|
|
706
|
-
captionBullets.push({ text: anchorAnnotation, level: 0, italic: true });
|
|
707
|
-
}
|
|
708
|
-
const state = computeAnalysisLayer(resolved, captionBullets, {
|
|
709
|
-
showSummary: options.showSummary ?? true,
|
|
627
|
+
const state = computeAnalysisLayer(resolved, {
|
|
710
628
|
showTornado: options.showTornado ?? false,
|
|
711
629
|
showScurve: options.showScurve ?? false,
|
|
712
630
|
showFieldLegend: options.showFieldLegend ?? false
|
|
@@ -715,7 +633,6 @@ function measurePertAnalysisBlock(resolved, width, options) {
|
|
|
715
633
|
return { width: 0, height: 0 };
|
|
716
634
|
}
|
|
717
635
|
const itemMinW = Math.max(
|
|
718
|
-
state.summaryRendered ? SUMMARY_MIN_W : 0,
|
|
719
636
|
state.showTornado ? TORNADO_MIN_W : 0,
|
|
720
637
|
state.showScurve ? SCURVE_MIN_W : 0,
|
|
721
638
|
0
|
|
@@ -725,21 +642,13 @@ function measurePertAnalysisBlock(resolved, width, options) {
|
|
|
725
642
|
}
|
|
726
643
|
function renderPertAnalysisBlock(container, resolved, palette, isDark, options) {
|
|
727
644
|
d3Selection.select(container).selectAll(":not([data-d3-tooltip])").remove();
|
|
728
|
-
const
|
|
729
|
-
const captionBullets = captionRows !== null && captionRows.length > 0 ? bulletizeCaption(captionRows) : [];
|
|
730
|
-
const anchorAnnotation = anchorAnnotationText(resolved);
|
|
731
|
-
if (anchorAnnotation) {
|
|
732
|
-
captionBullets.push({ text: anchorAnnotation, level: 0, italic: true });
|
|
733
|
-
}
|
|
734
|
-
const state = computeAnalysisLayer(resolved, captionBullets, {
|
|
735
|
-
showSummary: options.showSummary ?? true,
|
|
645
|
+
const state = computeAnalysisLayer(resolved, {
|
|
736
646
|
showTornado: options.showTornado ?? false,
|
|
737
647
|
showScurve: options.showScurve ?? false,
|
|
738
648
|
showFieldLegend: options.showFieldLegend ?? false
|
|
739
649
|
});
|
|
740
650
|
if (!state.analysisHasContent && !state.fieldLegendStandalone) return;
|
|
741
651
|
const itemMinW = Math.max(
|
|
742
|
-
state.summaryRendered ? SUMMARY_MIN_W : 0,
|
|
743
652
|
state.showTornado ? TORNADO_MIN_W : 0,
|
|
744
653
|
state.showScurve ? SCURVE_MIN_W : 0,
|
|
745
654
|
// Field labels has no hard min — it wraps to whatever width it gets.
|
|
@@ -749,17 +658,7 @@ function renderPertAnalysisBlock(container, resolved, palette, isDark, options)
|
|
|
749
658
|
const totalHeight = analysisLayerHeightAt(state, width);
|
|
750
659
|
if (totalHeight <= 0 || width <= 0) return;
|
|
751
660
|
const svg = d3Selection.select(container).append("svg").attr("width", width).attr("height", totalHeight).attr("viewBox", `0 0 ${width} ${totalHeight}`).attr("preserveAspectRatio", "xMidYMin meet").style("font-family", FONT_FAMILY).style("overflow", "visible");
|
|
752
|
-
paintAnalysisLayer(
|
|
753
|
-
svg,
|
|
754
|
-
resolved,
|
|
755
|
-
palette,
|
|
756
|
-
isDark,
|
|
757
|
-
state,
|
|
758
|
-
captionBullets,
|
|
759
|
-
0,
|
|
760
|
-
0,
|
|
761
|
-
width
|
|
762
|
-
);
|
|
661
|
+
paintAnalysisLayer(svg, resolved, palette, isDark, state, 0, 0, width);
|
|
763
662
|
}
|
|
764
663
|
function buildArrowheads(defs, palette, arrowW = ARROWHEAD_W, arrowH = ARROWHEAD_H) {
|
|
765
664
|
const mk = (id, fill) => {
|
|
@@ -1306,48 +1205,14 @@ function computeAnchorPinSet(resolved) {
|
|
|
1306
1205
|
}
|
|
1307
1206
|
return pinned;
|
|
1308
1207
|
}
|
|
1309
|
-
function anchorAnnotationText(resolved) {
|
|
1310
|
-
const anchor = resolved.options.anchor;
|
|
1311
|
-
if (anchor === null) return null;
|
|
1312
|
-
const today = resolved.options.today;
|
|
1313
|
-
if (anchor.kind === "forward") {
|
|
1314
|
-
return `Forward from start-date ${anchor.date}`;
|
|
1315
|
-
}
|
|
1316
|
-
const asOf = today ? ` (as of ${today})` : "";
|
|
1317
|
-
if (resolved.projectStart) {
|
|
1318
|
-
return `Backward-anchored from end-date ${anchor.date}${asOf}`;
|
|
1319
|
-
}
|
|
1320
|
-
return `Backward-anchored from end-date ${anchor.date}${asOf} \u2014 upstream activities still need estimates`;
|
|
1321
|
-
}
|
|
1322
|
-
function bulletizeCaption(rows) {
|
|
1323
|
-
return rows.map((row) => {
|
|
1324
|
-
const out = { text: row.text, level: row.level };
|
|
1325
|
-
if (row.italic) out.italic = true;
|
|
1326
|
-
if (row.isPast) out.isPast = true;
|
|
1327
|
-
return out;
|
|
1328
|
-
});
|
|
1329
|
-
}
|
|
1330
|
-
var SUB_BULLET_INDENT = 20;
|
|
1331
1208
|
var CAPTION_HEADER_BAND_HEIGHT = CAPTION_LINE_HEIGHT + 8;
|
|
1332
|
-
function captionNaturalWidth(bullets) {
|
|
1333
|
-
const charW = CAPTION_FONT_SIZE * 0.55;
|
|
1334
|
-
let max = "Summary".length * charW;
|
|
1335
|
-
for (const b of bullets) {
|
|
1336
|
-
const indent = b.level === 1 ? SUB_BULLET_INDENT : 0;
|
|
1337
|
-
const w = indent + `\u2022 ${b.text}`.length * charW;
|
|
1338
|
-
if (w > max) max = w;
|
|
1339
|
-
}
|
|
1340
|
-
return Math.ceil(max + 2 * CAPTION_BOX_PADDING_X);
|
|
1341
|
-
}
|
|
1342
1209
|
var TORNADO_TOP_N = 10;
|
|
1343
1210
|
var TORNADO_ROW_HEIGHT = 26;
|
|
1344
1211
|
var TORNADO_NAME_COL_W = 160;
|
|
1345
1212
|
var TORNADO_BAR_FONT_SIZE = 13;
|
|
1346
1213
|
var TORNADO_BAR_HEIGHT = 16;
|
|
1347
|
-
var
|
|
1348
|
-
var SUMMARY_MAX_W = 420;
|
|
1214
|
+
var FIELD_LEGEND_COL1_W = 420;
|
|
1349
1215
|
var ANALYSIS_GAP = 16;
|
|
1350
|
-
var COL1_VSTACK_GAP = 8;
|
|
1351
1216
|
var TORNADO_MIN_W = 340;
|
|
1352
1217
|
var SCURVE_MIN_W = 320;
|
|
1353
1218
|
var SCURVE_BOX_HEIGHT = 220;
|
|
@@ -1356,27 +1221,6 @@ var SCURVE_PLOT_PADDING_RIGHT = 16;
|
|
|
1356
1221
|
var SCURVE_PLOT_PADDING_BOTTOM = 44;
|
|
1357
1222
|
var SCURVE_TICK_FONT_SIZE = 13;
|
|
1358
1223
|
var SCURVE_PERCENTILE_RADIUS = 4;
|
|
1359
|
-
function renderCaptionBlock(svg, bullets, args) {
|
|
1360
|
-
const { x, y, width, height, palette, isDark } = args;
|
|
1361
|
-
const { fill, stroke: chromeStroke } = analysisBlockChrome(palette, isDark);
|
|
1362
|
-
const labelColor = contrastText(
|
|
1363
|
-
fill,
|
|
1364
|
-
palette.textOnFillLight,
|
|
1365
|
-
palette.textOnFillDark
|
|
1366
|
-
);
|
|
1367
|
-
const block = svg.append("g").attr("class", "pert-caption-block").attr("data-pert-caption", "");
|
|
1368
|
-
block.append("rect").attr("class", "pert-caption-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
|
|
1369
|
-
block.append("text").attr("class", "pert-caption-header").attr("x", x + width / 2).attr("y", y + CAPTION_BOX_PADDING_Y + CAPTION_FONT_SIZE).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "700").text("Summary");
|
|
1370
|
-
const textX = x + CAPTION_BOX_PADDING_X;
|
|
1371
|
-
const firstBaselineY = y + CAPTION_BOX_PADDING_Y + CAPTION_HEADER_BAND_HEIGHT + CAPTION_FONT_SIZE;
|
|
1372
|
-
const text = block.append("text").attr("class", "pert-caption").attr("x", textX).attr("y", firstBaselineY).attr("text-anchor", "start").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", CAPTION_FONT_WEIGHT);
|
|
1373
|
-
bullets.forEach((bullet, i) => {
|
|
1374
|
-
const indent = bullet.level === 1 ? SUB_BULLET_INDENT : 0;
|
|
1375
|
-
const tspan = text.append("tspan").attr("x", textX + indent).text(`\u2022 ${bullet.text}`);
|
|
1376
|
-
if (bullet.italic) tspan.attr("font-style", "italic");
|
|
1377
|
-
if (i > 0) tspan.attr("dy", CAPTION_LINE_HEIGHT);
|
|
1378
|
-
});
|
|
1379
|
-
}
|
|
1380
1224
|
function renderTagLegendRow(svg, resolved, palette, isDark, args) {
|
|
1381
1225
|
if (resolved.tagGroups.length === 0) return;
|
|
1382
1226
|
const { x, y, width, activeGroup, exportMode, inline } = args;
|
|
@@ -1630,24 +1474,22 @@ function buildScurveData(resolved) {
|
|
|
1630
1474
|
samples,
|
|
1631
1475
|
p16Days: bandLeft,
|
|
1632
1476
|
p84Days: bandRight,
|
|
1633
|
-
// Percentile dots/date-labels — `projectRounded`
|
|
1634
|
-
//
|
|
1635
|
-
//
|
|
1636
|
-
// "P{X} latest-safe start: <date>" row.
|
|
1477
|
+
// Percentile dots/date-labels — `projectRounded` ceils the
|
|
1478
|
+
// duration, so each dot's date label is the conservative reading
|
|
1479
|
+
// of its trial rather than a rounded-down one.
|
|
1637
1480
|
p50Days: projectRounded(mc.p50),
|
|
1638
1481
|
p80Days: projectRounded(mc.p80),
|
|
1639
1482
|
p95Days: projectRounded(mc.p95),
|
|
1640
1483
|
xMinDays,
|
|
1641
1484
|
xMaxDays,
|
|
1642
1485
|
referenceLines,
|
|
1643
|
-
framingNote: anchorAnnotationText(resolved),
|
|
1644
1486
|
anchorDate: resolved.projectStart,
|
|
1645
1487
|
deadlineDays,
|
|
1646
1488
|
deadlineDate
|
|
1647
1489
|
};
|
|
1648
1490
|
}
|
|
1649
1491
|
function renderScurveBlock(svg, data, args) {
|
|
1650
|
-
const { x, y, width, height, palette, isDark, unit
|
|
1492
|
+
const { x, y, width, height, palette, isDark, unit } = args;
|
|
1651
1493
|
const { fill, stroke: chromeStroke } = analysisBlockChrome(palette, isDark);
|
|
1652
1494
|
const labelColor = contrastText(
|
|
1653
1495
|
fill,
|
|
@@ -1656,16 +1498,11 @@ function renderScurveBlock(svg, data, args) {
|
|
|
1656
1498
|
);
|
|
1657
1499
|
const block = svg.append("g").attr("class", "pert-scurve-block").attr("data-pert-scurve", "");
|
|
1658
1500
|
block.append("rect").attr("class", "pert-scurve-rect").attr("x", x).attr("y", y).attr("width", width).attr("height", height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", fill).attr("stroke", chromeStroke).attr("stroke-width", NODE_STROKE_WIDTH);
|
|
1659
|
-
const hasTitle = typeof title === "string" && title.length > 0;
|
|
1660
|
-
if (hasTitle) {
|
|
1661
|
-
const titleText = title.replace(/\.$/, "");
|
|
1662
|
-
block.append("text").attr("class", "pert-scurve-header").attr("x", x + width / 2).attr("y", y + CAPTION_BOX_PADDING_Y + CAPTION_FONT_SIZE).attr("text-anchor", "middle").attr("fill", labelColor).attr("font-size", CAPTION_FONT_SIZE).attr("font-weight", "700").text(titleText);
|
|
1663
|
-
}
|
|
1664
1501
|
const SCURVE_DEADLINE_LABEL_HEIGHT = 16;
|
|
1665
1502
|
const hasDeadline = data.deadlineDays !== null;
|
|
1666
1503
|
const plotLeft = x + SCURVE_PLOT_PADDING_X;
|
|
1667
1504
|
const plotRight = x + width - SCURVE_PLOT_PADDING_RIGHT;
|
|
1668
|
-
const plotTop = y + CAPTION_BOX_PADDING_Y + (
|
|
1505
|
+
const plotTop = y + CAPTION_BOX_PADDING_Y + (hasDeadline ? SCURVE_DEADLINE_LABEL_HEIGHT : 0);
|
|
1669
1506
|
const isAnchored = data.anchorDate !== null;
|
|
1670
1507
|
const plotBottom = y + height - SCURVE_PLOT_PADDING_BOTTOM;
|
|
1671
1508
|
const plotW = plotRight - plotLeft;
|
|
@@ -1871,4 +1708,4 @@ export {
|
|
|
1871
1708
|
measurePertAnalysisBlock,
|
|
1872
1709
|
renderPertAnalysisBlock
|
|
1873
1710
|
};
|
|
1874
|
-
//# sourceMappingURL=chunk-
|
|
1711
|
+
//# sourceMappingURL=chunk-32MOGTKT.js.map
|
|
@@ -9,13 +9,13 @@ import {
|
|
|
9
9
|
tagAttrKey,
|
|
10
10
|
validateTagGroupNames,
|
|
11
11
|
validateTagValues
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-76LHNLGX.js";
|
|
13
13
|
import {
|
|
14
14
|
extractColor,
|
|
15
15
|
fillModeFromToken,
|
|
16
16
|
measureIndent,
|
|
17
17
|
parseFirstLine
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-M5OOAP65.js";
|
|
19
19
|
import {
|
|
20
20
|
formatDgmoError,
|
|
21
21
|
makeDgmoError,
|
|
@@ -342,4 +342,4 @@ function parseBlockTail(tail, aliasMap) {
|
|
|
342
342
|
export {
|
|
343
343
|
parseBlock
|
|
344
344
|
};
|
|
345
|
-
//# sourceMappingURL=chunk-
|
|
345
|
+
//# sourceMappingURL=chunk-3H4PDNP4.js.map
|
|
@@ -16,18 +16,18 @@ import {
|
|
|
16
16
|
} from "./chunk-FJ57274M.js";
|
|
17
17
|
import {
|
|
18
18
|
formatDateLabel
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-YVDBBWEP.js";
|
|
20
20
|
import {
|
|
21
21
|
layoutInlineHeader
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MG3DE3VO.js";
|
|
23
23
|
import {
|
|
24
24
|
TITLE_FONT_SIZE,
|
|
25
25
|
TITLE_FONT_WEIGHT,
|
|
26
26
|
TITLE_Y
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-DEW62ON3.js";
|
|
28
28
|
import {
|
|
29
29
|
renderIntegratedLegend
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-QT5UMFPE.js";
|
|
31
31
|
import {
|
|
32
32
|
getLegendExtent
|
|
33
33
|
} from "./chunk-4SXHMFFP.js";
|
|
@@ -40,11 +40,11 @@ import {
|
|
|
40
40
|
} from "./chunk-MTGGOCND.js";
|
|
41
41
|
import {
|
|
42
42
|
parseTimelineDate
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-UCZBRGJN.js";
|
|
44
44
|
import {
|
|
45
45
|
resolveActiveTagGroup,
|
|
46
46
|
resolveTagColor
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-76LHNLGX.js";
|
|
48
48
|
import {
|
|
49
49
|
contrastText,
|
|
50
50
|
getSeriesColors,
|
|
@@ -1161,4 +1161,4 @@ export {
|
|
|
1161
1161
|
focusEventLine,
|
|
1162
1162
|
renderEventLineForExport
|
|
1163
1163
|
};
|
|
1164
|
-
//# sourceMappingURL=chunk-
|
|
1164
|
+
//# sourceMappingURL=chunk-3LJNQ6LR.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
stripDefaultModifier,
|
|
10
10
|
tagAttrKey,
|
|
11
11
|
validateTagGroupNames
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-76LHNLGX.js";
|
|
13
13
|
import {
|
|
14
14
|
AliasRegistry,
|
|
15
15
|
KANBAN_REGISTRY,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
splitNameAndMeta,
|
|
23
23
|
warnUnknownMetaKeys,
|
|
24
24
|
withTagAliases
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-M5OOAP65.js";
|
|
26
26
|
import {
|
|
27
27
|
resolveColorWithDiagnostic
|
|
28
28
|
} from "./chunk-XOGQY4EC.js";
|
|
@@ -400,4 +400,4 @@ function parseCardLine(trimmed, lineNumber, counter, metaAliasMap, _palette, dia
|
|
|
400
400
|
export {
|
|
401
401
|
parseKanban
|
|
402
402
|
};
|
|
403
|
-
//# sourceMappingURL=chunk-
|
|
403
|
+
//# sourceMappingURL=chunk-3SP6G4LN.js.map
|