AppCard
neon-ui/app-cardFreeComponent
Tenant dashboard grid card composing the status vocabulary: name, badges, timestamp, one-link hover.
Install it
npx shadcn@latest add https://ui.neon.com/r/app-card.jsonSource
1"use client";23import { ArrowUpRight01Icon } from "@hugeicons/core-free-icons";4import { HugeiconsIcon } from "@hugeicons/react";5import type { ComponentProps, ReactNode } from "react";67import { PlanBadge, StatusBadge } from "@/components/status-badge/status-badge";8import type {9 AppPlan,10 AppStatus,11} from "@/components/status-badge/status-badge";12import { cn } from "@/lib/utils";1314export type AppCardProps = Omit<ComponentProps<"a">, "children"> & {15 /** App name, shown in mono. */16 name: string;17 /** Lifecycle state, rendered as a StatusBadge. */18 status: AppStatus;19 /** Billing plan, rendered as a PlanBadge. */20 plan?: AppPlan;21 /** One-line summary of what the app does. */22 description?: string;23 /** Last activity, already formatted, e.g. "2h ago". */24 updatedAt?: string;25 /**26 * Status-colored grain rising from the bottom edge. Pass a ReactNode27 * (e.g. a Paper Shaders GrainGradient) to replace the built-in CSS grain28 * inside the same positioned, status-tinted slot.29 */30 wash?: boolean | ReactNode;31};3233/** Wash tint per status: color only ever comes from the vocabulary. */34const STATUS_WASH: Record<AppStatus, string> = {35 error: "text-destructive",36 provisioning: "text-primary",37 ready: "text-primary",38 stopped: "text-muted-foreground",39};4041/* ─────────────────────────────────────────────────────────42 * The dashboard grid card, on MetricCard's shell: hairline43 * border warming on hover with a neon underline sweeping in44 * under the name (transform-only, no layout shift). The45 * corner arrow inks in alongside; the status vocabulary46 * anchors the foot with the timestamp opposite. The whole47 * card is one link.48 * ───────────────────────────────────────────────────────── */49export const AppCard = ({50 className,51 description,52 name,53 plan,54 status,55 updatedAt,56 wash = true,57 ...props58}: AppCardProps) => (59 <a60 className={cn(61 "group relative isolate flex min-h-[128px] cursor-pointer select-none flex-col overflow-hidden rounded-lg border border-border/60 bg-card p-4 no-underline shadow-none ring-0 transition-colors hover:border-border focus-visible:border-primary focus-visible:outline-none",62 className63 )}64 data-slot="app-card"65 data-status={status}66 {...props}67 >68// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from neon-ui
All 77 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ActivityFeedactivity-feed | neon-ui | Components | Free | 2 deps | |
| AgentChatagent-chat | neon-ui | Components | Free | 6 deps | |
| AnimatedWashanimated-wash | neon-ui | Components | Free | no deps · 2 files | |
| ApiKeyListapi-key-list | neon-ui | Components | Free | 2 deps | |
| AppCreatorapp-creator | neon-ui | Components | Free | 2 deps | |
| AuthFormauth-form | neon-ui | Components | Free | no deps | |
| AutoscaleChartautoscale-chart | neon-ui | Components | Free | 1 dep | |
| Badgebadge | neon-ui | Components | Free | 2 deps |
