@cadriciel/core
v0.2.0
Published
Briques transverses des applications Cadriciel (CEREMA) : accès aux données et aux API, identité, temps réel, fichiers, thème et contrat de layout.
Readme
@cadriciel/core
Briques transverses des applications Cadriciel (CEREMA) : accès aux données et aux API, identité, temps réel, fichiers, thème et contrat de layout.
Publiée sur npmjs sous @cadriciel/core. Consommée par le template cadriciel-frontend,
donc par tous les projets créés depuis le studio, et par le shell frontless.
npm install @cadriciel/coreCe que le paquet fournit
| Domaine | Symboles |
|---|---|
| Configuration | ApplicationConfigService, CADRICIEL_CORE_CONFIG, CADRICIEL_AUTH_ENV, CadricielAuthEnvironment |
| Données | QueryService, AggregateBuilder, CadricielService |
| Identité | UserService, User, Claims, MyStorageService |
| Temps réel | RealtimeService, ChannelController, WsService |
| Fichiers | MyFilesService |
| Thème | ThemeService, ThemeMode, THEME_DARK_CLASS |
| Layout (contrat) | LayoutConfig, LayoutCapabilities, ToolbarConfig, ToolbarItem, MenuMode, AppMenuItem, MenuService |
Thème clair / sombre
ThemeService est la source de vérité du thème. Il est indépendant du layout : une
application sans layout peut l'utiliser, et changer de layout ne change rien au thème.
const theme = inject(ThemeService);
theme.isDark(); // signal — thème effectivement appliqué
theme.mode(); // 'light' | 'dark' | 'system'
theme.toggle(); // bascule et persiste le choix
theme.set('dark');
theme.useSystem(); // repasse au suivi du système, oublie le choix
theme.initialize('dark') // défaut projet ; sans effet si l'utilisateur a déjà choisiLe service pose la classe theme-dark sur <html> — la convention de
@cadriciel/ui, dont les composants ne
lisent que les tokens --cad-*. Sans choix persisté, la préférence système s'applique et
reste suivie à chaud. La bascule emprunte l'API View Transitions quand elle est disponible,
sauf si l'utilisateur a demandé moins d'animations.
Contrat de layout
LayoutConfig décrit ce que l'application demande ; LayoutCapabilities ce qu'un layout
sait rendre. Tous les champs de configuration sont optionnels et un layout peut n'en
honorer aucun — l'application interroge les capacités plutôt que de supposer.
L'état interne d'un layout (menu replié, sous-menu ouvert, transition en cours) ne fait pas partie du contrat : il appartient au layout qui l'implémente et disparaît avec lui. C'est ce qui permet d'en permuter un sans toucher au reste.
AppMenuItem est aligné sur CadMenuItem de @cadriciel/ui : un menu se passe
directement à <cad-menu> sans adaptation. icon est un nom d'icône (user,
settings), jamais une classe CSS.
Développement
bun install
bun run build # ng-packagr → dist/La CI publie sur npmjs sur un tag v*, ou sur main quand package.json change.
Journal des versions
0.2.0 — changements incompatibles
Version de la sortie de PrimeNG. Trois retraits, aucun consommateur connu n'était concerné.
LayoutServiceretiré. C'était la machine à états d'un layout précis (slim-plus,overlaySubmenuActive,showConfigSidebar()), pas un service transverse. La figer ici revenait à faire dicter par le core les rouages internes d'un layout, ce qui interdit d'en permuter un. Cet état appartient désormais au layout qui l'implémente. Le seul comportement réellement partagé qu'il portait — la bascule clair/sombre — est repris parThemeService, en mieux.LayoutStateretiré, pour la même raison.LayoutConfignettoyé.preset,primary,surfaceetlayoutThemeétaient des notions PrimeNG. Remplacés pardefaultThemeetaccent. Ajout des quatre drapeauxshowBreadcrumb/showFooter/showSearch/showSettingset detoolbarConfig, qui existaient dans le template mais pas ici — le core était en retard sur son propre contrat.AppMenuItemenrichi :command,disabled,visible,queryParams,id,title,badgenumérique,routerLinkaccepte une chaîne. Aligné surCadMenuItem.MenuService.itemsexpose le menu en signal.getMenu()reste disponible mais rend un instantané : un layout qui l'appelait une fois à l'initialisation ne voyait jamais les mises à jour.- Ajout de
LayoutCapabilities,EMPTY_LAYOUT_CAPABILITIES,ThemeService,ThemeMode,THEME_DARK_CLASS.
