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

@tinybigui/react

v0.24.8

Published

Material Design 3 React components built with Tailwind CSS

Readme

@tinybigui/react

Material Design 3 React components

npm version License: MIT Bundle Size

A modern, accessible React component library implementing Google's Material Design 3 design system. Built with TypeScript, styled with Tailwind CSS v4, and optimized for performance.


✅ Status

Latest Release: v0.24.6 (2026-06-21)

29 MD3 components published to npm with full TypeScript support and WCAG 2.1 AA accessibility.

Install with npm install @tinybigui/react — follow our GitHub repository for updates!


✨ Features

  • 🎨 Material Design 3 - Full implementation of MD3 design system
  • 🌙 Dark Mode - Automatic theme switching based on system preferences
  • Accessible - WCAG 2.1 AA compliant, keyboard navigation, screen reader support
  • 🎯 TypeScript - 100% TypeScript with comprehensive type definitions
  • 📦 Tree-shakable - Import only what you need, optimized bundle size
  • 🎨 Customizable - Easy theming with CSS variables and Tailwind classes
  • 🚀 Modern React - Built for React 18+ with hooks and concurrent features
  • 📱 Responsive - Mobile-first, works on all screen sizes
  • 🧪 Well Tested - Comprehensive unit and integration tests
  • 📚 Documented - Full API documentation with examples

📦 Installation

npm install @tinybigui/react
# or
pnpm add @tinybigui/react
# or
yarn add @tinybigui/react

Peer Dependencies

This library requires React 18 or higher:

{
  "react": "^18.0.0",
  "react-dom": "^18.0.0"
}

🚀 Quick Start

TinyBigUI requires Tailwind CSS v4. Styles must be loaded through a CSS file processed by Tailwind, not via a direct JS import.

1. Create a CSS entry file

/* app/globals.css (Next.js) or src/index.css (Vite) */
@import "tailwindcss";
@source "../node_modules/@tinybigui/react/dist";
@import "@tinybigui/react/styles.css";

@source is required so Tailwind scans the library's compiled output and generates all utility classes used by components.

2. Import the CSS in your app entry

// app/layout.tsx (Next.js)
import "./globals.css";

// src/main.tsx (Vite)
import "./index.css";

3. Use Components

import { Button, TextField, Checkbox } from "@tinybigui/react";

function App() {
  return (
    <div>
      <TextField label="Email" type="email" />
      <Checkbox label="Accept terms" />
      <Button variant="filled" color="primary">
        Sign Up
      </Button>
    </div>
  );
}

4. Customize Theme (Optional)

Override palette variables after the library import to apply your brand colors:

/* app/globals.css */
@import "tailwindcss";
@source "../node_modules/@tinybigui/react/dist";
@import "@tinybigui/react/styles.css";

:root {
  /* Override the primary palette — all components update automatically */
  --md-ref-palette-primary40: #006a6a;
  --md-ref-palette-primary80: #4ddada;
  --md-ref-palette-primary90: #b2fefe;
}

See THEMING.md for the full customization guide.


📚 Components

Phase 1a: Core Buttons ✅

| Component | Status | Description | | ------------- | ------ | ------------------------------------------------------------------------------------------ | | Button | ✅ | Filled, outlined, tonal, elevated, text variants | | IconButton | ✅ | M3 Expressive 5-tier sizing, toggle mode | | FAB | ✅ | M3 Expressive slot architecture, size scale | | FABMenu | ✅ | Speed-dial with MD3 Expressive pill menu items | | ButtonGroup | ✅ | Connected layout, single/multi-select | | SplitButton | ✅ | MD3 expressive variants-vs-states, 5-size scale, elevated variant, spring motion (v0.21.0) |

Phase 1b: Form Components ✅

