Skip to content

Card

A card component for displaying content in a contained box with header, content, and footer sections.

Installation

bash
npx @galaxy-stack/nebula-cli@latest add card
bash
pnpm dlx @galaxy-stack/nebula-cli@latest add card
bash
yarn dlx @galaxy-stack/nebula-cli@latest add card
bash
bunx @galaxy-stack/nebula-cli@latest add card
bash
# If you have installed galaxy-design globally
galaxy-design add card

Dependencies

This component automatically installs the following dependencies:

  • React: class-variance-authority
  • Vue: class-variance-authority
  • Angular: class-variance-authority
  • React Native: nativewind, tailwindcss
  • Flutter: No additional dependencies

No manual installation needed!

Usage

Basic Example

tsx
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card"

export default function CardDemo() {
  return (
    <Card>
      <CardHeader>
        <CardTitle>Card Title</CardTitle>
        <CardDescription>Card Description</CardDescription>
      </CardHeader>
      <CardContent>
        <p>Card Content</p>
      </CardContent>
    </Card>
  )
}
vue
<script setup lang="ts">
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from '@/components/ui/card'
</script>

<template>
  <Card>
    <CardHeader>
      <CardTitle>Card Title</CardTitle>
      <CardDescription>Card Description</CardDescription>
    </CardHeader>
    <CardContent>
      <p>Card Content</p>
    </CardContent>
  </Card>
</template>

With Actions

tsx
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@/components/ui/card"
import { Button } from "@/components/ui/button"

export default function CardWithActions() {
  return (
    <Card>
      <CardHeader>
        <CardTitle>Card Title</CardTitle>
        <CardDescription>Card Description</CardDescription>
      </CardHeader>
      <CardContent>
        <p>Card Content</p>
      </CardContent>
      <CardFooter className="flex gap-2">
        <Button variant="outline">Cancel</Button>
        <Button>Save</Button>
      </CardFooter>
    </Card>
  )
}
vue
<script setup lang="ts">
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from '@/components/ui/card'
import { Button } from '@/components/ui/button'
</script>

<template>
  <Card>
    <CardHeader>
      <CardTitle>Card Title</CardTitle>
      <CardDescription>Card Description</CardDescription>
    </CardHeader>
    <CardContent>
      <p>Card Content</p>
    </CardContent>
    <CardFooter class="flex gap-2">
      <Button variant="outline">Cancel</Button>
      <Button>Save</Button>
    </CardFooter>
  </Card>
</template>

API Reference

Components

ComponentDescriptionProps
CardRoot containerclassName / class
CardHeaderHeader sectionclassName / class
CardTitleTitle textclassName / class
CardDescriptionDescription textclassName / class
CardContentMain content areaclassName / class
CardFooterFooter sectionclassName / class

Accessibility

  • Semantic HTML: Uses proper <article>, <header>, <footer> elements
  • Screen Reader: Clear content hierarchy
  • Focus Management: Inherits parent focus behavior
  • WCAG Compliance: WCAG 2.1 Level AA compliant

Author

Bùi Trọng Hiếu (kevinbui)

License

MIT © 2025 Bùi Trọng Hiếu (kevinbui)

Released under the MIT License.