"use client" import type * as React from "react" import { Button } from "@/components/ui/button" import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion" import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardMedia, CardSection, CardScrollRegion, CardTitle, } from "@/components/ui/card" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible" import { ScrollArea } from "@/components/ui/scroll-area" import { KeyMetrics, type MetricInsight, type MetricItem } from "@/components/key-metrics" import { Separator } from "@/components/ui/separator" const CARD_KPI_METRICS: MetricItem[] = [ { id: "active", label: "Active placements", value: 42, delta: "+5", trend: "up", trendPolarity: "higher_is_better", progress: 84, description: "84% of spring cohort capacity filled", }, { id: "review", label: "Need review", value: 6, delta: "−2", trend: "down", trendPolarity: "lower_is_better", progress: 24, progressTone: "warning", description: "6 sites awaiting coordinator sign-off", }, ] const CARD_KPI_INSIGHT: MetricInsight = { title: "Spring cohort review", description: "6 placements flagged before site confirmation deadlines.", severity: "warning", actionLabel: "Ask Leo", } function CardStructureLabel({ children }: { children: React.ReactNode }) { return (

{children}

) } export function CardSizesPreview() { return (
size="default" (implicit) Default spacing --card-spacing: 16px (default tier)

Use on dashboard tiles and section panels.

size="sm" Compact spacing --card-spacing: 12px (sm tier)

Use inside dense grids and board columns.

) } export function CardAnatomyPreview() { return ( CardHeader + CardTitle CardDescription sits under the title in the header grid.

CardContent owns horizontal padding only. Card sets vertical rhythm (py + gap).

) } export function CardPreview() { return ( Card title Supporting description text.

Header and body only — no footer or header action.

) } export function CardWithActionPreview() { return ( Placement summary Fall 2026 · PT cohort

42 active placements · 6 need review.

) } export function CardWithFooterPreview() { return ( Tasks Due this week

3 items pending coordinator review.

) } export function CardContentOnlyPreview() { return (

Content-only card

Omit CardHeader when the surrounding chrome already names the section.

) } export function CardHeaderBorderPreview() { return ( Section with divider CardHeader with border-b before scrollable body.

Use when the header stays fixed above a list region.

) } const CARD_SCROLLABLE_PREVIEW_ITEMS = [ "Review placement paperwork", "Confirm preceptor availability", "Upload compliance packet", "Send welcome email", ] as const export function CardScrollableContentPreview() { return ( Activity Recent updates ) } /** Photo / video / illustration — not charts (use ChartCard for data viz). */ export function CardMediaPreview() { return ( Clinical placement site exterior Memorial Hospital — PT rotation Spring 2026 · 12 student capacity

CardMedia for photo, video, animation, illustration, or audio. Charts belong in ChartCard.

) } /** Subdued in-card band for secondary or inactive content. */ export function CardSubduedSectionPreview() { return ( Staff accounts Active coordinators for this program

Deactivated accounts

) } /** interactive prop — hover shadow when wrapped in Link or single navigational target. */ export function CardInteractivePreview() { return ( Interactive surface Pass interactive on Card; wrap in Link for keyboard access.

ListPageBoardCard uses the same token via interactive + Link.

) } /** Edge-to-edge scroll region using --card-spacing bleed utilities. */ export function CardEdgeToEdgePreview() { return ( Terms of placement Review before accepting the agreement.

Students must complete all compliance requirements before the rotation start date.

Site coordinators may update availability weekly; schools receive automated notifications.

Placement changes within 14 days of start require program director approval.

By continuing, you agree to keep student records confidential per FERPA guidelines.

) } /** KPI inside Card — flat-band cells (transparent + hairlines) on card glow. */ export function CardKpiInCardPreview() { return ( ) } /** Each KPI in its own Card — overview grids and browse surfaces. */ export function KeyMetricsCardsPreview() { return ( ) } /** @deprecated Use CardKpiInCardPreview */ export const CardKpiFlatBandPreview = CardKpiInCardPreview export const CardGlowPreview = CardKpiInCardPreview export function AccordionPreview() { return ( Section one Collapsible body copy. Section two Second panel content. ) } export function CollapsiblePreview() { return ( Collapsible region content. ) } export function SeparatorPreview() { return (
Left Right
) } export function ScrollAreaPreview() { return (

Scrollable region for nested panes with overflow.

Line two

Line three

) }