diff --git a/apps/web/components/memories-grid.tsx b/apps/web/components/memories-grid.tsx index d2f93d54..0fd45162 100644 --- a/apps/web/components/memories-grid.tsx +++ b/apps/web/components/memories-grid.tsx @@ -542,13 +542,13 @@ export function MemoriesGrid({ {!isEmpty && !isSelectionMode && (
-
+
-
+
{/* View mode toggle — segmented control */}
void @@ -18,28 +19,23 @@ export function QuickNoteCard({ onMaximize, isSaving = false, }: QuickNoteCardProps) { - const textareaRef = useRef(null) + const [isExpanded, setIsExpanded] = useState(false) const { selectedProject } = useProject() const { draft, setDraft } = useQuickNoteDraft(selectedProject) + const draftRef = useRef(draft) + draftRef.current = draft - const handleChange = useCallback( - (e: React.ChangeEvent) => { - setDraft(e.target.value) - }, + const handleContentChange = useCallback( + (content: string) => setDraft(content), [setDraft], ) - const handleKeyDown = useCallback( - (e: React.KeyboardEvent) => { - if ((e.metaKey || e.ctrlKey) && e.key === "Enter") { - e.preventDefault() - if (draft.trim() && !isSaving) { - onSave(draft) - } - } - }, - [draft, isSaving, onSave], - ) + const handleEditorSubmit = useCallback(() => { + const currentDraft = draftRef.current + if (currentDraft.trim() && !isSaving) { + onSave(currentDraft) + } + }, [isSaving, onSave]) const handleSaveClick = useCallback(() => { if (draft.trim() && !isSaving) { @@ -51,7 +47,17 @@ export function QuickNoteCard({ onMaximize(draft) }, [draft, onMaximize]) + const handleBlurCapture = useCallback( + (e: React.FocusEvent) => { + if (e.currentTarget.contains(e.relatedTarget as Node | null)) return + setIsExpanded(draftRef.current.trim().length > 0) + }, + [], + ) + const canSave = draft.trim().length > 0 && !isSaving + const editorHeight = + isExpanded || draft.trim() ? "min-h-[188px]" : "min-h-[120px]" return (
setIsExpanded(true)} + onBlurCapture={handleBlurCapture} style={{ boxShadow: "inset 1.421px 1.421px 4.263px 0 rgba(11, 15, 21, 0.4)", }} @@ -77,18 +85,23 @@ export function QuickNoteCard({ -