From bab1fff0a2c779d2ddb294baa831a3ba64fdb6d4 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 5 Feb 2026 02:06:06 +0000 Subject: [PATCH 1/4] fix(ui): restore Ctrl+Enter shortcut in bookmark dialog The keyboard shortcut to submit the bookmark dialog was broken. Now Ctrl+Enter (or Cmd+Enter on Mac) properly saves from any field. https://claude.ai/code/session_01H5CR653mxrDbtqwK7aUA6G --- src/components/bookmarks/BookmarkInlineCard.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/bookmarks/BookmarkInlineCard.jsx b/src/components/bookmarks/BookmarkInlineCard.jsx index 6b70381..e1d0e96 100644 --- a/src/components/bookmarks/BookmarkInlineCard.jsx +++ b/src/components/bookmarks/BookmarkInlineCard.jsx @@ -222,7 +222,8 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( return } - if (e.key === 'Enter' && currentField !== 'desc') { + // Ctrl/Cmd+Enter saves from any field + if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) { e.preventDefault() handleDone() return From e64d6d290a41b1df1028e4412b9963aa15bf3b26 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 5 Feb 2026 02:06:28 +0000 Subject: [PATCH 2/4] fix(ui): update hint text to show Ctrl+Enter in bookmark dialog The hint incorrectly showed "Enter to save" which doesn't work when focused on the description textarea. Updated to "Ctrl+Enter to save". https://claude.ai/code/session_01H5CR653mxrDbtqwK7aUA6G --- src/components/bookmarks/BookmarkInlineCard.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/bookmarks/BookmarkInlineCard.jsx b/src/components/bookmarks/BookmarkInlineCard.jsx index e1d0e96..345a952 100644 --- a/src/components/bookmarks/BookmarkInlineCard.jsx +++ b/src/components/bookmarks/BookmarkInlineCard.jsx @@ -424,7 +424,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard(
- Enter to save · Esc to {isNew ? 'cancel' : 'close'} + Ctrl+Enter to save · Esc to {isNew ? 'cancel' : 'close'}
From 504e9907d4b984554178736e3f602eec7b7479dc Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 5 Feb 2026 02:06:56 +0000 Subject: [PATCH 3/4] fix(ui): position notifications in right bottom corner Notifications were horizontally centered at the bottom of the screen. Moved them to the right bottom corner for better UX. https://claude.ai/code/session_01H5CR653mxrDbtqwK7aUA6G --- src/components/ui/Toast.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ui/Toast.jsx b/src/components/ui/Toast.jsx index 14569b2..2ccd4bf 100644 --- a/src/components/ui/Toast.jsx +++ b/src/components/ui/Toast.jsx @@ -31,7 +31,7 @@ export function Toast({ message, action, actionLabel = 'Undo', duration = 5000, return (
+
{toasts.map((toast) => ( Date: Thu, 5 Feb 2026 02:07:39 +0000 Subject: [PATCH 4/4] fix(ui): restore Ctrl+Enter shortcut in bookmark dialog The keyboard shortcut to submit the bookmark dialog was broken. Now uses the useHotkeys hook with enableOnInputs: true to properly handle Ctrl+Enter (or Cmd+Enter on Mac) from any field including textarea. https://claude.ai/code/session_01H5CR653mxrDbtqwK7aUA6G --- .../bookmarks/BookmarkInlineCard.jsx | 24 +++++++++---------- src/components/ui/Toast.jsx | 6 ++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/components/bookmarks/BookmarkInlineCard.jsx b/src/components/bookmarks/BookmarkInlineCard.jsx index 345a952..f435325 100644 --- a/src/components/bookmarks/BookmarkInlineCard.jsx +++ b/src/components/bookmarks/BookmarkInlineCard.jsx @@ -1,8 +1,9 @@ -import { forwardRef, useRef, useEffect, useState } from 'react' +import { forwardRef, useRef, useEffect, useState, useCallback } from 'react' import { ExternalLink, Check, X } from 'lucide-react' import { TagInput } from '../ui/TagInput' import { Tag } from '../ui/Tag' import { getAllTags, createBookmark, updateBookmark } from '../../services/bookmarks' +import { useHotkeys } from '../../hooks/useHotkeys' /** * BookmarkInlineCard - Inline card for adding/editing bookmarks @@ -110,7 +111,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( } // Auto-save logic - const saveChanges = () => { + const saveChanges = useCallback(() => { const normalizedUrl = normalizeUrl(localUrl) if (!validateUrl(localUrl)) { @@ -143,7 +144,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( console.error('Failed to save bookmark:', error) return false } - } + }, [localUrl, localTitle, localDesc, localTags, localReadLater, isEditing, bookmark, onFieldChange, isNew]) const handleUrlBlur = () => { if (localUrl !== (bookmark?.url || '')) { @@ -198,7 +199,7 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( handleTagsChange(newTags) } - const handleDone = () => { + const handleDone = useCallback(() => { if (!validateUrl(localUrl)) { setUrlError('URL is required') urlInputRef.current?.focus() @@ -208,12 +209,18 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( if (saveChanges()) { onDone?.() } - } + }, [localUrl, saveChanges, onDone]) const handleDiscard = () => { onDiscard?.() } + // Ctrl/Cmd+Enter to save from any field + useHotkeys( + { 'mod+enter': handleDone }, + { enableOnInputs: true } + ) + const handleKeyDown = (e, currentField) => { if (e.key === 'Escape') { e.preventDefault() @@ -222,13 +229,6 @@ export const BookmarkInlineCard = forwardRef(function BookmarkInlineCard( return } - // Ctrl/Cmd+Enter saves from any field - if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) { - e.preventDefault() - handleDone() - return - } - // Tab navigation if (e.key === 'Tab') { e.preventDefault() diff --git a/src/components/ui/Toast.jsx b/src/components/ui/Toast.jsx index 2ccd4bf..031d5c7 100644 --- a/src/components/ui/Toast.jsx +++ b/src/components/ui/Toast.jsx @@ -32,7 +32,7 @@ export function Toast({ message, action, actionLabel = 'Undo', duration = 5000,
{actionLabel} )}