コンテンツにスキップ

ツリー

hc-treeセマンティックな入れ子リストを WAI-ARIA のツリーへ 昇格させます: ファイルブラウザ、カテゴリ階層、管理画面のナビゲーション。 JavaScript なしではマークアップは素の読めるリストで、すべてのリンクが 機能し続けます。installTree() が roles、ロービングタブインデックス、 完全な APG キーボードモデルを足します。サーバからプッシュされる サブツリーは レイジーツリーレシピの 仕事です。

別名: ツリービュー、階層リスト。

  • src
    • app.js
  • README.md

枝であることは aria-expanded で宣言されます — 属性があれば その項目は展開できます(初期値はサーバが所有し、ビヘイビアが トグルします)。階層は入れ子から導かれ、aria-level の帳簿は ありません。

自動初期化の ./behaviors バンドルに含まれます。role="tree" / treeitem / group" とロービング タブインデックス(ツリーごとに 1 つのタブストップ)を適用し、htmx で サブツリーがスワップインされたときに両方を再適用します。項目の展開は バブリングする hc:treeexpand(detail: { item })を発火します — レイジーツリーレシピが その上に組むフックです。ネットワークには決して触れません。他の ビヘイビアと同じく冪等で、アンインストーラを返します。後から htmx スワップで追加されたツリーは自動で拾われ(MutationObserver)、 ツリーごとのオブザーバーがサブツリーのスワップインのたびにロールを 再適用します。

キー動作
↓ / ↑次 / 前の見えている項目(畳まれたサブツリーはスキップ)。
閉じた枝を開く。開いた枝の上では最初の子へ移動。
開いた枝を閉じる。それ以外は親へ移動。
Home / End最初 / 最後の見えている項目。
Enter / Spaceアクティベート: ラベルにリンクがあればそれを辿り、なければ枝をトグル。
a–zタイプアヘッド — その文字で始まる次の見えている項目へジャンプ。

← と → は RTL でミラーされます。

行のクリックはその項目にフォーカスを移し、ブランチであればトグルも 行います — ただしクリックが行内のインタラクティブなコントロール (a[href]buttoninputselecttextarea)に当たった場合は 除きます。それらのアクティベーションはコントロール自身のものです: 行内のアクションボタンは、操作対象のフォルダを閉じてしまうことなく 発火します。シェブロンのトグルは常にトグルします。

状態セレクタ効果
展開[aria-expanded="true"]グループが見える。シェブロンが回転。
折りたたみ[aria-expanded="false"]グループが隠れる。
現在[aria-current]アクセントの行(data-color に追従)— サーバの状態、「現在地」マーカー。
読み込み中.hc-tree__group[aria-busy="true"]遅延サブツリーの取得中、グループ内にスピナー(ビヘイビアが設定)。

選択モデル(aria-selected、複数選択、チェックボックス)は当面の 意図的な非目標です — アクティベーションは本物のリンクを辿り、現在の ノードはサーバレンダリングされた状態です。

data-size="sm" は、密なパネル向けにインデントとフォントを詰めます。

  • src
    • app.js
  • README.md
  • 入れ子の <ul>/<li> + role="tree" + aria-expanded + ロービング タブインデックスが APG のパターンです。階層は構造から読み上げられ ます。
  • シェブロンのトグルは aria-hidden のポインタ向け操作部です — キーボードモデルがその全機能を複製します。
  • ツリーには aria-label(または aria-labelledby)を与えてください。
  • フォーカスは行の上に描かれます(:focus-visible)。reduced motion は シェブロンのトランジションとビジースピナーを無効化します。

component トークン(component.tokens.json)— 全体を通じて semantic 参照なので、テーマ、アクセント、ダークモードが自動で適用されます:

トークンパス用途
tree.indent入れ子 1 段あたりのインデント。
tree.row-padding-y / row-padding-x行のパディング。
tree.row-radius行の角丸。
tree.fgツリーのテキスト色。
tree.hover-bgホバー行の背景。
tree.current-bg / current-fgaria-current 行のアクセント(data-color に追従)。
tree.toggle-sizeシェブロントグルのボックス。
tree.guide入れ子のガイド線(ビジースピナーのトラックでもあります)。
生成される CSS 変数を表示
--hc-tree-indent
--hc-tree-row-padding-y | -row-padding-x | -row-radius
--hc-tree-fg | -hover-bg
--hc-tree-current-bg | -current-fg
--hc-tree-toggle-size | -guide

レシピでの利用: カスケードセレクト · レイジーツリー