Table <mv-table>

Tabela estilizada em CSS (destaque ao passar o mouse, listras, densidade, cabeçalho/coluna fixos, status) + <mv-table> opcional para ordenação e filtragem.

CategoriaExibição de dados
TipoWeb Component (<mv-table>)
Statusestável
Keywordstable, data-table, sort, filter

When to use

  • Tabular data must be compared across rows and columns with hover, stripes and status badges
  • A long or wide dataset needs a sticky header or first column while scrolling
  • Light client-side sorting and a search filter are enough, without pagination or selection

Avoid when

  • Rows need selection, bulk actions, column visibility, value filters or pagination → use Data table instead
  • Each item has rich mixed content rather than comparable columns → use Card instead
  • Hundreds or thousands of rows would sit in the DOM at once; nothing is virtualized or paginated → use Data table instead

Instalação

node scripts/add.mjs table --out ./src/marvelous

Agente de IA com o servidor MCP do Marvelous UI: install_components({ slugs: ["table"], target_dir: "<absolute path>/src/marvelous", framework: "react" }).

Arquivos copiados (dependências incluídas): tokens/tokens.css, core/base.css, core/element.js, components/table/table.css, components/table/table.js.

Uso

Marcação de referência, para usar como ponto de partida e personalizar com atributos, data-* e variáveis CSS:

<div style="display:grid;gap:.75rem;width:100%">
  <input id="table-demo-filter" type="search" placeholder="Filter invoices…" aria-label="Filter" style="max-width:16rem;height:2.25rem;padding:0 .75rem;border:1px solid var(--mv-input);border-radius:var(--mv-radius-md);background:var(--mv-bg);color:inherit;font-size:.875rem">
  <mv-table filter-input="#table-demo-filter">
    <div class="mv-table-wrap">
      <table class="mv-table" data-hover>
        <thead>
          <tr>
            <th data-sort="text">Invoice</th>
            <th data-sort="text">Customer</th>
            <th>Status</th>
            <th data-sort="date">Date</th>
            <th data-sort="number" data-align="end">Amount</th>
          </tr>
        </thead>
        <tbody>
          <tr><td>INV-0042</td><td>Brightline Studio</td><td><span class="mv-table-status" data-status="success">Paid</span></td><td data-value="2026-09-18">Sep 18, 2026</td><td data-align="end" data-value="2450">$2,450.00</td></tr>
          <tr><td>INV-0041</td><td>Nova Publishing</td><td><span class="mv-table-status" data-status="warning">Pending</span></td><td data-value="2026-09-12">Sep 12, 2026</td><td data-align="end" data-value="980">$980.00</td></tr>
          <tr><td>INV-0040</td><td>Studio Kōan</td><td><span class="mv-table-status" data-status="danger">Overdue</span></td><td data-value="2026-08-29">Aug 29, 2026</td><td data-align="end" data-value="5120">$5,120.00</td></tr>
          <tr><td>INV-0039</td><td>Opal Brewing Co.</td><td><span class="mv-table-status" data-status="success">Paid</span></td><td data-value="2026-08-21">Aug 21, 2026</td><td data-align="end" data-value="312.5">$312.50</td></tr>
        </tbody>
        <tfoot><tr><td colspan="4">Total</td><td data-align="end">$8,862.50</td></tr></tfoot>
      </table>
    </div>
  </mv-table>
</div>

API

Attributes

NameTipoDescription
data-hover / data-striped / data-borderedbooleanOn .mv-table.
data-densitycompactTighter cells.
data-sticky / data-sticky-columnbooleanSticky header / first column.
data-alignend | centerCell alignment.
th[data-sort]text | number | dateSortable column (with <mv-table>).
td[data-value]stringSort value when it differs from the displayed text.
filter-inputselectorSearch field wired to the filter.

Methods

NameDescription
sort(index, direction, type)Sorts the rows.
filter(query)Hides rows that don’t contain the query.

Events

NameDescription
mv-sortdetail: { index, direction }.
mv-filterdetail: { query, visible }.

CSS classes

NameDescription
mv-table-wrapScrolling container with border and radius.
mv-tableOn <table>.
mv-table-statusStatus badge (data-status=success|warning|danger|info).
mv-table-mutedSecondary text.

Accessibility

aria-sort is updated on sortable headers, with native buttons inside the <th>. Keep a <caption> or aria-label on the table.

Esta página foi traduzida com IA. Informar um problema de tradução