Skip to content
fandhe-frontendcore v0.4.3
GitHub

Charts(共通 API)

fandhe-frontend-pre-styled-ui の charts mod が提供するスタイル済み Charts(共通 API) 部品です。

系列ごとに label/color/icon(shadcn/ui ChartConfig 相当、イシュー #2077)を Series::with_label/with_color/with_icon で個別に設定できます。凡例・line/area/bar/radar の各消費者は ChartData::series_color_var(index) を経由して同じ色を共有します。--fandhe-color-chart-1〜-6(6 段階)は shadcn/ui の 5 段階を包含するため据え置いています。

イシュー #2086 で shadcn/ui Charts(tooltip、registry 9 バリアント)と突合し、凡例(legend::legend)へ hide_marker(hideIcon 相当)・align(水平揃え、既定は左寄せのまま Center/End を opt-in)・marker(マーカー形状、既定は円形のまま角丸四角 Square を opt-in)を、ツールチップへ複数行本文 tooltip::datum_label_lines(見出し省略可・整形済み値・footer)を、それぞれ静的バリアントとして純追加しました。凡例をチャート上部に置く配置はノード合成順序(legend() を先に並べる)で表現し、専用の CSS 軸は持ちません。マウス追従ツールチップ・icon 合成は #2128 系のスコープ外です。

イシュー #2131 で、ツールチップの tooltip-indicator(色見本)に TooltipIndicator(Dot〔既定〕/Line/Dashed/None)の 4 種を追加し、tooltip::layer_with/layer_from_entries_with で選べるようにしました(既定 Dot は既存 layer/layer_from_entries とバイト一致)。あわせて hover 強調(active な点の拡張・非 active 点の減光)の CSS も追加しました。祖先(tooltip::frame/8 個の chart 部品それぞれの root)が data-has-active を持つときに --fandhe-chart-inactive-opacity を宣言し、data-index を持つ各データ点がそれを継承して減光、data-active を追加で持つ点のみフル不透明 + 拡大へ戻ります(tooltip::frame_with の FrameProps { has_active: true } で明示できます)。実際のマウス操作で data-has-active を付け外しする wasm-full 側の配線は本イシューの時点では未実装であり(#2130 は data-active/hidden の付け外しのみ実装)、現状はこの減光 CSS を静的な Demo 以外の経路で観測できません(後続イシューへの引き継ぎ)。ツールチップ DOM・hit-area は #2129、マウス追従の JS 配線は #2130 のスコープです。

イシュー #2133 で、凡例の item を <button type="button" aria-pressed>(trigger slot)へ変更し、期間切替・凡例トグルの SSR 構造を追加しました。各チャート Props の range: Option<&str>(または Option<String>)に値を渡すと、root へ data-range="<v>" を出力します(期間文字列→カテゴリ集合の写像は定義せず、アプリ側の責務です)。hidden_series/ hidden_categories に系列名/カテゴリ index を渡すと、該当する描画要素へ data-hidden を、LegendProps::hidden_series/hidden_categories に渡すと対応する凡例 trigger へ aria-pressed="false" を付与します。期間切替 UI は既存の toggle-group(fandhe_frontend_headless_ui::toggle_group)を再利用してください。例:

Rust
use fandhe_frontend_pre_styled_ui::charts::legend::{legend, LegendProps};
use fandhe_frontend_pre_styled_ui::line_chart::{line_chart, LineChartProps};

let mut chart_props = LineChartProps::new(&data, "monthly visits");
chart_props.range = Some("90d");
chart_props.hidden_series = &["signups"];
let chart = line_chart(&chart_props, vec![("id", "monthly-visits")]).unwrap();

let legend_props = LegendProps {
    hidden_series: vec!["signups".to_string()],
    controls: Some("monthly-visits".to_string()),
    ..Default::default()
};
let legend_node = legend(&data, &legend_props);

JS 無効時は凡例ボタンを押しても表示は変わりませんが、SSR 構造自体は単独で成立します(progressive enhancement)。実際の click 配線(aria-pressed の付け外し・対応する系列の表示トグル・スケール再計算)は wasm-full 側(#2134)が担います。

関連 API: fandhe-frontend-pre-styled-ui API

Demo

軸(Axes)・CartesianGrid・凡例(Legend)・ツールチップ(Tooltip)を合成した最小デモです。データ点はホバーするとブラウザネイティブの <title> によるツールチップと :hover 強調が表示されます(JS 不要)。系列を結ぶ折れ線・棒等の描画部品は別イシュー(#848〜#851)のスコープです。凡例の中央揃え・角丸四角マーカー・hideIcon 相当・複数行ツールチップ本文は shadcn/ui Charts(tooltip)との突合(イシュー #2086)で追加した静的バリアントです。凡例は button + aria-pressed の SSR 構造を持ち(イシュー #2133)、hidden_series/controls で非表示系列の減光・aria-controls opt-in を実演します(末尾の凡例デモ。click 配線・チャート側の期間切替 data-range/系列 data-hidden の実データ連動は #2134 のスコープ)。ツールチップ indicator 4 種(dot/line/dashed/none)と hover 強調(active 拡張・非 active 減光)の CSS はイシュー #2131 で追加しました。マウス追従によるツールチップ開閉・data-active の付け外しは #2130 で実装済みです。祖先 frame/root への data-has-active の付け外しのみ未実装のため(本 Demo は静的 HTML での再現)、後続イシューへ引き継ぎます。

50100150200JanFebMarAprJan · Visits: 120Feb · Visits: 180Mar · Visits: 150Apr · Visits: 220Jan · Signups: 20Feb · Signups: 35Mar · Signups: 28Apr · Signups: 40
  • Series
  • Series
Jan Visits: 120 Signups: 20 Total: 140

dot(既定)

Jan · Visits: 120

line

Jan · Visits: 120

dashed

Jan · Visits: 120

none

Jan · Visits: 120

hover emphasis(active 拡張・非 active 減光)

Jan · Visits: 120Feb · Visits: 180Mar · Visits: 150Apr · Visits: 220
  • Series (toggle)

Features

  • 外部依存ゼロの SVG ノード木生成ヘルパー群(軸・グリッド・凡例・ツールチップ)
  • charts::axis / charts::grid / charts::legend / charts::tooltip の 4 サブモジュールで構成する
  • マウス追従型のツールチップは持たず、ブラウザネイティブの <title> + aria-label によるホバー詳細表示のみ(JS 不要。hover 時は前景色ストロークで強調)。静的テキストは datum_label(1 行)と datum_label_lines(見出し省略可・整形済み値・footer の複数行)の 2 択。ツールチップ DOM は #2129、マウス追従の JS 配線は #2130 のスコープ
  • ツールチップの indicator(tooltip-indicator の見た目)は dot(既定)/line/dashed/none の 4 種から選べる(TooltipIndicator、イシュー #2131)。hover 強調(active な点の拡張・非 active 点の減光)の CSS も同イシューで追加した。減光・拡張は祖先の data-has-active → 継承する custom property → 各データ点の data-index/data-active という「祖先の状態 → 継承する custom property → 消費」方式で、wasm-full 側の data-has-active 付け外し配線は後続イシューへの引き継ぎ(現状は静的 Demo でのみ観測できる)
  • 系列の各データ点は既定で charts::series_color_var(index) の固定色循環(6 段階、shadcn/ui の 5 段階を包含)で着色する
  • 系列ごとに label / color / icon(shadcn/ui ChartConfig 相当)を Series::with_label / with_color / with_icon で個別に上書きできる。ChartData::series_color_var(index) が上書きの有無を一元的に解決し、凡例・line/area/bar/radar の全消費者が同じ値を共有する
  • 凡例(legend)は hide_marker(マーカー/icon を出さない)・align(水平揃え、既定は左寄せ)・marker(円形/角丸四角、既定は円形)を LegendProps で opt-in できる。凡例と本体チャートの上下配置はノード合成順序が決める(CSS 軸を持たない)
  • 凡例の各 item は button + aria-pressed の SSR 構造を持つ(イシュー #2133)。trigger には data-series(legend)/data-index(category_legend)を付与し、LegendProps::hidden_series/hidden_categories で aria-pressed="false" の減光を、controls で aria-controls を opt-in できる。各チャート root は range(data-range)・hidden_series/hidden_categories(描画要素への data-hidden)で期間切替・凡例トグルの SSR 構造を提供する(click 配線・実データ連動は #2134)

Anatomy

root
  title
  item
    trigger
      marker
      label

API Reference

Arguments

NameTypeDefaultDescription
axis::y_axis / x_axis_categoriesfn(...) -> Result<Node, ChartError>—Y 軸・カテゴリ X 軸を組み立てる。
grid::cartesian_gridfn(...) -> Result<Node, ChartError>—格子線(CartesianGrid)を組み立てる。
legend::legendfn(&ChartData, &LegendProps) -> Node—系列名の凡例を組み立てる(infallible)。label/icon 指定時はそれぞれ表示ラベル・マーカー代替アイコンを描画する。
tooltip::datumfn(...) -> Node—データ点(<circle>)+ <title> によるホバー詳細を組み立てる(infallible)。
tooltip::datum_label_linesfn(Option<&str>, &[(&str, &str)], Option<&str>) -> String—見出し(省略可)+ 複数系列行 + footer(省略可)を \n 区切りで連結した複数行のツールチップ本文を組み立てる(infallible。値の数値整形は呼び出し側の責務)。
tooltip::layer_with / layer_from_entries_withfn(..., &TooltipLayerProps) -> Node—イシュー #2131。layer / layer_from_entries の indicator 選択版。TooltipLayerProps { indicator } で tooltip-item/tooltip-indicator の見た目を切り替える。既定 TooltipIndicator::Dot は layer/layer_from_entries とバイト一致。
TooltipIndicatorenum { Dot, Line, Dashed, None }Dotイシュー #2131(shadcn/ui indicator prop 相当)。Dot/None は CSS class を持たない(既存出力とバイト一致)。None は tooltip-indicator の <span> 自体を省略する。
tooltip::frame_withfn(&FrameProps, Vec<Node>) -> Node—イシュー #2131。frame の data-has-active 選択版。FrameProps { has_active: true } で祖先属性を出力し、hover 強調 CSS(減光・拡張)の起点にする(静的 Demo・wasm-full フォローアップ配線の双方が使う想定)。
LegendProps { hide_marker, align, marker, .. }structfalse / LegendAlign::Start / LegendMarker::Circlehide_marker はマーカー/icon slot を省略する(shadcn/ui hideIcon 相当)。align は水平揃え(Start/Center/End)。marker はマーカー形状(Circle/Square)。
LegendProps { hidden_series, hidden_categories, controls }structvec![] / vec![] / Noneイシュー #2133。hidden_series は legend() の、hidden_categories は category_legend() の非表示対象(一致した trigger を aria-pressed="false" にする)。controls は Some(id) で全 trigger へ aria-controls を付与する。
Series::with_label / with_color / with_iconfn(self, ...) -> Series—系列設定(shadcn/ui ChartConfig 相当)のビルダー。label は凡例の表示ラベル、color は系列色の上書き、icon は凡例マーカーの代替ノード。
SeriesColor::token / chart_slot / palettefn(...) -> Result<SeriesColor, ThemeError>—系列色の上書き値を組み立てる。token は任意の色トークン名、chart_slot は既定 6 色循環スロット(1..=6)、palette は ColorPalette から。
ChartData::series_color_varfn(&self, usize) -> String—系列 index の色(var(--fandhe-color-...))を解決する。系列の SeriesColor 上書きがあればそれ、無ければ series_color_var(index) の 6 色循環。

Data Attributes

PartAttributeObserved Values
triggerdata-seriesSignups, Visits

Examples

軸 + グリッド + ツールチップ + 凡例の合成(系列設定つき)

本ページ配下の各チャート部品が共通で使う基盤 API の最小合成例です。系列に with_label/with_color/with_icon を設定し、凡例・ツールチップが ChartData::series_color_var 経由で同じ色を共有することを示します。系列を結ぶ折れ線・棒等は LineChart/BarChart 等の個別部品ページを参照してください。

1015202530JanFebMarJan · visits: 10Feb · visits: 30Mar · visits: 20
  • Series