feat: add Unsplash search hook and API proxy routes

- Implemented `useUnsplashSearch` hook for searching Unsplash photos with debounce.
- Created Unsplash API client functions for searching photos and triggering downloads.
- Added proxy routes for Unsplash API to handle search requests and background image uploads.
- Introduced accessibility utilities for WCAG compliance checks and motion preference management.
- Developed theme sharing module for encoding and decoding theme configurations as base64url strings.
This commit is contained in:
catlog22
2026-02-08 20:01:28 +08:00
parent 87daccdc48
commit 166211dcd4
52 changed files with 5798 additions and 142 deletions

View File

@@ -224,10 +224,26 @@
"content": "Content Search",
"files": "File Search",
"symbol": "Symbol Search",
"semantic": "Semantic Search (LSP)",
"mode": "Mode",
"mode.semantic": "Semantic (default)",
"mode.exact": "Exact (FTS)",
"mode.fuzzy": "Fuzzy",
"semanticMode": "Search Mode",
"semanticMode.fusion": "Fusion Search",
"semanticMode.vector": "Vector Search",
"semanticMode.structural": "Structural Search",
"fusionStrategy": "Fusion Strategy",
"fusionStrategy.rrf": "RRF (default)",
"fusionStrategy.dense_rerank": "Dense Rerank",
"fusionStrategy.binary": "Binary",
"fusionStrategy.hybrid": "Hybrid",
"fusionStrategy.staged": "Staged",
"lspStatus": "LSP Status",
"lspAvailable": "Semantic search available",
"lspUnavailable": "Semantic search unavailable",
"lspNoVector": "Vector index required",
"lspNoSemantic": "Semantic dependencies required",
"query": "Query",
"queryPlaceholder": "Enter search query...",
"button": "Search",

View File

@@ -132,6 +132,10 @@
"ask_question": {
"name": "ask_question",
"desc": "Ask interactive questions through A2UI interface"
},
"smart_search": {
"name": "smart_search",
"desc": "Intelligent code search with fuzzy and semantic modes"
}
},
"paths": {

View File

@@ -34,5 +34,87 @@
"enhanced": "Enhanced",
"hoverGlow": "Enable hover glow effects",
"bgAnimation": "Enable background gradient animation"
},
"accessibility": {
"contrastWarning": "Some color combinations may not meet WCAG AA contrast requirements:",
"fixSuggestion": "Suggested fix: adjust {target} from {original} to {suggested} (ratio: {ratio}:1)",
"applyFix": "Apply Fix",
"dismiss": "Dismiss"
},
"motion": {
"label": "Motion Preference",
"system": "System",
"reduce": "Reduce",
"enable": "Enable"
},
"slot": {
"title": "Theme Slots",
"default": "Default",
"custom1": "Custom 1",
"custom2": "Custom 2",
"copy": "Copy Slot",
"rename": "Rename",
"delete": "Delete",
"undoDelete": "Slot deleted. Undo?",
"undo": "Undo",
"limitReached": "Maximum of {limit} theme slots reached",
"deleteConfirm": "Delete this theme slot?",
"cannotDeleteDefault": "Cannot delete the default slot",
"renameEmpty": "Slot name cannot be empty",
"copyOf": "Copy of {name}",
"active": "Active"
},
"styleTier": {
"label": "Style Tier",
"soft": "Soft",
"standard": "Standard",
"highContrast": "High Contrast",
"softDesc": "Reduced saturation, gentle colors",
"standardDesc": "Default balanced appearance",
"highContrastDesc": "Enhanced readability, sharper colors"
},
"background": {
"title": "Background Image",
"mode": {
"gradientOnly": "Gradient",
"imageOnly": "Image",
"imageGradient": "Image+Gradient"
},
"searchPlaceholder": "Search Unsplash photos...",
"customUrlPlaceholder": "Custom image URL...",
"apply": "Apply",
"removeImage": "Remove",
"effects": "Visual Effects",
"blur": "Blur",
"darken": "Darken",
"saturation": "Saturation",
"frostedGlass": "Frosted glass effect on content",
"grain": "Noise texture overlay",
"vignette": "Vignette (dark edges)",
"searchError": "Failed to search photos. Check if Unsplash API is configured.",
"noResults": "No photos found",
"prev": "Prev",
"next": "Next",
"loadFailed": "Image failed to load, fallback to gradient",
"upload": "Upload local image",
"uploading": "Uploading...",
"uploadError": "Upload failed",
"fileTooLarge": "File too large (max 10MB)",
"invalidType": "Only JPG, PNG, WebP, GIF supported"
},
"share": {
"label": "Theme Sharing",
"copyCode": "Copy Theme Code",
"copied": "Theme code copied to clipboard",
"import": "Import Theme",
"paste": "Paste theme code here...",
"preview": "Import Preview",
"apply": "Apply Theme",
"cancel": "Cancel",
"invalidCode": "Invalid theme code. Please check and try again.",
"incompatibleVersion": "This theme code is from an incompatible version and cannot be imported.",
"versionWarning": "This theme code is from a different version. Some settings may not be accurate.",
"importSuccess": "Theme imported successfully",
"noSlotAvailable": "No available theme slot. Delete a custom slot first."
}
}