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

@ploomescrm/ui

v1.2.0

Published

Biblioteca de componentes React do Design System da Ploomes: componentes acessíveis, tematizáveis e prontos para produção, com tokens de design embutidos e suporte a dark mode e whitelabel em tempo de execução.

Readme

@ploomescrm/ui

Biblioteca de componentes React do Design System da Ploomes: componentes acessíveis, tematizáveis e prontos para produção, com tokens de design embutidos e suporte a dark mode e whitelabel em tempo de execução.

Pacote proprietário da Ploomes. Publicado publicamente apenas para distribuição — o uso é destinado a aplicações da Ploomes e parceiros autorizados.

Pré-requisitos

  • React 18.2+ ou 19 (peer dependency, junto com react-dom).
  • Tailwind CSS v4 com @tailwindcss/postcss — os componentes são estilizados com utilities do Tailwind. Existe um caminho sem Tailwind (veja abaixo), mas o Tailwind é fortemente recomendado para fidelidade visual completa.

Instalação

npm install @ploomescrm/ui
# ou: pnpm add @ploomescrm/ui / yarn add @ploomescrm/ui

Você instala apenas este pacote — os tokens de design (@ploomescrm/ui/theme) já vêm embutidos.

Se for passar ícones aos componentes, instale também o lucide-react (a lib usa ele para renderizar ícones).

Configuração do CSS (passo essencial)

Os componentes usam classes utilitárias do Tailwind. Por padrão, o Tailwind v4 ignora node_modules, então sem um @source apontando para o bundle da lib as classes são removidas no tree-shaking e os componentes renderizam sem estilo.

No seu CSS de entrada:

@import 'tailwindcss';
@import '@ploomescrm/ui/theme'; /* tokens → utilities (bg-brand, text-foreground, ...) */
@source '../node_modules/@ploomescrm/ui/dist'; /* preserva as classes usadas pela lib */

O caminho do @source é relativo ao arquivo CSS — ajuste conforme a estrutura do seu projeto.

E adicione o plugin ao seu postcss.config.js:

export default {
  plugins: { '@tailwindcss/postcss': {} },
};

Sem Tailwind: importe @ploomescrm/ui/tokens.css em vez do theme — ele expõe as custom properties --color-* em :root para você estilizar sua aplicação. Os componentes da lib, porém, ainda dependem das utilities do Tailwind para a aparência correta.

Providers

Envolva a raiz da sua aplicação. Ambos são exportados de @ploomescrm/ui:

  • ToasterProvider — obrigatório se você usar toasts/notificações. O hook é useToaster() (retorna { toast }).
  • WhitelabelProvider — opcional, para recolorir por cliente (veja abaixo).
import { ToasterProvider } from '@ploomescrm/ui';
import { createRoot } from 'react-dom/client';

createRoot(document.getElementById('root')!).render(
  <ToasterProvider>
    <App />
  </ToasterProvider>,
);

Uso

import { Badge, Table, useToaster, cn } from '@ploomescrm/ui';

function Example() {
  const { toast } = useToaster();

  return (
    <div className={cn('flex items-center gap-2', 'text-foreground-muted')}>
      <Badge color="brand" size="md">
        Novo
      </Badge>
      <button
        onClick={() => toast({ type: 'info', title: 'Pronto!', body: 'Olá!' })}
      >
        Notificar
      </button>
    </div>
  );
}

