sign.js :
- aria-label sur les 4 Fab (Se déconnecter, dashboard, Se connecter, S'enregistrer)
- Correction des guillemets typographiques U+2018/U+2019 en ASCII (empêchaient le parsing JSX)
- Suppression de useMemo inutilisé
- IIFE async ;() → startSubscription() nommée + .catch() explicite (semi-style + no-void)
auth-form/index.js :
- aria-label des IconButton visibility traduits en français avec état dynamique :
'Afficher/Masquer le mot de passe' et 'Afficher/Masquer la vérification'
version-timeline.js :
- aria-label='Comparer les versions' sur IconButton Comparer
- aria-label dynamique + aria-expanded sur le bouton expand/collapse
- Correction object-curly-newline et jsx-closing-bracket-location (pré-existants)
version-search.js :
- inputProps aria-label='Rechercher dans les versions' (placeholder seul insuffisant)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
export-pdf-button et print-button injectaient marked(content) directement
dans innerHTML / document.write. Un lien Markdown javascript: passait le
filtre hasRestrictedChar et pouvait s'exécuter.
Ajout de DOMPurify.sanitize() via import dynamique (déjà présent en dep
transitive de jspdf) sur les deux composants, avec whitelist de tags
et d'attributs stricte. markdown-renderer n'est pas touché car
react-markdown-preview utilise rehype-sanitize en interne.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Ajout useTheme pour accès aux couleurs Material-UI
- Utilisation theme.palette.text.secondary pour le markdown
- Compatible thèmes sombre et clair
- Texte markdown maintenant lisible sur tous fonds
- Composant PrintButton avec fenêtre popup dédiée
- Styles CSS print-optimized pour A4 avec media queries
- Support markdown complet avec rendu approprié
- Interface print avec boutons Imprimer/Fermer
- Feedback snackbar cohérent avec autres composants
- Intégré dans VersionPage, ListVersions et VersionTimeline
- Calcul isVoteDisabled basé sur 3 jours après création
- Désactivation VoteButtons pour versions anciennes
- Chip visuel "Vote fermé" pour versions expirées
- Cohérence avec VersionPage et VersionComparison
- Parser markdown avec marked pour rendu HTML complet
- Styles CSS pour éléments markdown (headings, listes, code, etc.)
- Nettoyage automatique des styles temporaires
- Fallback texte brut si parsing markdown échoue
- Notifications snackbar pour partage natif et copie presse-papier
- Gestion erreurs avec messages appropriés
- Fallback complet pour navigateurs plus anciens
- État voteRefreshKey partagé pour forcer refresh des VoteButtons
- Props onVoteResult passées à VersionComparison
- Clés uniques pour chaque VoteButtons (header/comparison)
- Snackbar local dans VersionComparison si pas de callback parent
- Callback onVoteResult pour VoteButtons avec notifications
- Snackbar pour confirmer succès/erreur des votes
- État snackbar avec gestion des messages
- Ajout ShareButton dans colonnes Actions table et cards timeline
- Génération URLs partageables vers versions spécifiques
- Support partage natif avec fallback copie presse-papier
- Route app/dashboard/versions/[id]/ pour URLs spécifiques
- Composant VersionPage avec affichage et partage natif
- Support modes comparison/content via paramètre URL