Reusable modal dialog component for React applications.
// Source: https://github.com/Hesper-Labs/owly | License: MIT | Copyright 2026 Owly
// Provided via justclaw.it.com; keep this notice with the code.
"use client";
import { useCallback, useEffect, useRef } from "react";
import { createPortal } from "react-dom";
import { X } from "lucide-react";
import { cn } from "@/lib/utils";
type ModalSize = "sm" | "md" | "lg";
interface ModalProps {
open: boolean;
onClose: () => void;
title?: string;
children: React.ReactNode;
footer?: React.ReactNode;
size?: ModalSize;
className?: string;
}
const sizeStyles: Record<ModalSize, string> = {
sm: "max-w-sm",
md: "max-w-lg",
lg: "max-w-2xl",
};
export function Modal({
open,
onClose,
title,
children,
footer,
size = "md",
className,
}: ModalProps) {
const backdropRef =
... (truncated -- full source via MCP)
See the full source, get the GitHub permalink, and search for more like it.
Get a free API key