@winnicodes/winnimal-ui
v0.4.1
Published
A minimal CSS design system with optional React components — warm neutrals, gold accents, full dark mode support.
Readme
winnimal-ui
A minimal CSS design system with optional React components — warm neutrals, gold accents, full dark mode support.
Installation
npm install @winnicodes/winnimal-uiPeer dependencies (only required when using React components):
npm install react react-dom lucide-reactUsage
Full stylesheet (recommended)
import '@winnicodes/winnimal-ui/index.css'Includes tokens, base reset, and all component styles.
Selective imports
import '@winnicodes/winnimal-ui/tokens.css' // CSS custom properties only
import '@winnicodes/winnimal-ui/base.css' // Reset + typography
import '@winnicodes/winnimal-ui/components.css' // All UI components
import '@winnicodes/winnimal-ui/treeview.css' // TreeView component
import '@winnicodes/winnimal-ui/draglist.css' // Drag & drop listApp shell blocks
Pre-built layout patterns, imported separately:
import '@winnicodes/winnimal-ui/blocks/sidebar-layout.css'
import '@winnicodes/winnimal-ui/blocks/login.css'React components
import { CodeSnippet, Select, TreeView, Sortable, SortableItem, SortableItemHandle } from '@winnicodes/winnimal-ui'
import type { SelectOption, TreeNode } from '@winnicodes/winnimal-ui'Components
CSS-only
All components are usable with plain HTML and CSS classes — no JavaScript required.
| Component | Classes |
|---|---|
| Button | btn btn-primary · btn-secondary · btn-danger · btn-ghost · btn-icon |
| Badge | badge badge-primary · badge-secondary · badge-success · badge-warning · badge-danger |
| Input | input · input-group · input-group-text |
| Textarea | textarea |
| Dropdown / Menu | menu · menu-item · menu-divider · menu-label |
| Modal | modal-overlay · modal · modal-sm · modal-lg · modal-header · modal-body · modal-footer |
| Toast | toast-container · toast · toast-info · toast-success · toast-warning · toast-danger |
| Tabs | tabs · tab · tab.active · tab-panel |
| Pagination | pagination · page-item · page-item.active |
| Checkbox | checkbox-group · checkbox |
| Radio | radio-group · radio |
| Switch / Toggle | switch |
| Chip / Tag | chip · chip-remove |
| Spinner | spinner · spinner-sm · spinner-lg |
| Card | card · card-header · card-body · card-footer |
| Table | table · table-striped |
| Alert | alert alert-info · alert-success · alert-warning · alert-danger |
| Progress | progress · progress-bar |
| Tooltip | [data-tooltip] |
| <kbd> | styled natively |
React components
| Component | Description |
|---|---|
| <Select> | Custom styled select matching the .menu dropdown |
| <CodeSnippet> | Syntax-highlighted code block with copy button |
| <TreeView> | Collapsible file/folder tree |
| <Sortable> / <SortableItem> | Drag-and-drop sortable list |
Dark mode
Add data-theme="ember-noir" to any ancestor element (typically <html> or <body>):
<html data-theme="ember-noir">Toggle in JavaScript:
document.documentElement.dataset.theme =
document.documentElement.dataset.theme === 'ember-noir' ? '' : 'ember-noir'App shell blocks
Sidebar layout
<div class="app-shell">
<header class="app-header">…</header>
<aside class="sidebar">
<div class="sidebar-scroll">
<nav>
<a class="sidebar-item active">Dashboard</a>
<a class="sidebar-item">Settings</a>
</nav>
</div>
</aside>
<main class="main-content">
<div class="main-container">…</div>
</main>
</div>Login panel
<div class="login-wrap">
<div class="login-panel">
<div class="login-brand-block">…</div>
<form class="login-form">
<div class="login-field">
<label>E-Mail</label>
<input class="input" type="email" />
</div>
<button class="btn btn-primary login-submit">Anmelden</button>
</form>
</div>
</div>Design tokens
All values are exposed as CSS custom properties under the --wi- prefix and use the rgb() channel format for composability with opacity:
color: rgb(var(--wi-primary-500));
color: rgb(var(--wi-primary-500) / 0.6);Key semantic tokens:
| Token | Usage |
|---|---|
| --wi-brand | Primary brand color |
| --wi-on-brand | Text on brand-colored backgrounds |
| --wi-surface | Default page background |
| --wi-surface-raised | Card / popover background |
| --wi-surface-overlay | Modal / tooltip background |
| --wi-border | Default border color |
| --wi-text | Primary text |
| --wi-text-muted | Secondary / placeholder text |
| --wi-info / --wi-success / --wi-warning / --wi-danger | Semantic status colors |
License
MIT
