Plan Display
O pattern PlanDisplay organiza planos ou opções de forma comparativa e visual, ideal para mostrar preços, benefícios ou níveis de assinatura com layout flexível e personalizável.
import React from "react";
import { PlanDisplay } from "@nimbus-ds/patterns";
import { CheckIcon, CloseIcon } from "@nimbus-ds/icons";
import { Box, Title, Text, Button } from "@nimbus-ds/components";
import { mockPlanDisplayLabels } from "lib/mocks/mock-labels";
const Example: React.FC = () => (
<PlanDisplay minWidth={{ xs: "150px", md: "500px" }} mx="4">
<PlanDisplay.Card>
<PlanDisplay.Header
subtitle="Punto de venta"
title={
<Box display="flex" gap="1">
<Title as="h3" color="neutral-textLow">
Plan
</Title>
<Title as="h3" color="neutral-textHigh">
Básico
</Title>
</Box>
}
>
<Title as="h5">Suscripción gratuita</Title>
<Text fontWeight="bold" fontSize="highlight">
1.5% costo por transacción
</Text>
</PlanDisplay.Header>
<PlanDisplay.Content>
{mockPlanDisplayLabels.slice(0, 4).map((label) => (
<PlanDisplay.Bullet key={label} icon={<CheckIcon />}>
{label}
</PlanDisplay.Bullet>
))}
{mockPlanDisplayLabels.slice(4).map((label) => (
<PlanDisplay.Bullet key={label} icon={<CloseIcon />} disabled>
{label}
</PlanDisplay.Bullet>
))}
</PlanDisplay.Content>
</PlanDisplay.Card>
<PlanDisplay.Card highlighted>
<PlanDisplay.Header
subtitle="Punto de venta"
title={
<Box display="flex" gap="1">
<Title as="h3" color="neutral-textLow">
Plan
</Title>
<Title as="h3" color="neutral-textHigh">
Avanzado
</Title>
</Box>
}
>
<Title as="h5">$14.999 / mes</Title>
<Text fontWeight="bold" fontSize="highlight">
0.15% costo por transacción
</Text>
</PlanDisplay.Header>
<PlanDisplay.Content>
{mockPlanDisplayLabels.map((label) => (
<PlanDisplay.Bullet key={label} icon={<CheckIcon />}>
{label}
</PlanDisplay.Bullet>
))}
</PlanDisplay.Content>
<PlanDisplay.Footer>
<Box
display="flex"
flexDirection="column"
justifyContent="center"
alignItems="center"
width="100%"
gap="2"
>
<Button appearance="primary">
<Text fontSize="base" color="currentColor">
Comenzar gratis*
</Text>
</Button>
<Text fontSize="caption">
*Al finalizar la prueba podrás elegir cancelar, continuar o cambiar
de plan
</Text>
</Box>
</PlanDisplay.Footer>
</PlanDisplay.Card>
</PlanDisplay>
);
export default Example;
Instale o componente via terminal.
npm install @nimbus-ds/plan-display
- Ajudar o usuário a comparar planos ou opções antes de contratar um serviço ou funcionalidade.
- Se a decisão depende de entender claramente as diferenças de benefícios ou funcionalidades.
- Quando o produto ou serviço tem apenas uma opção disponível, sem necessidade de comparação.
- Se o objetivo principal da tela é informativo ou educativo, e não requer uma ação imediata de seleção ou contratação.
- Em casos onde os benefícios não são suficientemente diferenciáveis e podem gerar confusão em vez de facilitar a escolha.
- Focar o fluxo na ação principal: Mostrar claramente o plano recomendado com um botão de CTA visível e destacado para agilizar a escolha.
- Minimizar telas de confirmação: Evitar passos desnecessários após a seleção do plano. Redirecionar automaticamente para o próximo passo do fluxo.
- Suporte completo de navegação por teclado: Os cards e botões devem ser navegáveis com Tab e ativáveis com Enter ou Space.
- Contraste de cor suficiente (WCAG AA): Garantir legibilidade entre títulos, bullets, preços e fundo, especialmente no plano destacado.
- Uso correto de roles e landmarks ARIA: Rotular corretamente botões e seções para compatibilidade com leitores de tela.
O Plan Display pode conter:
- Card
- Header
- Spacing
- Bullet list
- Spacing (opcional)
- Button (opcional)
- Disclaimer (opcional)

Este componente utiliza: #card, #text, #title, #bullet, #button, #spacing
- Dois planos.

- Três planos.

✅ Do
- Mostrar um título claro por plano. O cabeçalho deve comunicar o nome ou nível do plano de forma diferenciada e compreensível.
- Usar bullets para comparar funcionalidades. Liste benefícios-chave com ícones visuais para facilitar a leitura e comparação.
- Destacar visualmente o plano recomendado ou mais completo. Use borda colorida e botão para guiar a escolha.
- Incluir preços e condições claras. Mostre o custo e condições relevantes (como comissões ou período de teste).
- Garantir consistência na ordem dos atributos. Mostre as funcionalidades na mesma ordem em todos os planos.
- Mostrar um CTA claro no plano selecionável. Use botões para ações como "Começar teste" ou "Contratar".
❌ Don't
- Não usar descrições longas. Evite parágrafos extensos ou texto técnico; mantenha os bullets breves e escaneáveis.
- Não alterar a ordem dos itens entre planos. Isso dificulta a comparação visual rápida.
- Não ocultar condições-chave. Informações como preços, limites ou comissões devem ser visíveis.
Desktop

Mobile

Propriedades adicionais podem ser passadas para o componente <PlanDisplay>. Consulte a documentação div para obter a lista de propriedades aceitas pelo componente <PlanDisplay>.
PlanDisplay
Name | Type | Default | Description |
---|---|---|---|
minPlanWidth | string | ||
children* | React.ReactNode | Content of the PlanDisplay |
PlanDisplay.Card
Name | Type | Default | Description |
---|---|---|---|
highlighted | boolean |
PlanDisplay.Bullet
Name | Type | Default | Description |
---|---|---|---|
icon | |||
disabled | boolean |
PlanDisplay.CardHeader
Name | Type | Default | Description |
---|---|---|---|
subtitle* | string | ||
title |
PlanDisplay.CardContent
Name | Type | Default | Description |
---|---|---|---|
children |
PlanDisplay.CardSpacing
Name | Type | Default | Description |
---|