UI v2: sidebar, file icons, row menus, search, breadcrumbs, avatar menu, i18n, login flow #49

Merged
Cordy merged 1 commit from feat/ui-v2 into main 2026-07-29 00:46:13 +00:00
Owner

Client half of the UI v2 batch (#20 #21 #22 #23 #24 #25 client sides of #26 #27) — clean rewrite of web/static/index.html.

New

  • Sidebar: Personal / Spaces / Shares / Deleted files as first-class views (feature-detected: Spaces only in overlay mode, Shares/Trash only when enabled)
  • File-type icons: inline SVG per extension group (image/video/audio/archive/code/doc/sheet/text), folder in accent color
  • Per-row menu: Download, Share, Copy link (quick 7-day share + clipboard), Rename, Move (via /api/v1/rename), Details, Delete
  • Header search: instant client filter while typing; Enter runs GET /api/v1/search and shows a results view with parent paths; Esc returns
  • Chevron () breadcrumbs; /home→Personal, /spaces→Spaces labels
  • Initials-avatar menu: Appearance, App passwords, License (admins), Help, Sign out
  • i18n EN/DE/FR/IT via t(); language picker in Appearance; defaults to browser language
  • Sign out: POST /auth/logout, follows {"redirect"} (Keycloak end-session) or falls back to /login; bogus-Basic hack removed
  • api() redirects to /login?next= on 401

Preserved — TUS resumable uploads incl. v0.3.4 hardening (activeUploads guard, tri-state tusOffset), shares dialog, app passwords, trash restore/purge, license panel, appearance prefs (cairn-prefs), dark theme/accents/density, clipboard fallback + bubble.

Syntax verified on the runner via one-shot uiv2-verify.yml (node --check + structural assertions) before opening this PR.

Client half of the UI v2 batch (#20 #21 #22 #23 #24 #25 client sides of #26 #27) — clean rewrite of `web/static/index.html`. **New** - Sidebar: Personal / Spaces / Shares / Deleted files as first-class views (feature-detected: Spaces only in overlay mode, Shares/Trash only when enabled) - File-type icons: inline SVG per extension group (image/video/audio/archive/code/doc/sheet/text), folder in accent color - Per-row `⋯` menu: Download, Share, Copy link (quick 7-day share + clipboard), Rename, Move (via `/api/v1/rename`), Details, Delete - Header search: instant client filter while typing; Enter runs `GET /api/v1/search` and shows a results view with parent paths; Esc returns - Chevron (`›`) breadcrumbs; `/home`→Personal, `/spaces`→Spaces labels - Initials-avatar menu: Appearance, App passwords, License (admins), Help, Sign out - i18n EN/DE/FR/IT via `t()`; language picker in Appearance; defaults to browser language - Sign out: `POST /auth/logout`, follows `{"redirect"}` (Keycloak end-session) or falls back to `/login`; bogus-Basic hack removed - `api()` redirects to `/login?next=` on 401 **Preserved** — TUS resumable uploads incl. v0.3.4 hardening (activeUploads guard, tri-state tusOffset), shares dialog, app passwords, trash restore/purge, license panel, appearance prefs (`cairn-prefs`), dark theme/accents/density, clipboard fallback + bubble. Syntax verified on the runner via one-shot `uiv2-verify.yml` (node --check + structural assertions) before opening this PR.
Clean rewrite of the web UI (#20–#27 client halves):
- Sidebar: Personal / Spaces / Shares / Deleted files as first-class views
- File-type icons (inline SVG per extension group)
- Per-row … menu: Download, Share, Copy link, Rename, Move, Delete, Details
- Header search: instant filter; Enter = server search via /api/v1/search
- Chevron breadcrumbs; initials-avatar menu (Appearance, App passwords,
  License, Help, Sign out)
- i18n EN/DE/FR/IT via t() layer, language picker in Appearance
- Sign out now POSTs /auth/logout and follows {"redirect"} (OIDC RP-initiated
  logout) or falls back to /login; bogus-Basic hack removed
- api() redirects to /login on 401
Preserves TUS resumable uploads (v0.3.4 hardening), trash, shares,
app passwords, license panel, appearance prefs.
Cordy merged commit d2a647c569 into main 2026-07-29 00:46:13 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#49
No description provided.