feat: smart note history with manual/auto modes, delete entries, i18n fixes
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 1m16s

- Add noteHistoryMode setting (manual default / auto) with DB migration
- Manual mode: commit button in editor toolbar creates snapshots on demand
- Auto mode: smart snapshots with 20-char diff threshold + 5min cooldown,
  structural changes (color, pin, archive, labels) bypass cooldown
- Add delete individual history entries from history modal
- Fix sidebar: Notes nav no longer active on notebook pages
- Fix sidebar icon: replace filled Lightbulb with outlined FileText
- Fix title suggestions: change from amber to sky blue color scheme
- Fix hydration mismatch: add suppressHydrationWarning on locale dates
- Complete i18n: add history, sort, and AI chat translations for all 16 languages
- Translate French AI assistant section (40+ keys) from English to French
- Update README with new features and stack info

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-28 21:05:55 +02:00
parent ed807d3b2a
commit 69ea064ca8
40 changed files with 2110 additions and 250 deletions

View File

@@ -362,56 +362,56 @@
"undo": "Annuler IA",
"undoAI": "Annuler la transformation IA",
"undoApplied": "Texte original restauré",
"minWordsError": "Note must contain at least 5 words to use AI actions.",
"genericError": "AI error",
"actionError": "Error during AI action",
"appliedToNote": "Applied to note",
"applyToNote": "Apply to note",
"undoLastAction": "Undo last AI action",
"selectContext": "Select context...",
"selectNotebook": "Select notebook",
"chatPlaceholder": "Ask AI to edit, summarize, or draft...",
"assistantTitle": "AI Assistant",
"currentNote": "Current note",
"shrinkPanel": "Shrink panel",
"expandPanel": "Expand panel",
"chatTab": "Chat",
"noteActions": "Note Actions",
"askToStart": "Ask the Assistant something to get started.",
"contextLabel": "Context",
"thisNote": "This note",
"allMyNotes": "All my notes",
"notebookGeneric": "Notebook",
"writingTone": "Writing Tone",
"askAboutThisNote": "Ask AI something about this note...",
"askAboutYourNotes": "Ask AI something about your notes...",
"webSearchLabel": "Web Search",
"newLineHint": "Shift+Enter = new line",
"resultLabel": "Result",
"discardAction": "Discard",
"transformationsDesc": "Transformations — applied directly to the note",
"writeMinWordsAction": "Write at least 5 words to activate AI actions.",
"processingAction": "Processing...",
"minWordsError": "La note doit contenir au moins 5 mots pour utiliser les actions IA.",
"genericError": "Erreur IA",
"actionError": "Erreur lors de l'action IA",
"appliedToNote": "Appliqué à la note",
"applyToNote": "Appliquer à la note",
"undoLastAction": "Annuler la dernière action IA",
"selectContext": "Sélectionner le contexte...",
"selectNotebook": "Sélectionner un carnet",
"chatPlaceholder": "Demandez à l'IA de modifier, résumer ou rédiger...",
"assistantTitle": "Assistant IA",
"currentNote": "Note actuelle",
"shrinkPanel": "Réduire le panneau",
"expandPanel": "Agrandir le panneau",
"chatTab": "Discussion",
"noteActions": "Actions sur la note",
"askToStart": "Posez une question à l'Assistant pour commencer.",
"contextLabel": "Contexte",
"thisNote": "Cette note",
"allMyNotes": "Toutes mes notes",
"notebookGeneric": "Carnet",
"writingTone": "Ton d'écriture",
"askAboutThisNote": "Posez une question sur cette note...",
"askAboutYourNotes": "Posez une question sur vos notes...",
"webSearchLabel": "Recherche web",
"newLineHint": "Maj+Entrée = nouvelle ligne",
"resultLabel": "Résultat",
"discardAction": "Ignorer",
"transformationsDesc": "Transformations — appliquées directement à la note",
"writeMinWordsAction": "Écrivez au moins 5 mots pour activer les actions IA.",
"processingAction": "Traitement en cours...",
"action": {
"clarify": "Clarify",
"shorten": "Shorten",
"improve": "Improve",
"toMarkdown": "To Markdown"
"clarify": "Clarifier",
"shorten": "Raccourcir",
"improve": "Améliorer",
"toMarkdown": "Convertir en Markdown"
},
"openAssistant": "Open AI Assistant",
"poweredByMomento": "Powered by Momento AI",
"welcomeMsg": "Hello! I'm your AI assistant. How can I help you with your notes today? I can help refine tone, expand messaging, or summarize content.",
"summaryLast5": "Summary of your last 5 notes",
"analyzingProgress": "Analyzing...",
"generateInsightsBtn": "Generate Insights",
"newDiscussion": "New discussion",
"noRecentConversations": "No recent conversations.",
"discussionContextLabel": "Discussion Context",
"webSearchNotConfigured": "Web Search (Not configured)",
"historyTab": "History",
"openAssistant": "Ouvrir l'Assistant IA",
"poweredByMomento": "Propulsé par Momento AI",
"welcomeMsg": "Bonjour ! Je suis votre assistant IA. Comment puis-je vous aider avec vos notes ? Je peux affiner le ton, développer un message ou résumer le contenu.",
"summaryLast5": "Résumé de vos 5 dernières notes",
"analyzingProgress": "Analyse en cours...",
"generateInsightsBtn": "Générer des insights",
"newDiscussion": "Nouvelle discussion",
"noRecentConversations": "Aucune conversation récente.",
"discussionContextLabel": "Contexte de discussion",
"webSearchNotConfigured": "Recherche web (non configurée)",
"historyTab": "Historique",
"insightsTab": "Insights",
"aiCopilot": "AI Copilot",
"suggestTitle": "AI title suggestion"
"aiCopilot": "Copilote IA",
"suggestTitle": "Suggestion de titre IA"
},
"aiSettings": {
"description": "Configurez vos fonctionnalités IA et préférences",
@@ -985,7 +985,29 @@
"notes.emptyNotebook": "Empty notebook",
"notes.emptyNotebookDesc": "This notebook has no notes. Click + to create one.",
"notes.noNoteSelected": "No note selected",
"notes.selectOrCreateNote": "Select a note from the list or create a new one."
"notes.selectOrCreateNote": "Select a note from the list or create a new one.",
"commitVersion": "Enregistrer la version",
"versionSaved": "Version enregistrée",
"deleteVersion": "Supprimer cette version",
"versionDeleted": "Version supprimée",
"deleteVersionConfirm": "Supprimer cette version définitivement ?",
"historyMode": "Mode d'historique",
"historyModeManual": "Manuel (bouton commit)",
"historyModeAuto": "Automatique (intelligent)",
"historyModeManualDesc": "Créer des snapshots manuellement avec le bouton commit",
"historyModeAutoDesc": "Snapshots automatiques avec détection intelligente",
"history": "Historique",
"historyRestored": "Version restaurée",
"historyEnabled": "Historique activé",
"historyDisabledDesc": "L'historique est désactivé pour votre compte.",
"enableHistory": "Activer l'historique",
"historyEmpty": "Aucune version disponible",
"historySelectVersion": "Sélectionnez une version pour prévisualiser son contenu",
"sortBy": "Trier par",
"sortDateDesc": "Date (récent)",
"sortDateAsc": "Date (ancien)",
"sortTitleAsc": "Titre A → Z",
"sortTitleDesc": "Titre Z → A"
},
"pagination": {
"next": "→",