fix: 5 bugs critiques de l'éditeur (Phase 1 audit)
1. replaceAll (Find & Replace) — une seule transaction ProseMirror au lieu d'un forEach cassé. Tous les matchs sont maintenant remplacés. 2. Link Preview unwrap — deleteNode() au lieu de clearer les attrs qui laissaient un nœud fantôme invisible dans le document. 3. Conversion Markdown → richtext — breaks: true dans marked.parse() Les simple newlines sont maintenant convertis en <br>. + préserve les blocs custom (toggle, callout, math, columns, outline, link-preview) en commentaires HTML lors de l'export MD. 4. emitNoteChange exercices — shape corrigée (type:'created' attend un objet Note, pas noteId/notebookId séparés). 5. Raccourcis clavier sans conflit : Cmd+Shift+C → Cmd+Alt+C (callout, avant: copier) Cmd+Shift+O → Cmd+Alt+O (outline, avant: historique/signets) Cmd+Shift+L → Cmd+Alt+L (colonnes, avant: lock screen macOS)
This commit is contained in:
@@ -1453,6 +1453,7 @@
|
||||
"dashboard": "Dashboard",
|
||||
"users": "Users",
|
||||
"aiManagement": "AI Management",
|
||||
"billing": "Billing & Quotas",
|
||||
"published": "Published pages",
|
||||
"chat": "AI Chat",
|
||||
"lab": "The Lab (Ideas)",
|
||||
@@ -1481,6 +1482,40 @@
|
||||
"testSearch": "Test web search"
|
||||
},
|
||||
"settingsDescription": "Configure application-wide settings",
|
||||
"billing": {
|
||||
"title": "Billing & Quotas",
|
||||
"description": "Manage subscription tiers, AI quotas, and Stripe business settings without redeploying.",
|
||||
"stripeConfigTitle": "Stripe business config",
|
||||
"stripeConfigDescription": "Price IDs and billing toggle. Secret keys stay in server environment only.",
|
||||
"enableBilling": "Enable billing UI and checkout",
|
||||
"STRIPE_PRICE_PRO_MONTHLY": "Pro — monthly price ID",
|
||||
"STRIPE_PRICE_PRO_ANNUAL": "Pro — annual price ID",
|
||||
"STRIPE_PRICE_BUSINESS_MONTHLY": "Business — monthly price ID",
|
||||
"STRIPE_PRICE_BUSINESS_ANNUAL": "Business — annual price ID",
|
||||
"secretsNote": "STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET must remain in Docker/env secrets — never stored here.",
|
||||
"saveConfig": "Save billing config",
|
||||
"configSaved": "Billing configuration saved",
|
||||
"configFailed": "Failed to save billing configuration",
|
||||
"limitsTitle": "Tier quotas",
|
||||
"limitsDescription": "Monthly request limits per feature. Changes apply within ~60 seconds.",
|
||||
"feature": "Feature",
|
||||
"mode": "Access",
|
||||
"monthlyLimit": "Monthly limit",
|
||||
"actions": "Actions",
|
||||
"modeUnavailable": "Not available",
|
||||
"modeLimited": "Limited",
|
||||
"modeUnlimited": "Unlimited",
|
||||
"saveLimit": "Save",
|
||||
"limitSaved": "Quota updated",
|
||||
"limitFailed": "Failed to update quota",
|
||||
"usageTitle": "Usage overview",
|
||||
"usagePeriod": "Period {period}",
|
||||
"lastSync": "Last sync {date}",
|
||||
"notSynced": "Not synced yet (cron /api/cron/sync-usage)",
|
||||
"byFeature": "By feature (PostgreSQL)",
|
||||
"topUsers": "Top users",
|
||||
"noUsageData": "No usage data for this period yet"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"description": "Overview of your application metrics",
|
||||
@@ -3072,6 +3107,7 @@
|
||||
},
|
||||
"billing": {
|
||||
"title": "Billing",
|
||||
"disabledByAdmin": "Billing and upgrades are currently disabled. Contact your administrator if you need access.",
|
||||
"currentPlan": "Current Plan",
|
||||
"upgradePlan": "Upgrade Plan",
|
||||
"manageBilling": "Manage Billing",
|
||||
|
||||
@@ -1459,6 +1459,7 @@
|
||||
"dashboard": "Tableau de bord",
|
||||
"users": "Utilisateurs",
|
||||
"aiManagement": "Gestion IA",
|
||||
"billing": "Facturation & quotas",
|
||||
"published": "Pages publiées",
|
||||
"chat": "Chat IA",
|
||||
"lab": "Le Lab (Idées)",
|
||||
@@ -1487,6 +1488,40 @@
|
||||
"testSearch": "Test recherche web"
|
||||
},
|
||||
"settingsDescription": "Configurer les paramètres de l'application",
|
||||
"billing": {
|
||||
"title": "Facturation & quotas",
|
||||
"description": "Gérez les paliers, quotas IA et la config Stripe métier sans redéploiement.",
|
||||
"stripeConfigTitle": "Config Stripe (métier)",
|
||||
"stripeConfigDescription": "Identifiants de prix et activation de la facturation. Les clés secrètes restent dans l'environnement serveur.",
|
||||
"enableBilling": "Activer l'interface et le paiement Stripe",
|
||||
"STRIPE_PRICE_PRO_MONTHLY": "Pro — prix mensuel (price ID)",
|
||||
"STRIPE_PRICE_PRO_ANNUAL": "Pro — prix annuel (price ID)",
|
||||
"STRIPE_PRICE_BUSINESS_MONTHLY": "Business — prix mensuel (price ID)",
|
||||
"STRIPE_PRICE_BUSINESS_ANNUAL": "Business — prix annuel (price ID)",
|
||||
"secretsNote": "STRIPE_SECRET_KEY et STRIPE_WEBHOOK_SECRET doivent rester dans Docker/env — jamais stockés ici.",
|
||||
"saveConfig": "Enregistrer la config",
|
||||
"configSaved": "Configuration enregistrée",
|
||||
"configFailed": "Échec de l'enregistrement",
|
||||
"limitsTitle": "Quotas par palier",
|
||||
"limitsDescription": "Limites mensuelles par fonctionnalité. Prise en effet en ~60 s.",
|
||||
"feature": "Fonctionnalité",
|
||||
"mode": "Accès",
|
||||
"monthlyLimit": "Limite mensuelle",
|
||||
"actions": "Actions",
|
||||
"modeUnavailable": "Indisponible",
|
||||
"modeLimited": "Limité",
|
||||
"modeUnlimited": "Illimité",
|
||||
"saveLimit": "Enregistrer",
|
||||
"limitSaved": "Quota mis à jour",
|
||||
"limitFailed": "Échec de la mise à jour",
|
||||
"usageTitle": "Aperçu consommation",
|
||||
"usagePeriod": "Période {period}",
|
||||
"lastSync": "Dernière sync {date}",
|
||||
"notSynced": "Pas encore synchronisé (cron /api/cron/sync-usage)",
|
||||
"byFeature": "Par fonctionnalité (PostgreSQL)",
|
||||
"topUsers": "Utilisateurs les plus actifs",
|
||||
"noUsageData": "Aucune donnée pour cette période"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Tableau de bord",
|
||||
"description": "Vue d'ensemble des métriques de l'application",
|
||||
@@ -3076,6 +3111,7 @@
|
||||
},
|
||||
"billing": {
|
||||
"title": "Facturation",
|
||||
"disabledByAdmin": "La facturation et les upgrades sont désactivées. Contactez l'administrateur si besoin.",
|
||||
"currentPlan": "Plan actuel",
|
||||
"upgradePlan": "Changer de plan",
|
||||
"manageBilling": "Gérer la facturation",
|
||||
|
||||
Reference in New Issue
Block a user