<script setup lang="ts">
  import Button from '~/components/ui/Button.vue'
  import Card from '~/components/ui/Card.vue'
  import Layout from '~/components/ui/Layout.vue'
  import OptionsButton from '~/components/ui/button/Options.vue'
  import Spacer from '~/components/ui/layout/Spacer.vue'
  // import { useRoute } from 'vue-router'

  const alert = ( message: string ) => window.alert(message)
  // const router = useRouter()
</script>

# Card

Funkwhale cards are used to contain textual information, links, and interactive buttons. You can use these to create visually pleasing links to content or to present information.

::: details Parameters

#### Props

```ts
interface Props extends Partial<RouterLinkProps> {
  title: string;
  category?: true | "h1" | "h2" | "h3" | "h4" | "h5";
  color?: Pastel;
  image?: string | { src: string; style?: "withPadding" };
  tags?: string[];
}
```

You have to set a title for the card by passing a `title` prop.

#### Style

- Set `--width` on the element to override the default Card width.

:::

<Layout grid :column-width=290>

```vue-html
<Card title="For music lovers">
  Access your personal music
  collection from anywhere.
  Funkwhale gives you access to
  publication and sharing tools
  you can use to promote that
  your content across the web.
</Card>
```

<div class="preview">
<Card title="For music lovers">
  Access your personal music collection from anywhere. Funkwhale gives you access to publication and sharing tools that you can use to promote your content across the web.
</Card>
</div>

</Layout>

## Card as a Link

::: warning

TODO: Test if it works. Set up a mock router in vitest.

:::

Add a `:to` prop, either containing an external link (`"https://..."`) or a Vue Router destination:

```ts
:to="{name: 'library.albums.detail', params: {id: album.id}}"
```

<div class="preview">
<Card
title="Frequently Asked Questions"
@click="alert('A quick answer!')"
>
Got a question about Funkwhale? Get a quick answer!
</Card></div>

## Card as a Category header

Category cards are basic cards that contain only a title. To create a category card, pass a `category` prop.

```vue-html{1}
<Card category
  title="Example Translations"
/>
```

<div class="preview">
  <Card category
  title="Example Translations"
  />
</div>

## Add an Image

Pass an image source to the `image` prop or set `image.src` and `image.style`.

<Layout flex>

```vue-html{4,11-12}
<Card
  style="--width:208px"
  title="For music lovers"
  image="https://images.unsplash.com/photo-1524650359799-842906ca1c06?ixlib=rb-1.2.1&dl=te-nguyen-Wt7XT1R6sjU-unsplash.jpg&w=640&q=80&fm=jpg&crop=entropy&cs=tinysrgb">
</Card>


<Card
  style="--width:208px"
  title="For music lovers"
  :image="{ src:'https://images.unsplash.com/photo-1524650359799-842906ca1c06?ixlib=rb-1.2.1&dl=te-nguyen-Wt7XT1R6sjU-unsplash.jpg&w=640&q=80&fm=jpg&crop=entropy&cs=tinysrgb',
            style:'withPadding' }">
</Card>
```

<div class="preview">
<Card
  style="--width:208px"
title="For music lovers"
  image="https://images.unsplash.com/photo-1524650359799-842906ca1c06?ixlib=rb-1.2.1&dl=te-nguyen-Wt7XT1R6sjU-unsplash.jpg&w=640&q=80&fm=jpg&crop=entropy&cs=tinysrgb" />
</div>

<div class="preview">
<Card
  style="--width:208px"
title="For music lovers"
:image="{ src:'https://images.unsplash.com/photo-1524650359799-842906ca1c06?ixlib=rb-1.2.1&dl=te-nguyen-Wt7XT1R6sjU-unsplash.jpg&w=640&q=80&fm=jpg&crop=entropy&cs=tinysrgb',
          style:'withPadding' }" />
</div>
</Layout>

## Add an Alert

```vue-html{2-4}
<Card title="Your Collection">
  <template #alert>
    Please annotate all items with the required metadata.
  </template>
</Card>
```

<div class="preview">
<Card title="Your Collection">
  <template #alert>Please annotate all items with the required metadata.</template>
</Card>
</div>

## Add a Footer

Items in this region are secondary and will be displayed smaller than the main content.

```vue-html{3-9}
<Card title="My items">
  <template #alert> There are no items in this list </template>
  <template #footer>
    <Button variant="outline" icon="bi-upload" @click="alert('Uploaded. Press OK!')">
      Upload
    </Button>
    <Spacer style="flex-grow: 1" />
    <OptionsButton />
  </template>
</Card>
```

<div class="preview">
<Card title="My items">

<template #alert>There are no items in this list
</template>

<template #footer>
<Button variant="outline" icon="bi-upload" @click="alert('Uploaded. Press OK!')">Upload</Button>
<Spacer style="flex-grow: 1" />
<OptionsButton />
</template>

</Card>
</div>

## Add an Action

Large Buttons or links at the bottom edge of the card serve as Call-to-Actions (CTA).

```vue-html{3-6}
<Card title="Join an existing pod">
  The easiest way to get started with Funkwhale is to register an account on a public pod.
  <template #action>
    <Button @click="alert('Open the pod picker')">Action!
    </Button>
  </template>
</Card>
```

<div class="preview">
  <Card title="Join an existing pod">
    The easiest way to get started with Funkwhale is to register an account on a public pod.
    <template #action>
      <Button @click="alert('Open the pod picker')">Action!
      </Button>
    </template>
  </Card>
</div>

If there are multiple actions, they will be presented in a row:

```vue-html{4,7}
<Card title="Delete this pod?">
  You cannot undo this action.
  <template #action>
    <Button style="justify-content: flex-start;" icon="bi-chevron-left" color="secondary" variant="ghost">
      Back
    </Button>
    <Button style="flex-grow:0;" color="destructive" @click="alert('Deleted')">
      Delete
    </Button>
  </template>
</Card>
```

<div class="preview">
  <Card title="Delete this pod?">
    You cannot undo this action.
    <template #action>
      <Button style="width:50%; justify-content: flex-start;" icon="bi-chevron-left" color="secondary" variant="ghost">
        Back
      </Button>
      <Button style="width:50%" color="destructive" @click="alert('Deleted')">
        Delete
      </Button>
    </template>
  </Card>
</div>

## Add Tags

You can include tags on a card by adding a list of `tags`. These are rendered as [pills](./pill.md).

```vue-html{3}
<Card
  title="For music lovers"
  :tags="['rock', 'folk', 'punk']"
>
  Access your personal music collection from anywhere. Funkwhale gives you access to publication and sharing tools that you can use to promote your content across the web.
</Card>
```

<div class="preview">
<Card
title="For music lovers"
:tags="['rock', 'folk', 'punk']">
Access your personal music collection from anywhere. Funkwhale gives you access to publication and sharing tools that you can use to promote your content across the web.
</Card></div>