| Component | Status | Description | | ------------ | ------ | ---------------------------------------------------------------------------------------------------- | | TextField | ✅ | MD3 expressive variants-vs-states, prefix/suffix, notched outline (v0.14.0) | | Checkbox | ✅ | MD3 variants-vs-states, spec-accurate icons (v0.8.1) | | Radio | ✅ | MD3 expressive variants-vs-states architecture, slot CVAs, spring motion (v0.17.0) | | RadioGroup | ✅ | Vertical and horizontal orientation, isInvalid forwarding fix (v0.17.0) | | Switch | ✅ | Toggle with variants-vs-states arch. | | Slider | ✅ | MD3 expressive variants-vs-states architecture, spring motion, range/vertical layout fixes (v0.19.0) |

Phase 2: Navigation ✅

| Component | Status | Description | | ------------------ | ------ | -------------------------------------------------------------------------------------------------- | | AppBar | ✅ | M3 expressive flexible slot architecture, subtitle growth (v0.10.0) | | Tabs | ✅ | MD3 expressive variants-vs-states, content-width indicator (v0.11.2) | | NavigationDrawer | ✅ | MD3 slot-based variants-vs-states architecture, DrawerHeadline, spring modal animation (v0.24.0) | | NavigationBar | ✅ | Bottom navigation with badges | | Search | ✅ | MD3 expressive variants-vs-states architecture, per-slot CVAs (v0.18.0) |

Phase 3: Feedback ✅

| Component | Status | Description | | ------------- | ------ | ------------------------------------------------------------------------------------------ | | Dialog | ✅ | MD3 expressive motion, hero icon, scroll dividers, reduced-motion support (v0.22.0) | | Snackbar | ✅ | MD3 slot-based architecture, inverse-surface state layers, spring motion (v0.20.0) | | Menu | ✅ | MD3 expressive vertical segmented menus, MenuItemGroup, context menu, submenus (v0.23.0) | | Progress | ✅ | MD3 expressive slot CVA, colorful tokens, wavy shape, thick track (v0.16.0) | | BottomSheet | ✅ | MD3 expressive handle, variants-vs-states architecture (v0.11.0) | | Tooltip | ✅ | Slot-based MD3 styling, reduced-motion guard, rich tooltip token fixes (v0.21.1) |

Phase 4: Data Display ✅

| Component | Status | Description | | ------------ | ------ | ------------------------------------------------------------------------------- | | Card | ✅ | MD3 motion tier, media aspect-ratio fix, CVA export parity (v0.11.1) | | List | ✅ | MD3 expressive variants-vs-states, state layer, focus ring, slot CVAs (v0.15.0) | | Chip | ✅ | MD3 expressive slot architecture, elevated surface (v0.9.0) | | Badge | ✅ | MD3 expressive dot/count badges, icon-corner anchoring (v0.8.0) | | Divider | ✅ | MD3 expressive slot CVA, CSS-var thickness, logical RTL insets (v0.12.0) | | DatePicker | ✅ | MD3 expressive two-axis slot architecture, styled slot injection (v0.13.0) | | TimePicker | ✅ | 12h/24h clock dial, range selection |

Planned

| Component | Status | Description | | --------- | ------ | ----------- | | Table | 📋 | Data table |

Legend: ✅ Complete · 🚧 In Progress · 📋 Planned


🎨 Variants & Customization

Button Variants

<Button variant="filled">Filled</Button>
<Button variant="outlined">Outlined</Button>
<Button variant="text">Text</Button>
<Button variant="elevated">Elevated</Button>
<Button variant="tonal">Tonal</Button>

Color Schemes

<Button color="primary">Primary</Button>
<Button color="secondary">Secondary</Button>
<Button color="tertiary">Tertiary</Button>
<Button color="error">Error</Button>

Sizes

<Button size="small">Small</Button>
<Button size="medium">Medium</Button>
<Button size="large">Large</Button>

♿ Accessibility

