@visactor/vchart-extension 2.1.0-alpha.16 → 2.1.0-alpha.18

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 (227) hide show
  1. package/build/index.js +0 -2216
  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/histogram-3d/chart.js +2 -1
  31. package/cjs/charts/histogram-3d/index.js +1 -1
  32. package/cjs/charts/histogram-3d/interface.js +1 -1
  33. package/cjs/charts/image-cloud/image-cloud-transformer.js +1 -1
  34. package/cjs/charts/image-cloud/image-cloud.js +1 -1
  35. package/cjs/charts/image-cloud/index.js +1 -1
  36. package/cjs/charts/image-cloud/interface.js +1 -1
  37. package/cjs/charts/image-cloud/series/image-cloud.d.ts +1 -1
  38. package/cjs/charts/pictogram/element-highlight-by-graphic-name.js +1 -1
  39. package/cjs/components/bar-link/bar-link.js +1 -1
  40. package/cjs/components/bar-link/constant.js +1 -1
  41. package/cjs/components/bar-link/index.js +1 -1
  42. package/cjs/components/bar-link/type.js +1 -1
  43. package/cjs/components/bar-link/util.js +1 -1
  44. package/cjs/components/bar-regression-line/index.js +1 -1
  45. package/cjs/components/bar-regression-line/type.js +1 -1
  46. package/cjs/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  47. package/cjs/components/extension-mark-sync-state/index.js +1 -1
  48. package/cjs/components/extension-mark-sync-state/type.js +1 -1
  49. package/cjs/components/histogram-regression-line/index.js +1 -1
  50. package/cjs/components/histogram-regression-line/type.js +1 -1
  51. package/cjs/components/map-label/index.js +1 -1
  52. package/cjs/components/map-label/layout.js +1 -1
  53. package/cjs/components/map-label/map-label-transformer.js +1 -2
  54. package/cjs/components/map-label/map-label.d.ts +1 -1
  55. package/cjs/components/map-label/map-label.js +1 -1
  56. package/cjs/components/map-label/theme.js +1 -1
  57. package/cjs/components/map-label/type.js +1 -1
  58. package/cjs/components/regression-line/index.js +1 -1
  59. package/cjs/components/regression-line/regression-line.js +1 -1
  60. package/cjs/components/regression-line/type.js +1 -1
  61. package/cjs/components/scatter-regression-line/index.js +1 -1
  62. package/cjs/components/scatter-regression-line/type.js +1 -1
  63. package/cjs/components/series-break/constant.js +1 -1
  64. package/cjs/components/series-break/index.js +1 -1
  65. package/cjs/components/series-break/series-break.js +1 -1
  66. package/cjs/components/series-break/type.js +1 -1
  67. package/cjs/components/series-break/util.js +1 -2
  68. package/cjs/components/series-label/constant.js +1 -1
  69. package/cjs/components/series-label/index.js +1 -1
  70. package/cjs/components/series-label/series-label.js +1 -1
  71. package/cjs/components/series-label/type.js +1 -1
  72. package/cjs/components/series-label/util.js +1 -1
  73. package/cjs/index.d.ts +0 -1
  74. package/cjs/index.js +5 -5
  75. package/cjs/index.js.map +1 -1
  76. package/esm/charts/axis-3d/index.js +1 -2
  77. package/esm/charts/axis-3d/linear-axis.js +2 -1
  78. package/esm/charts/bar-3d/chart-spec-transformer.js +1 -1
  79. package/esm/charts/bar-3d/chart.js +1 -1
  80. package/esm/charts/bar-3d/constant.js +1 -1
  81. package/esm/charts/bar-3d/index.js +1 -1
  82. package/esm/charts/bar-3d/interface.js +1 -1
  83. package/esm/charts/bar-3d/series-spec-transformer.js +1 -1
  84. package/esm/charts/bar-3d/series.js +1 -1
  85. package/esm/charts/bar-3d/theme.js +1 -1
  86. package/esm/charts/candlestick/candlestick-transformer.js +1 -1
  87. package/esm/charts/candlestick/candlestick.js +2 -1
  88. package/esm/charts/candlestick/index.js +1 -1
  89. package/esm/charts/candlestick/interface.js +1 -1
  90. package/esm/charts/candlestick/util.js +1 -1
  91. package/esm/charts/combination-candlestick/combination-candlestick-transformer.js +1 -1
  92. package/esm/charts/combination-candlestick/combination-candlestick.js +1 -1
  93. package/esm/charts/combination-candlestick/constant.js +1 -1
  94. package/esm/charts/combination-candlestick/index.js +1 -1
  95. package/esm/charts/combination-candlestick/interface.js +1 -1
  96. package/esm/charts/conversion-funnel/arrow-data-transform.js +1 -1
  97. package/esm/charts/conversion-funnel/constants.js +1 -1
  98. package/esm/charts/conversion-funnel/conversion-funnel-transformer.js +1 -1
  99. package/esm/charts/conversion-funnel/conversion-funnel.js +1 -1
  100. package/esm/charts/conversion-funnel/index.js +1 -1
  101. package/esm/charts/conversion-funnel/interface.js +1 -1
  102. package/esm/charts/conversion-funnel/util.js +1 -1
  103. package/esm/charts/histogram-3d/chart.js +2 -1
  104. package/esm/charts/histogram-3d/index.js +1 -1
  105. package/esm/charts/histogram-3d/interface.js +1 -1
  106. package/esm/charts/image-cloud/image-cloud-transformer.js +1 -1
  107. package/esm/charts/image-cloud/image-cloud.js +1 -1
  108. package/esm/charts/image-cloud/index.js +1 -1
  109. package/esm/charts/image-cloud/interface.js +1 -1
  110. package/esm/charts/image-cloud/series/image-cloud.d.ts +1 -1
  111. package/esm/charts/pictogram/element-highlight-by-graphic-name.js +1 -1
  112. package/esm/components/bar-link/bar-link.js +1 -1
  113. package/esm/components/bar-link/constant.js +1 -1
  114. package/esm/components/bar-link/index.js +1 -1
  115. package/esm/components/bar-link/type.js +1 -1
  116. package/esm/components/bar-link/util.js +1 -1
  117. package/esm/components/bar-regression-line/index.js +1 -1
  118. package/esm/components/bar-regression-line/type.js +1 -1
  119. package/esm/components/extension-mark-sync-state/extension-mark-sync-state.js +1 -1
  120. package/esm/components/extension-mark-sync-state/index.js +1 -1
  121. package/esm/components/extension-mark-sync-state/type.js +1 -1
  122. package/esm/components/histogram-regression-line/index.js +1 -1
  123. package/esm/components/histogram-regression-line/type.js +1 -1
  124. package/esm/components/map-label/index.js +1 -1
  125. package/esm/components/map-label/layout.js +1 -1
  126. package/esm/components/map-label/map-label-transformer.js +1 -2
  127. package/esm/components/map-label/map-label.d.ts +1 -1
  128. package/esm/components/map-label/map-label.js +1 -1
  129. package/esm/components/map-label/theme.js +1 -1
  130. package/esm/components/map-label/type.js +1 -1
  131. package/esm/components/regression-line/index.js +1 -1
  132. package/esm/components/regression-line/regression-line.js +1 -1
  133. package/esm/components/regression-line/type.js +1 -1
  134. package/esm/components/scatter-regression-line/index.js +1 -1
  135. package/esm/components/scatter-regression-line/type.js +1 -1
  136. package/esm/components/series-break/constant.js +1 -1
  137. package/esm/components/series-break/index.js +1 -1
  138. package/esm/components/series-break/series-break.js +1 -1
  139. package/esm/components/series-break/type.js +1 -1
  140. package/esm/components/series-break/util.js +1 -2
  141. package/esm/components/series-label/constant.js +1 -1
  142. package/esm/components/series-label/index.js +1 -1
  143. package/esm/components/series-label/series-label.js +1 -1
  144. package/esm/components/series-label/type.js +1 -1
  145. package/esm/components/series-label/util.js +1 -1
  146. package/esm/index.d.ts +0 -1
  147. package/esm/index.js +0 -2
  148. package/esm/index.js.map +1 -1
  149. package/package.json +7 -7
  150. package/cjs/charts/storyline/index.d.ts +0 -4
  151. package/cjs/charts/storyline/index.js +0 -22
  152. package/cjs/charts/storyline/index.js.map +0 -1
  153. package/cjs/charts/storyline/interface.d.ts +0 -61
  154. package/cjs/charts/storyline/interface.js +0 -6
  155. package/cjs/charts/storyline/interface.js.map +0 -1
  156. package/cjs/charts/storyline/layout.d.ts +0 -53
  157. package/cjs/charts/storyline/layout.js +0 -214
  158. package/cjs/charts/storyline/layout.js.map +0 -1
  159. package/cjs/charts/storyline/layouts/bowl.d.ts +0 -5
  160. package/cjs/charts/storyline/layouts/bowl.js +0 -285
  161. package/cjs/charts/storyline/layouts/bowl.js.map +0 -1
  162. package/cjs/charts/storyline/layouts/clock.d.ts +0 -5
  163. package/cjs/charts/storyline/layouts/clock.js +0 -247
  164. package/cjs/charts/storyline/layouts/clock.js.map +0 -1
  165. package/cjs/charts/storyline/layouts/common.d.ts +0 -88
  166. package/cjs/charts/storyline/layouts/common.js +0 -291
  167. package/cjs/charts/storyline/layouts/common.js.map +0 -1
  168. package/cjs/charts/storyline/layouts/default.d.ts +0 -4
  169. package/cjs/charts/storyline/layouts/default.js +0 -179
  170. package/cjs/charts/storyline/layouts/default.js.map +0 -1
  171. package/cjs/charts/storyline/layouts/dome.d.ts +0 -5
  172. package/cjs/charts/storyline/layouts/dome.js +0 -300
  173. package/cjs/charts/storyline/layouts/dome.js.map +0 -1
  174. package/cjs/charts/storyline/layouts/landscape.d.ts +0 -4
  175. package/cjs/charts/storyline/layouts/landscape.js +0 -254
  176. package/cjs/charts/storyline/layouts/landscape.js.map +0 -1
  177. package/cjs/charts/storyline/layouts/portrait.d.ts +0 -4
  178. package/cjs/charts/storyline/layouts/portrait.js +0 -241
  179. package/cjs/charts/storyline/layouts/portrait.js.map +0 -1
  180. package/cjs/charts/storyline/layouts/wing.d.ts +0 -4
  181. package/cjs/charts/storyline/layouts/wing.js +0 -215
  182. package/cjs/charts/storyline/layouts/wing.js.map +0 -1
  183. package/cjs/charts/storyline/storyline-transformer.d.ts +0 -4
  184. package/cjs/charts/storyline/storyline-transformer.js +0 -66
  185. package/cjs/charts/storyline/storyline-transformer.js.map +0 -1
  186. package/cjs/charts/storyline/storyline.d.ts +0 -16
  187. package/cjs/charts/storyline/storyline.js +0 -36
  188. package/cjs/charts/storyline/storyline.js.map +0 -1
  189. package/esm/charts/storyline/index.d.ts +0 -4
  190. package/esm/charts/storyline/index.js +0 -8
  191. package/esm/charts/storyline/index.js.map +0 -1
  192. package/esm/charts/storyline/interface.d.ts +0 -61
  193. package/esm/charts/storyline/interface.js +0 -2
  194. package/esm/charts/storyline/interface.js.map +0 -1
  195. package/esm/charts/storyline/layout.d.ts +0 -53
  196. package/esm/charts/storyline/layout.js +0 -204
  197. package/esm/charts/storyline/layout.js.map +0 -1
  198. package/esm/charts/storyline/layouts/bowl.d.ts +0 -5
  199. package/esm/charts/storyline/layouts/bowl.js +0 -277
  200. package/esm/charts/storyline/layouts/bowl.js.map +0 -1
  201. package/esm/charts/storyline/layouts/clock.d.ts +0 -5
  202. package/esm/charts/storyline/layouts/clock.js +0 -241
  203. package/esm/charts/storyline/layouts/clock.js.map +0 -1
  204. package/esm/charts/storyline/layouts/common.d.ts +0 -88
  205. package/esm/charts/storyline/layouts/common.js +0 -257
  206. package/esm/charts/storyline/layouts/common.js.map +0 -1
  207. package/esm/charts/storyline/layouts/default.d.ts +0 -4
  208. package/esm/charts/storyline/layouts/default.js +0 -172
  209. package/esm/charts/storyline/layouts/default.js.map +0 -1
  210. package/esm/charts/storyline/layouts/dome.d.ts +0 -5
  211. package/esm/charts/storyline/layouts/dome.js +0 -292
  212. package/esm/charts/storyline/layouts/dome.js.map +0 -1
  213. package/esm/charts/storyline/layouts/landscape.d.ts +0 -4
  214. package/esm/charts/storyline/layouts/landscape.js +0 -250
  215. package/esm/charts/storyline/layouts/landscape.js.map +0 -1
  216. package/esm/charts/storyline/layouts/portrait.d.ts +0 -4
  217. package/esm/charts/storyline/layouts/portrait.js +0 -238
  218. package/esm/charts/storyline/layouts/portrait.js.map +0 -1
  219. package/esm/charts/storyline/layouts/wing.d.ts +0 -4
  220. package/esm/charts/storyline/layouts/wing.js +0 -210
  221. package/esm/charts/storyline/layouts/wing.js.map +0 -1
  222. package/esm/charts/storyline/storyline-transformer.d.ts +0 -4
  223. package/esm/charts/storyline/storyline-transformer.js +0 -66
  224. package/esm/charts/storyline/storyline-transformer.js.map +0 -1
  225. package/esm/charts/storyline/storyline.d.ts +0 -16
  226. package/esm/charts/storyline/storyline.js +0 -29
  227. package/esm/charts/storyline/storyline.js.map +0 -1
