feat(dashboard): redesign space dashboard with members, activity, votes

Replace the global "Your Spaces" grid with a space-centric dashboard showing
members, previously open tools, recent activity, active votes, and quick
actions. Fix layout cut-off by positioning dashboard fixed below header+tab
row (top: 92px) with sidebar-push support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-23 16:57:54 -07:00
parent e3a6a45c5a
commit 30f037c2a0
3 changed files with 492 additions and 306 deletions

View File

@ -840,11 +840,12 @@ export function renderShell(opts: ShellOptions): string {
}
} else {
// No tabs left — show dashboard
const dashboard = document.querySelector('rstack-user-dashboard');
if (dashboard && dashboard.setOpenTabs) dashboard.setOpenTabs([...layers]);
tabBar.setLayers([]);
tabBar.setAttribute('active', '');
currentModuleId = '';
if (tabCache) tabCache.hideAllPanes();
const dashboard = document.querySelector('rstack-user-dashboard');
if (dashboard) { dashboard.style.display = ''; if (dashboard.refresh) dashboard.refresh(); }
const app = document.getElementById('app');
if (app) app.classList.remove('canvas-layout');
@ -995,8 +996,9 @@ export function renderShell(opts: ShellOptions): string {
if (layers.length === 0) {
// No tabs left — show the dashboard
if (tabCache) tabCache.hideAllPanes();
const dashboard = document.querySelector('rstack-user-dashboard');
if (dashboard && dashboard.setOpenTabs) dashboard.setOpenTabs(closedLayer ? [closedLayer] : []);
if (tabCache) tabCache.hideAllPanes();
if (dashboard) {
dashboard.style.display = '';
if (dashboard.refresh) dashboard.refresh();

File diff suppressed because it is too large Load Diff

View File

@ -347,6 +347,7 @@ body {
.rstack-tab-row,
#app,
rstack-user-dashboard,
.rspace-iframe-wrap,
#toolbar {
transition: margin-left 0.25s ease, left 0.25s ease;
@ -360,6 +361,10 @@ body.rstack-sidebar-open #app {
margin-left: 280px;
}
body.rstack-sidebar-open rstack-user-dashboard {
left: 280px;
}
body.rstack-sidebar-open .rspace-iframe-wrap {
left: 280px;
}
@ -457,6 +462,7 @@ body.rstack-sidebar-open #toolbar {
/* Sidebar overlays on mobile — no push offsets */
body.rstack-sidebar-open .rstack-tab-row { left: 0; }
body.rstack-sidebar-open #app { margin-left: 0; }
body.rstack-sidebar-open rstack-user-dashboard { left: 0; }
body.rstack-sidebar-open .rspace-iframe-wrap { left: 0; }
body.rstack-sidebar-open #toolbar { left: 12px; }
}