Ao montar sua própria marcação, estilize sempre com as utilities semânticas de token (bg-brand, text-foreground-muted, border-neutral-subtle) — nunca cores cruas (#fff, bg-red-500). É isso que mantém dark mode e whitelabel funcionando.

Dark mode

Adicione a classe dark a um elemento ancestral (ex.: <html class="dark">). As variáveis --color-* cascateiam e todos os componentes se adaptam automaticamente — sem configuração por componente. Alterne a classe para trocar de tema.

Whitelabel (cores por cliente)

WhitelabelProvider recolore todo o Design System em tempo de execução a partir de duas cores hex, derivando os overrides --color-* para os modos claro e escuro e injetando-os — sem mudanças nos componentes, e o .dark continua alternando os modos normalmente.

import { WhitelabelProvider } from '@ploomescrm/ui';

<WhitelabelProvider brandColor="#E6334A" actionColor="#1A94FF">
  {children}
</WhitelabelProvider>;
  • brandColor → família brand (+ hover/active/muted) e gradientes da marca.
  • actionColor → família info (papel de ação/confirmação).
  • tintSurfaces={false} → recolore apenas os acentos, preservando os tokens de superfície (útil quando a cor da marca prejudicaria o contraste do texto).
  • Omitir ambas as cores mantém o tema padrão (nada é injetado).
  • Cores semânticas fixas (warning, success, danger, overlay) não mudam.
  • nonce é repassado ao <style> injetado, para apps com CSP estrito.
  • useWhitelabel() expõe a configuração ativa.

O que está incluído

Cerca de 70 componentes, organizados por área:

  • Botões e açõesButtonAction, ButtonCheck, ButtonFavorite, ButtonSoft, CardButton, NestedButton, SpeechToTextButton, ActionDock.
  • Campos de formulário — sistema completo de Field* (texto, número, data, hora, opções, anexo, imagem, cor, CPF/CNPJ, telefone, endereço, editor de texto, etc.), além de FieldSelector, DeepSelector, SearchInput e CodeInput.
  • Navegação e layoutBreadcrumbs, HorizontalMenu, VerticalMenu, SubMenuHorizontal, HorizontalTabs, Stepper, Pagination.
  • OverlaysModalCenter, ModalFloating, ModalSide, AlertModal, ResizableDrawer, Dropdown, Tooltip, HeaderModal, FooterModal.
  • Exibição de dadosTable, DataView, GridView, ImageGallery, Card, Badge, NotifyBadge, ProgressBar, ProfileImage, ProfileGroup, Collapse, EmptyLabel, AlertMessage.
  • ListasDraggableList, SearchableList, InfiniteScroll, FilterGroup.
  • FeedbackToaster/ToasterProvider, Loader, Spinner.
  • OutrosIcon, RenameableText.

Hooks e utilitários públicos:

  • useIsTruncated — detecta se um elemento está com texto truncado.
  • cn(...) — composição de classes (twMerge(clsx(...))).
  • Helpers de whitelabel: deriveWhitelabelTheme, whitelabelThemeToCss, changeColorLuminous, blendColors, isValidHex.

Cada componente exporta seus próprios tipos de props. Importe-os normalmente:

import { Badge, type BadgeProps } from '@ploomescrm/ui';

TypeScript

O pacote distribui tipos .d.ts para ESM e CJS. Garanta que seu tsconfig.json use moduleResolution em bundler (ou node16+) para a resolução de tipos funcionar.

Formatos e exports

| Export | Conteúdo | | --------------------------- | ---------------------------------------------------- | | @ploomescrm/ui | Componentes, hooks e utilitários (ESM + CJS + tipos) | | @ploomescrm/ui/theme | Tema Tailwind v4 (tokens → utilities) | | @ploomescrm/ui/tokens.css | Custom properties --color-* (uso sem Tailwind) |

Solução de problemas

| Sintoma | Causa / correção | | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | Componentes renderizam sem estilo | Falta o @source '.../@ploomescrm/ui/dist' — o Tailwind removeu as classes. Ajuste o caminho relativo. | | Utilities como bg-brand não existem | Falta o @import '@ploomescrm/ui/theme'. | | Dark mode não faz nada | Falta a classe dark em um ancestral. | | useToaster must be used within <ToasterProvider> | Falta o ToasterProvider na raiz. | | Cores de whitelabel ignoradas | brandColor/actionColor omitidos, ou o provider não envolve a subárvore. | | Tipos não encontrados | Ajuste moduleResolution para bundler/node16+. |


© Ploomes. Todos os direitos reservados.