Código aberto · Angular 22 · React 19 · MIT

Componentes de UI, desnecessariamente bem feitos.

Componentes Angular acessíveis sobre elementos nativos, estilizados por uma única folha de estilo independente de framework. Tudo com licença MIT, inclusive o que outras bibliotecas vendem à parte: um agendador com timelines de recursos e uma grade de dados com agrupamento e exportação para Excel.

Por que ele existe

  • Sem plano premium

    O agendador, com timeline de recursos e eventos recorrentes, e a grade de dados, com agrupamento, dados em árvore e exportação para Excel, têm licença MIT como todo o resto: sem chave de licença, sem marca d’água. Está migrando de uma biblioteca paga? Leia os guias para quem vem do FullCalendar e do AG Grid.

  • Elementos nativos em primeiro lugar

    <button nuiButton> é um botão de verdade. Formulários, teclado e leitores de tela funcionam porque nada o envolve.

  • Uma folha de estilo, qualquer framework

    Os componentes são CSS puro em camadas de cascata: Angular hoje, React por enquanto no agendador e na grade de dados, HTML simples sempre.

  • Seu CSS sempre vence

    Tudo fica dentro de @layer nui, então seus próprios estilos o sobrescrevem sem !important nem brigas de especificidade.

  • Acessível desde a base

    Cada par de cores é verificado segundo as WCAG 2.2 AA quando a paleta é gerada. Foco, cores forçadas e movimento reduzido já vêm resolvidos.

  • Desnecessariamente personalizável

    Molas, efeitos ao pressionar, animações de entrada, formatos de canto, raio e densidade: um atributo para a aplicação inteira ou um input por componente, sobre design tokens W3C padronizados.

  • Angular moderno

    Signal inputs, zoneless, renderização no servidor e um ponto de entrada por componente, para que as aplicações incluam só o que importam.

Um comando, depois um import

Execute ng add para instalar o pacote e importar a folha de estilo, depois use os componentes em qualquer componente standalone.

ng-add.sh
ng add @needless-ui/angular
usage.ts
import { Component } from '@angular/core';
import { NuiButton } from '@needless-ui/angular/button';

@Component({
selector: 'app-root',
imports: [NuiButton],
template: `<button nuiButton (click)="save()">Save changes</button>`,
})
export class App {
save() {}
}