Skip to main content

Getting Started with Temper

Temper (published as @ughur/temper or temper) is an unstyled, accessible, and high-performance React drawer component. It gives you fluid physics-based gestures, snap points, background scaling, multi-directional sliding, and ARIA dialog compliance.


Installation

Install @ughur/temper using your preferred package manager:

pnpm add @ughur/temper

Required Stylesheets

Temper comes with minimal baseline CSS rules required for touch gesture handling, positional transitions, and pointer event management. Import the style file in your root component or app layout:

import '@ughur/temper/style.css';

Basic Usage

Live Demo: Basic Bottom Drawer

Here is the code for the example above:

import React from 'react';
import { Drawer } from '@ughur/temper';
import '@ughur/temper/style.css';

export function SimpleDrawerExample() {
return (
<Drawer.Root>
<Drawer.Trigger className="px-4 py-2 bg-indigo-600 text-white rounded-lg font-medium">
Open Drawer
</Drawer.Trigger>

<Drawer.Portal>
<Drawer.Overlay className="fixed inset-0 bg-black/40 z-50" />
<Drawer.Content className="bg-white fixed bottom-0 left-0 right-0 z-50 rounded-t-2xl p-6 shadow-xl max-h-[90vh] flex flex-col">
<Drawer.Handle className="w-12 h-1.5 bg-gray-300 rounded-full mx-auto mb-6 cursor-grab active:cursor-grabbing" />

<Drawer.Title className="text-xl font-bold text-gray-900 mb-2">
Welcome to Temper
</Drawer.Title>

<Drawer.Description className="text-gray-600 mb-6">
This drawer component is fully accessible, responsive, and customizable.
</Drawer.Description>

<div className="mt-auto flex justify-end gap-3">
<Drawer.Close className="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg">
Close
</Drawer.Close>
</div>
</Drawer.Content>
</Drawer.Portal>
</Drawer.Root>
);
}

Interactive Playground

Try changing the props live — the drawer and code snippet update in real time.

Interactive Playground
Props
0.25
Code
<Drawer.Root
  direction="bottom"
  modal
  dismissible
  repositionInputs
>
  <Drawer.Trigger>Open</Drawer.Trigger>
  <Drawer.Portal>
    <Drawer.Overlay />
    <Drawer.Content>
      {/* your content */}
    </Drawer.Content>
  </Drawer.Portal>
</Drawer.Root>

Key Features at a Glance

  • ⚡ Physics & Drag: Smooth drag mechanics built for mobile touch and desktop cursor drag.
  • ♿ Accessibility: Powered by Radix UI's Dialog primitives with screen reader titles, descriptions, and focus locks.
  • 📐 Snap Points: Define partial height stops (e.g. [0.3, 0.6, 1.0]).
  • 📱 Directional Flexibility: Supports sliding from bottom, top, left, or right.
  • 🎨 100% Unstyled: Style with Tailwind CSS, CSS Modules, or styled-components.