- Store feature keys (PageType) in history instead of translated labels
- Show icon + name + description in history items (same as search results)
- Click or Enter on history item navigates directly to the tool page
- Remove History icon import (no longer needed)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add global Cmd/Ctrl+K keyboard shortcut to focus search input
- Show keyboard shortcut hint (⌘K) in search input when empty
- Improve input styling: rounded-lg, softer borders, focus transitions
- Improve dropdown: rounded-lg, larger shadow, better spacing
- Larger result icons (h-8 w-8) with rounded-lg containers
- Refined history section with uppercase label and muted icon
- Search icon fades in on focus via group-focus-within
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Replace large ToolCard layout with dense grid (3-6 columns responsive)
- Each item shows icon + tool name in a compact tile
- Hover highlights icon and text with smooth transitions
- Remove ToolCard import from Dashboard (component retained for reuse)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add search input at top to filter tools by name/description
- Add 'recently used' section showing last 3 used tools as compact chips
- Add 'all tools' section header for the tool card grid
- Track tool usage via new 'app/recentlyUsedTools' storage key
- Update navigateTo to record recently used tools (max 3, LRU order)
- Add i18n keys: dashboard_searchPlaceholder, dashboard_recentlyUsed, dashboard_allTools
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove unused imports and variables across 35 files
- Simplify component logic and remove dead code
- Clean up test files by removing unnecessary setup
- Streamline CI workflow configuration
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use react-i18next withTranslation HOC for class component to translate
title, description, and retry button text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use react-i18next withTranslation HOC for class component to translate
title, description, and refresh button text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add keys for errorBoundary, pageErrorBoundary, router, and
messages.copyEmpty in both zh and en locales.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
getEntryPointType() is a simple config getter. Replace useMemo(() => ..., [])
with a direct call — the empty dep array made the memo pointless.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Both branches of the ternary returned 'p-1'. Inline the constant
directly into the className string.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prevents unnecessary re-renders by memoizing the callback, consistent
with handleFileChange which already uses useCallback.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace hand-written button class strings with shadcn Button component
using outline and default variants. Removes ~15 lines of duplicated
Tailwind classes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use existing translation keys for clear success, copy success, and
copy error messages instead of hardcoded Chinese text.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace hardcoded red-200/red-50/red-600 with border-destructive,
bg-destructive/5, text-destructive. Use variant='destructive' on
Button. Align error log styling with PageErrorBoundary.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove hand-written variantClasses/sizeClasses that duplicated shadcn's
buttonVariants. Now extends ButtonProps and imports buttonVariants from
components/ui/button for consistent styling.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The release workflow was always building with the hardcoded version
from package.json (1.0.0), causing Chrome Web Store to reject uploads
because 1.0.0 equals the already-published 1.0 (trailing zeros ignored).
Added a step to extract the version from the git tag and update
package.json before the build, so the zip contains the correct version.
Co-authored-by: Ubuntu <ubuntu@localhost.localdomain>
- Copy zip files to fixed directory before upload to avoid glob pattern issues
- Add debug steps to verify output and downloaded artifacts
- Fix Node.js 20 compatibility issue with upload-artifact@v4