Update project dependencies and enhance documentation

- Added `barryvdh/laravel-dompdf` to `composer.json` for PDF generation capabilities.
- Updated `boost.json` to include `tailwindcss-development` in skills.
- Modified `package.json` and `package-lock.json` to upgrade Tailwind CSS and related packages.
- Improved README.md for clarity and corrected French language errors.
- Created design system documentation for Filament components.
- Added new Filament pages for Dashboard and Documentation with dynamic content loading.
- Enhanced TablesExplorer functionality with improved table and column management.
This commit is contained in:
2026-02-20 14:16:24 +01:00
parent 4aef33f270
commit 657c5ad5e3
46 changed files with 3318 additions and 857 deletions

View File

@@ -0,0 +1,5 @@
@props(['class' => ''])
<div {{ $attributes->class(['rounded-xl bg-white shadow-sm ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10', $class]) }}>
{{ $slot }}
</div>

View File

@@ -0,0 +1,40 @@
@props(['data', 'metadata' => null, 'emptyMessage' => 'Aucun resultat.', 'emptyIcon' => 'heroicon-o-inbox'])
@if (count($data) > 0)
@php
$firstRow = reset($data);
$isAssociative = is_array($firstRow);
$headers = $isAssociative ? array_keys($firstRow) : [];
@endphp
<div class="overflow-x-auto">
<table class="w-full text-left text-sm">
<thead>
<tr class="border-b border-gray-200 dark:border-white/10">
@if ($isAssociative)
@foreach ($headers as $key)
<th class="px-3 py-2.5 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400">{{ $key }}</th>
@endforeach
@else
<th class="px-3 py-2.5 text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400">Valeur</th>
@endif
</tr>
</thead>
<tbody class="divide-y divide-gray-100 dark:divide-white/5">
@foreach ($data as $row)
<tr class="transition-colors hover:bg-gray-50 dark:hover:bg-white/5">
@if ($isAssociative)
@foreach ($row as $value)
<td class="px-3 py-2.5 text-sm text-gray-700 dark:text-gray-300">{{ is_array($value) ? json_encode($value) : $value }}</td>
@endforeach
@else
<td class="px-3 py-2.5 text-sm text-gray-700 dark:text-gray-300">{{ $row }}</td>
@endif
</tr>
@endforeach
</tbody>
</table>
</div>
@else
<x-logistics.empty-state :icon="$emptyIcon" :title="$emptyMessage" />
@endif

View File

@@ -0,0 +1,9 @@
@props(['icon' => 'heroicon-o-inbox', 'title', 'description' => null])
<div class="flex flex-col items-center justify-center py-12 text-center">
<x-filament::icon :icon="$icon" class="h-10 w-10 text-gray-300 dark:text-gray-600" />
<p class="mt-3 text-sm font-medium text-gray-900 dark:text-white">{{ $title }}</p>
@if ($description)
<p class="mt-1 text-sm text-gray-500 dark:text-gray-400">{{ $description }}</p>
@endif
</div>

View File

@@ -0,0 +1,7 @@
@props(['message'])
@if ($message)
<div class="rounded-lg bg-danger-50 p-4 text-sm text-danger-600 dark:bg-danger-400/10 dark:text-danger-400">
{{ $message }}
</div>
@endif

View File

@@ -0,0 +1,11 @@
@props(['label', 'id', 'type' => 'text', 'placeholder' => ''])
<div>
<label for="{{ $id }}" class="block text-sm font-medium text-gray-700 dark:text-gray-300">{{ $label }}</label>
<input
{{ $attributes->class(['mt-1.5 w-full rounded-lg border-gray-300 py-2 text-sm shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:border-white/10 dark:bg-white/5 dark:text-white']) }}
type="{{ $type }}"
id="{{ $id }}"
placeholder="{{ $placeholder }}"
/>
</div>

View File

@@ -0,0 +1,7 @@
@props(['data'])
@if (! empty($data))
<div class="overflow-x-auto">
<pre class="rounded-lg border border-gray-200 bg-gray-50 p-4 text-xs font-mono leading-relaxed text-gray-700 dark:border-white/10 dark:bg-gray-800 dark:text-gray-300">{{ json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
</div>
@endif

View File

@@ -0,0 +1,10 @@
@props(['placeholder' => 'Rechercher...'])
<div class="relative">
<x-filament::icon icon="heroicon-o-magnifying-glass" class="absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400" />
<input
{{ $attributes->class(['w-full rounded-lg border-gray-300 py-2 pl-9 pr-3 text-sm shadow-sm focus:border-primary-500 focus:ring-primary-500 dark:border-white/10 dark:bg-white/5 dark:text-white']) }}
type="text"
placeholder="{{ $placeholder }}"
/>
</div>

View File

@@ -0,0 +1,15 @@
@props(['title', 'description' => null])
<div class="border-b border-gray-200 px-6 py-4 dark:border-white/10">
<div class="flex items-center justify-between">
<div>
<h3 class="text-base font-semibold text-gray-950 dark:text-white">{{ $title }}</h3>
@if ($description)
<p class="mt-1 text-xs text-gray-500 dark:text-gray-400">{{ $description }}</p>
@endif
</div>
@isset($actions)
<div class="flex items-center gap-2">{{ $actions }}</div>
@endisset
</div>
</div>

View File

@@ -0,0 +1,5 @@
<x-logistics.card>
<div class="flex flex-wrap items-center gap-x-6 gap-y-2 px-6 py-3">
{{ $slot }}
</div>
</x-logistics.card>

View File

@@ -0,0 +1,12 @@
@props(['icon' => null, 'label' => null, 'value'])
<div class="flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400">
@if ($icon)
<x-filament::icon :icon="$icon" class="h-4 w-4 shrink-0" />
@endif
@if ($label)
<span>{{ $label }} <span class="font-medium text-gray-700 dark:text-gray-200">{{ $value }}</span></span>
@else
<span class="font-medium text-gray-700 dark:text-gray-200">{{ $value }}</span>
@endif
</div>