Appearance
Appearance
import Pill from "@ui/Pill.vue"Pills are decorative elements that display information about content they attach to. They can be links to other content or simple colored labels.
You can add text to pills by adding it between the <Pill> tags. Alternatively, you can set v-model and make the pill editable.
{ noUnderline?: true,
cancel?: string,
autofocus?: boolean
} & (PastelProps | ColorProps | DefaultProps)
& VariantProps
& RaisedProps-> Let the user create lists of pills
NOTE
Make sure to convey the intent of the pill in an accessible way. Do not omit the text content. If you are forced to use only icons/images as the contents of a pill, label them with meaningful alt text. Read more on form field labelling
Primary pills convey positive information.
<Pill primary>
Primary pill
</Pill>Secondary pills convey neutral or simple decorational information such as genre tags.
INFO
This is the default type for pills. If you don't specify a type, a secondary pill is rendered.
<Pill>
Secondary pill
</Pill>Destructive pills convey destructive or negative information. Use these to indicate that information could cause issues such as data loss.
<Pill destructive>
Destructive pill
</Pill>Funkwhale pills support a range of pastel colors to create visually appealing interfaces.
<Pill blue>
Blue pill
</Pill><Pill red>
Red pill
</Pill><Pill purple>
Purple pill
</Pill><Pill green>
Green pill
</Pill><Pill yellow>
Yellow pill
</Pill>Image pills contain a small circular image on their left. These can be used for decorative links such as artist links. To created an image pill, insert a link to the image between the pill tags as a <template>.
<Pill>
<template #image>
<div style="background-color: #ff0" />
</template>
Awesome artist
</Pill><Pill>
<template #image>
<div style="background-color: currentcolor; width: 8px; height: 8px; margin: 8px;" />
</template>
<span style="margin-left: -12px;">
Awesome artist
</span>
</Pill>Add v-model="..." to link the pill content to a ref with one current item and zero or more others. Set each item's type to preset or custom.
current item can be changed by the user.other items can be selected instead of the current.custom can be edited and deleted by the user. preset items can only be selected or deselected.import { ref } from "vue"
const current = ref({ type: 'custom', label: 'I-am-custom.-Change-me!' })
const others = ref([
{ type: 'preset', label: 'Preset-1' },
{ type: 'preset', label: 'Preset-2' },
{ type: 'preset', label: 'Preset-3' },
])<Pill
v-model:current="current"
v-model:others="others"
/><Pill @click="alert('Primary')"> Open alert on click </Pill>If the pill content does not describe what the pill does, add an accessible label:
<Pill
v-model:current="current"
v-model:others="others"
>
<template #action>
<Button ghost primary round icon="bi-x"
aria-label="Deselect"
title="Deselect"
@click.stop.prevent="() => {
if (customTag.current.type === 'custom')
customTag.others.push({...customTag.current});
customTag.current = {label: '', type: 'custom'}
}"
/>
</template>
</Pill>{ "type": "custom", "label": "I-am-custom.-Change-me!" } (+ 3 other options)
With the css variable --cursor, you can override the default (pointer):
--cursor: text;