npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

preact-nebula-ui

v1.3.2

Published

Modern React component library built with Preact and Tailwind CSS

Readme

🌟 Nebula UI

Modern, accessible, and production-ready component library built with Preact and Tailwind CSS.

NPM Version TypeScript Preact Tailwind CSS Tests Coverage Netlify Status


Live Demo & Documentation: https://preact-nebula-ui.netlify.app/


🚀 Project Status (August 2025)

🎉 PROJECT COMPLETE - PRODUCTION READY

  • Live demo & docs: https://preact-nebula-ui.netlify.app/
  • Automatic documentation: The build process generates full metadata and README for every component
  • Clean repository: Build artifacts (public/docs) are ignored by git
  • Build integration: Documentation is copied to dist/docs on every build
  • Components: 44+ (100% coverage, full documentation)
  • Tests: 1430+ (100% coverage)
  • Production-ready: Ready for deployment

✨ Features

  • 🚀 Built for Preact - Optimized for Preact with full TypeScript support
  • 🎨 Tailwind CSS - Utility-first styling with consistent design tokens
  • 📦 Tree-shakable - Import only what you need, minimal bundle impact
  • Accessible - WCAG 2.1 AA compliant with keyboard navigation
  • 🔧 Customizable - Easy theming through Tailwind configuration
  • 📱 Responsive - Mobile-first design with all breakpoints
  • 🧪 Production Ready - 1500+ tests, comprehensive edge case coverage
  • 🌗 Dark Mode - Complete light/dark theme support
  • High Performance - Optimized bundle sizes and lazy loading
  • 📊 Complete Library - Comprehensive component ecosystem (50+ components)

📦 Installation

npm install preact-nebula-ui

Make sure you have the required peer dependencies:

npm install preact

🚀 Quick Start

1. Install Nebula UI

npm install preact-nebula-ui

Make sure you have the required peer dependencies:

npm install preact

2. Import Styles

Add the Nebula UI styles to your main CSS file:

@import 'preact-nebula-ui/styles';

Or import in your JavaScript/TypeScript entry file:

import 'preact-nebula-ui/styles'

3. Use Components

import { Button, Input, Card, Alert, Icon, Heading } from 'preact-nebula-ui'

function App() {
  return (
    <div className="p-6 bg-white dark:bg-gray-900">
      <Card className="max-w-md mx-auto">
        <Card.Header>
          <Heading level={2} className="flex items-center gap-2">
            <Icon name="star" color="warning" />
            Welcome to Nebula UI
          </Heading>
        </Card.Header>
        <Card.Body className="space-y-4">
          <Alert variant="info" className="flex items-center gap-2">
            <Icon name="info" size="sm" />
            Get started with our comprehensive component library!
          </Alert>
          <Input 
            placeholder="Enter your name" 
            size="lg"
            leftIcon={<Icon name="user" size="sm" />}
          />
          <Button 
            variant="primary" 
            size="lg" 
            fullWidth
            leftIcon={<Icon name="check" size="sm" />}
          >
            Get Started
          </Button>
        </Card.Body>
      </Card>
    </div>
  )
}

📚 Complete Component Library (52+ Components)

Nebula UI provides a comprehensive set of accessible, customizable, and well-tested components organized by category. All documentation and demos are available online:

Live Demo & Docs: https://preact-nebula-ui.netlify.app/

For detailed component documentation with usage examples, see the 📚 Component Documentation section below.

🎨 Customization & Theming

Nebula UI uses Tailwind CSS for consistent styling and easy customization:

🎯 Theme Configuration

// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        primary: {
          50: '#eff6ff',
          500: '#3b82f6',
          900: '#1e3a8a'
        }
      }
    }
  },
  plugins: []
}

🌗 Dark Mode Support

// Automatic dark mode detection
<div className="bg-white dark:bg-gray-900">
  <Button variant="primary">
    Works in light and dark mode
  </Button>
</div>

🎨 Custom Styling

// Extend with custom classes
<Button 
  className="custom-shadow hover:scale-105 transition-transform"
  variant="primary"
