Tree

作業面の中で、階層を開閉して項目を選択します。

  • 利用案内
    • はじめに
    • アカウント
  • 運用規約
空・重複値のある資料
項目はありません。
  • 案内
    • はじめに
  • 規約
    • 運用方針
リンクの項目・右から左に読む場合
  • الدليل
    • البداية
  • القواعد

使いどころ

  • 作業面の中で、資料やフォルダの階層を開閉しながら一件を選ぶ時に使います。
  • アプリ全体の移動はAppShellのヘッダー、名前で探す移動はCommandMenu、表の行に階層がある時はTreegridを使います。

使い方

labelとitemsを渡し、TreeControllerをtree、TreePresentationControllerをtree-presentationとして登録します。子を持つ項目には開閉のボタンが付きます。初めに選ぶ項目はvalue、初めに開く親はexpandedで渡します。

項目を押すか、注目している項目でEnterを押すと、その項目を選び、tree:changeを発火してdetail.valueを渡します。選んだ項目に応じて何を表示するかは利用側が担います。hrefを持つ項目は名前がリンクになり、名前を押すか、注目してEnterを押すと、選択と同時にリンク先へ移ります(リンクのclickが起きるので、利用側はリンクの操作として受け取れます)。

行はHighriseの左の列と同じく、13pxの濃い灰色(#51504c)の名前で、行の間隔は28pxです。行の面は持たず、ホバーすると名前を黒くして下線を引きます。選んだ項目は左の列の今いる行と同じ角の無い暖かい灰色の面(#e6e3de)、キーボードで注目している項目はメニューの候補と同じ角の無い淡い青(#ddeefe)で塗り、どちらも名前を黒い太字にします。hrefを持つ項目の名前は青緑のリンクの文字と下線です。階層はガイド線を引かず、字下げだけで示します。

無効な項目は選べず、開閉のボタンも押せません。空白だけのvalueと、全階層を通じて二つ目以降に現れたvalueの項目は、子ごと出しません。残る項目がない時は「項目はありません。」の状態文を出します。

JavaScriptなしでは、開閉のボタンを隠してすべての階層を開いた状態で表示し、hrefの項目はリンクとして働きます。

キーボード

Treeのキーボード操作
キー動作
↓ / ↑次・前の見えている項目に注目します。無効な項目は飛ばします。
Home / End先頭・末尾の見えている項目に注目します。
→閉じた親を開きます。開いた親では最初の子に注目します。右から左に書く時は←がこの役割です。
←開いた親を閉じます。それ以外では親の項目に注目します。右から左に書く時は→がこの役割です。
Enter注目している項目を選びます。hrefを持つ項目はリンク先へ移ります。
文字名前がその文字で始まる、次の項目に注目します。続けて入力すると語で探します。

アクセシビリティ

  • 一覧はrole="tree"でlabelを読み上げ名に持ち、Tabでフォーカスできます。項目はtreeitem、子の並びはgroupです。
  • Tabで止まるのは一覧だけです。中のリンクと開閉のボタンは、controllerがtabindex="-1"にしてTabの巡回から外します。JavaScriptなしでは、リンクはTabで止まります。
  • フォーカスは一覧に置いたまま、注目している項目をaria-activedescendantで伝えます。選んだ項目はaria-selected="true"、親の開閉はaria-expandedで伝えます。
  • 開閉のボタンは「(名前)を開閉」という読み上げ名を持ちます。無効な項目はaria-disabled="true"です。
  • 項目がない時は、一覧の代わりにrole="status"の状態文を出します。

イベント

Treeが発火するイベント
イベント内容
tree:beforechange項目を選ぶ直前に発火します。detailはvalue・previousValue・reason(pointerまたはkeyboard)です。取り消すと選択を変えません。選び済みの項目を選び直した時は発火しません。
tree:change項目を選んだ後に発火します。detailはtree:beforechangeと同じです。
tree:beforetoggle親を開閉する直前に発火します。detailはvalue・expanded(開く時はtrue)・previousExpanded・reasonです。取り消すと開閉しません。
tree:toggle親を開閉した後に発火します。detailはtree:beforetoggleと同じです。

API

Tree

中央の作業面で階層を選ぶ。全体移動はCommandMenuが担う。

Treeのprops
名前型既定値説明
idstringルートのid。省略すると自動で作る。各項目のidの元になる。
label必須stringtreeの読み上げ名。空白だけの時は「項目一覧」にする。
items必須readonly TreeItem[]最上位の項目。重複や空の値を除いて一件も残らない時は、「項目はありません。」の状態文を出す。
valuestring""初めに選んでおく項目のvalue。見つからない値は選択なしとして扱う。
expandedreadonly string[][]初めに開いておく親の項目のvalue。子を持たない値は無視する。

登録するcontroller:tree(TreeController)、tree-presentation(TreePresentationController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/tree.css

TreeItem

TreeItem
名前型既定値説明
value必須string項目を識別する値。tree:changeのdetail.valueで渡す。空白だけの値と、全階層を通じて二つ目以降に現れた値の項目は、子ごと出さない。
label必須string項目の名前。空白だけの時はvalueを名前にする。
hrefstring名前をリンクにする時のURL。名前を押すか、フォーカスしてEnterを押すと、選ぶと同時にリンク先へ移る。無効な項目ではリンクにしない。
disabledboolean選べない項目。開閉のボタンも押せず、矢印キーの移動の対象から外す。
childrenreadonly TreeItem[]子の項目。一件以上あると、開閉のボタンを付けた親になる。

コード

HTML
Hono JSX