Nova UI - Modern Angular UI Library

October 5, 2025 ยท View on GitHub

A modern Angular 20 UI component library built with signals, standalone components, and a CSS-first theming approach.

โœจ Features

  • ๐ŸŽจ CSS-First Theming - Simple, customizable CSS variables
  • ๐ŸŒ™ Dark Mode Support - Built-in light and dark themes
  • ๐Ÿ“ฆ Tree-shakeable - Import only what you need
  • ๐Ÿ”ง Fully Typed - Complete TypeScript support
  • โšก Angular 20 - Built with latest Angular features and signals
  • ๐Ÿš€ Standalone Components - No NgModules required
  • โš™๏ธ Signal-based State - Modern reactive patterns

๐Ÿš€ Quick Start

Installation

npm install ngx-nova-ui

Basic Setup

  1. Import the CSS in your styles.css:
@import 'ngx-nova-ui/src/lib/styles/nova-ui.scss';
  1. Import components as needed:
import { NovaButton } from 'ngx-nova-ui';

@Component({
  selector: 'app-root',
  imports: [NovaButton],
  template: `<nova-button>Click me</nova-button>`,
})
export class AppComponent {}

Using Components

<nova-button variant="primary" (clicked)="handleClick()"> Click me </nova-button>

Customizing Theme

Override CSS variables in your styles:

:root {
  --nova-primary: #4f46e5;
  --nova-primary-foreground: #ffffff;
  --nova-radius: 0.5rem;
}

/* Dark mode is applied automatically with .dark class */
.dark {
  --nova-background: #09090b;
  --nova-foreground: #fafafa;
}

๐Ÿ“š CSS Variables

The library provides a comprehensive set of CSS variables for colors, spacing, typography, and more. All variables use the --nova- prefix for easy identification.

๐Ÿ› ๏ธ Development

Development Server

ng serve

Navigate to http://localhost:4200/. The application will automatically reload if you change any of the source files.

Building the Library

# Build library only
npm run build

# Build library
npm run build:all

Running Tests

# Unit tests
npm test

# Storybook
npm run storybook

๐ŸŒ™ Dark Mode

Use the theme service to toggle dark mode:

import { NovaThemeService } from 'ngx-nova-ui';

export class AppComponent {
  private themeService = inject(NovaThemeService);

  toggleTheme() {
    this.themeService.toggleMode();
  }

  setDarkMode() {
    this.themeService.setMode('dark');
  }
}

๐Ÿ—๏ธ Project Structure

ngx-nova-ui-workspace/
โ”œโ”€โ”€ projects/
โ”‚   โ””โ”€โ”€ ngx-nova-ui/          # Library source
โ”‚       โ”œโ”€โ”€ src/
โ”‚       โ”‚   โ”œโ”€โ”€ lib/
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ components/   # UI components
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ services/     # Theme service
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ styles/       # CSS with variables
โ”‚       โ”‚   โ””โ”€โ”€ public-api.ts     # Public exports
โ”‚       โ””โ”€โ”€ ng-package.json       # Library config
โ””โ”€โ”€ .storybook/               # Storybook configuration

๐Ÿ“ฆ Available Components

  • NovaButton - Button component with variants and sizes
  • More components coming soon!

๐Ÿค Contributing

Contributions are welcome! Please read our contributing guidelines before submitting PRs.

๐Ÿ“„ License

MIT License - see LICENSE file for details

๐Ÿ™ Acknowledgments

CSS variables approach inspired by modern CSS-first design systems.


Built with โค๏ธ using Angular 20