Files
Pena/src-tauri/src/domain/theme.rs
T
Gato e34528c886 feat: thèmes rapides gérés par le backend via fichiers CSS
Les thèmes ne sont plus codés en dur dans le JS. Chaque thème est
un fichier CSS dans src-tauri/resources/themes/, embarqué à la
compilation via include_str!. Le backend expose list_themes et
get_theme_css comme commandes Tauri ; le frontend charge et met en
cache le CSS à la demande.

Ajout du thème "Défaut" (basé sur Shell Indigo) avec commentaires
sur chaque règle et rendu complet des tableaux (en-têtes en
majuscules, bordure extérieure, séparateurs verticaux, lignes
alternées) aligné sur MarkdownRender-nodejs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 15:04:11 +02:00

40 lines
1018 B
Rust

pub struct Theme {
pub id: String,
pub label: String,
}
pub trait ThemeRepository: Send + Sync {
fn list(&self) -> Vec<Theme>;
fn get_css(&self, id: &str) -> Option<String>;
}
#[cfg(test)]
mod tests {
use super::*;
struct StubRepo;
impl ThemeRepository for StubRepo {
fn list(&self) -> Vec<Theme> {
vec![Theme { id: "a".into(), label: "A".into() }]
}
fn get_css(&self, id: &str) -> Option<String> {
if id == "a" { Some(".x{}".into()) } else { None }
}
}
#[test]
fn theme_fields_accessible() {
let t = Theme { id: "dark".into(), label: "Mode sombre".into() };
assert_eq!(t.id, "dark");
assert_eq!(t.label, "Mode sombre");
}
#[test]
fn repository_trait_object_works() {
let repo: Box<dyn ThemeRepository> = Box::new(StubRepo);
assert_eq!(repo.list().len(), 1);
assert!(repo.get_css("a").is_some());
assert!(repo.get_css("unknown").is_none());
}
}