Plan Display
El pattern PlanDisplay organiza planes u opciones de forma comparativa y visual, ideal para mostrar precios, beneficios o niveles de suscripción con disposición flexible y personalizable.
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;
Instala el componente via terminal.
npm install @nimbus-ds/plan-display
- Ayudar al usuario a comparar planes u opciones antes de contratar un servicio o funcionalidad.
- Si la decisión depende de entender claramente las diferencias de beneficios o funcionalidades.
- Cuando el producto o servicio tiene una sola opción disponible, sin necesidad de comparación.
- Si el objetivo principal de la pantalla es informativo o educativo, y no requiere una acción inmediata de selección o contratación.
- En casos donde los beneficios no son lo suficientemente diferenciables y pueden generar confusión en lugar de facilitar la elección.
- Enfocar el flujo en la acción principal: Mostrar claramente el plan recomendado con un botón de CTA visible y destacado para agilizar la elección.
- Minimizar pantallas de confirmación: Evitar pasos innecesarios tras la selección del plan. Redirigir automáticamente al siguiente paso del flujo.
- Soporte completo de navegación por teclado: Las cards y botones deben ser navegables con Tab y activables con Enter o Space.
- Contraste de color suficiente (WCAG AA): Garantizar legibilidad entre títulos, bullets, precios y fondo, especialmente en el plan destacado.
- Uso correcto de roles y landmarks ARIA: Etiquetar correctamente botones y secciones para compatibilidad con lectores de pantalla.
El Plan Display puede contener:
- Card
- Header
- Spacing
- Bullet list
- Spacing (opcional)
- Button (opcional)
- Disclaimer (opcional)

Este componente utiliza: #card, #text, #title, #bullet, #button, #spacing
- Dos planes.

- Tres planes.

✅ Do
- Mostrar un título claro por plan. El encabezado debe comunicar el nombre o nivel del plan de forma diferenciada y entendible.
- Usar bullets para comparar funcionalidades. Lista beneficios clave con íconos visuales para facilitar la lectura y comparación.
- Destacar visualmente el plan recomendado o más completo. Usá borde de color y botón para guiar la elección.
- Incluir precios y condiciones claras. Muestra el costo y condiciones relevantes (como comisiones o periodo de prueba).
- Asegurar consistencia en el orden de atributos. Muestra las funcionalidades en el mismo orden en todos los planes.
- Mostrar un CTA claro en el plan seleccionable. Usá botones para acciones como "Comenzar prueba" o "Contratar".
❌ Don't
- No usar descripciones largas. Evitá párrafos extensos o texto técnico; mantené los bullets breves y escaneables.
- No alterar el orden de ítems entre planes. Eso dificulta la comparación visual rápida.
- No ocultar condiciones clave. Información como precios, límites o comisiones deben ser visibles.
Desktop

Mobile

Se pueden pasar propiedades adicionales al componente <PlanDisplay>. Revisa la documentación del div para ver la lista de props aceptadas por el 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 |
---|