257 lines
6.6 KiB
Markdown
257 lines
6.6 KiB
Markdown
<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>
|