Vitral 0.2
Botão

Button

Um comando em oito severidades, quatro variantes e três tamanhos, com ícones, estado de carregamento, badge e renderização como link.

Importação

main.ts
import { Button } from '@vitral/vue';

Severidades

Preenchido é a variante padrão. `secondary` é o botão discreto de uma barra de ferramentas; `primary` é o que confirma.

<script setup lang="ts">import { Button } from '@vitral/vue'; const severities = ['primary', 'secondary', 'success', 'info', 'warn', 'danger', 'help', 'contrast'] as const;</script> <template>    <Button v-for="s in severities" :key="s" :label="s" :severity="s" /></template>

Outlined

<script setup lang="ts">import { Button } from '@vitral/vue'; const severities = ['primary', 'secondary', 'success', 'info', 'warn', 'danger', 'help', 'contrast'] as const;</script> <template>    <Button v-for="s in severities" :key="s" :label="s" :severity="s" variant="outlined" /></template>

Texto

<script setup lang="ts">import { Button } from '@vitral/vue'; const severities = ['primary', 'secondary', 'success', 'info', 'warn', 'danger', 'help', 'contrast'] as const;</script> <template>    <Button v-for="s in severities" :key="s" :label="s" :severity="s" variant="text" /></template>

Ícones

<script setup lang="ts">import { Button } from '@vitral/vue';</script> <template>    <Button label="New" icon="plus" />    <Button label="Next" icon="arrowRight" icon-pos="right" severity="secondary" />    <Button label="Upload" icon="upload" icon-pos="top" severity="secondary" variant="outlined" />    <Button icon="search" aria-label="Search" />    <Button icon="trash" severity="danger" variant="text" aria-label="Delete" />    <Button icon="star" rounded severity="warn" aria-label="Favourite" /></template>

Ícones de qualquer lugar

Um ícone importado, o componente de outra biblioteca ou markup SVG confiável. As classes de uma fonte de ícones também funcionam: `icon="fa-solid fa-user"`, depois que a folha de estilos dela estiver na página.

<script setup lang="ts">import { graduationCap } from '@vitral/icons';import { Button } from '@vitral/vue';import { h } from 'vue'; // Stands in for another library's icon component (lucide-vue-next, @iconify/vue…).const Sparkle = () =>    h('svg', { viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, [        h('path', { d: 'M12 3v4M12 17v4M3 12h4M17 12h4M6 6l2.5 2.5M15.5 15.5L18 18M6 18l2.5-2.5M15.5 8.5L18 6' })    ]);const markup = '<svg viewBox="0 0 24 24" fill="currentColor"><circle cx="12" cy="12" r="6"/></svg>';</script> <template>    <Button label="Course" :icon="graduationCap" severity="secondary" />    <Button label="Component" :icon="Sparkle" severity="secondary" />    <Button label="Markup" :icon="markup" severity="secondary" /></template>

Tamanhos e formato

<script setup lang="ts">import { Button } from '@vitral/vue';</script> <template>    <Button label="Small" size="small" />    <Button label="Normal" />    <Button label="Large" size="large" />    <Button label="Rounded" rounded severity="help" />    <Button label="Raised" raised severity="secondary" /></template>

Estados

Carregando, o botão fica desabilitado e recebe aria-busy.

A link
<script setup lang="ts">import { Button } from '@vitral/vue';import { ref } from 'vue'; const loading = ref(false); function load() {    loading.value = true;    setTimeout(() => (loading.value = false), 1600);}</script> <template>    <Button label="Save" icon="check" :loading="loading" @click="load" />    <Button label="Disabled" disabled />    <Button label="Notifications" icon="bell" badge="8" severity="secondary" />    <Button as="a" href="https://github.com/vitralui/vitral" target="_blank" label="A link" icon="externalLink" icon-pos="right" variant="link" /></template>

API

Lido de packages/vue/src/components/Button/types.ts, então diz o que o componente aceita de fato.

Props

NomeTipoDescrição
labelstring—
iconIconProp—
iconPos'left' | 'right' | 'top' | 'bottom'—
loadingbooleanMostra um spinner, desabilita o botão e o marca como ocupado.
loadingIconIconProp—
severityButtonSeverity—
variantButtonVariant—
sizeSize—
roundedboolean—
raisedboolean—
fluidboolean—
badgestring | number—
disabledboolean—
type'button' | 'submit' | 'reset'—
asstring | ComponentRenderiza como outro elemento ou componente (`'a'`, `RouterLink`), mantendo a aparência e o comportamento do botão.

Mais pt, dt e unstyled de BaseProps; veja pass-through e modo sem estilo.

Slots

NomeProps do slotDescrição
default——
icon——
loadingicon——