From af133c9e9cfd8bb4d050be7ac4b43cd7046ffde6 Mon Sep 17 00:00:00 2001 From: Dominik Halfkann Date: Thu, 9 Apr 2026 20:43:43 +0200 Subject: [PATCH 1/9] docs: add design spec for collapsible side panels Co-Authored-By: Claude Opus 4.6 (1M context) --- .../2026-04-09-collapsible-panels-design.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 docs/superpowers/specs/2026-04-09-collapsible-panels-design.md diff --git a/docs/superpowers/specs/2026-04-09-collapsible-panels-design.md b/docs/superpowers/specs/2026-04-09-collapsible-panels-design.md new file mode 100644 index 0000000..a04f214 --- /dev/null +++ b/docs/superpowers/specs/2026-04-09-collapsible-panels-design.md @@ -0,0 +1,78 @@ +# Collapsible Side Panels + +## Kontext + +Die Arbeits-View hat zwei Seitenpanels: den Navigator (links, 360–400px) und den Tagesplan-Kalender (rechts, 260px). Beide sind aktuell fest sichtbar und nehmen viel Platz ein. Der Kalender hat bereits eine rudimentäre Collapse-Funktion (schmaler 8px-Streifen mit einzelnem Chevron), die aber optisch nicht hochwertig ist. + +Ziel: Beide Panels sollen sich elegant ein- und ausklappen lassen — mit einheitlichem Pattern, inspiriert von Sunsama. Default ist ausgeklappt. + +## Design + +### Verhalten + +- **Ausgeklappt (Default):** Panel ist voll sichtbar. Im Header sitzt ein subtiler Toggle-Button (rechts im linken Panel, links im rechten Panel). +- **Eingeklappt:** Panel verschwindet komplett. Ein kleiner, unauffälliger Button erscheint in der entsprechenden Ecke des Workbench-Bereichs (oben links für Navigator, oben rechts für Kalender). +- **Unabhängig:** Beide Panels werden separat gesteuert. Jede Kombination ist möglich. +- **Persistenz:** Zustand wird in localStorage gespeichert, überlebt Page-Reloads. + +### Icons (Lucide) + +| Zustand | Links (Navigator) | Rechts (Kalender) | +|---------|-------------------|-------------------| +| Ausgeklappt → Einklappen | `PanelLeftClose` | `PanelRightClose` | +| Eingeklappt → Aufklappen | `PanelLeftOpen` | `PanelRightOpen` | + +### Toggle-Button Styling + +- **Im Header (ausgeklappt):** Ghost-Button, `text-muted`, hover → `text-body` + `bg-surface`. Kein Border, kein Background im Ruhezustand. Subtil und unauffällig. +- **Im Workbench (eingeklappt):** Leicht sichtbarer Button mit `bg-surface`-Background und `border-subtle` Border. Rundet sich ein (border-radius). Hover → etwas prominenter. Positioniert sich absolut in der Ecke, überlagert den Workbench-Content nicht störend. +- Beide Varianten: `focus-visible:outline-2 focus-visible:outline-[var(--color-focus-ring)]`, `transition-colors duration-100`. + +### Animation + +- 150ms `transition` auf `width` (oder `max-width`) + `opacity` des Panels. +- Panel gleitet raus, Workbench expandiert flüssig nach. +- `@media (prefers-reduced-motion: reduce)` → keine Transition. + +### localStorage Keys + +- Navigator: `orbit.navigator.sidebarCollapsed` (neuer Key, existierender `orbit.navigator.collapsed` bleibt für Sections) +- Kalender: `orbit.dayCalendar.collapsed` (bestehender Key wird weiterverwendet) + +## Betroffene Dateien + +### `src/app/shared/view-arbeit/view-arbeit.ts` + `.html` +- Neuen `sidebarCollapsed` Signal hinzufügen mit localStorage-Init +- `toggleSidebar()` Methode +- Template: `@if`-Bedingung um `