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!importantnem 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 @needless-ui/angularimport { 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() {}
}