VxCard
Card container customizado — wrapper sobre div nativa (não sobre vs-card do Vuesax) com suporte a título, subtítulo, collapse animado, refresh com loading overlay, remoção animada e toggle de código para demos. O componente mais usado do projeto.
Sem Header (conteúdo direto) Real
Card branco com sombra e border-radius, sem título — o header não renderiza quando não há title/subtitle/actions. Padrão para cards que envolvem conteúdo estruturado como tabelas.
Conteúdo principal do card
<vx-card class="mb-8">
<vs-table stripe pagination :max-items="10" search :data="tableData">
<!-- ... -->
</vs-table>
</vx-card>
Com Título Real
Card com header exibindo h4 título. O slot actions substitui os botões padrão por conteúdo customizado (ícone, menu, etc).
Dados de receita aqui
<vx-card title="Revenue">
<template slot="actions">
<feather-icon icon="SettingsIcon" svgClasses="w-6 h-6 text-grey" />
</template>
<div slot="no-body" class="p-6 pb-0">
<!-- conteúdo sem padding -->
</div>
</vx-card>
Com Título e Subtítulo Sintético
Subtítulo exibido como h6 abaixo do título com cor cinza (#b8c2cc). A prop subtitle existe na implementação mas não foi encontrada em nenhum dos 93 usos reais.
Conteúdo das configurações
<!-- Exemplo sintético — prop subtitle sem uso real encontrado no admin -->
<vx-card
title="Configurações de Notificações"
subtitle="Gerencie como e quando você recebe alertas"
>
<!-- conteúdo -->
</vx-card>
Conteúdo sem Padding (slot no-body) Real
Slot no-body posicionado antes do slot default — conteúdo ocupa a largura total sem o padding de 1.5rem. Padrão dos statistics cards: ícone + dado + gráfico full-width.
<vx-card class="overflow-hidden">
<div slot="no-body">
<div class="p-6 pb-0 flex items-center">
<feather-icon
:icon="icon"
class="p-3 inline-flex rounded-full"
:class="[`text-${color}`]"
/>
<div class="truncate">
<h2 class="mb-1 font-bold">{{ statistic }}</h2>
<span>{{ statisticTitle }}</span>
</div>
</div>
<div class="line-area-chart">
<vue-apex-charts type="area" height="100" :options="chartOptions" :series="chartData" />
</div>
</div>
</vx-card>
Sem Sombra Real
Card sem box-shadow — aplica classe CSS no-shadow. Usado nas páginas de configurações onde o card é o conteúdo principal da rota, dispensando elevação.
Este card não tem box-shadow
<vx-card no-shadow>
<div class="flex flex-wrap justify-between items-center mb-8">
<!-- conteúdo -->
</div>
</vx-card>
Com Borda (sem sombra) Real
card-border adiciona borda 1px solid #e4e4e4. Padrão para widgets e cards aninhados em áreas com fundo delimitado.
62% utilizado
<vx-card class="plan-usage-widget" card-border>
<div class="plan-usage-header">
<feather-icon icon="ZapIcon" class="plan-usage-icon" :class="progressTextClass" />
<div>
<p class="plan-usage-title">Consumo do Plano</p>
<p class="plan-usage-subtitle">Monitore o uso da sua conta.</p>
</div>
</div>
<!-- ... -->
</vx-card>
Com Colapso Real
collapse-action exibe botão ChevronUp no header — clique anima o conteúdo para altura 0. Emite @toggleCollapse com payload Boolean.
Conteúdo colapsável do card.
<vx-card title="Configurações Avançadas" collapse-action>
<p>Conteúdo colapsável do card.</p>
</vx-card>
Com Botões de Ação (collapse + refresh + remove) Real
action-buttons ativa os 3 botões simultaneamente. @refresh recebe a instância do card — é obrigatório chamar card.removeRefreshAnimation() ao terminar o reload.
Conteúdo que será recarregado.
<vx-card title="Pedidos Recentes" action-buttons @refresh="reloadOrders">
<!-- conteúdo que será recarregado -->
</vx-card>
<!-- No methods: -->
<!-- reloadOrders(card) { -->
<!-- fetchOrders().then(() => card.removeRefreshAnimation()) -->
<!-- } -->
Sem Border-Radius Sintético
no-radius remove o border-radius aplicando a classe Tailwind rounded-none. Útil em painéis full-width. Sem uso real encontrado no admin.
Card com cantos retos
<!-- Exemplo sintético — no-radius sem uso real encontrado no admin -->
<vx-card title="Relatório Completo" no-radius no-shadow>
<!-- conteúdo full-width -->
</vx-card>
Background Colorido Sintético
card-background aceita token Vuesax (primary, success, danger, warning) ou hex/rgb. Sem uso real com card-background encontrado no admin.
Conteúdo com fundo na cor primária do sistema.
<!-- Exemplo sintético — card-background sem uso real encontrado no admin -->
<vx-card card-background="primary" no-shadow>
<p class="text-white">Conteúdo com fundo na cor primária do sistema.</p>
</vx-card>
API
Exemplo com principais props
<!-- title/subtitle: texto no header (h4/h6). Header só renderiza se houver título, subtítulo ou action. -->
<!-- action-buttons: collapse + refresh + remove. collapse-action: só collapse. -->
<!-- card-border: borda 1px. no-shadow: remove sombra. no-radius: sem border-radius. -->
<vx-card
title="Pedidos do Dia"
subtitle="Atualizado há 5 minutos"
:collapse-action="true"
card-border
no-shadow
@toggleCollapse="onCollapse"
>
<!-- Slot default: padding 1.5rem -->
<p>Conteúdo principal</p>
<!-- Slot no-body: sem padding, antes do default -->
<div slot="no-body">
<img src="..." class="w-full" />
</div>
<!-- Slot no-body-bottom: sem padding, após o default -->
<div slot="no-body-bottom">
<vue-apex-charts ... />
</div>
<!-- Slot footer: padding 0 1.5rem 1.5rem -->
<div slot="footer">
<vs-button>Ação</vs-button>
</div>
</vx-card>
Props
| Nome | Tipo | Default | Obrig. | Descrição |
|---|---|---|---|---|
| title | String | null | não | Título exibido como h4 no header. Quando ausente (junto com subtitle e hasAction), o header inteiro não renderiza. |
| subtitle | String | null | não | Subtítulo exibido como h6 abaixo do título. Cor padrão #b8c2cc (grey). |
| actionButtons | Boolean | false | não | Ativa os 3 botões de ação: collapse (ChevronUp), refresh (RotateCw) e remove (X). |
| actionButtonsColor | String | "success" | não | Cor dos botões de ação. Aceita nomes Vuesax (primary, success, danger, etc.) ou hex. |
| collapseAction | Boolean | false | não | Mostra apenas o botão de collapse (ChevronUp) no header. |
| refreshContentAction | Boolean | false | não | Mostra apenas o botão de refresh (RotateCw) no header. |
| removeCardAction | Boolean | false | não | Mostra apenas o botão de remoção (X) no header. |
| noShadow | Boolean | false | não | Remove o box-shadow do card. Aplica classe CSS no-shadow. |
| noRadius | Boolean | false | não | Remove o border-radius do card. Aplica classe Tailwind rounded-none. |
| cardBorder | Boolean | false | não | Adiciona borda 1px solid #e4e4e4. Aplica classe card-border. Frequentemente usado com no-shadow. |
| cardBackground | String | "" | não | Background do card. Token Vuesax aplica classe Tailwind bg-{cor}; hex aplica inline style. |
| contentColor | String | "" | não | Cor do texto do conteúdo. Token Vuesax ou hex/rgb. |
| titleColor | String | "" | não | Cor do título h4. Token Vuesax ou hex/rgb. |
| subtitleColor | String | "#b8c2cc" | não | Cor do subtítulo h6. Default é o grey (#b8c2cc) do sistema. |
| codeToggler | Boolean | false | não | Botão de toggle do bloco de código (CodeIcon). Usado nas páginas de demo do Vuexy. Mutualmente exclusivo com actionButtons. |
| codeLanguage | String | "markup" | não | Linguagem para highlight via vue-prism-component no slot codeContainer. |
| headerBackground | String | "" | não | Background do header. Prop existe mas sem implementação ativa no computed. |
Slots
| Nome | Descrição |
|---|---|
| default | Conteúdo principal. Renderizado dentro de .vx-card__body com padding 1.5rem. |
| no-body | Conteúdo sem padding, posicionado antes do slot default. Para imagens full-bleed no topo ou tabelas sem padding. |
| no-body-bottom | Conteúdo sem padding, posicionado após o slot default. Para rodapés sem padding ou gráficos full-width. |
| footer | Rodapé do card. Renderizado em .vx-card__footer com padding 0 1.5rem 1.5rem. |
| actions | Substitui completamente os botões de ação no header. Quando presente, ignora actionButtons/collapseAction/etc. |
| codeContainer | Código-fonte exibido no painel expansível abaixo do card (syntax highlight via Prism). Só aparece quando codeToggler=true. |
Eventos
| Nome | Payload | Descrição |
|---|---|---|
| toggleCollapse | Boolean | Emitido ao colapsar/expandir. true = colapsado, false = expandido. |
| refresh | VxCard (instância) | Emitido ao clicar no botão refresh. O pai deve chamar card.removeRefreshAnimation() quando o dado estiver recarregado. |
| remove | — | Emitido após a animação de remoção (card colapsa em altura até 0px). |
Métodos públicos
| Método | Params | Descrição |
|---|---|---|
| removeRefreshAnimation() | time = 100ms | Chamado pelo pai após o refresh de dados para fechar o loading overlay. Exemplo: @refresh="refreshData" → refreshData(card) { fetch().then(() => card.removeRefreshAnimation()) } |
Dependências
Onde é usado (amostra)
- src/views/DashboardECommerce.vue
- src/views/instances/InstancesList.vue
- src/views/customer-bases/CustomerBasesForm.vue
- src/components/statistics-cards/StatisticsCardLine.vue
- src/components/attendance/plan-usage-widget.vue
- + 88 outros arquivos