{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card",
  "title": "Card",
  "author": "AniBT <https://anibt.net>",
  "description": "AniBT panel: paper with a 1px edge and the panel shadow (or a flat well), A's 16/12 box with a compact density, and a stitched header or footer.",
  "registryDependencies": [
    "@anibt/theme"
  ],
  "files": [
    {
      "path": "registry/anibt/ui/card.tsx",
      "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\n/**\n * Card — an AniBT 「贴纸手账」 panel.\n *\n * `variant=\"panel\"` (default) is paper on the ground under a 1px border edge\n * and the panel shadow, radius 14 — the `anibt-sheet` recipe. `variant=\"well\"`\n * is a group inside a panel: the edge only, radius 10, no lift.\n *\n * The box is A's: 16px of padding and 12px between header, body and footer;\n * `density=\"compact\"` tightens it to 12 / 8. Vertical padding and the gap are\n * the `--card-py` / `--card-gap` variables, so a caller's `py-0` / `gap-0`\n * still wins through `cn`.\n *\n * `CardHeader stitched` / `CardFooter stitched` part the head or the foot\n * from the body with A's dashed stitch, edge to edge.\n */\nfunction Card({\n  className,\n  variant = \"panel\",\n  density = \"default\",\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  variant?: \"panel\" | \"well\"\n  density?: \"default\" | \"compact\"\n}) {\n  return (\n    <div\n      data-slot=\"card\"\n      data-variant={variant}\n      data-density={density}\n      className={cn(\n        \"group/card flex flex-col gap-(--card-gap) py-(--card-py) [--card-gap:0.75rem] [--card-py:1rem] data-[density=compact]:[--card-gap:0.5rem] data-[density=compact]:[--card-py:0.75rem]\",\n        variant === \"well\" ? \"anibt-well\" : \"anibt-sheet\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction CardHeader({\n  className,\n  stitched = false,\n  ...props\n}: React.ComponentProps<\"div\"> & { stitched?: boolean }) {\n  return (\n    <div\n      data-slot=\"card-header\"\n      data-stitched={stitched || undefined}\n      className={cn(\n        \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1 px-4 group-data-[density=compact]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto]\",\n        stitched && \"anibt-stitch-under pb-3 group-data-[density=compact]/card:pb-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\n/** A panel title: 16/800. */\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-title\"\n      className={cn(\"text-[16px] leading-[1.4] font-extrabold text-card-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\n/** The line under a title: 12, muted. */\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-description\"\n      className={cn(\"text-[12px] leading-normal text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\n/** The tools at the right end of a header row. */\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-action\"\n      className={cn(\"col-start-2 row-span-2 row-start-1 flex items-center gap-2 self-start justify-self-end\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"card-content\"\n      className={cn(\"px-4 text-[14px] group-data-[density=compact]/card:px-3\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction CardFooter({\n  className,\n  stitched = false,\n  ...props\n}: React.ComponentProps<\"div\"> & { stitched?: boolean }) {\n  return (\n    <div\n      data-slot=\"card-footer\"\n      data-stitched={stitched || undefined}\n      className={cn(\n        \"flex items-center gap-2 px-4 group-data-[density=compact]/card:px-3\",\n        stitched && \"anibt-stitch-over pt-3 group-data-[density=compact]/card:pt-2\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent }\n",
      "type": "registry:ui"
    }
  ],
  "categories": [
    "layout"
  ],
  "type": "registry:ui"
}