Documentation complète pour la bibliothèque @odyssee/components - Une collection de composants UI construits avec Pulse Framework, stylisés avec Tailwind CSS et Preline.
🌐 Voir la documentation en ligne
Ce projet fournit :
- 📖 Documentation VitePress - Documentation complète avec exemples
- 🎮 Playground Interactif - Démos live des composants
- 🧩 15 Composants - Button, Input, Select, Modal, et plus
components-doc/
├── docs/ # Documentation VitePress
│ ├── .vitepress/ # Configuration VitePress
│ │ ├── config.ts # Config du site
│ │ └── theme/ # Thème personnalisé
│ ├── components/ # Pages de documentation des composants
│ │ ├── button.md # Button component
│ │ ├── alert.md # Alert component
│ │ ├── badge.md # Badge component
│ │ ├── input.md # Input component
│ │ └── forms-overview.md # Vue d'ensemble des formulaires
│ ├── guide/ # Guides
│ │ └── getting-started.md
│ ├── public/ # Assets statiques
│ └── index.md # Page d'accueil
│
└── playground/ # Playground interactif
├── src/
│ ├── main.tsx # Point d'entrée avec démos Button
│ └── style.css # Styles du playground
├── index.html
├── vite.config.ts # Config Vite pour Pulse
├── tailwind.config.js # Config Tailwind
└── tsconfig.json # Config TypeScript
- Node.js 18+
- npm ou yarn
# Depuis le dossier components-doc
npm install
# Depuis le playground
cd playground
npm installLe playground fournit des démos interactives utilisant les vrais composants de @odyssee/components.
cd playground
npm run devLe playground sera accessible sur http://localhost:3000 (ou 3001 si le port est occupé)
10 sections de démonstration pour le composant Button :
- Variants - solid, outline, ghost, soft, link
- Colors - 8 couleurs disponibles
- Sizes - xs, sm, md, lg, xl
- Loading State - États de chargement avec spinner
- With Icons - Boutons avec icônes
- Disabled State - États désactivés
- Interactive Counter - Compteur avec Pulse signals
- Reactive Disabled - Désactivation basée sur validation
- Full Width - Boutons pleine largeur
- Combined Examples - Combinaisons de styles
Éditez playground/src/main.tsx pour ajouter des démos d'autres composants :
import { Input, Select, Modal, Pulse } from '@odyssee/components';
// Créez vos démos ici
const inputDemo = (
<div class="demo-section">
<h2>Input Demo</h2>
<Input label="Email" type="email" />
</div>
);npm run docs:devLa documentation sera accessible sur http://localhost:5173
# Documentation
npm run docs:build
npm run docs:preview
# Playground
cd playground
npm run build
npm run previewCe projet est configuré pour se déployer automatiquement sur GitHub Pages à chaque push sur la branche main.
-
Activer GitHub Pages dans votre repository :
- Allez dans
Settings>Pages - Source :
GitHub Actions
- Allez dans
-
Configurer le base path dans
docs/.vitepress/config.ts:export default defineConfig({ base: "/components-doc/", // Déjà configuré pour ce repo })
-
Push sur main :
git add . git commit -m "Deploy documentation" git push origin main
Le workflow GitHub Actions (.github/workflows/deploy.yml) va automatiquement :
- ✅ Installer les dépendances
- ✅ Builder la documentation VitePress
- ✅ Déployer sur GitHub Pages
Votre documentation sera accessible sur : https://odyssee-software.github.io/components-doc/
Si vous préférez déployer manuellement, vous pouvez aussi déclencher le workflow depuis l'onglet Actions de GitHub.
- ✅ Button - Boutons polyvalents avec variants
- ✅ Alert - Messages d'alerte et notifications
- ✅ Badge - Badges et labels
- ✅ Overview - Vue d'ensemble complète
- ✅ Input - Champs de texte avec validation
- 📄 Textarea - Champ de texte multi-lignes
- 📄 Select - Sélection dropdown
- 📄 Checkbox - Cases à cocher
- 📄 Radio - Boutons radio
- 📄 RadioGroup - Groupes de boutons radio
- 📄 Toggle - Interrupteurs on/off
- 📄 FileInput - Upload de fichiers
- 📄 RangeSlider - Sliders de valeurs
- 📄 ColorPicker - Sélecteur de couleurs
- 📄 FormGroup - Groupement de champs
- 📄 Modal - Dialogues modaux
- ✅ Getting Started - Guide de démarrage
- 📄 Installation
- 📄 Pulse Framework
Légende : ✅ Complété | 📄 À créer
Les fichiers TypeScript et Vite sont configurés pour Pulse Framework :
tsconfig.json
{
"compilerOptions": {
"jsx": "preserve",
"jsxFactory": "Pulse.jsx",
"jsxFragmentFactory": "Pulse.render.fragment"
}
}vite.config.ts
{
esbuild: {
jsx: "transform",
jsxFactory: "Pulse.jsx",
jsxFragment: "Pulse.render.fragment"
}
}Pulse.jsx et NON Pulse.createElement (ce n'est pas React!)
Les éléments doivent être castés en Pulse.JSX.Element :
// ✅ Correct
const div = (<div>Hello</div>) as Pulse.JSX.Element;
// ❌ Incorrect
const div = (<div>Hello</div>) as HTMLElement;import { Button, Pulse } from '@odyssee/components';
const btn = Button({
variant: "solid",
color: "primary",
children: "Click me"
});
document.getElementById('app')?.appendChild(btn as Pulse.JSX.Element);import { Input, Button, Pulse } from '@odyssee/components';
const email = Pulse.signal('');
const isValid = Pulse.computed(() => email().includes('@'));
const form = (
<form class="space-y-4">
<Input
label="Email"
type="email"
value={email}
onChange={(val) => email(val)}
/>
<Button
type="submit"
disabled={Pulse.computed(() => !isValid())}
>
Submit
</Button>
</form>
) as Pulse.JSX.Element;const isLoading = Pulse.signal(false);
const btn = Button({
loading: isLoading,
onClick: async () => {
isLoading(true);
await someAsyncOperation();
isLoading(false);
},
children: "Submit"
});Problème : Mauvaise configuration JSX
Solution : Utilisez Pulse.jsx au lieu de Pulse.createElement
// Dans vite.config.ts et tsconfig.json
jsxFactory: "Pulse.jsx" // ✅ Correct
jsxFactory: "Pulse.createElement" // ❌ IncorrectProblème : Chemin d'import incorrect
Solution : Utilisez le chemin relatif complet
// ✅ Correct
import "../../../odyssee-components/src/styles.css";
// ❌ Incorrect
import "@odyssee/components/styles";Problème : Configuration TypeScript incorrecte
Solution : Vérifiez votre tsconfig.json
{
"compilerOptions": {
"jsx": "preserve",
"jsxFactory": "Pulse.jsx",
"jsxFragmentFactory": "Pulse.render.fragment"
}
}Problème : CSS non importé
Solution : Importez les styles dans votre point d'entrée
import "../../../odyssee-components/src/styles.css";- QUICKSTART.md - Guide de démarrage rapide
- docs/ - Documentation complète
- playground/ - Code source du playground
- odyssee-components - Bibliothèque de composants
- FORM_COMPONENTS.md - Doc originale
- Pulse Framework - Framework réactif
- Tailwind CSS - Framework CSS
- VitePress - Générateur de documentation
- Créer pages manquantes pour les composants de formulaire
- Ajouter page d'installation
- Créer guide Pulse Framework détaillé
- Ajouter exemples de patterns courants
- Créer page sur l'accessibilité
Ajouter démos pour Input✅ Complété avec LiveCodeEditorAjouter démos pour Select✅ Complété avec LiveCodeEditor- Ajouter démos pour Modal
- Créer formulaire complet d'exemple
- Ajouter mode dark/light toggle
- Ajouter tests E2E avec Playwright
Ajouter CI/CD pour build automatique✅ Workflow GitHub Actions ajoutéDéployer la documentation✅ GitHub Pages configuré- Ajouter recherche Algolia
Créer composants Vue pour intégration VitePress✅ LiveCodeEditor créé
npm run docs:dev # Développement (port 5173)
npm run docs:build # Build production
npm run docs:preview # Preview buildcd playground
npm run dev # Développement (port 3000)
npm run build # Build production
npm run preview # Preview buildPour contribuer à la documentation :
-
Ajouter un composant :
- Créez
docs/components/[nom].md - Ajoutez-le dans
.vitepress/config.tssidebar - Suivez le format des pages existantes
- Créez
-
Ajouter une démo :
- Éditez
playground/src/main.tsx - Utilisez les composants réels de
@odyssee/components - Castez en
Pulse.JSX.Element
- Éditez
-
Style Guide :
- Utilisez Tailwind CSS
- Suivez les conventions Pulse Framework
- Documentez les props clairement
- Incluez des exemples TypeScript
- 15 Composants documentés
- 4 Pages de documentation créées
- 10 Démos interactives dans le playground
- 100% TypeScript avec types complets
- 📖 Documentation
- 💬 GitHub Issues
- 📦 GitHub Repository
- 📧 Email: contact@odyssee.dev
Version: 1.0.0
Dernière mise à jour: Janvier 2025
Construit avec: Pulse Framework, VitePress, Tailwind CSS
Bon développement ! 🚀