@clauzier/astro-kit (0.9.0)

Published 2026-08-27 11:23:53 +00:00 by 0x346e3730

Installation

@clauzier:registry=
npm install @clauzier/astro-kit@0.9.0
"@clauzier/astro-kit": "0.9.0"

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
Details
npm
2026-08-27 11:23:53 +00:00
6
UNLICENSED
36 KiB
Assets (1)
Versions (30) View all
0.26.0 2026-09-09
0.25.0 2026-09-07
0.24.0 2026-09-07
0.23.0 2026-09-05
0.22.0 2026-09-04