@visactor/vchart-extension 2.1.0-alpha.22 → 2.1.0-alpha.23
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/build/index.js +143 -103
- package/build/index.min.js +1 -1
- package/cjs/charts/axis-3d/index.js +2 -1
- package/cjs/charts/axis-3d/linear-axis.js +1 -2
- package/cjs/charts/bar-3d/chart-spec-transformer.js +1 -1
- package/cjs/charts/bar-3d/chart.js +1 -1
- package/cjs/charts/bar-3d/constant.js +1 -1
- package/cjs/charts/bar-3d/index.js +1 -1
- package/cjs/charts/bar-3d/interface.js +1 -1
- package/cjs/charts/bar-3d/series-spec-transformer.js +1 -1
- package/cjs/charts/bar-3d/series.js +1 -1
- package/cjs/charts/bar-3d/theme.js +1 -1
- package/cjs/charts/candlestick/candlestick-transformer.js +1 -1
- package/cjs/charts/candlestick/candlestick.js +1 -2
- package/cjs/charts/candlestick/index.js +1 -1
- package/cjs/charts/candlestick/interface.js +1 -1
- package/cjs/charts/candlestick/util.js +1 -1
- package/cjs/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
- package/cjs/charts/combination-candlestick/combination-candlestick.js +1 -1
- package/cjs/charts/combination-candlestick/constant.js +1 -1
- package/cjs/charts/combination-candlestick/index.js +1 -1
- package/cjs/charts/combination-candlestick/interface.js +1 -1
- package/cjs/charts/conversion-funnel/arrow-data-transform.js +1 -1
- package/cjs/charts/conversion-funnel/constants.js +1 -1
- package/cjs/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
- package/cjs/charts/conversion-funnel/conversion-funnel.js +1 -1
- package/cjs/charts/conversion-funnel/index.js +1 -1
- package/cjs/charts/conversion-funnel/interface.js +1 -1
- package/cjs/charts/conversion-funnel/util.js +1 -1
- package/cjs/charts/funnel-3d/chart.js +1 -2
- package/cjs/charts/funnel-3d/constant.js +1 -1
- package/cjs/charts/funnel-3d/index.js +1 -1
- package/cjs/charts/funnel-3d/interface.js +1 -1
- package/cjs/charts/funnel-3d/series-spec-transformer.js +1 -1
- package/cjs/charts/funnel-3d/series.js +1 -1
- package/cjs/charts/funnel-3d/theme.js +1 -1
- package/cjs/charts/histogram-3d/chart.js +1 -1
- package/cjs/charts/storyline/layouts/arc.js +61 -17
- package/cjs/charts/storyline/layouts/arc.js.map +1 -1
- package/cjs/charts/storyline/layouts/clock.js +16 -8
- package/cjs/charts/storyline/layouts/clock.js.map +1 -1
- package/cjs/charts/storyline/layouts/common.d.ts +3 -15
- package/cjs/charts/storyline/layouts/common.js +9 -21
- package/cjs/charts/storyline/layouts/common.js.map +1 -1
- package/cjs/charts/storyline/layouts/default.js +14 -8
- package/cjs/charts/storyline/layouts/default.js.map +1 -1
- package/cjs/charts/storyline/layouts/ladder.js +15 -9
- package/cjs/charts/storyline/layouts/ladder.js.map +1 -1
- package/cjs/charts/storyline/layouts/landscape.js +21 -15
- package/cjs/charts/storyline/layouts/landscape.js.map +1 -1
- package/cjs/charts/storyline/layouts/portrait.d.ts +1 -1
- package/cjs/charts/storyline/layouts/portrait.js +21 -16
- package/cjs/charts/storyline/layouts/portrait.js.map +1 -1
- package/cjs/charts/storyline/layouts/wing.js +15 -8
- package/cjs/charts/storyline/layouts/wing.js.map +1 -1
- package/cjs/components/bar-link/bar-link.js +1 -1
- package/cjs/components/bar-link/constant.js +1 -1
- package/cjs/components/bar-link/index.js +1 -1
- package/cjs/components/bar-link/type.js +1 -1
- package/cjs/components/bar-link/util.js +1 -1
- package/cjs/components/bar-regression-line/index.js +1 -1
- package/cjs/components/bar-regression-line/type.js +1 -1
- package/cjs/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
- package/cjs/components/extension-mark-sync-state/index.js +1 -1
- package/cjs/components/extension-mark-sync-state/type.js +1 -1
- package/cjs/components/histogram-regression-line/index.js +1 -1
- package/cjs/components/histogram-regression-line/type.js +2 -1
- package/cjs/components/map-label/index.js +1 -1
- package/cjs/components/map-label/layout.js +1 -1
- package/cjs/components/map-label/map-label-transformer.js +1 -1
- package/cjs/components/map-label/map-label.js +1 -1
- package/cjs/components/map-label/theme.js +1 -1
- package/cjs/components/map-label/type.js +1 -1
- package/cjs/components/regression-line/index.js +1 -1
- package/cjs/components/regression-line/regression-line.js +1 -1
- package/cjs/components/regression-line/type.js +1 -1
- package/cjs/components/scatter-regression-line/index.js +1 -1
- package/cjs/components/scatter-regression-line/type.js +1 -1
- package/cjs/components/series-break/constant.js +1 -1
- package/cjs/components/series-break/index.js +1 -1
- package/cjs/components/series-break/series-break.js +1 -1
- package/cjs/components/series-break/type.js +1 -1
- package/cjs/components/series-break/util.js +2 -1
- package/cjs/components/series-label/constant.js +1 -1
- package/cjs/components/series-label/index.js +1 -1
- package/cjs/components/series-label/series-label.js +1 -1
- package/cjs/components/series-label/type.js +1 -1
- package/cjs/components/series-label/util.js +1 -1
- package/esm/charts/axis-3d/index.js +2 -1
- package/esm/charts/axis-3d/linear-axis.js +1 -2
- package/esm/charts/bar-3d/chart-spec-transformer.js +1 -1
- package/esm/charts/bar-3d/chart.js +1 -1
- package/esm/charts/bar-3d/constant.js +1 -1
- package/esm/charts/bar-3d/index.js +1 -1
- package/esm/charts/bar-3d/interface.js +1 -1
- package/esm/charts/bar-3d/series-spec-transformer.js +1 -1
- package/esm/charts/bar-3d/series.js +1 -1
- package/esm/charts/bar-3d/theme.js +1 -1
- package/esm/charts/candlestick/candlestick-transformer.js +1 -1
- package/esm/charts/candlestick/candlestick.js +1 -2
- package/esm/charts/candlestick/index.js +1 -1
- package/esm/charts/candlestick/interface.js +1 -1
- package/esm/charts/candlestick/util.js +1 -1
- package/esm/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
- package/esm/charts/combination-candlestick/combination-candlestick.js +1 -1
- package/esm/charts/combination-candlestick/constant.js +1 -1
- package/esm/charts/combination-candlestick/index.js +1 -1
- package/esm/charts/combination-candlestick/interface.js +1 -1
- package/esm/charts/conversion-funnel/arrow-data-transform.js +1 -1
- package/esm/charts/conversion-funnel/constants.js +1 -1
- package/esm/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
- package/esm/charts/conversion-funnel/conversion-funnel.js +1 -1
- package/esm/charts/conversion-funnel/index.js +1 -1
- package/esm/charts/conversion-funnel/interface.js +1 -1
- package/esm/charts/conversion-funnel/util.js +1 -1
- package/esm/charts/funnel-3d/chart.js +1 -2
- package/esm/charts/funnel-3d/constant.js +1 -1
- package/esm/charts/funnel-3d/index.js +1 -1
- package/esm/charts/funnel-3d/interface.js +1 -1
- package/esm/charts/funnel-3d/series-spec-transformer.js +1 -1
- package/esm/charts/funnel-3d/series.js +1 -1
- package/esm/charts/funnel-3d/theme.js +1 -1
- package/esm/charts/histogram-3d/chart.js +1 -1
- package/esm/charts/storyline/layouts/arc.js +59 -17
- package/esm/charts/storyline/layouts/arc.js.map +1 -1
- package/esm/charts/storyline/layouts/clock.js +17 -9
- package/esm/charts/storyline/layouts/clock.js.map +1 -1
- package/esm/charts/storyline/layouts/common.d.ts +3 -15
- package/esm/charts/storyline/layouts/common.js +6 -18
- package/esm/charts/storyline/layouts/common.js.map +1 -1
- package/esm/charts/storyline/layouts/default.js +14 -9
- package/esm/charts/storyline/layouts/default.js.map +1 -1
- package/esm/charts/storyline/layouts/ladder.js +15 -10
- package/esm/charts/storyline/layouts/ladder.js.map +1 -1
- package/esm/charts/storyline/layouts/landscape.js +20 -16
- package/esm/charts/storyline/layouts/landscape.js.map +1 -1
- package/esm/charts/storyline/layouts/portrait.d.ts +1 -1
- package/esm/charts/storyline/layouts/portrait.js +20 -16
- package/esm/charts/storyline/layouts/portrait.js.map +1 -1
- package/esm/charts/storyline/layouts/wing.js +15 -9
- package/esm/charts/storyline/layouts/wing.js.map +1 -1
- package/esm/components/bar-link/bar-link.js +1 -1
- package/esm/components/bar-link/constant.js +1 -1
- package/esm/components/bar-link/index.js +1 -1
- package/esm/components/bar-link/type.js +1 -1
- package/esm/components/bar-link/util.js +1 -1
- package/esm/components/bar-regression-line/index.js +1 -1
- package/esm/components/bar-regression-line/type.js +1 -1
- package/esm/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
- package/esm/components/extension-mark-sync-state/index.js +1 -1
- package/esm/components/extension-mark-sync-state/type.js +1 -1
- package/esm/components/histogram-regression-line/index.js +1 -1
- package/esm/components/histogram-regression-line/type.js +2 -1
- package/esm/components/map-label/index.js +1 -1
- package/esm/components/map-label/layout.js +1 -1
- package/esm/components/map-label/map-label-transformer.js +1 -1
- package/esm/components/map-label/map-label.js +1 -1
- package/esm/components/map-label/theme.js +1 -1
- package/esm/components/map-label/type.js +1 -1
- package/esm/components/regression-line/index.js +1 -1
- package/esm/components/regression-line/regression-line.js +1 -1
- package/esm/components/regression-line/type.js +1 -1
- package/esm/components/scatter-regression-line/index.js +1 -1
- package/esm/components/scatter-regression-line/type.js +1 -1
- package/esm/components/series-break/constant.js +1 -1
- package/esm/components/series-break/index.js +1 -1
- package/esm/components/series-break/series-break.js +1 -1
- package/esm/components/series-break/type.js +1 -1
- package/esm/components/series-break/util.js +2 -1
- package/esm/components/series-label/constant.js +1 -1
- package/esm/components/series-label/index.js +1 -1
- package/esm/components/series-label/series-label.js +1 -1
- package/esm/components/series-label/type.js +1 -1
- package/esm/components/series-label/util.js +1 -1
- package/package.json +4 -4
|
@@ -4,16 +4,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.buildPortraitBlockMark = exports.buildPortraitAxisMark = exports.PORTRAIT_TITLE_TO_CONTENT_GAP = exports.PORTRAIT_CONTENT_LINE_HEIGHT = exports.PORTRAIT_TITLE_LINE_HEIGHT = exports.PORTRAIT_CONTENT_LINES = exports.PORTRAIT_TEXT_GAP_FROM_IMAGE = exports.PORTRAIT_CONTENT_HEIGHT_RATIO = exports.PORTRAIT_IMAGE_HEIGHT_RATIO = void 0;
|
|
6
6
|
|
|
7
|
-
const vchart_1 = require("@visactor/vchart"), common_1 = require("./common"), PORTRAIT_AXIS_WIDTH = 96, PORTRAIT_AXIS_PADDING = 120, PORTRAIT_MARKER_FONT_SIZE =
|
|
7
|
+
const vchart_1 = require("@visactor/vchart"), common_1 = require("./common"), PORTRAIT_AXIS_WIDTH = 96, PORTRAIT_AXIS_PADDING = 120, PORTRAIT_MARKER_FONT_SIZE = 34, PORTRAIT_MARKER_LINE_HEIGHT = 24, PORTRAIT_MARKER_AXIS_PADDING = 6;
|
|
8
8
|
|
|
9
9
|
exports.PORTRAIT_IMAGE_HEIGHT_RATIO = .6, exports.PORTRAIT_CONTENT_HEIGHT_RATIO = 1.25;
|
|
10
10
|
|
|
11
11
|
const PORTRAIT_IMAGE_GAP_FROM_AXIS = 24, PORTRAIT_SHADOW_OFFSET_X = 24, PORTRAIT_SHADOW_OFFSET_Y = 16, PORTRAIT_SHADOW_SCALE = 1;
|
|
12
12
|
|
|
13
13
|
exports.PORTRAIT_TEXT_GAP_FROM_IMAGE = 8, exports.PORTRAIT_CONTENT_LINES = 3, exports.PORTRAIT_TITLE_LINE_HEIGHT = 34,
|
|
14
|
-
exports.PORTRAIT_CONTENT_LINE_HEIGHT =
|
|
14
|
+
exports.PORTRAIT_CONTENT_LINE_HEIGHT = 23;
|
|
15
15
|
|
|
16
|
-
const PORTRAIT_CONTENT_FONT_SIZE =
|
|
16
|
+
const PORTRAIT_CONTENT_FONT_SIZE = 16;
|
|
17
17
|
|
|
18
18
|
exports.PORTRAIT_TITLE_TO_CONTENT_GAP = 4;
|
|
19
19
|
|
|
@@ -55,8 +55,8 @@ const buildPortraitAxisMark = spec => {
|
|
|
55
55
|
},
|
|
56
56
|
text: (_d, ctx) => {
|
|
57
57
|
var _a, _b, _c;
|
|
58
|
-
const axis = getPortraitAxisRect(spec, ctx), markerFontSize = (0, common_1.resolveMarkerFontSize)(spec, ctx, block.marker, axis.height / Math.max(null !== (_b = null === (_a = spec.data) || void 0 === _a ? void 0 : _a.length) && void 0 !== _b ? _b : 1, 1),
|
|
59
|
-
common_1.resolveAdaptiveLineHeight)(markerFontSize, null === (_c = spec.marker) || void 0 === _c ? void 0 : _c.style,
|
|
58
|
+
const axis = getPortraitAxisRect(spec, ctx), markerFontSize = (0, common_1.resolveMarkerFontSize)(spec, ctx, block.marker, axis.height / Math.max(null !== (_b = null === (_a = spec.data) || void 0 === _a ? void 0 : _a.length) && void 0 !== _b ? _b : 1, 1), 34, [ 16, 38 ]), markerLineHeight = (0,
|
|
59
|
+
common_1.resolveAdaptiveLineHeight)(markerFontSize, null === (_c = spec.marker) || void 0 === _c ? void 0 : _c.style, 24, .9);
|
|
60
60
|
return {
|
|
61
61
|
type: "rich",
|
|
62
62
|
text: block.marker.split("").map(((char, i, arr) => ({
|
|
@@ -104,10 +104,11 @@ const buildPortraitAxisMark = spec => {
|
|
|
104
104
|
exports.buildPortraitAxisMark = buildPortraitAxisMark;
|
|
105
105
|
|
|
106
106
|
const getPortraitMetrics = (spec, blockWidth, blockHeight, index, ctx) => {
|
|
107
|
-
var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
108
|
-
const contentFontSize = Number(null !== (_c = null === (_b = null === (_a = spec.content) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.fontSize) && void 0 !== _c ? _c :
|
|
107
|
+
var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
108
|
+
const contentFontSize = Number(null !== (_c = null === (_b = null === (_a = spec.content) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.fontSize) && void 0 !== _c ? _c : 16), contentLineHeight = Number(null !== (_g = null === (_f = null === (_e = spec.content) || void 0 === _e ? void 0 : _e.style) || void 0 === _f ? void 0 : _f.lineHeight) && void 0 !== _g ? _g : exports.PORTRAIT_CONTENT_LINE_HEIGHT), titleToContentGap = exports.PORTRAIT_TITLE_TO_CONTENT_GAP, imageWidth = null !== (_j = null === (_h = spec.image) || void 0 === _h ? void 0 : _h.width) && void 0 !== _j ? _j : Math.max(blockWidth, 80), imageHeight = null !== (_l = null === (_k = spec.image) || void 0 === _k ? void 0 : _k.height) && void 0 !== _l ? _l : Math.round(blockHeight * exports.PORTRAIT_IMAGE_HEIGHT_RATIO), titleFontSize = (0,
|
|
109
109
|
common_1.resolveTitleFontSize)(spec, ctx, null === (_o = null === (_m = spec.data) || void 0 === _m ? void 0 : _m[index]) || void 0 === _o ? void 0 : _o.title, imageWidth, 26, [ 8, 34 ]), titleLineHeight = (0,
|
|
110
|
-
common_1.resolveAdaptiveLineHeight)(titleFontSize, null === (_p = spec.title) || void 0 === _p ? void 0 : _p.style, exports.PORTRAIT_TITLE_LINE_HEIGHT),
|
|
110
|
+
common_1.resolveAdaptiveLineHeight)(titleFontSize, null === (_p = spec.title) || void 0 === _p ? void 0 : _p.style, exports.PORTRAIT_TITLE_LINE_HEIGHT), titleHeight = (0,
|
|
111
|
+
common_1.getBlockTitleHeight)(titleLineHeight, null === (_r = null === (_q = spec.data) || void 0 === _q ? void 0 : _q[index]) || void 0 === _r ? void 0 : _r.title), minContentHeight = exports.PORTRAIT_CONTENT_LINES * contentLineHeight, contentHeight = Math.max(minContentHeight, Math.round(blockHeight * exports.PORTRAIT_CONTENT_HEIGHT_RATIO)), textHeight = titleHeight + titleToContentGap + contentHeight, onLeft = index % 2 == 0, imageX = onLeft ? -72 - imageWidth : 72, imageY = -imageHeight / 2, textX = imageX, textY = imageY + imageHeight + exports.PORTRAIT_TEXT_GAP_FROM_IMAGE, shadowWidth = 1 * imageWidth, shadowHeight = 1 * imageHeight;
|
|
111
112
|
return {
|
|
112
113
|
onLeft: onLeft,
|
|
113
114
|
titleFontSize: titleFontSize,
|
|
@@ -135,7 +136,7 @@ const getPortraitMetrics = (spec, blockWidth, blockHeight, index, ctx) => {
|
|
|
135
136
|
},
|
|
136
137
|
contentBox: {
|
|
137
138
|
x: textX,
|
|
138
|
-
y: textY +
|
|
139
|
+
y: textY + titleHeight + titleToContentGap,
|
|
139
140
|
width: imageWidth,
|
|
140
141
|
height: contentHeight
|
|
141
142
|
}
|
|
@@ -236,6 +237,9 @@ const getPortraitMetrics = (spec, blockWidth, blockHeight, index, ctx) => {
|
|
|
236
237
|
y: (_d, ctx) => getMetrics(ctx).textBox.y,
|
|
237
238
|
text: block.title,
|
|
238
239
|
maxLineWidth: (_d, ctx) => getMetrics(ctx).textBox.width,
|
|
240
|
+
height: (_d, ctx) => getMetrics(ctx).titleLineHeight * common_1.BLOCK_TITLE_MAX_LINES,
|
|
241
|
+
heightLimit: (_d, ctx) => getMetrics(ctx).titleLineHeight * common_1.BLOCK_TITLE_MAX_LINES,
|
|
242
|
+
lineClamp: common_1.BLOCK_TITLE_MAX_LINES,
|
|
239
243
|
fontSize: (_d, ctx) => getMetrics(ctx).titleFontSize,
|
|
240
244
|
lineHeight: (_d, ctx) => getMetrics(ctx).titleLineHeight,
|
|
241
245
|
fontWeight: "bold",
|
|
@@ -244,14 +248,16 @@ const getPortraitMetrics = (spec, blockWidth, blockHeight, index, ctx) => {
|
|
|
244
248
|
lineWidth: 5,
|
|
245
249
|
lineJoin: "round",
|
|
246
250
|
textAlign: "left",
|
|
247
|
-
textBaseline: "top"
|
|
251
|
+
textBaseline: "top",
|
|
252
|
+
whiteSpace: "normal",
|
|
253
|
+
wordBreak: "break-word",
|
|
254
|
+
ellipsis: "..."
|
|
248
255
|
}, null === (_f = spec.title) || void 0 === _f ? void 0 : _f.style)
|
|
249
256
|
}) : null, contentText.length ? Object.assign(Object.assign({
|
|
250
257
|
type: "text",
|
|
251
258
|
name: `storyline-block-content-${index}`,
|
|
252
259
|
interactive: !1
|
|
253
260
|
}, spec.content), {
|
|
254
|
-
textType: "rich",
|
|
255
261
|
style: Object.assign({
|
|
256
262
|
x: (_d, ctx) => getMetrics(ctx).contentBox.x,
|
|
257
263
|
y: (_d, ctx) => getMetrics(ctx).contentBox.y,
|
|
@@ -259,13 +265,12 @@ const getPortraitMetrics = (spec, blockWidth, blockHeight, index, ctx) => {
|
|
|
259
265
|
height: (_d, ctx) => getMetrics(ctx).contentBox.height,
|
|
260
266
|
maxLineWidth: (_d, ctx) => getMetrics(ctx).contentBox.width,
|
|
261
267
|
heightLimit: (_d, ctx) => getMetrics(ctx).contentBox.height,
|
|
262
|
-
text: (0, common_1.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
fill: "#596173"
|
|
266
|
-
}),
|
|
268
|
+
text: (0, common_1.buildPlainContent)(contentText),
|
|
269
|
+
fontSize: 16,
|
|
270
|
+
lineHeight: exports.PORTRAIT_CONTENT_LINE_HEIGHT,
|
|
267
271
|
textAlign: "left",
|
|
268
272
|
textBaseline: "top",
|
|
273
|
+
whiteSpace: "normal",
|
|
269
274
|
wordBreak: "break-word",
|
|
270
275
|
ellipsis: "...",
|
|
271
276
|
fill: "#596173"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/storyline/layouts/portrait.ts"],"names":[],"mappings":"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","file":"portrait.js","sourcesContent":["import type { IExtensionGroupMarkSpec } from '@visactor/vchart';\nimport { LayoutZIndex } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec } from '../interface';\nimport {\n type ICustomMarkSpec,\n type LayoutContext,\n DEFAULT_BLOCK_HEIGHT,\n buildRichContent,\n getImageBackgroundStyle,\n getLayout,\n omitImageLayoutSpec,\n resolveAdaptiveLineHeight,\n resolveMarkerFontSize,\n resolveBlockWidth,\n resolveTitleFontSize,\n shouldShowImageBackground,\n withAlpha\n} from './common';\n\n// portrait 布局:中轴 rect + 左右交替的 image + image 下方 title/content\n// 中轴默认加宽,便于在轴上叠放 block.marker 时间节点文字(纵向逐字排列)\nconst PORTRAIT_AXIS_WIDTH = 96;\nconst PORTRAIT_AXIS_PADDING = 120; // 中轴上下两端的留白\n// marker 时间节点文字的默认样式(fontSize 30、白色字、贴轴对应一侧边缘)\nconst PORTRAIT_MARKER_FONT_SIZE = 40;\nconst PORTRAIT_MARKER_LINE_HEIGHT = 28;\nconst PORTRAIT_MARKER_AXIS_PADDING = 6; // marker 距离轴边缘的水平内边距\n// image 默认尺寸的占比规则(基于 region 平均槽位):\n// - image 高度 = slotHeight * 0.6\n// - content 高度 = slotHeight * (0.6 + 0.4)\n// 其中 slotHeight = regionHeight / (blockCount + 1),由 getLayout 计算。\nexport const PORTRAIT_IMAGE_HEIGHT_RATIO = 0.6;\nexport const PORTRAIT_CONTENT_HEIGHT_RATIO = 1.25;\nconst PORTRAIT_IMAGE_GAP_FROM_AXIS = 24; // image 与中轴之间的水平间距\nconst PORTRAIT_SHADOW_OFFSET_X = 24; // subImage 相对主 image 的水平错位量\nconst PORTRAIT_SHADOW_OFFSET_Y = 16; // subImage 相对主 image 的垂直错位量\nconst PORTRAIT_SHADOW_SCALE = 1; // subImage 与主 image 同尺寸,仅做错位偏移\nexport const PORTRAIT_TEXT_GAP_FROM_IMAGE = 8;\nexport const PORTRAIT_CONTENT_LINES = 3;\nexport const PORTRAIT_TITLE_LINE_HEIGHT = 34;\nexport const PORTRAIT_CONTENT_LINE_HEIGHT = 26;\nconst PORTRAIT_CONTENT_FONT_SIZE = 18;\nexport const PORTRAIT_TITLE_TO_CONTENT_GAP = 4;\n\nexport const buildPortraitAxisMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec => {\n const themeColor = spec.themeColor ?? '#e8543d';\n const lineStyle = spec.line?.style ?? {};\n const defaultFill = {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops: [\n { offset: 0, color: withAlpha(themeColor, 0.2) },\n { offset: 1, color: withAlpha(themeColor, 1) }\n ]\n };\n // marker 时间节点文字:垂直方向逐字排列(每字符换行)\n const markerVisible = spec.marker?.visible !== false;\n\n const markerMarks = markerVisible\n ? (spec.data ?? [])\n .map((block, index) => {\n if (!block.marker) {\n return null;\n }\n // image 在 block 左侧时(index 偶数),marker 贴轴左边缘 + 左对齐;\n // image 在 block 右侧时(index 奇数),marker 贴轴右边缘 + 右对齐。\n const onLeft = index % 2 === 0;\n const axisHalf = PORTRAIT_AXIS_WIDTH / 2;\n const markerOffsetX = onLeft\n ? -axisHalf + PORTRAIT_MARKER_AXIS_PADDING\n : axisHalf - PORTRAIT_MARKER_AXIS_PADDING;\n const markerTextAlign: 'left' | 'right' = onLeft ? 'left' : 'right';\n return {\n type: 'text',\n textType: 'rich',\n name: `storyline-portrait-marker-${index}`,\n interactive: false,\n ...spec.marker,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return (lb?.center?.x ?? 0) + markerOffsetX;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.y ?? 0;\n },\n text: (_d: unknown, ctx: LayoutContext) => {\n const axis = getPortraitAxisRect(spec, ctx);\n const markerFontSize = resolveMarkerFontSize(\n spec,\n ctx,\n block.marker,\n axis.height / Math.max(spec.data?.length ?? 1, 1),\n PORTRAIT_MARKER_FONT_SIZE\n );\n const markerLineHeight = resolveAdaptiveLineHeight(\n markerFontSize,\n spec.marker?.style as any,\n PORTRAIT_MARKER_LINE_HEIGHT,\n 0.9\n );\n return {\n type: 'rich',\n text: block.marker.split('').map((char, i, arr) => ({\n text: char + (i < arr.length - 1 ? '\\n' : ''),\n fontSize: markerFontSize,\n lineHeight: markerLineHeight,\n fill: '#fff',\n align: markerTextAlign\n }))\n };\n },\n fontWeight: 'bold',\n lineJoin: 'round',\n shadowColor: 'rgba(0, 0, 0, 0.3)',\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 5,\n textAlign: markerTextAlign,\n textBaseline: 'middle',\n ...(spec.marker?.style as any)\n }\n } as ICustomMarkSpec<'text'>;\n })\n .filter(Boolean)\n : [];\n\n return {\n type: 'group' as any,\n name: 'storyline-portrait-axis',\n zIndex: LayoutZIndex.Mark,\n children: [\n {\n type: 'rect',\n name: 'storyline-portrait-axis-rect',\n interactive: false,\n style: {\n fill: (lineStyle as any).fill ?? defaultFill,\n stroke: (lineStyle as any).stroke ?? false,\n lineWidth: (lineStyle as any).lineWidth ?? 0,\n cornerRadius: (lineStyle as any).cornerRadius ?? 0,\n x: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).x,\n y: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).y,\n width: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).width,\n height: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).height\n }\n } as ICustomMarkSpec<'rect'>,\n ...(markerMarks as ICustomMarkSpec<any>[])\n ]\n };\n};\n\nconst getPortraitMetrics = (\n spec: IStorylineSpec,\n blockWidth: number,\n blockHeight: number,\n index: number,\n ctx: LayoutContext\n) => {\n const contentFontSize = Number((spec.content?.style as any)?.fontSize ?? PORTRAIT_CONTENT_FONT_SIZE);\n const contentLineHeight = Number((spec.content?.style as any)?.lineHeight ?? PORTRAIT_CONTENT_LINE_HEIGHT);\n const titleToContentGap = PORTRAIT_TITLE_TO_CONTENT_GAP;\n\n // 默认 image 高度 = blockHeight * 0.4(blockHeight = regionHeight / count,由 getLayout 计算);\n // 默认 image 宽度 = blockWidth,让 image 横向自适应单个 block 槽位宽度\n const imageWidth = spec.image?.width ?? Math.max(blockWidth, 80);\n const imageHeight = spec.image?.height ?? Math.round(blockHeight * PORTRAIT_IMAGE_HEIGHT_RATIO);\n const titleFontSize = resolveTitleFontSize(spec, ctx, spec.data?.[index]?.title, imageWidth, 26, [8, 34]);\n const titleLineHeight = resolveAdaptiveLineHeight(\n titleFontSize,\n spec.title?.style as any,\n PORTRAIT_TITLE_LINE_HEIGHT\n );\n const minContentHeight = PORTRAIT_CONTENT_LINES * contentLineHeight;\n // 默认 content 高度 = blockHeight * 0.4\n const contentHeight = Math.max(minContentHeight, Math.round(blockHeight * PORTRAIT_CONTENT_HEIGHT_RATIO));\n\n const textHeight = titleLineHeight + titleToContentGap + contentHeight;\n\n const onLeft = index % 2 === 0;\n\n const axisHalf = PORTRAIT_AXIS_WIDTH / 2;\n const imageX = onLeft\n ? -axisHalf - PORTRAIT_IMAGE_GAP_FROM_AXIS - imageWidth\n : axisHalf + PORTRAIT_IMAGE_GAP_FROM_AXIS;\n const imageY = -imageHeight / 2;\n\n const textX = imageX;\n const textY = imageY + imageHeight + PORTRAIT_TEXT_GAP_FROM_IMAGE;\n const textWidth = imageWidth;\n\n const contentBox = {\n x: textX,\n y: textY + titleLineHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n\n const shadowOffsetX = PORTRAIT_SHADOW_OFFSET_X;\n const shadowOffsetY = PORTRAIT_SHADOW_OFFSET_Y;\n const shadowWidth = imageWidth * PORTRAIT_SHADOW_SCALE;\n const shadowHeight = imageHeight * PORTRAIT_SHADOW_SCALE;\n const baseShadowX = imageX - (shadowWidth - imageWidth) / 2;\n const baseShadowY = imageY - (shadowHeight - imageHeight) / 2;\n const shadowBox = {\n x: baseShadowX + (onLeft ? -shadowOffsetX : shadowOffsetX),\n y: baseShadowY + shadowOffsetY,\n width: shadowWidth,\n height: shadowHeight\n };\n\n return {\n onLeft,\n titleFontSize,\n titleLineHeight,\n contentFontSize,\n contentLineHeight,\n blockWidth,\n imageBox: { x: imageX, y: imageY, width: imageWidth, height: imageHeight },\n shadowBox,\n textBox: { x: textX, y: textY, width: textWidth, height: textHeight },\n contentBox\n };\n};\n\n/**\n * 获取 portrait 布局的中轴 rect 尺寸:宽度固定,高度覆盖首尾 block 的完整内容范围。\n */\nconst getPortraitAxisRect = (spec: IStorylineSpec, ctx: LayoutContext) => {\n const blocks = getLayout(spec, ctx).blocks;\n if (!blocks.length) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n let top = Number.POSITIVE_INFINITY;\n let bottom = Number.NEGATIVE_INFINITY;\n blocks.forEach((block, index) => {\n const metrics = getPortraitMetrics(spec, block.width, block.height, index, ctx);\n const localTop = Math.min(metrics.imageBox.y, metrics.shadowBox.y, metrics.textBox.y, metrics.contentBox.y);\n const localBottom = Math.max(\n metrics.imageBox.y + metrics.imageBox.height,\n metrics.shadowBox.y + metrics.shadowBox.height,\n metrics.textBox.y + metrics.textBox.height,\n metrics.contentBox.y + metrics.contentBox.height\n );\n top = Math.min(top, block.center.y + localTop);\n bottom = Math.max(bottom, block.center.y + localBottom);\n });\n const cx = blocks[0].center.x;\n return {\n x: cx - PORTRAIT_AXIS_WIDTH / 2,\n y: top - PORTRAIT_AXIS_PADDING,\n width: PORTRAIT_AXIS_WIDTH,\n height: bottom - top + PORTRAIT_AXIS_PADDING * 2\n };\n};\n\nexport const buildPortraitBlockMark = (\n spec: IStorylineSpec,\n block: IStorylineBlock,\n index: number\n): IExtensionGroupMarkSpec => {\n const hasImage = !!block.image;\n const hasSubImage = !!block.subImage;\n const contentText = Array.isArray(block.content) ? block.content : block.content ? [block.content] : [];\n\n const getMetrics = (ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n const w = lb?.width ?? resolveBlockWidth(spec, 0);\n const h = lb?.height ?? spec.block?.height ?? DEFAULT_BLOCK_HEIGHT;\n return getPortraitMetrics(spec, w, h, index, ctx);\n };\n const blockStyle = spec.block?.style ?? {};\n\n return {\n type: 'group' as any,\n id: `storyline-block-${block.id ?? index}`,\n name: `storyline-block-${index}`,\n zIndex: LayoutZIndex.Mark + 1,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.x ?? 0;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.y ?? 0;\n }\n },\n children: [\n hasSubImage\n ? ({\n type: 'image',\n name: `storyline-block-shadow-image-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.height,\n image: block.subImage,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center'\n }\n } as ICustomMarkSpec<'image'>)\n : null,\n shouldShowImageBackground(spec)\n ? ({\n type: 'rect',\n name: `storyline-block-image-bg-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.height,\n cornerRadius: 8,\n ...getImageBackgroundStyle(spec),\n ...blockStyle\n }\n } as ICustomMarkSpec<'rect'>)\n : null,\n hasImage\n ? ({\n type: 'image',\n name: `storyline-block-image-${index}`,\n interactive: false,\n ...omitImageLayoutSpec(spec.image),\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.height,\n image: block.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.image?.style\n }\n } as ICustomMarkSpec<'image'>)\n : null,\n block.title\n ? ({\n type: 'text',\n name: `storyline-block-title-${index}`,\n interactive: false,\n ...spec.title,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.y,\n text: block.title,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.width,\n fontSize: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleLineHeight,\n fontWeight: 'bold',\n fill: '#1f2430',\n stroke: '#fff',\n lineWidth: 5,\n lineJoin: 'round',\n textAlign: 'left',\n textBaseline: 'top',\n ...spec.title?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null,\n contentText.length\n ? ({\n type: 'text',\n name: `storyline-block-content-${index}`,\n interactive: false,\n ...spec.content,\n textType: 'rich',\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.height,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.width,\n heightLimit: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.height,\n text: buildRichContent(contentText, spec, {\n fontSize: PORTRAIT_CONTENT_FONT_SIZE,\n lineHeight: PORTRAIT_CONTENT_LINE_HEIGHT,\n fill: '#596173'\n }),\n textAlign: 'left',\n textBaseline: 'top',\n wordBreak: 'break-word',\n ellipsis: '...',\n fill: '#596173',\n ...spec.content?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null\n ].filter(Boolean) as ICustomMarkSpec<any>[]\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/storyline/layouts/portrait.ts"],"names":[],"mappings":";;;AACA,6CAAgD;AAEhD,qCAgBkB;AAIlB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AACvC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAK1B,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAClC,QAAA,6BAA6B,GAAG,IAAI,CAAC;AAClD,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACnB,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAC3B,QAAA,0BAA0B,GAAG,EAAE,CAAC;AAChC,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAC/C,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACzB,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,qBAAqB,GAAG,CAAC,IAAoB,EAA2B,EAAE;;IACrF,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,mCAAI,SAAS,CAAC;IAChD,MAAM,SAAS,GAAG,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,mCAAI,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG;QAClB,QAAQ,EAAE,QAAQ;QAClB,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;QACL,KAAK,EAAE;YACL,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAA,kBAAS,EAAC,UAAU,EAAE,GAAG,CAAC,EAAE;YAChD,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAA,kBAAS,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE;SAC/C;KACF,CAAC;IAEF,MAAM,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,MAAK,KAAK,CAAC;IAErD,MAAM,WAAW,GAAG,aAAa;QAC/B,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC;aACd,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjB,OAAO,IAAI,CAAC;aACb;YAGD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,mBAAmB,GAAG,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,MAAM;gBAC1B,CAAC,CAAC,CAAC,QAAQ,GAAG,4BAA4B;gBAC1C,CAAC,CAAC,QAAQ,GAAG,4BAA4B,CAAC;YAC5C,MAAM,eAAe,GAAqB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACpE,OAAO,8BACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,6BAA6B,KAAK,EAAE,EAC1C,WAAW,EAAE,KAAK,IACf,IAAI,CAAC,MAAM,KACd,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;;wBACrC,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC9C,OAAO,CAAC,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,0CAAE,CAAC,mCAAI,CAAC,CAAC,GAAG,aAAa,CAAC;oBAC9C,CAAC,EACD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;;wBACrC,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC9C,OAAO,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,0CAAE,CAAC,mCAAI,CAAC,CAAC;oBAC5B,CAAC,EACD,IAAI,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;;wBACxC,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wBAC5C,MAAM,cAAc,GAAG,IAAA,8BAAqB,EAC1C,IAAI,EACJ,GAAG,EACH,KAAK,CAAC,MAAM,EACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,mCAAI,CAAC,EAAE,CAAC,CAAC,EACjD,yBAAyB,EACzB,CAAC,EAAE,EAAE,EAAE,CAAC,CACT,CAAC;wBACF,MAAM,gBAAgB,GAAG,IAAA,kCAAyB,EAChD,cAAc,EACd,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAY,EACzB,2BAA2B,EAC3B,GAAG,CACJ,CAAC;wBACF,OAAO;4BACL,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;gCAClD,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC7C,QAAQ,EAAE,cAAc;gCACxB,UAAU,EAAE,gBAAgB;gCAC5B,IAAI,EAAE,MAAM;gCACZ,KAAK,EAAE,eAAe;6BACvB,CAAC,CAAC;yBACJ,CAAC;oBACJ,CAAC,EACD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,oBAAoB,EACjC,UAAU,EAAE,CAAC,EACb,aAAa,EAAE,CAAC,EAChB,aAAa,EAAE,CAAC,EAChB,SAAS,EAAE,eAAe,EAC1B,YAAY,EAAE,QAAQ,IAClB,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAa,IAEN,CAAC;QAC/B,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,IAAI,EAAE,OAAc;QACpB,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,qBAAY,CAAC,IAAI;QACzB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,8BAA8B;gBACpC,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE;oBACL,IAAI,EAAE,MAAC,SAAiB,CAAC,IAAI,mCAAI,WAAW;oBAC5C,MAAM,EAAE,MAAC,SAAiB,CAAC,MAAM,mCAAI,KAAK;oBAC1C,SAAS,EAAE,MAAC,SAAiB,CAAC,SAAS,mCAAI,CAAC;oBAC5C,YAAY,EAAE,MAAC,SAAiB,CAAC,YAAY,mCAAI,CAAC;oBAClD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;oBACxE,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK;oBAChF,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM;iBACnF;aACyB;YAC5B,GAAI,WAAsC;SAC3C;KACF,CAAC;AACJ,CAAC,CAAC;AA/GW,QAAA,qBAAqB,yBA+GhC;AAEF,MAAM,kBAAkB,GAAG,CACzB,IAAoB,EACpB,UAAkB,EAClB,WAAmB,EACnB,KAAa,EACb,GAAkB,EAClB,EAAE;;IACF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAA,MAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAa,0CAAE,QAAQ,mCAAI,0BAA0B,CAAC,CAAC;IACrG,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAA,MAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAa,0CAAE,UAAU,mCAAI,oCAA4B,CAAC,CAAC;IAC3G,MAAM,iBAAiB,GAAG,qCAA6B,CAAC;IAIxD,MAAM,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,mCAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,mCAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,mCAA2B,CAAC,CAAC;IAChG,MAAM,aAAa,GAAG,IAAA,6BAAoB,EAAC,IAAI,EAAE,GAAG,EAAE,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAG,KAAK,CAAC,0CAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1G,MAAM,eAAe,GAAG,IAAA,kCAAyB,EAC/C,aAAa,EACb,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAY,EACxB,kCAA0B,CAC3B,CAAC;IACF,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,eAAe,EAAE,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAG,KAAK,CAAC,0CAAE,KAAK,CAAC,CAAC;IACpF,MAAM,gBAAgB,GAAG,8BAAsB,GAAG,iBAAiB,CAAC;IAEpE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,qCAA6B,CAAC,CAAC,CAAC;IAE1G,MAAM,UAAU,GAAG,WAAW,GAAG,iBAAiB,GAAG,aAAa,CAAC;IAEnE,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IAE/B,MAAM,QAAQ,GAAG,mBAAmB,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,CAAC,QAAQ,GAAG,4BAA4B,GAAG,UAAU;QACvD,CAAC,CAAC,QAAQ,GAAG,4BAA4B,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,MAAM,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,oCAA4B,CAAC;IAClE,MAAM,SAAS,GAAG,UAAU,CAAC;IAE7B,MAAM,UAAU,GAAG;QACjB,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,iBAAiB;QAC1C,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,aAAa;KACtB,CAAC;IAEF,MAAM,aAAa,GAAG,wBAAwB,CAAC;IAC/C,MAAM,aAAa,GAAG,wBAAwB,CAAC;IAC/C,MAAM,WAAW,GAAG,UAAU,GAAG,qBAAqB,CAAC;IACvD,MAAM,YAAY,GAAG,WAAW,GAAG,qBAAqB,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG;QAChB,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1D,CAAC,EAAE,WAAW,GAAG,aAAa;QAC9B,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,OAAO;QACL,MAAM;QACN,aAAa;QACb,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,UAAU;QACV,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE;QAC1E,SAAS;QACT,OAAO,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;QACrE,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAKF,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAE,GAAkB,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAC5C;IACD,IAAI,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACnC,IAAI,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAC5C,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAC9C,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAC1C,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CACjD,CAAC;QACF,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC/C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,OAAO;QACL,CAAC,EAAE,EAAE,GAAG,mBAAmB,GAAG,CAAC;QAC/B,CAAC,EAAE,GAAG,GAAG,qBAAqB;QAC9B,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,qBAAqB,GAAG,CAAC;KACjD,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,sBAAsB,GAAG,CACpC,IAAoB,EACpB,KAAsB,EACtB,KAAa,EACY,EAAE;;IAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExG,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,EAAE;;QACxC,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,KAAK,mCAAI,IAAA,0BAAiB,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,mCAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,mCAAI,6BAAoB,CAAC;QACnE,OAAO,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,mCAAI,EAAE,CAAC;IAE3C,OAAO;QACL,IAAI,EAAE,OAAc;QACpB,EAAE,EAAE,mBAAmB,MAAA,KAAK,CAAC,EAAE,mCAAI,KAAK,EAAE;QAC1C,IAAI,EAAE,mBAAmB,KAAK,EAAE;QAChC,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,CAAC;QAC7B,KAAK,EAAE;YACL,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;;gBACrC,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,0CAAE,CAAC,mCAAI,CAAC,CAAC;YAC5B,CAAC;YACD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;;gBACrC,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9C,OAAO,MAAA,MAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,MAAM,0CAAE,CAAC,mCAAI,CAAC,CAAC;YAC5B,CAAC;SACF;QACD,QAAQ,EAAE;YACR,WAAW;gBACT,CAAC,CAAE;oBACC,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,gCAAgC,KAAK,EAAE;oBAC7C,WAAW,EAAE,KAAK;oBAClB,KAAK,EAAE;wBACL,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;wBACnE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;wBACnE,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK;wBAC3E,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM;wBAC7E,KAAK,EAAE,KAAK,CAAC,QAAQ;wBACrB,OAAO,EAAE,WAAW;wBACpB,OAAO,EAAE,WAAW;wBACpB,SAAS,EAAE,SAAS;wBACpB,aAAa,EAAE,QAAQ;qBACxB;iBAC2B;gBAChC,CAAC,CAAC,IAAI;YACR,IAAA,kCAAyB,EAAC,IAAI,CAAC;gBAC7B,CAAC,CAAE;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4BAA4B,KAAK,EAAE;oBACzC,WAAW,EAAE,KAAK;oBAClB,KAAK,gCACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAClE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAClE,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAC1E,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAC5E,YAAY,EAAE,CAAC,IACZ,IAAA,gCAAuB,EAAC,IAAI,CAAC,GAC7B,UAAU,CACd;iBAC0B;gBAC/B,CAAC,CAAC,IAAI;YACR,QAAQ;gBACN,CAAC,CAAE,8BACC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,yBAAyB,KAAK,EAAE,EACtC,WAAW,EAAE,KAAK,IACf,IAAA,4BAAmB,EAAC,IAAI,CAAC,KAAK,CAAC,KAClC,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAClE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAClE,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAC1E,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAC5E,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,QAAQ,IACpB,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,IAEM;gBAChC,CAAC,CAAC,IAAI;YACR,KAAK,CAAC,KAAK;gBACT,CAAC,CAAE,8BACC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,yBAAyB,KAAK,EAAE,EACtC,WAAW,EAAE,KAAK,IACf,IAAI,CAAC,KAAK,KACb,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EACjE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EACjE,IAAI,EAAE,KAAK,CAAC,KAAK,EACjB,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAChF,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,8BAAqB,EACpG,WAAW,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,eAAe,GAAG,8BAAqB,EACzG,SAAS,EAAE,8BAAqB,EAChC,QAAQ,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,aAAa,EAC5E,UAAU,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,eAAe,EAChF,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,EACnB,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,KAAK,IACZ,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,IAEK;gBAC/B,CAAC,CAAC,IAAI;YACR,WAAW,CAAC,MAAM;gBAChB,CAAC,CAAE,8BACC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,2BAA2B,KAAK,EAAE,EACxC,WAAW,EAAE,KAAK,IACf,IAAI,CAAC,OAAO,KACf,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EACpE,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EACpE,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAC5E,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAC9E,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EACnF,WAAW,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EACnF,IAAI,EAAE,IAAA,0BAAiB,EAAC,WAAW,CAAC,EACpC,QAAQ,EAAE,0BAA0B,EACpC,UAAU,EAAE,oCAA4B,EACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,EACnB,UAAU,EAAE,QAAQ,EACpB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,SAAS,IACZ,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,IAEG;gBAC/B,CAAC,CAAC,IAAI;SACT,CAAC,MAAM,CAAC,OAAO,CAA2B;KAC5C,CAAC;AACJ,CAAC,CAAC;AAjJW,QAAA,sBAAsB,0BAiJjC","file":"portrait.js","sourcesContent":["import type { IExtensionGroupMarkSpec } from '@visactor/vchart';\nimport { LayoutZIndex } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec } from '../interface';\nimport {\n type ICustomMarkSpec,\n type LayoutContext,\n DEFAULT_BLOCK_HEIGHT,\n BLOCK_TITLE_MAX_LINES,\n buildPlainContent,\n getBlockTitleHeight,\n getImageBackgroundStyle,\n getLayout,\n omitImageLayoutSpec,\n resolveAdaptiveLineHeight,\n resolveMarkerFontSize,\n resolveBlockWidth,\n resolveTitleFontSize,\n shouldShowImageBackground,\n withAlpha\n} from './common';\n\n// portrait 布局:中轴 rect + 左右交替的 image + image 下方 title/content\n// 中轴默认加宽,便于在轴上叠放 block.marker 时间节点文字(纵向逐字排列)\nconst PORTRAIT_AXIS_WIDTH = 96;\nconst PORTRAIT_AXIS_PADDING = 120; // 中轴上下两端的留白\n// marker 时间节点文字的默认样式(fontSize 30、白色字、贴轴对应一侧边缘)\nconst PORTRAIT_MARKER_FONT_SIZE = 34;\nconst PORTRAIT_MARKER_LINE_HEIGHT = 24;\nconst PORTRAIT_MARKER_AXIS_PADDING = 6; // marker 距离轴边缘的水平内边距\n// image 默认尺寸的占比规则(基于 region 平均槽位):\n// - image 高度 = slotHeight * 0.6\n// - content 高度 = slotHeight * (0.6 + 0.4)\n// 其中 slotHeight = regionHeight / (blockCount + 1),由 getLayout 计算。\nexport const PORTRAIT_IMAGE_HEIGHT_RATIO = 0.6;\nexport const PORTRAIT_CONTENT_HEIGHT_RATIO = 1.25;\nconst PORTRAIT_IMAGE_GAP_FROM_AXIS = 24; // image 与中轴之间的水平间距\nconst PORTRAIT_SHADOW_OFFSET_X = 24; // subImage 相对主 image 的水平错位量\nconst PORTRAIT_SHADOW_OFFSET_Y = 16; // subImage 相对主 image 的垂直错位量\nconst PORTRAIT_SHADOW_SCALE = 1; // subImage 与主 image 同尺寸,仅做错位偏移\nexport const PORTRAIT_TEXT_GAP_FROM_IMAGE = 8;\nexport const PORTRAIT_CONTENT_LINES = 3;\nexport const PORTRAIT_TITLE_LINE_HEIGHT = 34;\nexport const PORTRAIT_CONTENT_LINE_HEIGHT = 23;\nconst PORTRAIT_CONTENT_FONT_SIZE = 16;\nexport const PORTRAIT_TITLE_TO_CONTENT_GAP = 4;\n\nexport const buildPortraitAxisMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec => {\n const themeColor = spec.themeColor ?? '#e8543d';\n const lineStyle = spec.line?.style ?? {};\n const defaultFill = {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 0,\n y1: 1,\n stops: [\n { offset: 0, color: withAlpha(themeColor, 0.2) },\n { offset: 1, color: withAlpha(themeColor, 1) }\n ]\n };\n // marker 时间节点文字:垂直方向逐字排列(每字符换行)\n const markerVisible = spec.marker?.visible !== false;\n\n const markerMarks = markerVisible\n ? (spec.data ?? [])\n .map((block, index) => {\n if (!block.marker) {\n return null;\n }\n // image 在 block 左侧时(index 偶数),marker 贴轴左边缘 + 左对齐;\n // image 在 block 右侧时(index 奇数),marker 贴轴右边缘 + 右对齐。\n const onLeft = index % 2 === 0;\n const axisHalf = PORTRAIT_AXIS_WIDTH / 2;\n const markerOffsetX = onLeft\n ? -axisHalf + PORTRAIT_MARKER_AXIS_PADDING\n : axisHalf - PORTRAIT_MARKER_AXIS_PADDING;\n const markerTextAlign: 'left' | 'right' = onLeft ? 'left' : 'right';\n return {\n type: 'text',\n textType: 'rich',\n name: `storyline-portrait-marker-${index}`,\n interactive: false,\n ...spec.marker,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return (lb?.center?.x ?? 0) + markerOffsetX;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.y ?? 0;\n },\n text: (_d: unknown, ctx: LayoutContext) => {\n const axis = getPortraitAxisRect(spec, ctx);\n const markerFontSize = resolveMarkerFontSize(\n spec,\n ctx,\n block.marker,\n axis.height / Math.max(spec.data?.length ?? 1, 1),\n PORTRAIT_MARKER_FONT_SIZE,\n [16, 38]\n );\n const markerLineHeight = resolveAdaptiveLineHeight(\n markerFontSize,\n spec.marker?.style as any,\n PORTRAIT_MARKER_LINE_HEIGHT,\n 0.9\n );\n return {\n type: 'rich',\n text: block.marker.split('').map((char, i, arr) => ({\n text: char + (i < arr.length - 1 ? '\\n' : ''),\n fontSize: markerFontSize,\n lineHeight: markerLineHeight,\n fill: '#fff',\n align: markerTextAlign\n }))\n };\n },\n fontWeight: 'bold',\n lineJoin: 'round',\n shadowColor: 'rgba(0, 0, 0, 0.3)',\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 5,\n textAlign: markerTextAlign,\n textBaseline: 'middle',\n ...(spec.marker?.style as any)\n }\n } as ICustomMarkSpec<'text'>;\n })\n .filter(Boolean)\n : [];\n\n return {\n type: 'group' as any,\n name: 'storyline-portrait-axis',\n zIndex: LayoutZIndex.Mark,\n children: [\n {\n type: 'rect',\n name: 'storyline-portrait-axis-rect',\n interactive: false,\n style: {\n fill: (lineStyle as any).fill ?? defaultFill,\n stroke: (lineStyle as any).stroke ?? false,\n lineWidth: (lineStyle as any).lineWidth ?? 0,\n cornerRadius: (lineStyle as any).cornerRadius ?? 0,\n x: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).x,\n y: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).y,\n width: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).width,\n height: (_d: unknown, ctx: LayoutContext) => getPortraitAxisRect(spec, ctx).height\n }\n } as ICustomMarkSpec<'rect'>,\n ...(markerMarks as ICustomMarkSpec<any>[])\n ]\n };\n};\n\nconst getPortraitMetrics = (\n spec: IStorylineSpec,\n blockWidth: number,\n blockHeight: number,\n index: number,\n ctx: LayoutContext\n) => {\n const contentFontSize = Number((spec.content?.style as any)?.fontSize ?? PORTRAIT_CONTENT_FONT_SIZE);\n const contentLineHeight = Number((spec.content?.style as any)?.lineHeight ?? PORTRAIT_CONTENT_LINE_HEIGHT);\n const titleToContentGap = PORTRAIT_TITLE_TO_CONTENT_GAP;\n\n // 默认 image 高度 = blockHeight * 0.4(blockHeight = regionHeight / count,由 getLayout 计算);\n // 默认 image 宽度 = blockWidth,让 image 横向自适应单个 block 槽位宽度\n const imageWidth = spec.image?.width ?? Math.max(blockWidth, 80);\n const imageHeight = spec.image?.height ?? Math.round(blockHeight * PORTRAIT_IMAGE_HEIGHT_RATIO);\n const titleFontSize = resolveTitleFontSize(spec, ctx, spec.data?.[index]?.title, imageWidth, 26, [8, 34]);\n const titleLineHeight = resolveAdaptiveLineHeight(\n titleFontSize,\n spec.title?.style as any,\n PORTRAIT_TITLE_LINE_HEIGHT\n );\n const titleHeight = getBlockTitleHeight(titleLineHeight, spec.data?.[index]?.title);\n const minContentHeight = PORTRAIT_CONTENT_LINES * contentLineHeight;\n // 默认 content 高度 = blockHeight * 0.4\n const contentHeight = Math.max(minContentHeight, Math.round(blockHeight * PORTRAIT_CONTENT_HEIGHT_RATIO));\n\n const textHeight = titleHeight + titleToContentGap + contentHeight;\n\n const onLeft = index % 2 === 0;\n\n const axisHalf = PORTRAIT_AXIS_WIDTH / 2;\n const imageX = onLeft\n ? -axisHalf - PORTRAIT_IMAGE_GAP_FROM_AXIS - imageWidth\n : axisHalf + PORTRAIT_IMAGE_GAP_FROM_AXIS;\n const imageY = -imageHeight / 2;\n\n const textX = imageX;\n const textY = imageY + imageHeight + PORTRAIT_TEXT_GAP_FROM_IMAGE;\n const textWidth = imageWidth;\n\n const contentBox = {\n x: textX,\n y: textY + titleHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n\n const shadowOffsetX = PORTRAIT_SHADOW_OFFSET_X;\n const shadowOffsetY = PORTRAIT_SHADOW_OFFSET_Y;\n const shadowWidth = imageWidth * PORTRAIT_SHADOW_SCALE;\n const shadowHeight = imageHeight * PORTRAIT_SHADOW_SCALE;\n const baseShadowX = imageX - (shadowWidth - imageWidth) / 2;\n const baseShadowY = imageY - (shadowHeight - imageHeight) / 2;\n const shadowBox = {\n x: baseShadowX + (onLeft ? -shadowOffsetX : shadowOffsetX),\n y: baseShadowY + shadowOffsetY,\n width: shadowWidth,\n height: shadowHeight\n };\n\n return {\n onLeft,\n titleFontSize,\n titleLineHeight,\n contentFontSize,\n contentLineHeight,\n blockWidth,\n imageBox: { x: imageX, y: imageY, width: imageWidth, height: imageHeight },\n shadowBox,\n textBox: { x: textX, y: textY, width: textWidth, height: textHeight },\n contentBox\n };\n};\n\n/**\n * 获取 portrait 布局的中轴 rect 尺寸:宽度固定,高度覆盖首尾 block 的完整内容范围。\n */\nconst getPortraitAxisRect = (spec: IStorylineSpec, ctx: LayoutContext) => {\n const blocks = getLayout(spec, ctx).blocks;\n if (!blocks.length) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n let top = Number.POSITIVE_INFINITY;\n let bottom = Number.NEGATIVE_INFINITY;\n blocks.forEach((block, index) => {\n const metrics = getPortraitMetrics(spec, block.width, block.height, index, ctx);\n const localTop = Math.min(metrics.imageBox.y, metrics.shadowBox.y, metrics.textBox.y, metrics.contentBox.y);\n const localBottom = Math.max(\n metrics.imageBox.y + metrics.imageBox.height,\n metrics.shadowBox.y + metrics.shadowBox.height,\n metrics.textBox.y + metrics.textBox.height,\n metrics.contentBox.y + metrics.contentBox.height\n );\n top = Math.min(top, block.center.y + localTop);\n bottom = Math.max(bottom, block.center.y + localBottom);\n });\n const cx = blocks[0].center.x;\n return {\n x: cx - PORTRAIT_AXIS_WIDTH / 2,\n y: top - PORTRAIT_AXIS_PADDING,\n width: PORTRAIT_AXIS_WIDTH,\n height: bottom - top + PORTRAIT_AXIS_PADDING * 2\n };\n};\n\nexport const buildPortraitBlockMark = (\n spec: IStorylineSpec,\n block: IStorylineBlock,\n index: number\n): IExtensionGroupMarkSpec => {\n const hasImage = !!block.image;\n const hasSubImage = !!block.subImage;\n const contentText = Array.isArray(block.content) ? block.content : block.content ? [block.content] : [];\n\n const getMetrics = (ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n const w = lb?.width ?? resolveBlockWidth(spec, 0);\n const h = lb?.height ?? spec.block?.height ?? DEFAULT_BLOCK_HEIGHT;\n return getPortraitMetrics(spec, w, h, index, ctx);\n };\n const blockStyle = spec.block?.style ?? {};\n\n return {\n type: 'group' as any,\n id: `storyline-block-${block.id ?? index}`,\n name: `storyline-block-${index}`,\n zIndex: LayoutZIndex.Mark + 1,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.x ?? 0;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n const lb = getLayout(spec, ctx).blocks[index];\n return lb?.center?.y ?? 0;\n }\n },\n children: [\n hasSubImage\n ? ({\n type: 'image',\n name: `storyline-block-shadow-image-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).shadowBox.height,\n image: block.subImage,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center'\n }\n } as ICustomMarkSpec<'image'>)\n : null,\n shouldShowImageBackground(spec)\n ? ({\n type: 'rect',\n name: `storyline-block-image-bg-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.height,\n cornerRadius: 8,\n ...getImageBackgroundStyle(spec),\n ...blockStyle\n }\n } as ICustomMarkSpec<'rect'>)\n : null,\n hasImage\n ? ({\n type: 'image',\n name: `storyline-block-image-${index}`,\n interactive: false,\n ...omitImageLayoutSpec(spec.image),\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).imageBox.height,\n image: block.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.image?.style\n }\n } as ICustomMarkSpec<'image'>)\n : null,\n block.title\n ? ({\n type: 'text',\n name: `storyline-block-title-${index}`,\n interactive: false,\n ...spec.title,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.y,\n text: block.title,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).textBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleLineHeight * BLOCK_TITLE_MAX_LINES,\n heightLimit: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleLineHeight * BLOCK_TITLE_MAX_LINES,\n lineClamp: BLOCK_TITLE_MAX_LINES,\n fontSize: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).titleLineHeight,\n fontWeight: 'bold',\n fill: '#1f2430',\n stroke: '#fff',\n lineWidth: 5,\n lineJoin: 'round',\n textAlign: 'left',\n textBaseline: 'top',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ellipsis: '...',\n ...spec.title?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null,\n contentText.length\n ? ({\n type: 'text',\n name: `storyline-block-content-${index}`,\n interactive: false,\n ...spec.content,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.height,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.width,\n heightLimit: (_d: unknown, ctx: LayoutContext) => getMetrics(ctx).contentBox.height,\n text: buildPlainContent(contentText),\n fontSize: PORTRAIT_CONTENT_FONT_SIZE,\n lineHeight: PORTRAIT_CONTENT_LINE_HEIGHT,\n textAlign: 'left',\n textBaseline: 'top',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ellipsis: '...',\n fill: '#596173',\n ...spec.content?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null\n ].filter(Boolean) as ICustomMarkSpec<any>[]\n };\n};\n"]}
|
|
@@ -124,14 +124,15 @@ const buildWingTitleImageMark = spec => {
|
|
|
124
124
|
exports.buildWingTitleImageMark = buildWingTitleImageMark;
|
|
125
125
|
|
|
126
126
|
const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
127
|
-
var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
127
|
+
var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
|
128
128
|
const titleFontSize = (0, common_1.resolveTitleFontSize)(spec, ctx, null === (_b = null === (_a = spec.data) || void 0 === _a ? void 0 : _a[index]) || void 0 === _b ? void 0 : _b.title, 240, 22, [ 8, 30 ]), titleLineHeight = (0,
|
|
129
|
-
common_1.resolveAdaptiveLineHeight)(titleFontSize, null === (_c = spec.title) || void 0 === _c ? void 0 : _c.style, 30, 1.3),
|
|
129
|
+
common_1.resolveAdaptiveLineHeight)(titleFontSize, null === (_c = spec.title) || void 0 === _c ? void 0 : _c.style, 30, 1.3), titleHeight = (0,
|
|
130
|
+
common_1.getBlockTitleHeight)(titleLineHeight, null === (_f = null === (_e = spec.data) || void 0 === _e ? void 0 : _e[index]) || void 0 === _f ? void 0 : _f.title), contentFontSize = Number(null !== (_j = null === (_h = null === (_g = spec.content) || void 0 === _g ? void 0 : _g.style) || void 0 === _h ? void 0 : _h.fontSize) && void 0 !== _j ? _j : 12), contentLineHeight = Number(null !== (_m = null === (_l = null === (_k = spec.content) || void 0 === _k ? void 0 : _k.style) || void 0 === _l ? void 0 : _l.lineHeight) && void 0 !== _m ? _m : 17), imageWidth = Number(null !== (_p = null === (_o = spec.image) || void 0 === _o ? void 0 : _o.width) && void 0 !== _p ? _p : 160), imageHeight = Number(null !== (_r = null === (_q = spec.image) || void 0 === _q ? void 0 : _q.height) && void 0 !== _r ? _r : 160), imageBox = {
|
|
130
131
|
x: -imageWidth / 2,
|
|
131
132
|
y: -imageHeight / 2,
|
|
132
133
|
width: imageWidth,
|
|
133
134
|
height: imageHeight
|
|
134
|
-
}, direction = getWingDirection(spec), count = null !== (
|
|
135
|
+
}, direction = getWingDirection(spec), count = null !== (_t = null === (_s = spec.data) || void 0 === _s ? void 0 : _s.length) && void 0 !== _t ? _t : 0;
|
|
135
136
|
let textBox, contentBox, connectorBox, onLeft, verticalAlign;
|
|
136
137
|
if ("right" === direction && count > 0 && index === count - 1 || "left" === direction && 0 === index) {
|
|
137
138
|
const textX = -120, textY = imageHeight / 2 + 120;
|
|
@@ -142,7 +143,7 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
142
143
|
height: 110
|
|
143
144
|
}, contentBox = {
|
|
144
145
|
x: textX,
|
|
145
|
-
y: textY +
|
|
146
|
+
y: textY + titleHeight + 4,
|
|
146
147
|
width: 240,
|
|
147
148
|
height: 1e5
|
|
148
149
|
}, connectorBox = {
|
|
@@ -160,7 +161,7 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
160
161
|
height: 110
|
|
161
162
|
}, contentBox = {
|
|
162
163
|
x: textX,
|
|
163
|
-
y: textY +
|
|
164
|
+
y: textY + titleHeight + 4,
|
|
164
165
|
width: 240,
|
|
165
166
|
height: 1e5
|
|
166
167
|
};
|
|
@@ -264,6 +265,9 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
264
265
|
y: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).textBox.y,
|
|
265
266
|
text: block.title,
|
|
266
267
|
maxLineWidth: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).textBox.width,
|
|
268
|
+
height: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).titleLineHeight * common_1.BLOCK_TITLE_MAX_LINES,
|
|
269
|
+
heightLimit: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).titleLineHeight * common_1.BLOCK_TITLE_MAX_LINES,
|
|
270
|
+
lineClamp: common_1.BLOCK_TITLE_MAX_LINES,
|
|
267
271
|
fontSize: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).titleFontSize,
|
|
268
272
|
lineHeight: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).titleLineHeight,
|
|
269
273
|
fontWeight: "bold",
|
|
@@ -275,7 +279,10 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
275
279
|
const m = getWingBlockMetrics(spec, ctx, index);
|
|
276
280
|
return m.verticalAlign ? "center" : m.onLeft ? "right" : "left";
|
|
277
281
|
},
|
|
278
|
-
textBaseline: "top"
|
|
282
|
+
textBaseline: "top",
|
|
283
|
+
whiteSpace: "normal",
|
|
284
|
+
wordBreak: "break-word",
|
|
285
|
+
ellipsis: "..."
|
|
279
286
|
}, null === (_c = spec.title) || void 0 === _c ? void 0 : _c.style)
|
|
280
287
|
}) : null, contentText.length ? Object.assign(Object.assign({
|
|
281
288
|
type: "text",
|
|
@@ -283,7 +290,6 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
283
290
|
interactive: !1,
|
|
284
291
|
zIndex: vchart_1.LayoutZIndex.Mark + 10
|
|
285
292
|
}, spec.content), {
|
|
286
|
-
textType: "rich",
|
|
287
293
|
style: Object.assign({
|
|
288
294
|
x: (_d, ctx) => {
|
|
289
295
|
const m = getWingBlockMetrics(spec, ctx, index);
|
|
@@ -294,7 +300,7 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
294
300
|
height: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).contentBox.height,
|
|
295
301
|
maxLineWidth: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).contentBox.width,
|
|
296
302
|
heightLimit: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).contentBox.height,
|
|
297
|
-
text: (0, common_1.
|
|
303
|
+
text: (0, common_1.buildPlainContent)(contentText),
|
|
298
304
|
fontSize: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).contentFontSize,
|
|
299
305
|
lineHeight: (_d, ctx) => getWingBlockMetrics(spec, ctx, index).contentLineHeight,
|
|
300
306
|
textAlign: (_d, ctx) => {
|
|
@@ -302,6 +308,7 @@ const WING_TEXT_IMAGE_GAP = 120, getWingBlockMetrics = (spec, ctx, index) => {
|
|
|
302
308
|
return m.verticalAlign ? "center" : m.onLeft ? "right" : "left";
|
|
303
309
|
},
|
|
304
310
|
textBaseline: "top",
|
|
311
|
+
whiteSpace: "normal",
|
|
305
312
|
wordBreak: "break-word",
|
|
306
313
|
ellipsis: "...",
|
|
307
314
|
fill: "#1f2430"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/charts/storyline/layouts/wing.ts"],"names":[],"mappings":";;;AACA,6CAAgD;AAEhD,qCAekB;AASlB,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AACzC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC,MAAM,gBAAgB,GAAG,CAAC,IAAoB,EAA0B,EAAE;IACxE,OAAO,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/E,CAAC,CAAC;AAOF,MAAM,kBAAkB,GAAG,CAAC,IAAoB,EAAE,GAAkB,EAAE,EAAE;;IACtE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAiB,EAAC,GAAG,CAAC,CAAC;IAGjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,MAAM,UAAU,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,MAAM,UAAU,GAAG,MAAA,SAAS,CAAC,UAAU,mCAAI,YAAY,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAA,SAAS,CAAC,QAAQ,mCAAI,UAAU,CAAC;IAClD,MAAM,KAAK,GAAG,MAAA,SAAS,CAAC,WAAW,mCAAI,IAAI,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACrC,MAAM,EAAE,GAAG,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC;IAEpC,MAAM,EAAE,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,UAAU,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC;IACtF,MAAM,EAAE,GAAG,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;IACpC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC,CAAC;AAKF,MAAM,kBAAkB,GAAG,CAAC,IAAoB,EAAE,GAAkB,EAAE,KAAa,EAAkB,EAAE;;IACrG,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,mCAAI,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;KACjC;IACD,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACvF,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE;QACpC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE;KACrC,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,YAAY,GAAG,CAAC,IAAoB,EAAE,KAAa,EAAE,EAAE;IAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC,CAAC;AAOK,MAAM,gBAAgB,GAAG,CAAC,IAAoB,EAAkC,EAAE;;IACvF,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,OAAO,MAAK,KAAK,EAAE;QAChC,OAAO,IAAI,CAAC;KACb;IACD,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,CAAC,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,mCAAI,EAAE,CAA4B,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,SAAS,CAAC,UAAU,mCAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,MAAA,SAAS,CAAC,QAAQ,mCAAI,SAAS,CAAC,SAAS,mCAAI,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IAChG,OAAO;QACL,IAAI,EAAE,OAAc;QACpB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,qBAAY,CAAC,IAAI;QACzB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yBAAyB;gBAC/B,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,CAAC;oBACZ,IAAI,EAAE,MAAA,MAAC,SAAS,CAAC,IAAe,mCAAK,SAAS,CAAC,MAAiB,mCAAI,UAAU;oBAC9E,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;wBACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wBAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;wBAC3C,MAAM,OAAO,GAAG,EAAE,CAAC;wBACnB,MAAM,GAAG,GAAkE,EAAE,CAAC;wBAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;4BACjC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;4BACtB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;4BAC5D,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;4BAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;4BAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;4BACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;4BACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC3C,GAAG,CAAC,IAAI,CAAC;gCACP,CAAC,EAAE,EAAE;gCACL,CAAC,EAAE,EAAE;gCACL,EAAE,EAAE,KAAK,GAAG,IAAI;gCAChB,EAAE,EAAE,KAAK,GAAG,IAAI;gCAChB,CAAC,EAAE,UAAU,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC;6BAC5C,CAAC,CAAC;yBACJ;wBACD,MAAM,QAAQ,GAAa,EAAE,CAAC;wBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACnC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;4BACjB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBACzE;wBACD,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;4BACxC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;4BACjB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;yBACpD;wBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnB,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5B,CAAC;iBACF;aACyB;SAC7B;KACF,CAAC;AACJ,CAAC,CAAC;AA/DW,QAAA,gBAAgB,oBA+D3B;AAEK,MAAM,uBAAuB,GAAG,CAAC,IAAoB,EAAkC,EAAE;;IAC9F,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,CAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,KAAK,EAAE;QAChE,OAAO,IAAI,CAAC;KACb;IACD,OAAO;QACL,IAAI,EAAE,OAAc;QACpB,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,CAAC;QAC7B,QAAQ,EAAE;YACR,8BACE,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,iCAAiC,EACvC,WAAW,EAAE,KAAK,IACf,IAAI,CAAC,UAAU,KAClB,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;wBACrC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,yBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBAC9D,MAAM,IAAI,GAAG,IAAA,0BAAiB,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;4BAClD,UAAU,EAAE,4BAA4B;4BACxC,QAAQ,EAAE,0BAA0B;yBACrC,CAAC,CAAC;wBACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBACnF,CAAC,EACD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;wBACrC,OAAO,IAAA,yBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;oBACjD,CAAC,EACD,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;wBACzC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAA,yBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACtD,OAAO,IAAA,0BAAiB,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;4BAC5C,UAAU,EAAE,4BAA4B;4BACxC,QAAQ,EAAE,0BAA0B;yBACrC,CAAC,CAAC,KAAK,CAAC;oBACX,CAAC,EACD,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;wBAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAA,yBAAgB,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACtD,OAAO,IAAA,0BAAiB,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;4BAC5C,UAAU,EAAE,4BAA4B;4BACxC,QAAQ,EAAE,0BAA0B;yBACrC,CAAC,CAAC,MAAM,CAAC;oBACZ,CAAC,EACD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAC5B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,QAAQ,IACpB,IAAI,CAAC,UAAU,CAAC,KAAK,IAEC;SAC9B;KACF,CAAC;AACJ,CAAC,CAAC;AAlDW,QAAA,uBAAuB,2BAkDlC;AAGF,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAE,GAAkB,EAAE,KAAa,EAAE,EAAE;;IACtF,MAAM,aAAa,GAAG,IAAA,6BAAoB,EACxC,IAAI,EACJ,GAAG,EACH,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAG,KAAK,CAAC,0CAAE,KAAK,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CACR,CAAC;IACF,MAAM,eAAe,GAAG,IAAA,kCAAyB,EAC/C,aAAa,EACb,MAAA,IAAI,CAAC,KAAK,0CAAE,KAA4C,EACxD,sBAAsB,EACtB,GAAG,CACJ,CAAC;IACF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAA,MAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAiC,0CAAE,QAAQ,mCAAI,sBAAsB,CAAC,CAAC;IACrH,MAAM,iBAAiB,GAAG,MAAM,CAC9B,MAAA,MAAC,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAiC,0CAAE,UAAU,mCAAI,wBAAwB,CACzF,CAAC;IACF,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;IACpD,MAAM,UAAU,GAAG,oBAAoB,CAAC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC;IAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,mCAAI,qBAAqB,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,mCAAI,qBAAqB,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC;QAClB,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC;QACnB,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,WAAW;KACpB,CAAC;IAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,mCAAI,CAAC,CAAC;IAKrC,MAAM,cAAc,GAClB,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;IACvG,MAAM,gBAAgB,GAAG,cAAc,CAAC;IAExC,MAAM,SAAS,GAAG,mBAAmB,CAAC;IACtC,IAAI,OAAO,CAAC;IACZ,IAAI,UAAU,CAAC;IACf,IAAI,YAAY,CAAC;IACjB,IAAI,MAAM,CAAC;IACX,IAAI,aAAa,CAAC;IAElB,IAAI,gBAAgB,EAAE;QAEpB,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,GAAG,mBAAmB,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvE,UAAU,GAAG;YACX,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,iBAAiB;YAC9C,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,YAAY,GAAG;YACb,CAAC,EAAE,CAAC,CAAC;YACL,CAAC,EAAE,WAAW,GAAG,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,mBAAmB;SAC5B,CAAC;QACF,MAAM,GAAG,KAAK,CAAC;QACf,aAAa,GAAG,OAAO,CAAC;KACzB;SAAM;QAEL,MAAM,UAAU,GAAG,SAAS,KAAK,OAAO,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,mBAAmB,CAAC;QACpH,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACvE,UAAU,GAAG;YACX,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK,GAAG,eAAe,GAAG,iBAAiB;YAC9C,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,aAAa;SACtB,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QACzD,YAAY,GAAG;YACb,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;YAClC,CAAC,EAAE,CAAC;YACJ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;YACvC,MAAM,EAAE,CAAC;SACV,CAAC;QACF,MAAM,GAAG,UAAU,CAAC;QACpB,aAAa,GAAG,IAAI,CAAC;KACtB;IAED,OAAO;QACL,MAAM;QACN,aAAa;QACb,aAAa;QACb,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAChC,IAAoB,EACpB,KAAsB,EACtB,KAAa,EACY,EAAE;;IAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxG,MAAM,UAAU,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,cAAc,GAAG,IAAA,kCAAyB,EAAC,IAAI,CAAC,CAAC;IAEvD,OAAO;QACL,IAAI,EAAE,OAAc;QACpB,EAAE,EAAE,mBAAmB,MAAA,KAAK,CAAC,EAAE,mCAAI,KAAK,EAAE;QAC1C,IAAI,EAAE,mBAAmB,KAAK,EAAE;QAChC,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,CAAC;QAC7B,KAAK,EAAE;YACL,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;SAC/E;QACD,QAAQ,EAAE;YAER;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,6BAA6B,KAAK,EAAE;gBAC1C,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,CAAC;gBAC7B,KAAK,EAAE;oBACL,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC5F,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC5F,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK;oBACpG,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM;oBACtG,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,GAAG;iBACb;aACyB;YAC5B,cAAc;gBACZ,CAAC,CAAE;oBACC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,8BAA8B,KAAK,EAAE;oBAC3C,WAAW,EAAE,KAAK;oBAClB,KAAK,gCACH,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,IAAI,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CACxC,IAAI,CAAC,GAAG,CACN,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EACpD,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CACtD,GAAG,EAAE,EACR,UAAU,EAAE,QAAQ,IACjB,IAAA,gCAAuB,EAAC,IAAI,CAAC,KAChC,SAAS,EAAE,GAAG,GACf;iBAC4B;gBACjC,CAAC,CAAC,IAAI;YACR,QAAQ;gBACN,CAAC,CAAE,8BACC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,yBAAyB,KAAK,EAAE,EACtC,WAAW,EAAE,KAAK,IACf,IAAA,4BAAmB,EAAC,IAAI,CAAC,KAAK,CAAC,KAClC,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxF,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxF,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAChG,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAClG,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAChD,IAAI,CAAC,GAAG,CACN,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EACpD,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CACtD,GAAG,CAAC,EACP,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,QAAQ,IACpB,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,IAEM;gBAChC,CAAC,CAAE;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4BAA4B,KAAK,EAAE;oBACzC,WAAW,EAAE,KAAK;oBAClB,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxF,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EACxF,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAChG,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,EAClG,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAChD,IAAI,CAAC,GAAG,CACN,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EACpD,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CACtD,GAAG,CAAC,IACJ,IAAA,gCAAuB,EAAC,IAAI,CAAC,CACjC;iBAC0B;YACjC,KAAK,CAAC,KAAK;gBACT,CAAC,CAAE,8BACC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,yBAAyB,KAAK,EAAE,EACtC,WAAW,EAAE,KAAK,EAClB,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,EAAE,IAC3B,IAAI,CAAC,KAAK,KACb,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;4BACrC,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;4BAChD,IAAI,CAAC,CAAC,aAAa,EAAE;gCACnB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;6BAC1C;4BACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;wBAChE,CAAC,EACD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EACvF,IAAI,EAAE,KAAK,CAAC,KAAK,EACjB,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EACtG,QAAQ,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,aAAa,EAClG,UAAU,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,eAAe,EACtG,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;4BAC7C,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;4BAChD,IAAI,CAAC,CAAC,aAAa,EAAE;gCACnB,OAAO,QAAQ,CAAC;6BACjB;4BACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;wBACrC,CAAC,EACD,YAAY,EAAE,KAAK,IAChB,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,IAEK;gBAC/B,CAAC,CAAC,IAAI;YACR,WAAW,CAAC,MAAM;gBAChB,CAAC,CAAE,8BACC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,2BAA2B,KAAK,EAAE,EACxC,WAAW,EAAE,KAAK,EAClB,MAAM,EAAE,qBAAY,CAAC,IAAI,GAAG,EAAE,IAC3B,IAAI,CAAC,OAAO,KACf,QAAQ,EAAE,MAAM,EAChB,KAAK,kBACH,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;4BACrC,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;4BAChD,IAAI,CAAC,CAAC,aAAa,EAAE;gCACnB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;6BAChD;4BACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;wBACzE,CAAC,EACD,CAAC,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,EAC1F,KAAK,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,EAClG,MAAM,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EACpG,YAAY,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,EACzG,WAAW,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EACzG,IAAI,EAAE,IAAA,yBAAgB,EAAC,WAAW,EAAE,IAAI,CAAC,EACzC,QAAQ,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,eAAe,EACpG,UAAU,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,iBAAiB,EACxG,SAAS,EAAE,CAAC,EAAW,EAAE,GAAkB,EAAE,EAAE;4BAC7C,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;4BAChD,IAAI,CAAC,CAAC,aAAa,EAAE;gCACnB,OAAO,QAAQ,CAAC;6BACjB;4BACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;wBACrC,CAAC,EACD,YAAY,EAAE,KAAK,EACnB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,SAAS,IACZ,MAAA,IAAI,CAAC,OAAO,0CAAE,KAAK,IAEG;gBAC/B,CAAC,CAAC,IAAI;SACT,CAAC,MAAM,CAAC,OAAO,CAA2B;KAC5C,CAAC;AACJ,CAAC,CAAC;AA9KW,QAAA,kBAAkB,sBA8K7B","file":"wing.js","sourcesContent":["import type { IExtensionGroupMarkSpec } from '@visactor/vchart';\nimport { LayoutZIndex } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec, StorylineWingDirection } from '../interface';\nimport {\n type ICustomMarkSpec,\n type LayoutContext,\n type StorylinePoint,\n buildRichContent,\n getImageBackgroundStyle,\n getChartGeometry,\n getRegionGeometry,\n getThemeColor,\n getTitleImageSize,\n normalizeLayout,\n omitImageLayoutSpec,\n resolveAdaptiveLineHeight,\n resolveTitleFontSize,\n shouldShowImageBackground\n} from './common';\n\n// wing 布局:参考残奥时间线信息图\n// - 主脉络为椭圆弧的「翅膀」造型,可通过 direction 配置左右朝向\n// - direction: 'left' → 圆心锚在画布左侧,弧凸向右展开(默认)\n// - direction: 'right' → 圆心锚在画布右侧,弧凸向左展开\n// - 圆形 image 嵌在弧线上(中心位于弧线)\n// - title(年份感大字 + 主题色) + content 在 image 一侧水平展开\n// - 左右交替(弧线左侧 / 右侧)让节点错落\nconst WING_BLOCK_IMAGE_SIZE = 160;\nconst WING_TEXT_GAP_FROM_IMAGE = 14;\nconst WING_TITLE_LINE_HEIGHT = 30;\nconst WING_TITLE_FONT_SIZE = 22;\nconst WING_CONTENT_LINE_HEIGHT = 17;\nconst WING_CONTENT_FONT_SIZE = 12;\n// title + content 区域宽度\nconst WING_TEXT_BOX_WIDTH = 240;\n// title + content 区域总高度\nconst WING_TEXT_BOX_HEIGHT = 110;\nconst WING_TITLE_TO_CONTENT_GAP = 4;\nconst WING_TITLE_IMAGE_WIDTH_RATIO = 0.6;\nconst WING_TITLE_IMAGE_MAX_WIDTH = 820;\n\nconst getWingDirection = (spec: IStorylineSpec): StorylineWingDirection => {\n return normalizeLayout(spec.layout).direction === 'right' ? 'right' : 'left';\n};\n\n/**\n * 计算 wing 弧线的几何参数:\n * - direction='left':圆心位于 inner 左侧,采样区间 -70°→70°(cos>0),弧线点位于圆心右侧;\n * - direction='right':圆心位于 inner 右侧,采样区间 110°→250°(cos<0),弧线点位于圆心左侧。\n */\nconst getWingArcGeometry = (spec: IStorylineSpec, ctx: LayoutContext) => {\n const { width, height, startX, startY } = getRegionGeometry(ctx);\n // width/height 已经是 VChart 减去 spec.padding 后的 region 大小\n // 不要再重复减去 padding,直接用 region 几何信息定位弧线\n const innerWidth = Math.max(width, 1);\n const innerHeight = Math.max(height, 1);\n const layoutOpt = normalizeLayout(spec.layout);\n const direction = getWingDirection(spec);\n const defaultStart = direction === 'right' ? 110 : -70;\n const defaultEnd = direction === 'right' ? 250 : 70;\n const startAngle = layoutOpt.startAngle ?? defaultStart;\n const endAngle = layoutOpt.endAngle ?? defaultEnd;\n const ratio = layoutOpt.radiusRatio ?? 0.92;\n const ry = (innerHeight / 2) * ratio;\n const rx = innerWidth * 0.6 * ratio;\n // direction='right':圆心锚在 region 右侧,弧线点在左侧;direction='left':圆心锚在左侧\n const cx = direction === 'right' ? startX + innerWidth - rx * 0.1 : startX + rx * 0.1;\n const cy = startY + innerHeight / 2;\n return { cx, cy, rx, ry, startAngle, endAngle };\n};\n\n/**\n * 沿弧采样 block 中心 —— image 的圆心直接在弧线上,与时间线视觉对齐。\n */\nconst getWingBlockCenter = (spec: IStorylineSpec, ctx: LayoutContext, index: number): StorylinePoint => {\n const arc = getWingArcGeometry(spec, ctx);\n const count = spec.data?.length ?? 0;\n if (count <= 0) {\n return { x: arc.cx, y: arc.cy };\n }\n const t = count === 1 ? 0.5 : index / (count - 1);\n const angle = ((arc.startAngle + (arc.endAngle - arc.startAngle) * t) / 180) * Math.PI;\n return {\n x: arc.cx + Math.cos(angle) * arc.rx,\n y: arc.cy + Math.sin(angle) * arc.ry\n };\n};\n\n/**\n * 节点文字侧向:\n * - 左翅膀(弧凸向右):偶数节点的文字排在弧线左侧;\n * - 右翅膀(弧凸向左):偶数节点的文字排在弧线右侧(即镜像)。\n */\nconst isTextOnLeft = (spec: IStorylineSpec, index: number) => {\n const direction = getWingDirection(spec);\n return direction === 'right' ? index % 2 === 1 : index % 2 === 0;\n};\n\n/**\n * 主脉络曲线 mark:贯穿所有 block 的椭圆弧。\n * 用变宽的 filled path 模拟\"丝带\"——起点窄、终点宽,与信息图视觉一致。\n * 默认展示;用户可通过 spec.line.visible = false 关闭。\n */\nexport const buildWingArcMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec | null => {\n if (spec.line?.visible === false) {\n return null;\n }\n const themeColor = getThemeColor(spec);\n const lineStyle = (spec.line?.style ?? {}) as Record<string, unknown>;\n const startWidth = Math.max(Number(lineStyle.startWidth ?? 50), 0.5);\n const endWidth = Math.max(Number(lineStyle.endWidth ?? lineStyle.lineWidth ?? 350), startWidth);\n return {\n type: 'group' as any,\n name: 'storyline-wing-arc',\n zIndex: LayoutZIndex.Mark,\n children: [\n {\n type: 'path',\n name: 'storyline-wing-arc-path',\n interactive: false,\n style: {\n stroke: false,\n lineWidth: 0,\n fill: (lineStyle.fill as string) ?? (lineStyle.stroke as string) ?? themeColor,\n opacity: 0.95,\n path: (_d: unknown, ctx: LayoutContext) => {\n const arc = getWingArcGeometry(spec, ctx);\n const span = arc.endAngle - arc.startAngle;\n const samples = 96;\n const pts: { x: number; y: number; nx: number; ny: number; w: number }[] = [];\n for (let i = 0; i <= samples; i++) {\n const t = i / samples;\n const angle = ((arc.startAngle + span * t) / 180) * Math.PI;\n const cx = arc.cx + Math.cos(angle) * arc.rx;\n const cy = arc.cy + Math.sin(angle) * arc.ry;\n const nxRaw = Math.cos(angle) / arc.rx;\n const nyRaw = Math.sin(angle) / arc.ry;\n const nLen = Math.hypot(nxRaw, nyRaw) || 1;\n pts.push({\n x: cx,\n y: cy,\n nx: nxRaw / nLen,\n ny: nyRaw / nLen,\n w: startWidth + (endWidth - startWidth) * t\n });\n }\n const segments: string[] = [];\n for (let i = 0; i < pts.length; i++) {\n const p = pts[i];\n const x = p.x + p.nx * (p.w / 2);\n const y = p.y + p.ny * (p.w / 2);\n segments.push(`${i === 0 ? 'M' : 'L'} ${x.toFixed(2)} ${y.toFixed(2)}`);\n }\n for (let i = pts.length - 1; i >= 0; i--) {\n const p = pts[i];\n const x = p.x - p.nx * (p.w / 2);\n const y = p.y - p.ny * (p.w / 2);\n segments.push(`L ${x.toFixed(2)} ${y.toFixed(2)}`);\n }\n segments.push('Z');\n return segments.join(' ');\n }\n }\n } as ICustomMarkSpec<'path'>\n ]\n };\n};\n\nexport const buildWingTitleImageMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec | null => {\n if (!spec.titleImage?.image || spec.titleImage.visible === false) {\n return null;\n }\n return {\n type: 'group' as any,\n name: 'storyline-wing-title-image',\n zIndex: LayoutZIndex.Mark + 8,\n children: [\n {\n type: 'image',\n name: 'storyline-wing-title-image-node',\n interactive: false,\n ...spec.titleImage,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const { width, height, startX } = getChartGeometry(ctx, spec);\n const size = getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n });\n return getWingDirection(spec) === 'right' ? startX : startX + width - size.width;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n return getChartGeometry(ctx, spec).startY + 12;\n },\n width: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n }).width;\n },\n height: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n }).height;\n },\n image: spec.titleImage.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.titleImage.style\n }\n } as ICustomMarkSpec<'image'>\n ]\n };\n};\n\n// text box 与 image 的水平间距(image 左边缘到 text box 右边缘的距离)\nconst WING_TEXT_IMAGE_GAP = 120;\n\nconst getWingBlockMetrics = (spec: IStorylineSpec, ctx: LayoutContext, index: number) => {\n const titleFontSize = resolveTitleFontSize(\n spec,\n ctx,\n spec.data?.[index]?.title,\n WING_TEXT_BOX_WIDTH,\n WING_TITLE_FONT_SIZE,\n [8, 30]\n );\n const titleLineHeight = resolveAdaptiveLineHeight(\n titleFontSize,\n spec.title?.style as Record<string, unknown> | undefined,\n WING_TITLE_LINE_HEIGHT,\n 1.3\n );\n const contentFontSize = Number((spec.content?.style as Record<string, unknown>)?.fontSize ?? WING_CONTENT_FONT_SIZE);\n const contentLineHeight = Number(\n (spec.content?.style as Record<string, unknown>)?.lineHeight ?? WING_CONTENT_LINE_HEIGHT\n );\n const titleToContentGap = WING_TITLE_TO_CONTENT_GAP;\n const textHeight = WING_TEXT_BOX_HEIGHT;\n const contentHeight = 100000;\n\n const imageWidth = Number(spec.image?.width ?? WING_BLOCK_IMAGE_SIZE);\n const imageHeight = Number(spec.image?.height ?? WING_BLOCK_IMAGE_SIZE);\n const imageBox = {\n x: -imageWidth / 2,\n y: -imageHeight / 2,\n width: imageWidth,\n height: imageHeight\n };\n\n const direction = getWingDirection(spec);\n const count = spec.data?.length ?? 0;\n\n // 特殊块的垂直布局:文字在 image 下方,水平居中\n // - direction='right' → 最后一个 block\n // - direction='left' → 第一个 block\n const isSpecialBelow =\n (direction === 'right' && count > 0 && index === count - 1) || (direction === 'left' && index === 0);\n const isVerticalLayout = isSpecialBelow;\n\n const textWidth = WING_TEXT_BOX_WIDTH;\n let textBox;\n let contentBox;\n let connectorBox;\n let onLeft;\n let verticalAlign; // 'below' | 'above' | null\n\n if (isVerticalLayout) {\n // 垂直布局:text 在 image 下方,水平居中\n const textX = -textWidth / 2;\n const textY = imageHeight / 2 + WING_TEXT_IMAGE_GAP;\n textBox = { x: textX, y: textY, width: textWidth, height: textHeight };\n contentBox = {\n x: textX,\n y: textY + titleLineHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n // 垂直引导线:从 image 底部到 text 顶部\n connectorBox = {\n x: -1,\n y: imageHeight / 2,\n width: 2,\n height: WING_TEXT_IMAGE_GAP\n };\n onLeft = false;\n verticalAlign = 'below';\n } else {\n // 水平布局(默认):text 在 image 一侧\n const textOnLeft = direction === 'right';\n const textX = textOnLeft ? -imageWidth / 2 - WING_TEXT_IMAGE_GAP - textWidth : imageWidth / 2 + WING_TEXT_IMAGE_GAP;\n const textY = -textHeight / 2;\n textBox = { x: textX, y: textY, width: textWidth, height: textHeight };\n contentBox = {\n x: textX,\n y: textY + titleLineHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n // 水平引导线\n const imageEdgeX = textOnLeft ? -imageWidth / 2 : imageWidth / 2;\n const textEdgeX = textOnLeft ? textX + textWidth : textX;\n connectorBox = {\n x: Math.min(imageEdgeX, textEdgeX),\n y: 0,\n width: Math.abs(textEdgeX - imageEdgeX),\n height: 2\n };\n onLeft = textOnLeft;\n verticalAlign = null;\n }\n\n return {\n onLeft,\n verticalAlign,\n titleFontSize,\n titleLineHeight,\n contentFontSize,\n contentLineHeight,\n imageBox,\n textBox,\n contentBox,\n connectorBox\n };\n};\n\nexport const buildWingBlockMark = (\n spec: IStorylineSpec,\n block: IStorylineBlock,\n index: number\n): IExtensionGroupMarkSpec => {\n const hasImage = !!block.image;\n const contentText = Array.isArray(block.content) ? block.content : block.content ? [block.content] : [];\n const themeColor = getThemeColor(spec);\n // image 背后的装饰图元(halo)\n const showBackground = shouldShowImageBackground(spec);\n\n return {\n type: 'group' as any,\n id: `storyline-block-${block.id ?? index}`,\n name: `storyline-block-${index}`,\n zIndex: LayoutZIndex.Mark + 1,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockCenter(spec, ctx, index).x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockCenter(spec, ctx, index).y\n },\n children: [\n // 引导线:连接 image 和 text box\n {\n type: 'rect',\n name: `storyline-block-connector-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 2,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.height,\n fill: themeColor,\n opacity: 0.6\n }\n } as ICustomMarkSpec<'rect'>,\n showBackground\n ? ({\n type: 'symbol',\n name: `storyline-block-image-halo-${index}`,\n interactive: false,\n style: {\n x: 0,\n y: 0,\n size: (_d: unknown, ctx: LayoutContext) =>\n Math.max(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) + 12,\n symbolType: 'circle',\n ...getImageBackgroundStyle(spec),\n lineWidth: 1.5\n }\n } as ICustomMarkSpec<'symbol'>)\n : null,\n hasImage\n ? ({\n type: 'image',\n name: `storyline-block-image-${index}`,\n interactive: false,\n ...omitImageLayoutSpec(spec.image),\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.height,\n cornerRadius: (_d: unknown, ctx: LayoutContext) =>\n Math.min(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) / 2,\n image: block.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.image?.style\n }\n } as ICustomMarkSpec<'image'>)\n : ({\n type: 'rect',\n name: `storyline-block-image-bg-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.height,\n cornerRadius: (_d: unknown, ctx: LayoutContext) =>\n Math.min(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) / 2,\n ...getImageBackgroundStyle(spec)\n }\n } as ICustomMarkSpec<'rect'>),\n block.title\n ? ({\n type: 'text',\n name: `storyline-block-title-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 10,\n ...spec.title,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return m.textBox.x + m.textBox.width / 2;\n }\n return m.onLeft ? m.textBox.x + m.textBox.width : m.textBox.x;\n },\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).textBox.y,\n text: block.title,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).textBox.width,\n fontSize: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).titleFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).titleLineHeight,\n fontWeight: 'bold',\n fill: themeColor,\n stroke: '#fff',\n lineWidth: 5,\n lineJoin: 'round',\n textAlign: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return 'center';\n }\n return m.onLeft ? 'right' : 'left';\n },\n textBaseline: 'top',\n ...spec.title?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null,\n contentText.length\n ? ({\n type: 'text',\n name: `storyline-block-content-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 10,\n ...spec.content,\n textType: 'rich',\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return m.contentBox.x + m.contentBox.width / 2;\n }\n return m.onLeft ? m.contentBox.x + m.contentBox.width : m.contentBox.x;\n },\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.height,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.width,\n heightLimit: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.height,\n text: buildRichContent(contentText, spec),\n fontSize: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentLineHeight,\n textAlign: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return 'center';\n }\n return m.onLeft ? 'right' : 'left';\n },\n textBaseline: 'top',\n wordBreak: 'break-word',\n ellipsis: '...',\n fill: '#1f2430',\n ...spec.content?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null\n ].filter(Boolean) as ICustomMarkSpec<any>[]\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/charts/storyline/layouts/wing.ts"],"names":[],"mappings":"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","file":"wing.js","sourcesContent":["import type { IExtensionGroupMarkSpec } from '@visactor/vchart';\nimport { LayoutZIndex } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec, StorylineWingDirection } from '../interface';\nimport {\n type ICustomMarkSpec,\n type LayoutContext,\n type StorylinePoint,\n BLOCK_TITLE_MAX_LINES,\n buildPlainContent,\n getBlockTitleHeight,\n getImageBackgroundStyle,\n getChartGeometry,\n getRegionGeometry,\n getThemeColor,\n getTitleImageSize,\n normalizeLayout,\n omitImageLayoutSpec,\n resolveAdaptiveLineHeight,\n resolveTitleFontSize,\n shouldShowImageBackground\n} from './common';\n\n// wing 布局:参考残奥时间线信息图\n// - 主脉络为椭圆弧的「翅膀」造型,可通过 direction 配置左右朝向\n// - direction: 'left' → 圆心锚在画布左侧,弧凸向右展开(默认)\n// - direction: 'right' → 圆心锚在画布右侧,弧凸向左展开\n// - 圆形 image 嵌在弧线上(中心位于弧线)\n// - title(年份感大字 + 主题色) + content 在 image 一侧水平展开\n// - 左右交替(弧线左侧 / 右侧)让节点错落\nconst WING_BLOCK_IMAGE_SIZE = 160;\nconst WING_TEXT_GAP_FROM_IMAGE = 14;\nconst WING_TITLE_LINE_HEIGHT = 30;\nconst WING_TITLE_FONT_SIZE = 22;\nconst WING_CONTENT_LINE_HEIGHT = 17;\nconst WING_CONTENT_FONT_SIZE = 12;\n// title + content 区域宽度\nconst WING_TEXT_BOX_WIDTH = 240;\n// title + content 区域总高度\nconst WING_TEXT_BOX_HEIGHT = 110;\nconst WING_TITLE_TO_CONTENT_GAP = 4;\nconst WING_TITLE_IMAGE_WIDTH_RATIO = 0.6;\nconst WING_TITLE_IMAGE_MAX_WIDTH = 820;\n\nconst getWingDirection = (spec: IStorylineSpec): StorylineWingDirection => {\n return normalizeLayout(spec.layout).direction === 'right' ? 'right' : 'left';\n};\n\n/**\n * 计算 wing 弧线的几何参数:\n * - direction='left':圆心位于 inner 左侧,采样区间 -70°→70°(cos>0),弧线点位于圆心右侧;\n * - direction='right':圆心位于 inner 右侧,采样区间 110°→250°(cos<0),弧线点位于圆心左侧。\n */\nconst getWingArcGeometry = (spec: IStorylineSpec, ctx: LayoutContext) => {\n const { width, height, startX, startY } = getRegionGeometry(ctx);\n // width/height 已经是 VChart 减去 spec.padding 后的 region 大小\n // 不要再重复减去 padding,直接用 region 几何信息定位弧线\n const innerWidth = Math.max(width, 1);\n const innerHeight = Math.max(height, 1);\n const layoutOpt = normalizeLayout(spec.layout);\n const direction = getWingDirection(spec);\n const defaultStart = direction === 'right' ? 110 : -70;\n const defaultEnd = direction === 'right' ? 250 : 70;\n const startAngle = layoutOpt.startAngle ?? defaultStart;\n const endAngle = layoutOpt.endAngle ?? defaultEnd;\n const ratio = layoutOpt.radiusRatio ?? 0.92;\n const ry = (innerHeight / 2) * ratio;\n const rx = innerWidth * 0.6 * ratio;\n // direction='right':圆心锚在 region 右侧,弧线点在左侧;direction='left':圆心锚在左侧\n const cx = direction === 'right' ? startX + innerWidth - rx * 0.1 : startX + rx * 0.1;\n const cy = startY + innerHeight / 2;\n return { cx, cy, rx, ry, startAngle, endAngle };\n};\n\n/**\n * 沿弧采样 block 中心 —— image 的圆心直接在弧线上,与时间线视觉对齐。\n */\nconst getWingBlockCenter = (spec: IStorylineSpec, ctx: LayoutContext, index: number): StorylinePoint => {\n const arc = getWingArcGeometry(spec, ctx);\n const count = spec.data?.length ?? 0;\n if (count <= 0) {\n return { x: arc.cx, y: arc.cy };\n }\n const t = count === 1 ? 0.5 : index / (count - 1);\n const angle = ((arc.startAngle + (arc.endAngle - arc.startAngle) * t) / 180) * Math.PI;\n return {\n x: arc.cx + Math.cos(angle) * arc.rx,\n y: arc.cy + Math.sin(angle) * arc.ry\n };\n};\n\n/**\n * 节点文字侧向:\n * - 左翅膀(弧凸向右):偶数节点的文字排在弧线左侧;\n * - 右翅膀(弧凸向左):偶数节点的文字排在弧线右侧(即镜像)。\n */\nconst isTextOnLeft = (spec: IStorylineSpec, index: number) => {\n const direction = getWingDirection(spec);\n return direction === 'right' ? index % 2 === 1 : index % 2 === 0;\n};\n\n/**\n * 主脉络曲线 mark:贯穿所有 block 的椭圆弧。\n * 用变宽的 filled path 模拟\"丝带\"——起点窄、终点宽,与信息图视觉一致。\n * 默认展示;用户可通过 spec.line.visible = false 关闭。\n */\nexport const buildWingArcMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec | null => {\n if (spec.line?.visible === false) {\n return null;\n }\n const themeColor = getThemeColor(spec);\n const lineStyle = (spec.line?.style ?? {}) as Record<string, unknown>;\n const startWidth = Math.max(Number(lineStyle.startWidth ?? 50), 0.5);\n const endWidth = Math.max(Number(lineStyle.endWidth ?? lineStyle.lineWidth ?? 350), startWidth);\n return {\n type: 'group' as any,\n name: 'storyline-wing-arc',\n zIndex: LayoutZIndex.Mark,\n children: [\n {\n type: 'path',\n name: 'storyline-wing-arc-path',\n interactive: false,\n style: {\n stroke: false,\n lineWidth: 0,\n fill: (lineStyle.fill as string) ?? (lineStyle.stroke as string) ?? themeColor,\n opacity: 0.95,\n path: (_d: unknown, ctx: LayoutContext) => {\n const arc = getWingArcGeometry(spec, ctx);\n const span = arc.endAngle - arc.startAngle;\n const samples = 96;\n const pts: { x: number; y: number; nx: number; ny: number; w: number }[] = [];\n for (let i = 0; i <= samples; i++) {\n const t = i / samples;\n const angle = ((arc.startAngle + span * t) / 180) * Math.PI;\n const cx = arc.cx + Math.cos(angle) * arc.rx;\n const cy = arc.cy + Math.sin(angle) * arc.ry;\n const nxRaw = Math.cos(angle) / arc.rx;\n const nyRaw = Math.sin(angle) / arc.ry;\n const nLen = Math.hypot(nxRaw, nyRaw) || 1;\n pts.push({\n x: cx,\n y: cy,\n nx: nxRaw / nLen,\n ny: nyRaw / nLen,\n w: startWidth + (endWidth - startWidth) * t\n });\n }\n const segments: string[] = [];\n for (let i = 0; i < pts.length; i++) {\n const p = pts[i];\n const x = p.x + p.nx * (p.w / 2);\n const y = p.y + p.ny * (p.w / 2);\n segments.push(`${i === 0 ? 'M' : 'L'} ${x.toFixed(2)} ${y.toFixed(2)}`);\n }\n for (let i = pts.length - 1; i >= 0; i--) {\n const p = pts[i];\n const x = p.x - p.nx * (p.w / 2);\n const y = p.y - p.ny * (p.w / 2);\n segments.push(`L ${x.toFixed(2)} ${y.toFixed(2)}`);\n }\n segments.push('Z');\n return segments.join(' ');\n }\n }\n } as ICustomMarkSpec<'path'>\n ]\n };\n};\n\nexport const buildWingTitleImageMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec | null => {\n if (!spec.titleImage?.image || spec.titleImage.visible === false) {\n return null;\n }\n return {\n type: 'group' as any,\n name: 'storyline-wing-title-image',\n zIndex: LayoutZIndex.Mark + 8,\n children: [\n {\n type: 'image',\n name: 'storyline-wing-title-image-node',\n interactive: false,\n ...spec.titleImage,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const { width, height, startX } = getChartGeometry(ctx, spec);\n const size = getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n });\n return getWingDirection(spec) === 'right' ? startX : startX + width - size.width;\n },\n y: (_d: unknown, ctx: LayoutContext) => {\n return getChartGeometry(ctx, spec).startY + 12;\n },\n width: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n }).width;\n },\n height: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, {\n widthRatio: WING_TITLE_IMAGE_WIDTH_RATIO,\n maxWidth: WING_TITLE_IMAGE_MAX_WIDTH\n }).height;\n },\n image: spec.titleImage.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.titleImage.style\n }\n } as ICustomMarkSpec<'image'>\n ]\n };\n};\n\n// text box 与 image 的水平间距(image 左边缘到 text box 右边缘的距离)\nconst WING_TEXT_IMAGE_GAP = 120;\n\nconst getWingBlockMetrics = (spec: IStorylineSpec, ctx: LayoutContext, index: number) => {\n const titleFontSize = resolveTitleFontSize(\n spec,\n ctx,\n spec.data?.[index]?.title,\n WING_TEXT_BOX_WIDTH,\n WING_TITLE_FONT_SIZE,\n [8, 30]\n );\n const titleLineHeight = resolveAdaptiveLineHeight(\n titleFontSize,\n spec.title?.style as Record<string, unknown> | undefined,\n WING_TITLE_LINE_HEIGHT,\n 1.3\n );\n const titleHeight = getBlockTitleHeight(titleLineHeight, spec.data?.[index]?.title);\n const contentFontSize = Number((spec.content?.style as Record<string, unknown>)?.fontSize ?? WING_CONTENT_FONT_SIZE);\n const contentLineHeight = Number(\n (spec.content?.style as Record<string, unknown>)?.lineHeight ?? WING_CONTENT_LINE_HEIGHT\n );\n const titleToContentGap = WING_TITLE_TO_CONTENT_GAP;\n const textHeight = WING_TEXT_BOX_HEIGHT;\n const contentHeight = 100000;\n\n const imageWidth = Number(spec.image?.width ?? WING_BLOCK_IMAGE_SIZE);\n const imageHeight = Number(spec.image?.height ?? WING_BLOCK_IMAGE_SIZE);\n const imageBox = {\n x: -imageWidth / 2,\n y: -imageHeight / 2,\n width: imageWidth,\n height: imageHeight\n };\n\n const direction = getWingDirection(spec);\n const count = spec.data?.length ?? 0;\n\n // 特殊块的垂直布局:文字在 image 下方,水平居中\n // - direction='right' → 最后一个 block\n // - direction='left' → 第一个 block\n const isSpecialBelow =\n (direction === 'right' && count > 0 && index === count - 1) || (direction === 'left' && index === 0);\n const isVerticalLayout = isSpecialBelow;\n\n const textWidth = WING_TEXT_BOX_WIDTH;\n let textBox;\n let contentBox;\n let connectorBox;\n let onLeft;\n let verticalAlign; // 'below' | 'above' | null\n\n if (isVerticalLayout) {\n // 垂直布局:text 在 image 下方,水平居中\n const textX = -textWidth / 2;\n const textY = imageHeight / 2 + WING_TEXT_IMAGE_GAP;\n textBox = { x: textX, y: textY, width: textWidth, height: textHeight };\n contentBox = {\n x: textX,\n y: textY + titleHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n // 垂直引导线:从 image 底部到 text 顶部\n connectorBox = {\n x: -1,\n y: imageHeight / 2,\n width: 2,\n height: WING_TEXT_IMAGE_GAP\n };\n onLeft = false;\n verticalAlign = 'below';\n } else {\n // 水平布局(默认):text 在 image 一侧\n const textOnLeft = direction === 'right';\n const textX = textOnLeft ? -imageWidth / 2 - WING_TEXT_IMAGE_GAP - textWidth : imageWidth / 2 + WING_TEXT_IMAGE_GAP;\n const textY = -textHeight / 2;\n textBox = { x: textX, y: textY, width: textWidth, height: textHeight };\n contentBox = {\n x: textX,\n y: textY + titleHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n // 水平引导线\n const imageEdgeX = textOnLeft ? -imageWidth / 2 : imageWidth / 2;\n const textEdgeX = textOnLeft ? textX + textWidth : textX;\n connectorBox = {\n x: Math.min(imageEdgeX, textEdgeX),\n y: 0,\n width: Math.abs(textEdgeX - imageEdgeX),\n height: 2\n };\n onLeft = textOnLeft;\n verticalAlign = null;\n }\n\n return {\n onLeft,\n verticalAlign,\n titleFontSize,\n titleLineHeight,\n contentFontSize,\n contentLineHeight,\n imageBox,\n textBox,\n contentBox,\n connectorBox\n };\n};\n\nexport const buildWingBlockMark = (\n spec: IStorylineSpec,\n block: IStorylineBlock,\n index: number\n): IExtensionGroupMarkSpec => {\n const hasImage = !!block.image;\n const contentText = Array.isArray(block.content) ? block.content : block.content ? [block.content] : [];\n const themeColor = getThemeColor(spec);\n // image 背后的装饰图元(halo)\n const showBackground = shouldShowImageBackground(spec);\n\n return {\n type: 'group' as any,\n id: `storyline-block-${block.id ?? index}`,\n name: `storyline-block-${index}`,\n zIndex: LayoutZIndex.Mark + 1,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockCenter(spec, ctx, index).x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockCenter(spec, ctx, index).y\n },\n children: [\n // 引导线:连接 image 和 text box\n {\n type: 'rect',\n name: `storyline-block-connector-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 2,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).connectorBox.height,\n fill: themeColor,\n opacity: 0.6\n }\n } as ICustomMarkSpec<'rect'>,\n showBackground\n ? ({\n type: 'symbol',\n name: `storyline-block-image-halo-${index}`,\n interactive: false,\n style: {\n x: 0,\n y: 0,\n size: (_d: unknown, ctx: LayoutContext) =>\n Math.max(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) + 12,\n symbolType: 'circle',\n ...getImageBackgroundStyle(spec),\n lineWidth: 1.5\n }\n } as ICustomMarkSpec<'symbol'>)\n : null,\n hasImage\n ? ({\n type: 'image',\n name: `storyline-block-image-${index}`,\n interactive: false,\n ...omitImageLayoutSpec(spec.image),\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.height,\n cornerRadius: (_d: unknown, ctx: LayoutContext) =>\n Math.min(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) / 2,\n image: block.image,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'contain',\n imagePosition: 'center',\n ...spec.image?.style\n }\n } as ICustomMarkSpec<'image'>)\n : ({\n type: 'rect',\n name: `storyline-block-image-bg-${index}`,\n interactive: false,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.x,\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).imageBox.height,\n cornerRadius: (_d: unknown, ctx: LayoutContext) =>\n Math.min(\n getWingBlockMetrics(spec, ctx, index).imageBox.width,\n getWingBlockMetrics(spec, ctx, index).imageBox.height\n ) / 2,\n ...getImageBackgroundStyle(spec)\n }\n } as ICustomMarkSpec<'rect'>),\n block.title\n ? ({\n type: 'text',\n name: `storyline-block-title-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 10,\n ...spec.title,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return m.textBox.x + m.textBox.width / 2;\n }\n return m.onLeft ? m.textBox.x + m.textBox.width : m.textBox.x;\n },\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).textBox.y,\n text: block.title,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).textBox.width,\n height: (_d: unknown, ctx: LayoutContext) =>\n getWingBlockMetrics(spec, ctx, index).titleLineHeight * BLOCK_TITLE_MAX_LINES,\n heightLimit: (_d: unknown, ctx: LayoutContext) =>\n getWingBlockMetrics(spec, ctx, index).titleLineHeight * BLOCK_TITLE_MAX_LINES,\n lineClamp: BLOCK_TITLE_MAX_LINES,\n fontSize: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).titleFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).titleLineHeight,\n fontWeight: 'bold',\n fill: themeColor,\n stroke: '#fff',\n lineWidth: 5,\n lineJoin: 'round',\n textAlign: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return 'center';\n }\n return m.onLeft ? 'right' : 'left';\n },\n textBaseline: 'top',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ellipsis: '...',\n ...spec.title?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null,\n contentText.length\n ? ({\n type: 'text',\n name: `storyline-block-content-${index}`,\n interactive: false,\n zIndex: LayoutZIndex.Mark + 10,\n ...spec.content,\n style: {\n x: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return m.contentBox.x + m.contentBox.width / 2;\n }\n return m.onLeft ? m.contentBox.x + m.contentBox.width : m.contentBox.x;\n },\n y: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.y,\n width: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.width,\n height: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.height,\n maxLineWidth: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.width,\n heightLimit: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentBox.height,\n text: buildPlainContent(contentText),\n fontSize: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentFontSize,\n lineHeight: (_d: unknown, ctx: LayoutContext) => getWingBlockMetrics(spec, ctx, index).contentLineHeight,\n textAlign: (_d: unknown, ctx: LayoutContext) => {\n const m = getWingBlockMetrics(spec, ctx, index);\n if (m.verticalAlign) {\n return 'center';\n }\n return m.onLeft ? 'right' : 'left';\n },\n textBaseline: 'top',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n ellipsis: '...',\n fill: '#1f2430',\n ...spec.content?.style\n }\n } as ICustomMarkSpec<'text'>)\n : null\n ].filter(Boolean) as ICustomMarkSpec<any>[]\n };\n};\n"]}
|
|
@@ -180,4 +180,4 @@ function appendBarLinkConfig(rawSpec, barLinkSpec) {
|
|
|
180
180
|
|
|
181
181
|
exports.groupBarsByFields = groupBarsByFields, exports.getLinkData = getLinkData,
|
|
182
182
|
exports.getBarLinkConfig = getBarLinkConfig, exports.appendBarLinkConfig = appendBarLinkConfig;
|
|
183
|
-
//# sourceMappingURL=util.js.map
|
|
183
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -84,4 +84,4 @@ function appendBarRegressionLineConfig(chartSpec, spec) {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
exports.getBarRegressionLineConfig = getBarRegressionLineConfig, exports.appendBarRegressionLineConfig = appendBarRegressionLineConfig;
|
|
87
|
-
//# sourceMappingURL=index.js.map
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -76,4 +76,4 @@ function appendHistogramRegressionLineConfig(chartSpec, spec) {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
exports.getHistogramRegressionLineConfig = getHistogramRegressionLineConfig, exports.appendHistogramRegressionLineConfig = appendHistogramRegressionLineConfig;
|
|
79
|
-
//# sourceMappingURL=index.js.map
|
|
79
|
+
//# sourceMappingURL=index.js.map
|