Voice UI Kit
Primitives

Card

Displays a card with optional header, content and footer.

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
  CardFooter,
  Divider
} from "@pipecat-ai/voice-ui-kit";

<Card>
  <CardHeader>
    <CardTitle className="text-lg">Card Title</CardTitle>
  </CardHeader>
  <CardContent>
    General purpose card content.
  </CardContent>
  <Divider />
  <CardFooter>
    Card Footer
  </CardFooter>
</Card>
PropTypeDefault
variant?
"default" | "destructive" | "success"
"default"
size?
"sm" | "md" | "lg" | "xl"
"md"
background?
"none" | "scanlines" | "grid" | "stripes"
"none"
rounded?
"none" | "sm" | "md" | "lg" | "xl"
size value
shadow?
"none" | "xshort" | "short" | "long" | "xlong"
"none"
withElbows?
boolean
false
withGradientBorder?
boolean
false
className?
string
undefined

Usage

Card Sizing

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<>
  <Card size="sm">
    <CardHeader>
      <CardTitle>Small Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>size="sm"</pre>
    </CardContent>
  </Card>

  <Card size="md">
    <CardHeader>
      <CardTitle>Medium Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>size="md"</pre>
    </CardContent>
  </Card>

  <Card size="lg">
    <CardHeader>
      <CardTitle>Large Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>size="lg"</pre>
    </CardContent>
  </Card>

  <Card size="xl">
    <CardHeader>
      <CardTitle>Extra Large Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>size="xl"</pre>
    </CardContent>
  </Card>
</>

Variants

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<>
  <Card variant="destructive" className="w-full">
    <CardHeader>
      <CardTitle>Destructive Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>variant="destructive"</pre>
    </CardContent>
  </Card>
  <Card variant="success" className="w-full">
    <CardHeader>
      <CardTitle>Success Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>variant="success"</pre>
    </CardContent>
  </Card>
</>

Background

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<div className="flex flex-col gap-4 w-full">
  <Card background="stripes">
    <CardHeader>
      <CardTitle>Stripe Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>background="stripes"</pre>
    </CardContent>
  </Card>
  <Card background="stripes" variant="destructive">
    <CardHeader>
      <CardTitle>Destructive Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>background="stripes" variant="destructive"</pre>
    </CardContent>
  </Card>
  <Card background="stripes" variant="success">
    <CardHeader>
      <CardTitle>Destructive Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>background="stripes" variant="success"</pre>
    </CardContent>
  </Card>
  <Card background="scanlines">
    <CardHeader>
      <CardTitle>Stripe Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>background="stripes"</pre>
    </CardContent>
  </Card>
  <Card background="grid">
    <CardHeader>
      <CardTitle>Destructive Card</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>background="stripes" variant="success"</pre>
    </CardContent>
  </Card>
</div>

Border Radius

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<div className="flex flex-col gap-4 w-full">
  <Card rounded="none">
    <CardHeader>
      <CardTitle>No Rounded Corners</CardTitle>
    </CardHeader>
  </Card>
  <Card rounded="sm">
    <CardHeader>
      <CardTitle>Small Rounded Corners</CardTitle>
    </CardHeader>
  </Card>
  <Card rounded="md">
    <CardHeader>
      <CardTitle>Medium Rounded Corners</CardTitle>
    </CardHeader>
  </Card>
  <Card rounded="lg">
    <CardHeader>
      <CardTitle>Large Rounded Corners</CardTitle>
    </CardHeader>
  </Card>
  <Card rounded="xl">
    <CardHeader>
      <CardTitle>Extra Large Rounded Corners</CardTitle>
    </CardHeader>
  </Card>
</div>

Shadows

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<div className="flex flex-col gap-4 w-full">
  <Card shadow="none">
    <CardHeader>
      <CardTitle>No Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card shadow="xshort">
    <CardHeader>
      <CardTitle>X-Short Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card shadow="short">
    <CardHeader>
      <CardTitle>Short Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card shadow="long">
    <CardHeader>
      <CardTitle>Long Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card shadow="xlong">
    <CardHeader>
      <CardTitle>X-Long Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card variant="destructive" shadow="short">
    <CardHeader>
      <CardTitle>Destructive Short Shadow</CardTitle>
    </CardHeader>
  </Card>
  <Card variant="success" shadow="short">
    <CardHeader>
      <CardTitle>Success Short Shadow</CardTitle>
    </CardHeader>
  </Card>
</div>

Elbows

Note: will not work with rounded corners.

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<>
  <Card className="w-full" withElbows={true}>
    <CardHeader>
      <CardTitle>Card with Elbows</CardTitle>
    </CardHeader>
    <CardContent>
      <pre>withElbows={true}</pre>
    </CardContent>
  </Card>
</>

Gradient Border

Note: Using gradient border applies only when a background variant is not set.

import {
  Card,
  CardHeader,
  CardTitle,
  CardContent,
} from "@pipecat-ai/voice-ui-kit";

<>
  <Card className="w-full" withGradientBorder shadow="xlong">
    <CardHeader>
      <CardTitle>With Gradient Border (makes shadow stand out more)</CardTitle>
    </CardHeader>
  </Card>
</>