Frontend - skins, Vite, SCSS, TypeScript
Skins
5 skins : default, cave, forets, piscines, commune. default sert de base/fallback. Le skin actif est lu sur le noeud Domain courant via DomainService.GetSkinName() (propriete skinName du document type domain), puis transmis aux vues et utilise pour choisir les bundles CSS/JS et les vues par skin (ex. Views/Components/Footer/{skin}/).
Chaque skin a son dossier d'assets : src/Nanoxi/Design/{skin}/ (css/, fonts/, images/).
Pipeline Vite
Configuration : vite.config.ts (racine).
- Un objet
skinsdeclare les 5 skins, chacun avec d'eventuelsextraCss/extraJs(ex.communeajoutebundle-projects). - ~26 bundles CSS et ~19 bundles JS sont declares. Pour chaque skin, Vite genere :
- CSS :
src/Nanoxi/Design/{skin}/css/bundles/{bundle}.scss->src/Umbraco/wwwroot/css/{skin}/{bundle}.css - JS :
src/Nanoxi/TypeScript/bundles/{bundle}.ts->src/Umbraco/wwwroot/js/{skin}/{bundle}.js
- CSS :
- Plugins maison :
copyDesignAssetsPlugin: copie fonts/images de chaque skin verswwwroot/fonts/{skin}etwwwroot/images/{skin}.ensureSkinCssBundlesPlugin: pour un skin sans bundle propre, recopie celui dedefault(fallback).
emptyOutDir: false(ne vide pas wwwroot), Terser sans mangling (noms de classes/fonctions preserves).
Commandes : npm run dev (vite build --watch --mode development), npm run build (prod), npm run clean:assets.
SCSS
Arborescence par skin sous src/Nanoxi/Design/{skin}/css/ :
base/:_bootstrap-base.scss(import Bootstrap 5),_variables.scss,_variables-customer.scss(overrides par skin),_mixins.scss,_paths.scss(chemins images/fonts par skin),foundation/,modules/.bootstrap/_variables-customer.scss: overrides des tokens Bootstrap par skin.bundles/: un point d'entree par bundle (@use '../component/.../...').component/: un dossier par composant/widget, structure en trois fichiers :_<nom>-roots.scss: definitions des CSS custom properties (tokens)_<nom>-foundation.scss: layout, tailles, espacements, application des tokens_<nom>-customer.scss: overrides specifiques au skin (souvent vide)
Bootstrap 5.3.2 est tire de node_modules ; les tokens sont surcharges par skin via _variables-customer.scss.
TypeScript
Sources : src/Nanoxi/TypeScript/.
bundles/: ~19 points d'entree (bundle-widget<nom>.ts,bundle-default-head.ts,bundle-menu.ts, ...). Chaque bundle importe ses classes et les expose surwindow.ts/component/: une classe par composant. Pattern container + item :Widget<Nom>.ts: container, garde un tableau d'items, exposeaddNewInstance(contentKey).Widget<Nom>Item.ts: logique par instance (souvent jQuery sur le DOM).
ts/component/base/:Cms.ts,PageUtil.ts,WidgetFormSubmit.ts(reutilises).tsconfig.json: rootDirts, target ES6, module CommonJS, pas de source maps.
La compilation est faite par Vite (et la cible Cake Compile-TypeScript via npx tsc pour la sortie dist/ consommee par StaticFiles-Copy-Javascript).
Important
- Ne jamais editer
src/Umbraco/wwwroot/css|js(genere). Editer les sourcesDesign/etTypeScript/. - Le watcher (
dotnet cake --target="Watch") recopie les SCSS/CSHTML/JS modifies vers l'hote.

