import "./TodoModal.css"; import { useEffect } from "react"; import { ListChecks, X } from "lucide-react"; import { useOverlayDismiss } from "../hooks/useOverlayDismiss"; import { useMobileKeyboard } from "../hooks/useMobileKeyboard"; import { useMobileScrollLock } from "../hooks/useMobileScrollLock"; import { useViewportMode } from "./Header"; import { TodoView } from "./TodoView"; interface TodoModalProps { isOpen?: boolean; onClose: () => void; projectId?: string; addToast: (message: string, type?: "success" | "error" | "info") => void; onPlanningMode?: (initialPlan: string) => void; } export function TodoModal({ onClose, projectId, addToast, onPlanningMode }: TodoModalProps) { const overlayDismissProps = useOverlayDismiss(onClose); const mode = useViewportMode(); const isMobile = mode === "mobile"; const { keyboardOverlap, viewportHeight, viewportOffsetTop, keyboardOpen } = useMobileKeyboard({ enabled: isMobile, }); useMobileScrollLock(isMobile); const modalKeyboardStyle: React.CSSProperties = keyboardOpen ? ({ "--keyboard-overlap": `${keyboardOverlap}px`, "--vv-offset-top": `${viewportOffsetTop}px`, ...(viewportHeight !== null ? { "--vv-height": `${viewportHeight}px` } : {}), } as React.CSSProperties) : {}; useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") { onClose(); } }; document.addEventListener("keydown", handleKeyDown); return () => document.removeEventListener("keydown", handleKeyDown); }, [onClose]); return (
Manage reusable todo lists for your project.