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

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 (189) hide show
  1. package/build/index.js +458 -216
  2. package/build/index.min.js +2 -2
  3. package/cjs/charts/axis-3d/index.js +1 -2
  4. package/cjs/charts/axis-3d/linear-axis.js +2 -1
  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 +2 -1
  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 +2 -1
  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/interface.d.ts +2 -0
  39. package/cjs/charts/storyline/interface.js.map +1 -1
  40. package/cjs/charts/storyline/layout.d.ts +6 -1
  41. package/cjs/charts/storyline/layout.js +8 -2
  42. package/cjs/charts/storyline/layout.js.map +1 -1
  43. package/cjs/charts/storyline/layouts/arc.js +86 -54
  44. package/cjs/charts/storyline/layouts/arc.js.map +1 -1
  45. package/cjs/charts/storyline/layouts/clock.js +25 -23
  46. package/cjs/charts/storyline/layouts/clock.js.map +1 -1
  47. package/cjs/charts/storyline/layouts/common.d.ts +11 -2
  48. package/cjs/charts/storyline/layouts/common.js +21 -19
  49. package/cjs/charts/storyline/layouts/common.js.map +1 -1
  50. package/cjs/charts/storyline/layouts/default.js +12 -10
  51. package/cjs/charts/storyline/layouts/default.js.map +1 -1
  52. package/cjs/charts/storyline/layouts/ladder.js +8 -6
  53. package/cjs/charts/storyline/layouts/ladder.js.map +1 -1
  54. package/cjs/charts/storyline/layouts/landscape.js +9 -7
  55. package/cjs/charts/storyline/layouts/landscape.js.map +1 -1
  56. package/cjs/charts/storyline/layouts/portrait.d.ts +7 -0
  57. package/cjs/charts/storyline/layouts/portrait.js +81 -25
  58. package/cjs/charts/storyline/layouts/portrait.js.map +1 -1
  59. package/cjs/charts/storyline/layouts/wing.js +109 -52
  60. package/cjs/charts/storyline/layouts/wing.js.map +1 -1
  61. package/cjs/charts/storyline/storyline-transformer.js +21 -8
  62. package/cjs/charts/storyline/storyline-transformer.js.map +1 -1
  63. package/cjs/components/bar-link/bar-link.js +1 -1
  64. package/cjs/components/bar-link/constant.js +1 -1
  65. package/cjs/components/bar-link/index.js +1 -1
  66. package/cjs/components/bar-link/type.js +1 -1
  67. package/cjs/components/bar-link/util.js +1 -1
  68. package/cjs/components/bar-regression-line/index.js +1 -1
  69. package/cjs/components/bar-regression-line/type.js +1 -1
  70. package/cjs/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  71. package/cjs/components/extension-mark-sync-state/index.js +1 -1
  72. package/cjs/components/extension-mark-sync-state/type.js +1 -1
  73. package/cjs/components/histogram-regression-line/index.js +1 -1
  74. package/cjs/components/histogram-regression-line/type.js +1 -2
  75. package/cjs/components/map-label/index.js +1 -1
  76. package/cjs/components/map-label/layout.js +1 -1
  77. package/cjs/components/map-label/map-label-transformer.js +1 -1
  78. package/cjs/components/map-label/map-label.js +1 -1
  79. package/cjs/components/map-label/theme.js +1 -1
  80. package/cjs/components/map-label/type.js +1 -1
  81. package/cjs/components/regression-line/index.js +1 -1
  82. package/cjs/components/regression-line/regression-line.js +1 -1
  83. package/cjs/components/regression-line/type.js +1 -1
  84. package/cjs/components/scatter-regression-line/index.js +1 -1
  85. package/cjs/components/scatter-regression-line/type.js +1 -1
  86. package/cjs/components/series-break/constant.js +1 -1
  87. package/cjs/components/series-break/index.js +1 -1
  88. package/cjs/components/series-break/series-break.js +1 -1
  89. package/cjs/components/series-break/type.js +1 -1
  90. package/cjs/components/series-break/util.js +1 -2
  91. package/cjs/components/series-label/constant.js +1 -1
  92. package/cjs/components/series-label/index.js +1 -1
  93. package/cjs/components/series-label/series-label.js +1 -1
  94. package/cjs/components/series-label/type.js +1 -1
  95. package/cjs/components/series-label/util.js +1 -1
  96. package/esm/charts/axis-3d/index.js +1 -2
  97. package/esm/charts/axis-3d/linear-axis.js +2 -1
  98. package/esm/charts/bar-3d/chart-spec-transformer.js +1 -1
  99. package/esm/charts/bar-3d/chart.js +1 -1
  100. package/esm/charts/bar-3d/constant.js +1 -1
  101. package/esm/charts/bar-3d/index.js +1 -1
  102. package/esm/charts/bar-3d/interface.js +1 -1
  103. package/esm/charts/bar-3d/series-spec-transformer.js +1 -1
  104. package/esm/charts/bar-3d/series.js +1 -1
  105. package/esm/charts/bar-3d/theme.js +1 -1
  106. package/esm/charts/candlestick/candlestick-transformer.js +1 -1
  107. package/esm/charts/candlestick/candlestick.js +2 -1
  108. package/esm/charts/candlestick/index.js +1 -1
  109. package/esm/charts/candlestick/interface.js +1 -1
  110. package/esm/charts/candlestick/util.js +1 -1
  111. package/esm/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
  112. package/esm/charts/combination-candlestick/combination-candlestick.js +1 -1
  113. package/esm/charts/combination-candlestick/constant.js +1 -1
  114. package/esm/charts/combination-candlestick/index.js +1 -1
  115. package/esm/charts/combination-candlestick/interface.js +1 -1
  116. package/esm/charts/conversion-funnel/arrow-data-transform.js +1 -1
  117. package/esm/charts/conversion-funnel/constants.js +1 -1
  118. package/esm/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
  119. package/esm/charts/conversion-funnel/conversion-funnel.js +1 -1
  120. package/esm/charts/conversion-funnel/index.js +1 -1
  121. package/esm/charts/conversion-funnel/interface.js +1 -1
  122. package/esm/charts/conversion-funnel/util.js +1 -1
  123. package/esm/charts/funnel-3d/chart.js +2 -1
  124. package/esm/charts/funnel-3d/constant.js +1 -1
  125. package/esm/charts/funnel-3d/index.js +1 -1
  126. package/esm/charts/funnel-3d/interface.js +1 -1
  127. package/esm/charts/funnel-3d/series-spec-transformer.js +1 -1
  128. package/esm/charts/funnel-3d/series.js +1 -1
  129. package/esm/charts/funnel-3d/theme.js +1 -1
  130. package/esm/charts/histogram-3d/chart.js +1 -1
  131. package/esm/charts/storyline/interface.d.ts +2 -0
  132. package/esm/charts/storyline/interface.js.map +1 -1
  133. package/esm/charts/storyline/layout.d.ts +6 -1
  134. package/esm/charts/storyline/layout.js +8 -2
  135. package/esm/charts/storyline/layout.js.map +1 -1
  136. package/esm/charts/storyline/layouts/arc.js +86 -52
  137. package/esm/charts/storyline/layouts/arc.js.map +1 -1
  138. package/esm/charts/storyline/layouts/clock.js +25 -23
  139. package/esm/charts/storyline/layouts/clock.js.map +1 -1
  140. package/esm/charts/storyline/layouts/common.d.ts +11 -2
  141. package/esm/charts/storyline/layouts/common.js +20 -19
  142. package/esm/charts/storyline/layouts/common.js.map +1 -1
  143. package/esm/charts/storyline/layouts/default.js +12 -10
  144. package/esm/charts/storyline/layouts/default.js.map +1 -1
  145. package/esm/charts/storyline/layouts/ladder.js +8 -6
  146. package/esm/charts/storyline/layouts/ladder.js.map +1 -1
  147. package/esm/charts/storyline/layouts/landscape.js +9 -7
  148. package/esm/charts/storyline/layouts/landscape.js.map +1 -1
  149. package/esm/charts/storyline/layouts/portrait.d.ts +7 -0
  150. package/esm/charts/storyline/layouts/portrait.js +83 -20
  151. package/esm/charts/storyline/layouts/portrait.js.map +1 -1
  152. package/esm/charts/storyline/layouts/wing.js +109 -51
  153. package/esm/charts/storyline/layouts/wing.js.map +1 -1
  154. package/esm/charts/storyline/storyline-transformer.js +22 -10
  155. package/esm/charts/storyline/storyline-transformer.js.map +1 -1
  156. package/esm/components/bar-link/bar-link.js +1 -1
  157. package/esm/components/bar-link/constant.js +1 -1
  158. package/esm/components/bar-link/index.js +1 -1
  159. package/esm/components/bar-link/type.js +1 -1
  160. package/esm/components/bar-link/util.js +1 -1
  161. package/esm/components/bar-regression-line/index.js +1 -1
  162. package/esm/components/bar-regression-line/type.js +1 -1
  163. package/esm/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  164. package/esm/components/extension-mark-sync-state/index.js +1 -1
  165. package/esm/components/extension-mark-sync-state/type.js +1 -1
  166. package/esm/components/histogram-regression-line/index.js +1 -1
  167. package/esm/components/histogram-regression-line/type.js +1 -2
  168. package/esm/components/map-label/index.js +1 -1
  169. package/esm/components/map-label/layout.js +1 -1
  170. package/esm/components/map-label/map-label-transformer.js +1 -1
  171. package/esm/components/map-label/map-label.js +1 -1
  172. package/esm/components/map-label/theme.js +1 -1
  173. package/esm/components/map-label/type.js +1 -1
  174. package/esm/components/regression-line/index.js +1 -1
  175. package/esm/components/regression-line/regression-line.js +1 -1
  176. package/esm/components/regression-line/type.js +1 -1
  177. package/esm/components/scatter-regression-line/index.js +1 -1
  178. package/esm/components/scatter-regression-line/type.js +1 -1
  179. package/esm/components/series-break/constant.js +1 -1
  180. package/esm/components/series-break/index.js +1 -1
  181. package/esm/components/series-break/series-break.js +1 -1
  182. package/esm/components/series-break/type.js +1 -1
  183. package/esm/components/series-break/util.js +1 -2
  184. package/esm/components/series-label/constant.js +1 -1
  185. package/esm/components/series-label/index.js +1 -1
  186. package/esm/components/series-label/series-label.js +1 -1
  187. package/esm/components/series-label/type.js +1 -1
  188. package/esm/components/series-label/util.js +1 -1
  189. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/storyline/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {\n IChartSpec,\n IComposedTextMarkSpec,\n IImageMarkSpec,\n IMarkSpec,\n IPathMarkSpec,\n IRectMarkSpec,\n ITextMarkSpec,\n StringOrNumber\n} from '@visactor/vchart';\n\nexport type StorylineLayoutType = 'clock' | 'arc' | 'wing' | 'landscape' | 'portrait' | 'ladder' | 'spiral';\n\nexport type StorylineImagePosition = 'top' | 'left' | 'right' | 'bottom';\nexport type StorylineLineType = 'line' | 'polyline' | 'curve';\nexport type StorylineWingDirection = 'left' | 'right';\nexport type StorylineLadderDirection = 'up' | 'down';\nexport type StorylineArcDirection = 'up' | 'down';\n\nexport interface IStorylineBlock {\n id?: StringOrNumber;\n title?: string;\n content?: string | string[];\n image?: string | HTMLImageElement | HTMLCanvasElement;\n /**\n * 绘制在主 image 背后的装饰图(如 portrait 布局的错位 shadow image)。\n * 仅在对应布局的 image.showBackground 为 true 时生效。\n * 若未配置,则不会绘制装饰 image。\n */\n subImage?: string | HTMLImageElement | HTMLCanvasElement;\n datum?: unknown;\n}\n\nexport interface IStorylineLayoutOptions {\n type: StorylineLayoutType;\n /**\n * 边缘留白,支持单值或 [top, right, bottom, left]。\n */\n padding?: number | [number, number, number, number];\n /**\n * 对 circular/arc 布局生效,控制半径占可用空间的比例。\n */\n radiusRatio?: number;\n /**\n * 对 circular/arc 布局生效,角度单位为度。\n */\n startAngle?: number;\n /**\n * 对 circular/arc 布局生效,角度单位为度。\n */\n endAngle?: number;\n /**\n * 方向控制:\n * - wing 布局:'left' | 'right',圆心锚位置;\n * - ladder 布局:'up' | 'down','up' 表示左下→右上对角线(默认),'down' 表示左上→右下对角线;\n * - arc 布局:'up' | 'down','up' 表示穹顶(centerImage 贴底,弧线在上方),'down' 表示碗形(centerImage 贴顶,弧线在下方)。\n */\n direction?: StorylineWingDirection | StorylineLadderDirection | StorylineArcDirection;\n /**\n * 对 ladder 布局生效:贯穿画布的倾斜大字 headline。\n * 缺省时使用占位文本。倾斜方向自动跟随对角线。\n */\n headline?: string;\n}\n\nexport interface IStorylineBlockSpec {\n width?: number;\n widthRatio?: number;\n minWidth?: number;\n maxWidth?: number;\n height?: number;\n padding?: number | [number, number, number, number];\n gap?: number;\n /**\n * 是否展示 block 背后的卡片背景 rect(白底 + 描边 + 阴影)。\n * 仅 up-ladder 等少数布局支持,默认 false(不展示)。\n */\n showBackground?: boolean;\n style?: Partial<IRectMarkSpec>;\n}\n\nexport interface IStorylineImageSpec extends IMarkSpec<IImageMarkSpec> {\n width?: number;\n height?: number;\n position?: StorylineImagePosition;\n gap?: number;\n /**\n * 是否展示 image 背后的装饰图元(halo / shadow / 背景 rect 等)。\n * 不同布局对应的装饰图元不同:\n * - wing: 圆形 halo symbol\n * - portrait: 错位 shadow image + mask\n * - clock: 楔形/圆形背景 rect\n * - dome / bowl / landscape: image-bg(无图时的占位 rect 不受此开关影响)\n * 默认 false(不展示)。\n */\n showBackground?: boolean;\n}\n\nexport interface IStorylineCenterImageSpec extends IMarkSpec<IImageMarkSpec> {\n width?: number;\n height?: number;\n visible?: boolean;\n image?: string | HTMLImageElement | HTMLCanvasElement;\n}\n\nexport interface IStorylineLineSpec extends IMarkSpec<IPathMarkSpec> {\n visible?: boolean;\n type?: StorylineLineType;\n showArrow?: boolean;\n arrowSize?: number;\n /**\n * 连接线和 block 边缘之间的距离。\n */\n distance?: number;\n}\n\nexport interface IStorylineSpec extends Omit<IChartSpec, 'type' | 'data' | 'series' | 'title' | 'layout'> {\n type: 'storyline';\n data: IStorylineBlock[];\n layout?: StorylineLayoutType | IStorylineLayoutOptions;\n block?: IStorylineBlockSpec;\n title?: IMarkSpec<ITextMarkSpec>;\n content?: IMarkSpec<IComposedTextMarkSpec>;\n image?: IStorylineImageSpec;\n centerImage?: IStorylineCenterImageSpec;\n line?: IStorylineLineSpec;\n themeColor?: string;\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/storyline/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {\n IChartSpec,\n IComposedTextMarkSpec,\n IImageMarkSpec,\n IMarkSpec,\n IPathMarkSpec,\n IRectMarkSpec,\n ITextMarkSpec,\n StringOrNumber\n} from '@visactor/vchart';\n\nexport type StorylineLayoutType = 'clock' | 'arc' | 'wing' | 'landscape' | 'portrait' | 'ladder' | 'spiral';\n\nexport type StorylineImagePosition = 'top' | 'left' | 'right' | 'bottom';\nexport type StorylineLineType = 'line' | 'polyline' | 'curve';\nexport type StorylineWingDirection = 'left' | 'right';\nexport type StorylineLadderDirection = 'up' | 'down';\nexport type StorylineArcDirection = 'up' | 'down';\n\nexport interface IStorylineBlock {\n id?: StringOrNumber;\n title?: string;\n content?: string | string[];\n image?: string | HTMLImageElement | HTMLCanvasElement;\n /**\n * 绘制在主 image 背后的装饰图(如 portrait 布局的错位 shadow image)。\n * 若未配置,则不会绘制装饰 image。\n */\n subImage?: string | HTMLImageElement | HTMLCanvasElement;\n /**\n * 时间节点文本(如 \"2012\")。\n * 仅 portrait 布局生效:在中轴 rect 上沿每个 block 的 center.y 处纵向绘制。\n * 配合 spec.marker 控制样式与显隐。\n */\n marker?: string;\n datum?: unknown;\n}\n\nexport interface IStorylineLayoutOptions {\n type: StorylineLayoutType;\n /**\n * 边缘留白,支持单值或 [top, right, bottom, left]。\n */\n padding?: number | [number, number, number, number];\n /**\n * 对 circular/arc 布局生效,控制半径占可用空间的比例。\n */\n radiusRatio?: number;\n /**\n * 对 circular/arc 布局生效,角度单位为度。\n */\n startAngle?: number;\n /**\n * 对 circular/arc 布局生效,角度单位为度。\n */\n endAngle?: number;\n /**\n * 方向控制:\n * - wing 布局:'left' | 'right',圆心锚位置;\n * - ladder 布局:'up' | 'down','up' 表示左下→右上对角线(默认),'down' 表示左上→右下对角线;\n * - arc 布局:'up' | 'down','up' 表示穹顶(centerImage 贴底,弧线在上方),'down' 表示碗形(centerImage 贴顶,弧线在下方)。\n */\n direction?: StorylineWingDirection | StorylineLadderDirection | StorylineArcDirection;\n /**\n * 对 ladder 布局生效:贯穿画布的倾斜大字 headline。\n * 缺省时使用占位文本。倾斜方向自动跟随对角线。\n */\n headline?: string;\n}\n\nexport interface IStorylineBlockSpec {\n width?: number;\n widthRatio?: number;\n minWidth?: number;\n maxWidth?: number;\n height?: number;\n padding?: number | [number, number, number, number];\n gap?: number;\n /**\n * 是否展示 block 背后的卡片背景 rect(白底 + 描边 + 阴影)。\n * 仅 up-ladder 等少数布局支持,默认 false(不展示)。\n */\n showBackground?: boolean;\n style?: Partial<IRectMarkSpec>;\n}\n\nexport interface IStorylineImageSpec extends IMarkSpec<IImageMarkSpec> {\n width?: number;\n height?: number;\n position?: StorylineImagePosition;\n gap?: number;\n /**\n * 是否展示 image 背后的白色背景 rect(白底 + 主题色描边)。\n * portrait / landscape / wing 等布局支持。\n * 默认 false(不展示)。\n * 注:不影响 subImage(错位装饰图元的显隐。\n */\n showBackground?: boolean;\n}\n\nexport interface IStorylineCenterImageSpec extends IMarkSpec<IImageMarkSpec> {\n width?: number;\n height?: number;\n visible?: boolean;\n image?: string | HTMLImageElement | HTMLCanvasElement;\n}\n\nexport interface IStorylineLineSpec extends IMarkSpec<IPathMarkSpec> {\n visible?: boolean;\n type?: StorylineLineType;\n showArrow?: boolean;\n arrowSize?: number;\n /**\n * 连接线和 block 边缘之间的距离。\n */\n distance?: number;\n}\n\nexport interface IStorylineSpec extends Omit<IChartSpec, 'type' | 'data' | 'series' | 'title' | 'layout'> {\n type: 'storyline';\n data: IStorylineBlock[];\n layout?: StorylineLayoutType | IStorylineLayoutOptions;\n block?: IStorylineBlockSpec;\n title?: IMarkSpec<ITextMarkSpec>;\n content?: IMarkSpec<IComposedTextMarkSpec>;\n image?: IStorylineImageSpec;\n centerImage?: IStorylineCenterImageSpec;\n line?: IStorylineLineSpec;\n /**\n * 时间节点文本配置(仅 portrait 布局生效)。\n * 当 spec.data[i].marker 有值时,在中轴 rect 上沿垂直方向绘制每个 block 的时间节点文本。\n */\n marker?: IMarkSpec<ITextMarkSpec>;\n themeColor?: string;\n}\n"]}
@@ -48,6 +48,11 @@ export declare const normalizePadding: (padding?: number | [
48
48
  number,
49
49
  number,
50
50
  number
51
- ]) => StorylinePadding;
51
+ ] | {
52
+ top?: number;
53
+ right?: number;
54
+ bottom?: number;
55
+ left?: number;
56
+ }) => StorylinePadding;
52
57
  export declare const normalizeLayout: (layout?: StorylineLayoutType | IStorylineLayoutOptions) => IStorylineLayoutOptions;
