=== NEW === - studio/ — MCPEngine Studio scaffold (Next.js monorepo, build plan) - docs/FACTORY-V2.md — Factory v2 architecture doc - docs/CALENDLY_MCP_BUILD_SUMMARY.md — Calendly MCP build report === UPDATED SERVERS === - fieldedge: Added jobs-tools, UI build script, main entry update - lightspeed: Updated main + server entry points - squarespace: Added collection-browser + page-manager apps - toast: Added main + server entry points === INFRA === - infra/command-center/state.json — Updated pipeline state - infra/command-center/FACTORY-V2.md — Factory v2 operator playbook
42 lines
977 B
TypeScript
42 lines
977 B
TypeScript
import React from 'react';
|
|
import { clsx } from 'clsx';
|
|
import { twMerge } from 'tailwind-merge';
|
|
|
|
export interface NavRailProps {
|
|
children: React.ReactNode;
|
|
header?: React.ReactNode;
|
|
footer?: React.ReactNode;
|
|
className?: string;
|
|
}
|
|
|
|
export const NavRail: React.FC<NavRailProps> = ({
|
|
children,
|
|
header,
|
|
footer,
|
|
className,
|
|
}) => {
|
|
return (
|
|
<nav
|
|
className={twMerge(
|
|
clsx(
|
|
'w-16 h-full flex flex-col items-center',
|
|
'bg-gray-950 border-r border-gray-800',
|
|
'py-4 gap-1 shrink-0',
|
|
),
|
|
className,
|
|
)}
|
|
>
|
|
{/* Logo / header slot */}
|
|
{header && <div className="mb-4">{header}</div>}
|
|
|
|
{/* Navigation items */}
|
|
<div className="flex flex-col items-center gap-1 flex-1">{children}</div>
|
|
|
|
{/* Footer slot (settings, avatar, etc.) */}
|
|
{footer && <div className="mt-auto pt-4 border-t border-gray-800">{footer}</div>}
|
|
</nav>
|
|
);
|
|
};
|
|
|
|
NavRail.displayName = 'NavRail';
|