ATOM
Components (registry)Layout

Data Table

Layout template: data-table

Contrato del layout

Un layout transporta anatomia, no pintura: se rellena por slots y depende del CSS de los componentes que lista. Instalarlo sin ellos lo deja sin estilos.

Slots
{{section_id}}{{header_title}}{{header_description}}{{header_cta1_href}}{{header_cta1}}{{header_cta2_href}}{{header_cta2}}{{row1_avatar}}{{row1_avatar_alt}}{{row1_name}}{{row1_email}}{{row1_company}}{{row1_prod1}}{{row1_prod2}}{{row1_prod3}}{{row1_prod4}}{{row1_team}}{{row1_date}}{{row1_link}}{{row2_avatar}}{{row2_avatar_alt}}{{row2_name}}{{row2_email}}{{row2_company}}{{row2_prod1}}{{row2_prod2}}{{row2_prod3}}{{row2_prod4}}{{row2_team}}{{row2_date}}{{row2_link}}{{row3_avatar}}{{row3_avatar_alt}}{{row3_name}}{{row3_email}}{{row3_company}}{{row3_prod1}}{{row3_prod2}}{{row3_prod3}}{{row3_prod4}}{{row3_team}}{{row3_date}}{{row3_link}}{{row4_avatar}}{{row4_avatar_alt}}{{row4_name}}{{row4_email}}{{row4_company}}{{row4_prod1}}{{row4_prod2}}{{row4_prod3}}{{row4_prod4}}{{row4_team}}{{row4_date}}{{row4_link}}{{row5_avatar}}{{row5_avatar_alt}}{{row5_name}}{{row5_email}}{{row5_company}}{{row5_prod1}}{{row5_prod2}}{{row5_prod3}}{{row5_prod4}}{{row5_team}}{{row5_date}}{{row5_link}}
Componentes requeridos
buttontypographyimagelink-button

Anatomía CSS

<div class="layoutDataTable">

</div>

Tokens resueltos

Valores finales tras seguir la cadena de tokens. Derivados del source: si un token cambia, esta tabla cambia sola.

VariantePropValorToken
allborder#e5e5e5border
allfg#0a0a0aforeground

CSS mínimo funcional

Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.

/* Layout: data-table — structure only, pure DS tokens */
.l-data-table {
  padding: 80px 32px;
}

.l-data-table__container {
  position: relative;
}

.l-data-table__header {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  border: 1px solid #e5e5e5;
  border-bottom: 0;
  padding: 24px;
}

@media (min-width: 640px) {
  .l-data-table__header {
    flex-direction: row;
    align-items: center;
  }
}

.l-data-table__header-content {
  /* text content */
}

.l-data-table__header-title {
  font-size: 16px;
  font-weight: 600;
  margin-bottom: 4px;
}

@media (min-width: 768px) {
  .l-data-table__header-title {
    font-size: 20px;
  }
}

.l-data-table__header-description {
  font-size: 16px;
  color: #525252;
}

.l-data-table__header-actions {
  display: flex;
  gap: 16px;
  margin-top: 16px;
}

@media (min-width: 640px) {
  .l-data-table__header-actions {
    margin-top: 0;
  }
}

.l-data-table__table-wrapper {
  position: relative;
  width: 100%;
  overflow: auto;
}

.l-data-table__table {
  width: 100%;
  table-layout: fixed;
  border-left: 1px solid #e5e5e5;
  border-right: 1px solid #e5e5e5;
  font-size: 12.8px;
  caption-side: bottom;
}

.l-data-table__th {
  height: 3rem;
  padding: 16px 24px;
  text-align: left;
  vertical-align: middle;
  font-size: 16px;
  font-weight: 600;
  color: #0a0a0a;
  text-decoration: underline;
  border-bottom: 1px solid #e5e5e5;
}

.l-data-table__th--name {
  width: 350px;
}

@media (min-width: 1440px) {
  .l-data-table__th--name {
    width: 478px;
  }
}

.l-data-table__th--company,
.l-data-table__th--team {
  width: 192px;
}

.l-data-table__th--products {
  width: 192px;
}

.l-data-table__th--date {
  width: 128px;
}

.l-data-table__th--action {
  width: 96px;
  text-align: center;
}

.l-data-table__td {
  height: 5rem;
  padding: 16px 24px;
  vertical-align: middle;
  font-size: 16px;
  border-bottom: 1px solid #e5e5e5;
}

.l-data-table__td--name {
  font-weight: 500;
}

.l-data-table__name-cell {
  display: grid;
  grid-template-columns: max-content 1fr;
  align-items: center;
  gap: 12px;
}

.l-data-table__avatar {
  width: 3rem;
  height: 3rem;
  border-radius: 9999px;
  object-fit: cover;
}

.l-data-table__name-info {
  width: 100%;
  max-width: 28rem;
}

.l-data-table__name {
  /* inherits */
}