@@ -1 +0,0 @@
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 getRegionGeometry,\n getThemeColor,\n normalizeLayout,\n normalizePadding,\n omitImageLayoutSpec,\n withAlpha\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 = 96;\nconst WING_TEXT_GAP_FROM_IMAGE = 14;\nconst WING_TITLE_LINE_HEIGHT = 26;\nconst WING_TITLE_FONT_SIZE = 20;\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;\n\nconst getWingDirection = (spec: IStorylineSpec): StorylineWingDirection => {\n return normalizeLayout(spec.layout).direction ?? '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 const padding = normalizePadding(spec.block?.padding);\n const innerWidth = Math.max(width - padding.left - padding.right, 1);\n const innerHeight = Math.max(height - padding.top - padding.bottom, 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 // 左翅膀锚画布左侧,右翅膀锚画布右侧\n const cx = direction === 'right' ? startX + padding.left + innerWidth - rx * 0.1 : startX + padding.left + rx * 0.1;\n const cy = startY + padding.top + 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 ?? 2), 0.5);\n const endWidth = Math.max(Number(lineStyle.endWidth ?? lineStyle.lineWidth ?? 18), 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\nconst getWingBlockMetrics = (spec: IStorylineSpec, index: number) => {\n const titleFontSize = Number((spec.title?.style as Record<string, unknown>)?.fontSize ?? WING_TITLE_FONT_SIZE);\n const titleLineHeight = Number(\n (spec.title?.style as Record<string, unknown>)?.lineHeight ??\n Math.max(WING_TITLE_LINE_HEIGHT, Math.round(titleFontSize * 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 = Math.max(textHeight - titleLineHeight - titleToContentGap, contentLineHeight);\n\n const imageWidth = spec.image?.width ?? WING_BLOCK_IMAGE_SIZE;\n const imageHeight = 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 onLeft = isTextOnLeft(spec, index);\n const textWidth = WING_TEXT_BOX_WIDTH;\n const textX = onLeft\n ? -imageWidth / 2 - WING_TEXT_GAP_FROM_IMAGE - textWidth\n : imageWidth / 2 + WING_TEXT_GAP_FROM_IMAGE;\n const textY = -textHeight / 2;\n const textBox = { x: textX, y: textY, width: textWidth, height: textHeight };\n const contentBox = {\n x: textX,\n y: textY + titleLineHeight + titleToContentGap,\n width: textWidth,\n height: contentHeight\n };\n return {\n onLeft,\n titleFontSize,\n titleLineHeight,\n contentFontSize,\n contentLineHeight,\n imageBox,\n textBox,\n contentBox\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 const metrics = getWingBlockMetrics(spec, index);\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 {\n type: 'symbol',\n name: `storyline-block-image-halo-${index}`,\n interactive: false,\n style: {\n x: 0,\n y: 0,\n size: Math.max(metrics.imageBox.width, metrics.imageBox.height) + 12,\n symbolType: 'circle',\n fill: withAlpha(themeColor, 0.18),\n stroke: themeColor,\n lineWidth: 1.5\n }\n } as ICustomMarkSpec<'symbol'>,\n hasImage\n ? ({\n type: 'image',\n name: `storyline-block-image-${index}`,\n interactive: false,\n ...omitImageLayoutSpec(spec.image),\n style: {\n x: metrics.imageBox.x,\n y: metrics.imageBox.y,\n width: metrics.imageBox.width,\n height: metrics.imageBox.height,\n image: block.image,\n cornerRadius: Math.min(metrics.imageBox.width, metrics.imageBox.height) / 2,\n repeatX: 'no-repeat',\n repeatY: 'no-repeat',\n imageMode: 'cover',\n imagePosition: 'center',\n stroke: '#ffffff',\n lineWidth: 3,\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: metrics.imageBox.x,\n y: metrics.imageBox.y,\n width: metrics.imageBox.width,\n height: metrics.imageBox.height,\n cornerRadius: Math.min(metrics.imageBox.width, metrics.imageBox.height) / 2,\n fill: '#ffffff',\n stroke: themeColor,\n lineWidth: 2\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: metrics.onLeft ? metrics.textBox.x + metrics.textBox.width : metrics.textBox.x,\n y: metrics.textBox.y,\n text: block.title,\n maxLineWidth: metrics.textBox.width,\n fontSize: metrics.titleFontSize,\n lineHeight: metrics.titleLineHeight,\n fontWeight: 'bold',\n fill: themeColor,\n textAlign: metrics.onLeft ? 'right' : '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 zIndex: LayoutZIndex.Mark + 10,\n ...spec.content,\n textType: 'rich',\n style: {\n x: metrics.onLeft ? metrics.contentBox.x + metrics.contentBox.width : metrics.contentBox.x,\n y: metrics.contentBox.y,\n width: metrics.contentBox.width,\n height: metrics.contentBox.height,\n maxLineWidth: metrics.contentBox.width,\n heightLimit: metrics.contentBox.height,\n text: buildRichContent(contentText, spec),\n fontSize: WING_CONTENT_FONT_SIZE,\n lineHeight: WING_CONTENT_LINE_HEIGHT,\n textAlign: metrics.onLeft ? 'right' : 'left',\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,4 +0,0 @@
1
- import { CommonChartSpecTransformer } from '@visactor/vchart';
2
- export declare class StorylineChartSpecTransformer extends CommonChartSpecTransformer<any> {
3
- transformSpec(spec: any): void;
4
- }
@@ -1,66 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: !0
5
- }), exports.StorylineChartSpecTransformer = void 0;
6
-
7
- const vchart_1 = require("@visactor/vchart"), common_1 = require("./layouts/common"), clock_1 = require("./layouts/clock"), default_1 = require("./layouts/default"), landscape_1 = require("./layouts/landscape"), portrait_1 = require("./layouts/portrait"), dome_1 = require("./layouts/dome"), bowl_1 = require("./layouts/bowl"), wing_1 = require("./layouts/wing");
8
-
9
- class StorylineChartSpecTransformer extends vchart_1.CommonChartSpecTransformer {
10
- transformSpec(spec) {
11
- var _a;
12
- applyDefaultPadding(spec);
13
- const storylineSpec = Object.assign(Object.assign({}, spec), {
14
- data: [ ...null !== (_a = spec.data) && void 0 !== _a ? _a : [] ]
15
- });
16
- spec.type = "common", spec.data = [], spec.series = [], spec.axes = [], spec.customMark = buildStorylineMarks(storylineSpec),
17
- delete spec.layout, delete spec.title, super.transformSpec(spec);
18
- }
19
- }
20
-
21
- exports.StorylineChartSpecTransformer = StorylineChartSpecTransformer;
22
-
23
- const applyDefaultPadding = spec => {
24
- var _a, _b, _c, _d;
25
- const SMALL = 20, bowl = (0, common_1.isBowl)(spec), defaultTop = bowl ? 100 : SMALL, defaultBottom = bowl ? SMALL : 100, p = spec.padding;
26
- if (null != p) if ("number" != typeof p) if (Array.isArray(p)) {
27
- const [t, r = SMALL, b, l = SMALL] = p;
28
- spec.padding = [ null != t ? t : defaultTop, r, null != b ? b : defaultBottom, l ];
29
- } else "object" == typeof p && (spec.padding = {
30
- top: null !== (_a = p.top) && void 0 !== _a ? _a : defaultTop,
31
- right: null !== (_b = p.right) && void 0 !== _b ? _b : SMALL,
32
- bottom: null !== (_c = p.bottom) && void 0 !== _c ? _c : defaultBottom,
33
- left: null !== (_d = p.left) && void 0 !== _d ? _d : SMALL
34
- }); else spec.padding = bowl ? [ Math.max(p, 100), p, p, p ] : [ p, p, Math.max(p, 100), p ]; else spec.padding = [ defaultTop, SMALL, defaultBottom, SMALL ];
35
- }, buildStorylineMarks = spec => {
36
- var _a;
37
- const lineMark = buildLineMark(spec), blockMarks = (null !== (_a = spec.data) && void 0 !== _a ? _a : []).map(((block, index) => buildBlockMark(spec, block, index)));
38
- if ((0, common_1.isLandscape)(spec)) return [ ...blockMarks, lineMark ].filter(Boolean);
39
- if ((0, common_1.isPortrait)(spec)) return [ lineMark, ...blockMarks ].filter(Boolean);
40
- if ((0, common_1.isDome)(spec)) {
41
- return [ (0, dome_1.buildDomeCenterImageMark)(spec), (0, dome_1.buildDomeArcMark)(spec), ...blockMarks ].filter(Boolean);
42
- }
43
- if ((0, common_1.isBowl)(spec)) {
44
- return [ (0, bowl_1.buildBowlCenterImageMark)(spec), (0, bowl_1.buildBowlArcMark)(spec), ...blockMarks ].filter(Boolean);
45
- }
46
- if ((0, common_1.isClock)(spec)) {
47
- const ringsMark = (0, clock_1.buildClockArcMark)(spec), centerImageMark = (0, clock_1.buildClockCenterImageMark)(spec);
48
- return [ ringsMark, ...blockMarks, centerImageMark ].filter(Boolean);
49
- }
50
- if ((0, common_1.isWing)(spec)) {
51
- return [ (0, wing_1.buildWingArcMark)(spec), ...blockMarks ].filter(Boolean);
52
- }
53
- return [ lineMark, ...blockMarks ].filter(Boolean);
54
- }, buildLineMark = spec => {
55
- var _a, _b, _c;
56
- return !1 === (null === (_a = spec.line) || void 0 === _a ? void 0 : _a.visible) || (null !== (_c = null === (_b = spec.data) || void 0 === _b ? void 0 : _b.length) && void 0 !== _c ? _c : 0) <= 1 ? null : (0,
57
- common_1.isLandscape)(spec) ? (0, landscape_1.buildLandscapeConnectingCurve)(spec) : (0,
58
- common_1.isPortrait)(spec) ? (0, portrait_1.buildPortraitAxisMark)(spec) : (0, default_1.buildDefaultLineMark)(spec);
59
- }, buildBlockMark = (spec, block, index) => (0, common_1.isLandscape)(spec) ? (0,
60
- landscape_1.buildLandscapeBlockMark)(spec, block, index) : (0, common_1.isPortrait)(spec) ? (0,
61
- portrait_1.buildPortraitBlockMark)(spec, block, index) : (0, common_1.isDome)(spec) ? (0,
62
- dome_1.buildDomeBlockMark)(spec, block, index) : (0, common_1.isBowl)(spec) ? (0,
63
- bowl_1.buildBowlBlockMark)(spec, block, index) : (0, common_1.isClock)(spec) ? (0,
64
- clock_1.buildClockBlockMark)(spec, block, index) : (0, common_1.isWing)(spec) ? (0,
65
- wing_1.buildWingBlockMark)(spec, block, index) : (0, default_1.buildDefaultBlockMark)(spec, block, index);
66
- //# sourceMappingURL=storyline-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/charts/storyline/storyline-transformer.ts"],"names":[],"mappings":"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","file":"storyline-transformer.js","sourcesContent":["import { CommonChartSpecTransformer, type IExtensionGroupMarkSpec } from '@visactor/vchart';\nimport type { IStorylineBlock, IStorylineSpec } from './interface';\nimport { isBowl, isClock, isDome, isLandscape, isPortrait, isWing } from './layouts/common';\nimport { buildClockArcMark, buildClockBlockMark, buildClockCenterImageMark } from './layouts/clock';\nimport { buildDefaultBlockMark, buildDefaultLineMark } from './layouts/default';\nimport { buildLandscapeBlockMark, buildLandscapeConnectingCurve } from './layouts/landscape';\nimport { buildPortraitAxisMark, buildPortraitBlockMark } from './layouts/portrait';\nimport { buildDomeArcMark, buildDomeBlockMark, buildDomeCenterImageMark } from './layouts/dome';\nimport { buildBowlArcMark, buildBowlBlockMark, buildBowlCenterImageMark } from './layouts/bowl';\nimport { buildWingArcMark, buildWingBlockMark } from './layouts/wing';\n\nexport class StorylineChartSpecTransformer extends CommonChartSpecTransformer<any> {\n transformSpec(spec: any): void {\n applyDefaultPadding(spec);\n const storylineSpec = {\n ...spec,\n data: [...(spec.data ?? [])]\n } as IStorylineSpec;\n\n spec.type = 'common' as any;\n spec.data = [];\n spec.series = [];\n spec.axes = [];\n spec.customMark = buildStorylineMarks(storylineSpec);\n delete spec.layout;\n delete spec.title;\n super.transformSpec(spec as any);\n }\n}\n\n/**\n * 图表默认 padding:\n * - dome 等大多数布局底部留 100px,给 centerImage / 引导线留呼吸空间;\n * - bowl 是 dome 的上下镜像,centerImage 贴顶,所以默认顶部留 100px、底部 20px;\n * 用户在 spec.padding 中显式指定的值会被保留,仅在缺省时生效。\n */\nconst applyDefaultPadding = (spec: any) => {\n const LARGE = 100;\n const SMALL = 20;\n const bowl = isBowl(spec as IStorylineSpec);\n const defaultTop = bowl ? LARGE : SMALL;\n const defaultBottom = bowl ? SMALL : LARGE;\n const p = spec.padding;\n if (p === undefined || p === null) {\n spec.padding = [defaultTop, SMALL, defaultBottom, SMALL];\n return;\n }\n if (typeof p === 'number') {\n spec.padding = bowl ? [Math.max(p, LARGE), p, p, p] : [p, p, Math.max(p, LARGE), p];\n return;\n }\n if (Array.isArray(p)) {\n const [t, r = SMALL, b, l = SMALL] = p;\n spec.padding = [t ?? defaultTop, r, b ?? defaultBottom, l];\n return;\n }\n if (typeof p === 'object') {\n spec.padding = {\n top: p.top ?? defaultTop,\n right: p.right ?? SMALL,\n bottom: p.bottom ?? defaultBottom,\n left: p.left ?? SMALL\n };\n }\n};\n\nconst buildStorylineMarks = (spec: IStorylineSpec) => {\n const lineMark = buildLineMark(spec);\n const blockMarks = (spec.data ?? []).map((block, index) => buildBlockMark(spec, block, index));\n // landscape:连接曲线绘制在所有 block 之上,避免被 image 遮挡\n if (isLandscape(spec)) {\n return [...blockMarks, lineMark].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n // portrait:lineMark 是中轴 rect,作为底层背景先绘制\n if (isPortrait(spec)) {\n return [lineMark, ...blockMarks].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n // dome:先绘制 centerImage(最底层视觉锚点),再绘制贯穿 block 的弧线,最后绘制 block;\n // dome 不绘制 block 之间默认的连接线\n if (isDome(spec)) {\n const centerImageMark = buildDomeCenterImageMark(spec);\n const arcMark = buildDomeArcMark(spec);\n return [centerImageMark, arcMark, ...blockMarks].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n // bowl:dome 的上下镜像 —— centerImage 贴顶,弧线 + block 在下方\n if (isBowl(spec)) {\n const centerImageMark = buildBowlCenterImageMark(spec);\n const arcMark = buildBowlArcMark(spec);\n return [centerImageMark, arcMark, ...blockMarks].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n // clock:辐射式信息盘 —— 圆环骨架 + 径向分隔线 → centerImage(盘心)→ blocks(楔形 + 外圈文字)\n if (isClock(spec)) {\n const ringsMark = buildClockArcMark(spec);\n const centerImageMark = buildClockCenterImageMark(spec);\n return [ringsMark, ...blockMarks, centerImageMark].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n // wing:椭圆弧脉络 + 弧线上的圆形 image + 左右交替排列的 title/content;\n // 通过 layout.direction 控制翅膀朝向('left' | 'right')\n if (isWing(spec)) {\n const arcMark = buildWingArcMark(spec);\n return [arcMark, ...blockMarks].filter(Boolean) as IExtensionGroupMarkSpec[];\n }\n return [lineMark, ...blockMarks].filter(Boolean) as IExtensionGroupMarkSpec[];\n};\n\nconst buildLineMark = (spec: IStorylineSpec): IExtensionGroupMarkSpec | null => {\n if (spec.line?.visible === false || (spec.data?.length ?? 0) <= 1) {\n return null;\n }\n if (isLandscape(spec)) {\n return buildLandscapeConnectingCurve(spec);\n }\n if (isPortrait(spec)) {\n return buildPortraitAxisMark(spec);\n }\n return buildDefaultLineMark(spec);\n};\n\nconst buildBlockMark = (spec: IStorylineSpec, block: IStorylineBlock, index: number): IExtensionGroupMarkSpec => {\n if (isLandscape(spec)) {\n return buildLandscapeBlockMark(spec, block, index);\n }\n if (isPortrait(spec)) {\n return buildPortraitBlockMark(spec, block, index);\n }\n if (isDome(spec)) {\n return buildDomeBlockMark(spec, block, index);\n }\n if (isBowl(spec)) {\n return buildBowlBlockMark(spec, block, index);\n }\n if (isClock(spec)) {\n return buildClockBlockMark(spec, block, index);\n }\n if (isWing(spec)) {\n return buildWingBlockMark(spec, block, index);\n }\n\n return buildDefaultBlockMark(spec, block, index);\n};\n"]}
@@ -1,16 +0,0 @@
1
- import { BaseChart, VChart } from '@visactor/vchart';
2
- import type { IStorylineSpec } from './interface';
3
- import { StorylineChartSpecTransformer } from './storyline-transformer';
4
- export declare class StorylineChart<T extends IStorylineSpec = IStorylineSpec> extends BaseChart<Omit<T, 'data' | 'title' | 'layout'>> {
5
- type: string;
6
- static type: string;
7
- static readonly view: string;
8
- _spec: T;
9
- static readonly transformerConstructor: typeof StorylineChartSpecTransformer;
10
- readonly transformerConstructor: typeof StorylineChartSpecTransformer;
11
- init(): void;
12
- protected isValid(): boolean;
13
- }
14
- export declare const registerStorylineChart: (option?: {
15
- VChart?: typeof VChart;
16
- }) => void;
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: !0
5
- }), exports.registerStorylineChart = exports.StorylineChart = void 0;
6
-
7
- const vchart_1 = require("@visactor/vchart"), storyline_transformer_1 = require("./storyline-transformer");
8
-
9
- class StorylineChart extends vchart_1.BaseChart {
10
- constructor() {
11
- super(...arguments), this.type = "storyline", this.transformerConstructor = storyline_transformer_1.StorylineChartSpecTransformer;
12
- }
13
- init() {
14
- this.isValid() && super.init();
15
- }
16
- isValid() {
17
- var _a, _b;
18
- const {data: data} = this._spec;
19
- return !!Array.isArray(data) || (null === (_b = (_a = this._option).onError) || void 0 === _b || _b.call(_a, "Data is required and should be an array for storyline chart"),
20
- !1);
21
- }
22
- }
23
-
24
- exports.StorylineChart = StorylineChart, StorylineChart.type = "storyline", StorylineChart.view = "singleDefault",
25
- StorylineChart.transformerConstructor = storyline_transformer_1.StorylineChartSpecTransformer;
26
-
27
- const registerStorylineChart = option => {
28
- (0, vchart_1.registerCommonChart)(), (0, vchart_1.registerCustomMark)(), (0, vchart_1.registerGroupMark)(),
29
- (0, vchart_1.registerRectMark)(), (0, vchart_1.registerTextMark)(), (0, vchart_1.registerImageMark)(),
30
- (0, vchart_1.registerLineMark)(), (0, vchart_1.registerPathMark)(), (0, vchart_1.registerArcMark)();
31
- const vchartConstructor = (null == option ? void 0 : option.VChart) || vchart_1.VChart;
32
- vchartConstructor && vchartConstructor.useChart([ StorylineChart ]);
33
- };
34
-
35
- exports.registerStorylineChart = registerStorylineChart;
36
- //# sourceMappingURL=storyline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/charts/storyline/storyline.ts"],"names":[],"mappings":";;;AAAA,6CAY0B;AAE1B,mEAAwE;AAExE,MAAa,cAA0D,SAAQ,kBAE9E;IAFD;;QAGE,SAAI,GAAG,WAAW,CAAC;QAOV,2BAAsB,GAAG,qDAA6B,CAAC;IAiBlE,CAAC;IAfC,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO;SACR;QACD,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAES,OAAO;;QACf,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxB,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,6DAA6D,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AA1BH,wCA2BC;AAvBQ,mBAAI,GAAG,WAAW,CAAC;AACV,mBAAI,GAAW,eAAe,CAAC;AAI/B,qCAAsB,GAAG,qDAA6B,CAAC;AAoBlE,MAAM,sBAAsB,GAAG,CAAC,MAAmC,EAAE,EAAE;IAC5E,IAAA,4BAAmB,GAAE,CAAC;IACtB,IAAA,2BAAkB,GAAE,CAAC;IACrB,IAAA,0BAAiB,GAAE,CAAC;IACpB,IAAA,yBAAgB,GAAE,CAAC;IACnB,IAAA,yBAAgB,GAAE,CAAC;IACnB,IAAA,0BAAiB,GAAE,CAAC;IACpB,IAAA,yBAAgB,GAAE,CAAC;IACnB,IAAA,yBAAgB,GAAE,CAAC;IACnB,IAAA,wBAAe,GAAE,CAAC;IAElB,MAAM,iBAAiB,GAAG,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,eAAM,CAAC;IACnD,IAAI,iBAAiB,EAAE;QACrB,iBAAiB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;KAC9C;AACH,CAAC,CAAC;AAfW,QAAA,sBAAsB,0BAejC","file":"storyline.js","sourcesContent":["import {\n BaseChart,\n VChart,\n registerArcMark,\n registerCommonChart,\n registerCustomMark,\n registerGroupMark,\n registerImageMark,\n registerLineMark,\n registerPathMark,\n registerRectMark,\n registerTextMark\n} from '@visactor/vchart';\nimport type { IStorylineSpec } from './interface';\nimport { StorylineChartSpecTransformer } from './storyline-transformer';\n\nexport class StorylineChart<T extends IStorylineSpec = IStorylineSpec> extends BaseChart<\n Omit<T, 'data' | 'title' | 'layout'>\n> {\n type = 'storyline';\n static type = 'storyline';\n static readonly view: string = 'singleDefault';\n\n declare _spec: T;\n\n static readonly transformerConstructor = StorylineChartSpecTransformer;\n readonly transformerConstructor = StorylineChartSpecTransformer;\n\n init() {\n if (!this.isValid()) {\n return;\n }\n super.init();\n }\n\n protected isValid() {\n const { data } = this._spec;\n if (!Array.isArray(data)) {\n this._option.onError?.('Data is required and should be an array for storyline chart');\n return false;\n }\n return true;\n }\n}\n\nexport const registerStorylineChart = (option?: { VChart?: typeof VChart }) => {\n registerCommonChart();\n registerCustomMark();\n registerGroupMark();\n registerRectMark();\n registerTextMark();\n registerImageMark();\n registerLineMark();\n registerPathMark();\n registerArcMark();\n\n const vchartConstructor = option?.VChart || VChart;\n if (vchartConstructor) {\n vchartConstructor.useChart([StorylineChart]);\n }\n};\n"]}
@@ -1,4 +0,0 @@
1
- export * from './interface';
2
- export * from './layout';
3
- export * from './storyline';
4
- export * from './storyline-transformer';
@@ -1,8 +0,0 @@
1
- export * from "./interface";
2
-
3
- export * from "./layout";
4
-
5
- export * from "./storyline";
6
-
7
- export * from "./storyline-transformer";
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/charts/storyline/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC","file":"index.js","sourcesContent":["export * from './interface';\nexport * from './layout';\nexport * from './storyline';\nexport * from './storyline-transformer';\n"]}
@@ -1,61 +0,0 @@
1
- import type { IChartSpec, IComposedTextMarkSpec, IImageMarkSpec, IMarkSpec, IPathMarkSpec, IRectMarkSpec, ITextMarkSpec, StringOrNumber } from '@visactor/vchart';
2
- export type StorylineLayoutType = 'clock' | 'bowl' | 'dome' | 'wing' | 'landscape' | 'portrait' | 'up-ladder' | 'down-ladder' | 'pulse' | 'spiral';
3
- export type StorylineImagePosition = 'top' | 'left' | 'right' | 'bottom';
4
- export type StorylineLineType = 'line' | 'polyline' | 'curve';
5
- export type StorylineWingDirection = 'left' | 'right';
6
- export interface IStorylineBlock {
7
- id?: StringOrNumber;
8
- title?: string;
9
- content?: string | string[];
10
- image?: string | HTMLImageElement | HTMLCanvasElement;
11
- datum?: unknown;
12
- }
13
- export interface IStorylineLayoutOptions {
14
- type: StorylineLayoutType;
15
- padding?: number | [number, number, number, number];
16
- radiusRatio?: number;
17
- startAngle?: number;
18
- endAngle?: number;
19
- direction?: StorylineWingDirection;
20
- }
21
- export interface IStorylineBlockSpec {
22
- width?: number;
23
- widthRatio?: number;
24
- minWidth?: number;
25
- maxWidth?: number;
26
- height?: number;
27
- padding?: number | [number, number, number, number];
28
- gap?: number;
29
- style?: Partial<IRectMarkSpec>;
30
- }
31
- export interface IStorylineImageSpec extends IMarkSpec<IImageMarkSpec> {
32
- width?: number;
33
- height?: number;
34
- position?: StorylineImagePosition;
35
- gap?: number;
36
- }
37
- export interface IStorylineCenterImageSpec extends IMarkSpec<IImageMarkSpec> {
38
- width?: number;
39
- height?: number;
40
- visible?: boolean;
41
- image?: string | HTMLImageElement | HTMLCanvasElement;
42
- }
43
- export interface IStorylineLineSpec extends IMarkSpec<IPathMarkSpec> {
44
- visible?: boolean;
45
- type?: StorylineLineType;
46
- showArrow?: boolean;
47
- arrowSize?: number;
48
- distance?: number;
49
- }
50
- export interface IStorylineSpec extends Omit<IChartSpec, 'type' | 'data' | 'series' | 'title' | 'layout'> {
51
- type: 'storyline';
52
- data: IStorylineBlock[];
53
- layout?: StorylineLayoutType | IStorylineLayoutOptions;
54
- block?: IStorylineBlockSpec;
55
- title?: IMarkSpec<ITextMarkSpec>;
56
- content?: IMarkSpec<IComposedTextMarkSpec>;
57
- image?: IStorylineImageSpec;
58
- centerImage?: IStorylineCenterImageSpec;
59
- line?: IStorylineLineSpec;
60
- themeColor?: string;
61
- }
@@ -1,2 +0,0 @@
1
- export { };
2
- //# sourceMappingURL=interface.js.map
@@ -1 +0,0 @@
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 =\n | 'clock'\n | 'bowl'\n | 'dome'\n | 'wing'\n | 'landscape'\n | 'portrait'\n | 'up-ladder'\n | 'down-ladder'\n | 'pulse'\n | 'spiral';\n\nexport type StorylineImagePosition = 'top' | 'left' | 'right' | 'bottom';\nexport type StorylineLineType = 'line' | 'polyline' | 'curve';\nexport type StorylineWingDirection = 'left' | 'right';\n\nexport interface IStorylineBlock {\n id?: StringOrNumber;\n title?: string;\n content?: string | string[];\n image?: 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 * 对 wing 布局生效,控制翅膀展开方向。\n * - 'left':圆心锚在画布左侧、弧凸向右展开(默认);\n * - 'right':圆心锚在画布右侧、弧凸向左展开。\n */\n direction?: StorylineWingDirection;\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 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\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,53 +0,0 @@
1
- import type { IStorylineBlock, IStorylineLayoutOptions, StorylineLayoutType } from './interface';
2
- export interface StorylineSize {
3
- width: number;
4
- height: number;
5
- }
6
- export interface StorylinePadding {
7
- top: number;
8
- right: number;
9
- bottom: number;
10
- left: number;
11
- }
12
- export interface StorylinePoint {
13
- x: number;
14
- y: number;
15
- }
16
- export interface StorylineBlockPosition extends StorylinePoint, StorylineSize {
17
- id: string | number;
18
- index: number;
19
- datum: IStorylineBlock;
20
- center: StorylinePoint;
21
- }
22
- export interface StorylineLinkPosition {
23
- from: StorylineBlockPosition;
24
- to: StorylineBlockPosition;
25
- start: StorylinePoint;
26
- end: StorylinePoint;
27
- points: StorylinePoint[];
28
- }
29
- export interface StorylineCircleGuide {
30
- center: StorylinePoint;
31
- radius: number;
32
- }
33
- export interface StorylineLayoutResult {
34
- blocks: StorylineBlockPosition[];
35
- links: StorylineLinkPosition[];
36
- circleGuide?: StorylineCircleGuide;
37
- }
38
- export interface StorylineComputeOptions {
39
- layout: StorylineLayoutType | IStorylineLayoutOptions | undefined;
40
- viewBox: StorylineSize;
41
- block: StorylineSize;
42
- gap?: number;
43
- padding?: number | [number, number, number, number];
44
- lineDistance?: number;
45
- }
46
- export declare const normalizePadding: (padding?: number | [
47
- number,
48
- number,
49
- number,
50
- number
51
- ]) => StorylinePadding;
52
- export declare const normalizeLayout: (layout?: StorylineLayoutType | IStorylineLayoutOptions) => IStorylineLayoutOptions;
53
- export declare const computeStorylineLayout: (data: IStorylineBlock[], options: StorylineComputeOptions) => StorylineLayoutResult;
@@ -1,204 +0,0 @@
1
- const DEFAULT_LAYOUT = "landscape", DEFAULT_PADDING = 24;
2
-
3
- export const normalizePadding = padding => {
4
- var _a, _b, _c, _d;
5
- if (Array.isArray(padding)) return {
6
- top: null !== (_a = padding[0]) && void 0 !== _a ? _a : 0,
7
- right: null !== (_b = padding[1]) && void 0 !== _b ? _b : 0,
8
- bottom: null !== (_c = padding[2]) && void 0 !== _c ? _c : 0,
9
- left: null !== (_d = padding[3]) && void 0 !== _d ? _d : 0
10
- };
11
- const value = null != padding ? padding : 24;
12
- return {
13
- top: value,
14
- right: value,
15
- bottom: value,
16
- left: value
17
- };
18
- };
19
-
20
- export const normalizeLayout = layout => layout ? "string" == typeof layout ? {
21
- type: layout
22
- } : layout : {
23
- type: "landscape"
24
- };
25
-
26
- export const computeStorylineLayout = (data, options) => {
27
- var _a, _b, _c;
28
- const layout = normalizeLayout(options.layout), padding = normalizePadding(null !== (_a = layout.padding) && void 0 !== _a ? _a : options.padding), gap = null !== (_b = options.gap) && void 0 !== _b ? _b : 40, lineDistance = null !== (_c = options.lineDistance) && void 0 !== _c ? _c : 8, blocks = computeBlockPositions(data, layout, options.viewBox, options.block, padding, gap), circleGuide = "clock" === layout.type ? computeClockCircleGuide(options.viewBox, options.block, padding, layout) : void 0;
29
- return {
30
- blocks: blocks,
31
- links: computeLinks(blocks, lineDistance),
32
- circleGuide: circleGuide
33
- };
34
- };
35
-
36
- const computeBlockPositions = (data, layout, viewBox, block, padding, gap) => {
37
- const count = data.length;
38
- if (!count) return [];
39
- const inner = {
40
- x: padding.left,
41
- y: padding.top,
42
- width: Math.max(viewBox.width - padding.left - padding.right, block.width),
43
- height: Math.max(viewBox.height - padding.top - padding.bottom, block.height)
44
- }, center = {
45
- x: inner.x + inner.width / 2,
46
- y: inner.y + inner.height / 2
47
- };
48
- let centers;
49
- switch (layout.type) {
50
- case "portrait":
51
- centers = lineCenters(count, center.x, inner.y + block.height / 2, center.x, inner.y + inner.height - block.height / 2);
52
- break;
53
-
54
- case "up-ladder":
55
- centers = lineCenters(count, inner.x + block.width / 2, inner.y + inner.height - block.height / 2, inner.x + inner.width - block.width / 2, inner.y + block.height / 2);
56
- break;
57
-
58
- case "down-ladder":
59
- centers = lineCenters(count, inner.x + block.width / 2, inner.y + block.height / 2, inner.x + inner.width - block.width / 2, inner.y + inner.height - block.height / 2);
60
- break;
61
-
62
- case "pulse":
63
- centers = alternatingHorizontalCenters(count, inner, block, gap);
64
- break;
65
-
66
- case "spiral":
67
- centers = alternatingVerticalCenters(count, inner, block, gap);
68
- break;
69
-
70
- case "clock":
71
- centers = circularCenters(count, viewBox, block, padding, layout);
72
- break;
73
-
74
- case "bowl":
75
- centers = arcCenters(count, inner, block, layout, 200, 340);
76
- break;
77
-
78
- case "dome":
79
- centers = arcCenters(count, inner, block, layout, 160, 20);
80
- break;
81
-
82
- case "wing":
83
- {
84
- const direction = "right" === layout.direction ? "right" : "left", [s, e] = "right" === direction ? [ 110, 250 ] : [ -70, 70 ];
85
- centers = arcCenters(count, inner, block, layout, s, e);
86
- break;
87
- }
88
-
89
- default:
90
- centers = lineCenters(count, inner.x + block.width / 2, center.y, inner.x + inner.width - block.width / 2, center.y);
91
- }
92
- return centers.map(((point, index) => {
93
- var _a, _b;
94
- return {
95
- id: null !== (_b = null === (_a = data[index]) || void 0 === _a ? void 0 : _a.id) && void 0 !== _b ? _b : index,
96
- index: index,
97
- datum: data[index],
98
- width: block.width,
99
- height: block.height,
100
- x: point.x - block.width / 2,
101
- y: point.y - block.height / 2,
102
- center: point
103
- };
104
- }));
105
- }, lineCenters = (count, x0, y0, x1, y1) => 1 === count ? [ {
106
- x: (x0 + x1) / 2,
107
- y: (y0 + y1) / 2
108
- } ] : Array.from({
109
- length: count
110
- }, ((_, index) => {
111
- const t = index / (count - 1);
112
- return {
113
- x: x0 + (x1 - x0) * t,
114
- y: y0 + (y1 - y0) * t
115
- };
116
- })), alternatingHorizontalCenters = (count, inner, block, gap) => {
117
- const baseY = inner.y + inner.height / 2, offset = Math.min(Math.max(.65 * block.height + gap / 2, 0), Math.max((inner.height - block.height) / 2, 0));
118
- return lineCenters(count, inner.x + block.width / 2, baseY, inner.x + inner.width - block.width / 2, baseY).map(((point, index) => ({
119
- x: point.x,
120
- y: point.y + (index % 2 == 0 ? -offset : offset)
121
- })));
122
- }, alternatingVerticalCenters = (count, inner, block, gap) => {
123
- const baseX = inner.x + inner.width / 2, offset = Math.min(Math.max(.65 * block.width + gap / 2, 0), Math.max((inner.width - block.width) / 2, 0));
124
- return lineCenters(count, baseX, inner.y + block.height / 2, baseX, inner.y + inner.height - block.height / 2).map(((point, index) => ({
125
- x: point.x + (index % 2 == 0 ? -offset : offset),
126
- y: point.y
127
- })));
128
- }, circularCenters = (count, viewBox, block, padding, layout) => {
129
- var _a;
130
- const guide = computeClockCircleGuide(viewBox, block, padding, layout), startAngle = null !== (_a = layout.startAngle) && void 0 !== _a ? _a : -90;
131
- if (1 === count) {
132
- const angle = degreeToRadian(startAngle);
133
- return [ {
134
- x: guide.center.x + Math.cos(angle) * guide.radius,
135
- y: guide.center.y + Math.sin(angle) * guide.radius
136
- } ];
137
- }
138
- return Array.from({
139
- length: count
140
- }, ((_, index) => {
141
- const angle = degreeToRadian(startAngle + 360 * index / count);
142
- return {
143
- x: guide.center.x + Math.cos(angle) * guide.radius,
144
- y: guide.center.y + Math.sin(angle) * guide.radius
145
- };
146
- }));
147
- }, computeClockCircleGuide = (viewBox, block, padding, layout) => {
148
- var _a;
149
- const innerWidth = Math.max(viewBox.width - padding.left - padding.right, 1), innerHeight = Math.max(viewBox.height - padding.top - padding.bottom, 1), center = {
150
- x: padding.left + innerWidth / 2,
151
- y: padding.top + innerHeight / 2
152
- }, ratio = null !== (_a = layout.radiusRatio) && void 0 !== _a ? _a : .7, maxRadius = Math.max(Math.min(innerWidth - block.width, innerHeight - block.height) / 2, 1);
153
- return {
154
- center: center,
155
- radius: Math.max(1, maxRadius * ratio)
156
- };
157
- }, arcCenters = (count, inner, block, layout, fallbackStartAngle, fallbackEndAngle, defaultRatio = .88) => {
158
- var _a, _b, _c, _d, _e;
159
- const startAngle = null !== (_b = null !== (_a = layout.startAngle) && void 0 !== _a ? _a : fallbackStartAngle) && void 0 !== _b ? _b : -90, endAngle = null !== (_d = null !== (_c = layout.endAngle) && void 0 !== _c ? _c : fallbackEndAngle) && void 0 !== _d ? _d : 270, ratio = null !== (_e = layout.radiusRatio) && void 0 !== _e ? _e : defaultRatio, rx = Math.max((inner.width - block.width) / 2, 1) * ratio, ry = Math.max((inner.height - block.height) / 2, 1) * ratio, center_x = inner.x + inner.width / 2, center_y = inner.y + inner.height / 2;
160
- if (1 === count) {
161
- const angle = degreeToRadian((startAngle + endAngle) / 2);
162
- return [ {
163
- x: center_x + Math.cos(angle) * rx,
164
- y: center_y + Math.sin(angle) * ry
165
- } ];
166
- }
167
- return Array.from({
168
- length: count
169
- }, ((_, index) => {
170
- const t = index / (count - 1), angle = degreeToRadian(startAngle + angleDelta(startAngle, endAngle) * t);
171
- return {
172
- x: center_x + Math.cos(angle) * rx,
173
- y: center_y + Math.sin(angle) * ry
174
- };
175
- }));
176
- }, angleDelta = (startAngle, endAngle) => {
177
- const delta = endAngle - startAngle;
178
- return Math.abs(delta) >= 360 ? 360 : delta;
179
- }, degreeToRadian = degree => degree / 180 * Math.PI, computeLinks = (blocks, distance) => {
180
- const links = [];
181
- for (let i = 0; i < blocks.length - 1; i++) {
182
- const from = blocks[i], to = blocks[i + 1], start = pointOnBlockEdge(from, to.center, distance), end = pointOnBlockEdge(to, from.center, distance);
183
- links.push({
184
- from: from,
185
- to: to,
186
- start: start,
187
- end: end,
188
- points: [ start, end ]
189
- });
190
- }
191
- return links;
192
- }, pointOnBlockEdge = (block, toward, distance) => {
193
- const dx = toward.x - block.center.x, dy = toward.y - block.center.y;
194
- if (0 === dx && 0 === dy) return {
195
- x: block.center.x,
196
- y: block.center.y
197
- };
198
- const scaleX = 0 === dx ? Number.POSITIVE_INFINITY : block.width / 2 / Math.abs(dx), scaleY = 0 === dy ? Number.POSITIVE_INFINITY : block.height / 2 / Math.abs(dy), scale = Math.min(scaleX, scaleY), length = Math.sqrt(dx * dx + dy * dy) || 1;
199
- return {
200
- x: block.center.x + dx * scale + dx / length * distance,
201
- y: block.center.y + dy * scale + dy / length * distance
202
- };
203
- };
204
- //# sourceMappingURL=layout.js.map
@@ -1 +0,0 @@
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 'up-ladder':\n centers = lineCenters(\n count,\n inner.x + block.width / 2,\n inner.y + inner.height - block.height / 2,\n inner.x + inner.width - block.width / 2,\n inner.y + block.height / 2\n );\n break;\n case 'down-ladder':\n centers = lineCenters(\n count,\n inner.x + block.width / 2,\n inner.y + block.height / 2,\n inner.x + inner.width - block.width / 2,\n inner.y + inner.height - block.height / 2\n );\n break;\n case 'pulse':\n centers = alternatingHorizontalCenters(count, inner, block, gap);\n break;\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 'bowl':\n centers = arcCenters(count, inner, block, layout, 200, 340);\n break;\n case 'dome':\n centers = arcCenters(count, inner, block, layout, 160, 20);\n break;\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 alternatingHorizontalCenters = (\n count: number,\n inner: { x: number; y: number; width: number; height: number },\n block: StorylineSize,\n gap: number\n) => {\n const baseY = inner.y + inner.height / 2;\n const offset = Math.min(Math.max(block.height * 0.65 + gap / 2, 0), Math.max((inner.height - block.height) / 2, 0));\n const points = lineCenters(count, inner.x + block.width / 2, baseY, inner.x + inner.width - block.width / 2, baseY);\n return points.map((point, index) => ({\n x: point.x,\n y: point.y + (index % 2 === 0 ? -offset : offset)\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,5 +0,0 @@
1
- import type { IExtensionGroupMarkSpec } from '@visactor/vchart';
2
- import type { IStorylineBlock, IStorylineSpec } from '../interface';
3
- export declare const buildBowlArcMark: (spec: IStorylineSpec) => IExtensionGroupMarkSpec | null;
4
- export declare const buildBowlCenterImageMark: (spec: IStorylineSpec) => IExtensionGroupMarkSpec | null;
5
- export declare const buildBowlBlockMark: (spec: IStorylineSpec, block: IStorylineBlock, index: number) => IExtensionGroupMarkSpec;