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

@ptblink/ui

v0.4.0

Published

PT Blink shared UI primitives, design tokens, and animation helpers.

Readme

@ptblink/ui

PT Blink shared UI primitives, design tokens, and animation helpers for Next.js 15 + Tailwind v4 apps.

Install

npm install @ptblink/ui

Peer dependencies (you must install these too): react@^19 react-dom@^19 next@^15 motion@^12 gsap@^3 tailwindcss@^4

Wire it up

  1. Tailwind preset — extend in your tailwind.config.ts:
import blink from "@ptblink/ui/tailwind";
export default { presets: [blink], content: ["./app/**/*.{ts,tsx}"] };
  1. Base CSS — import once at the top of your global stylesheet:
@import "@ptblink/ui/styles.css";
  1. Use a primitive:
import { Slide, Reveal, Eyebrow } from "@ptblink/ui";

Exported surface

Components — kiosk

| Export | Description | |---|---| | Slide | Full-viewport slide wrapper with optional Grainient background. | | SlideDeck | 2D remote-driven slide deck. Owns arrow/Esc/Enter keyboard, HomePill, EnterHint. | | Reveal | Blur + rise + fade entrance wrapper (motion-based). | | VideoThumb | 16:9 looping placeholder with play overlay. Auto-pauses off-screen. | | VideoModal | Full-screen video dialog. Esc / click-out close. | | Eyebrow | Mono uppercase label. tone and color props for variants. | | SectionHeader | Eyebrow + headline + optional side slot. |

Components — landing

| Export | Description | |---|---| | PageShell | Top-padded container that clears the floating navbar. | | PageHero | Hero section frame with optional Grainient background. | | Section | Body section spacing wrapper. | | Card | Bordered elevated card. | | StatGrid | Stat grid. | | BackLink | "← Back" mono link. | | SiteHeader | Floating navbar with logo, nav links, scroll-aware styling. Expects /brand/icon-128.png in the consuming app's public/. | | SiteFooter | Footer with brand logo. Expects /brand/blinklogo-dark.svg in public/. | | Hero | Landing hero composition (Eyebrow + headline + stats). | | SectionVideo | Video gallery section block with VideoModal integration. | | SectionSlideshow | Numbered-bullet slideshow block with ScrollReveal. | | SectionPlatformCta | "Launch the platform" CTA card with Grainient background. | | SectionContact | Contact CTA section with link list. |

Animation primitives (react-bits)

| Export | Description | |---|---| | Aurora | WebGL aurora background (requires ogl). | | BlurText | Per-word blur-in entrance. | | CountUp | Numeric count-up animation. | | GradientText | Animated gradient text. | | Grainient | WebGL grainy gradient background (requires ogl). | | Magnet | Magnetic cursor-attract effect. | | ScrollReveal | Scroll-triggered reveal wrapper. | | ShinyText | Shiny shimmer text. | | SplitText | GSAP per-character split animation (requires gsap, @gsap/react). | | TiltedCard | 3D tilt-on-hover card. |

Hooks

| Export | Description | |---|---| | useScrolled(threshold = 12) | Boolean — true when window scrollY exceeds threshold. |

Utilities

| Export | Description | |---|---| | displayClassForLength(text, sizes?) | Returns a length-aware text-display-* class for the given string. |

Types

| Export | Description | |---|---| | DeckSection, DeckSlide | SlideDeck content shape. | | VideoModalItem | VideoModal content shape. |

Section component props (Accent, Video, Slide, Cta) are NOT exported as named types — construct matching objects structurally in the consuming app.

Caveats

  • "use client" on the entire barrel. The bundled dist/index.js is marked "use client" so all exports work in App Router server contexts. Pure-server components (e.g., Eyebrow, Card) still render correctly but run in the client bundle when imported via @ptblink/ui. If you need them as RSC, copy the source directly.
  • Branded assets are bundled. From 0.1.3 onward, icon-128.png and blinklogo-dark.svg ship inside the package and are consumed directly by SiteHeader / SiteFooter — no public/brand/ files needed in the consuming app. Reuse them anywhere with import url from "@ptblink/ui/brand/icon-128.png" / ... /blinklogo-dark.svg".
  • Tailwind v4 only. Tokens live in a @theme block inside @ptblink/ui/styles.css. There is no v3 compatibility build.