{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "card",
  "title": "card",
  "dependencies": [
    "@radix-ui/react-slot",
    "class-variance-authority@^0.7"
  ],
  "registryDependencies": [
    "@dwellir/dwellir-theme",
    "@dwellir/utils"
  ],
  "files": [
    {
      "path": "components/ui/card.tsx",
      "content": "import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\nimport { cn } from '@/lib/utils';\n\nconst cardVariants = cva('card-variants group/card', {\n  variants: {\n    size: {\n      md: 'gap-6 py-6',\n      /* Dense cards: lists, notes, small grids. */\n      sm: 'gap-4 py-5',\n      /* Rows in a list, such as ranked results. */\n      xs: 'gap-3 py-3',\n      /* A frame whose cells carry their own padding, such as a bento grid. */\n      flush: 'gap-0 overflow-clip py-0',\n    },\n    surface: {\n      /* The default: every standalone card on the ground or the alt sheet. The card colour under a still film grain. */\n      grain: 'ds-card-grain',\n      /*\n       * Frosted glass. Its translucent edge composites over the aurora with its fill.\n       * No grain: its specks over the aurora drop the card's text below 4.5:1.\n       */\n      glass: 'border-foreground/12 glass shadow-card',\n      /* Glass with a lighter frost (8px, no saturate), for a pane over moving content where every frame counts. */\n      'glass-lite': 'border-foreground/12 glass glass-lite shadow-card',\n      /* No texture: cards inside cards, and dense content (tables, forms, lists of links). */\n      plain: 'border-border bg-card',\n      /* Plain with upstream's small shadow: a card on an app panel's ground, such as the dashboard mock. */\n      raised: 'border-border bg-card shadow-xs',\n      /*\n       * A piece of the sky, as in the hero and the close: the deep ground under\n       * the sky's grain. The one call to action among glass panes. It isolates,\n       * so an AuroraCurtain inside shows over it.\n       */\n      sky: 'ds-card-sky',\n      /* An inset area inside a card: a muted fill, no grain and no shadow. For read-outs and summaries. */\n      well: 'border-border bg-muted',\n    },\n    rim: {\n      none: '',\n      /* Clickable cards: the aurora rim lights on hover and keyboard focus. */\n      hover: 'rim rim-hover',\n      /* The featured or selected card: the rim stays lit and the card glows. */\n      lit: 'rim shadow-glow',\n    },\n    flat: {\n      false: '',\n      /* Part of a panel, such as a card in a menu or a popover: no drop shadow and no lifted edge. */\n      true: 'shadow-none',\n    },\n    inset: {\n      false: '',\n      /*\n       * A row inside a card's content, such as an endpoint in a list. Its corner\n       * follows the outer card's (rounded-inset). Pair it with plain or well.\n       */\n      true: 'card-inset',\n    },\n  },\n  compoundVariants: [\n    /*\n     * A flush card clips its cells, and the clip would hide a rim drawn over\n     * the border. Its rim sits just inside the border, and the border clears\n     * while the rim shows.\n     */\n    {\n      size: 'flush',\n      rim: 'hover',\n      class:\n        'rim-inside transition-colors duration-350 hover:border-transparent focus-visible:border-transparent has-focus-visible:border-transparent',\n    },\n    { size: 'flush', rim: 'lit', class: 'rim-inside border-transparent' },\n  ],\n  defaultVariants: { size: 'md', surface: 'grain', rim: 'none', flat: false, inset: false },\n});\n\ntype CardProps = ComponentProps<'div'> &\n  VariantProps<typeof cardVariants> & {\n    /**\n     * How the solar wind treats the card (components/aurora/wind/colliders.ts):\n     * \"hover\" strikes it while hovered, \"always\" at all times, \"off\" never.\n     */\n    collider?: 'hover' | 'always' | 'off';\n    /** Render the child element (a link or a button) as the card: a clickable card. */\n    asChild?: boolean;\n  };\n\nfunction Card({\n  className,\n  size,\n  surface,\n  rim,\n  flat,\n  inset,\n  collider = 'hover',\n  asChild = false,\n  ...props\n}: CardProps) {\n  const Comp = asChild ? Slot : 'div';\n  /* A card that is a link or a button (asChild) takes focus: it shows the focus outline. */\n  const focus = asChild ? 'card-focus' : null;\n  return (\n    <Comp\n      data-slot=\"card\"\n      data-size={size ?? 'md'}\n      data-surface={surface ?? 'grain'}\n      data-inset={inset ? '' : undefined}\n      data-au-collider={collider}\n      className={cn(cardVariants({ size, surface, rim, flat, inset }), focus, className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardHeader({ className, ...props }: ComponentProps<'div'>) {\n  return <div data-slot=\"card-header\" className={cn('card-header', className)} {...props} />;\n}\n\nfunction CardTitle({ className, ...props }: ComponentProps<'h3'>) {\n  return (\n    <h3\n      data-slot=\"card-title\"\n      className={cn('card-title text-xl leading-tight text-title', className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardDescription({ className, ...props }: ComponentProps<'p'>) {\n  return (\n    <p\n      data-slot=\"card-description\"\n      className={cn('text-sm text-pretty text-muted-foreground', className)}\n      {...props}\n    />\n  );\n}\n\nfunction CardAction({ className, ...props }: ComponentProps<'div'>) {\n  return <div data-slot=\"card-action\" className={cn('card-action', className)} {...props} />;\n}\n\nfunction CardContent({ className, ...props }: ComponentProps<'div'>) {\n  return (\n    <div\n      data-slot=\"card-content\"\n      className={cn(\n        'px-6 group-data-[size=sm]/card:px-5 group-data-[size=xs]/card:px-4',\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction CardFooter({ className, ...props }: ComponentProps<'div'>) {\n  return (\n    <div data-slot=\"card-footer\" className={cn('card-footer mt-auto', className)} {...props} />\n  );\n}\n\nexport {\n  Card,\n  CardAction,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n  cardVariants,\n};\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}