Panara UI

Docs

Getting Started

Panara UI is a bold, 3D-elevated component library built on shadcn/ui + Tailwind CSS. Install components directly into your project using the shadcn CLI — no npm package needed. Each component is yours to customize.

Install a component
npx shadcn@latest add https://ui.panara.studio/r/panara-button.json
Or configure a registry shortcut

Add this to your components.json so you can use short names:

{
  "registries": {
    "@panara": {
      "url": "https://ui.panara.studio/r/{name}.json"
    }
  }
}

Then install any component with:

npx shadcn@latest add @panara/panara-button
npx shadcn@latest add @panara/panara-card
npx shadcn@latest add @panara/panara-input
Available components
npx shadcn@latest add @panara/panara-theme-provider  # Required: theme system
npx shadcn@latest add @panara/panara-button           # 3D elevated button
npx shadcn@latest add @panara/panara-tilted-button    # Tilted geometry button
npx shadcn@latest add @panara/panara-card             # 3D elevated card
npx shadcn@latest add @panara/panara-input            # Formatted input field
npx shadcn@latest add @panara/panara-checkbox         # 3D checkbox
npx shadcn@latest add @panara/panara-toggle           # Toggle switch
npx shadcn@latest add @panara/panara-badge            # Status badge
npx shadcn@latest add @panara/panara-typography       # Text hierarchy
npx shadcn@latest add @panara/panara-dropdown         # Select dropdown
Required CSS

Add these styles to your globals.css for 3D press animations and shimmer:

/* Panara 3D press animation */
.neo-elevated-btn:active .neo-face,
.neo-elevated-btn.active .neo-face {
  transform: translate3d(var(--neo-depth, 3px), var(--neo-depth, 3px), 0) !important;
}
.neo-elevated-btn:active .neo-edge-right,
.neo-elevated-btn.active .neo-edge-right {
  transform: translate3d(var(--neo-depth, 3px), var(--neo-depth, 3px), 0) skewY(45deg) !important;
}
.neo-elevated-btn:active .neo-edge-bottom,
.neo-elevated-btn.active .neo-edge-bottom {
  transform: translate3d(var(--neo-depth, 3px), var(--neo-depth, 3px), 0) skewX(45deg) !important;
}

/* Shimmer animation */
@keyframes neo-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}
Quick Start
import { PanaraThemeProvider } from "@/components/ui/panara-theme-provider";
import { PanaraButton } from "@/components/ui/panara-button";

export default function App() {
  return (
    <PanaraThemeProvider defaultTheme="purple">
      <PanaraButton colorScheme="accent" size="lg">
        Get Started
      </PanaraButton>
    </PanaraThemeProvider>
  );
}

Theming

Panara UI supports 6 accent themes — Purple, Coral, Cyan, Emerald, Amber, and Magenta. Wrap your app in PanaraThemeProvider and use the usePanaraTheme hook to access and switch themes.

import { PanaraThemeProvider, usePanaraTheme } from "@/components/ui/panara-theme-provider";

function MyComponent() {
  const { theme, setTheme, colors } = usePanaraTheme();
  // colors.accent, colors.accentFg, colors.accentDark, colors.accentDarker
  return <div style={{ color: colors.accent }}>{theme}</div>;
}
PropTypeDefaultDescription
defaultTheme"purple" | "coral" | "cyan" | "emerald" | "amber" | "magenta""purple"Initial accent theme
childrenReactNodeApp content

PanaraButton

3D-elevated button with multiple variants, sizes, and color schemes. The signature component of Panara UI.

npx shadcn@latest add @panara/panara-button
<PanaraButton colorScheme="accent" size="lg">
  Get Started
</PanaraButton>

<PanaraButton colorScheme="white" kind="flat">
  Secondary
</PanaraButton>

<PanaraButton colorScheme="accent" shimmer>
  Shimmer Effect
</PanaraButton>
PropTypeDefaultDescription
colorScheme"white" | "black" | "accent" | "purple" | ..."white"Button color
kind"elevated" | "flat" | "link""elevated"Visual variant
size"sm" | "md" | "lg" | "xl""md"Button size
depthnumber33D elevation depth in px
fullWidthbooleanfalseStretch to fill container
shimmerbooleanfalseAnimated shimmer overlay
bgstringCustom background color
colorstringCustom text color
borderColorstringStroke border color
edgeColors{ top, right, bottom, left }Custom 3D edge colors
disabledbooleanfalseDisable interactions

