import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { ArrowLeft } from "lucide-react";
import type { ReactNode } from "react";
import { Link } from "wouter";
export function PortalDashboardHeader({
title,
description,
actions,
backHref = "/dashboard",
className,
contentClassName,
tourId,
}: {
title: string;
description?: string;
actions?: ReactNode;
backHref?: string;
className?: string;
contentClassName?: string;
tourId?: string;
}) {
return (
);
}
export function PortalPageHeader({
title,
description,
actions,
}: {
title: string;
description?: string;
actions?: ReactNode;
}) {
return (
{title}
{description ?
{description}
: null}
{actions ?
{actions}
: null}
);
}
export function PortalSectionIntro({
eyebrow,
title,
description,
aside,
className,
eyebrowClassName,
titleClassName,
descriptionClassName,
}: {
eyebrow?: string;
title: string;
description?: string;
aside?: ReactNode;
className?: string;
eyebrowClassName?: string;
titleClassName?: string;
descriptionClassName?: string;
}) {
return (
{eyebrow ? (
{eyebrow}
) : null}
{title}
{description ?
{description}
: null}
{aside ? (
{aside}
) : null}
);
}
export function PortalSurface({
title,
description,
badge,
children,
className,
bodyClassName,
}: {
title?: string;
description?: string;
badge?: ReactNode;
children: ReactNode;
className?: string;
bodyClassName?: string;
}) {
return (
{title || description || badge ? (
{title ?
{title}
: null}
{description ?
{description}
: null}
{badge ?
{badge}
: null}
) : null}
{children}
);
}
export function PortalMetricTile({
label,
value,
detail,
tone = "default",
}: {
label: string;
value: ReactNode;
detail?: ReactNode;
tone?: "default" | "success" | "info" | "warning";
}) {
const toneClassName =
tone === "success"
? "border-emerald-200 bg-emerald-50"
: tone === "info"
? "border-blue-200 bg-blue-50"
: tone === "warning"
? "border-amber-200 bg-amber-50"
: "border-slate-200 bg-white";
return (
{label}
{value}
{detail ?
{detail}
: null}
);
}
export function PortalActionGroup({
children,
className,
}: {
children: ReactNode;
className?: string;
}) {
return {children}
;
}