JSPM

  • Created
  • Published
  • Downloads 49
  • Score
    100M100P100Q94096F
  • License MIT

A modern, customizable UI component library with motion primitives and theme support built with React, TypeScript, Tailwind CSS, and shadcn/ui components.

Package Exports

  • passport-ui/accordion
  • passport-ui/alert
  • passport-ui/alert-dialog
  • passport-ui/analytics
  • passport-ui/animated-background
  • passport-ui/aspect-ratio
  • passport-ui/avatar
  • passport-ui/back-button
  • passport-ui/badge
  • passport-ui/blockquote
  • passport-ui/blur-in
  • passport-ui/border-trail
  • passport-ui/breadcrumb
  • passport-ui/bullet-list
  • passport-ui/button
  • passport-ui/calendar
  • passport-ui/card
  • passport-ui/carousel
  • passport-ui/checkbox
  • passport-ui/chunk-2ADXGE2T
  • passport-ui/chunk-2R6226MV
  • passport-ui/chunk-AIU6LNHW
  • passport-ui/chunk-DC7UOHY5
  • passport-ui/chunk-F2TPNUKJ
  • passport-ui/chunk-FCJRVLSI
  • passport-ui/chunk-FP7K2XNL
  • passport-ui/chunk-HYU2ZUAV
  • passport-ui/chunk-MN7VDUYM
  • passport-ui/chunk-MVRSBLCP
  • passport-ui/chunk-RDCEAXBT
  • passport-ui/chunk-RXUAGWUT
  • passport-ui/chunk-T7BURAOP
  • passport-ui/chunk-W7I4ELGX
  • passport-ui/chunk-YLTKQMHG
  • passport-ui/code-block
  • passport-ui/collapsible
  • passport-ui/combobox
  • passport-ui/command
  • passport-ui/components.json
  • passport-ui/content-container
  • passport-ui/context-menu
  • passport-ui/date-picker
  • passport-ui/dialog
  • passport-ui/drawer
  • passport-ui/dropdown-menu
  • passport-ui/footer-container
  • passport-ui/form
  • passport-ui/header-container
  • passport-ui/hljs-themes.css
  • passport-ui/hover-card
  • passport-ui/input
  • passport-ui/input-otp
  • passport-ui/label
  • passport-ui/live-region
  • passport-ui/markdown
  • passport-ui/menubar
  • passport-ui/meta-container
  • passport-ui/navigation-menu
  • passport-ui/page-layout
  • passport-ui/pagination
  • passport-ui/placeholder-card
  • passport-ui/popover
  • passport-ui/prefetch-link
  • passport-ui/progress
  • passport-ui/radio-group
  • passport-ui/resizable
  • passport-ui/scroll-area
  • passport-ui/select
  • passport-ui/separator
  • passport-ui/sheet
  • passport-ui/sidebar
  • passport-ui/sidebar-container
  • passport-ui/skeleton
  • passport-ui/slider
  • passport-ui/sonner
  • passport-ui/structured-data
  • passport-ui/styles.css
  • passport-ui/switch
  • passport-ui/table
  • passport-ui/tailwind-colors.css
  • passport-ui/textarea
  • passport-ui/theme-button
  • passport-ui/theme-provider
  • passport-ui/theme-toggle
  • passport-ui/toggle
  • passport-ui/toggle-select
  • passport-ui/tooltip
  • passport-ui/utils
  • passport-ui/visually-hidden

Readme

Passport UI

Passport UI

npm version npm downloads License: MIT Storybook

A sleek, compact and customizable UI component library with motion primitives and theme support built with React, TypeScript, Tailwind CSS v4, and shadcn/ui components.

Access Storybook via passportui.com to play with the available components and composables. For help on installing Passport UI libary, checkout install.passportui.com.

Installation

npm install passport-ui
npm install tailwindcss @tailwindcss/postcss

Usage

Import Pattern

Passport UI uses individual component exports for optimal tree-shaking and React Server Components compatibility. Import components individually:

import { Button } from "passport-ui/button";
import { Card, CardContent } from "passport-ui/card";
import { ThemeProvider } from "passport-ui/theme-provider";

Available Import Paths:

  • Components: passport-ui/button, passport-ui/card, passport-ui/dialog, etc.
  • Composables: passport-ui/theme-button, passport-ui/back-button, etc.
  • Motion Primitives: passport-ui/blur-in, passport-ui/border-trail, etc.
  • Layouts: passport-ui/page-layout, passport-ui/content-container, etc.
  • Utilities: passport-ui/utils

Setup PostCSS

Add the PostCSS plugin to your postcss.config.mjs:

export default {
  plugins: ["@tailwindcss/postcss"],
};

Import Styles

Import the library styles in your main CSS file:

@source "../../node_modules/passport-ui/src"
@import "passport-ui/styles.css";

/* Optional styles based on requirement */
@import "passport-ui/hljs-themes.css"; /* Optional: for code highlighting */
@import "passport-ui/tailwind-colors.css"; /* Optional: dynamic usage of tailwind colors */
  • For themed syntax highlighting in CodeBlock and Markdown components, import the theme styles.
  • For dynamic usage of tailwind colors, import the tailwind colors styles.

Basic Example

import { Button } from "passport-ui/button";
import { Card, CardContent } from "passport-ui/card";

function App() {
  return (
    <Card>
      <CardContent>
        <Button>Click me</Button>
      </CardContent>
    </Card>
  );
}

With Theme Support

import { ThemeButton } from "passport-ui/theme-button";
import { ThemeProvider } from "passport-ui/theme-provider";

function App() {
  return (
    <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
      <div className="min-h-screen bg-background text-foreground">
        <ThemeButton />
        {/* Your app content */}
      </div>
    </ThemeProvider>
  );
}

Form Components (Client-Only)

Form components that depend on react-hook-form are exported separately to ensure React Server Components compatibility:

"use client";

import { Button } from "passport-ui/button";
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "passport-ui/form";
import { useForm } from "react-hook-form";

function LoginForm() {
  const form = useForm();

  return (
    <Form {...form}>
      <form onSubmit={form.handleSubmit(onSubmit)}>
        <FormField
          control={form.control}
          name="email"
          render={({ field }) => (
            <FormItem>
              <FormLabel>Email</FormLabel>
              <FormControl>
                <input {...field} type="email" />
              </FormControl>
              <FormMessage />
            </FormItem>
          )}
        />
        <Button type="submit">Submit</Button>
      </form>
    </Form>
  );
}

Note: Form components must be used in client components (with "use client" directive) due to their dependency on react-hook-form.

Framework Integration

Next.js

For Next.js projects, add the PostCSS configuration and import styles in your global CSS file:

/* app/globals.css or styles/globals.css */
@import "passport-ui/styles.css";

Vite

For Vite projects, you can use either PostCSS or the Vite plugin:

Option 1: PostCSS (recommended)

// postcss.config.mjs
export default {
  plugins: ["@tailwindcss/postcss"],
};

Option 2: Vite Plugin

// vite.config.ts
import tailwindcss from "@tailwindcss/vite";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [tailwindcss()],
});

Development

This package is built with:

  • React 18+
  • TypeScript
  • Tailwind CSS
  • Radix UI primitives
  • Framer Motion (motion)
  • next-themes

Available Themes

  • Light - Light theme
  • Dark - Dark theme
  • System - System theme

Use ThemeProvider to wrap your app and ThemeButton to toggle between themes.

Available Components

Layouts

Components

Motion Primitives

Composables