Files

208 lines
7.2 KiB
Markdown
Raw Permalink Normal View History

2026-05-15 14:45:35 +00:00
# Nova Design System (NDS)
2026-05-15 14:32:15 +00:00
Nova Design System (NDS) is a lightweight, responsive UI component library built with **Astro**. It is developed primarily for internal and personal projects, and is publicly available for reference and contributions.
2026-05-15 14:45:35 +00:00
---
## Table of Contents
1. [Overview](#user-content-overview)
2. [Project Status](#user-content-project-status)
3. [Core Principles](#user-content-core-principles)
4. [Available Components](#user-content-available-components)
5. [Design Tokens](#user-content-design-tokens)
6. [Installation](#user-content-installation)
7. [Usage](#user-content-usage)
8. [Development](#user-content-development)
9. [License](#user-content-license)
2026-05-15 14:45:35 +00:00
---
## Overview
NDS provides a focused set of reusable Astro components with centralized design tokens, light/dark theming, and a strong focus on consistency and maintainability. The component documentation and showcase are also built with Astro.
2026-05-15 14:45:35 +00:00
## Project Status
> **ALPHA** — The library is under active development. Current version: `1.2.1`. Component APIs, token naming, and internal architecture may change before a stable release.
2026-05-15 14:45:35 +00:00
## Core Principles
- **Responsive Architecture:** Components are built mobile-first and work correctly across modern screen sizes.
- **Security-Centric:** Unsafe patterns (injection, untrusted rendering) are avoided by design.
- **Native Theming:** All styling relies on centralized design tokens and supports Light and Dark modes.
- **Type Safety:** Written in TypeScript for stronger reliability and a better developer experience.
- **Consistency First:** Shared tokens, naming conventions, and reusable patterns take priority over one-off styles.
2026-05-15 14:45:35 +00:00
## Available Components
These are the components currently exported from the package (`src/components/index.ts`):
| Component | Category |
| -------------------------------------------------- | ------------ |
| `Button` | Actions |
| `Toggle` | Actions |
| `NumericStepper` | Actions |
| `Select` / `SelectOption` | Actions |
| `TextField` | Forms |
| `Checkbox` | Forms |
| `Radio` | Forms |
| `Tab` / `TabItem` / `TabContent` | Navigation |
| `Link` | Navigation |
| `Breadcrumb` / `BreadcrumbItem` | Navigation |
| `Pagination` / `PaginationNumber` | Navigation |
| `Navbar` | Navigation |
| `Sidebar` / `SidebarItem` | Navigation |
| `Avatar` | Data Display |
| `Badge` | Data Display |
| `Card` | Data Display |
| `ListItem` / `ListItemTitle` / `ListItemSubtitle` | Data Display |
| `Notification` | Feedback |
| `LoadingBar` | Feedback |
| `Tooltip` | Feedback |
| `Modal` | Overlay |
> Icons are no longer shipped as standalone NDS components. As of `1.00.3`, all icons used internally (e.g. in `Select`, `Avatar`, `Notification`, `numericStepper`) come directly from the **[`@lucide/astro`](https://www.npmjs.com/package/@lucide/astro)** package. See `ATTRIBUTION.md` for details.
## Design Tokens
All styling is controlled via CSS custom properties prefixed with `--nds-`, defined in `src/styles/tokens/`:
| File | Contents |
| ------------------ | ------------------------------------------------------------------------- |
| `_colors.scss` | Color palette and semantic colors (`success`, `warning`, `error`, `info`) |
| `_spacing.scss` | Base spacing scale, border radius, and border width |
| `_typography.scss` | Font families, sizes, and weights |
**Rules:**
- Never hardcode colors, spacing, or radii in component styles when a token exists.
- Never override tokens locally in component scope unless explicitly supported.
- All global token changes must go through the core styling system.
2026-05-15 14:45:35 +00:00
## Installation
Requires **Node.js >= 22.12.0**.
2026-05-15 14:45:35 +00:00
```bash
npm install @unkn0wndo3s/nova-design-system
2026-05-15 14:45:35 +00:00
```
No extra Vite de-optimization configuration is required.
## Usage
Import components directly from the package:
2026-05-15 14:45:35 +00:00
```astro
---
import { Button } from '@unkn0wndo3s/nova-design-system';
---
2026-05-15 14:45:35 +00:00
<Button>Click me</Button>
2026-05-15 14:45:35 +00:00
```
```astro
---
import { Notification } from '@unkn0wndo3s/nova-design-system';
---
2026-05-15 14:45:35 +00:00
<Notification type="warning">
This is a warning message.
</Notification>
```
2026-05-15 14:45:35 +00:00
```astro
---
import { Modal } from '@unkn0wndo3s/nova-design-system';
---
<Modal>
This is a modal dialog.
</Modal>
```
```astro
---
import { Breadcrumb, BreadcrumbItem } from '@unkn0wndo3s/nova-design-system';
---
<Breadcrumb>
<BreadcrumbItem href="/">Home</BreadcrumbItem>
<BreadcrumbItem href="/docs">Docs</BreadcrumbItem>
</Breadcrumb>
```
## Development
2026-05-15 14:45:35 +00:00
### Clone the repository
2026-05-15 14:45:35 +00:00
```bash
git clone https://git.novaprojects.dev/unkn0wn/nova-design-system.git
2026-05-15 14:45:35 +00:00
```
### Install dependencies
2026-05-15 14:45:35 +00:00
```bash
npm install
```
### Start the dev server
2026-05-15 14:45:35 +00:00
```bash
npm run dev
2026-05-15 14:45:35 +00:00
```
### Useful scripts
2026-05-15 14:45:35 +00:00
```bash
npm run build # Build the project
npm run preview # Preview the production build
2026-05-15 14:45:35 +00:00
```
### Project Structure
```text
src/
├── components/ # Astro components
│ ├── Avatar/
│ ├── Badge/
│ ├── Breadcrumb/
│ ├── Button/
│ ├── Card/
│ ├── Checkbox/
│ ├── Link/
│ ├── ListItem/
│ ├── LoadingBar/
│ ├── Modal/
│ ├── Navbar/
│ ├── Notifications/
│ ├── numericStepper/
│ ├── pagination/
│ ├── Radio/
│ ├── Select/
│ ├── Sidebar/
│ ├── Tabs/
│ ├── textField/
│ ├── Toggle/
│ ├── Tooltip/
│ └── index.ts
├── layouts/ # Astro layouts
├── pages/ # Documentation pages
├── styles/
│ ├── tokens/
│ │ ├── _colors.scss
│ │ ├── _spacing.scss
│ │ └── _typography.scss
│ └── index.scss
└── index.ts
```
## Contributing
Contributions are welcome. To report a bug, suggest a feature, or open a Pull Request, follow the repository contribution rules and templates.
NDS no longer maintains a custom set of icon components — icons are sourced from the **[Lucide](https://lucide.dev/)** icon set via `@lucide/astro`. If a needed icon isn't in Lucide, open an issue to discuss it before adding any new icon dependency.
2026-05-15 14:45:35 +00:00
## License
This project is **not distributed under a standard open-source license**. Usage, redistribution, commercial use, and derivative work rules are defined in `LICENSE.md`. Read that file carefully before using the library in a product or service.