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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@abisheks238/react-ui-kit

v1.2.0

Published

A lightweight, customizable component library for modern React applications with 19 essential UI elements

Readme

@abisheks238/react-ui-kit

npm version npm downloads GitHub license Bundle Size TypeScript

🎨 A lightweight, customizable component library for modern React applications

Includes 19 essential UI elements designed with accessibility and performance in mind. Easy to integrate with any React project — fully styleable using CSS or Tailwind. ✨ Now with enhanced animations, glassmorphism effects, and creative micro-interactions!

✨ Features

  • 🎯 19 Essential Components - Everything you need for modern UIs
  • 🎨 Fully Customizable - Style with CSS or Tailwind CSS
  • Accessibility First - WCAG compliant with proper ARIA support
  • 🌗 Dark Mode Ready - Built-in dark mode support
  • 📱 Responsive Design - Mobile-first approach
  • 🎭 Smooth Animations - Powered by Framer Motion with creative effects
  • 🔧 TypeScript Support - Full type safety out of the box
  • 📦 Lightweight - Minimal bundle size impact
  • 🚀 Performance Optimized - Tree-shakeable components
  • 🎪 Storybook Ready - Interactive component documentation
  • Glassmorphism & Modern Effects - Beautiful visual effects
  • 🌈 Gradient Animations - Dynamic color transitions
  • 💫 Micro-interactions - Delightful user feedback

📦 Components Included

Core Components

  • 🔘 Button - Multiple variants, sizes, and states
  • 🪟 Modal - Accessible dialog with focus management
  • ⚠️ Alert - Contextual notifications with dismissal
  • 💬 Tooltip - Positioning-aware hover information

Form Components

  • 📝 InputField - Text inputs with validation states
  • 📋 Select - Dropdown selection with search
  • ☑️ Checkbox - Individual and group checkboxes
  • 🔘 RadioGroup - Radio button groups
  • 🔄 Switch - Toggle switches with labels
  • 📅 DatePicker - Date selection with calendar

Navigation Components

  • 📖 Breadcrumbs - Navigation hierarchy
  • 📄 Pagination - Page navigation controls
  • 📑 Tabs - Tabbed content organization
  • 🪗 Accordion - Collapsible content sections

Display Components

  • 👤 Avatar - User profile images with fallbacks
  • 🏷️ Badge - Count indicators and status badges
  • 📊 Progress - Linear and circular progress indicators
  • 💀 Skeleton - Loading state placeholders
  • Loader - Various loading animations

🚀 Quick Start

Installation

Install the package using your preferred package manager.

Basic Usage

import React from 'react';
import { Button, Modal, Alert } from '@abisheks238/react-ui-kit';

function App() {
  const [isModalOpen, setIsModalOpen] = React.useState(false);

  return (
    <div className="p-8">
      <Button 
        variant="primary" 
        size="lg"
        onClick={() => setIsModalOpen(true)}
      >
        Open Modal
      </Button>
      <Alert 
        variant="success" 
        title="Success!" 
        dismissible
        className="mt-4"
      >
        Your changes have been saved successfully.
      </Alert>

      <Modal
        isOpen={isModalOpen}
        onClose={() => setIsModalOpen(false)}
        title="Welcome to React UI Kit"
        size="md"
      >
        <p>This is a beautiful, accessible modal component!</p>
      </Modal>
    </div>
  );
}

export default App;

With Tailwind CSS (Recommended)

Configure your Tailwind CSS to include the component styles:

