Pular para o conteúdo

Descriptions

Exiba pares chave-valor em um formato estruturado e legível.

import { Descriptions } from 'asterui'

Descriptions Básico

Exibição simples de chave-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

Com Bordas

Descriptions com bordas.

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

Tamanhos

Diferentes variantes de tamanho.

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 com Extra

Título e conteúdo extra no cabeçalho.

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

Layout Vertical

Layout de rótulo e conteúdo vertical.

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

Colunas Personalizadas

Controle o número de colunas.

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

Colunas Responsivas

Colunas se ajustam com base na largura da viewport.

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

Com Extensão de Coluna

Itens que ocupam várias colunas.

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

Extensão Preenchida

Itens que preenchem o espaço restante da linha.

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

Sem Dois-pontos

Ocultar os dois-pontos após os rótulos.

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

Aplicar estilos e classes personalizadas às 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

Padrão Composto

Use filhos Descriptions.Item em vez da 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
PropriedadeDescriçãoTipoPadrão
itemsItens de descrição (alternativa a children)DescriptionsItemConfig[]-
titleTítulo do bloco de descriçõesReact.ReactNode-
extraConteúdo extra no canto superior direitoReact.ReactNode-
columnNúmero de colunas (ou configuração responsiva)number | { xs?, sm?, md?, lg?, xl?, 2xl? }3
borderedMostrar bordas ao redor das célulasbooleanfalse
layoutDireção do layout'horizontal' | 'vertical''horizontal'
sizeVariante de tamanho'sm' | 'md' | 'lg''md'
colonMostrar dois-pontos após rótulosbooleantrue
stylesEstilos semânticos para partes do componentePartial<Record<SemanticDOM, CSSProperties>>-
classNamesClassNames semânticos para partes do componentePartial<Record<SemanticDOM, string>>-
labelStyleEstilos de rótulo padrão (obsoleto, use styles.label)React.CSSProperties-
contentStyleEstilos de conteúdo padrão (obsoleto, use styles.content)React.CSSProperties-
classNameClasses CSS adicionaisstring-
styleEstilos inline para elemento raizReact.CSSProperties-
data-testidID de teste para o componentestring'descriptions'
PropriedadeDescriçãoTipoPadrão
keyChave única para o item (usada para IDs de teste e chaves React)string-
labelRótulo para o itemReact.ReactNode-
childrenConteúdo do itemReact.ReactNode-
spanNúmero de colunas a ocupar, ou ‘filled’ para preencher espaço restantenumber | 'filled'1
labelStyleEstilos de rótulo personalizadosReact.CSSProperties-
contentStyleEstilos de conteúdo personalizadosReact.CSSProperties-
labelClassNameClasse de rótulo personalizadastring-
contentClassNameClasse de conteúdo personalizadastring-
PropriedadeDescriçãoTipoPadrão
keyChave React, extraída pelo paistring-
itemKeyChave explícita (alternativa à chave React)string-
labelRótulo para o itemReact.ReactNode-
childrenConteúdo do itemReact.ReactNode-
spanNúmero de colunas a ocupar, ou ‘filled’number | 'filled'1
labelStyleEstilos de rótulo personalizadosReact.CSSProperties-
contentStyleEstilos de conteúdo personalizadosReact.CSSProperties-
labelClassNameClasse de rótulo personalizadastring-
contentClassNameClasse de conteúdo personalizadastring-
PropriedadeDescriçãoTipo
rootElemento container raiz-
headerCabeçalho contendo título e extra-
titleElemento de título-
extraElemento de conteúdo extra-
tableElemento de tabela-
labelCélulas de rótulo (elementos th)-
contentCélulas de conteúdo (elementos td)-
  • Usa marcação semântica <table> para estrutura adequada
  • Células de cabeçalho usam atributo scope para leitores de tela
  • Tabela tem elemento <caption> (visualmente oculto) quando o título é fornecido
  • Células de conteúdo têm aria-labelledby vinculando a seus rótulos
  • Dois-pontos após rótulos são marcados com aria-hidden para evitar anúncios redundantes