All components are built with accessibility in mind:

  • Keyboard Navigation - Full keyboard support (Tab, Enter, Space, Arrow keys)
  • Screen Readers - Proper ARIA labels and roles
  • Focus Management - Clear focus indicators and logical focus order
  • Color Contrast - WCAG 2.1 AA compliant contrast ratios
  • Reduced Motion - Respects prefers-reduced-motion
  • Semantic HTML - Uses proper HTML elements

🌙 Dark Mode

Dark mode is enabled automatically based on system preferences:

/* Automatically switches based on system preference */
@media (prefers-color-scheme: dark) {
  /* Dark theme applied */
}

Manual Control:

// Force dark mode
document.documentElement.classList.add("dark");
document.documentElement.classList.remove("light");

// Force light mode
document.documentElement.classList.add("light");
document.documentElement.classList.remove("dark");

// Revert to OS preference
document.documentElement.classList.remove("dark", "light");

🎯 TypeScript Support

Full TypeScript support with comprehensive type definitions:

import type { ButtonProps, ButtonVariant } from "@tinybigui/react";

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

// Type-safe variants
const variant: ButtonVariant = "filled"; // ✅
const invalid: ButtonVariant = "invalid"; // ❌ Type error

📦 Tree Shaking

Only import what you need - unused components are automatically removed:

// Only Button code is included in your bundle
import { Button } from "@tinybigui/react";

Bundle impact:

  • Base styles: ~5KB (gzipped)
  • Button component: ~3KB (gzipped)
  • Each additional component: ~2-4KB (gzipped)

🔗 Using with Frameworks

All frameworks require a CSS entry file that includes @import "tailwindcss" and @source before the library import.

Next.js

/* app/globals.css */
@import "tailwindcss";
@source "../node_modules/@tinybigui/react/dist";
@import "@tinybigui/react/styles.css";
// app/layout.tsx
import "./globals.css";

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  );
}

Vite

/* src/index.css */
@import "tailwindcss";
@source "./node_modules/@tinybigui/react/dist";
@import "@tinybigui/react/styles.css";
// src/main.tsx
import "./index.css";
import { createRoot } from "react-dom/client";
import App from "./App";

createRoot(document.getElementById("root")!).render(<App />);

Remix

/* app/root.css */
@import "tailwindcss";
@source "../node_modules/@tinybigui/react/dist";
@import "@tinybigui/react/styles.css";
// app/root.tsx
import styles from "@tinybigui/react/styles.css?url";

export const links = () => [{ rel: "stylesheet", href: styles }];

🛠️ Customization

Brand Colors

Override the palette layer to retheme all components at once. All semantic color roles cascade from these raw palette values:

:root {
  /* Teal brand — light mode uses the 40-stop, dark mode uses the 80-stop */
  --md-ref-palette-primary40: #006a6a;
  --md-ref-palette-primary80: #4ddada;
  --md-ref-palette-primary90: #b2fefe;
  --md-ref-palette-primary10: #002020;
}

Use the Material Theme Builder to generate a complete tonal palette from a single hex color.

Typography

:root {
  --md-sys-typescale-font-family-plain: "Inter", system-ui, sans-serif;
  --md-sys-typescale-font-family-brand: "Playfair Display", serif;
}

Shape

:root {
  --md-sys-shape-corner-medium: 6px; /* sharper cards */
  --md-sys-shape-corner-large: 10px; /* sharper FABs and drawers */
}

Tailwind Classes

Components work seamlessly with Tailwind utilities:

<Button className="mt-4 w-full">Custom Styles</Button>

See THEMING.md for the complete theming reference including dark mode overrides, granular imports, and all available CSS variable namespaces.


📖 Documentation

  • GitHub Repository: github.com/buildinclicks/tinybigui
  • Documentation Site: Coming soon at tinybigui.dev
  • Storybook: Storybook 10 is set up in packages/react/.storybook/ — run pnpm storybook to explore components locally
  • API Reference: Coming soon

🤝 Contributing

We welcome contributions! See our Contributing Guide for details.


📄 License

MIT © buildinclicks


🔗 Related Packages


🙏 Credits

Built with: