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

@popsticker/ui

v0.1.5

Published

Bold, sticker-like UI components for React with Tailwind CSS

Readme

@popsticker/ui

A React component library with bold, sticker-like design featuring thick borders, offset shadows, and bright colors.

npm version License: MIT Bundle Size

✨ Features

  • 🎨 37 Production-Ready Components - Buttons, Forms, Overlays, Navigation, and more
  • 🎬 Built-in Animations - Wiggle, bounce, shake, and pulse effects
  • 💪 PopSticker Design - Thick 3-4px borders, bright colors, offset shadows
  • 📦 Lightweight - Only 55KB minified
  • Tree-Shakeable - Import only what you need
  • 🔧 TypeScript First - Full type definitions included
  • Accessible - Built on Radix UI primitives
  • 🎯 Tailwind CSS - Customizable with Tailwind

📦 Installation

npm install @popsticker/ui

Peer Dependencies:

npm install react react-dom tailwindcss

🚀 Quick Start

1. Configure Tailwind CSS

Add to your tailwind.config.js:

module.exports = {
  content: [
    './src/**/*.{js,ts,jsx,tsx}',
    './node_modules/@popsticker/ui/dist/**/*.{js,mjs}',
  ],
  theme: {
    extend: {
      colors: {
        popsticker: {
          lime: '#D4FF00',
          purple: '#A78BFA',
          orange: '#FF9D5C',
        },
      },
      borderWidth: {
        3: '3px',
        4: '4px',
      },
      boxShadow: {
        'sticker': '4px 4px 0px 0px rgba(0, 0, 0, 1)',
        'sticker-lg': '6px 6px 0px 0px rgba(0, 0, 0, 1)',
      },
    },
  },
}

2. Import Components

import { Button, Card, Badge } from '@popsticker/ui';

function App() {
  return (
    <Card>
      <h1>Hello PopSticker!</h1>
      <Button variant="default">Lime Green Button</Button>
      <Badge className="animate-wiggle-infinite">New!</Badge>
    </Card>
  );
}

🎨 Components

Form Components

ButtonInputTextareaLabelCheckboxRadio GroupSwitchSliderSelect

Display Components

CardBadgeAvatarKbdSeparatorSkeletonSpinnerEmptyAlert

Layout Components

TabsAccordionCollapsibleTablePaginationBreadcrumbAspect RatioScroll Area

Overlay Components

DialogAlert DialogPopoverTooltipDropdown MenuHover CardContext Menu

Control Components

ToggleToggle GroupButton GroupProgress

📖 Usage Examples

Buttons with Variants

import { Button } from '@popsticker/ui';

<Button variant="default">Lime Green</Button>
<Button variant="secondary">Purple</Button>
<Button variant="accent">Orange</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>

Animated Components

import { Badge, Button } from '@popsticker/ui';

// Continuous wiggle animation
<Badge className="animate-wiggle-infinite">🎉 New Feature!</Badge>

// Shake on hover
<Button className="hover:animate-shake">Hover Me!</Button>

// Bounce in on mount
<Card className="animate-bounce-in">Welcome!</Card>

// Soft pulse
<Badge className="animate-pulse-soft">🔴 Live</Badge>

Form Example

import { 
  Card, 
  CardHeader, 
  CardTitle, 
  CardContent,
  Label, 
  Input, 
  Checkbox,
  Button 
} from '@popsticker/ui';

function ContactForm() {
  return (
    <Card>
      <CardHeader>
        <CardTitle>Contact Us</CardTitle>
      </CardHeader>
      <CardContent className="space-y-4">
        <div className="space-y-2">
          <Label htmlFor="name">Name</Label>
          <Input id="name" placeholder="Enter your name" />
        </div>
        
        <div className="flex items-center space-x-2">
          <Checkbox id="terms" />
          <Label htmlFor="terms">I accept the terms</Label>
        </div>
        
        <Button>Submit</Button>
      </CardContent>
    </Card>
  );
}

Alert Messages

import { Alert, AlertTitle, AlertDescription } from '@popsticker/ui';
import { CheckCircle2, AlertCircle } from 'lucide-react';

// Success alert
<Alert variant="success">
  <CheckCircle2 className="h-5 w-5" />
  <AlertTitle>Success!</AlertTitle>
  <AlertDescription>
    Your changes have been saved.
  </AlertDescription>
</Alert>

// Error alert
<Alert variant="destructive">
  <AlertCircle className="h-5 w-5" />
  <AlertTitle>Error</AlertTitle>
  <AlertDescription>
    Something went wrong.
  </AlertDescription>
</Alert>

Dialog Example

import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  Button
} from '@popsticker/ui';

<Dialog>
  <DialogTrigger asChild>
    <Button>Open Dialog</Button>
  </DialogTrigger>
  <DialogContent>
    <DialogHeader>
      <DialogTitle>Welcome!</DialogTitle>
      <DialogDescription>
        This is a PopSticker dialog.
      </DialogDescription>
    </DialogHeader>
  </DialogContent>
</Dialog>

🎬 Available Animations

// Single animations
animate-wiggle          // Single wiggle (0.5s)
animate-bounce-in       // Entrance with scale
animate-shake           // Attention shake

// Continuous animations
animate-wiggle-infinite // Continuous wiggle
animate-pulse-soft      // Gentle opacity pulse

// Use with hover
hover:animate-shake
hover:animate-wiggle

🎨 Design Philosophy

PopSticker UI embraces a bold, playful aesthetic inspired by stickers and street art:

  • Thick Borders - 3-4px black borders for strong separation
  • Offset Shadows - 4px offset shadows for depth
  • Bright Colors - Lime green, vibrant purple, and energetic orange
  • Bold Typography - Strong font weights for emphasis
  • Playful Animations - Wiggle, bounce, and shake effects

🔧 TypeScript

Full TypeScript support included with type definitions for all components:

import type { ButtonProps } from '@popsticker/ui';

const CustomButton: React.FC<ButtonProps> = (props) => {
  return <Button {...props} />;
};

📝 License

MIT © Shivanshu Bhashkar

🤝 Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

🔗 Links


Made with 💜 by Shivanshu Bhashkar