diff --git a/apps/web/components/quick-note-card.tsx b/apps/web/components/quick-note-card.tsx index f513147d..3ecf24dc 100644 --- a/apps/web/components/quick-note-card.tsx +++ b/apps/web/components/quick-note-card.tsx @@ -1,6 +1,6 @@ "use client" -import { useCallback, useEffect, useState } from "react" +import { useCallback, useEffect, useRef, useState } from "react" import { cn } from "@lib/utils" import { dmSansClassName } from "@/lib/fonts" import { Maximize2, Plus, Loader2 } from "lucide-react" @@ -20,6 +20,12 @@ export function QuickNoteCard({ isSaving = false, }: QuickNoteCardProps) { const [isExpanded, setIsExpanded] = useState(false) + const [popoutFrame, setPopoutFrame] = useState<{ + left: number + top: number + width: number + } | null>(null) + const cardRef = useRef(null) const { selectedProject } = useProject() const { draft, setDraft } = useQuickNoteDraft(selectedProject) @@ -53,6 +59,19 @@ export function QuickNoteCard({ activeElement.blur() } setIsExpanded(false) + setPopoutFrame(null) + }, []) + + const handleFocusCapture = useCallback(() => { + const frame = cardRef.current?.getBoundingClientRect() + if (frame) { + const viewportPadding = 12 + const left = Math.max(viewportPadding, frame.left) + const top = Math.max(viewportPadding, frame.top) + const width = Math.min(640, window.innerWidth - left - viewportPadding) + setPopoutFrame({ left, top, width }) + } + setIsExpanded(true) }, []) useEffect(() => { @@ -65,6 +84,7 @@ export function QuickNoteCard({ activeElement.blur() } setIsExpanded(false) + setPopoutFrame(null) } window.addEventListener("keydown", handleKeyDown) @@ -89,15 +109,22 @@ export function QuickNoteCard({ /> )}
setIsExpanded(true)} + onFocusCapture={handleFocusCapture} style={{ boxShadow: "inset 1.421px 1.421px 4.263px 0 rgba(11, 15, 21, 0.4)", }}