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>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user