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

@l3mpire/ui

v2.13.0

Published

React component library for the lemDS design system. Built with **CVA** (Class Variance Authority), **Tailwind CSS v4**, and **Radix UI** primitives.

Readme

@l3mpire/ui

React component library for the lemDS design system. Built with CVA (Class Variance Authority), Tailwind CSS v4, and Radix UI primitives.

Installation

pnpm add @l3mpire/ui @l3mpire/tokens @l3mpire/icons

Peer dependencies:

pnpm add react react-dom @l3mpire/icons

Setup

1. Import the global stylesheet

In your app's root CSS file:

@import "@l3mpire/ui/globals.css";

This file:

  • Imports all design tokens as CSS custom properties
  • Registers tokens with Tailwind CSS v4's @theme
  • Sets up dark mode via data-theme="dark" custom variant
  • Defines component animations

2. Configure Tailwind (if using Tailwind in your project)

Add the UI package to your content sources so Tailwind can scan component classes:

@source "../node_modules/@l3mpire/ui/dist";

Usage

import { Button, Badge, TextInput, Toast } from "@l3mpire/ui";
import { Icon, faCheck } from "@l3mpire/icons";

function Example() {
  return (
    <>
      <Button appearance="solid" intent="brand" size="md" leftIcon={faCheck}>
        Confirm
      </Button>

      <Badge appearance="solid" intent="primary" size="md">
        New
      </Badge>

      <TextInput
        placeholder="Enter your email"
        size="md"
      />

      <Toast type="success" title="Saved!" description="Your changes have been saved." />
    </>
  );
}

Components

Actions

| Component | Variants | Description | |-----------|----------|-------------| | Button | appearance: solid, outlined, ghost | Primary action element | | | intent: brand, alert | | | | size: sm, md, lg | | | Link | variant: brand, neutral | Text link with hover/pressed states |

Data Display

| Component | Variants | Description | |-----------|----------|-------------| | Avatar | size: sm, md, lg, xl | User profile image with initials fallback | | | shape: rounded, squared | | | Badge | appearance: solid, light, outlined | Inline label / status indicator | | | intent: primary, success, critical, warning, neutral | | | Tag | variant: brand, neutral | Removable inline tag | | Tooltip | variant: default, invert | Contextual hover tooltip |

Feedback

| Component | Variants | Description | |-----------|----------|-------------| | InfoMessage | type: info, success, alert, warning, empty | Alert / notification banner | | Toast | type: info, success, alert, warning | Notification toast |

Forms

| Component | Description | |-----------|-------------| | Checkbox | Checkbox with label (Radix UI) | | InputLabel | Form label with optional/mandatory indicator | | SearchBar | Search input with magnifying glass icon | | Select | Custom dropdown select with chevron | | Switch | Toggle switch with label (Radix UI) | | TextArea | Multi-line input with character counter | | TextInput | Single-line input with icon and validation |

Data

| Component | Description | |-----------|-------------| | Table | Low-level table primitives (Header, Body, Row, Cell, Caption) | | DataTable | Data-driven table powered by TanStack Table | | | Features: sorting, filtering, pagination, row selection, column resizing, column drag reorder | | DataTablePagination | Pagination controls with page size selector | | EmptyState | Placeholder with icon, title, description, and optional action | | Cell Renderers | AvatarCell, StatusCell, NumberCell, DateCell, EmailCell, LinkCell, ButtonCell, EditableCell | | RowActions | Hover-reveal action buttons for table rows |

Navigation

| Component | Description | |-----------|-------------| | DropdownMenu | Menu with items, headings, sections, and clear action | | ProductLogo | Product logo with optional text | | Sidebar | Collapsible app sidebar with header, sections, footer | | SidebarItem | Navigation item with icon, badge, avatar support | | SidebarHeadingItem | Section heading label for sidebar | | Typography | Text component with variant presets | | UserMenu | User profile dropdown with info rows and sections |

Component Patterns

CVA Variants

All components use CVA for variant management:

<Button appearance="solid" intent="brand" size="md">Click me</Button>
<Button appearance="ghost" intent="brand" size="sm">Cancel</Button>

Polymorphic Rendering (asChild)

Components support the asChild prop via Radix UI's Slot, allowing you to render as any element:

<Button asChild>
  <a href="/dashboard">Go to Dashboard</a>
</Button>

Icons in Components

Pass FontAwesome icon definitions directly:

import { faPen, faTrash } from "@l3mpire/icons";

<Button leftIcon={faPen} size="md">Edit</Button>
<Button rightIcon={faTrash} intent="alert" size="md">Delete</Button>
<Button leftIcon={faPlus} iconOnly size="sm" />

Dark Mode

Toggle dark mode by setting the data-theme attribute:

<html data-theme="dark">

All component tokens automatically switch to their dark mode values.

Utility: cn()

A clsx + tailwind-merge utility is exported for combining classes:

import { cn } from "@l3mpire/ui";

<div className={cn("p-md rounded-base", isActive && "bg-blue-500")} />

Exports

Every component exports its React component, CVA variants function (when applicable), and TypeScript props type:

import {
  Button,
  buttonVariants,  // CVA variants function
  type ButtonProps, // TypeScript type
} from "@l3mpire/ui";

// Use buttonVariants() to get classes without rendering:
const classes = buttonVariants({ appearance: "solid", intent: "brand", size: "md" });

Storybook

Browse the full component documentation with interactive examples:

# From the monorepo root
pnpm --filter @l3mpire/storybook dev

Opens at http://localhost:6006.