Pourquoi TailwindUI PHP ?
Une solution simple et élégante pour créer des interfaces utilisateur cohérentes et professionnelles.
Rapide
Générez des composants complexes en une seule ligne de code PHP.
Sécurisé
Échappement HTML automatique pour prévenir les attaques XSS.
Modulaire
Utilisez uniquement les composants dont vous avez besoin.
Composants Disponibles
Cliquez sur un composant pour voir les exemples et le code.
Navigation
Card
Cartes de contenu et statistiques
Total Projets
42
Mon Projet
Contenu de la carte avec en-tête.
<?php
use TailwindUI\Card;
// Carte de statistique
echo Card::stat('Total Projets', '42', 'fas fa-folder', 'blue');
echo Card::stat('Revenus', '12,500 €', 'fas fa-euro-sign', 'green');
echo Card::stat('Erreurs', '3', 'fas fa-exclamation-triangle', 'red');
// Carte avec en-tête
echo Card::withHeader(
'Mon Projet',
'<p>Contenu de la carte</p>',
Button::primary('Action') // Footer optionnel
);
// Carte basique
echo Card::basic('<p>Contenu simple</p>');
// Carte de projet
echo Card::project([
'title' => 'Site E-commerce',
'description' => 'Description du projet...',
'color' => '#3B82F6',
'status' => 'active',
'deadline' => '15/12/2024'
]);
// Empty state
echo Card::empty(
'fas fa-folder-open',
'Aucun projet',
'Créez votre premier projet',
Button::primary('Créer')
);
?>
Form
Éléments de formulaire complets
<?php
use TailwindUI\Form;
// Input avec validation
echo Form::input('email', 'Email', [
'type' => 'email',
'required' => true,
'placeholder' => 'votre@email.com'
], $error, 'Format: exemple@domaine.com');
// Textarea
echo Form::textarea('description', 'Description', [
'rows' => 4,
'placeholder' => 'Décrivez...'
]);
// Select
echo Form::select('status', 'Statut', [
'todo' => 'À faire',
'in_progress' => 'En cours',
'done' => 'Terminé'
], 'todo');
// Checkbox et Radio
echo Form::checkbox('remember', 'Se souvenir de moi', true);
echo Form::radio('priority', 'high', 'Haute priorité', false);
// Date/Color
echo Form::datetime('deadline', 'Date limite', 'datetime-local');
echo Form::color('color', 'Couleur', '#3B82F6');
// File upload
echo Form::file('avatar', 'Photo', ['accept' => 'image/*']);
// Grille 2 colonnes
echo Form::grid([
Form::input('firstname', 'Prénom'),
Form::input('lastname', 'Nom')
], 2);
?>
Alert
Messages et notifications
<?php
use TailwindUI\Alert;
// Types d'alertes
echo Alert::success('Opération réussie !');
echo Alert::error('Une erreur est survenue.');
echo Alert::warning('Attention !');
echo Alert::info('Information importante.');
// Non-dismissible
echo Alert::success('Message permanent', false);
// Flash messages (avec Session)
$flashes = [
'success' => Session::getFlash('success'),
'error' => Session::getFlash('error')
];
echo Alert::flashMessages(array_filter($flashes));
// Toast notification
echo Alert::toast('Enregistré !', 'success', 3000);
?>
Badge
Badges et étiquettes avec auto-mapping
<?php
use TailwindUI\Badge;
// Badges de couleur
echo Badge::primary('Primary');
echo Badge::success('Success');
echo Badge::danger('Danger');
echo Badge::warning('Warning');
// Auto-mapping statut (couleurs automatiques !)
echo Badge::status('active'); // Vert
echo Badge::status('in_progress'); // Bleu
echo Badge::status('pending'); // Jaune
echo Badge::status('completed'); // Vert
// Auto-mapping priorité
echo Badge::priority('low'); // Gris
echo Badge::priority('medium'); // Bleu
echo Badge::priority('high'); // Orange
echo Badge::priority('urgent'); // Rouge
// Avec icône
echo Badge::withIcon('5 nouveaux', 'fas fa-bell');
// Avec point indicateur
echo Badge::withDot('En ligne', 'green');
// Groupe de badges
echo Badge::group([
Badge::primary('PHP'),
Badge::info('MySQL'),
Badge::success('Tailwind')
]);
?>
Table
Tableaux stylisés avec pagination
| Tâche | Statut | Priorité |
|---|---|---|
| Développer API | En cours | Haute |
<?php
use TailwindUI\Table;
use TailwindUI\Badge;
$headers = ['Tâche', 'Statut', 'Priorité', 'Actions'];
$rows = [];
foreach ($tasks as $task) {
$rows[] = [
$task->getTitle(),
Table::statusCell($task->getStatus()),
Table::priorityCell($task->getPriority()),
Table::actionsCell([
Table::actionButton('/edit/' . $task->getId(), 'fas fa-edit', 'Modifier', 'blue'),
Table::actionButton('/delete/' . $task->getId(), 'fas fa-trash', 'Supprimer', 'red')
])
];
}
// Types de tables
echo Table::simple($headers, $rows);
echo Table::striped($headers, $rows);
echo Table::hoverable($headers, $rows);
echo Table::full($headers, $rows); // striped + hover
// Pagination
echo Table::pagination($currentPage, $totalPages, '/tasks');
?>
Header
En-têtes et sections hero
Titre Principal
Description de la section hero avec un texte explicatif.
<?php
use TailwindUI\Header;
// Hero simple
echo Header::hero(
'Titre Principal',
'Description de la section',
Button::primary('Commencer')
);
// Hero avec image de fond
echo Header::heroWithBackground(
'Titre',
'Description',
'/images/background.jpg',
Button::primary('Action')
);
// Hero avec deux colonnes
echo Header::heroSplit(
'Titre',
'Description',
'/images/hero-image.jpg',
Button::primary('Action')
);
// En-tête de page
echo Header::page('Titre de la page', 'Description optionnelle');
// En-tête avec breadcrumb
echo Header::pageWithBreadcrumb('Mon Projet', [
['label' => 'Accueil', 'url' => '/'],
['label' => 'Projets', 'url' => '/projects'],
['label' => 'Mon Projet', 'url' => '']
]);
// Section centrée avec statistiques
echo Header::centered('Nos Résultats', 'Description', [
['value' => '100+', 'label' => 'Clients'],
['value' => '50K', 'label' => 'Projets']
]);
// Hero avec dégradé personnalisé
echo Header::gradient('Titre', 'Description', 'green-500', 'teal-600');
// En-tête de section
echo Header::section('Titre de Section', 'Description');
?>
FlyoutMenu
Menus déroulants avancés
Cliquez pour voir le menu déroulant (fonctionnalité JavaScript)
<?php
use TailwindUI\FlyoutMenu;
// Menu simple
echo FlyoutMenu::simple('Produits', [
['label' => 'Analytics', 'url' => '/analytics', 'icon' => 'fas fa-chart-bar'],
['label' => 'Engagement', 'url' => '/engagement', 'icon' => 'fas fa-cursor'],
'divider',
['label' => 'Sécurité', 'url' => '/security', 'icon' => 'fas fa-shield-alt']
]);
// Menu avec descriptions
echo FlyoutMenu::withDescriptions('Solutions', [
[
'label' => 'Analytics',
'description' => 'Analysez vos données en profondeur',
'url' => '/analytics',
'icon' => 'fas fa-chart-pie'
],
[
'label' => 'Automatisation',
'description' => 'Automatisez vos workflows',
'url' => '/automation',
'icon' => 'fas fa-robot'
]
]);
// Mega menu
echo FlyoutMenu::mega('Solutions', [
[
'title' => 'Analytics',
'items' => [
['label' => 'Rapports', 'url' => '/reports', 'icon' => 'fas fa-file-alt'],
['label' => 'Dashboards', 'url' => '/dashboards', 'icon' => 'fas fa-tachometer-alt']
]
]
], [
'title' => 'Featured',
'items' => [
['label' => 'Guide', 'url' => '/guide', 'description' => 'Commencez ici']
]
]);
// Grille d'icônes
echo FlyoutMenu::iconGrid('Apps', [
['label' => 'Calendar', 'url' => '/calendar', 'icon' => 'fas fa-calendar'],
['label' => 'Mail', 'url' => '/mail', 'icon' => 'fas fa-envelope']
], 3);
// Menu avec footer
echo FlyoutMenu::withFooter('Ressources', $items, [
['label' => 'Voir tout', 'url' => '/resources']
]);
?>
Installation
Intégrez la bibliothèque en quelques minutes.
PHP / HTML
-
1
Copiez le dossier UI
Copiez
src/dans votre projet -
2
Configurez l'autoload
PSR-4 avec namespace
TailwindUI -
3
Incluez Tailwind CSS
Via CDN ou npm
Laravel
-
1
Installez via Composer
composer require tailwindui/php -
2
Publiez les assets
php artisan vendor:publish -
3
Utilisez dans Blade
{!! UI::button('Click') !!}
Exemple Rapide
<?php
// Dans votre vue PHP ou template Blade
use TailwindUI\Button;
use TailwindUI\Card;
use TailwindUI\Form;
use TailwindUI\Alert;
use TailwindUI\Badge;
use TailwindUI\Table;
// Créer un formulaire complet
?>
<form method="POST" action="/projects">
<?= Form::input('title', 'Titre du projet', ['required' => true]) ?>
<?= Form::textarea('description', 'Description') ?>
<?= Form::grid([
Form::select('priority', 'Priorité', [
'low' => 'Basse',
'medium' => 'Moyenne',
'high' => 'Haute'
], 'medium'),
Form::datetime('deadline', 'Date limite', 'date')
], 2) ?>
<div class="flex justify-end space-x-4">
<?= Button::secondary('Annuler') ?>
<?= Button::withIcon('Créer', 'fas fa-save', 'primary', ['type' => 'submit']) ?>
</div>
</form>