@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.
Files changed (175) hide show
  1. package/build/index.js +143 -103
  2. package/build/index.min.js +1 -1
  3. package/cjs/charts/axis-3d/index.js +2 -1
  4. package/cjs/charts/axis-3d/linear-axis.js +1 -2
  5. package/cjs/charts/bar-3d/chart-spec-transformer.js +1 -1
  6. package/cjs/charts/bar-3d/chart.js +1 -1
  7. package/cjs/charts/bar-3d/constant.js +1 -1
  8. package/cjs/charts/bar-3d/index.js +1 -1
  9. package/cjs/charts/bar-3d/interface.js +1 -1
  10. package/cjs/charts/bar-3d/series-spec-transformer.js +1 -1
  11. package/cjs/charts/bar-3d/series.js +1 -1
  12. package/cjs/charts/bar-3d/theme.js +1 -1
  13. package/cjs/charts/candlestick/candlestick-transformer.js +1 -1
  14. package/cjs/charts/candlestick/candlestick.js +1 -2
  15. package/cjs/charts/candlestick/index.js +1 -1
  16. package/cjs/charts/candlestick/interface.js +1 -1
  17. package/cjs/charts/candlestick/util.js +1 -1
  18. package/cjs/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
  19. package/cjs/charts/combination-candlestick/combination-candlestick.js +1 -1
  20. package/cjs/charts/combination-candlestick/constant.js +1 -1
  21. package/cjs/charts/combination-candlestick/index.js +1 -1
  22. package/cjs/charts/combination-candlestick/interface.js +1 -1
  23. package/cjs/charts/conversion-funnel/arrow-data-transform.js +1 -1
  24. package/cjs/charts/conversion-funnel/constants.js +1 -1
  25. package/cjs/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
  26. package/cjs/charts/conversion-funnel/conversion-funnel.js +1 -1
  27. package/cjs/charts/conversion-funnel/index.js +1 -1
  28. package/cjs/charts/conversion-funnel/interface.js +1 -1
  29. package/cjs/charts/conversion-funnel/util.js +1 -1
  30. package/cjs/charts/funnel-3d/chart.js +1 -2
  31. package/cjs/charts/funnel-3d/constant.js +1 -1
  32. package/cjs/charts/funnel-3d/index.js +1 -1
  33. package/cjs/charts/funnel-3d/interface.js +1 -1
  34. package/cjs/charts/funnel-3d/series-spec-transformer.js +1 -1
  35. package/cjs/charts/funnel-3d/series.js +1 -1
  36. package/cjs/charts/funnel-3d/theme.js +1 -1
  37. package/cjs/charts/histogram-3d/chart.js +1 -1
  38. package/cjs/charts/storyline/layouts/arc.js +61 -17
  39. package/cjs/charts/storyline/layouts/arc.js.map +1 -1
  40. package/cjs/charts/storyline/layouts/clock.js +16 -8
  41. package/cjs/charts/storyline/layouts/clock.js.map +1 -1
  42. package/cjs/charts/storyline/layouts/common.d.ts +3 -15
  43. package/cjs/charts/storyline/layouts/common.js +9 -21
  44. package/cjs/charts/storyline/layouts/common.js.map +1 -1
  45. package/cjs/charts/storyline/layouts/default.js +14 -8
  46. package/cjs/charts/storyline/layouts/default.js.map +1 -1
  47. package/cjs/charts/storyline/layouts/ladder.js +15 -9
  48. package/cjs/charts/storyline/layouts/ladder.js.map +1 -1
  49. package/cjs/charts/storyline/layouts/landscape.js +21 -15
  50. package/cjs/charts/storyline/layouts/landscape.js.map +1 -1
  51. package/cjs/charts/storyline/layouts/portrait.d.ts +1 -1
  52. package/cjs/charts/storyline/layouts/portrait.js +21 -16
  53. package/cjs/charts/storyline/layouts/portrait.js.map +1 -1
  54. package/cjs/charts/storyline/layouts/wing.js +15 -8
  55. package/cjs/charts/storyline/layouts/wing.js.map +1 -1
  56. package/cjs/components/bar-link/bar-link.js +1 -1
  57. package/cjs/components/bar-link/constant.js +1 -1
  58. package/cjs/components/bar-link/index.js +1 -1
  59. package/cjs/components/bar-link/type.js +1 -1
  60. package/cjs/components/bar-link/util.js +1 -1
  61. package/cjs/components/bar-regression-line/index.js +1 -1
  62. package/cjs/components/bar-regression-line/type.js +1 -1
  63. package/cjs/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  64. package/cjs/components/extension-mark-sync-state/index.js +1 -1
  65. package/cjs/components/extension-mark-sync-state/type.js +1 -1
  66. package/cjs/components/histogram-regression-line/index.js +1 -1
  67. package/cjs/components/histogram-regression-line/type.js +2 -1
  68. package/cjs/components/map-label/index.js +1 -1
  69. package/cjs/components/map-label/layout.js +1 -1
  70. package/cjs/components/map-label/map-label-transformer.js +1 -1
  71. package/cjs/components/map-label/map-label.js +1 -1
  72. package/cjs/components/map-label/theme.js +1 -1
  73. package/cjs/components/map-label/type.js +1 -1
  74. package/cjs/components/regression-line/index.js +1 -1
  75. package/cjs/components/regression-line/regression-line.js +1 -1
  76. package/cjs/components/regression-line/type.js +1 -1
  77. package/cjs/components/scatter-regression-line/index.js +1 -1
  78. package/cjs/components/scatter-regression-line/type.js +1 -1
  79. package/cjs/components/series-break/constant.js +1 -1
  80. package/cjs/components/series-break/index.js +1 -1
  81. package/cjs/components/series-break/series-break.js +1 -1
  82. package/cjs/components/series-break/type.js +1 -1
  83. package/cjs/components/series-break/util.js +2 -1
  84. package/cjs/components/series-label/constant.js +1 -1
  85. package/cjs/components/series-label/index.js +1 -1
  86. package/cjs/components/series-label/series-label.js +1 -1
  87. package/cjs/components/series-label/type.js +1 -1
  88. package/cjs/components/series-label/util.js +1 -1
  89. package/esm/charts/axis-3d/index.js +2 -1
  90. package/esm/charts/axis-3d/linear-axis.js +1 -2
  91. package/esm/charts/bar-3d/chart-spec-transformer.js +1 -1
  92. package/esm/charts/bar-3d/chart.js +1 -1
  93. package/esm/charts/bar-3d/constant.js +1 -1
  94. package/esm/charts/bar-3d/index.js +1 -1
  95. package/esm/charts/bar-3d/interface.js +1 -1
  96. package/esm/charts/bar-3d/series-spec-transformer.js +1 -1
  97. package/esm/charts/bar-3d/series.js +1 -1
  98. package/esm/charts/bar-3d/theme.js +1 -1
  99. package/esm/charts/candlestick/candlestick-transformer.js +1 -1
  100. package/esm/charts/candlestick/candlestick.js +1 -2
  101. package/esm/charts/candlestick/index.js +1 -1
  102. package/esm/charts/candlestick/interface.js +1 -1
  103. package/esm/charts/candlestick/util.js +1 -1
  104. package/esm/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
  105. package/esm/charts/combination-candlestick/combination-candlestick.js +1 -1
  106. package/esm/charts/combination-candlestick/constant.js +1 -1
  107. package/esm/charts/combination-candlestick/index.js +1 -1
  108. package/esm/charts/combination-candlestick/interface.js +1 -1
  109. package/esm/charts/conversion-funnel/arrow-data-transform.js +1 -1
  110. package/esm/charts/conversion-funnel/constants.js +1 -1
  111. package/esm/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
  112. package/esm/charts/conversion-funnel/conversion-funnel.js +1 -1
  113. package/esm/charts/conversion-funnel/index.js +1 -1
  114. package/esm/charts/conversion-funnel/interface.js +1 -1
  115. package/esm/charts/conversion-funnel/util.js +1 -1
  116. package/esm/charts/funnel-3d/chart.js +1 -2
  117. package/esm/charts/funnel-3d/constant.js +1 -1
  118. package/esm/charts/funnel-3d/index.js +1 -1
  119. package/esm/charts/funnel-3d/interface.js +1 -1
  120. package/esm/charts/funnel-3d/series-spec-transformer.js +1 -1
  121. package/esm/charts/funnel-3d/series.js +1 -1
  122. package/esm/charts/funnel-3d/theme.js +1 -1
  123. package/esm/charts/histogram-3d/chart.js +1 -1
  124. package/esm/charts/storyline/layouts/arc.js +59 -17
  125. package/esm/charts/storyline/layouts/arc.js.map +1 -1
  126. package/esm/charts/storyline/layouts/clock.js +17 -9
  127. package/esm/charts/storyline/layouts/clock.js.map +1 -1
  128. package/esm/charts/storyline/layouts/common.d.ts +3 -15
  129. package/esm/charts/storyline/layouts/common.js +6 -18
  130. package/esm/charts/storyline/layouts/common.js.map +1 -1
  131. package/esm/charts/storyline/layouts/default.js +14 -9
  132. package/esm/charts/storyline/layouts/default.js.map +1 -1
  133. package/esm/charts/storyline/layouts/ladder.js +15 -10
  134. package/esm/charts/storyline/layouts/ladder.js.map +1 -1
  135. package/esm/charts/storyline/layouts/landscape.js +20 -16
  136. package/esm/charts/storyline/layouts/landscape.js.map +1 -1
  137. package/esm/charts/storyline/layouts/portrait.d.ts +1 -1
  138. package/esm/charts/storyline/layouts/portrait.js +20 -16
  139. package/esm/charts/storyline/layouts/portrait.js.map +1 -1
  140. package/esm/charts/storyline/layouts/wing.js +15 -9
  141. package/esm/charts/storyline/layouts/wing.js.map +1 -1
  142. package/esm/components/bar-link/bar-link.js +1 -1
  143. package/esm/components/bar-link/constant.js +1 -1
  144. package/esm/components/bar-link/index.js +1 -1
  145. package/esm/components/bar-link/type.js +1 -1
  146. package/esm/components/bar-link/util.js +1 -1
  147. package/esm/components/bar-regression-line/index.js +1 -1
  148. package/esm/components/bar-regression-line/type.js +1 -1
  149. package/esm/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  150. package/esm/components/extension-mark-sync-state/index.js +1 -1
  151. package/esm/components/extension-mark-sync-state/type.js +1 -1
  152. package/esm/components/histogram-regression-line/index.js +1 -1
  153. package/esm/components/histogram-regression-line/type.js +2 -1
  154. package/esm/components/map-label/index.js +1 -1
  155. package/esm/components/map-label/layout.js +1 -1
  156. package/esm/components/map-label/map-label-transformer.js +1 -1
  157. package/esm/components/map-label/map-label.js +1 -1
  158. package/esm/components/map-label/theme.js +1 -1
  159. package/esm/components/map-label/type.js +1 -1
  160. package/esm/components/regression-line/index.js +1 -1
  161. package/esm/components/regression-line/regression-line.js +1 -1
  162. package/esm/components/regression-line/type.js +1 -1
  163. package/esm/components/scatter-regression-line/index.js +1 -1
  164. package/esm/components/scatter-regression-line/type.js +1 -1
  165. package/esm/components/series-break/constant.js +1 -1
  166. package/esm/components/series-break/index.js +1 -1
  167. package/esm/components/series-break/series-break.js +1 -1
  168. package/esm/components/series-break/type.js +1 -1
  169. package/esm/components/series-break/util.js +2 -1
  170. package/esm/components/series-label/constant.js +1 -1
  171. package/esm/components/series-label/index.js +1 -1
  172. package/esm/components/series-label/series-label.js +1 -1
  173. package/esm/components/series-label/type.js +1 -1
  174. package/esm/components/series-label/util.js +1 -1
  175. 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 = 40, PORTRAIT_MARKER_LINE_HEIGHT = 28, PORTRAIT_MARKER_AXIS_PADDING = 6;
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 = 26;
14
+ exports.PORTRAIT_CONTENT_LINE_HEIGHT = 23;
15
15
 
