Le système de design open source destiné aux services numériques publics du Tchad.
Important
TDS est actuellement une initiative indépendante et communautaire. Le projet vise une adoption par les institutions publiques tchadiennes, mais ne se présente pas encore comme une norme officiellement homologuée par l'État.
Les services numériques gouvernementaux du Tchad manquent d'une identité visuelle cohérente. Chaque ministère, chaque plateforme citoyenne développe ses interfaces de manière indépendante — résultat : incohérence, inaccessibilité et perte de confiance des citoyens.
TDS propose une réponse systémique : une bibliothèque de tokens et de composants partagés, accessibles par défaut, conformes WCAG 2.1 AA, et prêts pour le français comme pour l'arabe.
Inspiré de GOV.UK Design System, DSFR et USWDS.
| Système | Variables CSS | TypeScript | JSON |
|---|---|---|---|
| Couleurs (bleu, jaune, rouge, vert, neutrals, sémantiques) | ✅ | ✅ | ✅ |
| Typographie (Source Sans 3, Noto Naskh Arabic, JetBrains Mono) | ✅ | ✅ | ✅ |
| Espacement (grille 4px) | ✅ | ✅ | ✅ |
| Arrondis, Ombres, Motion, Z-index | ✅ | ✅ | ✅ |
| Composant | Classes CSS | Types TS | Accessibilité |
|---|---|---|---|
| Button | tds-button |
ButtonVariant, ButtonSize |
WCAG AA ✅ |
| Input / Form | tds-input, tds-field |
InputVariant, InputSize |
WCAG AA ✅ |
| Alert | tds-alert |
AlertVariant |
role=alert ✅ |
| Badge | tds-badge |
BadgeVariant |
WCAG AA ✅ |
| Card | tds-card |
CardVariant |
✅ |
| Link | tds-link |
LinkVariant |
Focus visible ✅ |
| Table | tds-table |
— | scope, caption ✅ |
| Header | tds-header |
HeaderVariant |
Lien d'évitement recommandé ✅ |
| Navigation | tds-nav |
— | aria-current="page" ✅ |
| Breadcrumb | tds-breadcrumb |
— | aria-current="page" ✅ |
| Pagination | tds-pagination |
— | aria-label, aria-current ✅ |
| Modal | tds-modal |
ModalSize |
Focus trap natif (<dialog>) ✅ |
| Skip Link | tds-skip-link |
— | Premier élément focusable ✅ |
| Footer | tds-footer |
— | Lien déclaration d'accessibilité ✅ |
| Accordion | tds-accordion |
— | <details>/<summary> natif, zéro JS ✅ |
| Tabs | tds-tabs |
— | WAI-ARIA APG (roving tabindex) ✅ |
| Tooltip | tds-tooltip |
— | CSS pur, limitation tactile documentée |
Le namespace npm @tds-tchad et les classes CSS tds-* constituent l'API stable
du projet (le package n'étant pas encore publié, aucune compatibilité
ascendante n'est requise avec l'ancien namespace @dstd).
# pnpm (recommandé)
pnpm add @tds-tchad/core
# npm
npm install @tds-tchad/core
# yarn
yarn add @tds-tchad/coreNode.js 18+ requis. Le package est distribué en ESM ("type": "module").
/* Dans votre feuille de style principale */
@import "@tds-tchad/core/base.css"; /* Reset + styles HTML */
@import "@tds-tchad/core/tokens/color.css";
@import "@tds-tchad/core/tokens/typography.css";
@import "@tds-tchad/core/tokens/spacing.css";
@import "@tds-tchad/core/tokens/radius.css";
@import "@tds-tchad/core/tokens/shadow.css";
@import "@tds-tchad/core/tokens/motion.css";
@import "@tds-tchad/core/tokens/z-index.css";
/* Composants selon vos besoins */
@import "@tds-tchad/core/components/button/button.css";
@import "@tds-tchad/core/components/input/input.css";
@import "@tds-tchad/core/components/alert/alert.css";
@import "@tds-tchad/core/components/badge/badge.css";
@import "@tds-tchad/core/components/card/card.css";
@import "@tds-tchad/core/components/link/link.css";
@import "@tds-tchad/core/components/table/table.css";
@import "@tds-tchad/core/components/header/header.css";
@import "@tds-tchad/core/components/nav/nav.css";
@import "@tds-tchad/core/components/breadcrumb/breadcrumb.css";
@import "@tds-tchad/core/components/pagination/pagination.css";
@import "@tds-tchad/core/components/modal/modal.css";
@import "@tds-tchad/core/components/skip-link/skip-link.css";
@import "@tds-tchad/core/components/footer/footer.css";
@import "@tds-tchad/core/components/accordion/accordion.css";
@import "@tds-tchad/core/components/tabs/tabs.css";
@import "@tds-tchad/core/components/tooltip/tooltip.css";<!-- Bouton primary -->
<button type="submit" class="tds-button tds-button--primary tds-button--md">
Valider la demande
</button>
<!-- Champ de formulaire -->
<div class="tds-field">
<label class="tds-field__label" for="nom">Nom complet</label>
<input id="nom" type="text" class="tds-input tds-input--md" required>
</div>
<!-- Alerte succès -->
<div class="tds-alert tds-alert--success" role="status">
<div class="tds-alert__content">
<p class="tds-alert__title">Dossier soumis</p>
<div class="tds-alert__body">Référence : REF-2024-001234</div>
</div>
</div>import { color, spacing, typography } from '@tds-tchad/core/tokens';
import type { ButtonVariant } from '@tds-tchad/core/components/button';
const primary = color.blue[500]; // '#0033A0'
const gap = spacing.scale[4]; // '1rem' (16px)
const body = typography.sizes.md; // '1rem'TDS/
├── packages/
│ └── core/ ← Package npm principal @tds-tchad/core
│ ├── src/
│ │ ├── base.css ← Reset CSS + styles HTML de base
│ │ ├── tokens/ ← Design tokens (TS + JSON + CSS)
│ │ └── components/ ← Tokens + CSS de chaque composant
│ ├── scripts/ ← Build, clean, validation
│ └── package.json
├── apps/
│ ├── docs/ ← Site de documentation (Astro Starlight)
│ └── site/ ← Site statique HTML de démonstration
├── templates/ ← Templates gouvernementaux (à venir)
├── .github/workflows/ci.yml ← CI/CD GitHub Actions
├── turbo.json ← Orchestration Turbo
└── pnpm-workspace.yaml
git clone https://github.com/wargafu/TDS.git
cd TDS
pnpm install# Lancer le site de documentation en local
cd apps/docs && npm run dev
# → http://localhost:4321
# Builder tous les packages
pnpm build
# Vérifier les types TypeScript
pnpm typecheck
# Valider les tokens (93 checks)
pnpm --filter @tds-tchad/core validate:tokens
# Valider les exports npm (après build)
pnpm --filter @tds-tchad/core validate:exports
# Lint
pnpm lint
# Formatter le code
pnpm format# 1. Créer une branche feature
git checkout -b feat/nom-du-composant
# 2. Développer + valider
pnpm --filter @tds-tchad/core validate:tokens
pnpm build
pnpm typecheck
# 3. Committer
git commit -m "feat: ajouter le composant X"
# 4. Ouvrir une Pull Request vers main
git push origin feat/nom-du-composantToute contribution est bienvenue. TDS est un bien numérique commun pour le Tchad.
- Les tokens ajoutés existent en
.ts,.jsonET.css -
pnpm --filter @tds-tchad/core validate:tokenspasse à 0 erreur -
pnpm build && pnpm --filter @tds-tchad/core validate:exportsréussit -
pnpm typecheck→ zéro erreur TypeScript -
pnpm --filter @tds-tchad/core testetlint:csspassent - Les composants respectent WCAG 2.1 AA (contraste, focus, ARIA) —
cd apps/docs && npm run test:a11y - La documentation est mise à jour dans
apps/docs/(page composant + terrain de jeu)
| Type | Processus |
|---|---|
| 🐛 Correction de bug | PR directe avec description du bug |
| ♿ Amélioration accessibilité | PR avec tests AT décrits |
| 🎨 Nouveau token | Ouvrir une issue d'abord |
| 🧩 Nouveau composant | RFC obligatoire — discussion issue |
| 📚 Documentation | PR directe |
| 🌐 Traduction arabe | PR directe — contactez les mainteneurs |
- Modifier la valeur d'un token existant
- Supprimer un export public
- Renommer une classe CSS existante
TDS suit le versionnement sémantique strict. Les tokens publiés sont immuables.
→ docs/communaute/contribution
- 7 systèmes de tokens (couleurs, typo, espacement, radius, shadow, motion, z-index)
- 17 composants (Button, Input, Alert, Badge, Card, Link, Table, Header, Navigation, Breadcrumb, Pagination, Modal, Skip Link, Footer, Accordion, Tabs, Tooltip)
- Build system industriel + CI/CD
- Documentation Astro Starlight
- Pipeline de génération de tokens à source unique, tests automatisés, stylelint, vérifications a11y (axe-core)
- Header gouvernemental
- Navigation principale
- Breadcrumb
- Pagination
- Modal / Dialog
- Template portail citoyen
- Template tableau de bord administratif
- Terrain de jeu visuel des composants (
apps/docs/src/pages/playground.astro)
- Dark mode complet
- Système d'icônes SVG
- Support arabe RTL complet et testé
- Publication npm
@tds-tchad/core
| Environnement | Support |
|---|---|
| HTML + CSS (sans JS) | ✅ Complet |
| React 18+ | ✅ Via classes CSS |
| Vue 3+ | ✅ Via classes CSS |
| Angular | ✅ Via classes CSS |
| Next.js / Nuxt / Astro | ✅ Via classes CSS |
| Node.js (tokens JSON/JS) | ✅ |
| Navigateurs modernes (2 dernières versions) | ✅ |
| IE11 | ❌ Non supporté |
| Outil | Usage |
|---|---|
| pnpm + Turbo | Monorepo et orchestration |
| TypeScript 5.6 | Tokens typés |
| Astro + Starlight | Documentation |
| GitHub Actions | CI/CD |
| ESLint + Prettier | Qualité du code |
MIT — Libre d'utilisation pour tous les projets, y compris gouvernementaux.
- Issues : github.com/wargafu/TDS/issues
- Discussions : github.com/wargafu/TDS/discussions
- Email : design-system@gouv.td (à configurer)
