Skip to content

Dialog (components/ui/dialog.tsx)

Overview

A modal dialog component built with Radix UI that provides accessible overlay content with customizable header, content, and footer sections.

Features

  • Modal overlay with backdrop blur
  • Focus management and keyboard navigation
  • Accessible dialog implementation
  • Customizable header, content, and footer sections
  • Animation support for open/close states
  • Responsive design with mobile considerations
  • Close button and escape key handling
  • Custom positioning with centered layout
  • Backdrop click handling for dismissal

Dependencies

import * as React from 'react'
import * as DialogPrimitive from '@radix-ui/react-dialog'
import { X } from 'lucide-react'
import { cn } from '@/lib/utils'

Props

interface DialogProps extends DialogPrimitive.DialogProps {
  children: ReactNode;
}

interface DialogTriggerProps extends DialogPrimitive.DialogTriggerProps {
  children: ReactNode;
}

interface DialogContentProps extends DialogPrimitive.DialogContentProps {
  className?: string;
  children: ReactNode;
}

interface DialogHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
  className?: string;
  children: ReactNode;
}

interface DialogFooterProps extends React.HTMLAttributes<HTMLDivElement> {
  className?: string;
  children: ReactNode;
}

interface DialogTitleProps extends DialogPrimitive.DialogTitleProps {
  className?: string;
  children: ReactNode;
}

interface DialogDescriptionProps extends DialogPrimitive.DialogDescriptionProps {
  className?: string;
  children: ReactNode;
}

Implementation

State Management

const [open, setOpen] = useState(false);

const handleOpenChange = (open: boolean) => {
  setOpen(open);
  onOpenChange?.(open);
};

Methods

const handleEscapeKeyDown = (event: KeyboardEvent) => {
  if (event.key === 'Escape') {
    setOpen(false);
  }
};

const handleOverlayClick = () => {
  if (closeOnOverlayClick) {
    setOpen(false);
  }
};

Unique Functionality

  • Focus trap management for accessibility
  • Animation states for smooth transitions
  • Portal rendering for proper stacking context
  • Overlay click handling for dismissal
  • Keyboard navigation support
  • Responsive position management

HTML Structure

<DialogPrimitive.Root>
  <DialogPrimitive.Trigger />
  <DialogPrimitive.Portal>
    <DialogPrimitive.Overlay />
    <DialogPrimitive.Content>
      {/* Dialog content structure */}
    </DialogPrimitive.Content>
  </DialogPrimitive.Portal>
</DialogPrimitive.Root>

API Integration

The Dialog component does not directly integrate with any APIs. It serves as a UI primitive for creating modal dialogs.

Components Used

  • Dialog
  • DialogTrigger
  • DialogContent
  • DialogHeader
  • DialogFooter
  • DialogTitle
  • DialogDescription
  • DialogClose

Notes

  • Built using Radix UI primitives for robust accessibility
  • Implements focus trapping for keyboard navigation
  • Uses React Portal for proper DOM placement
  • Supports custom animations and transitions
  • Provides responsive layout adjustments
  • Maintains ARIA compliance
  • Customizable through className prop