@ng-zinc/ui
v0.1.0
Published
A modern Angular UI component library built with Tailwind CSS.
Readme
@ng-zinc/ui
A modern Angular UI component library built with Tailwind CSS.
This library provides a set of beautifully designed, accessible, and customizable components for Angular applications.
Documentation
Check out the interactive demo: https://amrameen769.github.io/ng-zinc-ui/
Change Log - 0.1.0
Added support for Tailwind CSS v4.
Change Log - 0.0.9
Breaking Change: Component Name Prefix has ben changed from ui- to zn-.
We are still working on the Angular CLI Migration integration. Until then if you have already been using the library, kindly update your imports to use the new prefix.
Installation
The easiest way to add @ng-zinc/ui to your Angular project is using the Angular CLI:
ng add @ng-zinc/uiThis command will automatically:
- Install required dependencies based on your choice (Tailwind v3 or Tailwind v4)
- Configure Tailwind CSS (Creating
tailwind.config.jsfor v3 or injecting@themefor v4) - Add base styles and theme variables
Manual Installation
If you prefer to install manually, follow these steps:
1. Install Dependencies
Tailwind CSS v4 (Recommended)
npm install @ng-zinc/ui @angular/cdk clsx tailwind-merge
npm install -D tailwindcss @tailwindcss/postcss postcssTailwind CSS v3
npm install @ng-zinc/ui @angular/cdk clsx tailwind-merge
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init2. Configure Tailwind CSS
Tailwind CSS v4
Update your global styles file (e.g., src/styles.css) to include the Tailwind CSS import and @ng-zinc/ui styles:
@import "tailwindcss";
@import "@ng-zinc/ui/css/styles.css";
@theme {
--color-border: hsl(var(--border));
--color-input: hsl(var(--input));
--color-ring: hsl(var(--ring));
--color-background: hsl(var(--background));
--color-foreground: hsl(var(--foreground));
--color-primary: hsl(var(--primary));
--color-primary-foreground: hsl(var(--primary-foreground));
--color-secondary: hsl(var(--secondary));
--color-secondary-foreground: hsl(var(--secondary-foreground));
--color-destructive: hsl(var(--destructive));
--color-destructive-foreground: hsl(var(--destructive-foreground));
--color-muted: hsl(var(--muted));
--color-muted-foreground: hsl(var(--muted-foreground));
--color-accent: hsl(var(--accent));
--color-accent-foreground: hsl(var(--accent-foreground));
--color-popover: hsl(var(--popover));
--color-popover-foreground: hsl(var(--popover-foreground));
--color-card: hsl(var(--card));
--color-card-foreground: hsl(var(--card-foreground));
--radius-lg: var(--radius);
--radius-md: calc(var(--radius) - 2px);
--radius-sm: calc(var(--radius) - 4px);
}
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%;
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 224.3 76.3% 48%;
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}Tailwind CSS v3
- Update your
tailwind.config.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./src/**/*.{html,ts}",
"./node_modules/@ng-zinc/ui/**/*.{html,ts,js,mjs}",
],
theme: {
extend: {
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
secondary: {
DEFAULT: "hsl(var(--secondary))",
foreground: "hsl(var(--secondary-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
},
},
plugins: [],
};- Add Global Styles to your
src/styles.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%;
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 224.3 76.3% 48%;
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}Usage
Import the components you want to use in your component or module. All components are standalone.
import { Component } from '@angular/core';
import { ButtonComponent } from '@ng-zinc/ui';
@Component({
selector: 'app-root',
standalone: true,
imports: [ButtonComponent],
template: `
<ui-button variant="default">Click me</ui-button>
<ui-button variant="destructive">Delete</ui-button>
<ui-button variant="outline">Cancel</ui-button>
`
})
export class AppComponent {}Available Components
- Alert
- Avatar
- Badge
- Button
- Card
- Checkbox
- Color Picker
- Date Picker
- Dialog
- Dropdown Menu
- Input
- Input Group
- Multi Select
- Progress
- Radio Group
- Select
- Switch
- Tabs
- Textarea
- Tooltip
IDE Support
This library supports standard Angular Language Service features. If you are using VS Code with the Angular Language Service extension, you will get:
- Auto-import: Automatically imports components when you use them in templates.
- Type checking: Validates inputs and outputs.
- IntelliSense: Autocompletion for component properties and variants.
