diff --git a/.env.example b/.env.example index 781d629..6479615 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,12 @@ # file: .env.example -# version: 1 +# version: 2 # KSP Logging root directory. Used by config/std.logging.json for relative log output paths. # The current Config document fallback is "logs" when neither the process environment nor .env defines this variable. KSP_LOGS_DIRECTORY=logs + +# Minimum time in milliseconds that a KSP desk splash remains visible after its frontend is ready. +KSP_DESK_SPLASH_MINIMUM_MS=1200 + +# Fade-in/fade-out duration in milliseconds used by the common KSP desk splash lifecycle. +KSP_DESK_SPLASH_FADE_MS=300 diff --git a/Cargo.toml b/Cargo.toml index 0618597..b514aee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,12 @@ # file: Cargo.toml -# version: 71 +# version: 72 [workspace] resolver = "3" members = ["crates/ksp-app-config-desk", "crates/ksp-config-lib", "crates/ksp-core-lib", "crates/ksp-logging-lib"] [workspace.package] -version = "0.1.4-pre.7" +version = "0.1.4-pre.8" edition = "2024" license = "MIT" repository = "https://git.sasedev.com/Sasedev/khadhroony-solana-project" @@ -22,7 +22,7 @@ solana-pubkey = { version = "^4.3", default-features = false } tracing = { version = "^0.1", default-features = false, features = ["std"] } tracing-subscriber = { version = "^0.3", default-features = false, features = ["fmt", "json", "ansi"] } tracing-appender = { version = "^0.2", default-features = false } -tokio = { version = "^1.53", default-features = false, features = ["rt", "rt-multi-thread", "macros"] } +tokio = { version = "^1.53", default-features = false, features = ["rt", "rt-multi-thread", "macros", "time"] } tauri = { version = "^2.11" } tauri-build = { version = "^2.6" } tauri-plugin-tracing = { version = "^0.3" } diff --git a/crates/ksp-app-config-desk/Cargo.toml b/crates/ksp-app-config-desk/Cargo.toml index fab6bda..9a1df10 100644 --- a/crates/ksp-app-config-desk/Cargo.toml +++ b/crates/ksp-app-config-desk/Cargo.toml @@ -1,5 +1,5 @@ # file: crates/ksp-app-config-desk/Cargo.toml -# version: 3 +# version: 4 [package] name = "ksp-app-config-desk" @@ -29,6 +29,7 @@ ksp-logging-lib = { path = "../ksp-logging-lib" } serde.workspace = true tauri.workspace = true tauri-plugin-tracing.workspace = true +tokio.workspace = true ts-rs.workspace = true [lints] diff --git a/crates/ksp-app-config-desk/README.md b/crates/ksp-app-config-desk/README.md index 2f74bda..48d94b9 100644 --- a/crates/ksp-app-config-desk/README.md +++ b/crates/ksp-app-config-desk/README.md @@ -1,5 +1,5 @@ - + # `ksp-app-config-desk` @@ -21,7 +21,7 @@ Le gabarit desktop actif fournit maintenant : - le verrou single-instance ; - l'assemblage Tauri centralisé dans `src/tauri.rs` ; -- les fenêtres `splash` et `main` ; +- les fenêtres `splash` et `main`, orchestrées par `tw_splash.rs` et `tw_main.rs` ; - le frontend Vanilla TypeScript + Vite sous `frontend/` ; - SCSS, Bootstrap et Font Awesome ; - SimpleBar + `resize-observer-polyfill` pour le scrolling du shell ; @@ -29,7 +29,8 @@ Le gabarit desktop actif fournit maintenant : - les ports dédiés `1430` pour Vite HTTP et `1431` pour le WebSocket de développement ; - la destination frontend externe commune à Tauri et Vite; - le bootstrap Config/Logging réel, un `AppState` durable et le premier contrat Tauri/TS-RS `get_app_snapshot`; -- le bridge de logging frontend KSP `frontend_log.ts`, routé par `emit_frontend_log` vers des targets statiques whitelistés de `ksp-logging-lib`. +- le bridge de logging frontend KSP `frontend_log.ts`, routé par `emit_frontend_log` vers des targets statiques whitelistés de `ksp-logging-lib` ; +- le lifecycle configurable `splash -> main` avec navigation monofenêtre et instrumentation `debug`/`trace` des interactions frontend. ## Layout frontend @@ -46,6 +47,7 @@ frontend/ │ └── splash.scss ├── ts/ │ ├── frontend_log.ts +│ ├── invoke.ts │ ├── main.ts │ └── splash.ts ├── main.html @@ -110,6 +112,23 @@ Si le document Logging, sa résolution environnementale ou l'initialisation du r Le `LoggingGuard` est conservé dans `AppState` pour préparer le hot reload ultérieur. +## Lifecycle des fenêtres + +`tw_splash.rs` valide l'origine de `splash_frontend_ready`, ignore les readiness dupliquées et orchestre le passage à `main`. Les timings sont résolus par `ksp-config-lib` depuis : + +```text +KSP_DESK_SPLASH_MINIMUM_MS=1200 +KSP_DESK_SPLASH_FADE_MS=300 +``` + +Après la durée minimale, le splash reçoit son fade-out, `tw_main.rs` affiche/focalise `main`, puis le splash est détruit. Une valeur splash invalide ne bloque pas le manager : des timings de fallback sûrs restent en mémoire afin que la future surface `.env` puisse permettre la réparation. + +Le shell principal expose les cinq routes de référence `Vue d'ensemble`, `Documents`, `Profils`, `Environnement / .env` et `Logging`. Les routes non encore fonctionnelles affichent un placeholder sans réimplémenter les services prévus par les prereleases suivantes. + +## Traçabilité frontend + +Les actions utilisateur significatives et changements d'état sont journalisés en `debug`; les opérations plus fines (rendu/remplacement DOM, étapes IPC, animations et événements fréquents) en `trace`. Le wrapper `invoke.ts` trace début/fin des commandes sans journaliser leurs arguments, afin de ne pas créer ultérieurement de fuite de valeurs sensibles. + ## Police du splash -Le splash utilise `DOS_Amazigh.ttf` (`font-family: Dos Amazigh`) pour son titre, via le `@font-face` déclaré dans `frontend/sass/splash.scss`. Le répertoire `frontend/fonts/` documente la provenance et l'empreinte de l'asset de référence. Le lifecycle final du splash reste traité dans la tranche dédiée `pre.008`. +Le splash utilise `DOS_Amazigh.ttf` (`font-family: Dos Amazigh`) pour son titre, via le `@font-face` déclaré dans `frontend/sass/splash.scss`. Le répertoire `frontend/fonts/` documente la provenance et l'empreinte de l'asset de référence. Le lifecycle du splash est désormais actif et utilise cette police pendant la transition vers la fenêtre principale. diff --git a/crates/ksp-app-config-desk/TODO.md b/crates/ksp-app-config-desk/TODO.md index dbd46f1..4cbd31d 100644 --- a/crates/ksp-app-config-desk/TODO.md +++ b/crates/ksp-app-config-desk/TODO.md @@ -1,13 +1,12 @@ - + # TODO `ksp-app-config-desk` -Le gabarit frontend, le bootstrap Config/Logging, `AppState`, le `LoggingGuard` durable, les premiers DTO TS-RS et le bridge frontend logging KSP sont maintenant présents. +Le gabarit frontend, le bootstrap Config/Logging, `AppState`, le `LoggingGuard` durable, les premiers DTO TS-RS, le bridge frontend logging KSP et le lifecycle `splash -> main` sont maintenant présents. Les prochaines tranches doivent encore : -- finaliser le lifecycle splash configurable sans temporisation environnementale codée en dur ; - développer les panneaux Documents, Profils, Environnement/`.env`, Secrets et Logging ; - introduire DataTables au premier tableau qui exige tri, filtrage, sélection ou checkbox ; - démontrer le hot reload Logging et le panneau de test de routage. diff --git a/crates/ksp-app-config-desk/USAGE.md b/crates/ksp-app-config-desk/USAGE.md index 7f60a01..a788a87 100644 --- a/crates/ksp-app-config-desk/USAGE.md +++ b/crates/ksp-app-config-desk/USAGE.md @@ -1,5 +1,5 @@ - + # Utilisation de `ksp-app-config-desk` @@ -7,7 +7,7 @@ Le gabarit Rust/Tauri et le frontend Vite/TypeScript/SCSS sont présents. Le backend initialise désormais Config, le runtime Logging et `AppState`; les panneaux métier Config restent volontairement absents à ce stade. -La fenêtre `splash` est la fenêtre visible au démarrage. La fenêtre `main` est déjà construite et bundlée, mais son lifecycle d'affichage est finalisé dans la tranche splash/shell dédiée afin de ne pas introduire une temporisation codée en dur. +La fenêtre `splash` est visible au démarrage. Après readiness du frontend et temporisation résolue par Config, l'application effectue le fade-out, affiche/focalise `main` puis détruit `splash`. La fenêtre principale expose immédiatement la navigation monofenêtre de référence. ## Première installation des dépendances frontend @@ -106,6 +106,33 @@ Si cette configuration ne peut pas être utilisée, l'application doit rester d La commande Tauri `get_app_snapshot` expose un état sûr du bootstrap. Ses types TypeScript sont générés par `cargo test -p ksp-app-config-desk` sous `frontend/ts/bindings/`. +## Lifecycle et timings du splash + +Les variables communes sont : + +```text +KSP_DESK_SPLASH_MINIMUM_MS=1200 +KSP_DESK_SPLASH_FADE_MS=300 +``` + +La priorité est celle de Config : process > `.env` > fallback. Les valeurs sont lues uniquement via `ksp-config-lib`. Une valeur non numérique ou hors borne déclenche un fallback runtime en mémoire plutôt qu'un refus de démarrer Config Desk. + +Le frontend `splash.ts` installe son listener puis appelle `splash_frontend_ready`. Le backend vérifie que l'appel provient réellement de la WebView `splash`; une readiness dupliquée (par exemple après reload Vite) est ignorée. + +## Navigation principale + +La barre principale contient : + +```text +Vue d'ensemble +Documents +Profils +Environnement / .env +Logging +``` + +Seule la vue d'ensemble consomme déjà `get_app_snapshot`; les autres routes restent des placeholders jusqu'à leurs tranches fonctionnelles. Chaque clic de navigation est tracé en `debug` et chaque remplacement/rendu de section en `trace`. Les appels Tauri partagés utilisent `frontend/ts/invoke.ts`, qui journalise le début et la fin d'une commande sans journaliser ses arguments. + ## Asset font du splash -La police bot3 de référence est `DOS_Amazigh.ttf`. Vérifier l'asset local contre l'empreinte documentée dans `frontend/fonts/README.md` ; `frontend/sass/splash.scss` l'applique déjà au titre du splash. La tranche `pre.008` reste consacrée au lifecycle et à la finition visuelle. +La police bot3 de référence est `DOS_Amazigh.ttf`. Vérifier l'asset local contre l'empreinte documentée dans `frontend/fonts/README.md` ; `frontend/sass/splash.scss` l'applique au titre du splash. diff --git a/crates/ksp-app-config-desk/frontend/main.html b/crates/ksp-app-config-desk/frontend/main.html index a2ab63d..7442523 100644 --- a/crates/ksp-app-config-desk/frontend/main.html +++ b/crates/ksp-app-config-desk/frontend/main.html @@ -1,5 +1,5 @@ - + @@ -13,12 +13,19 @@