Skip to content
fandhe-frontendcore v0.4.3
GitHub

Navigation Menu

fandhe-frontend-pre-styled-ui の navigation_menu mod が提供するスタイル済み Navigation Menu 部品です。

トリガー起点で開閉するナビゲーションパネルです。Root / List / Item / Trigger / ItemIndicator / Content / Link / Indicator の 8 anatomy パーツを持ち(イシュー #1654 で ItemIndicator を新設し 6 → 7 パーツへ、イシュー #2187 でルートレベルの Indicator を新設し 7 → 8 パーツへ拡張、イシュー #2035/#2187 で Themes 層の CSS 付与を完了)、高々 1 個の Trigger だけが開く状態機械(NavigationMenu)を提供します。ItemIndicator はトリガー横の開閉シェブロン(装飾専用、aria-hidden="true" 固定)で、開いているトリガーでは 180° 回転します。ルートレベルの Indicator は開いている Trigger の下でスライドするポインタで、--fandhe-navigation-menu-indicator-x/-width(horizontal)・-y/-height(vertical)の CSS 変数契約で座標を表現します(既定 0px フォールバックのため実座標が書き込まれない間は不可視)。実座標の書き込みは fandhe-frontend-wasm-full の責務(イシュー #2208/#2209 系の後続、未配線)です。素の nav/ul/li/button/div/a の暗黙 ARIA role に依拠し、role は一切付与しません(role="menu"/role="menuitem" を付与すると文書ナビを操作メニューと誤伝達するため)。アクティブリンクは aria-current="page" で表します。状態機械を持たない静的なリンク集が必要な場合は Nav List を使ってください。viewport 寸法測定・data-motion(アニメーション方向の露出)は装飾・アニメーション・レイアウト計測の関心のため実装していません。

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

Demo

headless-ui の Navigation Menu(役割は素の nav/ul/li/button/div/a の暗黙 ARIA role に依拠し、role は一切付与しません)に pre-styled-ui の recipe CSS を適用した静的掲示です。Products トリガーを開いた状態(data-state="open")で item-indicator(開閉シェブロン、イシュー #2035)を回転済みの視覚で掲示し、Content 内は crate::text を併用したタイトル + 説明文の 2 列グリッドリンク合成を掲示します。Resources はアイコン + item-indicator を持つトリガーを閉じた状態(回転しない基準状態)で掲示し、About は Trigger/Content を持たない単独リンクとして aria-current="page" によるアクティブリンク表現を掲示します。ルートレベルの indicator(Trigger 直下でスライドするポインタ、イシュー #2187)を Products の下に静的掲示します。実座標の追従は wasm-full の責務(#2208/#2209 系、本 Demo は未配線)のため、CSS 変数を style で直接指定して可視化しています。viewport 測定・data-motion は headless 層に存在しないため掲示していません(詳細は headless-ui の navigation_menu モジュール doc、および pre-styled-ui の navigation_menu モジュール doc「shadcn/ui 突合(イシュー #2035/#2187)」節を参照)。

Features

  • トリガー起点で開閉するナビゲーションパネル。Root / List / Item / Trigger / ItemIndicator / Content / Link / Indicator の 8 anatomy パーツを持つ(イシュー #1654 で ItemIndicator を新設し 6 → 7 パーツへ、イシュー #2187 でルートレベルの Indicator を新設し 7 → 8 パーツへ拡張)。
  • 高々 1 個の Trigger だけが開く状態機械(SingleSelect を埋め込んだ NavigationMenu)。dispatch は "select"/"toggle"/"deselect"。
  • role は一切付与しない。root は素の nav の暗黙 ARIA role(navigation)に依拠し、role="menu"/role="menuitem" は付与しない(文書ナビを操作メニューと誤伝達しないための設計、nav_list と同じ判断)。
  • アクティブリンクは aria-current="page" + data-current で表す(role は付与しない)。
  • data-motion(アニメーション方向の露出)・viewport 寸法測定は実装しない(intentional-non-adoption.md §3.25 規則 2 により headless 層へ持ち込まない設計判断)。
  • indicator(イシュー #2187)は開いている Trigger の下でスライドするポインタ。座標(x/width/y/height)は --fandhe-navigation-menu-indicator-* の CSS 変数契約で表現し、既定 0px フォールバックのため実座標が書き込まれない間は不可視。実座標の書き込みは wasm-full の責務(#2208/#2209 系の後続)。

Anatomy

root
  list
    item
      trigger
        item-indicator
      content
        link
  indicator

API Reference

Arguments

NameTypeDefaultDescription
label&str—root に付与する aria-label(必須引数)。
stateOpenState—item/trigger/content/indicator の開閉状態(Open/Closed)。
currentboolfalselink に付与。true のとき aria-current="page" + data-current を出力する。
valueOption<&str>Noneindicator に付与。Some のときのみ data-value として開いている項目値を出力する。

Data Attributes

PartAttributeObserved Values
contentdata-orientationhorizontal
contentdata-stateclosed, open
contentdata-valueproducts, resources
indicatordata-orientationhorizontal
indicatordata-stateopen
indicatordata-valueproducts
itemdata-orientationhorizontal
itemdata-stateclosed, open
itemdata-valueabout, products, resources
item-indicatordata-orientationhorizontal
item-indicatordata-stateclosed, open
item-indicatordata-valueproducts, resources
linkdata-current(値なし)
listdata-orientationhorizontal
rootdata-orientationhorizontal
triggerdata-stateclosed, open
triggerdata-valueproducts, resources

CSS Variables

VariableDefault
--fandhe-navigation-menu-indicator-height0px
--fandhe-navigation-menu-indicator-width0px
--fandhe-navigation-menu-indicator-x0px
--fandhe-navigation-menu-indicator-y0px

Examples

shadcn/ui の "Components" パネル相当のタイトル + 説明文リンク合成パターンです。SlotRecipe は子孫セレクタを持たない(イシュー #708 で不採用確定)ため、新しい anatomy パートは追加せず、link の子として crate::text(太字タイトル + 淡色サイズの説明文)を並べるだけで再現しています(link/content 自身の CSS は変更していません。2 列グリッド配置も content へ渡す style 属性のみで実現)。

Analytics

利用状況・パフォーマンスを可視化するダッシュボード。

Accessibility

WAI-ARIA

AttributeDescription
aria-labelroot に付与。root の role は素の nav の暗黙 role(navigation)に依拠し明示付与しない。
aria-expanded / aria-controlstrigger に付与。開閉状態(true/false)と content との関連付け(controls が Some のときのみ)を表す。role は付与しない。
aria-labelledbycontent に付与(labelled_by が Some のときのみ)。role は付与しない。
aria-current="page"link に付与(current が true のときのみ)。role は付与しない。
aria-hidden="true"item-indicator/indicator に固定付与。トリガーの aria-expanded から開閉状態が既に伝わるための装飾専用要素(item-indicator はイシュー #2035、indicator はイシュー #2187)。