Ir al contenido

Descriptions

Muestra pares clave-valor en un formato estructurado y legible.

import { Descriptions } from 'asterui'

Descriptions Básico

Visualización simple de clave-valor.

NameJohn DoeEmailjohn@example.comPhone+1 234 567 890
LocationSan Francisco, CAStatusActive
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'John Doe' },
    { key: 'email', label: 'Email', children: 'john@example.com' },
    { key: 'phone', label: 'Phone', children: '+1 234 567 890' },
    { key: 'location', label: 'Location', children: 'San Francisco, CA' },
    { key: 'status', label: 'Status', children: 'Active' },
  ]
  
  return (
      <Descriptions items={items} />
    )
}

export default App

Con Bordes

Descriptions con bordes.

Order Details
Order Details
ProductAsterUI ProPrice$99.00Quantity2
Total$198.00
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'product', label: 'Product', children: 'AsterUI Pro' },
    { key: 'price', label: 'Price', children: '$99.00' },
    { key: 'quantity', label: 'Quantity', children: '2' },
    { key: 'total', label: 'Total', children: '$198.00' },
  ]
  
  return (
      <Descriptions items={items} bordered title="Order Details" />
    )
}

export default App

Tamaños

Diferentes variantes de tamaño.

Small
Small
NameJane SmithRoleEngineerTeamFrontend
Medium
Medium
NameJane SmithRoleEngineerTeamFrontend
Large
Large
NameJane SmithRoleEngineerTeamFrontend
import { Descriptions, Space } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'Jane Smith' },
    { key: 'role', label: 'Role', children: 'Engineer' },
    { key: 'team', label: 'Team', children: 'Frontend' },
  ]
  
  return (
      <Space direction="vertical" size="lg" className="w-full">
        <Descriptions items={items} size="sm" bordered title="Small" />
        <Descriptions items={items} size="md" bordered title="Medium" />
        <Descriptions items={items} size="lg" bordered title="Large" />
      </Space>
    )
}

export default App

Título con Extra

Título y contenido adicional en el encabezado.

User Profile
User Profile
NameJohn DoeEmailjohn@example.comStatus
Active
import { Descriptions, Button, Badge } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'John Doe' },
    { key: 'email', label: 'Email', children: 'john@example.com' },
    { key: 'status', label: 'Status', children: <Badge color="success">Active</Badge> },
  ]
  
  return (
      <Descriptions
        items={items}
        bordered
        title="User Profile"
        extra={<Button size="sm">Edit</Button>}
      />
    )
}

export default App

Diseño Vertical

Diseño vertical de etiqueta y contenido.

CreatedUpdatedAuthor
2024-01-15 10:30:002024-01-20 14:45:00Jane Smith
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'created', label: 'Created', children: '2024-01-15 10:30:00' },
    { key: 'updated', label: 'Updated', children: '2024-01-20 14:45:00' },
    { key: 'author', label: 'Author', children: 'Jane Smith' },
  ]
  
  return (
      <Descriptions items={items} layout="vertical" bordered />
    )
}

export default App

Columnas Personalizadas

Controla el número de columnas.

NameAlice JohnsonAge28
GenderFemaleOccupationSoftware Engineer
DepartmentEngineeringStart Date2022-03-15
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'Alice Johnson' },
    { key: 'age', label: 'Age', children: '28' },
    { key: 'gender', label: 'Gender', children: 'Female' },
    { key: 'occupation', label: 'Occupation', children: 'Software Engineer' },
    { key: 'department', label: 'Department', children: 'Engineering' },
    { key: 'start-date', label: 'Start Date', children: '2022-03-15' },
  ]
  
  return (
      <Descriptions items={items} column={2} bordered />
    )
}

export default App

Columnas Responsivas

Las columnas se ajustan según el ancho de la ventana.

Resize window to see columns change
Resize window to see columns change
Field 1Value 1Field 2Value 2Field 3Value 3
Field 4Value 4Field 5Value 5Field 6Value 6
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'field1', label: 'Field 1', children: 'Value 1' },
    { key: 'field2', label: 'Field 2', children: 'Value 2' },
    { key: 'field3', label: 'Field 3', children: 'Value 3' },
    { key: 'field4', label: 'Field 4', children: 'Value 4' },
    { key: 'field5', label: 'Field 5', children: 'Value 5' },
    { key: 'field6', label: 'Field 6', children: 'Value 6' },
  ]
  
  return (
      <Descriptions
        items={items}
        bordered
        column={{ xs: 1, sm: 2, md: 3, lg: 4 }}
        title="Resize window to see columns change"
      />
    )
}

export default App

Con Expansión de Columnas

Elementos que abarcan múltiples columnas.

NameProduct XSKUPRD-12345CategoryElectronics
DescriptionA detailed product description that spans multiple columns for better readability.
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'Product X' },
    { key: 'sku', label: 'SKU', children: 'PRD-12345' },
    { key: 'category', label: 'Category', children: 'Electronics' },
    { key: 'description', label: 'Description', children: 'A detailed product description that spans multiple columns for better readability.', span: 3 },
  ]
  
  return (
      <Descriptions items={items} bordered />
    )
}

export default App

Expansión Rellena

Elementos que llenan el espacio restante de la fila.

NameJohn DoeNotesThis field fills the remaining space in the row.
Emailjohn@example.comPhone+1 234 567 890Address123 Main St, San Francisco, CA 94102
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'John Doe' },
    { key: 'notes', label: 'Notes', children: 'This field fills the remaining space in the row.', span: 'filled' as const },
    { key: 'email', label: 'Email', children: 'john@example.com' },
    { key: 'phone', label: 'Phone', children: '+1 234 567 890' },
    { key: 'address', label: 'Address', children: '123 Main St, San Francisco, CA 94102', span: 'filled' as const },
  ]
  
  return (
      <Descriptions items={items} bordered />
    )
}

