Component Library
La Nxar Component Library es un sitio público y estático donde podés ver todos los componentes de UI corriendo en vivo, cambiar sus props con controles interactivos, y copiar snippets listos para pegar en tu Custom Component.
Cuándo usarla:
- Estás escribiendo un Visual Custom Component y querés ver qué
Nxar.*ya están disponibles antes de inventarlo desde cero.- Sos parte del equipo Nxar y querés saber si alguna primitive de
@crm/uicubre el caso que estás por buildear.- Necesitás un snippet copiable para un componente que ya conocés.
Cómo está organizada
Dos secciones — una por package:
| Sección | Para qué se usa | Ejemplos |
|---|---|---|
@crm/ui | Componentes del shell admin (Settings, Workspace, Record/App Pages) — solo internos del CRM. No se usan dentro de Custom Components | PageCard, Button, Combobox, Dialog, EmptyState |
@nxar/visual-ui | Componentes pre-built para Visual Custom Components — corren dentro del iframe sandbox de tu componente | Nxar.Card, Nxar.Button, Nxar.Select |
Cada componente tiene 4 tabs:
- Preview — la rendered output con controles live a la derecha. Cambiá una prop y el preview se actualiza al instante.
- Props — tabla con el contrato del componente: nombre, tipo, default, descripción.
- Examples — variantes pre-armadas (default, with action, loading, etc.) con código copiable.
- Source — link directo al código del componente en GitHub + lista de tokens (CSS vars / Tailwind classes) que consume.
Inventario
Composites (admin)
Componentes de alto nivel que combinan varias primitives + lógica de UI. Son los que más vas a usar al construir features admin.
PageCard+PageCardHeader,PageCardHeaderAction,PageCardLoadMore— shell canónico para componentes de Record/App PagesSettingsPageHeader— header obligatorio en toda sección de SettingsSettingsListView— listado tabular con search + acciones — la base de la mayoría de las pantallas de SettingsCombobox— single-select con search integrado para listas largasMultiSelect— multi-pick con badges y search
Primitives (admin)
Bloques chicos. Mismas que shadcn/ui pero con tokens de Nxar (brand color, font, radius).
Button— 6 variantes × 4 tamañosBadge— pill chico para status / counters / labelsAvatar+AvatarGroup— imagen de perfil con fallback de inicialesTabs— tab switcher in-page (no confundir con la barra de tabs del workspace)Kbd— keyboard shortcut hint (⌘K,Esc)
Form
Input— text input con tokens consistentesSelect— dropdown nativo estilado para listas cortasCombobox/MultiSelect— para listas largas (ver Composites)
Feedback
Dialog— modal con focus trap + Esc-to-closeConfirmDialog+confirm()— modal de confirmación global (Promise<boolean>). Disparable desde Visual Components víasdk.confirm(...)Tooltip— hint on hover/focus, sobre todo para icon-only buttonsAlert— banner in-page sticky para validation summaries, deprecation warnings, permission deniedEmptyState— placeholder estandarizado para listas vacíasSkeleton— placeholder animado para loading statesSpinner— loading indicator estandarizado (4 sizes, color hereda del contexto)Progress— barra de progreso, determinada o indeterminadaToaster+toast()— notificaciones flotantes (“Saved”, “Sent”, errors). Disparable desde Visual Components víasdk.toast(...)
Visual UI (iframe — Custom Components)
Versión de los componentes anteriores que vive dentro del iframe sandbox de tus Visual Custom Components. Sin import — están como globales en window.Nxar. Paridad ~1:1 con @crm/ui (mismos primitives, look idéntico vía CSS vars).
Composites:
Nxar.PageCard(+PageCardHeader,PageCardHeaderAction,PageCardLoadMore) yNxar.Card(+ partes) — las cards de Record/App PagesNxar.SettingsSection+Nxar.SettingsRow— pantallas de configuración de paquetes
Primitives:
Nxar.Button— botón con variantes y tamañosNxar.Badge— pill chico (7 variantes)Nxar.Avatar+AvatarImage+AvatarFallback— imagen con fallbackNxar.Kbd— keyboard shortcut hintNxar.Tabs+TabsList+TabsTrigger+TabsContent— tab switcher
Form:
Nxar.Input,Nxar.Textarea,Nxar.LabelNxar.Select— dropdown (listas cortas)Nxar.Combobox— single-select con search (listas largas)Nxar.MultiSelect— multi-pick con badges
Feedback:
Nxar.Tooltip— hover/focus tooltipNxar.EmptyState— placeholder para listas vacíasNxar.Alert+AlertTitle+AlertDescription— banner in-pageNxar.Skeleton— placeholder animado para loading statesNxar.Spinner— loading indicatorNxar.Progress— barra de progreso (determinada / indeterminada)Nxar.Icon— iconos por nombre (set curado)Nxar.Dialog,Nxar.Popover— overlays (dentro del iframe)
Bridge al admin (no son componentes):
sdk.toast(...)→ renderiza un toast en el shell adminsdk.confirm(...)→ renderiza un modal de confirmación en el shell admin (Promise<boolean>)
Para la guía completa de cómo escribir un Visual Component, ver Visual Components; para el catálogo y los iconos del iframe, Nxar UI; para el objeto
sdk, el SDK.
Buscando algo que no está
Si necesitás una primitive que todavía no existe (charts dentro del iframe es el pedido más común):
- Para
@crm/ui— abrí un issue describiendo el caso de uso. Algunos componentes existen en el package pero todavía no están documentados en el library — preguntá antes de buildear. - Para
@nxar/visual-ui— el catálogo es más chico a propósito (cada componente que se agrega aumenta el bundle del iframe). Si encontrás un caso recurrente, abrí un issue con el use case y lo evaluamos.
Convenciones de uso
- Nunca reimplementes un componente que ya está en el library. Si el shape no encaja, ampliá la primitive — no la bypasees con classNames inline. Eso garantiza que cambios futuros (radius, padding, hover states) se propaguen automáticamente a todos los consumidores.
- Usá los tokens que figuran en el tab Source. Las CSS vars (
--brand,--brand-soft, etc.) cambian con el tema dark/light y eventualmente con accent override per-tenant. Hardcodear hexes te saca de ese sistema. - Composables, no monolíticos: los primitives están pensados para componerse (PageCard + PageCardHeader + EmptyState). No esperes “una prop que haga todo”.
Para el equipo Nxar — agregar un componente al library
Si sos contributor del CRM y agregaste un nuevo componente reutilizable a packages/ui o packages/visual-ui, agregalo también al library para que aparezca en este sitio. Consultá al equipo de Nxar por la receta interna de publicación.