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

@@ -960,4 +960,61 @@ export const en: Translations = {
topProductsEmptyTitle: 'No product sales in this period',
topProductsEmptyDescription: 'Try a wider date range.',
},
adminShell: {
skipToContent: 'Skip to content',
openSidebar: 'Open menu',
closeSidebar: 'Close menu',
collapseSidebar: 'Collapse menu',
expandSidebar: 'Expand menu',
nav: {
dashboard: 'Dashboard',
catalogGroup: 'Catalog',
products: 'Products',
categories: 'Categories',
orders: 'Orders',
transactions: 'Transactions',
reviews: 'Reviews',
reports: 'Reports',
content: 'Content',
mediaLibrary: 'Media Library',
marketplaceBuilder: 'Marketplace Builder',
users: 'Users',
settings: 'Settings',
monitoring: 'Monitoring',
analytics: 'Analytics',
documentation: 'Documentation',
help: 'Help',
logout: 'Log out',
comingSoonBadge: 'Soon',
},
topbar: {
searchLabel: 'Search the admin panel',
searchPlaceholder: 'Search products, orders, pages...',
notifications: 'Notifications',
notificationsEmpty: 'No new notifications',
account: 'Admin account',
tenantSelector: 'Store',
tenantSelectorComingSoon: 'Switching between stores is coming soon',
quickPublish: 'Publish',
quickPublishComingSoon: 'Quick publish is coming soon',
},
breadcrumbHome: 'Admin',
pages: {
dashboard: { title: 'Dashboard', description: 'An overview of your marketplace' },
products: { title: 'Products', description: 'Manage product listings and their visibility' },
productCreate: { title: 'New product', description: 'Fill in the details to add a product to the catalog' },
productEdit: { title: 'Edit product', description: 'Change this product\'s details' },
productDuplicate: { title: 'Duplicate product', description: 'Create a new product based on an existing one' },
categories: { title: 'Categories', description: 'Build your catalog\'s category tree' },
categoryCreate: { title: 'New category', description: 'Add a category to the catalog tree' },
categoryEdit: { title: 'Edit category', description: 'Change this category\'s details' },
orders: { title: 'Orders', description: 'View and process customer orders' },
orderDetail: { title: 'Order', description: 'Order details and status' },
transactions: { title: 'Transactions', description: 'Payments, refunds, and fraud review' },
media: { title: 'Media Library', description: 'Images and files for products and pages' },
users: { title: 'Users', description: 'Admin team members and permissions' },
monitoring: { title: 'Monitoring', description: 'Queue, webhook, and system event status' },
analytics: { title: 'Analytics', description: 'Sales, products, and shopper behavior' },
},
},
};