feat(theme): réglage Thème Clair/Sombre/Système complet — libellés, anti-flash, tests - #4
feat(theme): réglage Thème Clair/Sombre/Système complet — libellés, anti-flash, tests#4xBirahim wants to merge 4 commits into
Conversation
… logic Add an inline anti-flash bootstrap in index.html so windows open directly in the persisted theme (light/dark/system) instead of flashing light first. Extract the theme resolution into src/utils/theme.ts, reused by useTheme, with a single source of truth for the .dark class toggling.
|
Petite demande pour tester le circuit de retours humains : merci de remplacer le libellé Système par Auto dans la PR. |
|
Correction en cours — la demande de remplacer le libellé visible « Système » par « Auto » a été transmise à dev-agent, en conservant le mode système interne et les traductions cohérentes. — PM (bot) |
xBirahim
left a comment
There was a problem hiding this comment.
Verdict: APPROVED / APPROUVÉ (technical review).\n\nLes critères de l’issue sont couverts : le réglage expose exactement Clair / Sombre / Système dans SettingsPage.tsx:1488-1534, la sélection est persistée via settingsStore et propagée entre renderers par l’événement storage, et useTheme.ts:15-34 applique immédiatement la classe aux fenêtres et suit prefers-color-scheme en mode auto. Le bootstrap src/index.html:9-38 évite le flash au démarrage.\n\nVérifications : les checks GitHub de la PR (tests, lockfile-lint, build Linux/Windows/macOS x64/arm64) sont SUCCESS ; les 6 tests ciblés test/utils/theme.test.js passent localement. Lint/typecheck/build locaux ne sont pas exécutables dans ce workspace faute de node_modules (modules manquants), sans défaut attribuable au diff. Diff ciblé, aucune fuite de secret, aucun trailer Co-authored-by détecté dans les commits, et git diff --check est propre.\n\nLimitation de publication : GitHub interdit à l’auteur xBirahim d’approuver sa propre PR ; ce compte est celui actuellement authentifié. Une approbation formelle par un mainteneur reste nécessaire.\n\n— supervisor (bot)
|
Correction appliquée suite à votre retour : le libellé visible de l'option système est désormais « Auto » (fr, en, es, de, pt) / « Automatico » (it) / « 自動 » (ja) / « Авто » (ru) / « 自动 » (zh-CN) / « 自動 » (zh-TW) dans les 10 locales. Le comportement interne est inchangé : la valeur stockée reste « auto » et l'option continue de suivre la préférence système ( Commit : — dev-agent (bot) |
|
Retour humain appliqué : le libellé visible de l'option « Système » est remplacé par « Auto » dans les 10 locales (commit d1d3e68). Le comportement interne (valeur Vérifications effectuées sur cette branche :
Note : le commit d1d3e68 a été poussé par un agent concurrent avec exactement le même contenu (arbres identiques) ; aucun doublon ajouté. |
|
Merci pour ce retour et la vérification détaillée. La correction « Auto » est bien intégrée ; la validation finale reste en cours côté tester, avec les checks CI déjà majoritairement au vert. — PM (bot) |
|
Merci pour la revue technique et la vérification détaillée. Les critères et les checks sont bien pris en compte ; l’approbation formelle d’un mainteneur reste nécessaire avant fusion humaine. — PM (bot) |
Contexte
Issue #3 — Ajouter un réglage « Thème » dans les paramètres avec trois options : Clair, Sombre, Système. Le choix est persisté et appliqué immédiatement à toutes les fenêtres.
Ce que fait ce PR
Le réglage Thème existait déjà partiellement (segment à 3 boutons dans General → Apparence, persistance localStorage via
settingsStore, application viauseThemedansAppRouterpour toutes les fenêtres, tokens.darkcomplets dansindex.css). Ce PR le finalise pour satisfaire tous les critères d'acceptation de l'issue :auto(qui suit la préférence système) est affichée « Auto » (fr, en, es, de, pt) / « Automatico » (it) / « 自動 » (ja) / « Авто » (ru) / « 自动 » (zh-CN) / « 自動 » (zh-TW) dans les 10 locales, conformément au retour humain sur cette PR.src/index.htmlqui applique le thème persisté (ou la préférence système) sur<html>avant le premier rendu : les fenêtres s'ouvrent directement dans le bon thème, plus de flash clair pour un utilisateur en sombre.src/utils/theme.ts(source de vérité unique, utilisée par le hookuseThemeet reflétée par le bootstrap inline), avec tests unitaires danstest/utils/theme.test.js.Vérifications
npm run lint: ✅npm run typecheck: ✅npm run build:renderer: ✅node --test "test/**/*.test.js": 1066 tests, 992 pass, 0 fail ✅test/utils/theme.test.js(6 tests) : ✅ — exécutés localement après la correction du libelléNotes :
npm run i18n:checkéchoue sur des cléssettingsPage.prompts.*(etsettingsPage.aiModels.advanced.*) manquantes en zh-TW — échec préexistant surmain(vérifié via stash), hors scope de cette issue.npm run format:checksignale des fichiers non formatés — état préexistant surmain(vérifié via stash) ; les lignes modifiées par ce PR passent Prettier.useThemes'exécute dans chaque renderer (control panel, dictation, agent) et le listenerstoragedesettingsStorepropage le changement dethemeentre fenêtres — « Sombre » s'applique immédiatement partout.auto(suitprefers-color-scheme) est inchangé. Commitd1d3e683(fix(theme): restore Auto label for the auto theme option in all locales).Closes #3