npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@numaris-microfront/ui-kit

v0.2.1

Published

Libreria de componentes de UI de la plataforma Numaris: wrapper de antd mas tokens de marca y el proveedor de tema.

Downloads

319

Readme

@numaris-microfront/ui-kit

Librería de componentes de UI de la plataforma Numaris. Si estás construyendo un widget para esta plataforma y necesitás componentes visuales — tablas, botones, formularios, modales — instalá este paquete en vez de traer tu propia librería: así tu widget hace match visual con el Shell y con el resto de los widgets, sin coordinarte manualmente con nadie sobre qué usar.

Qué es, en una frase

Un wrapper de antd v6 — reexporta el paquete completo — más un sistema de tokens de marca (colores, tipografía) y el proveedor que los aplica al tema de antd, y un componente propio (diálogo de confirmación).

Instalación

npm install @numaris-microfront/ui-kit antd

react y react-dom (^19.2.0) son peer dependencies — tu proyecto ya los tiene. antd es una dependencia directa del paquete (se instala igual, junto con @ant-design/icons, al instalar @numaris-microfront/ui-kit).

Importá también la hoja de estilos una vez, en el punto de entrada de tu widget:

import '@numaris-microfront/ui-kit/styles.css';

Trae ajustes a antd que su sistema de tokens no expone (ver más abajo). Sin ella, tu widget sigue funcionando pero se ve levemente distinto al resto de la plataforma.

Uso: los componentes son los de antd

import { Button, Table, Form, Input, ConfigProvider } from '@numaris-microfront/ui-kit';

function MyWidget() {
  return (
    <Form onFinish={(values) => console.log(values)}>
      <Form.Item name="name" label="Nombre">
        <Input />
      </Form.Item>
      <Button type="primary" htmlType="submit">
        Guardar
      </Button>
    </Form>
  );
}

Es el mismo import que tendrías con antd directo — mismos componentes, misma API, misma documentación (la de ant.design). Lo único que cambia es de dónde sale el import, para que todo el que construye un widget para esta plataforma use la misma versión de antd.

Aplicar la marca de la organización: NumarisThemeProvider

Si tu widget corre dentro del Shell (host de Module Federation), no montes este provider vos: el Shell ya lo monta una sola vez, arriba de todo, y tu widget hereda el tema a través de las CSS variables que ese provider escribe en el documento (ver la sección siguiente, "Por qué dos mecanismos"). Montarlo también en tu widget pisaría el tema del Shell.

Si tu widget corre standalone (fuera del Shell, para desarrollo o demo aislada), montalo vos en la raíz:

import { NumarisThemeProvider } from '@numaris-microfront/ui-kit';

function StandaloneRoot() {
  return (
    <NumarisThemeProvider>
      <MyWidget />
    </NumarisThemeProvider>
  );
}

Acepta un brand opcional (Partial<BrandTokens>) para forzar una marca distinta a la default — útil para probar cómo se ve tu widget con otros colores sin depender del Shell real.

Leer la marca activa dentro de un widget remoto: useBrandTheme

Este es el hook que sí usás dentro de un widget montado por el Shell, para que sus componentes de antd (los que vengan de este mismo paquete) respeten el tema de la organización activa:

import { ConfigProvider } from '@numaris-microfront/ui-kit';
import { useBrandTheme } from '@numaris-microfront/ui-kit';

function MyWidgetRoot() {
  const theme = useBrandTheme('my-widget-theme'); // el string identifica a TU widget, ver abajo
  return (
    <ConfigProvider theme={theme}>
      <MyWidget />
    </ConfigProvider>
  );
}

El argumento de useBrandTheme es obligatorio-en-la-práctica si tu plataforma monta varios widgets con antd en la misma página (aunque el tipo lo declare opcional): identifica a tu copia de antd frente a las demás. Sin un valor propio, o repitiendo el de otro widget, las variables CSS de tema de una copia pisan a las de otra en el documento — el síntoma es que al guardar un cambio de tema, algunos colores de tu widget cambian y otros no, sin ningún error en consola. Usá algo único a tu widget, por ejemplo '<tu-widget-id>-theme'.

Por qué dos mecanismos (NumarisThemeProvider y useBrandTheme) y no uno solo