export default App

Sin Dos Puntos

Oculta los dos puntos después de las etiquetas.

Field OneValue OneField TwoValue TwoField ThreeValue Three
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'field1', label: 'Field One', children: 'Value One' },
    { key: 'field2', label: 'Field Two', children: 'Value Two' },
    { key: 'field3', label: 'Field Three', children: 'Value Three' },
  ]
  
  return (
      <Descriptions items={items} colon={false} bordered />
    )
}

export default App

Estilos Personalizados

Aplica estilos y clases personalizadas a partes semánticas.

Custom Styled
Custom Styled
NameJane DoeHighlightedThis item has custom stylesStatusActive
import { Descriptions } from 'asterui'

function App() {
  const items = [
    { key: 'name', label: 'Name', children: 'Jane Doe' },
    { key: 'highlight', label: 'Highlighted', children: 'This item has custom styles', labelClassName: 'text-primary', contentClassName: 'text-accent font-bold' },
    { key: 'status', label: 'Status', children: 'Active' },
  ]
  
  return (
      <Descriptions
        items={items}
        bordered
        styles={{
          label: { backgroundColor: 'oklch(var(--b2))' },
          content: { backgroundColor: 'oklch(var(--b1))' },
        }}
        classNames={{
          title: 'text-primary',
        }}
        title="Custom Styled"
      />
    )
}

export default App

Patrón Compuesto

Usa elementos hijos Descriptions.Item en lugar de la prop items.

Using Compound Pattern
Using Compound Pattern
NameJohn DoeEmailjohn@example.comPhone+1 234 567 890
Address123 Main Street, San Francisco, CA 94102
import { Descriptions } from 'asterui'

function App() {
  const { Item } = Descriptions
  
  return (
      <Descriptions bordered title="Using Compound Pattern">
        <Item key="name" label="Name">John Doe</Item>
        <Item key="email" label="Email">john@example.com</Item>
        <Item key="phone" label="Phone">+1 234 567 890</Item>
        <Item key="address" label="Address" span={3}>
          123 Main Street, San Francisco, CA 94102
        </Item>
      </Descriptions>
    )
}

export default App
PropiedadDescripciónTipoPredeterminado
itemsElementos de descripción (alternativa a children)DescriptionsItemConfig[]-
titleTítulo del bloque de descripcionesReact.ReactNode-
extraContenido adicional en la esquina superior derechaReact.ReactNode-
columnNúmero de columnas (o configuración responsiva)number | { xs?, sm?, md?, lg?, xl?, 2xl? }3
borderedMostrar bordes alrededor de las celdasbooleanfalse
layoutDirección del diseño'horizontal' | 'vertical''horizontal'
sizeVariante de tamaño'sm' | 'md' | 'lg''md'
colonMostrar dos puntos después de las etiquetasbooleantrue
stylesEstilos semánticos para partes del componentePartial<Record<SemanticDOM, CSSProperties>>-
classNamesNombres de clase semánticos para partes del componentePartial<Record<SemanticDOM, string>>-
labelStyleEstilos de etiqueta predeterminados (obsoleto, usa styles.label)React.CSSProperties-
contentStyleEstilos de contenido predeterminados (obsoleto, usa styles.content)React.CSSProperties-
classNameClases CSS adicionalesstring-
styleEstilos en línea para el elemento raízReact.CSSProperties-
data-testidID de prueba para el componentestring'descriptions'
PropiedadDescripciónTipoPredeterminado
keyClave única para el elemento (usada para IDs de prueba y claves de React)string-
labelEtiqueta para el elementoReact.ReactNode-
childrenContenido del elementoReact.ReactNode-
spanNúmero de columnas que abarca, o ‘filled’ para llenar el espacio restantenumber | 'filled'1
labelStyleEstilos de etiqueta personalizadosReact.CSSProperties-
contentStyleEstilos de contenido personalizadosReact.CSSProperties-
labelClassNameClase de etiqueta personalizadastring-
contentClassNameClase de contenido personalizadastring-
PropiedadDescripciónTipoPredeterminado
keyClave de React, extraída por el padrestring-
itemKeyClave explícita (alternativa a la clave de React)string-
labelEtiqueta para el elementoReact.ReactNode-
childrenContenido del elementoReact.ReactNode-
spanNúmero de columnas que abarca, o ‘filled’number | 'filled'1
labelStyleEstilos de etiqueta personalizadosReact.CSSProperties-
contentStyleEstilos de contenido personalizadosReact.CSSProperties-
labelClassNameClase de etiqueta personalizadastring-
contentClassNameClase de contenido personalizadastring-
PropiedadDescripciónTipo
rootElemento contenedor raíz-
headerEncabezado que contiene título y extra-
titleElemento de título-
extraElemento de contenido adicional-
tableElemento de tabla-
labelCeldas de etiqueta (elementos th)-
contentCeldas de contenido (elementos td)-
  • Usa marcado semántico <table> para una estructura adecuada
  • Las celdas de encabezado usan el atributo scope para lectores de pantalla
  • La tabla tiene un elemento <caption> (visualmente oculto) cuando se proporciona un título
  • Las celdas de contenido tienen aria-labelledby vinculando a sus etiquetas
  • Los dos puntos después de las etiquetas están marcados con aria-hidden para evitar anuncios redundantes