feat: image AI titles (3 suggestions), describe-images action, pin/list fixes, i18n
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 44s

- Add image description service + API route for AI-powered image analysis
- Image title generation returns 3 selectable suggestions via TitleSuggestions component
- Add "Describe images" action in AI assistant (individual + collective)
- Fix pin refresh propagation in card and tabs view
- Fix note creation refresh in tabs mode, pass all notes to tabs view
- Add RTL support (dir="auto") on note content elements
- Pass UI language dynamically to AI endpoints instead of hardcoded 'fr'
- Add 18 missing i18n keys in both en.json and fr.json
- Sparkles button on images for AI title generation (bottom-right, pulse animation)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-29 22:34:13 +02:00
parent fc06519f56
commit d91072ed6b
11 changed files with 453 additions and 59 deletions

View File

@@ -39,7 +39,8 @@
"newNoteTabsHint": "Create note in this notebook",
"noLabelsInNotebook": "No labels in this notebook yet",
"archive": "Archive",
"trash": "Trash"
"trash": "Trash",
"clearFilter": "Remove filter"
},
"notes": {
"title": "Notes",
@@ -186,7 +187,21 @@
"sortDateDesc": "Date (newest)",
"sortDateAsc": "Date (oldest)",
"sortTitleAsc": "Title A → Z",
"sortTitleDesc": "Title Z → A"
"sortTitleDesc": "Title Z → A",
"suggestTitle": "AI title",
"generateTitleFromImage": "Generate title from image",
"titleGenerated": "Title generated",
"content": "Content",
"restore": "Restore",
"createFailed": "Failed to create note",
"updateFailed": "Failed to update note",
"archived": "Note archived",
"archiveFailed": "Failed to archive",
"sort": "Sort",
"confirmDeleteTitle": "Delete note",
"leftShare": "Share removed",
"dismissed": "Note dismissed from recent",
"generalNotes": "General Notes"
},
"pagination": {
"previous": "←",
@@ -390,11 +405,14 @@
"transformationsDesc": "Transformations — applied directly to the note",
"writeMinWordsAction": "Write at least 5 words to activate AI actions.",
"processingAction": "Processing...",
"noImagesError": "No images in this note",
"overview": "Overview",
"action": {
"clarify": "Clarify",
"shorten": "Shorten",
"improve": "Improve",
"toMarkdown": "To Markdown"
"toMarkdown": "To Markdown",
"describeImages": "Describe images"
},
"openAssistant": "Open AI Assistant",
"poweredByMomento": "Powered by Momento AI",
@@ -409,7 +427,9 @@
"historyTab": "History",
"insightsTab": "Insights",
"aiCopilot": "AI Copilot",
"suggestTitle": "AI title suggestion"
"suggestTitle": "AI title suggestion",
"generateTitleFromImage": "Generate title from image",
"titleGenerated": "Title generated from image"
},
"titleSuggestions": {
"available": "Title suggestions",
@@ -750,7 +770,8 @@
"pdfGeneratedOn": "Generated on:",
"confidence": "confidence",
"savingReminder": "Failed to save reminder",
"removingReminder": "Failed to remove reminder"
"removingReminder": "Failed to remove reminder",
"generatingDescription": "Please wait..."
},
"notebookSuggestion": {
"title": "Move to {name}?",
@@ -1143,7 +1164,8 @@
"notesViewDescription": "Choose how notes are shown on home and in notebooks.",
"notesViewLabel": "Notes layout",
"notesViewTabs": "Tabs (OneNote-style)",
"notesViewMasonry": "Cards (grid)"
"notesViewMasonry": "Cards (grid)",
"selectTheme": "Select theme"
},
"generalSettings": {
"title": "General Settings",
@@ -1567,7 +1589,8 @@
"createFailed": "Creation failed",
"deleteSpace": "Delete space",
"deleted": "Space deleted",
"deleteError": "Error deleting"
"deleteError": "Error deleting",
"rename": "Rename"
},
"lab": {
"initializing": "Initializing workspace",