{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "sf-card", "title": "SF Card", "description": "Industrial card with 2px borders, hover border highlight", "registryDependencies": [ "card" ], "files": [ { "path": "components/sf/sf-card.tsx", "content": "import {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardTitle,\n} from \"@/components/ui/card\";\nimport { cn } from \"@/lib/utils\";\nimport { BorderDraw } from \"@/components/animation/border-draw\";\n\ninterface SFCardProps extends React.ComponentProps {\n hoverable?: boolean;\n /** Use clockwise magenta border-draw instead of simple color hover */\n borderDraw?: boolean;\n}\n\n/**\n * Content surface card — FRAME layer container primitive.\n *\n * Renders a bordered card with 2px foreground border and no shadow\n * (SF aesthetic contract: no elevation, only edge definition). Supports\n * optional hover color transition and SIGNAL-layer borderDraw animation.\n *\n * @param hoverable - Enables hover border color transition to primary\n * @param borderDraw - Replaces color hover with SIGNAL borderDraw animation (clockwise magenta stroke)\n * @param className - Merged via cn() after base classes\n *\n * @example\n * \n * Project Alpha\n * Description text\n * \n */\nfunction SFCard({ className, hoverable = false, borderDraw = false, ...props }: SFCardProps) {\n const card = (\n \n );\n\n if (borderDraw) {\n return {card};\n }\n\n return card;\n}\n\n/** Sub-component of SFCard — renders the card header region with reduced bottom padding. */\nfunction SFCardHeader({\n className,\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\n/** Sub-component of SFCard — renders the card title in font-mono uppercase. */\nfunction SFCardTitle({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Sub-component of SFCard — renders the card description in muted foreground at text-xs. */\nfunction SFCardDescription({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Sub-component of SFCard — renders the main card body content region with p-4 padding. */\nfunction SFCardContent({\n className,\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\n/** Sub-component of SFCard — renders the card footer region, flush bottom with no top gap. */\nfunction SFCardFooter({\n className,\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\nexport {\n SFCard,\n SFCardHeader,\n SFCardTitle,\n SFCardDescription,\n SFCardContent,\n SFCardFooter,\n};\n", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" }, "type": "registry:ui" }