>
  Custom Styled Button
</Button>

🧪 Development

Setup

git clone https://github.com/PRachwal/preact-nebula-ui.git
cd preact-nebula-ui
npm install

🔧 Development Scripts

# Start development server with component showcase
npm run dev

# Build the library for distribution
npm run build:lib

# Run comprehensive test suite
npm run test

# Generate test coverage with dashboard integration
npm run test:coverage

# Update test coverage data for dashboard
npm run update-coverage

# Type check all files
npm run type-check

# Lint code with ESLint
npm run lint

# Build and publish (dry run)
npm run publish:dry

# Smart NPM publishing with version checking
npm run publish:npm

# Simple NPM publish (legacy)
npm run publish:simple

🚀 Smart Publishing System

Nebula UI includes an intelligent publishing system that:

  • Auto-checks NPM registry for version conflicts
  • Suggests version bumps (patch/minor/major) when needed
  • Prevents duplicate publishing of same version
  • Handles 2FA authentication seamlessly 🔐
  • Runs comprehensive pre-publish checks (tests, build, validation)
  • Handles git tagging and commits automatically
  • Interactive confirmations for safe publishing
# Use the smart publishing script (recommended)
npm run publish:npm

Example workflow:

  1. Script detects local version equals NPM version
  2. Suggests version bump options (patch: 1.2.1 → 1.2.2)
  3. Updates package.json automatically
  4. Runs tests and builds library
  5. Handles NPM 2FA authentication if required 🔐
  6. Publishes to NPM with confirmations
  7. Creates git commit and tag

2FA Support:

  • Automatically detects when NPM requires 2FA
  • Prompts for authenticator code when needed
  • Retries on invalid/expired codes
  • Clear troubleshooting guidance

For detailed publishing guide, see Smart Publishing Guide.

🚀 Deployment Scripts

# Interactive deployment (Linux/macOS)
npm run deploy

# Dry run deployment test
npm run deploy:dry

# Windows deployment
npm run deploy:win

# Windows dry run
npm run deploy:win:dry

Windows PowerShell Scripts

For Windows users, use the PowerShell scripts in the scripts/ folder:

# Build the library
.\scripts\build.ps1

# Publish (dry run)
.\scripts\publish.ps1 -DryRun

# Publish to NPM
.\scripts\publish.ps1

Component Development Guide

When creating a new component, follow this standardized structure based on our Checkbox component example:

📁 Component Library Structure (nebula/components/ComponentName/)

ComponentName/
├── ComponentName.tsx      # Main component implementation
├── ComponentName.types.ts # TypeScript interfaces and types
├── ComponentName.test.tsx # Unit tests with comprehensive coverage
└── index.ts              # Export barrel file

Example component files:

  1. ComponentName.tsx - Main component with:

    • forwardRef implementation for ref forwarding
    • Comprehensive styling system with variants, sizes, states
    • Full accessibility support (ARIA attributes, keyboard navigation)
    • Dark mode support
    • Error handling and validation states
  2. ComponentName.types.ts - Type definitions:

    export interface ComponentNameProps extends HTMLAttributes<HTMLElement> {
      variant?: 'default' | 'outlined'
      size?: 'sm' | 'md' | 'lg'
      disabled?: boolean
      error?: boolean
      // ... other component-specific props
    }
  3. ComponentName.test.tsx - Comprehensive tests covering:

    • Basic rendering and props
    • All variants and sizes
    • Accessibility features
    • User interactions
    • Error states
    • Edge cases
  4. index.ts - Clean exports:

    export { ComponentName } from './ComponentName'
    export type { ComponentNameProps } from './ComponentName.types'

📁 Documentation Pages Structure (src/pages/componentname/)

componentname/
├── ComponentNamePage.tsx  # Main page component
├── index.ts              # Page exports
└── sections/             # Interactive examples and docs
    ├── BasicUsageSection.tsx    # Basic usage examples
    ├── VariantsSection.tsx      # All variants showcase
    ├── InteractiveSection.tsx   # Interactive playground
    ├── AccessibilitySection.tsx # Accessibility features demo
    └── index.ts                # Section exports