El contexto de React (ConfigProvider) no cruza la frontera entre bundles separados (Module Federation, iframes, cualquier arquitectura donde el host y el widget cargan su propia copia de React y de antd). Si el Shell solo montara ConfigProvider, cada widget remoto renderizaría con el azul por defecto de antd, sin ningún error.

Lo que sí cruza esa frontera son las CSS variables, porque viven en el documento HTML, no en el árbol de React. Por eso NumarisThemeProvider (el que monta el host) hace dos cosas: monta el ConfigProvider para lo que está en su propio árbol, y además escribe las CSS variables de marca en :root. Cada widget remoto, con useBrandTheme, lee esas variables del documento y reconstruye su propio tema de antd a partir de ellas — sin necesitar contexto de React compartido.

Si tu integración no usa Module Federation (por ejemplo, tu app es un monolito de React sin remotos separados), no necesitás useBrandTheme: un solo NumarisThemeProvider en la raíz alcanza, porque ahí sí hay un único árbol de React.

Los tokens de marca (BrandTokens)

interface BrandTokens {
  colorPrimary: string;         // botones primarios, links, foco
  colorPrimaryContrast: string; // texto sobre colorPrimary
  colorSecondary: string;       // acento de apoyo (no tiene equivalente directo en antd)
  colorSuccess: string;
  colorWarning: string;
  colorError: string;
  colorInfo: string;
  colorTextBase: string;        // base de la que antd deriva la escala de grises del texto
  fontFamily: string;           // un stack CSS completo, no solo el nombre de la familia
  borderRadius: number;
  borderRadiusLG: number;
}

numarisBrand exporta los valores por defecto de la plataforma. resolveBrandTokens(partial) combina esos defaults con lo que quieras sobreescribir. brandCssVariables(tokens) convierte el catálogo a un mapa de CSS variables (--numaris-brand-*) — es lo que usa internamente NumarisThemeProvider, y también sirve si necesitás leer un color de marca desde CSS plano fuera de un componente de antd.

BRAND_FONTS es la lista cerrada de tipografías entre las que se puede elegir (Source Sans 3, Inter, IBM Plex Sans, cada una con su propio stack de fallback) y DEFAULT_FONT es cuál se usa si no se personaliza nada.

El componente propio: useConfirmationDialog

El único componente que este paquete expone más allá del wrapper de antd — el diálogo de "¿estás seguro?":

import { App, Button } from '@numaris-microfront/ui-kit';
import { useConfirmationDialog } from '@numaris-microfront/ui-kit';

function DeleteButton({ onDelete }: { onDelete: () => void }) {
  const confirm = useConfirmationDialog('danger'); // 'danger' | 'info' | 'warning'

  return (
    <Button
      danger
      onClick={() =>
        confirm({
          title: '¿Eliminar este elemento?',
          content: 'Esta acción no se puede deshacer.',
          confirmLabel: 'Eliminar',
          cancelLabel: 'Cancelar',
          onConfirm: onDelete,
        })
      }
    >
      Eliminar
    </Button>
  );
}

Requiere que exista un <App> de antd en algún ancestroNumarisThemeProvider ya lo monta, así que si tu widget vive bajo ese provider (directo o indirectamente vía el Shell) esto ya está resuelto. Si lo usás fuera de ese árbol, envolvé tu componente en <App> vos mismo. Sin <App>, el diálogo igual aparece pero ignora el tema de marca — sin error ni warning en consola.

La hoja de estilos (ui-kit/styles.css)

Existe para lo que el sistema de tokens de antd no alcanza a expresar. Es lo único que este paquete emite además de JavaScript/TypeScript. Importala una vez por aplicación (o una vez por widget, si tu widget puede correr standalone) — importarla varias veces no duplica nada visible, son las mismas reglas CSS.

Qué NO es este paquete

  • No es un design system con componentes propios de dominio. No vas a encontrar un <UserTable> ni un <DeviceForm> acá — eso vive en tu widget. Lo que este paquete expone es presentación genérica (los ~300 componentes de antd) más tokens de marca.
  • No tiene estado de negocio. Ningún componente de acá sabe qué es un usuario, un dispositivo o una organización más allá de sus colores.