{{-- Livewire Component --}}class TaskList extends Component{ public array $tasks = [ ['id' => 1, 'title' => 'Task 1'], ['id' => 2, 'title' => 'Task 2'], ['id' => 3, 'title' => 'Task 3'], ]; public function updateOrder(array $ids): void { $tasksById = collect($this->tasks) ->keyBy('id')->toArray(); $this->tasks = array_map( fn($id) => $tasksById[$id], $ids ); }} {{-- Blade View --}}<div x-data="sortableList({ items: @js($tasks), itemKey: 'id', onUpdate: (ids) => $wire.updateOrder(ids)})"> <ul x-ref="sortableList" class="space-y-2"> @foreach($tasks as $task) <li data-id="{{ $task['id'] }}" class="sortable-item"> <div class="sortable-handle"> <x-lucide-grip-vertical /> </div> <span>{{ $task['title'] }}</span> </li> @endforeach </ul></div> {{-- With Custom Styling --}}<div x-data="sortableList({ items: @js($items), onUpdate: (ids) => handleReorder(ids)})" class="bg-card rounded-lg p-4"> <ul x-ref="sortableList"> @foreach($items as $item) <li data-id="{{ $item['id'] }}" class="flex items-center gap-3 p-3 border rounded-lg mb-2 hover:border-primary/50"> <div class="sortable-handle cursor-grab active:cursor-grabbing"> ≡ </div> {{ $item['name'] }} </li> @endforeach </ul></div>
Day 17 - Component Challenge
Challenge UI with Livewire & Alpine.js
Day 17
Sortable List & Timeline
Drag-and-drop reorderable list and activity timeline visualization
Sortable List
Liste réordonnçable par glisser-déposer avec synchronisation Livewire.
Features
- Drag-and-drop natif avec Sortable.js
- Synchronisation Livewire
- Handle de drag personnalisable
- Animation fluide
- Support mobile (touch)
Liste de tâches
6 tâches-
1
Réviser le design du dashboard
High En attente -
2
Implémenter l'authentification
High Terminé -
3
Créer les tests unitaires
Medium En attente -
4
Optimiser les requêtes SQL
Medium En cours -
5
Mettre à jour la documentation
Low En attente -
6
Déployer en production
High En attente
Timeline
Fil chronologique pour afficher l'historique d'activités ou d'événements.
Features
- Mode vertical et horizontal
- Icônes par type d'événement
- Mode alternant gauche/droite
- Animations d'apparition
- Tailles personnalisables
Timeline verticale
Projet créé
Le projet Livewire UI Lab a été initialisé avec Laravel et Livewire.
Par Jiordi
Première release
Publication de la version 0.1.0 avec les 5 premiers composants.
Par Jiordi
Bug corrigé
Correction du problème d'affichage sur mobile pour le composant Modal.
Par Équipe Dev
Nouvelle fonctionnalité
Ajout du mode sombre et des thèmes personnalisés.
Par Jiordi
Milestone atteint
Le Lab UI a dépassé les 1000 étoiles sur GitHub!
Par Communauté
Timeline alternante
Projet créé
Le projet Livewire UI Lab a été initialisé avec Laravel et Livewire.
Par Jiordi
Première release
Publication de la version 0.1.0 avec les 5 premiers composants.
Par Jiordi
Bug corrigé
Correction du problème d'affichage sur mobile pour le composant Modal.
Par Équipe Dev
Nouvelle fonctionnalité
Ajout du mode sombre et des thèmes personnalisés.
Par Jiordi
Milestone atteint
Le Lab UI a dépassé les 1000 étoiles sur GitHub!
Par Communauté
Timeline horizontale
Projet créé
Le projet Livewire UI Lab a été initialisé avec Laravel et Livewire.
Première release
Publication de la version 0.1.0 avec les 5 premiers composants.
Bug corrigé
Correction du problème d'affichage sur mobile pour le composant Modal.
Nouvelle fonctionnalité
Ajout du mode sombre et des thèmes personnalisés.
Usage Examples
Sortable List Usage
Timeline Usage
{{-- Basic Vertical Timeline --}}<x-ui.timeline :items="$events" variant="vertical"/> {{-- Horizontal Timeline --}}<x-ui.timeline :items="$events" variant="horizontal" size="sm"/> {{-- Alternating Timeline --}}<x-ui.timeline :items="$events" variant="vertical" :alternating="true"/> {{-- Timeline Data Structure --}}@php$events = [ [ 'title' => 'Project Started', 'description' => 'Initial commit', 'date' => '2024-01-15', 'time' => '09:00', 'type' => 'create', // create, release, // fix, feature, // milestone, error 'user' => 'Jiordi', ], [ 'title' => 'First Release', 'description' => 'Version 1.0.0', 'date' => '2024-02-01', 'type' => 'release', ],];@endphp {{-- Different Sizes --}}<x-ui.timeline :items="$events" size="sm" /><x-ui.timeline :items="$events" size="md" /><x-ui.timeline :items="$events" size="lg" /> {{-- Line Styles --}}<x-ui.timeline :items="$events" lineStyle="solid"/><x-ui.timeline :items="$events" lineStyle="dashed"/> {{-- Without Animation --}}<x-ui.timeline :items="$events" :animated="false"/>