feat(team-view): horizontale Team-Timeline (ENTWICKLUN-8)
Neue Seite /team (Tab „Team", g t): horizontale Tages-Timeline mit einer Spur
pro Person. Zeit-Blöcke werden nach Start/Ende auf einer Stundenachse
positioniert, eingefärbt nach Kategorie; überlappende Blöcke landen auf
parallelen Sub-Spuren ("parallele Zeitstränge"). Laufende Blöcke (heute) ticken
live und sind rot umrandet. Datums-Navigation (Tag vor/zurück, Picker, „Heute"),
Hover-Tooltip mit Label/Zeitraum/Dauer, Kategorie-Legende.
Endpoint time.teamTimeline({date?}) liefert pro Person die Roh-Einträge
(Start/Ende/Kategorie/Label); Achse & Sub-Spuren rechnet das Frontend.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
9bf20fbabd
commit
516b35bf15
6 files changed
+369
-2
No files matched your search
@@ -55,6 +55,9 @@ const Projekt = lazyWithReload(() =>
|
||||
);
|
||||
const Leads = lazyWithReload(() => import('../routes/leads').then((m) => ({ default: m.LeadsRoute })));
|
||||
const Lead = lazyWithReload(() => import('../routes/lead').then((m) => ({ default: m.LeadRoute })));
|
||||
const TeamView = lazyWithReload(() =>
|
||||
import('../routes/team-view').then((m) => ({ default: m.TeamViewRoute })),
|
||||
);
|
||||
const Historie = lazyWithReload(() =>
|
||||
import('../routes/historie').then((m) => ({ default: m.HistorieRoute })),
|
||||
);
|
||||
@@ -106,6 +109,7 @@ const router = createBrowserRouter([
|
||||
{ path: 'projekt/:id', element: withSuspense(<Projekt />) },
|
||||
{ path: 'leads', element: withSuspense(<Leads />) },
|
||||
{ path: 'lead/:id', element: withSuspense(<Lead />) },
|
||||
{ path: 'team', element: withSuspense(<TeamView />) },
|
||||
{ path: 'historie', element: withSuspense(<Historie />) },
|
||||
{ path: 'archiv', element: withSuspense(<Archiv />) },
|
||||
{ path: '*', element: withSuspense(<NotFound />) },
|
||||
|
||||
Reference in new issue
Block a user