@clauzier/astro-kit (0.9.1)
Installation
@clauzier:registry=npm install @clauzier/astro-kit@0.9.1"@clauzier/astro-kit": "0.9.1"About this package
@clauzier/astro-kit
Couche front partagée de la plateforme multi-clients : client typé vers cms-core, couche contenu, composants Astro, styles socle et helpers SEO.
Modules
| Entrypoint | Contenu |
|---|---|
client |
createCmsClient : client typé minimal vers l'API cms-core |
entities |
createContentSource : accesseurs typés, normalisation, libellés |
blocks |
Registre de renderers + rendu HTML sûr (escapeHtml, sanitizeHtml, safeUrl) |
seo |
Balises meta/OG, URLs absolues |
components/* |
Composants Astro : Header, Footer, PlayerCard, StaffCard, … |
styles/* |
base.css : structure et composants, tout en tokens surchargeables |
Couche contenu
Une coquille cliente ne fournit que sa configuration et ses fixtures ; lecture API, normalisation snake_case → camelCase, tris et garde anti-repli viennent du paquet.
import { createContentSource } from '@clauzier/astro-kit/entities';
const source = createContentSource({
baseUrl: import.meta.env.CMS_BASE_URL,
fixtures: { teams, players, matches },
});
export const { listTeams, listPalmares, listMenu, schemaLabels } = source;
Sans baseUrl, les fixtures sont servies (CI, previews). Avec une API
configurée, une erreur de lecture fait échouer le build : un repli silencieux
publierait un site plausible mais faux.
Les libellés humains (rôles, plateformes…) viennent de /api/content-schemas
via schemaLabels() — ils ne sont jamais recopiés côté front.
Composants et styles
---
import '@clauzier/astro-kit/styles/base.css';
import Header from '@clauzier/astro-kit/components/Header.astro';
---
<Header
brand="Evinium"
brandSplit={3}
menu={menu}
cta={{ label: 'Adhérer', href: '/association/a-propos/' }}
current={Astro.url.pathname}
/>
Le Header ne charge aucun script : le burger mobile et les sous-menus sont
des <details>/<summary>, dont l'état d'ouverture est exposé nativement aux
technologies d'assistance. Au-dessus de 900 px, [open] est neutralisé par la
feuille socle et les sous-menus reviennent au survol. L'entrée parente d'un
sous-menu n'est plus un lien — ajouter un « Tout voir » en tête de ses enfants
si elle porte une page propre.
base.css n'écrit aucune couleur en dur : tout passe par des tokens
(--bg, --panel, --accent, --muted, --font-display…) que la coquille
définit dans sa propre feuille de palette.
Utilisation dans une coquille cliente
import { createCmsClient } from '@clauzier/astro-kit/client';
import { createBlockRegistry } from '@clauzier/astro-kit/blocks';
const client = createCmsClient({ baseUrl: import.meta.env.CMS_API_URL });
const registry = createBlockRegistry();
// Extension cliente : un carousel écrit pour un client devient réutilisable partout
registry.register(carouselRenderer);
Développement
bun install
bun run lint && bun run typecheck && bun run test
Dependencies
Dependencies
| ID | Version |
|---|---|
| sanitize-html | ^2.17.7 |
Development dependencies
| ID | Version |
|---|---|
| @eslint/js | ^10.0.0 |
| @types/node | ^26.0.0 |
| @types/sanitize-html | ^2.16.1 |
| astro | ^7.2.4 |
| eslint | ^10.0.0 |
| eslint-plugin-astro | ^1.3.0 |
| prettier | ^3.9.0 |
| prettier-plugin-astro | ^0.14.0 |
| typescript | ~5.9.0 |
| typescript-eslint | ^8.40.0 |
| vitest | ^4.0.0 |
Peer dependencies
| ID | Version |
|---|---|
| astro | ^7.0.0 |