"use client";
import * as React from "react";
import { IconFolder, IconHome, IconFile } from "@tabler/icons-react";
import { Breadcrumb, BreadcrumbItem } from "@/components/ui/breadcrumb";
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
const primitivePreviewCardSurfaceFrameClass = cn(
"relative isolate overflow-hidden rounded-2xl",
"border",
);
const primitivePreviewCardSurfaceLightClass = cn(
"border-black/[0.08] bg-[#f4f4f5]",
"[box-shadow:0_1px_2px_rgba(0,0,0,.06),0_8px_24px_-12px_rgba(0,0,0,.08)]",
);
const primitivePreviewCardSurfaceClass = cn(
primitivePreviewCardSurfaceFrameClass,
primitivePreviewCardSurfaceLightClass,
// Full static `dark:bg-[#0a0a0b]` kept for Tailwind content scan - same as
// PRIMITIVE_PREVIEW_CANVAS_DARK_BG / PRIMITIVE_PREVIEW_CANVAS_DARK.
"dark:border-white/[0.06] dark:bg-[#0a0a0b] dark:[box-shadow:0_1px_2px_rgba(0,0,0,.4),0_8px_24px_-12px_rgba(0,0,0,.6)]",
);
const wensityCardSurfaceClass = primitivePreviewCardSurfaceClass;
function PreviewPanel({
children,
className,
title,
subtitle,
}: {
children: React.ReactNode;
className?: string;
title?: string;
subtitle?: string;
}) {
return (
<div
className={cn(
wensityCardSurfaceClass,
"w-full max-w-lg p-5 sm:p-6",
className,
)}
>
{title ? (
<div className="mb-5 border-b border-[var(--border)] pb-4">
<p className="text-sm font-semibold tracking-[-0.015em] text-[var(--foreground)]">
{title}
</p>
{subtitle ? (
<p className="mt-1 text-[12px] leading-[1.5] text-[var(--muted-foreground)]">
{subtitle}
</p>
) : null}
</div>
) : null}
{children}
</div>
);
}
/* ── Main Preview ─────────────────────────────────────────── */
export function BreadcrumbPreview() {
return (
<PreviewPanel
title="Breadcrumb"
subtitle="Wayfinding trail with hover underline animations and smart collapsing."
>
<div className="space-y-6">
{/* Default */}
<div>
<p className="mb-3 text-xs font-semibold text-[var(--muted-foreground)] opacity-60">
Default
</p>
<Breadcrumb variant="default">
<BreadcrumbItem href="#">Home</BreadcrumbItem>
<BreadcrumbItem href="#">Projects</BreadcrumbItem>
<BreadcrumbItem href="#">Wensity</BreadcrumbItem>
<BreadcrumbItem isCurrentPage>Settings</BreadcrumbItem>
</Breadcrumb>
</div>
{/* With Icons */}
<div>
<p className="mb-3 text-xs font-semibold text-[var(--muted-foreground)] opacity-60">
With Icons
</p>
<Breadcrumb variant="with-icons">
<BreadcrumbItem href="#" icon={<IconHome />}>
Home
</BreadcrumbItem>
<BreadcrumbItem href="#" icon={<IconFolder />}>
Documents
</BreadcrumbItem>
<BreadcrumbItem isCurrentPage icon={<IconFile />}>
report.pdf
</BreadcrumbItem>
</Breadcrumb>
</div>
{/* Collapsed */}
<div>
<p className="mb-3 text-xs font-semibold text-[var(--muted-foreground)] opacity-60">
Collapsed
</p>
<Breadcrumb variant="collapsed" maxItems={3}>
<BreadcrumbItem href="#">Home</BreadcrumbItem>
<BreadcrumbItem href="#">Projects</BreadcrumbItem>
<BreadcrumbItem href="#">Wensity</BreadcrumbItem>
<BreadcrumbItem href="#">Settings</BreadcrumbItem>
<BreadcrumbItem href="#">Integrations</BreadcrumbItem>
<BreadcrumbItem isCurrentPage>OAuth</BreadcrumbItem>
</Breadcrumb>
</div>
{/* Dropdown */}
<div>
<p className="mb-3 text-xs font-semibold text-[var(--muted-foreground)] opacity-60">
Dropdown
</p>
<Breadcrumb variant="dropdown" maxItems={3}>
<BreadcrumbItem href="#">Home</BreadcrumbItem>
<BreadcrumbItem href="#">Projects</BreadcrumbItem>
<BreadcrumbItem href="#">Wensity</BreadcrumbItem>
<BreadcrumbItem href="#">Settings</BreadcrumbItem>
<BreadcrumbItem isCurrentPage>API Keys</BreadcrumbItem>
</Breadcrumb>
</div>
</div>
</PreviewPanel>
);
}
/* ── Card Preview (compact) ──────────────────────────────────── */
/* ── Example: Default ────────────────────────────────────── */
/* ── Example: With Icons ──────────────────────────────────── */
/* ── Example: Collapsed ───────────────────────────────────── */
/* ── Example: Dropdown ────────────────────────────────────── */
/* ── Example: Custom Separator ────────────────────────────── */
export default function Demo() {
return <BreadcrumbPreview />;
}