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

@sprigr/apps-dashboard-kit

v0.2.0

Published

Dashboard design system for Sprigr marketplace apps: a CSS token layer (warm-neutral + indigo, light/dark, density) with a Tailwind v4 theme mapping, plus a React component kit (tables, badges, drawers, confirm dialogs, audit timelines, states, filters, t

Readme

@sprigr/apps-dashboard-kit

Design system for the admin dashboard a Sprigr marketplace app ships: one warm-neutral + indigo theme, light and dark, three density steps, and a React component kit (tables, badges, drawers, confirm dialogs, audit timelines, states, filters, toasts). Built so any app with an operator-facing screen gets a consistent look without re-deriving one.

npm install @sprigr/apps-dashboard-kit

Requirements

  • React 18+ and react-dom 18+ (peer deps, not bundled).
  • lucide-react (peer dep). The Icon component resolves names onto lucide glyphs.
  • Tailwind v4 in the consuming app. The components use Tailwind utility classes, and the kit's CSS registers its tokens as Tailwind theme values. Without Tailwind you still get the token layer and the .card / .btn / .pill component classes, plus the fallback colour utilities at the bottom of tokens.css, but the layout utilities the components use will not resolve.

Wiring it up

Two things: import the CSS after Tailwind, and point Tailwind at the kit so it generates the utility classes the components reference.

/* app globals.css */
@import "tailwindcss";
@import "@sprigr/apps-dashboard-kit/styles";
@source "../../node_modules/@sprigr/apps-dashboard-kit/dist";

The @source line matters. Tailwind v4 skips node_modules when scanning for class names, so without it the kit's components render unstyled. Adjust the relative path to match where your CSS file sits.

import { DataTable, Drawer, StatusBadge, ToastProvider, useToast } from "@sprigr/apps-dashboard-kit";

Put .theme-dark on your dashboard root for dark mode, and one of .density-compact / .density-cozy / .density-airy to drive DataTable row and cell sizing.

What's in it

Styles (@sprigr/apps-dashboard-kit/styles, or the two halves individually at /styles/tokens.css and /styles/components.css):

  • tokens.css: palette, typography, radii, shadows, motion, and density as CSS custom properties, plus a Tailwind v4 @theme block mapping them to utilities (text-ink-3, bg-surface-2, text-accent, font-mono, and so on).
  • components.css: .card, .btn and variants, .pill, .inp, .kbd, .gridpaper, the animation classes, .shimmer, .pulse-dot.

Components (default export path):

| Export | What it does | |---|---| | Icon | Name-to-lucide-glyph resolver. Unknown names render a dot rather than crashing. | | Avatar | Initials avatar with a gradient fill. | | StatusBadge, SeverityBadge, ExcStatusBadge, FreshnessDot, HealthBar | Status pills and indicators. The backing tone maps (ROUTING_TONES, SEV, EXC_STATUS, FRESH) are exported so you can spread and extend them. | | Code, CopyChip | Monospace chip and click-to-copy chip (with optional masking for secrets). | | Loading, EmptyState, ErrorState | The three async states. | | DataTable, Checkbox | Generic column-driven table with optional row selection. Density-aware. | | FilterBar, Segmented, Toggle | Filter controls. | | Drawer | Right-side slide-in. Locks body scroll, closes on Esc or overlay click. | | AuditTimeline | Vertical event timeline. See below. | | KV, FieldGroup | Key/value detail rows and titled groups. | | ConfirmDialog | Simple confirm, or destructive "type the keyword to arm". | | ResultPanel | Echoes a tool's structured return payload after a mutation. | | StatTile | Clickable big-number tile. | | ToastProvider, useToast | Bottom-right auto-dismissing toasts. | | TONE_C | The shared tone-to-CSS-var map used by timelines, tiles and toasts. | | relTime, relFromMs, ageLabel, money | Formatting helpers. |

AuditTimeline event tones

Row colour is derived from the event name's final dotted segment, so a namespaced stream colours itself with no configuration:

<AuditTimeline items={[{ event_type: "order.created", t: 900_000 }]} />

created maps to info, failed to err, delivered and resolved to ok, and so on. The full default map is exported as DEFAULT_EVENT_TONES. To cover names it does not know, pass tones; a full event name wins over a bare suffix, which wins over the default:

<AuditTimeline
  items={events}
  tones={{ "shipment.first_scan_in": "info", quarantined: "warn" }}
/>

Re-skinning

Override --accent, --accent-2, --accent-soft, --accent-ink (or any other token) on a root element or in your app CSS. Everything downstream, including the Tailwind theme values, references the live custom properties, so a runtime override flows through the whole kit.

Vendoring instead of installing

This package is on npm, so an exact-pinned dependency is the right choice for a marketplace app. The sprigrVendor + pnpm sync:vendor source mirror in this repo remains as the fallback for packages that cannot be published; you should not need it here. See docs/publishing.md.