@consolia/ui v0.2.7
@consolia/ui
A React component library styled with Stitches, designed specifically for Consolia's internal projects and design system.
⚠️ Important Notice
This library is built specifically for Consolia's design system and internal use cases. While it's open-sourced for transparency and potential inspiration, it's not intended as a general-purpose component library for public consumption.
- ✅ Use if: You're working on Consolia projects or want to study the implementation
- ❌ Consider alternatives if: You need a general-purpose UI library for your own projects
For general-purpose React component libraries, consider Chakra UI, Mantine, Ant Design, or Material-UI instead.
Features
- 🎨 Modern Design System - Carefully crafted components with consistent theming
- 🏗️ Built for Next.js - Compatible with Next.js and React 19+
- 🎯 TypeScript First - Full type safety with comprehensive TypeScript definitions
- 📱 Responsive - Mobile-first design with flexible breakpoint system
- 🎭 Theming - Light/dark mode support with Stitches CSS-in-JS
- ⚡ Performance - Tree-shakeable with minimal runtime overhead
- 📖 Well Documented - Auto-generated API documentation from TypeScript interfaces
Installation
# Using pnpm (recommended)
pnpm add @consolia/ui
# Using npm
npm install @consolia/ui
# Using yarn
yarn add @consolia/uiPeer Dependencies
Ensure you have the required peer dependencies:
pnpm add react react-dom nextQuick Start
import { Provider, Button, Text, Stack } from '@consolia/ui';
function App() {
return (
<Provider>
<Stack direction="column" align="center" css={{ padding: '$large' }}>
<Text as="h1">Welcome to Consolia UI</Text>
<Button theme="solid" onClick={() => alert('Hello!')}>
Get Started
</Button>
</Stack>
</Provider>
);
}Development
To work on components locally:
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Run linting and formatting
pnpm tidy
# Build the library
pnpm build
# Generate documentation
pnpm docs:onlyProject Structure
src/
├── components/ # React components
├── hooks/ # Custom React hooks
├── types.ts # TypeScript interfaces (auto-documented)
├── stitches.config.ts # Design system configuration
└── index.ts # Main entry point
docs/ # Auto-generated API documentation
playground/ # Component demos and examplesComponents
This library includes the following components with full TypeScript support and comprehensive documentation:
- Accordion - Collapsible content sections with multiple expansion support
- Avatar - User profile image with fallback text display
- Badge - Small status indicators and informational labels
- Box - Versatile container with optional image, header, and footer
- Button - Interactive element for user actions with multiple themes
- Calendar - Date picker with range and single selection modes
- CalendarMonths - Month and year selection interface
- Divider - Visual separator line with customizable spacing
- Drawer - Slide-out panel overlay for secondary content
- Field - Multi-line textarea input with validation and actions
- Form - Form wrapper with validation and submission handling
- Icon - Consistent icon wrapper with theming support
- Image - Enhanced Next.js Image with additional styling options
- Input - Single-line form input with validation and actions
- Loading - Animated loading spinner with customizable appearance
- LoadingOverlay - Full-screen loading overlay with message display
- Logo - Consolia brand logo in various formats and styles
- Menu - Dropdown menu with nested options and keyboard navigation
- Modal - Centered overlay dialog for important interactions
- Nodes - Hierarchical node tree visualization with connecting lines
- Popover - Floating content overlay triggered by user interaction
- Portal - Render content outside normal DOM hierarchy
- Provider - Theme and context provider for the entire UI system
- Select - Dropdown selection with filtering and positioning options
- SelectMulti - Multi-selection dropdown with limits and batch operations
- Stack - Responsive layout container with flexible spacing and alignment
- Table - Data table with sorting, pagination, and nested rows
- Tabs - Tabbed interface for organizing content into panels
- Text - Versatile text element with multiple sizes, styles, and link support
- Upload - File upload with drag & drop, validation, and progress
- View - Main layout container with hero styling and responsive behavior
📖 Full API Documentation: Detailed TypeScript interfaces, props, and examples are available in the
docs/interfaces/directory. All documentation is auto-generated from TSDoc comments in the source code.
Theming
The library uses Stitches for styling with a comprehensive design system:
import { Provider } from '@consolia/ui';
// Enable dark mode
<Provider dark>
<YourApp />
</Provider>
// Custom CSS with theme tokens
<Button css={{
backgroundColor: '$purple',
color: '$background',
borderRadius: '$large'
}}>
Custom Button
</Button>Available Theme Tokens
- Colors:
$background,$text,$purple,$blue,$orange,$yellow,$border,$borderLight,$overlay,$surface,$surfaceHover,$surfaceLight - Spacing:
$none,$smallest,$smaller,$small,$medium,$large,$larger,$largest,$excess - Radii:
$small,$medium,$large - Font Sizes:
$small,$default,$h6,$h5,$h4,$h3,$h2,$h1 - Breakpoints:
phone,phoneX,tablet,tabletX,laptop,laptopX,desktop,desktopX,wide
Available Utils
- Responsive:
phone(),phoneX(),tablet(),tabletX(),laptop(),laptopX(),desktop(),desktopX(),wide(),micro(),print(),retina() - Visibility:
hidden(),hiddenInline(),hiddenSpecial(),visible(),visibleInline(),visibleSpecial() - Theme-aware:
darkOnly(),lightOnly()
// Example usage of utils
<Button css={{
phone: { fontSize: '$small' }, // Responsive
hidden: 'tablet', // Hide on tablet
darkOnly: { color: '$yellow' } // Dark mode specific
}}>
Responsive Button
</Button>Acknowledgments
This library is built on top of excellent open source projects:
- @stitches/react - CSS-in-JS library with near-zero runtime
- @phosphor-icons/react - Flexible icon family for interfaces
- react-hot-toast - Smoking hot React notifications
- fast-sort - Blazing fast array sorting