@diagrammo/dgmo 0.46.0 → 0.47.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.cts +3 -855
- package/dist/advanced.d.ts +3 -855
- package/dist/advanced.js +541 -70107
- package/dist/analyzer-UYKBXAKR.js +15 -0
- package/dist/auto.cjs +1 -1
- package/dist/auto.js +1 -1
- package/dist/auto.mjs +1 -1
- package/dist/block.js +83 -69417
- package/dist/calculator-LDYQCDDY.js +11 -0
- package/dist/charts-d3-QOZHKTCT.js +25 -0
- package/dist/chunk-2DXMZRWJ.js +800 -0
- package/dist/chunk-2LACINWN.js +786 -0
- package/dist/chunk-33LCUH4H.js +893 -0
- package/dist/chunk-3CIOJ5YJ.js +35 -0
- package/dist/chunk-3HDBAXF5.js +86 -0
- package/dist/chunk-3JLKYGBQ.js +290 -0
- package/dist/chunk-3MQQNXPD.js +415 -0
- package/dist/chunk-3R5POCTZ.js +967 -0
- package/dist/chunk-3SMGIJDD.js +112 -0
- package/dist/chunk-44CM72SQ.js +409 -0
- package/dist/chunk-4GRI7MEB.js +1604 -0
- package/dist/chunk-4OHACBGX.js +606 -0
- package/dist/chunk-5DH3KYFH.js +21 -0
- package/dist/chunk-5MLYVTYM.js +76 -0
- package/dist/chunk-5QXL4NYS.js +553 -0
- package/dist/chunk-5WRI5ZAA.js +31 -0
- package/dist/chunk-6EK55ART.js +117 -0
- package/dist/chunk-6FZYCKXB.js +2065 -0
- package/dist/chunk-6HO5ZTXK.js +277 -0
- package/dist/chunk-6KFWC4CO.js +7 -0
- package/dist/chunk-6MTWIQVO.js +121 -0
- package/dist/chunk-6NYWYNBI.js +329 -0
- package/dist/chunk-6SM5NJQH.js +620 -0
- package/dist/chunk-725LDASD.js +422 -0
- package/dist/chunk-76OWZ3BA.js +130 -0
- package/dist/chunk-7JEGTRLD.js +338 -0
- package/dist/chunk-A44USUV7.js +923 -0
- package/dist/chunk-A4GOY3PE.js +25 -0
- package/dist/chunk-A4VFQH5G.js +251 -0
- package/dist/chunk-AELOBFW5.js +375 -0
- package/dist/chunk-AN2MOO5T.js +522 -0
- package/dist/chunk-BMR4CIEO.js +41 -0
- package/dist/chunk-BS7SV7C3.js +51 -0
- package/dist/chunk-BUPDIHML.js +613 -0
- package/dist/chunk-BUVJFRPY.js +887 -0
- package/dist/chunk-C3Z4DX3V.js +112 -0
- package/dist/chunk-CI2G3OEB.js +1818 -0
- package/dist/chunk-CKNVO24D.js +54 -0
- package/dist/chunk-CUVHQHZ7.js +391 -0
- package/dist/chunk-CXK4DZH3.js +114 -0
- package/dist/chunk-DKEPS5LH.js +315 -0
- package/dist/chunk-DU7W62N5.js +487 -0
- package/dist/chunk-DZAQBW35.js +751 -0
- package/dist/chunk-EB6FPQUP.js +316 -0
- package/dist/chunk-EMS2SK26.js +376 -0
- package/dist/chunk-ERLBPDGU.js +510 -0
- package/dist/chunk-EVCVDTXE.js +732 -0
- package/dist/chunk-FCIIHT24.js +384 -0
- package/dist/chunk-FFUN5D66.js +97 -0
- package/dist/chunk-FITOLXSX.js +714 -0
- package/dist/chunk-FMDSF3OV.js +68 -0
- package/dist/chunk-FNB3PNGF.js +410 -0
- package/dist/chunk-G2H74XJZ.js +2104 -0
- package/dist/chunk-GMR5MFHJ.js +339 -0
- package/dist/chunk-H6PI3KJT.js +305 -0
- package/dist/chunk-I46X5VUA.js +59 -0
- package/dist/chunk-I5IGB56C.js +255 -0
- package/dist/chunk-IH6ZMVQ5.js +3950 -0
- package/dist/chunk-IJZFN3HM.js +463 -0
- package/dist/chunk-IPWPWM6R.js +3079 -0
- package/dist/chunk-IYULMRBE.js +23 -0
- package/dist/chunk-IZMRON6C.js +167 -0
- package/dist/chunk-J5FIXQRT.js +813 -0
- package/dist/chunk-JED6ZDEE.js +73 -0
- package/dist/chunk-JEUJOX5X.js +136 -0
- package/dist/chunk-JM4LEPY3.js +436 -0
- package/dist/chunk-L3UHP6TD.js +101 -0
- package/dist/chunk-L66GEFB6.js +524 -0
- package/dist/chunk-LIOHW36Z.js +469 -0
- package/dist/chunk-LP7EC4MI.js +16 -0
- package/dist/chunk-MITI6NOL.js +548 -0
- package/dist/chunk-MO5YHHMQ.js +168 -0
- package/dist/chunk-MZSBFAPJ.js +885 -0
- package/dist/chunk-NNAAJVBU.js +9 -0
- package/dist/chunk-NOTA6TEI.js +47 -0
- package/dist/chunk-NURGB5Z4.js +335 -0
- package/dist/chunk-NX4EQS3U.js +1062 -0
- package/dist/chunk-NXMESY4J.js +1 -0
- package/dist/chunk-OJR3MQYV.js +1458 -0
- package/dist/chunk-OURHMODR.js +454 -0
- package/dist/chunk-P235SVAH.js +1057 -0
- package/dist/chunk-P4RH4OSP.js +1038 -0
- package/dist/chunk-P6T66CCZ.js +226 -0
- package/dist/chunk-PBAHEPLQ.js +223 -0
- package/dist/chunk-PBHE5UG6.js +1530 -0
- package/dist/chunk-PDKUANDZ.js +35 -0
- package/dist/chunk-PWIHZ6NJ.js +296 -0
- package/dist/chunk-QEBUY5NY.js +1685 -0
- package/dist/chunk-QLCCJEJI.js +253 -0
- package/dist/chunk-QOOUC2J5.js +52 -0
- package/dist/chunk-QYTPPDAO.js +402 -0
- package/dist/chunk-R3XI2VC7.js +801 -0
- package/dist/chunk-RCERWOJR.js +154 -0
- package/dist/chunk-RJE5JTVK.js +362 -0
- package/dist/chunk-RTLBSQ3G.js +1155 -0
- package/dist/chunk-RUNNI6VE.js +448 -0
- package/dist/chunk-RVMRZAPB.js +354 -0
- package/dist/chunk-RYEGFMUO.js +955 -0
- package/dist/chunk-RZCF2VVM.js +528 -0
- package/dist/chunk-SML67VPV.js +1025 -0
- package/dist/chunk-SQ7IY53Q.js +44 -0
- package/dist/chunk-SQAG3UXH.js +161 -0
- package/dist/chunk-SRTU6HMQ.js +1851 -0
- package/dist/chunk-T2OE3YQB.js +550 -0
- package/dist/chunk-T3UBLACL.js +299 -0
- package/dist/chunk-TLVIHFRO.js +296 -0
- package/dist/chunk-TYS6CSS5.js +52 -0
- package/dist/chunk-U6EQI3U6.js +130 -0
- package/dist/chunk-UJ4FJLBF.js +86 -0
- package/dist/chunk-ULOEATBZ.js +347 -0
- package/dist/chunk-UNCCZ3NU.js +127 -0
- package/dist/chunk-USZW2HHU.js +197 -0
- package/dist/chunk-UWN33VNX.js +1610 -0
- package/dist/chunk-UZ7EZW3B.js +40 -0
- package/dist/chunk-VOKGH627.js +37 -0
- package/dist/chunk-WBRZJOEC.js +204 -0
- package/dist/chunk-WCSOJFU3.js +380 -0
- package/dist/chunk-WCT3NYCV.js +160 -0
- package/dist/chunk-WVAJFAIA.js +529 -0
- package/dist/chunk-X5LCYCL5.js +394 -0
- package/dist/chunk-XAKEUMEJ.js +1256 -0
- package/dist/chunk-Y2ZE3MSG.js +590 -0
- package/dist/chunk-Y3J7VR52.js +646 -0
- package/dist/chunk-Y5QGVTVC.js +33 -0
- package/dist/chunk-YAA6IID3.js +548 -0
- package/dist/chunk-YGJTDXVR.js +692 -0
- package/dist/chunk-YRYKTYMQ.js +186 -0
- package/dist/chunk-YYVTBZZC.js +61 -0
- package/dist/chunk-Z5CGSFJB.js +647 -0
- package/dist/chunk-Z72XRXD4.js +787 -0
- package/dist/chunk-ZGR7ULFJ.js +978 -0
- package/dist/chunk-ZJEL4H2R.js +851 -0
- package/dist/chunk-ZO27FGJS.js +554 -0
- package/dist/collapse-CLPJD2RL.js +11 -0
- package/dist/collapse-SLINJQW6.js +9 -0
- package/dist/collapse-ZWUFFCK2.js +9 -0
- package/dist/compute-G55RG53N.js +8 -0
- package/dist/dgmo-router-DZCIDUO5.js +73 -0
- package/dist/dimensions-J3FHIMJ6.js +22 -0
- package/dist/element.cjs +1 -1
- package/dist/element.js +1 -1
- package/dist/element.mjs +1 -1
- package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
- package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +3 -469
- package/dist/index.d.ts +3 -469
- package/dist/index.js +137 -69685
- package/dist/layout-46N4JJYK.js +17 -0
- package/dist/layout-5RA6QWR6.js +26 -0
- package/dist/layout-5T6RH5M6.js +14 -0
- package/dist/layout-7QXCNOVS.js +13 -0
- package/dist/layout-EE6GE46Y.js +17 -0
- package/dist/layout-G23F7LDH.js +9 -0
- package/dist/layout-HRBZPFCN.js +23 -0
- package/dist/layout-HWDSRX5E.js +20 -0
- package/dist/layout-HYZPWAK5.js +18 -0
- package/dist/layout-N76NR4ZO.js +19 -0
- package/dist/layout-OB3RI63S.js +14 -0
- package/dist/layout-S2QBYSK2.js +15 -0
- package/dist/layout-UM5F4DJB.js +15 -0
- package/dist/layout-search-OYV77HHS.js +1655 -0
- package/dist/load-data-EHDDZ5ZS.js +8 -0
- package/dist/palettes-PRJ2RI6D.js +56 -0
- package/dist/parser-2MFP2H2E.js +11 -0
- package/dist/parser-3STE62GB.js +21 -0
- package/dist/parser-4FL2CMDG.js +18 -0
- package/dist/parser-4OGOBJJ4.js +13 -0
- package/dist/parser-6BTRLKRZ.js +15 -0
- package/dist/parser-AQETEVRW.js +21 -0
- package/dist/parser-CFZD5IBL.js +12 -0
- package/dist/parser-FUSKFGZN.js +16 -0
- package/dist/parser-I6KXEYFK.js +13 -0
- package/dist/parser-IXSZZQHY.js +18 -0
- package/dist/parser-JAL2HD4I.js +13 -0
- package/dist/parser-KNSQSKQO.js +20 -0
- package/dist/parser-N5O4IHUN.js +13 -0
- package/dist/parser-NGU3ETO6.js +16 -0
- package/dist/parser-NRAI6O25.js +19 -0
- package/dist/parser-O5J4VBII.js +11 -0
- package/dist/parser-OV7NOBW6.js +21 -0
- package/dist/parser-PQ3POX45.js +23 -0
- package/dist/parser-TFZFBVWN.js +11 -0
- package/dist/parser-TRTHDFPP.js +18 -0
- package/dist/parser-VQP2UJ6W.js +11 -0
- package/dist/parser-XDVELHRK.js +13 -0
- package/dist/parser-XKRP7QKP.js +11 -0
- package/dist/parser-Y6WTBU76.js +14 -0
- package/dist/parser-ZSDPZYQP.js +12 -0
- package/dist/renderer-2XQQQ6QR.js +28 -0
- package/dist/renderer-5NDVNDAZ.js +26 -0
- package/dist/renderer-6EEZHMH4.js +26 -0
- package/dist/renderer-6W5462RB.js +43 -0
- package/dist/renderer-7MVLWWQD.js +22 -0
- package/dist/renderer-AWWAF6XD.js +33 -0
- package/dist/renderer-BYCNMBF7.js +34 -0
- package/dist/renderer-CLJHQPBJ.js +29 -0
- package/dist/renderer-GHPZMFU2.js +15 -0
- package/dist/renderer-JGBKUCZD.js +16 -0
- package/dist/renderer-KQB7UGDS.js +19 -0
- package/dist/renderer-PGX2TKVS.js +24 -0
- package/dist/renderer-QIWVHWZO.js +15 -0
- package/dist/renderer-RPOA5YPZ.js +35 -0
- package/dist/renderer-SMIBCRVB.js +24 -0
- package/dist/renderer-T7YKC5VP.js +28 -0
- package/dist/renderer-TOCOVLHS.js +37 -0
- package/dist/renderer-UWA5XS74.js +39 -0
- package/dist/renderer-VACVQYML.js +25 -0
- package/dist/renderer-W4M6QLIJ.js +37 -0
- package/dist/renderer-WZRREQ2P.js +23 -0
- package/dist/renderer-YY2OSF6E.js +27 -0
- package/dist/renderer-Z7I3W2PP.js +24 -0
- package/dist/renderer-ZGNTUWC4.js +22 -0
- package/dist/renderer-ZTR3DER3.js +19 -0
- package/dist/renderer-radial-C32GPJQ7.js +21 -0
- package/dist/resolver-NOAA7ID7.js +13 -0
- package/dist/state-collapse-HCGD6IVJ.js +8 -0
- package/dist/state-parser-Z2V23ATR.js +18 -0
- package/dist/state-renderer-RFYHSP4K.js +34 -0
- package/dist/themes-1-CuKpeH.d.cts +908 -0
- package/dist/themes-1-CuKpeH.d.ts +908 -0
- package/package.json +1 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/utils/visual-conventions.ts
|
|
2
|
+
var NODE_STROKE_WIDTH = 1.5;
|
|
3
|
+
var EDGE_STROKE_WIDTH = 1.5;
|
|
4
|
+
var CARD_RADIUS = 6;
|
|
5
|
+
var CONTAINER_RADIUS = 8;
|
|
6
|
+
var COLLAPSE_BAR_INSET = 0;
|
|
7
|
+
var HEADER_HEIGHT = 28;
|
|
8
|
+
var LABEL_FONT_SIZE = 13;
|
|
9
|
+
var META_FONT_SIZE = 11;
|
|
10
|
+
var META_LINE_HEIGHT = 16;
|
|
11
|
+
var SEPARATOR_GAP = 6;
|
|
12
|
+
var COLLAPSE_BAR_HEIGHT = 6;
|
|
13
|
+
var CONTAINER_HEADER_HEIGHT = 28;
|
|
14
|
+
var CONTAINER_LABEL_FONT_SIZE = 13;
|
|
15
|
+
var CONTAINER_META_FONT_SIZE = 11;
|
|
16
|
+
var CONTAINER_META_LINE_HEIGHT = 16;
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
NODE_STROKE_WIDTH,
|
|
20
|
+
EDGE_STROKE_WIDTH,
|
|
21
|
+
CARD_RADIUS,
|
|
22
|
+
CONTAINER_RADIUS,
|
|
23
|
+
COLLAPSE_BAR_INSET,
|
|
24
|
+
HEADER_HEIGHT,
|
|
25
|
+
LABEL_FONT_SIZE,
|
|
26
|
+
META_FONT_SIZE,
|
|
27
|
+
META_LINE_HEIGHT,
|
|
28
|
+
SEPARATOR_GAP,
|
|
29
|
+
COLLAPSE_BAR_HEIGHT,
|
|
30
|
+
CONTAINER_HEADER_HEIGHT,
|
|
31
|
+
CONTAINER_LABEL_FONT_SIZE,
|
|
32
|
+
CONTAINER_META_FONT_SIZE,
|
|
33
|
+
CONTAINER_META_LINE_HEIGHT
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-3CIOJ5YJ.js.map
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// src/utils/safe-href.ts
|
|
2
|
+
var ALLOWED_SCHEMES = ["http", "https", "mailto"];
|
|
3
|
+
var SCHEME_RE = /^([a-z][a-z0-9+.-]*):/i;
|
|
4
|
+
var LEADING_TRIM_RE = /^[\x00-\x20]+/;
|
|
5
|
+
function safeHref(url) {
|
|
6
|
+
if (typeof url !== "string") return null;
|
|
7
|
+
const trimmed = url.replace(LEADING_TRIM_RE, "");
|
|
8
|
+
if (trimmed.length === 0) return null;
|
|
9
|
+
const match = SCHEME_RE.exec(trimmed);
|
|
10
|
+
if (!match) {
|
|
11
|
+
return url;
|
|
12
|
+
}
|
|
13
|
+
const scheme = match[1].toLowerCase();
|
|
14
|
+
if (ALLOWED_SCHEMES.includes(scheme)) {
|
|
15
|
+
return url;
|
|
16
|
+
}
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/utils/inline-markdown.ts
|
|
21
|
+
function parseInlineMarkdown(text) {
|
|
22
|
+
const spans = [];
|
|
23
|
+
const regex = /\*\*(.+?)\*\*|__(.+?)__|\*(.+?)\*|_(.+?)_|`(.+?)`|\[(.+?)\]\((.+?)\)|(https?:\/\/[^\s)>\]]+|www\.[^\s)>\]]+)|([^*_`[]+?(?=https?:\/\/|www\.|$)|[^*_`[]+)/g;
|
|
24
|
+
let match;
|
|
25
|
+
while ((match = regex.exec(text)) !== null) {
|
|
26
|
+
if (match[1])
|
|
27
|
+
spans.push({ text: match[1], bold: true });
|
|
28
|
+
else if (match[2])
|
|
29
|
+
spans.push({ text: match[2], bold: true });
|
|
30
|
+
else if (match[3])
|
|
31
|
+
spans.push({ text: match[3], italic: true });
|
|
32
|
+
else if (match[4])
|
|
33
|
+
spans.push({ text: match[4], italic: true });
|
|
34
|
+
else if (match[5])
|
|
35
|
+
spans.push({ text: match[5], code: true });
|
|
36
|
+
else if (match[6])
|
|
37
|
+
spans.push({
|
|
38
|
+
text: match[6],
|
|
39
|
+
...match[7] !== void 0 && { href: match[7] }
|
|
40
|
+
});
|
|
41
|
+
else if (match[8]) {
|
|
42
|
+
const url = match[8];
|
|
43
|
+
const href = url.startsWith("www.") ? `https://${url}` : url;
|
|
44
|
+
spans.push({ text: url, href });
|
|
45
|
+
} else if (match[9]) spans.push({ text: match[9] });
|
|
46
|
+
}
|
|
47
|
+
return spans;
|
|
48
|
+
}
|
|
49
|
+
var BARE_URL_MAX_DISPLAY = 35;
|
|
50
|
+
function truncateBareUrl(url) {
|
|
51
|
+
const stripped = url.replace(/^https?:\/\//, "").replace(/^www\./, "");
|
|
52
|
+
if (stripped.length <= BARE_URL_MAX_DISPLAY) return stripped;
|
|
53
|
+
return stripped.slice(0, BARE_URL_MAX_DISPLAY - 1) + "\u2026";
|
|
54
|
+
}
|
|
55
|
+
function renderInlineText(textEl, text, palette, fontSize) {
|
|
56
|
+
const spans = parseInlineMarkdown(text);
|
|
57
|
+
for (const span of spans) {
|
|
58
|
+
if (span.href) {
|
|
59
|
+
const isBareUrl = span.text === span.href || `https://${span.text}` === span.href;
|
|
60
|
+
const display = isBareUrl ? truncateBareUrl(span.text) : span.text;
|
|
61
|
+
const safe = safeHref(span.href);
|
|
62
|
+
if (safe !== null) {
|
|
63
|
+
const a = textEl.append("a").attr("href", safe);
|
|
64
|
+
a.append("tspan").text(display).attr("fill", palette.primary).style("text-decoration", "underline");
|
|
65
|
+
} else {
|
|
66
|
+
textEl.append("tspan").text(display).attr("fill", palette.primary).style("text-decoration", "underline");
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
const tspan = textEl.append("tspan").text(span.text);
|
|
70
|
+
if (span.bold) tspan.attr("font-weight", "bold");
|
|
71
|
+
if (span.italic) tspan.attr("font-style", "italic");
|
|
72
|
+
if (span.code) {
|
|
73
|
+
tspan.attr("font-family", "monospace");
|
|
74
|
+
if (fontSize) tspan.attr("font-size", fontSize - 1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export {
|
|
81
|
+
safeHref,
|
|
82
|
+
parseInlineMarkdown,
|
|
83
|
+
truncateBareUrl,
|
|
84
|
+
renderInlineText
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=chunk-3HDBAXF5.js.map
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import {
|
|
2
|
+
measureText,
|
|
3
|
+
wrapTextToWidth
|
|
4
|
+
} from "./chunk-WCT3NYCV.js";
|
|
5
|
+
import {
|
|
6
|
+
mix,
|
|
7
|
+
shapeFill
|
|
8
|
+
} from "./chunk-P6T66CCZ.js";
|
|
9
|
+
|
|
10
|
+
// src/journey-map/layout.ts
|
|
11
|
+
var PADDING = 24;
|
|
12
|
+
var TITLE_HEIGHT = 36;
|
|
13
|
+
var PERSONA_HEIGHT = 48;
|
|
14
|
+
var PERSONA_PANEL_WIDTH = 280;
|
|
15
|
+
var HEADER_GAP = 24;
|
|
16
|
+
var CURVE_AREA_HEIGHT = 260;
|
|
17
|
+
var CARD_GAP = 8;
|
|
18
|
+
var STEP_CARD_WIDTH = 190;
|
|
19
|
+
var CARD_HEADER_HEIGHT = 24;
|
|
20
|
+
var CARD_META_LINE_HEIGHT = 14;
|
|
21
|
+
var PHASE_HEADER_HEIGHT = 36;
|
|
22
|
+
var CARD_PADDING_X = 10;
|
|
23
|
+
var CARD_PADDING_Y = 6;
|
|
24
|
+
var ANNO_ICON_SIZE = 10;
|
|
25
|
+
var ANNO_ICON_GAP = 4;
|
|
26
|
+
var TAG_STRIP_HEIGHT = 18;
|
|
27
|
+
var PHASE_GAP = 16;
|
|
28
|
+
var COLUMN_PADDING = 12;
|
|
29
|
+
var FACE_ICON_SIZE = 20;
|
|
30
|
+
var EMOTION_CAPTION_BAND = 18;
|
|
31
|
+
function scoreToColor(score, palette) {
|
|
32
|
+
const s = Math.max(1, Math.min(5, score));
|
|
33
|
+
const { red, yellow, green } = palette.colors;
|
|
34
|
+
return s <= 3 ? mix(yellow, red, (s - 1) / 2 * 100) : mix(green, yellow, (s - 3) / 2 * 100);
|
|
35
|
+
}
|
|
36
|
+
var CURVE_TOP_RESERVE = 20;
|
|
37
|
+
function scoreToCurveY(score, curveAreaBottom) {
|
|
38
|
+
return curveAreaBottom - (score - 1) / 4 * (CURVE_AREA_HEIGHT - CURVE_TOP_RESERVE) - 10;
|
|
39
|
+
}
|
|
40
|
+
function layoutJourneyMap(parsed, palette, options) {
|
|
41
|
+
const isDark = options?.isDark ?? false;
|
|
42
|
+
const hasTitle = !!parsed.title && parsed.options["no-title"] !== "on";
|
|
43
|
+
const hasPersona = !!parsed.persona;
|
|
44
|
+
const hasPhases = parsed.phases.length > 0;
|
|
45
|
+
const titleHeight = hasTitle ? TITLE_HEIGHT : 0;
|
|
46
|
+
const personaHeight = hasPersona ? PERSONA_HEIGHT : 0;
|
|
47
|
+
const allStepsForThoughts = hasPhases ? parsed.phases.flatMap((p) => p.steps) : parsed.steps;
|
|
48
|
+
const hasThoughts = allStepsForThoughts.some(
|
|
49
|
+
(s) => s.annotations.some((a) => a.type === "thought")
|
|
50
|
+
);
|
|
51
|
+
const hasEmotions = allStepsForThoughts.some(
|
|
52
|
+
(s) => s.score !== void 0 && s.emotionLabel !== void 0
|
|
53
|
+
);
|
|
54
|
+
const baseTop = PADDING + titleHeight + personaHeight;
|
|
55
|
+
let topHeadroom = 0;
|
|
56
|
+
if (hasThoughts) {
|
|
57
|
+
const THOUGHT_MAX_W = 200;
|
|
58
|
+
const THOUGHT_FONT = 11;
|
|
59
|
+
const THOUGHT_LINE_H = 14;
|
|
60
|
+
const THOUGHT_PAD_Y = 6;
|
|
61
|
+
const THOUGHT_GAP = 10;
|
|
62
|
+
const FACE_HOVER_R = (14 + 1) * 1.5;
|
|
63
|
+
const PERSONA_DESC_FONT = 10;
|
|
64
|
+
const PERSONA_SILHOUETTE = 60;
|
|
65
|
+
const BUBBLE_MARGIN = 16;
|
|
66
|
+
let maxBubbleH = 0;
|
|
67
|
+
let topThoughtScore = 1;
|
|
68
|
+
for (const s of allStepsForThoughts) {
|
|
69
|
+
const thoughts = s.annotations.filter((a) => a.type === "thought");
|
|
70
|
+
if (thoughts.length === 0) continue;
|
|
71
|
+
const text = thoughts.map((t) => t.text).join(" \u2022 ");
|
|
72
|
+
const lineCount = wrapTextToWidth(
|
|
73
|
+
text,
|
|
74
|
+
THOUGHT_FONT,
|
|
75
|
+
THOUGHT_MAX_W
|
|
76
|
+
).length;
|
|
77
|
+
maxBubbleH = Math.max(
|
|
78
|
+
maxBubbleH,
|
|
79
|
+
lineCount * THOUGHT_LINE_H + THOUGHT_PAD_Y * 2
|
|
80
|
+
);
|
|
81
|
+
if (s.score !== void 0) {
|
|
82
|
+
topThoughtScore = Math.max(topThoughtScore, s.score);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
let personaActualH = personaHeight;
|
|
86
|
+
if (hasPersona && parsed.persona?.description) {
|
|
87
|
+
const textAreaWidth = PERSONA_PANEL_WIDTH - PERSONA_SILHOUETTE - CARD_PADDING_X;
|
|
88
|
+
const descLineCount = wrapTextToWidth(
|
|
89
|
+
parsed.persona.description,
|
|
90
|
+
PERSONA_DESC_FONT,
|
|
91
|
+
textAreaWidth
|
|
92
|
+
).length;
|
|
93
|
+
personaActualH = CARD_HEADER_HEIGHT + descLineCount * 14 + 8;
|
|
94
|
+
}
|
|
95
|
+
const topBandBottom = PADDING + Math.max(titleHeight, personaActualH);
|
|
96
|
+
const faceY0 = scoreToCurveY(topThoughtScore, baseTop + CURVE_AREA_HEIGHT);
|
|
97
|
+
const bubbleTop0 = faceY0 - FACE_HOVER_R - THOUGHT_GAP - maxBubbleH;
|
|
98
|
+
topHeadroom = Math.max(0, topBandBottom + BUBBLE_MARGIN - bubbleTop0);
|
|
99
|
+
}
|
|
100
|
+
const curveAreaTop = baseTop + topHeadroom;
|
|
101
|
+
const curveAreaBottom = curveAreaTop + CURVE_AREA_HEIGHT;
|
|
102
|
+
const cardAreaTop = curveAreaBottom + PADDING + (hasEmotions ? EMOTION_CAPTION_BAND : 0);
|
|
103
|
+
const allSteps = hasPhases ? parsed.phases.flatMap((p) => p.steps) : parsed.steps;
|
|
104
|
+
const annoIconIndent = ANNO_ICON_SIZE + ANNO_ICON_GAP;
|
|
105
|
+
const annoTextW = STEP_CARD_WIDTH - CARD_PADDING_X * 2 - annoIconIndent;
|
|
106
|
+
const descTextWidth = STEP_CARD_WIDTH - CARD_PADDING_X * 2;
|
|
107
|
+
const FONT_SIZE_META = 10;
|
|
108
|
+
const FONT_SIZE_STEP = 12;
|
|
109
|
+
const titleTextWidth = STEP_CARD_WIDTH - CARD_PADDING_X * 2;
|
|
110
|
+
const TITLE_LINE_HEIGHT = 16;
|
|
111
|
+
const stepHeights = allSteps.map((step) => {
|
|
112
|
+
const titleLines = wrapTextToWidth(
|
|
113
|
+
step.title,
|
|
114
|
+
FONT_SIZE_STEP,
|
|
115
|
+
titleTextWidth
|
|
116
|
+
).length;
|
|
117
|
+
let h = CARD_PADDING_Y + titleLines * TITLE_LINE_HEIGHT + CARD_PADDING_Y;
|
|
118
|
+
const cardAnnos = step.annotations;
|
|
119
|
+
let contentLines = 0;
|
|
120
|
+
if (step.description) {
|
|
121
|
+
contentLines += wrapTextToWidth(
|
|
122
|
+
step.description,
|
|
123
|
+
FONT_SIZE_META,
|
|
124
|
+
descTextWidth
|
|
125
|
+
).length;
|
|
126
|
+
}
|
|
127
|
+
for (const anno of cardAnnos) {
|
|
128
|
+
contentLines += wrapTextToWidth(
|
|
129
|
+
anno.text,
|
|
130
|
+
FONT_SIZE_META,
|
|
131
|
+
annoTextW
|
|
132
|
+
).length;
|
|
133
|
+
}
|
|
134
|
+
if (contentLines > 0) {
|
|
135
|
+
h += contentLines * CARD_META_LINE_HEIGHT + 4;
|
|
136
|
+
}
|
|
137
|
+
return h;
|
|
138
|
+
});
|
|
139
|
+
const minCardHeight = CARD_HEADER_HEIGHT + CARD_META_LINE_HEIGHT;
|
|
140
|
+
const maxCardHeight = Math.max(minCardHeight, ...stepHeights);
|
|
141
|
+
const hasTags = allSteps.some((s) => Object.keys(s.tags).length > 0);
|
|
142
|
+
const tagStripOffset = hasTags ? TAG_STRIP_HEIGHT + 6 : 0;
|
|
143
|
+
const phaseLayouts = [];
|
|
144
|
+
const flatStepLayouts = [];
|
|
145
|
+
const curvePoints = [];
|
|
146
|
+
let globalStepIndex = 0;
|
|
147
|
+
const collapsed = options?.collapsedPhases ?? /* @__PURE__ */ new Set();
|
|
148
|
+
if (hasPhases) {
|
|
149
|
+
let phaseX = PADDING;
|
|
150
|
+
for (const phase of parsed.phases) {
|
|
151
|
+
const isCollapsed = collapsed.has(phase.name);
|
|
152
|
+
const stepCount = Math.max(phase.steps.length, 1);
|
|
153
|
+
const phaseWidth = isCollapsed ? STEP_CARD_WIDTH + COLUMN_PADDING * 2 : stepCount * STEP_CARD_WIDTH + (stepCount - 1) * CARD_GAP + COLUMN_PADDING * 2;
|
|
154
|
+
const stepLayouts = [];
|
|
155
|
+
if (!isCollapsed) {
|
|
156
|
+
let stepX = phaseX + COLUMN_PADDING;
|
|
157
|
+
for (let si = 0; si < phase.steps.length; si++) {
|
|
158
|
+
const step = phase.steps[si];
|
|
159
|
+
const color = step.score !== void 0 ? scoreToColor(step.score, palette) : palette.surface;
|
|
160
|
+
const sl = {
|
|
161
|
+
x: stepX,
|
|
162
|
+
y: cardAreaTop + PHASE_HEADER_HEIGHT + CARD_GAP + tagStripOffset,
|
|
163
|
+
width: STEP_CARD_WIDTH,
|
|
164
|
+
height: maxCardHeight,
|
|
165
|
+
step,
|
|
166
|
+
color
|
|
167
|
+
};
|
|
168
|
+
stepLayouts.push(sl);
|
|
169
|
+
if (step.score !== void 0) {
|
|
170
|
+
const curveX = stepX + STEP_CARD_WIDTH / 2;
|
|
171
|
+
const curveY = scoreToCurveY(step.score, curveAreaBottom);
|
|
172
|
+
curvePoints.push({
|
|
173
|
+
x: curveX,
|
|
174
|
+
y: curveY,
|
|
175
|
+
score: step.score,
|
|
176
|
+
...step.emotionLabel !== void 0 && {
|
|
177
|
+
emotionLabel: step.emotionLabel
|
|
178
|
+
},
|
|
179
|
+
stepIndex: globalStepIndex
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
stepX += STEP_CARD_WIDTH + CARD_GAP;
|
|
183
|
+
globalStepIndex++;
|
|
184
|
+
}
|
|
185
|
+
} else {
|
|
186
|
+
const stepCount2 = phase.steps.length;
|
|
187
|
+
const padX = COLUMN_PADDING + FACE_ICON_SIZE;
|
|
188
|
+
const availW = phaseWidth - padX * 2;
|
|
189
|
+
for (let si = 0; si < stepCount2; si++) {
|
|
190
|
+
const step = phase.steps[si];
|
|
191
|
+
if (step.score !== void 0) {
|
|
192
|
+
const curveX = stepCount2 === 1 ? phaseX + phaseWidth / 2 : phaseX + padX + si / (stepCount2 - 1) * availW;
|
|
193
|
+
const curveY = scoreToCurveY(step.score, curveAreaBottom);
|
|
194
|
+
curvePoints.push({
|
|
195
|
+
x: curveX,
|
|
196
|
+
y: curveY,
|
|
197
|
+
score: step.score,
|
|
198
|
+
...step.emotionLabel !== void 0 && {
|
|
199
|
+
emotionLabel: step.emotionLabel
|
|
200
|
+
},
|
|
201
|
+
stepIndex: globalStepIndex
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
globalStepIndex++;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const scoredSteps = phase.steps.filter((s) => s.score !== void 0);
|
|
208
|
+
const avgScore = scoredSteps.length > 0 ? scoredSteps.reduce((sum, s) => sum + s.score, 0) / scoredSteps.length : 3;
|
|
209
|
+
const headerColor = shapeFill(
|
|
210
|
+
palette,
|
|
211
|
+
scoreToColor(avgScore, palette),
|
|
212
|
+
isDark,
|
|
213
|
+
{ solid: parsed.options["solid-fill"] === "on" }
|
|
214
|
+
);
|
|
215
|
+
const COLLAPSED_CARD_H = 26;
|
|
216
|
+
const COLLAPSED_GAP = 6;
|
|
217
|
+
const phaseHeight = isCollapsed ? PHASE_HEADER_HEIGHT + CARD_GAP + phase.steps.length * (COLLAPSED_CARD_H + COLLAPSED_GAP) + CARD_GAP : PHASE_HEADER_HEIGHT + CARD_GAP + tagStripOffset + maxCardHeight + CARD_GAP;
|
|
218
|
+
phaseLayouts.push({
|
|
219
|
+
x: phaseX,
|
|
220
|
+
y: cardAreaTop,
|
|
221
|
+
width: phaseWidth,
|
|
222
|
+
height: phaseHeight,
|
|
223
|
+
phase,
|
|
224
|
+
headerColor,
|
|
225
|
+
stepLayouts
|
|
226
|
+
});
|
|
227
|
+
phaseX += phaseWidth + PHASE_GAP;
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
let stepX = PADDING;
|
|
231
|
+
for (let si = 0; si < parsed.steps.length; si++) {
|
|
232
|
+
const step = parsed.steps[si];
|
|
233
|
+
const color = step.score !== void 0 ? scoreToColor(step.score, palette) : palette.surface;
|
|
234
|
+
flatStepLayouts.push({
|
|
235
|
+
x: stepX,
|
|
236
|
+
y: cardAreaTop + CARD_GAP + tagStripOffset,
|
|
237
|
+
width: STEP_CARD_WIDTH,
|
|
238
|
+
height: maxCardHeight,
|
|
239
|
+
step,
|
|
240
|
+
color
|
|
241
|
+
});
|
|
242
|
+
if (step.score !== void 0) {
|
|
243
|
+
const curveX = stepX + STEP_CARD_WIDTH / 2;
|
|
244
|
+
const curveY = scoreToCurveY(step.score, curveAreaBottom);
|
|
245
|
+
curvePoints.push({
|
|
246
|
+
x: curveX,
|
|
247
|
+
y: curveY,
|
|
248
|
+
score: step.score,
|
|
249
|
+
...step.emotionLabel !== void 0 && {
|
|
250
|
+
emotionLabel: step.emotionLabel
|
|
251
|
+
},
|
|
252
|
+
stepIndex: si
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
stepX += STEP_CARD_WIDTH + CARD_GAP;
|
|
256
|
+
globalStepIndex++;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const rightEdge = hasPhases ? phaseLayouts.length > 0 ? phaseLayouts[phaseLayouts.length - 1].x + phaseLayouts[phaseLayouts.length - 1].width + PADDING : PADDING * 2 : flatStepLayouts.length > 0 ? flatStepLayouts[flatStepLayouts.length - 1].x + STEP_CARD_WIDTH + PADDING : PADDING * 2;
|
|
260
|
+
const bottomEdge = hasPhases ? phaseLayouts.length > 0 ? phaseLayouts[0].y + phaseLayouts[0].height + PADDING + 40 : cardAreaTop + PADDING : cardAreaTop + CARD_GAP + tagStripOffset + maxCardHeight + PADDING + 40;
|
|
261
|
+
const headerTitleWidth = hasTitle ? measureText(parsed.title, 18) : 0;
|
|
262
|
+
const personaPanelWidth = parsed.persona ? PERSONA_PANEL_WIDTH : 0;
|
|
263
|
+
const headerWidth = hasTitle && parsed.persona ? PADDING + headerTitleWidth + HEADER_GAP + personaPanelWidth + PADDING : Math.max(
|
|
264
|
+
PADDING + headerTitleWidth + PADDING,
|
|
265
|
+
PADDING + personaPanelWidth + PADDING
|
|
266
|
+
);
|
|
267
|
+
const totalWidth = Math.max(rightEdge, 400, headerWidth);
|
|
268
|
+
const totalHeight = bottomEdge;
|
|
269
|
+
return {
|
|
270
|
+
phases: phaseLayouts,
|
|
271
|
+
flatStepLayouts,
|
|
272
|
+
curvePoints,
|
|
273
|
+
totalWidth,
|
|
274
|
+
totalHeight,
|
|
275
|
+
curveAreaTop,
|
|
276
|
+
curveAreaBottom,
|
|
277
|
+
cardAreaTop,
|
|
278
|
+
personaHeight,
|
|
279
|
+
titleHeight,
|
|
280
|
+
hasThoughts
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export {
|
|
285
|
+
TAG_STRIP_HEIGHT,
|
|
286
|
+
scoreToColor,
|
|
287
|
+
scoreToCurveY,
|
|
288
|
+
layoutJourneyMap
|
|
289
|
+
};
|
|
290
|
+
//# sourceMappingURL=chunk-3JLKYGBQ.js.map
|