PanaraTiltedButton

A distinctive trapezoid-shaped button with tilted geometry and a depth plunk surface.

npx shadcn@latest add @panara/panara-tilted-button
<PanaraTiltedButton
  bg={colors.accent}
  color={colors.accentFg}
  plunkColor={colors.accentDark}
>
  Submit
</PanaraTiltedButton>
PropTypeDefaultDescription
bgstring"#ffffff"Face background color
colorstring"#0d0d0d"Text color
plunkColorstring"#8A8A8A"Depth surface color
buttonDepthnumber8Plunk depth in px
showShimmerbooleanfalseShimmer animation
borderColorstringSVG stroke color
borderWidthnumber1SVG stroke width
disabledbooleanfalseDisable interactions

PanaraCard

3D-elevated container with configurable edge colors and depth. Use as a layout primitive.

npx shadcn@latest add @panara/panara-card

Accent Card

Custom edge colors

<PanaraCard
  bg={colors.accent}
  edgeRight={colors.accentDark}
  edgeBottom={colors.accentDarker}
>
  <div className="p-6">Card content</div>
</PanaraCard>
PropTypeDefaultDescription
bgstring"#121212"Card face background
edgeRightstring"#3D3D3D"Right edge color
edgeBottomstring"#1a1a1a"Bottom edge color
edgeTopstring"#2a2a2a"Top edge color
edgeLeftstring"#2a2a2a"Left edge color
edgeWidthnumber3Edge width in px
fullWidthbooleanfalseStretch to fill container
strokestring"rgba(255,255,255,0.1)"Border color

PanaraInput

Input field with built-in formatting for phone, currency, card, and date values. Sharp edges, accent focus highlight.

npx shadcn@latest add @panara/panara-input
Required field
<PanaraInput
  label="Phone"
  format="phone"
  accentColor={colors.accent}
  onValueChange={(raw) => console.log(raw)}
/>
PropTypeDefaultDescription
labelstringField label
errorstringError message (shows red border)
accentColorstring"#6A35FF"Focus border color
format"phone" | "currency" | "card" | "date" | "none""none"Auto-formatting mode
currencySymbolstring"$"Currency prefix
onValueChange(raw: string) => voidCallback with unformatted value

PanaraCheckbox

3D-elevated checkbox with press animation and accent theming.

npx shadcn@latest add @panara/panara-checkbox
<PanaraCheckbox
  checked={checked}
  onChange={setChecked}
  label="Accept terms"
  accentColor={colors.accent}
/>
PropTypeDefaultDescription
checkedbooleanfalseChecked state
onChange(checked: boolean) => voidChange handler
labelstringLabel text
accentColorstring"#ffffff"Border & fill color
disabledbooleanfalseDisable interactions

PanaraToggle

Flat toggle switch with smooth thumb animation and accent theming.

npx shadcn@latest add @panara/panara-toggle
<PanaraToggle
  checked={enabled}
  onChange={setEnabled}
  label="Notifications"
  accentColor={colors.accent}
/>
PropTypeDefaultDescription
checkedbooleanfalseToggle state
onChange(checked: boolean) => voidChange handler
labelstringLabel text
accentColorstringCustom accent color when ON
disabledbooleanfalseDisable interactions

PanaraBadge

Status badge with preset variants and custom color support.

npx shadcn@latest add @panara/panara-badge
ActivePendingFailedInfoCustom
<PanaraBadge variant="success">Active</PanaraBadge>
<PanaraBadge variant="custom" bg="#FF6B6B" color="#fff">
  Custom
</PanaraBadge>
PropTypeDefaultDescription
variant"success" | "warning" | "error" | "info" | "custom""info"Badge style preset
bgstringBackground (custom variant only)
colorstringText color (custom variant only)

PanaraTypography

Text hierarchy with opacity-based styling. Maps to semantic HTML tags.

npx shadcn@latest add @panara/panara-typography

Heading 1

Heading 2

Heading 3

Heading 4

Body text

Body small

CaptionOverline
<PanaraTypography variant="h1" textOpacity={1}>
  Large Heading
</PanaraTypography>
<PanaraTypography variant="body" accent>
  Accented body text
</PanaraTypography>
PropTypeDefaultDescription
variant"h1" | "h2" | "h3" | "h4" | "body" | "bodySmall" | "caption" | "overline""body"Typography variant
textOpacitynumbervariesOverride default opacity (0-1)
accentbooleanfalseUse accent color