Files
marketplaces/src/app/features/admin/dashboard/components/dashboard-timeline.component.scss

47 lines
823 B
SCSS
Raw Normal View History

feat(admin): redesign dashboard into professional SaaS homepage Replaced the placeholder dashboard with a real business homepage built on 6 new reusable widget components (DashboardSection, DashboardCard, DashboardMetric, DashboardStatusRow, DashboardTimeline, DashboardShortcutCard), all wired through shared app-card/app-skeleton/ app-empty-state. Sections: Welcome (tenant, env badge, current user, last publish/save - all real facade signals, never blank), Quick Actions (large cards: add product, create category, open builder, edit homepage, media, orders), Draft Status (real dirty/modifiedFields/publish/discard from ProjectEditorFacade), Marketplace Health (9 checks - config, product/ category counts, missing translations, draft, static-pages-unpublished, homepage/theme configured, all real; images-without-alt shown as 'not tracked yet' rather than fabricated), Recent Activity (existing localStorage-backed history service, loading/empty states), Useful Shortcuts, Documentation (honest coming-soon list, no dead links). 12-column responsive grid: 3-across cards on desktop, 2-column on tablet, single column on mobile, no horizontal scroll. Keyboard/focus/ ARIA per shortcut card and status row; health status never conveyed by color alone (icon + text every time). AdminDashboardHealthCheck (boolean 'healthy' shape) and its facade signal are untouched - AdminMonitoringPageComponent also consumes them. New richer status data lives in a separate homeHealthChecks signal/ AdminDashboardHomeHealthCheck type instead of widening the shared one. Added ~50 new dashboard.* / kept existing i18n strings across ru/en/hy; no raw keys. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-18 08:59:29 +04:00
.dashboard-timeline {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--space-sm);
}
.dashboard-timeline__skeleton-row {
display: flex;
align-items: center;
gap: var(--space-sm);
}
.dashboard-timeline__item {
display: flex;
align-items: center;
gap: var(--space-sm);
padding-bottom: var(--space-sm);
border-bottom: 1px solid var(--border-color);
}
.dashboard-timeline__item:last-child {
border-bottom: none;
padding-bottom: 0;
}
.dashboard-timeline__icon {
color: var(--primary-color);
font-size: 1rem;
flex-shrink: 0;
}
.dashboard-timeline__label {
flex: 1 1 auto;
color: var(--text-primary);
font-size: 1rem;
min-width: 0;
}
.dashboard-timeline__time {
font-size: 0.75rem;
color: var(--text-light);
white-space: nowrap;
}