VxCard

src/components/vx-card/VxCard.vue
Display Medium complexity 93 usos no admin

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

src/views/customer-bases/CustomerBasesForm.vue:29
<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).

Revenue

Dados de receita aqui

src/views/DashboardECommerce.vue:51
<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.

Configurações de Notificações
Gerencie como e quando você recebe alertas

Conteúdo das configurações

Exemplo sintético
<!-- 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.

1.248
Conversas hoje
src/components/statistics-cards/StatisticsCardLine.vue:2
<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.

Sem sombra

Este card não tem box-shadow

src/views/pages/user-settings/UserSettingsConnections.vue:2
<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.

Consumo do Plano
Monitore o uso da sua conta

62% utilizado

src/components/attendance/plan-usage-widget.vue:2
<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.

Configurações Avançadas

Conteúdo colapsável do card.

src/views/ui-elements/card/CardActions.vue:34
<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.

Pedidos Recentes

Conteúdo que será recarregado.

src/views/ui-elements/card/CardActions.vue:6
<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.

Relatório Completo

Card com cantos retos

Exemplo sintético
<!-- 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
<!-- 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

NomeTipoDefaultObrig.Descrição
titleStringnullnãoTítulo exibido como h4 no header. Quando ausente (junto com subtitle e hasAction), o header inteiro não renderiza.
subtitleStringnullnãoSubtítulo exibido como h6 abaixo do título. Cor padrão #b8c2cc (grey).
actionButtonsBooleanfalsenãoAtiva os 3 botões de ação: collapse (ChevronUp), refresh (RotateCw) e remove (X).
actionButtonsColorString"success"nãoCor dos botões de ação. Aceita nomes Vuesax (primary, success, danger, etc.) ou hex.
collapseActionBooleanfalsenãoMostra apenas o botão de collapse (ChevronUp) no header.
refreshContentActionBooleanfalsenãoMostra apenas o botão de refresh (RotateCw) no header.
removeCardActionBooleanfalsenãoMostra apenas o botão de remoção (X) no header.
noShadowBooleanfalsenãoRemove o box-shadow do card. Aplica classe CSS no-shadow.
noRadiusBooleanfalsenãoRemove o border-radius do card. Aplica classe Tailwind rounded-none.
cardBorderBooleanfalsenãoAdiciona borda 1px solid #e4e4e4. Aplica classe card-border. Frequentemente usado com no-shadow.
cardBackgroundString""nãoBackground do card. Token Vuesax aplica classe Tailwind bg-{cor}; hex aplica inline style.
contentColorString""nãoCor do texto do conteúdo. Token Vuesax ou hex/rgb.
titleColorString""nãoCor do título h4. Token Vuesax ou hex/rgb.
subtitleColorString"#b8c2cc"nãoCor do subtítulo h6. Default é o grey (#b8c2cc) do sistema.
codeTogglerBooleanfalsenãoBotão de toggle do bloco de código (CodeIcon). Usado nas páginas de demo do Vuexy. Mutualmente exclusivo com actionButtons.
codeLanguageString"markup"nãoLinguagem para highlight via vue-prism-component no slot codeContainer.
headerBackgroundString""nãoBackground do header. Prop existe mas sem implementação ativa no computed.

Slots

NomeDescrição
defaultConteúdo principal. Renderizado dentro de .vx-card__body com padding 1.5rem.
no-bodyConteúdo sem padding, posicionado antes do slot default. Para imagens full-bleed no topo ou tabelas sem padding.
no-body-bottomConteúdo sem padding, posicionado após o slot default. Para rodapés sem padding ou gráficos full-width.
footerRodapé do card. Renderizado em .vx-card__footer com padding 0 1.5rem 1.5rem.
actionsSubstitui completamente os botões de ação no header. Quando presente, ignora actionButtons/collapseAction/etc.
codeContainerCódigo-fonte exibido no painel expansível abaixo do card (syntax highlight via Prism). Só aparece quando codeToggler=true.

Eventos

NomePayloadDescrição
toggleCollapseBooleanEmitido ao colapsar/expandir. true = colapsado, false = expandido.
refreshVxCard (instância)Emitido ao clicar no botão refresh. O pai deve chamar card.removeRefreshAnimation() quando o dado estiver recarregado.
removeEmitido após a animação de remoção (card colapsa em altura até 0px).

Métodos públicos

MétodoParamsDescrição
removeRefreshAnimation()time = 100msChamado pelo pai após o refresh de dados para fechar o loading overlay. Exemplo: @refresh="refreshData"refreshData(card) { fetch().then(() => card.removeRefreshAnimation()) }

Dependências

FeatherIcon (feather-icon) vue-prism-component src/assets/utils/color.js vxCard.scss

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