.l-data-table__email {
  font-size: 12.8px;
  font-weight: var(--font-weight-normal);
  text-decoration: underline;
  color: #0a0a0a;
}

.l-data-table__td--company,
.l-data-table__td--team,
.l-data-table__td--date {
  min-width: 8rem;
  max-width: 12rem;
}

.l-data-table__td--date {
  max-width: 6rem;
}

.l-data-table__td--action {
  text-align: center;
  font-weight: 600;
  padding-block: 24px;
}

.l-data-table__products {
  position: relative;
  display: flex;
  padding-left: 0.5rem;
}

.l-data-table__product-img {
  width: 2rem;
  height: 2rem;
  border-radius: 9999px;
  border: 2px solid #e5e5e5;
  object-fit: cover;
  margin-left: -0.5rem;
}

.l-data-table__product-img:first-child {
  margin-left: 0;
}

Codigo fuente

layouts/data-table.css
/* Layout: data-table — structure only, pure DS tokens */
.l-data-table {
  padding: var(--spacing-20) var(--spacing-8);
}

.l-data-table__container {
  position: relative;
}

.l-data-table__header {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--spacing-4);
  border: 1px solid var(--border);
  border-bottom: 0;
  padding: var(--spacing-6);
}

@media (min-width: 640px) {
  .l-data-table__header {
    flex-direction: row;
    align-items: center;
  }
}

.l-data-table__header-content {
  /* text content */
}

.l-data-table__header-title {
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
  margin-bottom: var(--spacing-1);
}

@media (min-width: 768px) {
  .l-data-table__header-title {
    font-size: var(--font-size-lg);
  }
}

.l-data-table__header-description {
  font-size: var(--font-size-base);
  color: var(--muted-foreground);
}

.l-data-table__header-actions {
  display: flex;
  gap: var(--spacing-4);
  margin-top: var(--spacing-4);
}

@media (min-width: 640px) {
  .l-data-table__header-actions {
    margin-top: 0;
  }
}

.l-data-table__table-wrapper {
  position: relative;
  width: 100%;
  overflow: auto;
}

.l-data-table__table {
  width: 100%;
  table-layout: fixed;
  border-left: 1px solid var(--border);
  border-right: 1px solid var(--border);
  font-size: var(--font-size-sm);
  caption-side: bottom;
}

.l-data-table__th {
  height: 3rem;
  padding: var(--spacing-4) var(--spacing-6);
  text-align: left;
  vertical-align: middle;
  font-size: var(--font-size-base);
  font-weight: var(--font-weight-semibold);
  color: var(--foreground);
  text-decoration: underline;
  border-bottom: 1px solid var(--border);
}

.l-data-table__th--name {
  width: 350px;
}

@media (min-width: 1440px) {
  .l-data-table__th--name {
    width: 478px;
  }
}

.l-data-table__th--company,
.l-data-table__th--team {
  width: 192px;
}

.l-data-table__th--products {
  width: 192px;
}

.l-data-table__th--date {
  width: 128px;
}

.l-data-table__th--action {
  width: 96px;
  text-align: center;
}

.l-data-table__td {
  height: 5rem;
  padding: var(--spacing-4) var(--spacing-6);
  vertical-align: middle;
  font-size: var(--font-size-base);
  border-bottom: 1px solid var(--border);
}

.l-data-table__td--name {
  font-weight: var(--font-weight-medium);
}

.l-data-table__name-cell {
  display: grid;
  grid-template-columns: max-content 1fr;
  align-items: center;
  gap: var(--spacing-3);
}

.l-data-table__avatar {
  width: 3rem;
  height: 3rem;
  border-radius: var(--radius-full);
  object-fit: cover;
}

.l-data-table__name-info {
  width: 100%;
  max-width: 28rem;
}

.l-data-table__name {
  /* inherits */
}

.l-data-table__email {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-normal);
  text-decoration: underline;
  color: var(--foreground);
}

.l-data-table__td--company,
.l-data-table__td--team,
.l-data-table__td--date {
  min-width: 8rem;
  max-width: 12rem;
}

.l-data-table__td--date {
  max-width: 6rem;
}

.l-data-table__td--action {
  text-align: center;
  font-weight: var(--font-weight-semibold);
  padding-block: var(--spacing-6);
}

.l-data-table__products {
  position: relative;
  display: flex;
  padding-left: 0.5rem;
}

.l-data-table__product-img {
  width: 2rem;
  height: 2rem;
  border-radius: var(--radius-full);
  border: 2px solid var(--border);
  object-fit: cover;
  margin-left: -0.5rem;
}

.l-data-table__product-img:first-child {
  margin-left: 0;
}

On this page

Detalles

Publicado14 de mayo de 2026
Categorialayout
Lectura...
Visitas...
Ayuda?Slack

Componente

Layout/dataTable

Source

components-react / cssDisponible via MCP: atom_uikit_source("layout/data-table")