@visactor/vchart-extension 2.1.0-alpha.20 → 2.1.0-alpha.22

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.
Files changed (53) hide show
  1. package/build/index.js +455 -419
  2. package/build/index.min.js +2 -2
  3. package/cjs/charts/storyline/interface.d.ts +2 -2
  4. package/cjs/charts/storyline/interface.js.map +1 -1
  5. package/cjs/charts/storyline/layouts/arc.d.ts +1 -1
  6. package/cjs/charts/storyline/layouts/arc.js +39 -102
  7. package/cjs/charts/storyline/layouts/arc.js.map +1 -1
  8. package/cjs/charts/storyline/layouts/clock.d.ts +1 -1
  9. package/cjs/charts/storyline/layouts/clock.js +40 -24
  10. package/cjs/charts/storyline/layouts/clock.js.map +1 -1
  11. package/cjs/charts/storyline/layouts/common.d.ts +54 -1
  12. package/cjs/charts/storyline/layouts/common.js +188 -23
  13. package/cjs/charts/storyline/layouts/common.js.map +1 -1
  14. package/cjs/charts/storyline/layouts/default.js +29 -14
  15. package/cjs/charts/storyline/layouts/default.js.map +1 -1
  16. package/cjs/charts/storyline/layouts/ladder.js +29 -13
  17. package/cjs/charts/storyline/layouts/ladder.js.map +1 -1
  18. package/cjs/charts/storyline/layouts/landscape.js +22 -23
  19. package/cjs/charts/storyline/layouts/landscape.js.map +1 -1
  20. package/cjs/charts/storyline/layouts/portrait.d.ts +1 -1
  21. package/cjs/charts/storyline/layouts/portrait.js +64 -56
  22. package/cjs/charts/storyline/layouts/portrait.js.map +1 -1
  23. package/cjs/charts/storyline/layouts/wing.d.ts +1 -0
  24. package/cjs/charts/storyline/layouts/wing.js +97 -55
  25. package/cjs/charts/storyline/layouts/wing.js.map +1 -1
  26. package/cjs/charts/storyline/storyline-transformer.js +18 -14
  27. package/cjs/charts/storyline/storyline-transformer.js.map +1 -1
  28. package/esm/charts/storyline/interface.d.ts +2 -2
  29. package/esm/charts/storyline/interface.js.map +1 -1
  30. package/esm/charts/storyline/layouts/arc.d.ts +1 -1
  31. package/esm/charts/storyline/layouts/arc.js +35 -100
  32. package/esm/charts/storyline/layouts/arc.js.map +1 -1
  33. package/esm/charts/storyline/layouts/clock.d.ts +1 -1
  34. package/esm/charts/storyline/layouts/clock.js +37 -23
  35. package/esm/charts/storyline/layouts/clock.js.map +1 -1
  36. package/esm/charts/storyline/layouts/common.d.ts +54 -1
  37. package/esm/charts/storyline/layouts/common.js +170 -20
  38. package/esm/charts/storyline/layouts/common.js.map +1 -1
  39. package/esm/charts/storyline/layouts/default.js +26 -13
  40. package/esm/charts/storyline/layouts/default.js.map +1 -1
  41. package/esm/charts/storyline/layouts/ladder.js +25 -12
  42. package/esm/charts/storyline/layouts/ladder.js.map +1 -1
  43. package/esm/charts/storyline/layouts/landscape.js +20 -23
  44. package/esm/charts/storyline/layouts/landscape.js.map +1 -1
  45. package/esm/charts/storyline/layouts/portrait.d.ts +1 -1
  46. package/esm/charts/storyline/layouts/portrait.js +61 -58
  47. package/esm/charts/storyline/layouts/portrait.js.map +1 -1
  48. package/esm/charts/storyline/layouts/wing.d.ts +1 -0
  49. package/esm/charts/storyline/layouts/wing.js +92 -55
  50. package/esm/charts/storyline/layouts/wing.js.map +1 -1
  51. package/esm/charts/storyline/storyline-transformer.js +20 -18
  52. package/esm/charts/storyline/storyline-transformer.js.map +1 -1
  53. package/package.json +4 -4
@@ -8,6 +8,8 @@ var __rest = this && this.__rest || function(s, e) {
8
8
  return t;
9
9
  };
10
10
 
11
+ import { LayoutZIndex } from "@visactor/vchart";
12
+
11
13
  import { computeStorylineLayout, normalizeLayout, normalizePadding } from "../layout";
12
14
 
13
15
  export const DEFAULT_BLOCK_WIDTH = 180;
@@ -26,6 +28,8 @@ export const DEFAULT_IMAGE_GAP = 10;
26
28
 
27
29
  export const DEFAULT_THEME_COLOR = "#e8543d";
28
30
 
31
+ const DEFAULT_TITLE_IMAGE_WIDTH_RATIO = .52, DEFAULT_TITLE_IMAGE_MAX_WIDTH = 720, DEFAULT_TITLE_IMAGE_HEIGHT_RATIO = .36, DEFAULT_TITLE_IMAGE_TOP = 12, DEFAULT_TITLE_IMAGE_BOTTOM = 24;
32
+
29
33
  export const isLandscape = spec => "landscape" === normalizeLayout(spec.layout).type;
30
34
 
31
35
  export const isPortrait = spec => "portrait" === normalizeLayout(spec.layout).type;
@@ -43,6 +47,152 @@ export const getThemeColor = spec => {
43
47
  return null !== (_a = spec.themeColor) && void 0 !== _a ? _a : "#e8543d";
44
48
  };
45
49
 
