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

walletsphere-components

v0.0.7

Published

A modern React component library with Button, Input, Toast (with stacking effect), and Notification components built with TypeScript, Tailwind CSS, and Lucide icons

Readme

🎨 WalletSphere Components

A modern, lightweight React component library built with TypeScript, Tailwind CSS, and Lucide icons.

✨ Features

  • 🎯 TypeScript First - Fully typed components
  • 🎨 Tailwind CSS - Utility-first styling
  • 🔧 Customizable - Flexible props and variants
  • Accessible - ARIA compliant
  • 📦 Tree-shakeable - Import only what you need
  • 🚀 Lightweight - No heavy dependencies
  • 📚 Storybook - Interactive documentation

📦 Installation

npm install walletsphere-components

🚀 Quick Start

import { Button, Input, toast, ToastContainer } from 'walletsphere-components';
import 'walletsphere-components/styles';

function App() {
  return (
    <>
      <Button variant="primary" onClick={() => toast.success('Hello!')}>
        Click me
      </Button>
      
      <Input 
        label="Email" 
        placeholder="[email protected]"
        type="email"
      />
      
      <ToastContainer />
    </>
  );
}

📚 Components

Button

Versatile button component with multiple variants and sizes.

<Button variant="primary" size="md" loading>
  Save Changes
</Button>

Variants: default, primary, secondary, danger, ghost, link
Sizes: sm, md, lg

Input

Form input with labels, errors, and icons support.

<Input 
  label="Email"
  error="Invalid email"
  leftIcon={<Mail />}
  placeholder="[email protected]"
/>

Variants: default, outlined, filled
Sizes: sm, md, lg

Toast (Imperative API) ⭐ NEW

Modern toast notifications with imperative API.

// Setup: Add ToastContainer once in your app
<ToastContainer />

// Use anywhere in your code
toast.success('Saved successfully!');
toast.error('Something went wrong');
toast.promise(fetchData(), {
  loading: 'Loading...',
  success: 'Done!',
  error: 'Failed!'
});

Methods: success, error, warning, info, default, promise, dismiss, dismissAll

📖 Full Toast documentation

Notification (Declarative)

Controlled notification component for custom implementations.

<Notification 
  open={isOpen}
  variant="success"
  message="Changes saved"
  position="top-right"
  onClose={() => setIsOpen(false)}
/>

🎯 Usage Examples

Form with validation

import { Input, Button, toast } from 'walletsphere-components';

function LoginForm() {
  const [email, setEmail] = useState('');
  const [error, setError] = useState('');

  const handleSubmit = async () => {
    if (!email.includes('@')) {
      setError('Invalid email');
      return;
    }
    
    try {
      await login(email);
      toast.success('Logged in successfully!');
    } catch (err) {
      toast.error('Login failed');
    }
  };

  return (
    <>
      <Input
        label="Email"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
        error={error}
      />
      <Button variant="primary" onClick={handleSubmit}>
        Login
      </Button>
    </>
  );
}

Async operations with toast.promise

import { toast } from 'walletsphere-components';

function DataFetcher() {
  const loadData = () => {
    toast.promise(
      fetch('/api/data').then(r => r.json()),
      {
        loading: 'Fetching data...',
        success: (data) => `Loaded ${data.items.length} items`,
        error: 'Failed to load data'
      }
    );
  };

  return <Button onClick={loadData}>Load Data</Button>;
}

🛠️ Development

# Install dependencies
npm install

# Start Storybook
npm run storybook

# Build library
npm run build

# Run linter
npm run lint

📖 Documentation

Full documentation available in /docs folder:

🤝 Contributing

Contributions are welcome! Please read our contributing guidelines.

📄 License

MIT © WalletSphere Team