Page
O componente **Page** atua como contêiner principal de vistas. Estrutura o conteúdo em seções hierárquicas, fornece contexto com títulos e descrições, e pode incluir ações principais (como botões). Seu objetivo é oferecer um framework consistente, claro e acessível que facilite a compreensão e execução de tarefas.
import React from "react";
import { Page } from "@nimbus-ds/patterns";
import {
IconButton,
Button,
Tag,
Alert,
Box,
Icon,
Text,
} from "@nimbus-ds/components";
import {
ChevronLeftIcon,
ChevronRightIcon,
ChevronDownIcon,
DownloadIcon,
PlusCircleIcon,
} from "@nimbus-ds/icons";
const Example: React.FC = () => {
const headerButtons = (
<>
<IconButton source={<ChevronLeftIcon />} size="2rem" />
<IconButton source={<ChevronRightIcon />} size="2rem" />
<Button>
Mis aplicaciones
<Icon source={<ChevronDownIcon />} />
</Button>
<Button>
Exportar lista
<Icon source={<DownloadIcon />} />
</Button>
<Button appearance="primary">
<Icon color="neutral-background" source={<PlusCircleIcon />} />
Agregar orden de compra
</Button>
</>
);
return (
<Page>
<Page.Header
title="Page title"
subtitle="Page subtitle"
buttonStack={headerButtons}
>
<Box display="flex" gap="2">
<Tag appearance="primary">Example tag</Tag>
<Tag>Example tag</Tag>
</Box>
<Alert appearance="warning" title="Example alert">
This is an example Alert component inside the Page Header.
</Alert>
</Page.Header>
<Page.Body>
<Box
backgroundColor="primary-surface"
borderColor="primary-interactive"
borderStyle="dashed"
borderWidth="1"
borderRadius="2"
width="100%"
height="500px"
display="flex"
alignItems="center"
justifyContent="center"
>
<Text fontSize="base" color="primary-interactive">
Body content
</Text>
</Box>
</Page.Body>
</Page>
);
};
export default Example;
Instale o componente via terminal.
npm install @nimbus-ds/page
Page
Use Page quando você precisar estruturar uma vista completa que represente uma funcionalidade ou seção chave do produto: como listas, formulários ou configurações. É o layout base para qualquer tela de primeiro nível.
Não utilize Page fragmentos de interface dentro de modais, popovers ou componentes compostos. Também não em fluxos que já estão contidos dentro de outro layout hierárquico (como tabs, steps ou wizards).
- Foco na ação principal: Colocar o CTA chave no header para acesso imediato.
- Persistência de contexto: Manter o título visível ao fazer scroll para reforçar o foco.
- Layout flexível: Permitir que a estrutura se adapte segundo o conteúdo e objetivo do fluxo.
- Suporte completo de navegação por teclado.
- Títulos marcados com h1, h2… de forma semântica.
- Áreas de interação acessíveis e etiquetas visíveis.
- Evitar scroll horizontal. O design deve ser responsivo.
- ARIA roles apropriados para estruturar a hierarquia do conteúdo.
- Áreas táteis adequadas em dispositivos móveis (mínimo 44x44px).
O padrão Page se compõe de:
- Título principal
- Título secundário ou descrição
- Ações principais
- Conteúdo
- Title
- Button
- Icon
- Tabs
✅ Do
- Usar Page como base para qualquer vista principal.
- Incluir ações visíveis no header.
- Adicionar tabs apenas se houver seções independentes.
- Mostrar feedback imediato ante erros ou estados vazios (por exemplo: Alerts ou Empty message).
❌ Don't
- Não aninhar Page dentro de outro Page.
- Não usá-lo para vistas secundárias (use Card, Modal em seu lugar).
- Não ocultar o título principal.
- Não usar títulos genéricos como "Tela" ou "Configuração".
Additional props are passed to the <Page> element. See div docs for a list of props accepted by the <Page> element.
Page
Name | Type | Default | Description |
---|---|---|---|
maxWidth | string | ||
children |
Page.Header
Name | Type | Default | Description |
---|---|---|---|
title* | string | Main title of the page. Corresponds to an h1 HTML tag. | |
subtitle | string | Optional subtitle for the page. | |
buttonStack | React.ReactNode | Button stack that appears on the right-hand side of the title. | |
children | React.ReactNode | Optional header content that appears underneath the title and button stack. |
Page.Body
Name | Type | Default | Description |
---|---|---|---|
children* | React.ReactNode | Content of the page body. |