module.exports = {
  content: [
    "./src/**/*.{js,jsx,ts,tsx}",
    "./node_modules/@abisheks238/react-ui-kit/dist/**/*.js"
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};

Custom Styling

import { Button } from '@abisheks238/react-ui-kit';

<Button 
  className="bg-purple-600 hover:bg-purple-700 text-white"
  variant="ghost"
>
  Custom Styled Button
</Button>

<Button 
  style={{ 
    backgroundColor: '#6366f1', 
    borderRadius: '12px' 
  }}
>
  Styled Button
</Button>

📚 Component Documentation

Button

import { Button } from '@abisheks238/react-ui-kit';

<Button
  variant="primary"      
  size="md"               
  loading={false}         
  disabled={false}        
  fullWidth={false}      
  leftIcon={<Icon />}    
  rightIcon={<Icon />}    
  href="/link"           
  onClick={() => {}}     
>
  Button Text
</Button>

InputField

import { InputField } from '@abisheks238/react-ui-kit';

<InputField
  label="Email Address"
  placeholder="Enter your email"
  variant="outline"       
  size="md"             
  error="Invalid email"   
  helperText="We'll never share your email"
  leftIcon={<EmailIcon />}
  rightIcon={<ValidationIcon />}
  fullWidth={true}
/>

Modal

import { Modal, Button } from '@abisheks238/react-ui-kit';

function ModalExample() {
  const [isOpen, setIsOpen] = React.useState(false);

  const handleConfirm = () => {
    setIsOpen(false);
  };

  return (
    <Modal
      isOpen={isOpen}
      onClose={() => setIsOpen(false)}
      title="Confirm Action"
      size="md"                  
      closeOnOverlayClick={true}   
      closeOnEscape={true}         
      showCloseButton={true}       
      centered={true}              
      footer={
        <div className="flex space-x-3">
          <Button variant="outline" onClick={() => setIsOpen(false)}>
            Cancel
          </Button>
          <Button variant="primary" onClick={handleConfirm}>
            Confirm
          </Button>
        </div>
      }
    >
      <p>Are you sure you want to perform this action?</p>
    </Modal>
  );
}

Alert

import { Alert } from '@abisheks238/react-ui-kit';

<Alert
  variant="success"        
  title="Success!"         
  dismissible={true}       
  onDismiss={() => {}}    
  icon={true}            
>
  Your changes have been saved successfully.
</Alert>

🎨 Theming

CSS Custom Properties

:root {
  --ui-kit-primary: #3b82f6;
  --ui-kit-primary-hover: #2563eb;
  --ui-kit-border-radius: 0.5rem;
  --ui-kit-font-family: 'Inter', sans-serif;
}

Dark Mode

<div className="dark">
  <Button variant="primary">Dark Mode Button</Button>
</div>

🔧 Advanced Usage

Form Integration

import React from 'react';
import { useForm, SubmitHandler } from 'react-hook-form';
import { InputField, Button, Alert } from '@abisheks238/react-ui-kit';

interface FormData {
  name: string;
  email: string;
}

function ContactForm() {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>();
  const [submitStatus, setSubmitStatus] = React.useState<'idle' | 'success' | 'error'>('idle');

  const onSubmit: SubmitHandler<FormData> = async (data) => {
    try {
      // Simulate API call
      await new Promise(resolve => setTimeout(resolve, 1000));
      console.log('Form submitted:', data);
      setSubmitStatus('success');
    } catch (error) {
      console.error('Submit error:', error);
      setSubmitStatus('error');
    }
  };

  return (
    <div className="max-w-md mx-auto">
      {submitStatus === 'success' && (
        <Alert variant="success" className="mb-4" dismissible onDismiss={() => setSubmitStatus('idle')}>
          Form submitted successfully!
        </Alert>
      )}
      
      {submitStatus === 'error' && (
        <Alert variant="danger" className="mb-4" dismissible onDismiss={() => setSubmitStatus('idle')}>
          Failed to submit form. Please try again.
        </Alert>
      )}

      <form onSubmit={handleSubmit(onSubmit)} className="space-y-4">
        <InputField
          label="Name"
          placeholder="Enter your name"
          {...register('name', { required: 'Name is required' })}
          error={errors.name?.message}
        />
        
        <InputField
          label="Email"
          type="email"
          placeholder="Enter your email"
          {...register('email', { 
            required: 'Email is required',
            pattern: {
              value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
              message: 'Invalid email address'
            }
          })}
          error={errors.email?.message}
        />
        
        <Button type="submit" variant="primary" fullWidth>
          Submit
        </Button>
      </form>
    </div>
  );
}

Custom Component Composition

import React from 'react';
import { Button, Badge, Avatar } from '@abisheks238/react-ui-kit';

interface User {
  id: string;
  name: string;
  avatar?: string;
  role: string;
  status: 'online' | 'offline' | 'away';
  notifications: number;
}

interface UserCardProps {
  user: User;
  onMessage: (userId: string) => void;
}

function UserCard({ user, onMessage }: UserCardProps) {
  const MessageIcon = () => (
    <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
      <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" />
    </svg>
  );

  return (
    <div className="p-6 bg-white rounded-lg shadow-md">
      <div className="flex items-center space-x-4">
        <div className="relative">
          <Avatar
            src={user.avatar}
            name={user.name}
            size="lg"
            status={user.status}
          />
          {user.notifications > 0 && (
            <Badge
              count={user.notifications}
              position="top-right"
              variant="danger"
            />
          )}
        </div>
        
        <div className="flex-1">
          <h3 className="text-lg font-semibold">{user.name}</h3>
          <p className="text-gray-600">{user.role}</p>
        </div>
        
        <Button
          variant="primary"
          size="sm"
          onClick={() => onMessage(user.id)}
          leftIcon={<MessageIcon />}
        >
          Message
        </Button>
      </div>
    </div>
  );
}

🧪 Testing

Components include built-in test IDs for easy testing:

import { render, screen, fireEvent } from '@testing-library/react';
import { Button } from '@abisheks238/react-ui-kit';

test('renders button with text', () => {
  const handleClick = jest.fn();
  
  render(
    <Button data-testid="submit-button" onClick={handleClick}>
      Submit
    </Button>
  );
  
  const button = screen.getByTestId('submit-button');
  expect(button).toBeInTheDocument();
  expect(button).toHaveTextContent('Submit');
  
  fireEvent.click(button);
  expect(handleClick).toHaveBeenCalledTimes(1);
});

📖 Storybook

Explore all components interactively in our Storybook documentation.

🤝 Contributing

We welcome contributions! Please see our Contributing Guide.

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

📊 Bundle Size

| Component | Size (gzipped) | |-----------|---------------| | Button | ~2KB | | Modal | ~4KB | | InputField | ~3KB | | All Components | ~25KB |

🔄 Migration Guide

From v0.x to v1.x

  • Component names remain the same
  • Props have been standardized
  • CSS classes follow new naming convention

📋 Roadmap

  • [ ] 🎨 Theme Builder Tool
  • [ ] 📱 React Native Support
  • [ ] 🔧 CLI for Component Generation
  • [ ] 🎪 Advanced Storybook Addons
  • [ ] 📚 Video Tutorials

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Built with ❤️ by Abishek
  • Inspired by modern design systems
  • Powered by React, TypeScript, and Tailwind CSS

Made for the React community with ❤️

NPM

Enhanced Components with Creative Animations

import { Loader, Progress, Button } from '@abisheks238/react-ui-kit';
<Loader 
  variant="morphing"    
  gradient={true}        
  speed="fast"          
/>

<Loader variant="orbit" size="lg" gradient />
<Loader variant="ripple" color="success" />

<Progress 
  value={75} 
  gradient={true}        
  glow={true}           
  animated={true}
/>

<Button className="ui-button-glass">
  Glass Effect
</Button>

<Button className="ui-button-neon">
  Neon Glow
</Button>


<Button className="ui-button-gradient">
  Gradient Magic
</Button>

New Animation Classes


<div className="animate-float">Floating Element</div>
<div className="ui-morphing">Liquid Shape</div>
<div className="ui-neon-glow">Neon Glow</div>
<div className="animate-wiggle">Wiggle</div>
<div className="animate-jello">Jello</div>
<div className="animate-rubber">Rubber</div>
<div className="animate-heartbeat">Heartbeat</div>