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

react-spinny

v1.0.8

Published

A beautiful, customizable React spinner component with TypeScript support. Features multiple variants, smooth animations, and easy styling.

Readme

React Spinny

A beautiful, customizable React spinner component with TypeScript support. Features multiple variants, smooth animations, and easy styling.

Installation

Install with pnpm or your preferred package manager:

pnpm add react-spinny

Quick Start

import { Spinner } from 'react-spinny'

function App() {
  return (
    <Spinner
      variant="default"
      foreground="#3b82f6"
    />
  )
}

Component API

Spinner

import { Spinner } from 'react-spinny'

<Spinner
  variant="default"
  foreground="#3b82f6"
  background="#e5e7eb"
  size={40}
  strokeWidth={4}
  duration={1000}
/>

Props

| Prop | Type | Default | Description | | -------------- | ------------------------------------- | ------------- | ------------------------------------------- | | variant | 'default' \| 'rounded' \| 'quarter' | 'default' | Visual style of the spinner | | foreground | string | Required | Foreground color | | background | string | undefined | Background color (used in 'quarter' variant) | | size | number | 40 | Size of the spinner in pixels | | strokeWidth | number | 6 | Stroke thickness | | duration | number | 800 | Animation duration in milliseconds | | ...restProps | HTMLAttributes<HTMLDivElement> | - | Any valid div prop |

Hook API

useSpinner

import { useSpinner } from 'react-spinny'

function CustomSpinner() {
  const { style } = useSpinner({
    variant: 'default',
    foreground: '#3b82f6',
    background: '#e5e7eb',
    size: 40,
    strokeWidth: 4,
    duration: 1000
  })

  return <div style={style} />
}

Variants

Default

<Spinner
  variant="default"
  foreground="#3b82f6"
/>

Rounded

<Spinner
  variant="rounded"
  foreground="#10b981"
/>

Quarter

<Spinner
  variant="quarter"
  foreground="#f59e0b"
/>

Styling

The component accepts standard HTML div attributes and can be styled with CSS:

<Spinner
  variant="default"
  foreground="#3b82f6"
  className="my-custom-spinner"
  style={{ margin: '20px auto' }}
/>
.my-custom-spinner {
  opacity: 0.8;
  filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.1));
}

TypeScript

Full TypeScript support with comprehensive type definitions:

import { Spinner, SpinnerProps, useSpinner } from 'react-spinny'

const props: SpinnerProps = {
  variant: 'default',
  foreground: '#3b82f6',
  size: 48
}

function TypedSpinner(props: SpinnerProps) {
  return <Spinner {...props} />
}

Examples

Loading Button

import { Spinner } from 'react-spinny'

function LoadingButton({ isLoading, children }) {
  return (
    <button disabled={isLoading}>
      {isLoading ? (
        <Spinner
          variant="default"
          foreground="#ffffff"
          size={16}
        />
      ) : (
        children
      )}
    </button>
  )
}

Page Loading

import { Spinner } from 'react-spinny'

function PageLoader() {
  return (
    <div className="flex items-center justify-center min-h-screen">
      <Spinner
        variant="rounded"
        foreground="#3b82f6"
        size={48}
        duration={800}
      />
    </div>
  )
}

Custom Colors

import { Spinner } from 'react-spinny'

function ColorfulSpinners() {
  return (
    <div className="flex gap-4">
      <Spinner
        variant="default"
        foreground="#ef4444"
      />
      <Spinner
        variant="rounded"
        foreground="#10b981"
      />
      <Spinner
        variant="quarter"
        foreground="#f59e0b"
      />
    </div>
  )
}

Requirements

  • React 16.8+
  • TypeScript 4.5+ (for TypeScript projects)

License

MIT © Benja Osuna