Tabs
fandhe-frontend-wireframe-ui のタブ列風プレースホルダーです。タブ項目の並び + 選択中インジケータの配置イメージだけを示す非インタラクティブな部品です。API は tabs(items, active, orientation, size) の 4 引数(詳細は下の引数表を参照)で、props 構造体は導入していません。
視覚的な参照元は blocks.pm の Tabs 部品ですが、ライセンス上の理由によりスクリーンショットは掲載していません(詳細は docs/design/wireframe-ui-architecture.md §2)。参照したい場合は外部リンク先を直接確認してください。
「Tabs」という名前ですが、role="tablist"/role="tab"・aria-selected・実際のパネル切り替えのいずれも実装しない表示専用プレースホルダーです。実際に操作可能なタブが必要な場合は Tabs(Themes) / Tabs(Primitives) を検討してください。
Demo
既定(水平・3 項目・先頭が選択中)
概要詳細設定
5 項目・中央が選択中
概要詳細設定履歴共有
選択なし
概要詳細設定
垂直
概要詳細設定
Sm
概要詳細設定
Lg
概要詳細設定
引数表
| 引数 | 型 | 既定値 | 説明 |
|---|---|---|---|
| items | &[&str] | - | タブのラベル列。項目数の上限はなく、空スライスでも panic しない。 |
| active | Option<usize> | None | 選択中タブの添字。None または範囲外の値のときはどの項目にも選択インジケータを付けない。 |
| orientation | Orientation | Orientation::Horizontal | 水平/垂直。垂直時は選択インジケータが側線として表示される。 |
| size | Size | Size::Md | サイズ段階(xs〜xl)。フォントサイズに反映される。 |
原案差分メモ
divルート・非対話制約:docs/design/wireframe-ui-architecture.md§7 に従い、ルートはdivとしrole/aria-*/tabindex/on*は一切出力しません。- タブラベルは固定スロットではなくスライスで受ける: blocks.pm の Tabs 部品が持つ Figma プロパティ構成(
Size/Active tab/Tab1〜Tab5の個別 bool+text スロット)は §2 の保留(イシュー #2602)に従い書き写さず、§6 の汎用変換規約から独立に設計しました。items: &[&str]1 引数へ畳み、項目数の上限は設けていません。 - 選択状態は
active: Option<usize>1 引数で表す: 専用のSelected/Checked型は新設せず、既存の共通型Activeは項目ごとのdata-active出力にのみ用います(radio/checkbox/switchと同じ再利用判断)。ただし引数自体は項目数分のActiveスライスではなく「どの添字が選択中か」を表すOption<usize>とし、「選択中は高々 1 件」という不変条件を型で保証しています。Noneまたは範囲外の値は、どの項目にも選択インジケータを付けない決定的な挙動へ倒し、unwrap/expect/panicは使いません。 Orientationを必須引数に取る:props.rsの doc が消費者として「stack / divider / tabs / slider」を明記しているため、水平/垂直を切り替え可能にしています。Disabled/Bold/Primary・アイコンスロット・パネル領域は持たない: タブ項目の無効化・強調・アイコン付与や、選択中パネルの内容表示は本部品の責務としていません。パネルが必要な場合はFrame等の他部品との合成で表現してください。- 黒塗り二値ではなくグレースケール: 選択中項目は
--fw-wire-ink・非選択項目は--fw-wire-ink-muted・選択中の背景は--fw-wire-fill-subtleを使い、読みやすさを優先します(他の wireframe-ui 部品と同じ配色方針)。 - スクリーンショット非掲載:
docs/design/reference-screenshots/への blocks.pm 画像取り込みは #2602 で fail-closed に非掲載と確定しています。本ページも画像は置かず、上記の外部リンクのみで代替します。