Page structure guidelines:

  1. ComponentNamePage.tsx - Main documentation page with:

    • Component overview and description
    • Navigation tabs for different sections
    • Imports from ./sections
  2. sections/ - Individual documentation sections:

    • BasicUsageSection - Simple usage examples with code
    • VariantsSection - All visual variants and sizes
    • InteractiveSection - Live playground with controls
    • AccessibilitySection - Accessibility features demonstration

🔗 Integration Steps

  1. Add to main exports in nebula/components/index.ts:

    export { ComponentName } from './ComponentName'
    export type { ComponentNameProps } from './ComponentName/ComponentName.types'
  2. Add page route in src/app.tsx:

    // Import
    import { ComponentNamePage } from './pages/componentname'
       
    // Add route
    <ComponentNamePage path="/componentname" />
  3. Add to documentation by updating component lists and examples

  4. Update test data in src/data/testResults.ts:

    // Add component to componentTestData array
    { componentName: 'ComponentName', testCount: XX, coverage: 100, status: 'passing', lastUpdated: '2025-08-04' }
       
    // Update mockTestResults.totalTests with new count
    totalTests: XXX, // Add your component's test count to total
  5. Update component status in src/data/components.ts:

    // Change component status from 'planned' to 'completed' and update coverage
    { 
      name: 'ComponentName',
      status: 'completed',
      testCoverage: 100
    }
  6. Update component count in README.md and component documentation

This structure ensures consistency, maintainability, and comprehensive documentation across all components.

📋 Production Status & Roadmap

🎉 Project Complete - Production Ready

Nebula UI is now production-ready with:

  • 🏆 50+ Components - Complete component ecosystem
  • 🧪 1500+ Test Cases with 100% coverage
  • Full Accessibility WCAG 2.1 AA compliance
  • 📱 Responsive Design Mobile-first approach
  • 🌗 Dark Mode Support Complete theming system
  • 📦 Tree-shakable Optimized bundle sizes
  • 🎯 TypeScript Full type safety and IntelliSense

🚀 Future Considerations

The core library is complete and production-ready. Future enhancements may include:

  • Advanced Animations - Motion components and transitions
  • Data Visualization - Charts and graphs
  • Advanced Tables - Virtual scrolling and complex data operations
  • Mobile Components - Native mobile-specific interactions
  • i18n Support - Built-in internationalization

📚 Documentation & Examples

🔍 Available Documentation

  • Live Demo & Docs: https://preact-nebula-ui.netlify.app/
  • Interactive Examples: Each component page includes live examples you can interact with
  • TypeScript Definitions: Full IntelliSense support and type safety out of the box
  • Usage Examples: Comprehensive code examples for every component and use case

💡 Usage Examples

Basic Form Example

import { Input, Button, Label, FieldError, Card } from 'preact-nebula-ui'

function ContactForm() {
  return (
    <Card>
      <Card.Header>Contact Us</Card.Header>
      <Card.Body className="space-y-4">
        <div>
          <Label htmlFor="email" required>Email</Label>
          <Input 
            id="email"
            type="email"
            placeholder="[email protected]"
            size="lg"
          />
          <FieldError>Please enter a valid email</FieldError>
        </div>
        <Button variant="primary" size="lg" fullWidth>
          Submit
        </Button>
      </Card.Body>
    </Card>
  )
}

Advanced Layout Example

import { Container, Stack, Grid, Avatar, Badge } from 'preact-nebula-ui'

function UserProfile() {
  return (
    <Container size="xl">
      <Stack direction="vertical" spacing="lg">
        <Grid cols="3" gap="md">
          <Avatar 
            size="2xl" 
            src="/user.jpg" 
            alt="User"
          >
            <AvatarBadge status="online" />
          </Avatar>
          <div>
            <h2>John Doe</h2>
            <Badge variant="success">Active</Badge>
          </div>
        </Grid>
      </Stack>
    </Container>
  )
}

Interactive Component Example

