ChartGroup 使用手册
v0.4.3 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
将多个图表组合在同一区域,协调分类悬停、叠加绘制与共享坐标轴,便于比较关联数据。
使用选择
用于在共享配置下组合图表。各图表仍通过自己的公开数据与视觉 API 配置,不通过页面选择器修改内部 marks。
只提供共享轴与交互配置,不自动创建图表、标题或图例。
显式组合 BarChart / LineChart,并协调各自 width、height 与定位,才能共享同一画布。
根默认可访问名称随 LocaleProvider 切换,使用
chartGroup.name;显式aria-label优先。数据单元格组使用chartGroup.cells。缺少 xLabels 对应项时使用chartGroup.cell的{{index}}完整模板(从 1 开始);显式分类名称保持原样。业务名称、数据值与数字格式保持调用方内容。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
HoverPanel 使用共享三列布局;圆点—名称优先 --gap-1,名称—数值优先 --gap-2,两处均至少保留 4 CSS px,并跟随 LTR / RTL 逻辑方向。默认 16px 根字号下仍为 4px / 8px,较大 Token 保留;面板纵向分区和图表中心注释不套用此下限。
设计原则
Chart 组合宿主:
ChartGroup负责跨多个 Chart 原子组件的坐标语义与交互状态协调,不替代BarChart/LineChart的绘图职责。子图表保持原子: 子图表仍独立传入自身数据、颜色、轴线与出现动效配置;
ChartGroup不复制 BarChart / LineChart 的几何绘制算法。单元格 hover: 当
hoverMode="cell"时,容器在顶层绘制分类 cell 命中层;每个 cell 以分类中心为基准,左右各半个单元宽度,鼠标进入该区域即可触发共享activeCellIndex。坐标轴控制:
ChartGroup可统一下发坐标轴显示、网格、辅助线、X/Y label 抽稀、Y 轴 domain / ticks / formatter 与 LineChart 的xAxisMode。子图表显式传入同名 prop 时优先使用子图表自身配置。响应式画布: 根层观察最终显示尺寸;
width="100%"/height="100%"时共享命中层和 hover panel bounds 使用真实画布尺寸。完整分类语义: ChartGroup 始终把完整
xLabels和完整分类 cell 下发给子图表;抽稀只由实际绘制坐标轴的子图表执行,不减少共享命中 cell 或 active index 范围。共享垂直边界: 顶部使用内容感知安全区;ChartGroup 收集 BarChart / LineChart 子图的图形、marker 与 Y 轴需求并取最大值,使所有叠加图层和共享命中层使用同一顶边。hover 数值不增加共享顶部高度,仍保持在图形上方
4px,必要时可溢出绘图区顶边。底部仅保留 X 轴8px间距和16px标签高度。叠加画布: 根层是
position: relative的固定尺寸画布,子图表可通过class="absolute top-0 left-0"叠加。单坐标轴: 组合图表推荐只让一个子图表渲染坐标轴,其余子图表关闭坐标轴、网格和辅助线。
无内置业务外壳: 不内置标题、卡片背景、legend 或 toolbar;这些由外部 Frame / Card 组合。
2.1 Props
其余未声明属性会透传给根层 Frame。
2.2 子图表协议
ChartGroup 通过 context 向后代 Chart 暴露:
当前接入组件:
BarChart: 同一groupIndex下的单柱、多段、相叠层或并排柱会一起响应 cell hover。LineChart: 同一pointIndex下的 marker 会响应 cell hover;marker 自身透明命中区仍独立保留。开启
showHoverPanel时,子图表只上报当前 hover 面板数据,由ChartGroup统一渲染一个共享面板;子图表默认隐藏自身 hover label,但显式showHoverLabel={true}时仍可同时显示。
布局模型
主布局模型:复合管理布局。
根层为
Frame,作为固定尺寸组合画布。子图表由外部显式声明层级与定位,常见写法为
absolute top-0 left-0。共享 cell hit layer 是容器内部绝对定位的 SVG 覆盖层,默认位于子图表上方;每个分类命中区域按分类中心左右半格计算。
不接入三槽位协议,不承担标题、说明、legend 或卡片排版。
详见 LayoutProtocol.md §12.6(源码参考:specs/maintainers/LayoutProtocol.md)。
无障碍与 Frame 集成
根层使用
role="group"和aria-label="组合图表"(zh-CN 默认,随 locale 切换)。未开启共享面板且
hoverMode="cell"、showHitLayer=true时,每个 cell hit rect 使用role="button"、tabindex="0"和分类 label 作为aria-label。loading保留组合画布、共享坐标和子图节点;根 Frame 明确关闭 Skeleton,子图通过加载上下文同步恢复到出现动效起点。显式传入
enableResponsive/enableContext/enableScaleObserver/enableDefaultMotion。class、style与未声明属性透传到根层 Frame。
示例
ChartGroup 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
ChartGroup 类型与状态
必填属性:无具名必填属性。
可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。
继承声明:Omit<FrameProps, "children" | "skeleton" | "renderHints">。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
ChartGroupXAxisMode
来源:components/src/lib/chart/group-context.ts
ChartGroupPlotBounds
来源:components/src/components/ChartGroup.svelte
ChartGroupHoverMode
来源:components/src/lib/chart/group-context.ts
ChartHoverPanelVariant
来源:components/src/lib/chart/hover-panel.ts
ChartHoverPanelPlacement
来源:components/src/lib/chart/hover-panel.ts