50
+ export const shouldShowImageBackground = spec => {
51
+ var _a, _b;
52
+ return null !== (_b = null === (_a = spec.image) || void 0 === _a ? void 0 : _a.showBackground) && void 0 !== _b ? _b : !(isPortrait(spec) || isLandscape(spec));
53
+ };
54
+
55
+ const TITLE_FONT_SCALE_ID = "storylineTitleFontSize", MARKER_FONT_SCALE_ID = "storylineMarkerFontSize", clamp = (value, min, max) => Math.max(min, Math.min(max, value)), getTextWeight = text => text ? Math.max(Array.from(text).reduce(((sum, char) => 0 === char.trim().length ? sum + .32 : sum + (char.charCodeAt(0) > 255 ? 1.05 : .62)), 0), 1) : 4, getScaleRange = (spec, scaleId, fallback) => {
56
+ var _a;
57
+ const scales = spec.scales, range = null === (_a = null == scales ? void 0 : scales.find((scale => scale.id === scaleId || scale.type === scaleId))) || void 0 === _a ? void 0 : _a.range;
58
+ return Array.isArray(range) && range.length >= 2 && "number" == typeof range[0] && "number" == typeof range[1] ? [ Math.min(range[0], range[1]), Math.max(range[0], range[1]) ] : fallback;
59
+ }, getSpecGeometry = (spec, ctx) => {
60
+ var _a, _b;
61
+ return ctx ? getRegionGeometry(ctx, spec) : {
62
+ width: Math.max(Number(null !== (_a = spec.width) && void 0 !== _a ? _a : 0), 1),
63
+ height: Math.max(Number(null !== (_b = spec.height) && void 0 !== _b ? _b : 0), 1),
64
+ startX: 0,
65
+ startY: 0
66
+ };
67
+ }, resolveAdaptiveFontSize = (spec, ctx, text, options) => {
68
+ var _a;
69
+ const configuredFontSize = null === (_a = options.style) || void 0 === _a ? void 0 : _a.fontSize;
70
+ if (null != configuredFontSize) return Number(configuredFontSize);
71
+ const [minFontSize, maxFontSize] = getScaleRange(spec, options.scaleId, options.range), {width: width, height: height} = getSpecGeometry(spec, ctx), textWeight = getTextWeight(text), canvasSize = Math.sqrt(width * height) * options.canvasRatio, lengthFactor = Math.sqrt(8 / Math.max(textWeight, 4)), adaptiveSize = width <= 1 && height <= 1 ? options.fallback : canvasSize * lengthFactor, boxWidthLimit = options.boxWidth && options.boxWidth > 0 ? options.boxWidth / textWeight * .96 : Number.POSITIVE_INFINITY, boxHeightLimit = options.boxHeight && options.boxHeight > 0 ? options.boxHeight / Math.max(textWeight, 1) : Number.POSITIVE_INFINITY;
72
+ return Math.floor((value = Math.min(adaptiveSize, boxWidthLimit, boxHeightLimit),
73
+ min = minFontSize, max = maxFontSize, Math.max(min, Math.min(max, value))));
74
+ var value, min, max;
75
+ };
76
+
77
+ export const resolveAdaptiveLineHeight = (fontSize, style, fallback, ratio = 1.35) => {
78
+ var _a;
79
+ return Number(null !== (_a = null == style ? void 0 : style.lineHeight) && void 0 !== _a ? _a : Math.round((Number.isFinite(fontSize) ? fontSize : fallback) * ratio));
80
+ };
81
+
82
+ export const resolveTitleFontSize = (spec, ctx, title, boxWidth, fallback, range = [ 16, 34 ]) => {
83
+ var _a;
84
+ return resolveAdaptiveFontSize(spec, ctx, title, {
85
+ style: null === (_a = spec.title) || void 0 === _a ? void 0 : _a.style,
86
+ scaleId: TITLE_FONT_SCALE_ID,
87
+ fallback: fallback,
88
+ range: range,
89
+ canvasRatio: .038,
90
+ boxWidth: boxWidth
91
+ });
92
+ };
93
+
94
+ export const resolveMarkerFontSize = (spec, ctx, marker, boxHeight, fallback, range = [ 18, 46 ]) => {
95
+ var _a;
96
+ return resolveAdaptiveFontSize(spec, ctx, marker, {
97
+ style: null === (_a = spec.marker) || void 0 === _a ? void 0 : _a.style,
98
+ scaleId: MARKER_FONT_SCALE_ID,
99
+ fallback: fallback,
100
+ range: range,
101
+ canvasRatio: .052,
102
+ boxHeight: boxHeight
103
+ });
104
+ };
105
+
106
+ export const getImageBackgroundStyle = spec => {
107
+ const themeColor = getThemeColor(spec);
108
+ return {
109
+ fill: {
110
+ gradient: "linear",
111
+ x0: 0,
112
+ y0: 0,
113
+ x1: 1,
114
+ y1: 1,
115
+ stops: [ {
116
+ offset: 0,
117
+ color: "#ffffff"
118
+ }, {
119
+ offset: .58,
120
+ color: withAlpha(themeColor, .12)
121
+ }, {
122
+ offset: 1,
123
+ color: withAlpha(themeColor, .32)
124
+ } ]
125
+ },
126
+ stroke: withAlpha(themeColor, .78),
127
+ lineWidth: 2,
128
+ shadowColor: withAlpha(themeColor, .18),
129
+ shadowBlur: 10,
130
+ shadowOffsetX: 0,
131
+ shadowOffsetY: 4
132
+ };
133
+ };
134
+
135
+ export const getTitleImageSize = (spec, width, height, options) => {
136
+ var _a, _b, _c, _e, _f, _g, _h;
137
+ const defaultWidth = Math.min(Math.max(width * (null !== (_a = null == options ? void 0 : options.widthRatio) && void 0 !== _a ? _a : .52), 1), null !== (_b = null == options ? void 0 : options.maxWidth) && void 0 !== _b ? _b : 720), imageWidth = Math.max(Number(null !== (_e = null === (_c = spec.titleImage) || void 0 === _c ? void 0 : _c.width) && void 0 !== _e ? _e : defaultWidth), 1);
138
+ return {
139
+ width: imageWidth,
140
+ height: Math.max(Number(null !== (_g = null === (_f = spec.titleImage) || void 0 === _f ? void 0 : _f.height) && void 0 !== _g ? _g : Math.min(height, imageWidth * (null !== (_h = null == options ? void 0 : options.heightRatio) && void 0 !== _h ? _h : .36))), 1)
141
+ };
142
+ };
143
+
144
+ export const getTitleImageReservedHeight = (spec, width, height, options) => {
145
+ var _a, _b, _c;
146
+ if (!(null === (_a = spec.titleImage) || void 0 === _a ? void 0 : _a.image) || !1 === spec.titleImage.visible) return 0;
147
+ const size = getTitleImageSize(spec, width, height, options);
148
+ return Math.ceil((null !== (_b = null == options ? void 0 : options.y) && void 0 !== _b ? _b : 12) + size.height + (null !== (_c = null == options ? void 0 : options.bottom) && void 0 !== _c ? _c : 24));
149
+ };
150
+
151
+ export const getChartGeometry = (ctx, spec) => {
152
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m;
153
+ const chartRect = null === (_b = null === (_a = ctx.chart) || void 0 === _a ? void 0 : _a.getLayoutRect) || void 0 === _b ? void 0 : _b.call(_a), bounds = null === (_c = ctx.getLayoutBounds) || void 0 === _c ? void 0 : _c.call(ctx);
154
+ return {
155
+ width: Math.max(null !== (_h = null !== (_g = null !== (_e = null == chartRect ? void 0 : chartRect.width) && void 0 !== _e ? _e : null === (_f = null == bounds ? void 0 : bounds.width) || void 0 === _f ? void 0 : _f.call(bounds)) && void 0 !== _g ? _g : null == spec ? void 0 : spec.width) && void 0 !== _h ? _h : 0, 1),
156
+ height: Math.max(null !== (_m = null !== (_l = null !== (_j = null == chartRect ? void 0 : chartRect.height) && void 0 !== _j ? _j : null === (_k = null == bounds ? void 0 : bounds.height) || void 0 === _k ? void 0 : _k.call(bounds)) && void 0 !== _l ? _l : null == spec ? void 0 : spec.height) && void 0 !== _m ? _m : 0, 1),
157
+ startX: 0,
158
+ startY: 0
159
+ };
160
+ };
161
+
162
+ export const buildTopTitleImageMark = (spec, options) => {
163
+ var _a;
164
+ return (null === (_a = spec.titleImage) || void 0 === _a ? void 0 : _a.image) && !1 !== spec.titleImage.visible ? Object.assign(Object.assign({
165
+ type: "image",
166
+ name: "storyline-title-image",
167
+ interactive: !1,
168
+ zIndex: LayoutZIndex.Mark + 8
169
+ }, spec.titleImage), {
170
+ style: Object.assign({
171
+ x: (_d, ctx) => {
172
+ const {width: width, height: height, startX: startX} = getChartGeometry(ctx, spec);
173
+ return startX + (width - getTitleImageSize(spec, width, height, options).width) / 2;
174
+ },
175
+ y: (_d, ctx) => {
176
+ var _a;
177
+ return getChartGeometry(ctx, spec).startY + (null !== (_a = null == options ? void 0 : options.y) && void 0 !== _a ? _a : 12);
178
+ },
179
+ width: (_d, ctx) => {
180
+ const {width: width, height: height} = getChartGeometry(ctx, spec);
181
+ return getTitleImageSize(spec, width, height, options).width;
182
+ },
183
+ height: (_d, ctx) => {
184
+ const {width: width, height: height} = getChartGeometry(ctx, spec);
185
+ return getTitleImageSize(spec, width, height, options).height;
186
+ },
187
+ image: spec.titleImage.image,
188
+ repeatX: "no-repeat",
189
+ repeatY: "no-repeat",
190
+ imageMode: "contain",
191
+ imagePosition: "center"
192
+ }, spec.titleImage.style)
193
+ }) : null;
194
+ };
195
+
46
196
  export const withAlpha = (color, alpha) => {
47
197
  const safeAlpha = Math.max(0, Math.min(1, alpha));
48
198
  if (!color) return `rgba(0, 0, 0, ${safeAlpha})`;
@@ -59,42 +209,42 @@ export const withAlpha = (color, alpha) => {
59
209
  };
60
210
 
61
211
  export const resolveBlockWidth = (spec, viewWidth) => {
62
- var _a, _b, _c, _d, _e, _f, _g;
212
+ var _a, _b, _c, _e, _f, _g, _h;
63
213
  if (null === (_a = spec.block) || void 0 === _a ? void 0 : _a.width) return spec.block.width;
64
- const ratio = null !== (_c = null === (_b = spec.block) || void 0 === _b ? void 0 : _b.widthRatio) && void 0 !== _c ? _c : .24, minWidth = null !== (_e = null === (_d = spec.block) || void 0 === _d ? void 0 : _d.minWidth) && void 0 !== _e ? _e : 180, maxWidth = null !== (_g = null === (_f = spec.block) || void 0 === _f ? void 0 : _f.maxWidth) && void 0 !== _g ? _g : Math.max(minWidth, 320);
214
+ const ratio = null !== (_c = null === (_b = spec.block) || void 0 === _b ? void 0 : _b.widthRatio) && void 0 !== _c ? _c : .24, minWidth = null !== (_f = null === (_e = spec.block) || void 0 === _e ? void 0 : _e.minWidth) && void 0 !== _f ? _f : 180, maxWidth = null !== (_h = null === (_g = spec.block) || void 0 === _g ? void 0 : _g.maxWidth) && void 0 !== _h ? _h : Math.max(minWidth, 320);
65
215
  return Math.max(minWidth, Math.min(maxWidth, Math.round(viewWidth * ratio)));
66
216
  };
67
217
 
68
218
  export const getRegionGeometry = (ctx, spec) => {
69
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
70
- const region = null === (_c = null === (_b = null === (_a = ctx.chart) || void 0 === _a ? void 0 : _a.getAllRegions) || void 0 === _b ? void 0 : _b.call(_a)) || void 0 === _c ? void 0 : _c[0], regionRect = null === (_d = null == region ? void 0 : region.getLayoutRect) || void 0 === _d ? void 0 : _d.call(region), regionStart = null === (_e = null == region ? void 0 : region.getLayoutStartPoint) || void 0 === _e ? void 0 : _e.call(region), chartRect = null === (_g = null === (_f = ctx.chart) || void 0 === _f ? void 0 : _f.getLayoutRect) || void 0 === _g ? void 0 : _g.call(_f), bounds = null === (_h = ctx.getLayoutBounds) || void 0 === _h ? void 0 : _h.call(ctx);
219
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
220
+ const region = null === (_c = null === (_b = null === (_a = ctx.chart) || void 0 === _a ? void 0 : _a.getAllRegions) || void 0 === _b ? void 0 : _b.call(_a)) || void 0 === _c ? void 0 : _c[0], regionRect = null === (_e = null == region ? void 0 : region.getLayoutRect) || void 0 === _e ? void 0 : _e.call(region), regionStart = null === (_f = null == region ? void 0 : region.getLayoutStartPoint) || void 0 === _f ? void 0 : _f.call(region), chartRect = null === (_h = null === (_g = ctx.chart) || void 0 === _g ? void 0 : _g.getLayoutRect) || void 0 === _h ? void 0 : _h.call(_g), bounds = null === (_j = ctx.getLayoutBounds) || void 0 === _j ? void 0 : _j.call(ctx);
71
221
  return {
72
- width: Math.max(null !== (_o = null !== (_m = null !== (_k = null !== (_j = null == regionRect ? void 0 : regionRect.width) && void 0 !== _j ? _j : null == chartRect ? void 0 : chartRect.width) && void 0 !== _k ? _k : null === (_l = null == bounds ? void 0 : bounds.width) || void 0 === _l ? void 0 : _l.call(bounds)) && void 0 !== _m ? _m : null == spec ? void 0 : spec.width) && void 0 !== _o ? _o : 0, 1),
73
- height: Math.max(null !== (_t = null !== (_s = null !== (_q = null !== (_p = null == regionRect ? void 0 : regionRect.height) && void 0 !== _p ? _p : null == chartRect ? void 0 : chartRect.height) && void 0 !== _q ? _q : null === (_r = null == bounds ? void 0 : bounds.height) || void 0 === _r ? void 0 : _r.call(bounds)) && void 0 !== _s ? _s : null == spec ? void 0 : spec.height) && void 0 !== _t ? _t : 0, 1),
74
- startX: null !== (_u = null == regionStart ? void 0 : regionStart.x) && void 0 !== _u ? _u : 0,
75
- startY: null !== (_v = null == regionStart ? void 0 : regionStart.y) && void 0 !== _v ? _v : 0
222
+ width: Math.max(null !== (_p = null !== (_o = null !== (_l = null !== (_k = null == regionRect ? void 0 : regionRect.width) && void 0 !== _k ? _k : null == chartRect ? void 0 : chartRect.width) && void 0 !== _l ? _l : null === (_m = null == bounds ? void 0 : bounds.width) || void 0 === _m ? void 0 : _m.call(bounds)) && void 0 !== _o ? _o : null == spec ? void 0 : spec.width) && void 0 !== _p ? _p : 0, 1),
223
+ height: Math.max(null !== (_u = null !== (_t = null !== (_r = null !== (_q = null == regionRect ? void 0 : regionRect.height) && void 0 !== _q ? _q : null == chartRect ? void 0 : chartRect.height) && void 0 !== _r ? _r : null === (_s = null == bounds ? void 0 : bounds.height) || void 0 === _s ? void 0 : _s.call(bounds)) && void 0 !== _t ? _t : null == spec ? void 0 : spec.height) && void 0 !== _u ? _u : 0, 1),
224
+ startX: null !== (_v = null == regionStart ? void 0 : regionStart.x) && void 0 !== _v ? _v : 0,
225
+ startY: null !== (_w = null == regionStart ? void 0 : regionStart.y) && void 0 !== _w ? _w : 0
76
226
  };
77
227
  };
78
228
 
79
229
  export const getLayout = (spec, ctx) => {
80
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
230
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
81
231
  const {width: width, height: height, startX: startX, startY: startY} = getRegionGeometry(ctx, spec);
82
232
  let blockWidth = resolveBlockWidth(spec, width), blockHeight = null !== (_b = null === (_a = spec.block) || void 0 === _a ? void 0 : _a.height) && void 0 !== _b ? _b : isLandscape(spec) ? 320 : 400;
83
233
  if (isLandscape(spec) && !(null === (_c = spec.block) || void 0 === _c ? void 0 : _c.width)) {
84
- const count = null !== (_e = null === (_d = spec.data) || void 0 === _d ? void 0 : _d.length) && void 0 !== _e ? _e : 0;
234
+ const count = null !== (_f = null === (_e = spec.data) || void 0 === _e ? void 0 : _e.length) && void 0 !== _f ? _f : 0;
85
235
  if (count > 0) {
86
- const padding = normalizePadding(null === (_f = spec.block) || void 0 === _f ? void 0 : _f.padding), LANDSCAPE_IMAGE_MIN_WIDTH = 80, adaptive = (Math.max(width - padding.left - padding.right, 1) - 40 * Math.max(count - 1, 0)) / count;
236
+ const padding = normalizePadding(null === (_g = spec.block) || void 0 === _g ? void 0 : _g.padding), LANDSCAPE_IMAGE_MIN_WIDTH = 80, adaptive = (Math.max(width - padding.left - padding.right, 1) - 40 * Math.max(count - 1, 0)) / count;
87
237
  blockWidth = Math.max(LANDSCAPE_IMAGE_MIN_WIDTH, Math.floor(adaptive));
88
238
  }
89
239
  }
90
- if (isPortrait(spec) && !(null === (_g = spec.block) || void 0 === _g ? void 0 : _g.height)) {
91
- const count = null !== (_j = null === (_h = spec.data) || void 0 === _h ? void 0 : _h.length) && void 0 !== _j ? _j : 0;
240
+ if (isPortrait(spec) && !(null === (_h = spec.block) || void 0 === _h ? void 0 : _h.height)) {
241
+ const count = null !== (_k = null === (_j = spec.data) || void 0 === _j ? void 0 : _j.length) && void 0 !== _k ? _k : 0;
92
242
  if (count > 0) {
93
- const padding = normalizePadding(null !== (_l = null === (_k = spec.layout) || void 0 === _k ? void 0 : _k.padding) && void 0 !== _l ? _l : null === (_m = spec.block) || void 0 === _m ? void 0 : _m.padding), innerHeight = Math.max(height - padding.top - padding.bottom, 1);
243
+ const layoutPadding = "object" == typeof spec.layout ? spec.layout.padding : void 0, padding = normalizePadding(null != layoutPadding ? layoutPadding : null === (_l = spec.block) || void 0 === _l ? void 0 : _l.padding), innerHeight = Math.max(height - padding.top - padding.bottom, 1);
94
244
  blockHeight = Math.max(120, Math.floor(innerHeight / (count + 1)));
95
245
  }
96
246
  }
97
- const result = computeStorylineLayout(null !== (_o = spec.data) && void 0 !== _o ? _o : [], {
247
+ const result = computeStorylineLayout(null !== (_m = spec.data) && void 0 !== _m ? _m : [], {
98
248
  layout: spec.layout,
99
249
  viewBox: {
100
250
  width: width,
@@ -104,9 +254,9 @@ export const getLayout = (spec, ctx) => {
104
254
  width: blockWidth,
105
255
  height: blockHeight
106
256
  },
107
- gap: null !== (_q = null === (_p = spec.block) || void 0 === _p ? void 0 : _p.gap) && void 0 !== _q ? _q : 36,
108
- padding: null === (_r = spec.block) || void 0 === _r ? void 0 : _r.padding,
109
- lineDistance: null === (_s = spec.line) || void 0 === _s ? void 0 : _s.distance
257
+ gap: null !== (_p = null === (_o = spec.block) || void 0 === _o ? void 0 : _o.gap) && void 0 !== _p ? _p : 36,
258
+ padding: null === (_q = spec.block) || void 0 === _q ? void 0 : _q.padding,
259
+ lineDistance: null === (_r = spec.line) || void 0 === _r ? void 0 : _r.distance
110
260
  });
111
261
  return startX || startY ? Object.assign(Object.assign({}, result), {
112
262
  blocks: result.blocks.map((block => Object.assign(Object.assign({}, block), {
@@ -135,8 +285,8 @@ export const getLayout = (spec, ctx) => {
135
285
  };
136
286
 
137
287
  export const buildRichContent = (contentText, spec, overrides) => {
138
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
139
- const fontSize = Number(null !== (_d = null !== (_a = null == overrides ? void 0 : overrides.fontSize) && void 0 !== _a ? _a : null === (_c = null === (_b = spec.content) || void 0 === _b ? void 0 : _b.style) || void 0 === _c ? void 0 : _c.fontSize) && void 0 !== _d ? _d : 18), lineHeight = Number(null !== (_h = null !== (_e = null == overrides ? void 0 : overrides.lineHeight) && void 0 !== _e ? _e : null === (_g = null === (_f = spec.content) || void 0 === _f ? void 0 : _f.style) || void 0 === _g ? void 0 : _g.lineHeight) && void 0 !== _h ? _h : 26), fill = null !== (_m = null !== (_j = null == overrides ? void 0 : overrides.fill) && void 0 !== _j ? _j : null === (_l = null === (_k = spec.content) || void 0 === _k ? void 0 : _k.style) || void 0 === _l ? void 0 : _l.fill) && void 0 !== _m ? _m : "#596173", align = null !== (_o = null == overrides ? void 0 : overrides.align) && void 0 !== _o ? _o : "left";
288
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
289
+ const fontSize = Number(null !== (_e = null !== (_a = null == overrides ? void 0 : overrides.fontSize) && void 0 !== _a ? _a : null === (_c = null === (_b = spec.content) || void 0 === _b ? void 0 : _b.style) || void 0 === _c ? void 0 : _c.fontSize) && void 0 !== _e ? _e : 18), lineHeight = Number(null !== (_j = null !== (_f = null == overrides ? void 0 : overrides.lineHeight) && void 0 !== _f ? _f : null === (_h = null === (_g = spec.content) || void 0 === _g ? void 0 : _g.style) || void 0 === _h ? void 0 : _h.lineHeight) && void 0 !== _j ? _j : 26), fill = null !== (_o = null !== (_k = null == overrides ? void 0 : overrides.fill) && void 0 !== _k ? _k : null === (_m = null === (_l = spec.content) || void 0 === _l ? void 0 : _l.style) || void 0 === _m ? void 0 : _m.fill) && void 0 !== _o ? _o : "#596173", align = null !== (_p = null == overrides ? void 0 : overrides.align) && void 0 !== _p ? _p : "left";
140
290
  return {
141
291
  type: "rich",
142
292
  text: contentText.reduce(((result, paragraph, index) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/storyline/layouts/common.ts"],"names":[],"mappings":"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","file":"common.js","sourcesContent":["import type { ICustomMarkSpec } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec, StorylineImagePosition } from '../interface';\nimport {\n computeStorylineLayout,\n normalizeLayout,\n normalizePadding,\n type StorylineLayoutResult,\n type StorylinePoint\n} from '../layout';\n\n// ===== 布局通用类型 =====\n\nexport type LayoutContext = {\n chart?: {\n getAllRegions?: () => {\n getLayoutRect?: () => { width?: number; height?: number };\n getLayoutStartPoint?: () => { x?: number; y?: number };\n }[];\n getLayoutRect?: () => { width?: number; height?: number };\n };\n getLayoutBounds?: () => { width?: () => number; height?: () => number };\n};\n\n// ===== 通用默认值 =====\n\nexport const DEFAULT_BLOCK_WIDTH = 180;\nexport const DEFAULT_BLOCK_HEIGHT = 400;\nexport const DEFAULT_BLOCK_WIDTH_RATIO = 0.24;\nexport const DEFAULT_BLOCK_GAP = 36;\nexport const DEFAULT_IMAGE_WIDTH = 48;\nexport const DEFAULT_IMAGE_HEIGHT = 48;\nexport const DEFAULT_IMAGE_GAP = 10;\nexport const DEFAULT_THEME_COLOR = '#e8543d';\n\n// ===== 布局判定 =====\n\nexport const isLandscape = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'landscape';\nexport const isPortrait = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'portrait';\nexport const isClock = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'clock';\nexport const isArc = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'arc';\nexport const isWing = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'wing';\nexport const isLadder = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'ladder';\n\nexport const getThemeColor = (spec: IStorylineSpec) => spec.themeColor ?? DEFAULT_THEME_COLOR;\n\n// ===== 颜色工具 =====\n\n/**\n * 给颜色(#hex / rgb / rgba / hsl / 颜色关键字)追加/替换 alpha 通道,返回 rgba(...) 字符串\n */\nexport const withAlpha = (color: string, alpha: number): string => {\n const safeAlpha = Math.max(0, Math.min(1, alpha));\n if (!color) {\n return `rgba(0, 0, 0, ${safeAlpha})`;\n }\n const trimmed = color.trim();\n if (trimmed.startsWith('#')) {\n let hex = trimmed.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n hex = hex\n .split('')\n .map(ch => ch + ch)\n .join('');\n }\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${safeAlpha})`;\n }\n }\n const rgbMatch = trimmed.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/i);\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${safeAlpha})`;\n }\n return trimmed;\n};\n\n// ===== 块宽度解析 =====\n\nexport const resolveBlockWidth = (spec: IStorylineSpec, viewWidth: number) => {\n if (spec.block?.width) {\n return spec.block.width;\n }\n const ratio = spec.block?.widthRatio ?? DEFAULT_BLOCK_WIDTH_RATIO;\n const minWidth = spec.block?.minWidth ?? DEFAULT_BLOCK_WIDTH;\n const maxWidth = spec.block?.maxWidth ?? Math.max(minWidth, 320);\n return Math.max(minWidth, Math.min(maxWidth, Math.round(viewWidth * ratio)));\n};\n\n// ===== 容器几何信息(chart region rect)=====\n\nexport const getRegionGeometry = (ctx: LayoutContext, spec?: { width?: number; height?: number }) => {\n const region = ctx.chart?.getAllRegions?.()?.[0];\n const regionRect = region?.getLayoutRect?.();\n const regionStart = region?.getLayoutStartPoint?.();\n const chartRect = ctx.chart?.getLayoutRect?.();\n const bounds = ctx.getLayoutBounds?.();\n const width = Math.max(regionRect?.width ?? chartRect?.width ?? bounds?.width?.() ?? spec?.width ?? 0, 1);\n const height = Math.max(regionRect?.height ?? chartRect?.height ?? bounds?.height?.() ?? spec?.height ?? 0, 1);\n return {\n width,\n height,\n startX: regionStart?.x ?? 0,\n startY: regionStart?.y ?? 0\n };\n};\n\n// ===== 布局计算(layout.ts 的封装,附加 startX/startY 平移)=====\n\nexport const getLayout = (spec: IStorylineSpec, ctx: LayoutContext): StorylineLayoutResult => {\n const { width, height, startX, startY } = getRegionGeometry(ctx, spec);\n let blockWidth = resolveBlockWidth(spec, width);\n let blockHeight = spec.block?.height ?? (isLandscape(spec) ? 320 : DEFAULT_BLOCK_HEIGHT);\n // landscape:图片间距固定 40,根据 block 数量自适应单个 image 宽度\n if (isLandscape(spec) && !spec.block?.width) {\n const count = spec.data?.length ?? 0;\n if (count > 0) {\n const padding = normalizePadding(spec.block?.padding);\n const innerWidth = Math.max(width - padding.left - padding.right, 1);\n const LANDSCAPE_IMAGE_GAP = 40;\n const LANDSCAPE_IMAGE_MIN_WIDTH = 80;\n const totalGap = LANDSCAPE_IMAGE_GAP * Math.max(count - 1, 0);\n const adaptive = (innerWidth - totalGap) / count;\n blockWidth = Math.max(LANDSCAPE_IMAGE_MIN_WIDTH, Math.floor(adaptive));\n }\n }\n // portrait:每个 block 在垂直方向需要容纳 image + text,整体根据 region 高度均分\n // blockHeight = regionHeight / (count + 1)(即每个 block 的\"槽位\"高度),后续 portrait.ts 中:\n // imageHeight = blockHeight * 0.6\n // contentHeight = blockHeight\n if (isPortrait(spec) && !spec.block?.height) {\n const count = spec.data?.length ?? 0;\n if (count > 0) {\n const padding = normalizePadding(spec.layout?.padding ?? spec.block?.padding);\n const innerHeight = Math.max(height - padding.top - padding.bottom, 1);\n blockHeight = Math.max(120, Math.floor(innerHeight / (count + 1)));\n }\n }\n const result = computeStorylineLayout(spec.data ?? [], {\n layout: spec.layout,\n viewBox: { width, height },\n block: {\n width: blockWidth,\n height: blockHeight\n },\n gap: spec.block?.gap ?? DEFAULT_BLOCK_GAP,\n padding: spec.block?.padding,\n lineDistance: spec.line?.distance\n });\n if (!startX && !startY) {\n return result;\n }\n return {\n ...result,\n blocks: result.blocks.map(block => ({\n ...block,\n x: block.x + startX,\n y: block.y + startY,\n center: {\n x: block.center.x + startX,\n y: block.center.y + startY\n }\n })),\n links: result.links.map(link => ({\n ...link,\n start: { x: link.start.x + startX, y: link.start.y + startY },\n end: { x: link.end.x + startX, y: link.end.y + startY },\n points: link.points.map(point => ({ x: point.x + startX, y: point.y + startY }))\n }))\n };\n};\n\n// ===== 文本 / 图像通用工具 =====\n\nexport const buildRichContent = (\n contentText: string[],\n spec: IStorylineSpec,\n overrides?: { fontSize?: number; lineHeight?: number; fill?: string; align?: 'left' | 'center' | 'right' }\n) => {\n const fontSize = Number(overrides?.fontSize ?? (spec.content?.style as any)?.fontSize ?? 18);\n const lineHeight = Number(overrides?.lineHeight ?? (spec.content?.style as any)?.lineHeight ?? 26);\n const fill = overrides?.fill ?? (spec.content?.style as any)?.fill ?? '#596173';\n const align = overrides?.align ?? 'left';\n\n return {\n type: 'rich' as const,\n text: contentText.reduce<{ text: string; fontSize: number; lineHeight: number; fill: string; align: string }[]>(\n (result, paragraph, index) => {\n const suffix = index === contentText.length - 1 ? '' : '\\n';\n result.push({\n text: `${paragraph}${suffix}`,\n fontSize,\n lineHeight,\n fill,\n align\n });\n return result;\n },\n []\n )\n };\n};\n\nexport const omitImageLayoutSpec = (imageSpec: IStorylineSpec['image']) => {\n if (!imageSpec) {\n return {};\n }\n const { width: _width, height: _height, position: _position, gap: _gap, ...rest } = imageSpec;\n return rest;\n};\n\n// ===== 默认 image / text 盒计算(用于通用 block)=====\n\nexport const getImageBox = (\n position: StorylineImagePosition,\n blockWidth: number,\n blockHeight: number,\n padding: ReturnType<typeof normalizePadding>,\n width: number,\n height: number,\n _gap: number,\n visible: boolean\n) => {\n if (!visible) {\n return { x: padding.left, y: padding.top, width: 0, height: 0 };\n }\n switch (position) {\n case 'left':\n return { x: padding.left, y: (blockHeight - height) / 2, width, height };\n case 'right':\n return { x: blockWidth - padding.right - width, y: (blockHeight - height) / 2, width, height };\n case 'bottom':\n return { x: (blockWidth - width) / 2, y: blockHeight - padding.bottom - height, width, height };\n case 'top':\n default:\n return { x: (blockWidth - width) / 2, y: padding.top, width, height };\n }\n};\n\nexport const getTextBox = (\n position: StorylineImagePosition,\n blockWidth: number,\n blockHeight: number,\n padding: ReturnType<typeof normalizePadding>,\n imageWidth: number,\n imageHeight: number,\n imageGap: number,\n hasImage: boolean\n) => {\n if (!hasImage) {\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom\n };\n }\n switch (position) {\n case 'left':\n return {\n x: padding.left + imageWidth + imageGap,\n y: padding.top,\n width: blockWidth - padding.left - padding.right - imageWidth - imageGap,\n height: blockHeight - padding.top - padding.bottom\n };\n case 'right':\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right - imageWidth - imageGap,\n height: blockHeight - padding.top - padding.bottom\n };\n case 'bottom':\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom - imageHeight - imageGap\n };\n case 'top':\n default:\n return {\n x: padding.left,\n y: padding.top + imageHeight + imageGap,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom - imageHeight - imageGap\n };\n }\n};\n\n// ===== Catmull-Rom 平滑曲线 =====\n\n/**\n * 用 Catmull-Rom 转 cubic Bezier 生成平滑曲线 path(贯穿所有点)。\n */\nexport const buildSmoothCurvePath = (points: StorylinePoint[]): string => {\n if (points.length < 2) {\n return '';\n }\n if (points.length === 2) {\n return `M ${points[0].x} ${points[0].y} L ${points[1].x} ${points[1].y}`;\n }\n let d = `M ${points[0].x} ${points[0].y}`;\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[i - 1] ?? points[i];\n const p1 = points[i];\n const p2 = points[i + 1];\n const p3 = points[i + 2] ?? p2;\n const c1x = p1.x + (p2.x - p0.x) / 6;\n const c1y = p1.y + (p2.y - p0.y) / 6;\n const c2x = p2.x - (p3.x - p1.x) / 6;\n const c2y = p2.y - (p3.y - p1.y) / 6;\n d += ` C ${c1x} ${c1y}, ${c2x} ${c2y}, ${p2.x} ${p2.y}`;\n }\n return d;\n};\n\n// 重导出常用的 layout helper(避免外部再 import layout.ts)\nexport { normalizeLayout, normalizePadding };\nexport type { IStorylineBlock, ICustomMarkSpec, StorylinePoint };\n"]}
1
+ {"version":3,"sources":["../src/charts/storyline/layouts/common.ts"],"names":[],"mappings":"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","file":"common.js","sourcesContent":["import { LayoutZIndex, type ICustomMarkSpec } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec, StorylineImagePosition } from '../interface';\nimport {\n computeStorylineLayout,\n normalizeLayout,\n normalizePadding,\n type StorylineLayoutResult,\n type StorylinePoint\n} from '../layout';\n\n// ===== 布局通用类型 =====\n\nexport type LayoutContext = {\n chart?: {\n getAllRegions?: () => {\n getLayoutRect?: () => { width?: number; height?: number };\n getLayoutStartPoint?: () => { x?: number; y?: number };\n }[];\n getLayoutRect?: () => { width?: number; height?: number };\n };\n getLayoutBounds?: () => { width?: () => number; height?: () => number };\n};\n\n// ===== 通用默认值 =====\n\nexport const DEFAULT_BLOCK_WIDTH = 180;\nexport const DEFAULT_BLOCK_HEIGHT = 400;\nexport const DEFAULT_BLOCK_WIDTH_RATIO = 0.24;\nexport const DEFAULT_BLOCK_GAP = 36;\nexport const DEFAULT_IMAGE_WIDTH = 48;\nexport const DEFAULT_IMAGE_HEIGHT = 48;\nexport const DEFAULT_IMAGE_GAP = 10;\nexport const DEFAULT_THEME_COLOR = '#e8543d';\nconst DEFAULT_TITLE_IMAGE_WIDTH_RATIO = 0.52;\nconst DEFAULT_TITLE_IMAGE_MAX_WIDTH = 720;\nconst DEFAULT_TITLE_IMAGE_HEIGHT_RATIO = 0.36;\nconst DEFAULT_TITLE_IMAGE_TOP = 12;\nconst DEFAULT_TITLE_IMAGE_BOTTOM = 24;\n\n// ===== 布局判定 =====\n\nexport const isLandscape = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'landscape';\nexport const isPortrait = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'portrait';\nexport const isClock = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'clock';\nexport const isArc = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'arc';\nexport const isWing = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'wing';\nexport const isLadder = (spec: IStorylineSpec) => normalizeLayout(spec.layout).type === 'ladder';\n\nexport const getThemeColor = (spec: IStorylineSpec) => spec.themeColor ?? DEFAULT_THEME_COLOR;\n\nexport const shouldShowImageBackground = (spec: IStorylineSpec) =>\n spec.image?.showBackground ?? !(isPortrait(spec) || isLandscape(spec));\n\n// ===== 默认样式工具 =====\n\nconst TITLE_FONT_SCALE_ID = 'storylineTitleFontSize';\nconst MARKER_FONT_SCALE_ID = 'storylineMarkerFontSize';\n\nconst clamp = (value: number, min: number, max: number) => Math.max(min, Math.min(max, value));\n\nconst getTextWeight = (text?: string) => {\n if (!text) {\n return 4;\n }\n return Math.max(\n Array.from(text).reduce((sum, char) => {\n if (char.trim().length === 0) {\n return sum + 0.32;\n }\n return sum + (char.charCodeAt(0) > 255 ? 1.05 : 0.62);\n }, 0),\n 1\n );\n};\n\nconst getScaleRange = (spec: IStorylineSpec, scaleId: string, fallback: [number, number]) => {\n const scales = (spec as { scales?: { id?: string; type?: string; range?: unknown }[] }).scales;\n const range = scales?.find(scale => scale.id === scaleId || scale.type === scaleId)?.range;\n if (Array.isArray(range) && range.length >= 2 && typeof range[0] === 'number' && typeof range[1] === 'number') {\n return [Math.min(range[0], range[1]), Math.max(range[0], range[1])] as [number, number];\n }\n return fallback;\n};\n\nconst getSpecGeometry = (spec: IStorylineSpec, ctx?: LayoutContext) => {\n if (ctx) {\n return getRegionGeometry(ctx, spec);\n }\n return {\n width: Math.max(Number(spec.width ?? 0), 1),\n height: Math.max(Number(spec.height ?? 0), 1),\n startX: 0,\n startY: 0\n };\n};\n\nconst resolveAdaptiveFontSize = (\n spec: IStorylineSpec,\n ctx: LayoutContext | undefined,\n text: string | undefined,\n options: {\n style?: Record<string, unknown>;\n scaleId: string;\n fallback: number;\n range: [number, number];\n canvasRatio: number;\n boxWidth?: number;\n boxHeight?: number;\n }\n) => {\n const configuredFontSize = options.style?.fontSize;\n if (configuredFontSize != null) {\n return Number(configuredFontSize);\n }\n const [minFontSize, maxFontSize] = getScaleRange(spec, options.scaleId, options.range);\n const { width, height } = getSpecGeometry(spec, ctx);\n const textWeight = getTextWeight(text);\n const canvasSize = Math.sqrt(width * height) * options.canvasRatio;\n const lengthFactor = Math.sqrt(8 / Math.max(textWeight, 4));\n const adaptiveSize = width <= 1 && height <= 1 ? options.fallback : canvasSize * lengthFactor;\n const boxWidthLimit =\n options.boxWidth && options.boxWidth > 0 ? (options.boxWidth / textWeight) * 0.96 : Number.POSITIVE_INFINITY;\n const boxHeightLimit =\n options.boxHeight && options.boxHeight > 0 ? options.boxHeight / Math.max(textWeight, 1) : Number.POSITIVE_INFINITY;\n return Math.floor(clamp(Math.min(adaptiveSize, boxWidthLimit, boxHeightLimit), minFontSize, maxFontSize));\n};\n\nexport const resolveAdaptiveLineHeight = (\n fontSize: number,\n style: Record<string, unknown> | undefined,\n fallback: number,\n ratio = 1.35\n) => Number(style?.lineHeight ?? Math.round((Number.isFinite(fontSize) ? fontSize : fallback) * ratio));\n\nexport const resolveTitleFontSize = (\n spec: IStorylineSpec,\n ctx: LayoutContext | undefined,\n title: string | undefined,\n boxWidth: number | undefined,\n fallback: number,\n range: [number, number] = [16, 34]\n) =>\n resolveAdaptiveFontSize(spec, ctx, title, {\n style: spec.title?.style as Record<string, unknown> | undefined,\n scaleId: TITLE_FONT_SCALE_ID,\n fallback,\n range,\n canvasRatio: 0.038,\n boxWidth\n });\n\nexport const resolveMarkerFontSize = (\n spec: IStorylineSpec,\n ctx: LayoutContext,\n marker: string | undefined,\n boxHeight: number | undefined,\n fallback: number,\n range: [number, number] = [18, 46]\n) =>\n resolveAdaptiveFontSize(spec, ctx, marker, {\n style: spec.marker?.style as Record<string, unknown> | undefined,\n scaleId: MARKER_FONT_SCALE_ID,\n fallback,\n range,\n canvasRatio: 0.052,\n boxHeight\n });\n\nexport const getImageBackgroundStyle = (spec: IStorylineSpec) => {\n const themeColor = getThemeColor(spec);\n return {\n fill: {\n gradient: 'linear',\n x0: 0,\n y0: 0,\n x1: 1,\n y1: 1,\n stops: [\n { offset: 0, color: '#ffffff' },\n { offset: 0.58, color: withAlpha(themeColor, 0.12) },\n { offset: 1, color: withAlpha(themeColor, 0.32) }\n ]\n },\n stroke: withAlpha(themeColor, 0.78),\n lineWidth: 2,\n shadowColor: withAlpha(themeColor, 0.18),\n shadowBlur: 10,\n shadowOffsetX: 0,\n shadowOffsetY: 4\n };\n};\n\nexport const getTitleImageSize = (\n spec: IStorylineSpec,\n width: number,\n height: number,\n options?: { widthRatio?: number; maxWidth?: number; heightRatio?: number }\n) => {\n const defaultWidth = Math.min(\n Math.max(width * (options?.widthRatio ?? DEFAULT_TITLE_IMAGE_WIDTH_RATIO), 1),\n options?.maxWidth ?? DEFAULT_TITLE_IMAGE_MAX_WIDTH\n );\n const imageWidth = Math.max(Number(spec.titleImage?.width ?? defaultWidth), 1);\n const imageHeight = Math.max(\n Number(\n spec.titleImage?.height ??\n Math.min(height, imageWidth * (options?.heightRatio ?? DEFAULT_TITLE_IMAGE_HEIGHT_RATIO))\n ),\n 1\n );\n return { width: imageWidth, height: imageHeight };\n};\n\nexport const getTitleImageReservedHeight = (\n spec: IStorylineSpec,\n width: number,\n height: number,\n options?: { y?: number; widthRatio?: number; maxWidth?: number; heightRatio?: number; bottom?: number }\n) => {\n if (!spec.titleImage?.image || spec.titleImage.visible === false) {\n return 0;\n }\n const size = getTitleImageSize(spec, width, height, options);\n return Math.ceil(\n (options?.y ?? DEFAULT_TITLE_IMAGE_TOP) + size.height + (options?.bottom ?? DEFAULT_TITLE_IMAGE_BOTTOM)\n );\n};\n\nexport const getChartGeometry = (ctx: LayoutContext, spec?: { width?: number; height?: number }) => {\n const chartRect = ctx.chart?.getLayoutRect?.();\n const bounds = ctx.getLayoutBounds?.();\n const width = Math.max(chartRect?.width ?? bounds?.width?.() ?? spec?.width ?? 0, 1);\n const height = Math.max(chartRect?.height ?? bounds?.height?.() ?? spec?.height ?? 0, 1);\n return { width, height, startX: 0, startY: 0 };\n};\n\nexport const buildTopTitleImageMark = (\n spec: IStorylineSpec,\n options?: { y?: number; widthRatio?: number; maxWidth?: number; heightRatio?: number }\n): ICustomMarkSpec<'image'> | null => {\n if (!spec.titleImage?.image || spec.titleImage.visible === false) {\n return null;\n }\n return {\n type: 'image',\n name: 'storyline-title-image',\n interactive: false,\n zIndex: LayoutZIndex.Mark + 8,\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, options);\n return startX + (width - size.width) / 2;\n },\n y: (_d: unknown, ctx: LayoutContext) =>\n getChartGeometry(ctx, spec).startY + (options?.y ?? DEFAULT_TITLE_IMAGE_TOP),\n width: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, options).width;\n },\n height: (_d: unknown, ctx: LayoutContext) => {\n const { width, height } = getChartGeometry(ctx, spec);\n return getTitleImageSize(spec, width, height, options).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/**\n * 给颜色(#hex / rgb / rgba / hsl / 颜色关键字)追加/替换 alpha 通道,返回 rgba(...) 字符串\n */\nexport const withAlpha = (color: string, alpha: number): string => {\n const safeAlpha = Math.max(0, Math.min(1, alpha));\n if (!color) {\n return `rgba(0, 0, 0, ${safeAlpha})`;\n }\n const trimmed = color.trim();\n if (trimmed.startsWith('#')) {\n let hex = trimmed.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n hex = hex\n .split('')\n .map(ch => ch + ch)\n .join('');\n }\n if (hex.length === 6 || hex.length === 8) {\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${safeAlpha})`;\n }\n }\n const rgbMatch = trimmed.match(/^rgba?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)/i);\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${safeAlpha})`;\n }\n return trimmed;\n};\n\n// ===== 块宽度解析 =====\n\nexport const resolveBlockWidth = (spec: IStorylineSpec, viewWidth: number) => {\n if (spec.block?.width) {\n return spec.block.width;\n }\n const ratio = spec.block?.widthRatio ?? DEFAULT_BLOCK_WIDTH_RATIO;\n const minWidth = spec.block?.minWidth ?? DEFAULT_BLOCK_WIDTH;\n const maxWidth = spec.block?.maxWidth ?? Math.max(minWidth, 320);\n return Math.max(minWidth, Math.min(maxWidth, Math.round(viewWidth * ratio)));\n};\n\n// ===== 容器几何信息(chart region rect)=====\n\nexport const getRegionGeometry = (ctx: LayoutContext, spec?: { width?: number; height?: number }) => {\n const region = ctx.chart?.getAllRegions?.()?.[0];\n const regionRect = region?.getLayoutRect?.();\n const regionStart = region?.getLayoutStartPoint?.();\n const chartRect = ctx.chart?.getLayoutRect?.();\n const bounds = ctx.getLayoutBounds?.();\n const width = Math.max(regionRect?.width ?? chartRect?.width ?? bounds?.width?.() ?? spec?.width ?? 0, 1);\n const height = Math.max(regionRect?.height ?? chartRect?.height ?? bounds?.height?.() ?? spec?.height ?? 0, 1);\n return {\n width,\n height,\n startX: regionStart?.x ?? 0,\n startY: regionStart?.y ?? 0\n };\n};\n\n// ===== 布局计算(layout.ts 的封装,附加 startX/startY 平移)=====\n\nexport const getLayout = (spec: IStorylineSpec, ctx: LayoutContext): StorylineLayoutResult => {\n const { width, height, startX, startY } = getRegionGeometry(ctx, spec);\n let blockWidth = resolveBlockWidth(spec, width);\n let blockHeight = spec.block?.height ?? (isLandscape(spec) ? 320 : DEFAULT_BLOCK_HEIGHT);\n // landscape:图片间距固定 40,根据 block 数量自适应单个 image 宽度\n if (isLandscape(spec) && !spec.block?.width) {\n const count = spec.data?.length ?? 0;\n if (count > 0) {\n const padding = normalizePadding(spec.block?.padding);\n const innerWidth = Math.max(width - padding.left - padding.right, 1);\n const LANDSCAPE_IMAGE_GAP = 40;\n const LANDSCAPE_IMAGE_MIN_WIDTH = 80;\n const totalGap = LANDSCAPE_IMAGE_GAP * Math.max(count - 1, 0);\n const adaptive = (innerWidth - totalGap) / count;\n blockWidth = Math.max(LANDSCAPE_IMAGE_MIN_WIDTH, Math.floor(adaptive));\n }\n }\n // portrait:每个 block 在垂直方向需要容纳 image + text,整体根据 region 高度均分\n // blockHeight = regionHeight / (count + 1)(即每个 block 的\"槽位\"高度),后续 portrait.ts 中:\n // imageHeight = blockHeight * 0.6\n // contentHeight = blockHeight\n if (isPortrait(spec) && !spec.block?.height) {\n const count = spec.data?.length ?? 0;\n if (count > 0) {\n const layoutPadding = typeof spec.layout === 'object' ? spec.layout.padding : undefined;\n const padding = normalizePadding(layoutPadding ?? spec.block?.padding);\n const innerHeight = Math.max(height - padding.top - padding.bottom, 1);\n blockHeight = Math.max(120, Math.floor(innerHeight / (count + 1)));\n }\n }\n const result = computeStorylineLayout(spec.data ?? [], {\n layout: spec.layout,\n viewBox: { width, height },\n block: {\n width: blockWidth,\n height: blockHeight\n },\n gap: spec.block?.gap ?? DEFAULT_BLOCK_GAP,\n padding: spec.block?.padding,\n lineDistance: spec.line?.distance\n });\n if (!startX && !startY) {\n return result;\n }\n return {\n ...result,\n blocks: result.blocks.map(block => ({\n ...block,\n x: block.x + startX,\n y: block.y + startY,\n center: {\n x: block.center.x + startX,\n y: block.center.y + startY\n }\n })),\n links: result.links.map(link => ({\n ...link,\n start: { x: link.start.x + startX, y: link.start.y + startY },\n end: { x: link.end.x + startX, y: link.end.y + startY },\n points: link.points.map(point => ({ x: point.x + startX, y: point.y + startY }))\n }))\n };\n};\n\n// ===== 文本 / 图像通用工具 =====\n\nexport const buildRichContent = (\n contentText: string[],\n spec: IStorylineSpec,\n overrides?: { fontSize?: number; lineHeight?: number; fill?: string; align?: 'left' | 'center' | 'right' }\n) => {\n const fontSize = Number(overrides?.fontSize ?? (spec.content?.style as any)?.fontSize ?? 18);\n const lineHeight = Number(overrides?.lineHeight ?? (spec.content?.style as any)?.lineHeight ?? 26);\n const fill = overrides?.fill ?? (spec.content?.style as any)?.fill ?? '#596173';\n const align = overrides?.align ?? 'left';\n\n return {\n type: 'rich' as const,\n text: contentText.reduce<{ text: string; fontSize: number; lineHeight: number; fill: string; align: string }[]>(\n (result, paragraph, index) => {\n const suffix = index === contentText.length - 1 ? '' : '\\n';\n result.push({\n text: `${paragraph}${suffix}`,\n fontSize,\n lineHeight,\n fill,\n align\n });\n return result;\n },\n []\n )\n };\n};\n\nexport const omitImageLayoutSpec = (imageSpec: IStorylineSpec['image']) => {\n if (!imageSpec) {\n return {};\n }\n const { width: _width, height: _height, position: _position, gap: _gap, ...rest } = imageSpec;\n return rest;\n};\n\n// ===== 默认 image / text 盒计算(用于通用 block)=====\n\nexport const getImageBox = (\n position: StorylineImagePosition,\n blockWidth: number,\n blockHeight: number,\n padding: ReturnType<typeof normalizePadding>,\n width: number,\n height: number,\n _gap: number,\n visible: boolean\n) => {\n if (!visible) {\n return { x: padding.left, y: padding.top, width: 0, height: 0 };\n }\n switch (position) {\n case 'left':\n return { x: padding.left, y: (blockHeight - height) / 2, width, height };\n case 'right':\n return { x: blockWidth - padding.right - width, y: (blockHeight - height) / 2, width, height };\n case 'bottom':\n return { x: (blockWidth - width) / 2, y: blockHeight - padding.bottom - height, width, height };\n case 'top':\n default:\n return { x: (blockWidth - width) / 2, y: padding.top, width, height };\n }\n};\n\nexport const getTextBox = (\n position: StorylineImagePosition,\n blockWidth: number,\n blockHeight: number,\n padding: ReturnType<typeof normalizePadding>,\n imageWidth: number,\n imageHeight: number,\n imageGap: number,\n hasImage: boolean\n) => {\n if (!hasImage) {\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom\n };\n }\n switch (position) {\n case 'left':\n return {\n x: padding.left + imageWidth + imageGap,\n y: padding.top,\n width: blockWidth - padding.left - padding.right - imageWidth - imageGap,\n height: blockHeight - padding.top - padding.bottom\n };\n case 'right':\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right - imageWidth - imageGap,\n height: blockHeight - padding.top - padding.bottom\n };\n case 'bottom':\n return {\n x: padding.left,\n y: padding.top,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom - imageHeight - imageGap\n };\n case 'top':\n default:\n return {\n x: padding.left,\n y: padding.top + imageHeight + imageGap,\n width: blockWidth - padding.left - padding.right,\n height: blockHeight - padding.top - padding.bottom - imageHeight - imageGap\n };\n }\n};\n\n// ===== Catmull-Rom 平滑曲线 =====\n\n/**\n * 用 Catmull-Rom 转 cubic Bezier 生成平滑曲线 path(贯穿所有点)。\n */\nexport const buildSmoothCurvePath = (points: StorylinePoint[]): string => {\n if (points.length < 2) {\n return '';\n }\n if (points.length === 2) {\n return `M ${points[0].x} ${points[0].y} L ${points[1].x} ${points[1].y}`;\n }\n let d = `M ${points[0].x} ${points[0].y}`;\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[i - 1] ?? points[i];\n const p1 = points[i];\n const p2 = points[i + 1];\n const p3 = points[i + 2] ?? p2;\n const c1x = p1.x + (p2.x - p0.x) / 6;\n const c1y = p1.y + (p2.y - p0.y) / 6;\n const c2x = p2.x - (p3.x - p1.x) / 6;\n const c2y = p2.y - (p3.y - p1.y) / 6;\n d += ` C ${c1x} ${c1y}, ${c2x} ${c2y}, ${p2.x} ${p2.y}`;\n }\n return d;\n};\n\n// 重导出常用的 layout helper(避免外部再 import layout.ts)\nexport { normalizeLayout, normalizePadding };\nexport type { IStorylineBlock, ICustomMarkSpec, StorylinePoint };\n"]}
@@ -10,7 +10,7 @@ var __rest = this && this.__rest || function(s, e) {
10
10
 
11
11
  import { LayoutZIndex } from "@visactor/vchart";
12
12
 
13
- import { DEFAULT_BLOCK_HEIGHT, DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT, DEFAULT_IMAGE_GAP, buildRichContent, getImageBox, getLayout, getTextBox, normalizePadding, omitImageLayoutSpec, resolveBlockWidth } from "./common";
13
+ import { DEFAULT_BLOCK_HEIGHT, DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT, DEFAULT_IMAGE_GAP, buildRichContent, getImageBackgroundStyle, getImageBox, getLayout, getTextBox, normalizePadding, omitImageLayoutSpec, resolveBlockWidth, resolveAdaptiveLineHeight, resolveTitleFontSize, shouldShowImageBackground } from "./common";
14
14
 
15
15
  export const buildDefaultLineMark = spec => {
16
16
  var _a, _b, _c, _d;
@@ -43,13 +43,15 @@ export const buildDefaultLineMark = spec => {
43
43
  };
44
44
 
45
45
  const getDefaultBlockMetrics = (spec, ctx, index) => {
46
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
47
- const block = getLayout(spec, ctx).blocks[index], padding = normalizePadding(null !== (_b = null === (_a = spec.block) || void 0 === _a ? void 0 : _a.padding) && void 0 !== _b ? _b : 12), imagePosition = null !== (_d = null === (_c = spec.image) || void 0 === _c ? void 0 : _c.position) && void 0 !== _d ? _d : "top", imageWidth = null !== (_f = null === (_e = spec.image) || void 0 === _e ? void 0 : _e.width) && void 0 !== _f ? _f : DEFAULT_IMAGE_WIDTH, imageHeight = null !== (_h = null === (_g = spec.image) || void 0 === _g ? void 0 : _g.height) && void 0 !== _h ? _h : DEFAULT_IMAGE_HEIGHT, imageGap = null !== (_k = null === (_j = spec.image) || void 0 === _j ? void 0 : _j.gap) && void 0 !== _k ? _k : DEFAULT_IMAGE_GAP, hasImage = !!(null === (_m = null === (_l = spec.data) || void 0 === _l ? void 0 : _l[index]) || void 0 === _m ? void 0 : _m.image), titleFontSize = Number(null !== (_q = null === (_p = null === (_o = spec.title) || void 0 === _o ? void 0 : _o.style) || void 0 === _p ? void 0 : _p.fontSize) && void 0 !== _q ? _q : 18), titleLineHeight = Number(null !== (_t = null === (_s = null === (_r = spec.title) || void 0 === _r ? void 0 : _r.style) || void 0 === _s ? void 0 : _s.lineHeight) && void 0 !== _t ? _t : Math.round(1.35 * titleFontSize)), titleHeight = (null === (_v = null === (_u = spec.data) || void 0 === _u ? void 0 : _u[index]) || void 0 === _v ? void 0 : _v.title) ? titleLineHeight : 0, blockWidth = null !== (_w = null == block ? void 0 : block.width) && void 0 !== _w ? _w : resolveBlockWidth(spec, 0), blockHeight = null !== (_z = null !== (_x = null == block ? void 0 : block.height) && void 0 !== _x ? _x : null === (_y = spec.block) || void 0 === _y ? void 0 : _y.height) && void 0 !== _z ? _z : DEFAULT_BLOCK_HEIGHT, imageBox = getImageBox(imagePosition, blockWidth, blockHeight, padding, imageWidth, imageHeight, imageGap, hasImage), textBox = getTextBox(imagePosition, blockWidth, blockHeight, padding, imageWidth, imageHeight, imageGap, hasImage), contentGap = (null === (_1 = null === (_0 = spec.data) || void 0 === _0 ? void 0 : _0[index]) || void 0 === _1 ? void 0 : _1.title) ? 8 : 0;
46
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
47
+ const block = getLayout(spec, ctx).blocks[index], padding = normalizePadding(null !== (_b = null === (_a = spec.block) || void 0 === _a ? void 0 : _a.padding) && void 0 !== _b ? _b : 12), imagePosition = null !== (_d = null === (_c = spec.image) || void 0 === _c ? void 0 : _c.position) && void 0 !== _d ? _d : "top", imageWidth = null !== (_f = null === (_e = spec.image) || void 0 === _e ? void 0 : _e.width) && void 0 !== _f ? _f : DEFAULT_IMAGE_WIDTH, imageHeight = null !== (_h = null === (_g = spec.image) || void 0 === _g ? void 0 : _g.height) && void 0 !== _h ? _h : DEFAULT_IMAGE_HEIGHT, imageGap = null !== (_k = null === (_j = spec.image) || void 0 === _j ? void 0 : _j.gap) && void 0 !== _k ? _k : DEFAULT_IMAGE_GAP, hasImage = !!(null === (_m = null === (_l = spec.data) || void 0 === _l ? void 0 : _l[index]) || void 0 === _m ? void 0 : _m.image), blockWidth = null !== (_o = null == block ? void 0 : block.width) && void 0 !== _o ? _o : resolveBlockWidth(spec, 0), blockHeight = null !== (_r = null !== (_p = null == block ? void 0 : block.height) && void 0 !== _p ? _p : null === (_q = spec.block) || void 0 === _q ? void 0 : _q.height) && void 0 !== _r ? _r : DEFAULT_BLOCK_HEIGHT, imageBox = getImageBox(imagePosition, blockWidth, blockHeight, padding, imageWidth, imageHeight, imageGap, hasImage), textBox = getTextBox(imagePosition, blockWidth, blockHeight, padding, imageWidth, imageHeight, imageGap, hasImage), titleFontSize = resolveTitleFontSize(spec, ctx, null === (_t = null === (_s = spec.data) || void 0 === _s ? void 0 : _s[index]) || void 0 === _t ? void 0 : _t.title, textBox.width, 18, [ 8, 28 ]), titleLineHeight = resolveAdaptiveLineHeight(titleFontSize, null === (_u = spec.title) || void 0 === _u ? void 0 : _u.style, Math.round(24.3)), titleHeight = (null === (_w = null === (_v = spec.data) || void 0 === _v ? void 0 : _v[index]) || void 0 === _w ? void 0 : _w.title) ? titleLineHeight : 0, contentGap = (null === (_y = null === (_x = spec.data) || void 0 === _x ? void 0 : _x[index]) || void 0 === _y ? void 0 : _y.title) ? 8 : 0;
48
48
  return {
49
49
  block: {
50
50
  width: blockWidth,
51
51
  height: blockHeight
52
52
  },
53
+ titleFontSize: titleFontSize,
54
+ titleLineHeight: titleLineHeight,
53
55
  imageBox: imageBox,
54
56
  textBox: textBox,
55
57
  contentBox: {
@@ -60,11 +62,11 @@ const getDefaultBlockMetrics = (spec, ctx, index) => {
60
62
  };
61
63
 
62
64
  export const buildDefaultBlockMark = (spec, block, index) => {
63
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
64
- const hasImage = !!block.image, contentText = Array.isArray(block.content) ? block.content : block.content ? [ block.content ] : [], titleFontSize = Number(null !== (_c = null === (_b = null === (_a = spec.title) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.fontSize) && void 0 !== _c ? _c : 18), titleLineHeight = Number(null !== (_f = null === (_e = null === (_d = spec.title) || void 0 === _d ? void 0 : _d.style) || void 0 === _e ? void 0 : _e.lineHeight) && void 0 !== _f ? _f : Math.round(1.35 * titleFontSize));
65
+ var _a, _b, _c, _d, _e, _f, _g;
66
+ const hasImage = !!block.image, contentText = Array.isArray(block.content) ? block.content : block.content ? [ block.content ] : [];
65
67
  return {
66
68
  type: "group",
67
- id: `storyline-block-${null !== (_g = block.id) && void 0 !== _g ? _g : index}`,
69
+ id: `storyline-block-${null !== (_a = block.id) && void 0 !== _a ? _a : index}`,
68
70
  name: `storyline-block-${index}`,
69
71
  zIndex: LayoutZIndex.Mark + 1,
70
72
  style: {
@@ -79,7 +81,7 @@ export const buildDefaultBlockMark = (spec, block, index) => {
79
81
  width: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).block.width,
80
82
  height: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).block.height
81
83
  },
82
- children: [ !0 === (null === (_h = spec.block) || void 0 === _h ? void 0 : _h.showBackground) ? {
84
+ children: [ !0 === (null === (_b = spec.block) || void 0 === _b ? void 0 : _b.showBackground) ? {
83
85
  type: "rect",
84
86
  name: `storyline-block-bg-${index}`,
85
87
  interactive: !1,
@@ -94,7 +96,18 @@ export const buildDefaultBlockMark = (spec, block, index) => {
94
96
  lineWidth: 1,
95
97
  shadowBlur: 6,
96
98
  shadowColor: "rgba(0, 0, 0, 0.08)"
97
- }, null === (_j = spec.block) || void 0 === _j ? void 0 : _j.style)
99
+ }, null === (_c = spec.block) || void 0 === _c ? void 0 : _c.style)
100
+ } : null, shouldShowImageBackground(spec) ? {
101
+ type: "rect",
102
+ name: `storyline-block-image-bg-${index}`,
103
+ interactive: !1,
104
+ style: Object.assign(Object.assign({
105
+ x: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.x,
106
+ y: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.y,
107
+ width: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.width,
108
+ height: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.height,
109
+ cornerRadius: 8
110
+ }, getImageBackgroundStyle(spec)), null === (_d = spec.block) || void 0 === _d ? void 0 : _d.style)
98
111
  } : null, hasImage ? Object.assign(Object.assign({
99
112
  type: "image",
100
113
  name: `storyline-block-image-${index}`,
@@ -106,7 +119,7 @@ export const buildDefaultBlockMark = (spec, block, index) => {
106
119
  width: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.width,
107
120
  height: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).imageBox.height,
108
121
  image: block.image
109
- }, null === (_k = spec.image) || void 0 === _k ? void 0 : _k.style)
122
+ }, null === (_e = spec.image) || void 0 === _e ? void 0 : _e.style)
110
123
  }) : null, block.title ? Object.assign(Object.assign({
111
124
  type: "text",
112
125
  name: `storyline-block-title-${index}`,
@@ -117,8 +130,8 @@ export const buildDefaultBlockMark = (spec, block, index) => {
117
130
  y: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).textBox.y,
118
131
  text: block.title,
119
132
  maxLineWidth: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).textBox.width,
120
- fontSize: titleFontSize,
121
- lineHeight: titleLineHeight,
133
+ fontSize: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).titleFontSize,
134
+ lineHeight: (_datum, ctx) => getDefaultBlockMetrics(spec, ctx, index).titleLineHeight,
122
135
  fontWeight: "bold",
123
136
  fill: "#1f2430",
124
137
  stroke: "#fff",
@@ -126,7 +139,7 @@ export const buildDefaultBlockMark = (spec, block, index) => {
126
139
  lineJoin: "round",
127
140
  textAlign: "left",
128
141
  textBaseline: "top"
129
- }, null === (_l = spec.title) || void 0 === _l ? void 0 : _l.style)
142
+ }, null === (_f = spec.title) || void 0 === _f ? void 0 : _f.style)
130
143
  }) : null, contentText.length ? Object.assign(Object.assign({
131
144
  type: "text",
132
145
  name: `storyline-block-content-${index}`,
@@ -149,7 +162,7 @@ export const buildDefaultBlockMark = (spec, block, index) => {
149
162
  wordBreak: "break-word",
150
163
  ellipsis: "...",
151
164
  fill: "#596173"
152
- }, null === (_m = spec.content) || void 0 === _m ? void 0 : _m.style)
165
+ }, null === (_g = spec.content) || void 0 === _g ? void 0 : _g.style)
153
166
  }) : null ].filter(Boolean)
154
167
  };
155
168
  };