import { Modal, Button, Alert, Progress } from 'preact-nebula-ui'

function InteractiveDemo() {
  const [isOpen, setIsOpen] = useState(false)
  
  return (
    <>
      <Button onClick={() => setIsOpen(true)}>
        Open Modal
      </Button>
      
      <Modal 
        isOpen={isOpen} 
        onClose={() => setIsOpen(false)}
        size="md"
      >
        <Modal.Header>Progress Update</Modal.Header>
        <Modal.Body>
          <Alert variant="info" className="mb-4">
            Your upload is in progress...
          </Alert>
          <Progress value={75} max={100} />
        </Modal.Body>
        <Modal.Footer>
          <Button onClick={() => setIsOpen(false)}>
            Close
          </Button>
        </Modal.Footer>
      </Modal>
    </>
  )
}

📚 Component Documentation

After installing the package, you can access comprehensive documentation for each component:

📝 Form Components

  • Button – Action buttons with variants, sizes, loading states
  • Input – Text fields with validation, icons, and accessibility
  • Label – Accessible form labels with required indicators
  • Textarea – Multi-line text input with auto-resize and character count
  • FieldError – Accessible error message display with ARIA support
  • Checkbox – Tri-state checkboxes with validation and custom content
  • Radio – Single selection with group management and validation
  • Switch – Toggle controls with animations, sizes, and icons
  • Select – Dropdown with search, multi-select, and keyboard navigation
  • Slider – Range selector with dual handles, marks, and orientation support
  • Rating – Star rating component with half-star support
  • DatePicker – Calendar widget with locale support and date ranges
  • TimePicker – Time selection with format flexibility and validation
  • Autocomplete – Search input with async data and multi-select

🏗️ Layout & Display Components

  • Card – Composable content containers with header/body/footer
  • Container – Responsive containers with padding and max-width controls
  • Stack – Flexible vertical/horizontal layout with spacing and alignment
  • Divider – Visual separators with orientation and text support
  • Grid – CSS Grid layout system with responsive breakpoints
  • Avatar – User avatars with images, initials, groups, and badges
  • Image – Advanced image component with lazy loading and zoom
  • Icon – Universal SVG icon component with 50+ built-in icons and custom support

🎨 Feedback & Status Components

  • Alert – Informational messages with variants and dismissal actions
  • Badge – Status indicators with dot mode and overflow handling
  • Progress – Linear/circular progress indicators with labels
  • Skeleton – Loading placeholders with animation and shape variants
  • Spinner – Loading indicators with size, color, and accessibility
  • Empty – Standardized empty state component with variants

🧭 Navigation & Data Components

  • Breadcrumb – Hierarchical navigation with responsive collapse
  • Pagination – Page navigation with sizes, quick jump, and accessibility
  • Table – Data tables with sorting, selection, and responsive design
  • Tabs – Horizontal/vertical tabs with keyboard navigation
  • TreeView – Hierarchical data display with expand/collapse
  • Steps – Process visualization and workflow guidance
  • Anchor – Smart navigation with scroll spy functionality
  • BackTop – Smooth scroll-to-top with progress indication

🚀 Advanced Interaction Components

  • Modal – Full-screen dialogs with focus management and portal rendering
  • Tooltip – Contextual information with intelligent positioning
  • Drawer – Sliding panels with gesture support and animations
  • Popover – Rich contextual content with flexible positioning
  • Toast – Notification system with auto-dismiss and positioning
  • Affix – Position-aware component that sticks during scroll

📊 Data Display & Management Components

  • Transfer – Dual-list component for item selection and movement
  • Tags – Dynamic tag management with creation and editing
  • Collapse – Collapsible content areas with nested support
  • Carousel – Content carousel with touch support and auto-play
  • Upload – File upload with drag-and-drop and progress tracking
  • ConfigProvider – Global configuration and theme provider

All component documentation is available online at https://preact-nebula-ui.netlify.app/ with interactive examples and comprehensive usage guides.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

MIT © PRachwal

🔗 Links


Made with ❤️ using Preact and Tailwind CSS