16
- const PORTRAIT_CONTENT_FONT_SIZE = 18;
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), 40), markerLineHeight = (0,
59
- common_1.resolveAdaptiveLineHeight)(markerFontSize, null === (_c = spec.marker) || void 0 === _c ? void 0 : _c.style, 28, .9);
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 : 18), 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,
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), minContentHeight = exports.PORTRAIT_CONTENT_LINES * contentLineHeight, contentHeight = Math.max(minContentHeight, Math.round(blockHeight * exports.PORTRAIT_CONTENT_HEIGHT_RATIO)), textHeight = titleLineHeight + 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;
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 + titleLineHeight + titleToContentGap,
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.buildRichContent)(contentText, spec, {
263
- fontSize: 18,
264
- lineHeight: exports.PORTRAIT_CONTENT_LINE_HEIGHT,
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":"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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 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), contentFontSize = Number(null !== (_g = null === (_f = null === (_e = spec.content) || void 0 === _e ? void 0 : _e.style) || void 0 === _f ? void 0 : _f.fontSize) && void 0 !== _g ? _g : 12), contentLineHeight = Number(null !== (_k = null === (_j = null === (_h = spec.content) || void 0 === _h ? void 0 : _h.style) || void 0 === _j ? void 0 : _j.lineHeight) && void 0 !== _k ? _k : 17), imageWidth = Number(null !== (_m = null === (_l = spec.image) || void 0 === _l ? void 0 : _l.width) && void 0 !== _m ? _m : 160), imageHeight = Number(null !== (_p = null === (_o = spec.image) || void 0 === _o ? void 0 : _o.height) && void 0 !== _p ? _p : 160), imageBox = {
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 !== (_r = null === (_q = spec.data) || void 0 === _q ? void 0 : _q.length) && void 0 !== _r ? _r : 0;
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 + titleLineHeight + 4,
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 + titleLineHeight + 4,
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.buildRichContent)(contentText, spec),
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":"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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 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"]}
@@ -84,4 +84,4 @@ const registerBarLink = () => {
84
84
  };
85
85
 
86
86
  exports.registerBarLink = registerBarLink;
87
- //# sourceMappingURL=bar-link.js.map
87
+ //# sourceMappingURL=bar-link.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.BAR_LINK = void 0, exports.BAR_LINK = "barLink";
6
- //# sourceMappingURL=constant.js.map
6
+ //# sourceMappingURL=constant.js.map
@@ -46,4 +46,4 @@ Object.defineProperty(exports, "getBarLinkConfig", {
46
46
  return util_1.appendBarLinkConfig;
47
47
  }
48
48
  }), __exportStar(require("./constant"), exports);
49
- //# sourceMappingURL=index.js.map
49
+ //# sourceMappingURL=index.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=type.js.map
6
+ //# sourceMappingURL=type.js.map
@@ -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
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=type.js.map
6
+ //# sourceMappingURL=type.js.map
@@ -78,4 +78,4 @@ const registerExtensionMarkSyncStatePlugin = () => {
78
78
  };
79
79
 
80
80
  exports.registerExtensionMarkSyncStatePlugin = registerExtensionMarkSyncStatePlugin;
81
- //# sourceMappingURL=extension-mark-sync-state.js.map
81
+ //# sourceMappingURL=extension-mark-sync-state.js.map
@@ -32,4 +32,4 @@ Object.defineProperty(exports, "ExtensionMarkSyncStatePlugin", {
32
32
  return extension_mark_sync_state_1.registerExtensionMarkSyncStatePlugin;
33
33
  }
34
34
  }), __exportStar(require("./type"), exports);
35
- //# sourceMappingURL=index.js.map
35
+ //# sourceMappingURL=index.js.map
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  });
6
- //# sourceMappingURL=type.js.map
6
+ //# sourceMappingURL=type.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