@props(['items' => [], 'theme' => 'light']) @php $resolveUrl = function (?string $route): string { if (! $route) { return '#'; } if (str_starts_with($route, 'http://') || str_starts_with($route, 'https://')) { return $route; } if (str_contains($route, '/')) { return url($route); } return \Illuminate\Support\Facades\Route::has($route) ? route($route) : url($route); }; $isItemActive = function (array $item) { $route = $item['route'] ?? null; $active = false; if ($route) { if (str_contains($route, '/')) { $active = request()->is(trim($route, '/').'*'); } else { $active = request()->routeIs($route) || request()->routeIs($route.'.*'); } } foreach (($item['children'] ?? []) as $child) { $childRoute = $child['route'] ?? null; if (! $childRoute) { continue; } if (str_contains($childRoute, '/')) { $active = $active || request()->is(trim($childRoute, '/').'*'); } else { $active = $active || request()->routeIs($childRoute) || request()->routeIs($childRoute.'.*'); } } return $active; }; $isDark = $theme === 'dark'; $isAdaptive = $theme === 'adaptive'; $mobileButtonClass = $isAdaptive ? 'mb-4 inline-flex h-10 w-10 items-center justify-center rounded-xl border border-slate-200 text-slate-600 md:hidden dark:border-slate-700 dark:text-slate-200' : ($isDark ? 'mb-4 inline-flex h-10 w-10 items-center justify-center rounded-xl border border-slate-700 text-slate-200 md:hidden' : 'mb-4 inline-flex h-10 w-10 items-center justify-center rounded-xl border border-slate-200 text-slate-600 md:hidden'); $sidebarShellClass = $isAdaptive ? 'fixed inset-y-0 left-0 z-50 w-72 -translate-x-full transform border-r border-slate-200 bg-white p-4 transition-transform duration-300 dark:border-slate-800 dark:bg-slate-900 md:static md:w-full md:translate-x-0 md:border-r-0 md:bg-transparent md:p-0' : ($isDark ? 'fixed inset-y-0 left-0 z-50 w-72 -translate-x-full transform border-r border-slate-800 bg-slate-900 p-4 transition-transform duration-300 md:static md:w-full md:translate-x-0 md:border-r-0 md:bg-transparent md:p-0' : 'fixed inset-y-0 left-0 z-50 w-72 -translate-x-full transform border-r border-slate-200 bg-white p-4 transition-transform duration-300 md:static md:w-full md:translate-x-0 md:border-r-0 md:bg-transparent md:p-0'); $mobileTitleClass = $isAdaptive ? 'text-sm font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-300' : ($isDark ? 'text-sm font-semibold uppercase tracking-wide text-slate-300' : 'text-sm font-semibold uppercase tracking-wide text-slate-500'); $mobileCloseClass = $isAdaptive ? 'rounded-lg p-2 text-slate-500 dark:text-slate-300' : ($isDark ? 'rounded-lg p-2 text-slate-300' : 'rounded-lg p-2 text-slate-500'); $activeItemClass = $isAdaptive ? 'border-primary-500 bg-primary-50 text-primary-700 dark:border-primary-400 dark:bg-slate-800 dark:text-primary-300' : ($isDark ? 'border-primary-400 bg-slate-800 text-primary-300' : 'border-primary-500 bg-primary-50 text-primary-700'); $inactiveItemClass = $isAdaptive ? 'border-transparent text-slate-600 hover:bg-slate-100 hover:text-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-white' : ($isDark ? 'border-transparent text-slate-300 hover:bg-slate-800 hover:text-white' : 'border-transparent text-slate-600 hover:bg-slate-100 hover:text-slate-900'); $activeChildClass = $isAdaptive ? 'bg-primary-100 text-primary-700 dark:bg-slate-800 dark:text-primary-300' : ($isDark ? 'bg-slate-800 text-primary-300' : 'bg-primary-100 text-primary-700'); $inactiveChildClass = $isAdaptive ? 'text-slate-500 hover:bg-slate-100 hover:text-slate-900 dark:text-slate-300 dark:hover:bg-slate-800 dark:hover:text-white' : ($isDark ? 'text-slate-300 hover:bg-slate-800 hover:text-white' : 'text-slate-500 hover:bg-slate-100 hover:text-slate-900'); @endphp