53
58
  export declare const computeStorylineLayout: (data: IStorylineBlock[], options: StorylineComputeOptions) => StorylineLayoutResult;
@@ -1,14 +1,20 @@
1
1
  const DEFAULT_LAYOUT = "landscape", DEFAULT_PADDING = 24;
2
2
 
3
3
  export const normalizePadding = padding => {
4
- var _a, _b, _c, _d;
4
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
5
5
  if (Array.isArray(padding)) return {
6
6
  top: null !== (_a = padding[0]) && void 0 !== _a ? _a : 0,
7
7
  right: null !== (_b = padding[1]) && void 0 !== _b ? _b : 0,
8
8
  bottom: null !== (_c = padding[2]) && void 0 !== _c ? _c : 0,
9
9
  left: null !== (_d = padding[3]) && void 0 !== _d ? _d : 0
10
10
  };
11
- const value = null != padding ? padding : 24;
11
+ if (padding && "object" == typeof padding && "top" in padding) return {
12
+ top: null !== (_e = padding.top) && void 0 !== _e ? _e : 0,
13
+ right: null !== (_f = padding.right) && void 0 !== _f ? _f : 0,
14
+ bottom: null !== (_g = padding.bottom) && void 0 !== _g ? _g : 0,
15
+ left: null !== (_h = padding.left) && void 0 !== _h ? _h : 0
16
+ };
17
+ const value = null !== (_j = padding) && void 0 !== _j ? _j : 24;
12
18
  return {
13
19
  top: value,
14
20
  right: value,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/storyline/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { IStorylineBlock, IStorylineLayoutOptions, StorylineLayoutType } from './interface';\n\nexport interface StorylineSize {\n width: number;\n height: number;\n}\n\nexport interface StorylinePadding {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface StorylinePoint {\n x: number;\n y: number;\n}\n\nexport interface StorylineBlockPosition extends StorylinePoint, StorylineSize {\n id: string | number;\n index: number;\n datum: IStorylineBlock;\n center: StorylinePoint;\n}\n\nexport interface StorylineLinkPosition {\n from: StorylineBlockPosition;\n to: StorylineBlockPosition;\n start: StorylinePoint;\n end: StorylinePoint;\n points: StorylinePoint[];\n}\n\nexport interface StorylineCircleGuide {\n center: StorylinePoint;\n radius: number;\n}\n\nexport interface StorylineLayoutResult {\n blocks: StorylineBlockPosition[];\n links: StorylineLinkPosition[];\n circleGuide?: StorylineCircleGuide;\n}\n\nexport interface StorylineComputeOptions {\n layout: StorylineLayoutType | IStorylineLayoutOptions | undefined;\n viewBox: StorylineSize;\n block: StorylineSize;\n gap?: number;\n padding?: number | [number, number, number, number];\n lineDistance?: number;\n}\n\nconst DEFAULT_LAYOUT: StorylineLayoutType = 'landscape';\nconst DEFAULT_PADDING = 24;\n\nexport const normalizePadding = (padding?: number | [number, number, number, number]): StorylinePadding => {\n if (Array.isArray(padding)) {\n return {\n top: padding[0] ?? 0,\n right: padding[1] ?? 0,\n bottom: padding[2] ?? 0,\n left: padding[3] ?? 0\n };\n }\n const value = padding ?? DEFAULT_PADDING;\n return { top: value, right: value, bottom: value, left: value };\n};\n\nexport const normalizeLayout = (layout?: StorylineLayoutType | IStorylineLayoutOptions): IStorylineLayoutOptions => {\n if (!layout) {\n return { type: DEFAULT_LAYOUT };\n }\n if (typeof layout === 'string') {\n return { type: layout };\n }\n return layout;\n};\n\nexport const computeStorylineLayout = (\n data: IStorylineBlock[],\n options: StorylineComputeOptions\n): StorylineLayoutResult => {\n const layout = normalizeLayout(options.layout);\n const padding = normalizePadding(layout.padding ?? options.padding);\n const gap = options.gap ?? 40;\n const lineDistance = options.lineDistance ?? 8;\n const blocks = computeBlockPositions(data, layout, options.viewBox, options.block, padding, gap);\n const circleGuide =\n layout.type === 'clock' ? computeClockCircleGuide(options.viewBox, options.block, padding, layout) : undefined;\n return {\n blocks,\n links: computeLinks(blocks, lineDistance),\n circleGuide\n };\n};\n\nconst computeBlockPositions = (\n data: IStorylineBlock[],\n layout: IStorylineLayoutOptions,\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n gap: number\n): StorylineBlockPosition[] => {\n const count = data.length;\n if (!count) {\n return [];\n }\n\n const inner = {\n x: padding.left,\n y: padding.top,\n width: Math.max(viewBox.width - padding.left - padding.right, block.width),\n height: Math.max(viewBox.height - padding.top - padding.bottom, block.height)\n };\n const center = {\n x: inner.x + inner.width / 2,\n y: inner.y + inner.height / 2\n };\n\n let centers: StorylinePoint[];\n switch (layout.type) {\n case 'portrait':\n centers = lineCenters(\n count,\n center.x,\n inner.y + block.height / 2,\n center.x,\n inner.y + inner.height - block.height / 2\n );\n break;\n case 'ladder': {\n // 沿对角线均匀采样 anchor 点,偶/奇 index 沿对角线\"法向\"做左/右偏移。\n // direction = 'up' (默认):左下 → 右上;direction = 'down':左上 → 右下。\n const isDown = layout.direction === 'down';\n const x0 = inner.x + block.width / 2;\n const x1 = inner.x + inner.width - block.width / 2;\n const yTop = inner.y + block.height / 2;\n const yBot = inner.y + inner.height - block.height / 2;\n const y0 = isDown ? yTop : yBot;\n const y1 = isDown ? yBot : yTop;\n const anchors = lineCenters(count, x0, y0, x1, y1);\n // 对角线方向向量\n const dx = x1 - x0;\n const dy = y1 - y0;\n const len = Math.hypot(dx, dy) || 1;\n // 法向单位向量\n const nx = -dy / len;\n const ny = dx / len;\n // 偏移量:与 headline fontSize 联动 —— 与 ladder.ts 中保持同一公式\n // headline fontSize = clamp(innerHeight * 0.42, 80, 240)\n // 偏移量 = headline fontSize * 1.2,让 block 与 headline 大字之间留出充足留白\n const headlineFontSize = Math.max(80, Math.min(240, Math.round(inner.height * 0.42)));\n const offset = headlineFontSize * 1.2;\n centers = anchors.map((p, i) => {\n // 偶数 index → 法向 +;奇数 index → 法向 -\n const sign = i % 2 === 0 ? 1 : -1;\n return {\n x: p.x + nx * offset * sign,\n y: p.y + ny * offset * sign\n };\n });\n break;\n }\n case 'spiral':\n centers = alternatingVerticalCenters(count, inner, block, gap);\n break;\n case 'clock':\n centers = circularCenters(count, viewBox, block, padding, layout);\n break;\n case 'arc': {\n // arc 布局:通过 direction 控制 dome(穹顶)/ bowl(碗形)方向\n // - 'up'(默认):弧线在上方(穹顶),等同原 dome\n // - 'down':弧线在下方(碗形),等同原 bowl\n const isDown = layout.direction === 'down';\n const [s, e] = isDown ? [20, 160] : [200, 340];\n centers = arcCenters(count, inner, block, layout, s, e);\n break;\n }\n case 'wing': {\n const direction = layout.direction === 'right' ? 'right' : 'left';\n const [s, e] = direction === 'right' ? [110, 250] : [-70, 70];\n centers = arcCenters(count, inner, block, layout, s, e);\n break;\n }\n case 'landscape':\n default:\n centers = lineCenters(\n count,\n inner.x + block.width / 2,\n center.y,\n inner.x + inner.width - block.width / 2,\n center.y\n );\n break;\n }\n\n return centers.map((point, index) => ({\n id: data[index]?.id ?? index,\n index,\n datum: data[index],\n width: block.width,\n height: block.height,\n x: point.x - block.width / 2,\n y: point.y - block.height / 2,\n center: point\n }));\n};\n\nconst lineCenters = (count: number, x0: number, y0: number, x1: number, y1: number): StorylinePoint[] => {\n if (count === 1) {\n return [{ x: (x0 + x1) / 2, y: (y0 + y1) / 2 }];\n }\n return Array.from({ length: count }, (_, index) => {\n const t = index / (count - 1);\n return {\n x: x0 + (x1 - x0) * t,\n y: y0 + (y1 - y0) * t\n };\n });\n};\n\nconst alternatingVerticalCenters = (\n count: number,\n inner: { x: number; y: number; width: number; height: number },\n block: StorylineSize,\n gap: number\n) => {\n const baseX = inner.x + inner.width / 2;\n const offset = Math.min(Math.max(block.width * 0.65 + gap / 2, 0), Math.max((inner.width - block.width) / 2, 0));\n const points = lineCenters(\n count,\n baseX,\n inner.y + block.height / 2,\n baseX,\n inner.y + inner.height - block.height / 2\n );\n return points.map((point, index) => ({\n x: point.x + (index % 2 === 0 ? -offset : offset),\n y: point.y\n }));\n};\n\nconst circularCenters = (\n count: number,\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n layout: IStorylineLayoutOptions\n) => {\n const guide = computeClockCircleGuide(viewBox, block, padding, layout);\n const startAngle = layout.startAngle ?? -90;\n const delta = 360;\n\n if (count === 1) {\n const angle = degreeToRadian(startAngle);\n return [\n {\n x: guide.center.x + Math.cos(angle) * guide.radius,\n y: guide.center.y + Math.sin(angle) * guide.radius\n }\n ];\n }\n\n return Array.from({ length: count }, (_, index) => {\n const angle = degreeToRadian(startAngle + (delta * index) / count);\n return {\n x: guide.center.x + Math.cos(angle) * guide.radius,\n y: guide.center.y + Math.sin(angle) * guide.radius\n };\n });\n};\n\nconst computeClockCircleGuide = (\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n layout: IStorylineLayoutOptions\n): StorylineCircleGuide => {\n const innerWidth = Math.max(viewBox.width - padding.left - padding.right, 1);\n const innerHeight = Math.max(viewBox.height - padding.top - padding.bottom, 1);\n const center = {\n x: padding.left + innerWidth / 2,\n y: padding.top + innerHeight / 2\n };\n const ratio = layout.radiusRatio ?? 0.7;\n const maxRadius = Math.max(Math.min(innerWidth - block.width, innerHeight - block.height) / 2, 1);\n\n return {\n center,\n radius: Math.max(1, maxRadius * ratio)\n };\n};\n\nconst arcCenters = (\n count: number,\n inner: { x: number; y: number; width: number; height: number },\n block: StorylineSize,\n layout: IStorylineLayoutOptions,\n fallbackStartAngle?: number,\n fallbackEndAngle?: number,\n defaultRatio = 0.88\n) => {\n const startAngle = layout.startAngle ?? fallbackStartAngle ?? -90;\n const endAngle = layout.endAngle ?? fallbackEndAngle ?? 270;\n const ratio = layout.radiusRatio ?? defaultRatio;\n const rx = Math.max((inner.width - block.width) / 2, 1) * ratio;\n const ry = Math.max((inner.height - block.height) / 2, 1) * ratio;\n const center = {\n x: inner.x + inner.width / 2,\n y: inner.y + inner.height / 2\n };\n\n if (count === 1) {\n const angle = degreeToRadian((startAngle + endAngle) / 2);\n return [{ x: center.x + Math.cos(angle) * rx, y: center.y + Math.sin(angle) * ry }];\n }\n\n return Array.from({ length: count }, (_, index) => {\n const t = index / (count - 1);\n const angle = degreeToRadian(startAngle + angleDelta(startAngle, endAngle) * t);\n return {\n x: center.x + Math.cos(angle) * rx,\n y: center.y + Math.sin(angle) * ry\n };\n });\n};\n\nconst angleDelta = (startAngle: number, endAngle: number) => {\n const delta = endAngle - startAngle;\n return Math.abs(delta) >= 360 ? 360 : delta;\n};\n\nconst degreeToRadian = (degree: number) => (degree / 180) * Math.PI;\n\nconst computeLinks = (blocks: StorylineBlockPosition[], distance: number): StorylineLinkPosition[] => {\n const links: StorylineLinkPosition[] = [];\n for (let i = 0; i < blocks.length - 1; i++) {\n const from = blocks[i];\n const to = blocks[i + 1];\n const start = pointOnBlockEdge(from, to.center, distance);\n const end = pointOnBlockEdge(to, from.center, distance);\n links.push({\n from,\n to,\n start,\n end,\n points: [start, end]\n });\n }\n return links;\n};\n\nconst pointOnBlockEdge = (block: StorylineBlockPosition, toward: StorylinePoint, distance: number): StorylinePoint => {\n const dx = toward.x - block.center.x;\n const dy = toward.y - block.center.y;\n if (dx === 0 && dy === 0) {\n return { x: block.center.x, y: block.center.y };\n }\n const scaleX = dx === 0 ? Number.POSITIVE_INFINITY : block.width / 2 / Math.abs(dx);\n const scaleY = dy === 0 ? Number.POSITIVE_INFINITY : block.height / 2 / Math.abs(dy);\n const scale = Math.min(scaleX, scaleY);\n const length = Math.sqrt(dx * dx + dy * dy) || 1;\n return {\n x: block.center.x + dx * scale + (dx / length) * distance,\n y: block.center.y + dy * scale + (dy / length) * distance\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/charts/storyline/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { IStorylineBlock, IStorylineLayoutOptions, StorylineLayoutType } from './interface';\n\nexport interface StorylineSize {\n width: number;\n height: number;\n}\n\nexport interface StorylinePadding {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface StorylinePoint {\n x: number;\n y: number;\n}\n\nexport interface StorylineBlockPosition extends StorylinePoint, StorylineSize {\n id: string | number;\n index: number;\n datum: IStorylineBlock;\n center: StorylinePoint;\n}\n\nexport interface StorylineLinkPosition {\n from: StorylineBlockPosition;\n to: StorylineBlockPosition;\n start: StorylinePoint;\n end: StorylinePoint;\n points: StorylinePoint[];\n}\n\nexport interface StorylineCircleGuide {\n center: StorylinePoint;\n radius: number;\n}\n\nexport interface StorylineLayoutResult {\n blocks: StorylineBlockPosition[];\n links: StorylineLinkPosition[];\n circleGuide?: StorylineCircleGuide;\n}\n\nexport interface StorylineComputeOptions {\n layout: StorylineLayoutType | IStorylineLayoutOptions | undefined;\n viewBox: StorylineSize;\n block: StorylineSize;\n gap?: number;\n padding?: number | [number, number, number, number];\n lineDistance?: number;\n}\n\nconst DEFAULT_LAYOUT: StorylineLayoutType = 'landscape';\nconst DEFAULT_PADDING = 24;\n\nexport const normalizePadding = (\n padding?: number | [number, number, number, number] | { top?: number; right?: number; bottom?: number; left?: number }\n): StorylinePadding => {\n if (Array.isArray(padding)) {\n return {\n top: padding[0] ?? 0,\n right: padding[1] ?? 0,\n bottom: padding[2] ?? 0,\n left: padding[3] ?? 0\n };\n }\n if (padding && typeof padding === 'object' && 'top' in padding) {\n return {\n top: (padding as { top?: number }).top ?? 0,\n right: (padding as { right?: number }).right ?? 0,\n bottom: (padding as { bottom?: number }).bottom ?? 0,\n left: (padding as { left?: number }).left ?? 0\n };\n }\n const value = (padding as number | undefined) ?? DEFAULT_PADDING;\n return { top: value, right: value, bottom: value, left: value };\n};\n\nexport const normalizeLayout = (layout?: StorylineLayoutType | IStorylineLayoutOptions): IStorylineLayoutOptions => {\n if (!layout) {\n return { type: DEFAULT_LAYOUT };\n }\n if (typeof layout === 'string') {\n return { type: layout };\n }\n return layout;\n};\n\nexport const computeStorylineLayout = (\n data: IStorylineBlock[],\n options: StorylineComputeOptions\n): StorylineLayoutResult => {\n const layout = normalizeLayout(options.layout);\n const padding = normalizePadding(layout.padding ?? options.padding);\n const gap = options.gap ?? 40;\n const lineDistance = options.lineDistance ?? 8;\n const blocks = computeBlockPositions(data, layout, options.viewBox, options.block, padding, gap);\n const circleGuide =\n layout.type === 'clock' ? computeClockCircleGuide(options.viewBox, options.block, padding, layout) : undefined;\n return {\n blocks,\n links: computeLinks(blocks, lineDistance),\n circleGuide\n };\n};\n\nconst computeBlockPositions = (\n data: IStorylineBlock[],\n layout: IStorylineLayoutOptions,\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n gap: number\n): StorylineBlockPosition[] => {\n const count = data.length;\n if (!count) {\n return [];\n }\n\n const inner = {\n x: padding.left,\n y: padding.top,\n width: Math.max(viewBox.width - padding.left - padding.right, block.width),\n height: Math.max(viewBox.height - padding.top - padding.bottom, block.height)\n };\n const center = {\n x: inner.x + inner.width / 2,\n y: inner.y + inner.height / 2\n };\n\n let centers: StorylinePoint[];\n switch (layout.type) {\n case 'portrait':\n centers = lineCenters(\n count,\n center.x,\n inner.y + block.height / 2,\n center.x,\n inner.y + inner.height - block.height / 2\n );\n break;\n case 'ladder': {\n // 沿对角线均匀采样 anchor 点,偶/奇 index 沿对角线\"法向\"做左/右偏移。\n // direction = 'up' (默认):左下 → 右上;direction = 'down':左上 → 右下。\n const isDown = layout.direction === 'down';\n const x0 = inner.x + block.width / 2;\n const x1 = inner.x + inner.width - block.width / 2;\n const yTop = inner.y + block.height / 2;\n const yBot = inner.y + inner.height - block.height / 2;\n const y0 = isDown ? yTop : yBot;\n const y1 = isDown ? yBot : yTop;\n const anchors = lineCenters(count, x0, y0, x1, y1);\n // 对角线方向向量\n const dx = x1 - x0;\n const dy = y1 - y0;\n const len = Math.hypot(dx, dy) || 1;\n // 法向单位向量\n const nx = -dy / len;\n const ny = dx / len;\n // 偏移量:与 headline fontSize 联动 —— 与 ladder.ts 中保持同一公式\n // headline fontSize = clamp(innerHeight * 0.42, 80, 240)\n // 偏移量 = headline fontSize * 1.2,让 block 与 headline 大字之间留出充足留白\n const headlineFontSize = Math.max(80, Math.min(240, Math.round(inner.height * 0.42)));\n const offset = headlineFontSize * 1.2;\n centers = anchors.map((p, i) => {\n // 偶数 index → 法向 +;奇数 index → 法向 -\n const sign = i % 2 === 0 ? 1 : -1;\n return {\n x: p.x + nx * offset * sign,\n y: p.y + ny * offset * sign\n };\n });\n break;\n }\n case 'spiral':\n centers = alternatingVerticalCenters(count, inner, block, gap);\n break;\n case 'clock':\n centers = circularCenters(count, viewBox, block, padding, layout);\n break;\n case 'arc': {\n // arc 布局:通过 direction 控制 dome(穹顶)/ bowl(碗形)方向\n // - 'up'(默认):弧线在上方(穹顶),等同原 dome\n // - 'down':弧线在下方(碗形),等同原 bowl\n const isDown = layout.direction === 'down';\n const [s, e] = isDown ? [20, 160] : [200, 340];\n centers = arcCenters(count, inner, block, layout, s, e);\n break;\n }\n case 'wing': {\n const direction = layout.direction === 'right' ? 'right' : 'left';\n const [s, e] = direction === 'right' ? [110, 250] : [-70, 70];\n centers = arcCenters(count, inner, block, layout, s, e);\n break;\n }\n case 'landscape':\n default:\n centers = lineCenters(\n count,\n inner.x + block.width / 2,\n center.y,\n inner.x + inner.width - block.width / 2,\n center.y\n );\n break;\n }\n\n return centers.map((point, index) => ({\n id: data[index]?.id ?? index,\n index,\n datum: data[index],\n width: block.width,\n height: block.height,\n x: point.x - block.width / 2,\n y: point.y - block.height / 2,\n center: point\n }));\n};\n\nconst lineCenters = (count: number, x0: number, y0: number, x1: number, y1: number): StorylinePoint[] => {\n if (count === 1) {\n return [{ x: (x0 + x1) / 2, y: (y0 + y1) / 2 }];\n }\n return Array.from({ length: count }, (_, index) => {\n const t = index / (count - 1);\n return {\n x: x0 + (x1 - x0) * t,\n y: y0 + (y1 - y0) * t\n };\n });\n};\n\nconst alternatingVerticalCenters = (\n count: number,\n inner: { x: number; y: number; width: number; height: number },\n block: StorylineSize,\n gap: number\n) => {\n const baseX = inner.x + inner.width / 2;\n const offset = Math.min(Math.max(block.width * 0.65 + gap / 2, 0), Math.max((inner.width - block.width) / 2, 0));\n const points = lineCenters(\n count,\n baseX,\n inner.y + block.height / 2,\n baseX,\n inner.y + inner.height - block.height / 2\n );\n return points.map((point, index) => ({\n x: point.x + (index % 2 === 0 ? -offset : offset),\n y: point.y\n }));\n};\n\nconst circularCenters = (\n count: number,\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n layout: IStorylineLayoutOptions\n) => {\n const guide = computeClockCircleGuide(viewBox, block, padding, layout);\n const startAngle = layout.startAngle ?? -90;\n const delta = 360;\n\n if (count === 1) {\n const angle = degreeToRadian(startAngle);\n return [\n {\n x: guide.center.x + Math.cos(angle) * guide.radius,\n y: guide.center.y + Math.sin(angle) * guide.radius\n }\n ];\n }\n\n return Array.from({ length: count }, (_, index) => {\n const angle = degreeToRadian(startAngle + (delta * index) / count);\n return {\n x: guide.center.x + Math.cos(angle) * guide.radius,\n y: guide.center.y + Math.sin(angle) * guide.radius\n };\n });\n};\n\nconst computeClockCircleGuide = (\n viewBox: StorylineSize,\n block: StorylineSize,\n padding: StorylinePadding,\n layout: IStorylineLayoutOptions\n): StorylineCircleGuide => {\n const innerWidth = Math.max(viewBox.width - padding.left - padding.right, 1);\n const innerHeight = Math.max(viewBox.height - padding.top - padding.bottom, 1);\n const center = {\n x: padding.left + innerWidth / 2,\n y: padding.top + innerHeight / 2\n };\n const ratio = layout.radiusRatio ?? 0.7;\n const maxRadius = Math.max(Math.min(innerWidth - block.width, innerHeight - block.height) / 2, 1);\n\n return {\n center,\n radius: Math.max(1, maxRadius * ratio)\n };\n};\n\nconst arcCenters = (\n count: number,\n inner: { x: number; y: number; width: number; height: number },\n block: StorylineSize,\n layout: IStorylineLayoutOptions,\n fallbackStartAngle?: number,\n fallbackEndAngle?: number,\n defaultRatio = 0.88\n) => {\n const startAngle = layout.startAngle ?? fallbackStartAngle ?? -90;\n const endAngle = layout.endAngle ?? fallbackEndAngle ?? 270;\n const ratio = layout.radiusRatio ?? defaultRatio;\n const rx = Math.max((inner.width - block.width) / 2, 1) * ratio;\n const ry = Math.max((inner.height - block.height) / 2, 1) * ratio;\n const center = {\n x: inner.x + inner.width / 2,\n y: inner.y + inner.height / 2\n };\n\n if (count === 1) {\n const angle = degreeToRadian((startAngle + endAngle) / 2);\n return [{ x: center.x + Math.cos(angle) * rx, y: center.y + Math.sin(angle) * ry }];\n }\n\n return Array.from({ length: count }, (_, index) => {\n const t = index / (count - 1);\n const angle = degreeToRadian(startAngle + angleDelta(startAngle, endAngle) * t);\n return {\n x: center.x + Math.cos(angle) * rx,\n y: center.y + Math.sin(angle) * ry\n };\n });\n};\n\nconst angleDelta = (startAngle: number, endAngle: number) => {\n const delta = endAngle - startAngle;\n return Math.abs(delta) >= 360 ? 360 : delta;\n};\n\nconst degreeToRadian = (degree: number) => (degree / 180) * Math.PI;\n\nconst computeLinks = (blocks: StorylineBlockPosition[], distance: number): StorylineLinkPosition[] => {\n const links: StorylineLinkPosition[] = [];\n for (let i = 0; i < blocks.length - 1; i++) {\n const from = blocks[i];\n const to = blocks[i + 1];\n const start = pointOnBlockEdge(from, to.center, distance);\n const end = pointOnBlockEdge(to, from.center, distance);\n links.push({\n from,\n to,\n start,\n end,\n points: [start, end]\n });\n }\n return links;\n};\n\nconst pointOnBlockEdge = (block: StorylineBlockPosition, toward: StorylinePoint, distance: number): StorylinePoint => {\n const dx = toward.x - block.center.x;\n const dy = toward.y - block.center.y;\n if (dx === 0 && dy === 0) {\n return { x: block.center.x, y: block.center.y };\n }\n const scaleX = dx === 0 ? Number.POSITIVE_INFINITY : block.width / 2 / Math.abs(dx);\n const scaleY = dy === 0 ? Number.POSITIVE_INFINITY : block.height / 2 / Math.abs(dy);\n const scale = Math.min(scaleX, scaleY);\n const length = Math.sqrt(dx * dx + dy * dy) || 1;\n return {\n x: block.center.x + dx * scale + (dx / length) * distance,\n y: block.center.y + dy * scale + (dy / length) * distance\n };\n};\n"]}
@@ -1,19 +1,19 @@
1
1
  import { LayoutZIndex } from "@visactor/vchart";
2
2
 
3
- import { buildRichContent, getRegionGeometry, getThemeColor, normalizeLayout, normalizePadding, omitImageLayoutSpec, resolveBlockWidth, withAlpha } from "./common";
3
+ import { buildRichContent, getRegionGeometry, getThemeColor, normalizeLayout, omitImageLayoutSpec, resolveBlockWidth, withAlpha } from "./common";
4
4
 
5
- const ARC_BLOCK_IMAGE_SIZE = 140, ARC_TEXT_GAP_FROM_IMAGE = 10, ARC_TITLE_LINE_HEIGHT = 19, ARC_CONTENT_LINE_HEIGHT = 17, ARC_CONTENT_FONT_SIZE = 12, ARC_TEXT_BOX_HEIGHT = 240, ARC_TITLE_TO_CONTENT_GAP = 4, ARC_TEXT_LEFT_PADDING = 20, ARC_TEXT_BOX_MIN_WIDTH = 200, ARC_CENTER_IMAGE_SIZE_RATIO = .4, ARC_GAP_FROM_CENTER_IMAGE = 200, isDownArc = spec => "down" === normalizeLayout(spec.layout).direction, getArcCenterImageRect = (spec, ctx) => {
6
- var _a, _b, _c, _e, _f;
7
- const {width: width, height: height, startX: startX, startY: startY} = getRegionGeometry(ctx), padding = normalizePadding(null === (_a = spec.block) || void 0 === _a ? void 0 : _a.padding), innerWidth = Math.max(width - padding.left - padding.right, 1), innerHeight = Math.max(height - padding.top - padding.bottom, 1), baseSize = .4 * Math.min(innerWidth, innerHeight), w = Math.max(null !== (_c = null === (_b = spec.centerImage) || void 0 === _b ? void 0 : _b.width) && void 0 !== _c ? _c : baseSize, 80), h = Math.max(null !== (_f = null === (_e = spec.centerImage) || void 0 === _e ? void 0 : _e.height) && void 0 !== _f ? _f : baseSize, 80);
5
+ const ARC_BLOCK_IMAGE_SIZE = 240, ARC_BLOCK_IMAGE_BORDER = 3, ARC_BLOCK_IMAGE_HALO_PADDING = 6, ARC_TEXT_GAP_FROM_IMAGE = 10, ARC_TITLE_FONT_SIZE = 32, ARC_TITLE_LINE_HEIGHT = 34, ARC_CONTENT_LINE_HEIGHT = 26, ARC_CONTENT_FONT_SIZE = 20, ARC_TEXT_BOX_HEIGHT = 240, ARC_TITLE_TO_CONTENT_GAP = 4, ARC_TEXT_PADDING = 20, ARC_TEXT_BOX_MIN_WIDTH = 240, ARC_CENTER_IMAGE_SIZE_RATIO = .55, ARC_CENTER_IMAGE_TO_SYMBOL_RATIO = .8, ARC_GAP_FROM_CENTER_IMAGE = 200, isDownArc = spec => "down" === normalizeLayout(spec.layout).direction, getArcCenterImageRect = (spec, ctx) => {
6
+ var _a, _b, _c, _e;
7
+ const {width: width, height: height, startX: startX, startY: startY} = getRegionGeometry(ctx), innerWidth = Math.max(width, 1), innerHeight = Math.max(height, 1), baseSize = .55 * Math.min(innerWidth, innerHeight), w = Math.max(null !== (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.width) && void 0 !== _b ? _b : baseSize, 80), h = Math.max(null !== (_e = null === (_c = spec.centerImage) || void 0 === _c ? void 0 : _c.height) && void 0 !== _e ? _e : baseSize, 80);
8
8
  return {
9
- x: startX + padding.left + innerWidth / 2 - w / 2,
10
- y: isDownArc(spec) ? startY + padding.top : startY + padding.top + innerHeight - h,
9
+ x: startX + innerWidth / 2 - w / 2,
10
+ y: isDownArc(spec) ? startY : startY + innerHeight - h,
11
11
  width: w,
12
12
  height: h
13
13
  };
14
14
  }, getArcGeometry = (spec, ctx) => {
15
- var _a, _b, _c, _e;
16
- const {width: width, startX: startX} = getRegionGeometry(ctx), blockPadding = normalizePadding(null === (_a = spec.block) || void 0 === _a ? void 0 : _a.padding), innerWidth = Math.max(width - blockPadding.left - blockPadding.right, 1), blockWidth = resolveBlockWidth(spec, width), layoutOpt = normalizeLayout(spec.layout), isDown = "down" === layoutOpt.direction, startAngle = null !== (_b = layoutOpt.startAngle) && void 0 !== _b ? _b : isDown ? 20 : 200, endAngle = null !== (_c = layoutOpt.endAngle) && void 0 !== _c ? _c : isDown ? 160 : 340, ratio = null !== (_e = layoutOpt.radiusRatio) && void 0 !== _e ? _e : .88, rx = Math.max((innerWidth - blockWidth) / 2, 1) * ratio, centerRect = getArcCenterImageRect(spec, ctx), centerTop = centerRect.y, centerBottom = centerRect.y + centerRect.height, sinStart = Math.sin(startAngle / 180 * Math.PI);
15
+ var _a, _b, _c;
16
+ const {width: width, startX: startX} = getRegionGeometry(ctx), innerWidth = Math.max(width, 1), blockWidth = resolveBlockWidth(spec, width), layoutOpt = normalizeLayout(spec.layout), isDown = "down" === layoutOpt.direction, startAngle = null !== (_a = layoutOpt.startAngle) && void 0 !== _a ? _a : isDown ? 20 : 200, endAngle = null !== (_b = layoutOpt.endAngle) && void 0 !== _b ? _b : isDown ? 160 : 340, ratio = null !== (_c = layoutOpt.radiusRatio) && void 0 !== _c ? _c : .88, rx = Math.max((innerWidth - blockWidth) / 2, 1) * ratio, centerRect = getArcCenterImageRect(spec, ctx), centerTop = centerRect.y, centerBottom = centerRect.y + centerRect.height, sinStart = Math.sin(startAngle / 180 * Math.PI);
17
17
  let cy, ry;
18
18
  if (isDown) {
19
19
  const denom = Math.max(1 - sinStart, .05);
@@ -23,7 +23,7 @@ const ARC_BLOCK_IMAGE_SIZE = 140, ARC_TEXT_GAP_FROM_IMAGE = 10, ARC_TITLE_LINE_H
23
23
  ry = (centerRect.height + 200) / denom, cy = centerBottom - ry * sinStart;
24
24
  }
25
25
  return {
26
- cx: startX + blockPadding.left + innerWidth / 2,
26
+ cx: startX + innerWidth / 2,
27
27
  cy: cy,
28
28
  rx: rx,
29
29
  ry: ry,
@@ -39,7 +39,7 @@ const ARC_BLOCK_IMAGE_SIZE = 140, ARC_TEXT_GAP_FROM_IMAGE = 10, ARC_TITLE_LINE_H
39
39
  x: arc.cx,
40
40
  y: arc.cy
41
41
  };
42
- const t = 1 === count ? .5 : index / (count - 1), angle = (arc.startAngle + (arc.endAngle - arc.startAngle) * t) / 180 * Math.PI, px = arc.cx + Math.cos(angle) * arc.rx, py = arc.cy + Math.sin(angle) * arc.ry, nxRaw = Math.cos(angle) / arc.rx, nyRaw = Math.sin(angle) / arc.ry, nLen = Math.hypot(nxRaw, nyRaw) || 1, nx = nxRaw / nLen, ny = nyRaw / nLen, offset = (null !== (_e = null === (_c = spec.image) || void 0 === _c ? void 0 : _c.height) && void 0 !== _e ? _e : 140) / 2;
42
+ const t = 1 === count ? .5 : index / (count - 1), angle = (arc.startAngle + (arc.endAngle - arc.startAngle) * t) / 180 * Math.PI, px = arc.cx + Math.cos(angle) * arc.rx, py = arc.cy + Math.sin(angle) * arc.ry, nxRaw = Math.cos(angle) / arc.rx, nyRaw = Math.sin(angle) / arc.ry, nLen = Math.hypot(nxRaw, nyRaw) || 1, nx = nxRaw / nLen, ny = nyRaw / nLen, offset = (null !== (_e = null === (_c = spec.image) || void 0 === _c ? void 0 : _c.height) && void 0 !== _e ? _e : 240) / 2;
43
43
  return {
44
44
  x: px + nx * offset,
45
45
  y: py + ny * offset
@@ -113,10 +113,10 @@ export const buildArcCenterImageMark = spec => {
113
113
  },
114
114
  size: (_d, ctx) => {
115
115
  const r = getArcCenterImageRect(spec, ctx);
116
- return 1.1 * Math.max(r.width, r.height);
116
+ return Math.max(r.width, r.height);
117
117
  },
118
118
  symbolType: "circle",
119
- fill: symbolGradient,
119
+ fill: hasImage ? symbolGradient : "#ffffff",
120
120
  stroke: themeColor,
121
121
  lineWidth: 2
122
122
  }
@@ -126,10 +126,31 @@ export const buildArcCenterImageMark = spec => {
126
126
  interactive: !1
127
127
  }, spec.centerImage), {
128
128
  style: Object.assign({
129
- x: (_d, ctx) => getArcCenterImageRect(spec, ctx).x,
130
- y: (_d, ctx) => getArcCenterImageRect(spec, ctx).y,
131
- width: (_d, ctx) => getArcCenterImageRect(spec, ctx).width,
132
- height: (_d, ctx) => getArcCenterImageRect(spec, ctx).height,
129
+ x: (_d, ctx) => {
130
+ var _a, _b;
131
+ const r = getArcCenterImageRect(spec, ctx), userWidth = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.width, w = "number" == typeof userWidth ? userWidth : .8 * Math.max(r.width, r.height);
132
+ return r.x + (r.width - w) / 2;
133
+ },
134
+ y: (_d, ctx) => {
135
+ var _a, _b;
136
+ const r = getArcCenterImageRect(spec, ctx), userHeight = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.height, h = "number" == typeof userHeight ? userHeight : .8 * Math.max(r.width, r.height);
137
+ return r.y + (r.height - h) / 2;
138
+ },
139
+ width: (_d, ctx) => {
140
+ var _a, _b;
141
+ const r = getArcCenterImageRect(spec, ctx), userWidth = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.width;
142
+ return "number" == typeof userWidth ? userWidth : .8 * Math.max(r.width, r.height);
143
+ },
144
+ height: (_d, ctx) => {
145
+ var _a, _b;
146
+ const r = getArcCenterImageRect(spec, ctx), userHeight = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.height;
147
+ return "number" == typeof userHeight ? userHeight : .8 * Math.max(r.width, r.height);
148
+ },
149
+ cornerRadius: (_d, ctx) => {
150
+ var _a, _b, _c, _e;
151
+ const r = getArcCenterImageRect(spec, ctx), userWidth = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.width, userHeight = null === (_e = null === (_c = spec.centerImage) || void 0 === _c ? void 0 : _c.style) || void 0 === _e ? void 0 : _e.height, w = "number" == typeof userWidth ? userWidth : .8 * Math.max(r.width, r.height), h = "number" == typeof userHeight ? userHeight : .8 * Math.max(r.width, r.height);
152
+ return Math.max(w, h) / 2;
153
+ },
133
154
  image: null === (_c = spec.centerImage) || void 0 === _c ? void 0 : _c.image,
134
155
  repeatX: "no-repeat",
135
156
  repeatY: "no-repeat",
@@ -138,31 +159,21 @@ export const buildArcCenterImageMark = spec => {
138
159
  anchor: (_d, ctx) => {
139
160
  const r = getArcCenterImageRect(spec, ctx);
140
161
  return [ r.x + r.width / 2, r.y + r.height / 2 ];
141
- },
142
- dx: (_d, ctx) => {
143
- var _a, _b;
144
- const r = getArcCenterImageRect(spec, ctx), userWidth = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.width, w = "number" == typeof userWidth ? userWidth : r.width;
145
- return (r.width - w) / 2;
146
- },
147
- dy: (_d, ctx) => {
148
- var _a, _b;
149
- const r = getArcCenterImageRect(spec, ctx), userHeight = null === (_b = null === (_a = spec.centerImage) || void 0 === _a ? void 0 : _a.style) || void 0 === _b ? void 0 : _b.height, h = "number" == typeof userHeight ? userHeight : r.height;
150
- return (r.height - h) / 2;
151
162
  }
152
163
  }, null === (_e = spec.centerImage) || void 0 === _e ? void 0 : _e.style)
153
164
  }) : null ].filter(Boolean)
154
165
  };
155
166
  };
156
167
 
157
- const getArcBlockMetrics = spec => {
158
- var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
159
- const 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 !== (_g = null === (_f = null === (_e = spec.title) || void 0 === _e ? void 0 : _e.style) || void 0 === _f ? void 0 : _f.lineHeight) && void 0 !== _g ? _g : Math.max(19, Math.round(1.35 * titleFontSize))), contentFontSize = Number(null !== (_k = null === (_j = null === (_h = spec.content) || void 0 === _h ? void 0 : _h.style) || void 0 === _j ? void 0 : _j.fontSize) && void 0 !== _k ? _k : 12), contentLineHeight = Number(null !== (_o = null === (_m = null === (_l = spec.content) || void 0 === _l ? void 0 : _l.style) || void 0 === _m ? void 0 : _m.lineHeight) && void 0 !== _o ? _o : 17), contentHeight = Math.max(240 - titleLineHeight - 4, contentLineHeight), imageWidth = null !== (_q = null === (_p = spec.image) || void 0 === _p ? void 0 : _p.width) && void 0 !== _q ? _q : 140, imageHeight = null !== (_s = null === (_r = spec.image) || void 0 === _r ? void 0 : _r.height) && void 0 !== _s ? _s : 140, isDown = isDownArc(spec), imageBox = {
168
+ const getArcBlockMetrics = (spec, index = 0) => {
169
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
170
+ const 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 : 32), titleLineHeight = Number(null !== (_g = null === (_f = null === (_e = spec.title) || void 0 === _e ? void 0 : _e.style) || void 0 === _f ? void 0 : _f.lineHeight) && void 0 !== _g ? _g : Math.max(34, Math.round(1.35 * titleFontSize))), contentFontSize = Number(null !== (_k = null === (_j = null === (_h = spec.content) || void 0 === _h ? void 0 : _h.style) || void 0 === _j ? void 0 : _j.fontSize) && void 0 !== _k ? _k : 20), contentLineHeight = Number(null !== (_o = null === (_m = null === (_l = spec.content) || void 0 === _l ? void 0 : _l.style) || void 0 === _m ? void 0 : _m.lineHeight) && void 0 !== _o ? _o : 26), contentHeight = Math.max(240 - titleLineHeight - 4, contentLineHeight), imageDiameter = Math.max(null !== (_q = null === (_p = spec.image) || void 0 === _p ? void 0 : _p.width) && void 0 !== _q ? _q : 240, null !== (_s = null === (_r = spec.image) || void 0 === _r ? void 0 : _r.height) && void 0 !== _s ? _s : 240), imageWidth = imageDiameter, imageHeight = imageDiameter, isDown = isDownArc(spec), count = Math.max(null !== (_u = null === (_t = spec.data) || void 0 === _t ? void 0 : _t.length) && void 0 !== _u ? _u : 0, 1), canvasWidth = Number(null !== (_v = spec.width) && void 0 !== _v ? _v : imageWidth * count), defaultTextWidth = Math.round(canvasWidth / (count + 1)), textBoxWidth = Math.max(Number(null !== (_x = null === (_w = spec.block) || void 0 === _w ? void 0 : _w.width) && void 0 !== _x ? _x : defaultTextWidth), 240), isLeftSide = index < count / 2, imageBox = {
160
171
  x: -imageWidth / 2,
161
172
  y: -imageHeight / 2,
162
173
  width: imageWidth,
163
174
  height: imageHeight
164
- }, textBoxWidth = Math.max(imageWidth - 20, 200), textBox = {
165
- x: -imageWidth / 2 + 20,
175
+ }, textBox = {
176
+ x: isLeftSide ? -20 : 20,
166
177
  y: isDown ? imageBox.y + imageHeight + 10 : imageBox.y - 10 - 240,
167
178
  width: textBoxWidth,
168
179
  height: 240
@@ -180,13 +191,14 @@ const getArcBlockMetrics = spec => {
180
191
  width: textBox.width,
181
192
  height: contentHeight
182
193
  },
183
- isDown: isDown
194
+ isDown: isDown,
195
+ textAlign: isLeftSide ? "right" : "left"
184
196
  };
185
197
  };
186
198
 
187
199
  export const buildArcBlockMark = (spec, block, index) => {
188
- var _a, _b, _c, _e;
189
- const hasImage = !!block.image, contentText = Array.isArray(block.content) ? block.content : block.content ? [ block.content ] : [], themeColor = getThemeColor(spec), metrics = getArcBlockMetrics(spec), connectorY = metrics.isDown ? metrics.imageBox.y + metrics.imageBox.height : metrics.textBox.y, connectorHeight = metrics.isDown ? Math.max(metrics.textBox.y + metrics.textBox.height - (metrics.imageBox.y + metrics.imageBox.height), 0) : Math.max(metrics.imageBox.y - metrics.textBox.y, 0);
200
+ var _a, _b, _c, _e, _f;
201
+ const hasImage = !!block.image, contentText = Array.isArray(block.content) ? block.content : block.content ? [ block.content ] : [], themeColor = getThemeColor(spec), metrics = getArcBlockMetrics(spec, index), connectorY = metrics.isDown ? metrics.imageBox.y + metrics.imageBox.height : metrics.textBox.y, connectorHeight = metrics.isDown ? Math.max(metrics.textBox.y + metrics.textBox.height - (metrics.imageBox.y + metrics.imageBox.height), 0) : Math.max(metrics.imageBox.y - metrics.textBox.y, 0);
190
202
  return {
191
203
  type: "group",
192
204
  id: `storyline-block-${null !== (_a = block.id) && void 0 !== _a ? _a : index}`,
@@ -200,8 +212,9 @@ export const buildArcBlockMark = (spec, block, index) => {
200
212
  type: "rect",
201
213
  name: `storyline-block-connector-${index}`,
202
214
  interactive: !1,
215
+ zIndex: LayoutZIndex.Mark + 2,
203
216
  style: {
204
- x: metrics.imageBox.x,
217
+ x: -1,
205
218
  y: connectorY,
206
219
  width: 2,
207
220
  height: connectorHeight,
@@ -211,13 +224,15 @@ export const buildArcBlockMark = (spec, block, index) => {
211
224
  }, hasImage ? Object.assign(Object.assign({
212
225
  type: "image",
213
226
  name: `storyline-block-image-${index}`,
214
- interactive: !1
227
+ interactive: !1,
228
+ zIndex: LayoutZIndex.Mark + 3
215
229
  }, omitImageLayoutSpec(spec.image)), {
216
230
  style: Object.assign({
217
231
  x: metrics.imageBox.x,
218
232
  y: metrics.imageBox.y,
219
233
  width: metrics.imageBox.width,
220
234
  height: metrics.imageBox.height,
235
+ cornerRadius: Math.min(metrics.imageBox.width, metrics.imageBox.height) / 2,
221
236
  image: block.image,
222
237
  repeatX: "no-repeat",
223
238
  repeatY: "no-repeat",
@@ -225,23 +240,38 @@ export const buildArcBlockMark = (spec, block, index) => {
225
240
  imagePosition: "center"
226
241
  }, null === (_b = spec.image) || void 0 === _b ? void 0 : _b.style)
227
242
  }) : {
228
- type: "rect",
243
+ type: "symbol",
229
244
  name: `storyline-block-image-bg-${index}`,
230
245
  interactive: !1,
246
+ zIndex: LayoutZIndex.Mark + 3,
231
247
  style: {
232
- x: metrics.imageBox.x,
233
- y: metrics.imageBox.y,
234
- width: metrics.imageBox.width,
235
- height: metrics.imageBox.height,
236
- cornerRadius: Math.min(metrics.imageBox.width, metrics.imageBox.height) / 2,
248
+ x: 0,
249
+ y: 0,
250
+ size: Math.min(metrics.imageBox.width, metrics.imageBox.height),
251
+ symbolType: "circle",
237
252
  fill: "#ffffff",
238
253
  stroke: themeColor,
239
254
  lineWidth: 2
240
255
  }
241
- }, block.title ? Object.assign(Object.assign({
256
+ }, !0 === (null === (_c = spec.image) || void 0 === _c ? void 0 : _c.showBackground) ? {
257
+ type: "symbol",
258
+ name: `storyline-block-image-halo-${index}`,
259
+ interactive: !1,
260
+ zIndex: LayoutZIndex.Mark + 3,
261
+ style: {
262
+ x: 0,
263
+ y: 0,
264
+ size: Math.min(metrics.imageBox.width, metrics.imageBox.height) + 12,
265
+ symbolType: "circle",
266
+ fill: "transparent",
267
+ stroke: themeColor,
268
+ lineWidth: 3
269
+ }
270
+ } : null, block.title ? Object.assign(Object.assign({
242
271
  type: "text",
243
272
  name: `storyline-block-title-${index}`,
244
- interactive: !1
273
+ interactive: !1,
274
+ zIndex: LayoutZIndex.Mark + 5
245
275
  }, spec.title), {
246
276
  style: Object.assign({
247
277
  x: metrics.textBox.x,
@@ -255,13 +285,14 @@ export const buildArcBlockMark = (spec, block, index) => {
255
285
  stroke: "#fff",
256
286
  lineWidth: 5,
257
287
  lineJoin: "round",
258
- textAlign: "left",
288
+ textAlign: metrics.textAlign,
259
289
  textBaseline: "top"
260
- }, null === (_c = spec.title) || void 0 === _c ? void 0 : _c.style)
290
+ }, null === (_e = spec.title) || void 0 === _e ? void 0 : _e.style)
261
291
  }) : null, contentText.length ? Object.assign(Object.assign({
262
292
  type: "text",
263
293
  name: `storyline-block-content-${index}`,
264
- interactive: !1
294
+ interactive: !1,
295
+ zIndex: LayoutZIndex.Mark + 4
265
296
  }, spec.content), {
266
297
  textType: "rich",
267
298
  style: Object.assign({
@@ -271,15 +302,18 @@ export const buildArcBlockMark = (spec, block, index) => {
271
302
  height: metrics.contentBox.height,
272
303
  maxLineWidth: metrics.contentBox.width,
273
304
  heightLimit: metrics.contentBox.height,
274
- text: buildRichContent(contentText, spec),
275
- fontSize: 12,
276
- lineHeight: 17,
277
- textAlign: "left",
305
+ text: buildRichContent(contentText, spec, {
306
+ fontSize: metrics.contentFontSize,
307
+ lineHeight: metrics.contentLineHeight,
308
+ fill: "#596173",
309
+ align: metrics.textAlign
310
+ }),
311
+ textAlign: metrics.textAlign,
278
312
  textBaseline: "top",
279
313
  wordBreak: "break-word",
280
314
  ellipsis: "...",
281
315
  fill: "#596173"
282
- }, null === (_e = spec.content) || void 0 === _e ? void 0 : _e.style)
316
+ }, null === (_f = spec.content) || void 0 === _f ? void 0 : _f.style)
283
317
  }) : null ].filter(Boolean)
284
318
  };
285
319
  };