Component Architecture
Building reusable, composable UI components with the Terminal Luxury design system.
Design Philosophy
MiniWork components follow a hierarchical structure: Components → Layouts → Pages. This ensures consistency and reusability across your application.
Shared UI Components
The src/components/ui.ts file contains reusable components:
src/components/ui.ts
// Site Header - used on public pages
export function siteHeader({ currentPath }: { currentPath?: string }): string {
return `
<header class="site-header">
<a href="/" class="site-logo">...</a>
<nav class="site-nav">...</nav>
</header>
`;
}
// Site Footer
export function siteFooter(): string {
return `<footer class="site-footer">...</footer>`;
}
// Admin Sidebar
export function adminSidebar({ userEmail, userRoles, activePage }): string {
return `<aside class="admin-sidebar">...</aside>`;
}
// Admin Header
export function adminHeader({ title, actions }): string {
return `<header class="admin-header">...</header>`;
}
Layouts
Layouts compose components into page structures:
src/layouts/admin.ts
import { baseLayout } from "./base";
import { adminSidebar, adminHeader, adminFooter } from "../components/ui";
export function adminLayout(content: string, options: AdminLayoutOptions): string {
const { user, activePage, pageTitle } = options;
return baseLayout(`
<div class="admin-layout">
${adminSidebar({ userEmail: user.email, userRoles: user.roles, activePage })}
<main class="admin-main">
${adminHeader({ title: pageTitle })}
<div class="admin-content">${content}</div>
${adminFooter()}
</main>
</div>
`, { title: pageTitle, styles: componentStyles });
}
View Transitions
Components can opt-in to View Transitions API for smooth page navigation:
/* Static elements - no transition */
.admin-sidebar { view-transition-name: admin-sidebar; }
.admin-header { view-transition-name: admin-header; }
/* Animated content area */
.admin-content { view-transition-name: admin-content; }
/* CSS handles the animation */
::view-transition-old(admin-sidebar),
::view-transition-new(admin-sidebar) {
animation: none; /* Keep static */
}
html.vt-down::view-transition-old(admin-content) {
animation: 0.15s ease-out slide-down-out;
}
Vertical Transitions
Admin and docs sidebars use vertical slide animations (up/down) when navigating between menu items, while cross-section navigation uses horizontal slides.