Treegrid

階層のある行を、列をそろえて表示します。

公開資料と進行状況
資料担当状態
利用案内編集チーム確認中
はじめに田中公開中
管理者向け佐藤下書き
アクセス権限の設定と確認佐藤下書き
利用規約法務公開中
複数選択・利用できないリンク・長い階層
素材の確認
名前形式
素材フォルダ
確認待ちの原稿文書
閲覧不可の資料文書
空・読み込み中・読み込み失敗
空の資料
資料状態
表示する項目はありません。
読み込み中の資料
資料状態
読み込んでいます…
読み込みに失敗した資料
資料状態
一覧を読み込めませんでした。

使いどころ

  • フォルダと資料、章と節のように親子の階層を持つ行を、担当・状態などの列と並べて見比べる時に使います。
  • 列を持たない階層は Tree、階層のない行の一覧は Table を使います。

使い方

columns の先頭は行の題名(label)の列で、2列目以降に各行の cells を順に入れます。children を渡した行には開閉ボタンを付け、子の行を一つ深い階層として12pxずつ字下げして続けます。見出しの灰色の帯・行・罫線は Table と同じ見た目で、行の題名は通常の太さです。value は全ての階層で一意にします。空の value と、重複した value の行は、その子孫ごと描きません。

expanded に最初に開いておく行、selection に選択の方式、selected に最初に選んでおく行を、それぞれ value で渡します。開閉と選択はその後controllerが持つので、保存したい時はイベントで受け取ります。開閉ボタンを押すと行を開閉し、selection が none 以外の時はセルを押すと行を選びます。選んだ行は Table と同じ黄色で塗ります。

href は子を持たない行だけでリンクになります。disabled の行はリンクにせず、題名の文字だけを灰色にし、押してもShift + Spaceでも選べません。キーでの移動には残ります。

state は ready・loading・empty・error です。items が0件なら ready でも empty として扱います。ready 以外では見出しの行だけを残して状態の文(または stateContent)を出し、controllerを付けません。

TreegridController を treegrid として登録します。JavaScriptなしでは、全ての行を開いた状態で表示し、動かない開閉ボタンは隠します。選択もできません。行のデータ・開閉と選択の保存は利用側が持ちます。

キーボード

Treegridのキーボード操作
キー動作
↑ / ↓表示中の上下の行の、同じ列のセルへ移動します。
← / →前後の列のセルへ移動します。右から左に読む時は向きが入れ替わります。
Home / End行の最初・最後のセルへ移動します。
Ctrl + Home / Ctrl + End表の最初・最後のセルへ移動します。
PageUp / PageDownpageSize の行数だけ上下へ移動します。
Enter子を持つ行の先頭のセルで、行を開閉します。
Shift + Spaceselection が single・multiple の時に、行を選びます。multiple では選択を切り替えます。disabled の行は選べません。

アクセシビリティ

  • ready の時は表に role="treegrid" と caption と同じ aria-label を付けます。行には aria-level・aria-posinset・aria-setsize、子を持つ行には aria-expanded を付けます。
  • selection="multiple" では表に aria-multiselectable="true" を付け、各行に aria-selected を付けます。single では選んだ行だけに aria-selected="true" を付けます。
  • セルのTab停止点は表の中で一つだけで、最後にいたセルに戻ります。行の題名のリンクは別にTabで止まります。開閉ボタンはTabで止まらず、読み上げ名は「〇〇を開閉」です。
  • セルの中のリンクやボタンを押しても行は選ばれません。
  • 状態の文は role="status" で、loading では表に aria-busy="true" を付けます。

イベント

Treegridが発火するイベント
イベント内容
treegrid:beforetoggle行を開閉する前に発火します。取り消せます。detailは { value, expanded, reason } で、expanded は開くなら true、reason は pointer・keyboard です。
treegrid:toggle行を開閉した後に発火します。detailは treegrid:beforetoggle と同じです。
treegrid:beforechange選択が変わる前に発火します。取り消せます。detailは { selected, previousSelected, reason } で、selected は選ばれる行の value の配列です。disabled の行を押した時は発火しません。
treegrid:change選択が変わった後に発火します。detailは treegrid:beforechange と同じです。

API

Treegrid

Tableの見た目・階層表示を共有し、開閉と二次元移動はTreegridController(上流を継承)に委ねる。

Treegridのprops
名前型既定値説明
caption必須string表の名前。captionとaria-labelに入れる。空白だけの時は「階層表」にする。
columns必須readonly TreegridColumn[]列。先頭の列は行の題名(label)の列になる。空の時は「項目」の一列にする。
items必須readonly TreegridItem[]最上位の行。0件の時はstateがreadyでもemptyとして扱う。
expandedreadonly string[][]最初に開いておく行のvalue。開閉はその後controllerが持ち、保存したい時はtreegrid:toggleで受け取る。 JavaScriptがない時は開閉できないので、全ての行を開いて見せ、開閉ボタンを隠す。
selection"none" | "single" | "multiple""none"行の選択。singleは一行、multipleは複数行を選べ、noneは選択を持たない。
selectedreadonly string[][]最初に選んでおく行のvalue。singleでは表の並びで最初の一つだけを使う。
pageSizenumber10PageUp・PageDownで移動する行数。1以上の整数でない時は10にする。
density"compact" | "comfortable""compact"本文の行の密度。Tableのdensityと同じ。
state"ready" | "loading" | "empty" | "error""ready"表の状態。ready以外では見出しの行だけを残し、状態の文を出す。キー操作・開閉・選択も付けない。
stateContentChildready以外の時に、既定の状態の文の代わりに出す内容。

登録するcontroller:treegrid(TreegridController)

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

TreegridColumn

TreegridColumn
名前型既定値説明
heading必須string列の見出しの文字。
cell"text" | "short" | "numeric"列の文字の扱い。Tableのdata-cellと同じで、textは長文を折り返し、shortは折り返さず、numericは末尾側へそろえて等幅の数字にする。

TreegridItem

TreegridItem
名前型既定値説明
value必須string行を識別する値。全ての階層で一意にする。空の値と重複した値の行は、その子孫ごと描かない。
label必須string先頭の列に出す行の題名。空白だけの時はvalueを出す。
hrefstring葉の行だけに設定する移動先。
disabledboolean行を利用できない状態。リンクにせず、押してもShift+Spaceでも選べない。行とセルのキーボード移動は維持する。
cellsreadonly Child[]2列目以降のセル。columnsの2番目からの順に対応させ、足りないセルには「—」を出す。
childrenreadonly TreegridItem[]子の行。渡すと行に開閉ボタンを付け、一つ深い階層として続けて描く。

コード

HTML
Hono JSX