File Manager
A file browser with breadcrumb navigation and a file listing table.
Preview
html
<div class="vstack gap-4">
<ng-oat-breadcrumb [items]="[{ label: 'Home', url: '#' }, { label: 'Documents', url: '#' }, { label: 'Projects' }]"> </ng-oat-breadcrumb>
<div class="hstack justify-between">
<input type="search" placeholder="Search filesβ¦" class="max-w-sm" />
<button class="btn">Upload File</button>
</div>
<div class="table">
<table>
<thead>
<tr><th>Name</th><th>Type</th><th>Size</th><th>Modified</th></tr>
</thead>
<tbody>
<tr>
<td>π src</td>
<td><ng-oat-badge variant="secondary">Folder</ng-oat-badge></td>
<td>β</td>
<td class="text-light">Jan 15</td>
</tr>
<tr>
<td>π README.md</td>
<td><ng-oat-badge variant="outline">Markdown</ng-oat-badge></td>
<td>4.2 KB</td>
<td class="text-light">Jan 14</td>
</tr>
</tbody>
</table>
</div>
</div>SFC Source
typescript
import { Component } from '@angular/core';
import { NgOatBadge } from '@letsprogram/ng-oat';
@Component({
selector: 'app-file-manager',
imports: [NgOatBadge],
template: `
<div class="vstack gap-4">
<nav class="breadcrumb">
<a href="#">Home</a>
<a href="#">Documents</a>
<span>Projects</span>
</nav>
<div class="hstack justify-between">
<input type="search" placeholder="Search filesβ¦" class="max-w-sm" />
<button class="btn">Upload File</button>
</div>
<div class="table">
<table>
<thead>
<tr><th>Name</th><th>Type</th><th>Size</th><th>Modified</th></tr>
</thead>
<tbody>
@for (file of files; track file.name) {
<tr>
<td>{{ file.icon }} {{ file.name }}</td>
<td><ng-oat-badge [variant]="file.badgeVariant">{{ file.type }}</ng-oat-badge></td>
<td>{{ file.size }}</td>
<td class="text-light">{{ file.modified }}</td>
</tr>
}
</tbody>
</table>
</div>
</div>
`,
})
export class FileManagerComponent {
files = [
{ icon: 'π', name: 'src', type: 'Folder', badgeVariant: 'secondary' as const, size: 'β', modified: 'Jan 15' },
{ icon: 'π', name: 'assets', type: 'Folder', badgeVariant: 'secondary' as const, size: 'β', modified: 'Jan 12' },
{ icon: 'π', name: 'README.md', type: 'Markdown', badgeVariant: 'outline' as const, size: '4.2 KB', modified: 'Jan 14' },
{ icon: 'π', name: 'package.json', type: 'JSON', badgeVariant: 'success' as const, size: '1.8 KB', modified: 'Jan 15' },
];
}