Collapsible File Tree
A recursive, data-driven tree of folders and files with expand/collapse toggles.
3 個のフレームワーク初級
A file tree that flags each change with an M/A/D/U badge and a matching tint.
<!-- Status is colour AND a letter (M/A/D/U): a red tint alone is invisible to a
colour-blind reader, so the letter carries the same meaning, with an
sr-only long form for assistive tech. -->
<nav class="w-full max-w-sm rounded-xl border border-gray-200 bg-white p-2 text-sm text-gray-700 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-300">
<ul role="tree" aria-label="Changed files" class="space-y-0.5">
<li role="treeitem" aria-expanded="true">
<button type="button" class="flex w-full min-w-0 items-center gap-1.5 rounded-md px-2 py-1.5 text-left hover:bg-gray-100 dark:hover:bg-gray-900">
<svg viewBox="0 0 16 16" fill="currentColor" class="h-3.5 w-3.5 shrink-0 rotate-90 text-gray-400" aria-hidden="true"><path d="M6 4l4 4-4 4z"/></svg>
<svg viewBox="0 0 16 16" fill="currentColor" class="h-4 w-4 shrink-0 text-blue-500" aria-hidden="true"><path d="M1.5 4A1.5 1.5 0 0 1 3 2.5h3L7.5 4H13A1.5 1.5 0 0 1 14.5 5.5v6A1.5 1.5 0 0 1 13 13H3a1.5 1.5 0 0 1-1.5-1.5z"/></svg>
<span class="truncate font-medium text-gray-900 dark:text-gray-100">src</span>
</button>
<ul role="group" class="ml-3 space-y-0.5 border-l border-gray-200 pl-2 sm:ml-4 dark:border-gray-800">
<li role="treeitem"><span class="flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-900"><span class="w-3.5 shrink-0"></span><svg viewBox="0 0 16 16" fill="currentColor" class="h-4 w-4 shrink-0 text-gray-400" aria-hidden="true"><path d="M4 1.5h4.6L13 5.9V14a.5.5 0 0 1-.5.5h-8A.5.5 0 0 1 4 14V2a.5.5 0 0 1 .5-.5z"/></svg><span class="truncate text-amber-600 dark:text-amber-400">app.tsx</span><span class="ml-auto shrink-0 pl-2 text-xs font-bold text-amber-600 dark:text-amber-400"><span class="sr-only">modified</span><span aria-hidden="true">M</span></span></span></li>
<li role="treeitem"><span class="flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1.5 hover:bg-gray-100 dark:hover:bg-gray-900"><span class="w-3.5 shrink-0"></span><svg viewBox="0 0 16 16" fill="currentColor" class="h-4 w-4 shrink-0 text-gray-400" aria-hidden="true"><path d="M4 1.5h4.6L13 5.9V14a.5.5 0 0 1-.5.5h-8A.5.5 0 0 1 4 14V2a.5.5 0 0 1 .5-.5z"/></svg><span class="truncate text-emerald-600 dark:text-emerald-400">router.tsx</span><span class="ml-auto shrink-0 pl-2 text-xs font-bold text-emerald-600 dark:text-emerald-400"><span class="sr-only">added</span><span aria-hidden="true">A</span></span></span></li>
</ul>
</li>
</ul>
</nav>| Prop | 型 | デフォルト | 説明 |
|---|---|---|---|
nodes必須 | TreeNode[] | - | Nodes |
label | string | 'Changed files' | 読み込み中に読み上げられるアクセシブルなラベル。 |
Give a node a `status` of `modified`, `added`, `deleted` or `untracked`. Each is shown as both a coloured letter and an `sr-only` long form, so the state never rides on colour alone - the letter and the announced label carry it for colour-blind and screen-reader users.