import type { LucideIcon } from 'lucide-react'; import type { ReactNode } from 'react'; interface FleetTabHeadingProps { title: string; subtitle: string; action?: ReactNode; } /** * Standardized Fleet tab header: heading-styled title and muted subtitle on the * left, an optional primary action on the right. Rendered in both empty and * populated states so the tab chrome stays consistent. The title follows the * theme heading style (signature italic or calm) via .font-heading. */ export function FleetTabHeading({ title, subtitle, action }: FleetTabHeadingProps) { return (

{title}

{subtitle}

{action}
); } /** * Vertical-centering shell that floats an empty-state card in the middle of the * tab body, below the heading. */ export function FleetEmptyState({ children }: { children: ReactNode }) { return (
{children}
); } interface FleetEmptyCardProps { icon: LucideIcon; title: string; description: string; action?: ReactNode; } /** * Minimal empty-state card: centered icon, heading-styled headline, muted * one-line description, optional CTA. */ export function FleetEmptyCard({ icon: Icon, title, description, action }: FleetEmptyCardProps) { return (

{title}

{description}

{action}
); }