Aller au contenu

Personnalisation : référence complète

En bref

Cette page recense tous les paramètres d'affichage de l'application web SenSaaS, avec leur identifiant interne, leur lieu de stockage, leur valeur par défaut et le fichier source qui fait foi. Elle s'adresse aux administrateurs, aux revendeurs et aux intégrateurs. La vue utilisateur, sans identifiants techniques, est sur Personnaliser l'interface.

Comment lire les tableaux

Stockage. Aujourd'hui, la totalité des préférences d'affichage vit dans le stockage local du navigateur (localStorage), sous la clé indiquée. Il n'existe aucun point de sauvegarde côté serveur : le client d'API de l'application ne déclare aucune ressource de préférences ni de dispositions, et la seule famille d'API liée à l'affichage est une proposition non livrée (voir « Ce qui est en préparation »).

Conséquences pratiques :

  • un réglage ne suit pas l'utilisateur d'un poste à l'autre, ni d'un navigateur à l'autre ;
  • une navigation privée ou un vidage du stockage du site remet tout par défaut ;
  • rien de tout cela n'est sauvegardé par le connecteur ni par le portail.

Portée. Trois portées seulement existent : cet appareil (le cas général), cet appareil + ce compte (les dispositions de listes, rangées sous l'adresse e-mail de connexion), et cet appareil + cet écran (les surcharges par écran). Aucune préférence n'a pour portée un serveur, un dossier Sage ou une société.

Trois canaux de propagation. Un réglage change dans le Redux store du shell, puis atteint les autres modules de l'application par l'un de trois canaux : un attribut sur <body> (apparence des listes, mode compact des fiches, variante d'indicateur de chargement), une variable CSS sur :root (couleurs, police, fond de navigation), ou le stockage local partagé (dispositions, préférences de modules). Le détour par le DOM est nécessaire parce que la bibliothèque de composants n'est pas partagée en instance unique entre les modules : ils ne peuvent pas lire le store du shell.

Dans les colonnes « Source », les chemins sont relatifs à C:\Projets\SenSaaS\www\SenSaaS-Modulaire\.

1. Thème, couleurs, typographie

Clé / identifiant Stockage Défaut Écran ou module porteur Source
theme Navigateur (localStorage) light (valeurs : light, dark, system, sageTheme toléré en lecture) Réglages › Apparence (shell) remotes/shell/src/store/slices/app.slice.ts
isDarkMode Dérivé, non persisté false — calculé depuis theme, ou depuis prefers-color-scheme quand theme = system shell remotes/shell/src/hooks/useThemeEffect.ts
themeCustomization (objet JSON : colors, font, fontSize, logo) Navigateur Voir DEFAULT_THEME_CUSTOMIZATION ci-dessous Réglages › Personnalisation (shell) libraries/hooks/src/themeCustomization.ts
themeCustomization.colors.primary Navigateur #00811f Réglages › Personnalisation idem
themeCustomization.colors.primaryHover Navigateur #007219 Réglages › Personnalisation idem
themeCustomization.colors.secondary Navigateur #4361ee Réglages › Personnalisation idem
themeCustomization.colors.secondaryHover Navigateur #3550cf Réglages › Personnalisation idem
themeCustomization.colors.success Navigateur #00811f Réglages › Personnalisation idem
themeCustomization.colors.danger Navigateur #db004e Réglages › Personnalisation idem
themeCustomization.colors.warning Navigateur #d64309 Réglages › Personnalisation idem
themeCustomization.colors.info Navigateur #0071c3 Réglages › Personnalisation idem
themeCustomization.colors.navBackground Navigateur #000000 — raccourcis : #000000 Noir, #0c1524 Bleu nuit, #00352c Vert Sage, #3b1d2e Prune, #f4f5f6 Clair Réglages › Personnalisation remotes/shell/src/components/settings/sections/PersonalizationSection.tsx
themeCustomization.font Navigateur sage-ui (8 valeurs : sage-ui, sensaas-sans, sensaas-droit, inter, plus-jakarta-sans, ibm-plex-sans, roboto, system) Réglages › Personnalisation libraries/hooks/src/themeCustomization.ts
themeCustomization.fontSize Navigateur small (small = 16 px, medium = 18 px, large = 20 px) — aucun contrôle dans le panneau des réglages Aucun écran aujourd'hui idem
themeCustomization.logo.light / .dark Navigateur (image encodée en data:) null — logos livrés par défaut Réglages › Personnalisation idem ; limite de taille LOGO_MAX_FILE_SIZE_BYTES = 400 Ko dans remotes/shell/src/components/settings/constants.ts
themePresetId Navigateur absent (aucun thème actif) Réglages › Personnalisation libraries/hooks/src/themePreset.ts
themeCustomPresets Navigateur (tableau JSON) [] Réglages › Personnalisation (import de fichier) idem
themeOverrides Navigateur (tableau JSON) [] — clés possibles : les huit accents, navBackground, font, fontSize Renseigné automatiquement dès qu'un réglage est modifié à la main idem
loaderVariant Navigateur comete (valeurs : comete, infini, ring, standalone, star) Réglages › Apparence libraries/ui/src/components/components/loader-appearance.ts

Les quatre thèmes livrés

Identifiant Nom affiché Description affichée
sage-default Sage — rendu actuel Thème par défaut Sage — vert, surfaces neutres
sensaas-v2 SenSaaS V2 Charte SenSaaS V2 — action bleue, marque bleu-vert, encre
sage-corporate Sage Corporate Surfaces neutres froides, aspect professionnel
sage-warm Sage Warm Surfaces chaudes, ambiance accueillante

Source : libraries/hooks/src/themePreset.ts (BUILT_IN_PRESETS). L'ordre du tableau est celui de la liste affichée.

2. Mise en page et navigation

Clé / identifiant Stockage Défaut Écran ou module porteur Source
shell_nav_mode Navigateur sidebar (valeurs : sidebar Vertical, sidebar-icon Icônes, secondnav Horizontal) Réglages › Navigation — proposé seulement au-delà de 900 px de large ; sidebar-icon retombe sur sidebar en dessous remotes/shell/src/components/Layout.tsx
menusUnified Navigateur true (Regroupés) Réglages › Navigation remotes/shell/src/store/slices/app.slice.ts
menuOrder Navigateur (objet JSON) {} Réglages › Navigation › Ordre des menus idem
menuReparent Navigateur (objet JSON) {} idem idem
menuLabels Navigateur (objet JSON) {} idem (crayon « Renommer ») idem
hiddenMenuKeys Navigateur (objet JSON) {} idem (« Masquer ») — masquer n'empêche pas la navigation directe idem
page_favorites Navigateur (tableau JSON : path, label, environment, createdAt) [] Étoile de la barre du haut remotes/shell/src/store/slices/favorites.slice.ts
installed_apps Navigateur [] Magasin d'applications remotes/shell/src/store/slices/installedApps.slice.ts
activeEnvironment Navigateur gestion (valeurs : gestion, compta) Sélecteur Gestion / Comptabilité de la barre du haut remotes/shell/src/store/slices/app.slice.ts
lastPathByEnvironment Navigateur (objet JSON) { gestion: null, compta: null } Automatique idem
shell.settings.uiMode Navigateur panel (valeurs : panel, fullscreen) Réglages › Affichage remotes/shell/src/hooks/useSettingsUiMode.ts

Le regroupement des menus n'est pas codé dans le shell : chaque module déclare routes[].menuGroup dans son public/manifest.json, et le shell en dérive les deux présentations. revealChildrenWhenSplit: true (catalogues, tiers) démasque les sous-catégories en mode « Séparés » seulement. Source : .claude/rules/featr.md § 3.

Champs persistés sans contrôle dans l'interface

Le store du shell persiste huit champs hérités qui n'ont aucun réglage exposé aujourd'hui, mais qui sont réinitialisés avec les autres : menu (vertical), layout (full), rtlClass (ltr), animation (''), navbar (navbar-sticky), semidark (false), compact (false), datatableClientServerMode (false). Source : preferenceDefaults() et PREFERENCE_STORAGE_KEYS dans remotes/shell/src/store/slices/app.slice.ts.

3. Listes dynamiques

Clé / identifiant Stockage Défaut Écran ou module porteur Source
gridDataMode Navigateur auto (valeurs : server, auto, client) Réglages › Tableaux remotes/shell/src/store/slices/app.slice.ts
gridDensity Navigateur normal (valeurs : compact, normal, comfortable) Réglages › Tableaux libraries/ui/src/ag-grid/grid-appearance.ts
gridRowBorders Navigateur true Réglages › Tableaux idem
gridColumnBorders Navigateur true Réglages › Tableaux idem
gridColumnFilters Navigateur true Réglages › Tableaux idem
gridColumnFiltersByScope Navigateur (objet JSON, clé = identifiant de liste) {} Panneau Paramètres d'un écran de liste libraries/document-shared/src/components/RemoteSettingsPanel.tsx
gridCharts Navigateur false Réglages › Tableaux libraries/ui/src/ag-grid/grid-appearance.ts
sensaas.grid.<e-mail>.<identifiant de liste> Navigateur, une clé par liste et par compte absente Automatique, à chaque geste dans une liste libraries/ui/src/ag-grid/grid-state-persistence.ts

La disposition enregistrée d'une liste contient : l'état complet des colonnes (visibilité, ordre, largeur, tri, regroupement), le modèle de filtres s'il n'est pas vide, et la liste des groupes dépliés pour les listes groupées. L'écriture est différée de 300 ms après le dernier geste, et vidée de force quand l'onglet passe en arrière-plan ou se ferme. Une liste revenue à ses valeurs d'origine voit son entrée supprimée plutôt que réécrite.

Les dimensions appliquées par la densité :

Densité Hauteur de ligne Hauteur d'en-tête Échelle de marge horizontale
compact 28 px 36 px 0,65
normal 32 px 40 px 0,80
comfortable 40 px 48 px 1,00

Sans bordures de lignes, le fond des lignes impaires passe en zébrure (--theme-surface-2). Source : libraries/ui/src/ag-grid/grid-appearance.ts.

Attributs posés sur <body> : data-grid-density, data-grid-row-borders, data-grid-column-borders, data-grid-column-filters, data-grid-charts, data-grid-column-filters-overrides.

4. Fiches et saisie de documents

Clé / identifiant Stockage Défaut Écran ou module porteur Source
detailHideEmptyFields Navigateur false (Affichées) Réglages › Apparence libraries/ui/src/components/components/detail-appearance.ts
sensaas:prefs:documentsrecapStyle Navigateur rail (valeurs : rail, flottant) Réglages › Documents libraries/document-shared/src/DocumentEditor/DocumentsSettings.tsx
sensaas:prefs:documentsdensity Navigateur confortable (valeurs : confortable, compacte) Réglages › Documents idem
sensaas:prefs:documentsremiseMode Navigateur demander (valeurs : demander, cascade) Réglages › Documents idem
sensaas:prefs:documentsautoSelectContact Navigateur true Réglages › Documents idem
sensaas:prefs:documentslineColumns:<écran> Navigateur [] (colonnes de base) — <écran> vaut vente, achat, stock ou interne Bouton Colonnes de l'éditeur de document libraries/document-shared/src/DocumentEditor/LinesTable/LinesTable.tsx
sensaas:prefs:documentslineColumnsOrder:<écran> Navigateur [] idem idem
sensaas:prefs:documentsmobileLineView Navigateur auto (valeurs : auto, cartes, liste) — bascule au-delà de 20 lignes en mode auto Bascule Cartes / Liste de l'éditeur mobile libraries/document-shared/src/DocumentEditor/Mobile/EditorMobile.tsx

Le mode « masquer les zones vides » est posé sur <body> (data-detail-hide-empty) et consommé en CSS pur : aucun composant ne lit l'attribut. Une valeur 0 reste affichée — c'est une information métier, pas un vide. Source : libraries/ui/src/theme/detail-empty.css et libraries/ui/src/components/components/detail-appearance.ts, décision ADR-0032.

5. Langue et unités

Clé / identifiant Stockage Défaut Écran ou module porteur Source
i18n_locale Navigateur fr (valeurs : fr, en, es) Réglages › Apparence — et sélecteur de langue de l'écran de connexion remotes/shell/src/i18n/config.ts ; chaque module relit la clé à son démarrage
defaultCurrency Navigateur EUR (code ISO 4217, choix limité aux devises des dossiers accessibles) Réglages › Apparence remotes/shell/src/store/slices/app.slice.ts

La langue est aussi le seul réglage de format : le formatage des nombres, des montants et des dates suit la locale (fr-FR, en-US, es-ES) associée à la langue dans languageList. Il n'y a pas de réglage distinct de format de date ou de séparateur décimal.

6. Réglages contribués par les écrans

Un module ajoute sa propre section au panneau des réglages en déclarant une contribution sur la zone shell:settings:sections dans son public/manifest.json. Le shell affiche l'entrée du rail sans charger le module ; le contenu n'est chargé qu'au clic. Aucune ligne du shell ne nomme le module.

Section key de la contribution Ordre Modules qui la déclarent
Documents documents-settings 70 vente, achat, stock, doc-interne (même composant partagé, même espace de préférences)
Indicateurs kpi-settings 80 kpi
Demo demo-settings 80 demo

Source : remotes/*/public/manifest.json et .claude/rules/featr.md § 1.

Préférences du module Indicateurs

Clé / identifiant Stockage Défaut Écran porteur Source
sensaas:prefs:kpigloballyHidden Navigateur false Réglages › Indicateurs remotes/kpi/src/preferences.ts
sensaas:prefs:kpicardStyle Navigateur soft (Teinte ; autres : banner Bandeau, ghost Filigrane) Réglages › Indicateurs idem
sensaas:prefs:kpicardWidth Navigateur stretch (Étirées ; autre : fixed Fixe) Réglages › Indicateurs idem
sensaas:prefs:kpihiddenByView Navigateur (objet JSON par vue) {} Panneau Paramètres d'un écran de liste libraries/document-shared/src/components/RemoteSettingsPanel.tsx
sensaas:prefs:kpidisabled Navigateur (objet JSON par identifiant d'indicateur) {} Réglages › Indicateurs › Catalogue des indicateurs remotes/kpi/src/settings/KpiCatalog.tsx
kpi.pinned.<vue> Navigateur, une clé par vue absente (disposition livrée) Ligne d'indicateurs d'un écran remotes/kpi/src/kpi-layout-storage.ts
kpi.collapsed.<vue> Navigateur, une clé par vue absente (déplié) idem idem

Ces réglages vivaient dans le store du shell jusqu'à la refonte FEAT-052 ; une reprise automatique des anciennes clés (kpiCardStyle, kpiCardWidth, kpiGloballyHidden, kpiHiddenByView, disabledKpis) est exécutée une seule fois à la première ouverture. Source : remotes/kpi/src/preferences-migration.ts.

Préférence du module Demo

Clé / identifiant Stockage Défaut Écran porteur Source
sensaas:prefs:demoexampleToggle Navigateur false Réglages › Demo remotes/demo/src/settings/DemoSettingsSection.tsx

Cette section est explicitement un tutoriel : son fichier documente, en commentaire, les trois gestes qui permettent à un module d'ajouter sa section (écrire le composant, l'exposer, le déclarer dans le manifeste). Elle n'a aucun effet métier.

Mécanisme commun

Toutes les préférences d'un module passent par usePreference('<module>', '<clé>', <défaut>) et sont écrites dans une seule clé de stockage par module, sensaas:prefs:<module>, au format JSON. C'est le contrat de plateforme N-16 : un module n'ajoute jamais de champ au store du shell. Source : libraries/api/src/slices/preferences.slice.ts et .claude/rules/remote-autonomy.md.

7. Panneau « Paramètres » d'un écran de liste

Ouvert depuis le menu Actions d'une liste, ce panneau porte au plus trois blocs :

Bloc Libellé français Ce qu'il écrit
Affichage Afficher les indicateurs (KPIs) sensaas:prefs:kpihiddenByView[<vue>]
Tableau Afficher les filtres par colonne gridColumnFiltersByScope[<identifiant de liste>]
Section libre variable selon l'écran

Écrans qui le montent aujourd'hui : comptes, journaux, trésorerie, pilotage, et toutes les listes de documents. Source : libraries/document-shared/src/components/RemoteSettingsPanel.tsx, libraries/document-shared/src/components/RemoteActionsMenu.tsx, remotes/{compte,journaux,tresorerie,pilotage}/src/components/*SettingsButton.tsx.

8. Réinitialisation

Le bouton Réinitialiser mes réglages (Réglages › Réinitialiser) enchaîne cinq opérations, dans cet ordre :

  1. resetPreferences() — remet les champs du store du shell à preferenceDefaults() et purge les 25 clés de PREFERENCE_STORAGE_KEYS, plus les trois clés de thème (themeCustomization, themePresetId, themeCustomPresets) ; resynchronise la langue sur fr ;
  2. resetAllPreferences() — purge tous les espaces sensaas:prefs:* des modules ;
  3. clearFavorites() — vide page_favorites ;
  4. resetAiFavorites() — purge les clés de l'assistant et émet sensaas:ai-favorites-reset ;
  5. resetAllColumnLayoutsForCurrentUser() — supprime toutes les clés sensaas.grid.<e-mail>.* du compte connecté ;

puis émet sensaas:reset-all-preferences sur window pour tout module qui gère des caches propres.

Conservés : la session et le jeton, dossiers, activeDossier, exercice, exerciceOverrides, activeEnvironment, lastPathByEnvironment et la route courante. Source : remotes/shell/src/components/settings/SettingsOverlay.tsx et remotes/shell/src/store/slices/app.slice.ts.

Comment le thème est construit

Les couches

L'application pose ses couleurs dans cet ordre, à chaque rendu :

  1. Les jetons de la charte, en CSS statique : libraries/ui/src/theme/sage-tokens.css (jetons Sage) puis theme-tokens.css (jetons --theme-* propres à SenSaaS). C'est le socle : tout composant lit --theme-primary, --theme-surface, --theme-text-primary
  2. La personnalisation de l'utilisateur (applyThemeCustomizationToRoot) : elle écrit en style inline sur :root les huit accents, le fond de navigation et la typographie.
  3. Le thème actif, s'il y en a un (applyThemePresetToRoot) : il écrase ce qu'il définit.
  4. Les réglages explicitement choisis (applyThemeOverridesToRoot) : les couleurs, la police ou le fond de navigation que l'utilisateur a touchés à la main reviennent par-dessus le thème.

Avant chaque application, clearThemePresetFromRoot() nettoie le style inline : sans cela, retirer un thème laisserait ses surfaces en place. Source : remotes/shell/src/hooks/useThemeCustomization.ts.

Ce qu'un thème porte

Un thème est un fichier JSON schemaVersion: '1' avec un bloc meta (id, name, description, author, builtIn), un bloc light obligatoire et un bloc dark facultatif qui surcharge le premier. Les groupes de jetons acceptés : colors (les huit accents plus focus), surfaces (7 jetons), borders (3), inputs (2), text (4), shadows (2), nav (background), font et fontSize. Tout le reste est ignoré à la validation.

Un thème porte donc la charte entière : accents par mode, surfaces, bordures, champs, texte, ombres, fond de navigation, police et taille de base. C'est la décision ADR-0123 — « Un preset de thème porte la charte entière et prime sur les couleurs ajustées ».

Un accent n'est jamais écrit seul : à partir de la couleur de base, une dérivation unique pose aussi -hover, -active, -soft et, pour la couleur primaire, -soft-strong. C'est ce qui garantit qu'un changement de couleur emporte aussi le survol d'une ligne de liste et la couleur de sélection.

Le fond de navigation fonctionne à l'identique : une seule couleur stockée, dix jetons dérivés par calcul de luminance (--theme-nav-bg, -hover, -active, -elevated, -fg, -fg-muted, -fg-subtle, --theme-nav-hover, -active, -border). Le texte bascule en blanc ou en encre selon le contraste réel du fond. Source : libraries/hooks/src/themeCustomization.ts.

Le mode sombre

Le mode sombre n'est pas un thème : c'est une bascule qui pose la classe dark sur <html> et <body>, ce que la feuille de styles exploite, et qui fait résoudre les jetons d'un thème par sa variante dark. En mode system, l'application s'abonne à prefers-color-scheme et bascule quand le système bascule. Source : remotes/shell/src/hooks/useThemeEffect.ts.

Ce que le thème n'atteint pas

D'après sensaas-remote-control/docs/design-system-unification.md et l'ADR-0123 :

  • environ 614 classes de couleur écrites en dur, réparties dans 18 paquets, ignorent les jetons par construction et ne suivent aucun changement de thème ;
  • les teintes des cartes d'indicateurs ne suivent pas non plus, volontairement (ADR-0024 : la palette d'indicateurs est calibrée sur le contraste, pas sur la marque) ;
  • le corps de texte à 17 px, l'interligne 1,65 et les chiffres tabulaires demandés par la charte ne sont pas portés : la taille de base est un choix à trois crans (16 / 18 / 20) ;
  • le dégradé de marque, le filet de la barre haute et le mode daltonisme de la charte n'ont aucun mécanisme aujourd'hui ;
  • la charte ne définit ni couleur de danger ni couleur d'avertissement : le thème sensaas-v2 conserve les valeurs Sage pour ces deux rôles.

Ce qu'un revendeur peut changer aujourd'hui

Élément Possible ? Comment, et avec quelle limite
Couleurs de l'interface Oui, poste par poste Réglages › Personnalisation, ou un thème JSON importé. Pas de diffusion centralisée : chaque utilisateur doit importer le fichier sur chaque navigateur
Logo de la barre du haut Oui, poste par poste Import d'un logo clair et d'un logo sombre, 400 Ko maximum, png/jpg/svg/webp/gif. Stocké dans le navigateur de l'utilisateur. Un thème JSON ne porte pas de logo : les deux mécanismes sont distincts
Police Oui Choix parmi huit polices livrées. Aucune police tierce ne peut être ajoutée sans modification du produit
Charte complète Oui, par fichier Un thème JSON exporté depuis un poste de référence puis importé sur les autres. C'est le chemin prévu : « une charte complète s'installe par un fichier JSON, sans une ligne de code » (ADR-0123)
Nom du produit, textes de marque Non Aucun paramètre d'affichage ne porte de nom de produit ni de texte de marque. Les libellés viennent des fichiers de traduction livrés
Adresse et favicon Non documenté ici Relève du déploiement, pas des paramètres d'affichage
Réglages imposés à un utilisateur Non Aucun mécanisme ne permet aujourd'hui de forcer ou de verrouiller une préférence : chaque utilisateur reste maître de la sienne
Réglages communs à une équipe Non Rien n'est stocké côté serveur ; un réglage ne quitte pas le navigateur où il a été posé

Ce qui est en préparation

Évolution non livrée

Ce qui suit décrit des travaux annoncés par les documents internes, à la date du 2026-09-11. Rien de tout cela n'est disponible aujourd'hui, et les éléments marqués « proposition » n'ont pas d'endpoint existant.

Politique d'affichage pilotée par le connecteur

sensaas-remote-control/docs/politique-affichage-connecteur-v2.md est une proposition adressée à l'équipe du connecteur, explicitement au statut « à discuter, aucun endpoint n'existe aujourd'hui ». Elle décrit une famille affichage de l'API v2 où :

  • le front publie un catalogue de toute sa surface d'interface ;
  • des administrateurs définissent des préréglages de visibilité et les affectent à des utilisateurs, par adresse e-mail ;
  • chaque utilisateur reçoit à la connexion sa politique effective compilée.

Les clés seraient de la forme <type>:<identifiant>, avec dix types en v1 : remote, route, menu, feature, slot, kpi, app, env, vue, section. Trois types sont réservés et refusés en v1 : pref, colonne, action — autrement dit, piloter une préférence d'affichage à distance n'est pas dans le périmètre de la première version.

Deux principes du document méritent d'être retenus par un intégrateur :

  • masquer n'est pas interdire : la politique agit sur l'interface, pas sur la sécurité ; un utilisateur outillé appelle toujours les mêmes endpoints ;
  • la politique borne les choix de l'utilisateur, elle ne les réécrit jamais : quand une règle est levée, l'utilisateur retrouve exactement ses réglages — vue mémorisée, applications installées, entrées de menu masquées à la main.

Côté application, l'ossature existe déjà : le shell lit une politique d'affichage, la met en cache une heure et ne rejette jamais (absente, invalide ou injoignable = tout visible). Les sections natives du panneau des réglages portent d'ailleurs chacune leur clé de politique (section:shell/settings/display, …/appearance, …/navigation, …/personalization, …/tables, …/help, …/reset), ce qui permettrait de masquer une section de réglages entière. Source : remotes/shell/src/services/displayPolicy.ts, remotes/shell/src/store/slices/displayPolicy.slice.ts, remotes/shell/src/components/settings/sections.ts.

Rendre un écran pilotable

sensaas-remote-control/docs/remote-pilotable-affichage.md est la méthode à l'usage de qui développe un module, y compris un prestataire externe. Sa règle : tout élément qu'un client pourrait vouloir masquer doit être déclaré dans le manifeste du module ; ce qui n'y est pas déclaré n'existe pas pour l'administrateur. Sont déjà pilotables sans rien faire : le module entier, chaque page, chaque contribution, chaque indicateur, chaque application du magasin. Doivent être déclarés en plus : les vues d'un écran (vues[], pour un sélecteur Cards / Catalogue / Tableau) et les sections internes d'un écran (sections[]).

Une garde est prévue : si une politique masque toutes les vues d'un écran, elles sont toutes rendues — un écran ne devient jamais vide.

Charte graphique V2

Le thème sensaas-v2 est livré et sélectionnable à côté du rendu Sage, qui reste le défaut — c'est un arbitrage explicite, daté du 10/09/2026 : « la bascule générale se décide sur pièce, après essai ». Le tableau « Ce que le front en applique » de sensaas-remote-control/docs/charte-graphique-sensaas-v2.md recense ce qui reste à faire ; il est repris plus haut sous « Ce que le thème n'atteint pas ».

Le défaut d'un composant qui suit une préférence

L'ADR-0124 pose un mécanisme générique et déjà appliqué une fois : un composant du design system rendu sans propriété explicite prend la valeur choisie par l'utilisateur, lue sur un attribut de <body>. Le premier cas est l'indicateur de chargement. L'ADR note que « le mécanisme est générique : un autre composant peut suivre la même voie » — sans nommer lequel, ni donner de calendrier.

Limites de l'analyse

Cette page a été établie par lecture des sources listées dans le front-matter. N'ont pas été vérifiés :

  1. Le rendu réel à l'écran. Aucune capture n'a été prise et l'application n'a pas été exécutée : les libellés cités viennent des fichiers de traduction et des composants, pas d'une observation.
  2. La taille du texte. Le réglage existe dans le modèle de thème, ses libellés existent en français, mais aucun composant du panneau ne l'expose. Retiré ou pas encore branché : indéterminé.
  3. Les huit champs hérités du store (menu, layout, rtlClass, navbar, semidark, compact, animation, datatableClientServerMode) : persistés et réinitialisés, mais aucun réglage ne les écrit. Leur lecture éventuelle par un composant n'a pas été tracée exhaustivement.
  4. Le README du shell est en retard sur le code sur un point : il annonce des « préférences doc/article » dans le store du shell (syncMode, groupArticlesDoc, autoSelectContactDoc, defaultDocVenteType, redirectToEditOnCreate) qui n'existent plus dans app.slice.ts. Les préférences de documents relevées ici sont celles de l'espace sensaas:prefs:documents.
  5. Le contenu exact des sections de réglages des modules non lus : seuls documents, kpi et demo déclarent une section, et les trois ont été lus. Aucun autre module n'a été parcouru ligne à ligne à la recherche d'un réglage caché ailleurs que dans une section déclarée.
  6. Le portail et le connecteur n'ont pas été consultés : si un réglage d'apparence y existe, il n'apparaît pas ici.
  7. Le nombre de 614 classes de couleur en dur et le chiffre de 18 paquets sont repris des documents internes ; ils n'ont pas été recomptés.
  8. Le format des dates et des nombres : aucun réglage dédié n'a été trouvé, mais l'absence n'a été vérifiée que dans le panneau des réglages et le store du shell.

Voir aussi