ComponentsSheet

Sheet

Extends the Dialog component to display content that complements the main content of the screen.


Demo

import { Button } from '@immit/ui/button'
import { Input } from '@immit/ui/input'
import { Label } from '@immit/ui/label'
import {
  Sheet,
  SheetClose,
  SheetContent,
  SheetDescription,
  SheetFooter,
  SheetHeader,
  SheetTitle,
  SheetTrigger
} from '@immit/ui/sheet'
 
export function SheetDemo() {
  return (
    <Sheet>
      <SheetTrigger asChild>
        <Button variant="outline">Open</Button>
      </SheetTrigger>
      <SheetContent side="right">
        <SheetHeader>
          <SheetTitle>Edit profile</SheetTitle>
          <SheetDescription>
            This information will be visible to others. Click save when you are
            done.
          </SheetDescription>
        </SheetHeader>
        <div className="grid gap-4 py-4">
          <div className="grid grid-cols-2 items-center gap-2 lg:grid-cols-4 lg:gap-4">
            <Label
              htmlFor="name"
              className="col-span-2 lg:col-span-1 lg:text-right"
            >
              Name
            </Label>
            <Input
              id="name"
              defaultValue="Pedro Duarte"
              className="col-span-2 lg:col-span-3"
            />
          </div>
          <div className="grid grid-cols-2 items-center gap-2 lg:grid-cols-4 lg:gap-4">
            <Label
              htmlFor="username"
              className="col-span-2 lg:col-span-1 lg:text-right"
            >
              Username
            </Label>
            <Input
              id="username"
              defaultValue="@peduarte"
              className="col-span-2 lg:col-span-3"
            />
          </div>
        </div>
        <SheetFooter>
          <SheetClose asChild>
            <Button type="submit">Save changes</Button>
          </SheetClose>
        </SheetFooter>
      </SheetContent>
    </Sheet>
  )
}

Sides

import { useState } from 'react'
import { Button } from '@immit/ui/button'
import { Input } from '@immit/ui/input'
import { Label } from '@immit/ui/label'
import { RadioGroup, RadioGroupItem } from '@immit/ui/radio-group'
import {
  Sheet,
  SheetClose,
  SheetContent,
  SheetDescription,
  SheetFooter,
  SheetHeader,
  SheetTitle,
  SheetTrigger
} from '@immit/ui/sheet'
 
const SHEET_SIDES = ['top', 'right', 'bottom', 'left'] as const
 
type SheetSide = (typeof SHEET_SIDES)[number]
 
export function SheetSides() {
  const [side, setSide] = useState<SheetSide>('right')
 
  return (
    <div className="flex flex-col space-y-8">
      <RadioGroup
        defaultValue={side}
        onValueChange={(value) => setSide(value as SheetSide)}
      >
        <div className="grid grid-cols-2 gap-2">
          {SHEET_SIDES.map((side, index) => (
            <div
              key={`${side}-${index}`}
              className="flex items-center space-x-2"
            >
              <RadioGroupItem value={side} id={side} />
              <Label htmlFor={side}>{side}</Label>
            </div>
          ))}
        </div>
      </RadioGroup>
      <Sheet>
        <SheetTrigger asChild>
          <Button>Open {side} sheet</Button>
        </SheetTrigger>
        <SheetContent side={side}>
          <SheetHeader>
            <SheetTitle>Edit profile</SheetTitle>
            <SheetDescription>
              This information will be visible to others. Click save when you
              are done.
            </SheetDescription>
          </SheetHeader>
          <div className="grid gap-4 py-4">
            <div className="grid grid-cols-2 items-center gap-2 lg:grid-cols-4 lg:gap-4">
              <Label
                htmlFor="name"
                className="col-span-2 lg:col-span-1 lg:text-right"
              >
                Name
              </Label>
              <Input
                id="name"
                value="Pedro Duarte"
                className="col-span-2 lg:col-span-3"
              />
            </div>
            <div className="grid grid-cols-2 items-center gap-2 lg:grid-cols-4 lg:gap-4">
              <Label
                htmlFor="username"
                className="col-span-2 lg:col-span-1 lg:text-right"
              >
                Username
              </Label>
              <Input
                id="username"
                value="@peduarte"
                className="col-span-2 lg:col-span-3"
              />
            </div>
          </div>
 
          <SheetFooter>
            <SheetClose asChild>
              <Button type="submit">Save changes</Button>
            </SheetClose>
          </SheetFooter>
        </SheetContent>
      </Sheet>
    </div>
  )
}