feat(admin): build shared admin shell

Sidebar (Dashboard/Catalog group/Products/Categories/Orders/Transactions/
Reviews/Reports/Content/Media/Marketplace Builder/Users/Settings/
Monitoring/Analytics + Documentation/Help/Logout), sticky topbar
(breadcrumbs, page title/description, search, notifications, tenant
selector and quick-publish placeholders, current user), reserved
right-rail slot, scrollable content area. Desktop 280px sidebar, tablet
icon rail, mobile drawer with focus management and Escape-to-close.

Nav items without a built page (Reviews, Reports, Settings, Docs, Help)
render disabled with a coming-soon badge instead of dead links; Content
and Marketplace Builder route to the existing project-editor pages
(static-pages / general) rather than duplicating them.

All 15 /backoffice/** routes now render through AdminLayoutComponent;
the public storefront header/back-button/footer no longer render on
admin routes (app.ts/app.html gate on a new isAdminRoute signal).

Added the adminShell i18n namespace (ru/en/hy) for every new shell
string so this doesn't add to the existing untranslated-admin-UI gap
tracked in KNOWN-ISSUES.md.

Colors/type sizes follow DESIGN.md tokens; the two rgba() modal-scrim
values are a documented, intentional exception (neutral overlay,
not a themed token).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-18 00:12:19 +04:00
parent 6be3c5892d
commit eb7b5c996d
12 changed files with 1384 additions and 15 deletions

View File

@@ -967,4 +967,61 @@ export interface Translations {
topProductsEmptyTitle: string;
topProductsEmptyDescription: string;
};
adminShell: {
skipToContent: string;
openSidebar: string;
closeSidebar: string;
collapseSidebar: string;
expandSidebar: string;
nav: {
dashboard: string;
catalogGroup: string;
products: string;
categories: string;
orders: string;
transactions: string;
reviews: string;
reports: string;
content: string;
mediaLibrary: string;
marketplaceBuilder: string;
users: string;
settings: string;
monitoring: string;
analytics: string;
documentation: string;
help: string;
logout: string;
comingSoonBadge: string;
};
topbar: {
searchLabel: string;
searchPlaceholder: string;
notifications: string;
notificationsEmpty: string;
account: string;
tenantSelector: string;
tenantSelectorComingSoon: string;
quickPublish: string;
quickPublishComingSoon: string;
};
breadcrumbHome: string;
pages: {
dashboard: { title: string; description: string };
products: { title: string; description: string };
productCreate: { title: string; description: string };
productEdit: { title: string; description: string };
productDuplicate: { title: string; description: string };
categories: { title: string; description: string };
categoryCreate: { title: string; description: string };
categoryEdit: { title: string; description: string };
orders: { title: string; description: string };
orderDetail: { title: string; description: string };
transactions: { title: string; description: string };
media: { title: string; description: string };
users: { title: string; description: string };
monitoring: { title: string; description: string };
analytics: { title: string; description: string };
};
};
}