Deploy Laravel rebuild via Coolify

Point Docker and Coolify compose to the Laravel rebuild app so mahasiswa, dosen, and admin flows are served from the new Laravel public entrypoint.
This commit is contained in:
Power BI Dev
2026-05-03 18:50:29 +07:00
parent 89ce9d30a7
commit dab8ea396b
107 changed files with 17544 additions and 20 deletions

View File

@@ -0,0 +1,87 @@
<x-admin.partials.page-shell :title="$title" :sidebar="$sidebar">
<section class="rounded-xl bg-white p-4 shadow-[0_8px_12px_rgba(13,10,44,0.04)] lg:p-6">
<div class="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
<div>
<ol class="flex flex-wrap items-center gap-2 text-sm text-[#6B7280]">
<li class="inline-flex items-center gap-2">
<span class="text-[#625DF5]">@include('dashboard.partials.icon', ['icon' => 'home'])</span>
<span>Home</span>
</li>
<li>/</li>
<li class="font-medium text-[#15171A]">Dashboard</li>
</ol>
<h1 class="mt-4 text-[26px] font-bold leading-[34px] text-[#15171A]">Dashboard Admin</h1>
<p class="mt-2 max-w-[880px] text-sm leading-7 text-[#4B5563]">Selamat datang di halaman administrator Sistem Pendukung Outline Tugas Akhir (SPOTA) Universitas Tanjungpura.</p>
</div>
<div class="flex flex-wrap items-center gap-3">
<div class="rounded-md border border-[#E5E7EB] bg-[#F9FAFB] px-4 py-3 text-sm text-[#15171A]">{{ $pageDate }}</div>
<div class="rounded-md border border-[#E5E7EB] bg-[#F9FAFB] px-4 py-3 text-sm text-[#15171A]">{{ $user['username'] }} · {{ $user['nmprodi'] }}</div>
<form method="POST" action="{{ route('legacy.logout') }}">
@csrf
<button type="submit" class="rounded-md bg-[#15171A] px-5.5 py-2.5 text-sm font-medium text-white hover:opacity-90">Logout</button>
</form>
</div>
</div>
</section>
<section class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
@foreach ($stats as $stat)
<article class="rounded-xl border border-[#E5E7EB] bg-white p-5 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<p class="text-sm font-semibold text-[#5C6A78]">{{ $stat['label'] }}</p>
<p class="mt-3 text-3xl font-bold text-[#15171A]">{{ $stat['value'] }}</p>
<p class="mt-3 text-sm leading-7 text-[#6B7280]">{{ $stat['note'] }}</p>
</article>
@endforeach
</section>
<div class="grid gap-5 lg:grid-cols-[minmax(0,1fr)_380px]">
<section class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<h2 class="text-xl font-semibold text-[#15171A]">Menu Kerja Administrator</h2>
<p class="mt-2 text-sm leading-7 text-[#6B7280]">Link di bawah mengikuti struktur fungsi administrator lama. Rebuild ini menjaga akses menuju halaman yang sudah aktif tanpa mengubah proses data yang berjalan.</p>
<div class="mt-5 grid gap-4 md:grid-cols-2">
@foreach ($sidebar['sections'] as $group)
<article class="rounded-xl border border-[#E5E7EB] bg-[#F9FAFB] p-4">
<div class="flex items-center gap-2 font-semibold text-[#15171A]">
<span class="text-[#625DF5]">@include('dashboard.partials.icon', ['icon' => $group['icon']])</span>
<span>{{ $group['title'] }}</span>
</div>
<div class="mt-4 space-y-2">
@foreach ($group['items'] as $item)
<a href="{{ $item['href'] }}" @if(!empty($item['external'])) target="_blank" rel="noreferrer" @endif class="flex items-center justify-between rounded-md bg-white px-3 py-2 text-sm text-[#374151] hover:text-[#625DF5]">
<span>{{ $item['title'] }}</span>
<span>@include('dashboard.partials.icon', ['icon' => 'search'])</span>
</a>
@endforeach
</div>
</article>
@endforeach
</div>
</section>
<section class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<div class="flex items-center justify-between gap-3">
<div>
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[#979797]">Jadwal</p>
<h2 class="mt-2 text-xl font-semibold text-[#15171A]">Seminar/Sidang Terbaru</h2>
</div>
<a href="{{ route('admin.jadwal.kalender', [], false) }}" class="rounded-md border border-[#D1D5DB] px-3 py-2 text-xs font-medium text-[#15171A] hover:bg-[#F9FAFB]">Kalender</a>
</div>
<div class="mt-5 space-y-3">
@forelse ($schedules as $schedule)
<article class="rounded-xl border border-[#E5E7EB] bg-[#F9FAFB] p-4">
<div class="flex items-start justify-between gap-3">
<div>
<p class="font-semibold text-[#15171A]">{{ $schedule['jenis'] }}</p>
<p class="mt-1 text-sm text-[#6B7280]">{{ $schedule['mahasiswa'] }}</p>
</div>
<span class="rounded-full bg-white px-2.5 py-1 text-xs font-semibold text-[#4B5563]">{{ $schedule['ruangan'] }}</span>
</div>
<p class="mt-3 text-sm text-[#4B5563]">{{ $schedule['tanggal'] }}</p>
</article>
@empty
<div class="rounded-xl border border-dashed border-[#D1D5DB] bg-[#F9FAFB] p-5 text-center text-sm text-[#6B7280]">Belum ada jadwal seminar/sidang.</div>
@endforelse
</div>
</section>
</div>
</x-admin.partials.page-shell>

View File

@@ -0,0 +1,128 @@
<x-dosen.partials.page-shell :title="$title" :sidebar="$sidebar ?? $dashboard['sidebar']" :page-title="$dashboard['pageTitle']" :page-description="$dashboard['welcomeText']" :page-date="$dashboard['dateLabel']" :user="$user">
<section>
<article class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)] lg:p-7">
<h2 class="text-[22px] font-semibold leading-[30px] text-[#15171A]">{{ $dashboard['welcomeTitle'] }}</h2>
<p class="mt-3 max-w-[920px] text-[15px] leading-7 text-[#4B5563]">{{ $dashboard['welcomeText'] }}</p>
@if ($dashboard['androidLink'])
<div class="mt-5">
<a href="{{ $dashboard['androidLink'] }}" target="_blank" rel="noreferrer" class="inline-flex items-center rounded-md bg-[#2D68F8] px-4 py-2.5 text-sm font-medium text-white hover:opacity-90">Unduh Aplikasi SPOTA Android</a>
</div>
@endif
</article>
</section>
<section class="grid gap-5 lg:grid-cols-3">
<article class="rounded-xl border border-[#F2D38B] bg-[#FFF9E9] p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<div class="flex items-start gap-3">
<div class="mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-[#FDE7AE] text-[#A16207]">
@include('dashboard.partials.icon', ['icon' => 'warning'])
</div>
<div class="min-w-0 flex-1">
<h3 class="text-lg font-semibold text-[#15171A]">{{ $dashboard['announcementNotice']['title'] }}</h3>
<p class="mt-2 text-sm leading-7 text-[#5B4A1C]">{{ $dashboard['announcementNotice']['message'] }}</p>
<div class="mt-4">
<a href="{{ $dashboard['announcementNotice']['primaryHref'] }}" class="inline-flex items-center rounded-md bg-[#EAB308] px-4 py-2.5 text-sm font-medium text-[#15171A] hover:opacity-90">{{ $dashboard['announcementNotice']['primaryLabel'] }}</a>
</div>
</div>
</div>
</article>
<article class="rounded-xl border border-[#F2D38B] bg-[#FFF9E9] p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<div class="flex items-start gap-3">
<div class="mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-[#FDE7AE] text-[#A16207]">
@include('dashboard.partials.icon', ['icon' => 'warning'])
</div>
<div class="min-w-0 flex-1">
<h3 class="text-lg font-semibold text-[#15171A]">{{ $dashboard['proposalNotice']['title'] }}</h3>
<p class="mt-2 text-sm leading-7 text-[#5B4A1C]">{{ $dashboard['proposalNotice']['message'] }}</p>
<div class="mt-4 flex flex-wrap gap-3">
<a href="{{ $dashboard['proposalNotice']['primaryHref'] }}" class="inline-flex items-center rounded-md bg-[#EAB308] px-4 py-2.5 text-sm font-medium text-[#15171A] hover:opacity-90">{{ $dashboard['proposalNotice']['primaryLabel'] }}</a>
@if ($dashboard['proposalNotice']['secondaryLabel'])
<a href="{{ $dashboard['proposalNotice']['secondaryHref'] }}" class="inline-flex items-center rounded-md border border-[#E5C35C] bg-white px-4 py-2.5 text-sm font-medium text-[#15171A] hover:bg-[#FFFDF5]">{{ $dashboard['proposalNotice']['secondaryLabel'] }}</a>
@endif
</div>
</div>
</div>
</article>
<article class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<div class="flex items-center justify-between gap-3">
<div>
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[#979797]">Agenda Terdekat</p>
<h3 class="mt-2 text-xl font-semibold text-[#15171A]">Jadwal Seminar</h3>
</div>
<span class="rounded-full border border-[#E5E7EB] bg-[#F9FAFB] px-3 py-1 text-xs font-semibold text-[#4B5563]">{{ count($dashboard['upcomingSchedules']) }} data</span>
</div>
@if ($dashboard['upcomingSchedules'] === [])
<div class="mt-5 rounded-lg border border-dashed border-[#D1D5DB] bg-[#F9FAFB] p-5 text-sm leading-7 text-[#6B7280]">
Belum ada jadwal seminar terdekat yang terpublikasi untuk program studi ini.
</div>
@else
<div class="mt-5 space-y-3">
@foreach ($dashboard['upcomingSchedules'] as $schedule)
<div class="rounded-lg border border-[#E5E7EB] bg-[#F9FAFB] p-4">
<div class="flex flex-wrap items-start justify-between gap-3">
<div>
<div class="flex flex-wrap items-center gap-2">
<span class="rounded-full px-2.5 py-1 text-[11px] font-semibold {{ $schedule['jenisClass'] }}">{{ $schedule['jenis'] }}</span>
<p class="text-sm font-semibold text-[#15171A]">{{ $schedule['nama'] }}</p>
<span class="text-sm text-[#6B7280]">{{ $schedule['nim'] }}</span>
</div>
<p class="mt-2 text-sm leading-6 text-[#4B5563]">{{ $schedule['judul'] }}</p>
</div>
<div class="text-right text-sm text-[#6B7280]">
<p>{{ $schedule['tanggal'] }}</p>
<p class="mt-1">{{ $schedule['ruangan'] }}</p>
</div>
</div>
</div>
@endforeach
</div>
@endif
</article>
</section>
<section>
<article class="rounded-xl border border-[#E5E7EB] bg-white p-5 shadow-[0_8px_12px_rgba(13,10,44,0.04)] lg:p-6 xl:p-7">
<div class="flex items-center justify-between gap-3">
<div>
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[#979797]">Kalender</p>
<h3 class="mt-2 text-xl font-semibold text-[#15171A]">{{ $dashboard['calendar']['monthLabel'] }}</h3>
</div>
<span class="rounded-full border border-[#E5E7EB] bg-[#F9FAFB] px-3 py-1 text-xs font-semibold text-[#4B5563]">Publikasi jadwal aktif</span>
</div>
<div class="mt-6 grid grid-cols-7 gap-2.5 text-center text-xs font-semibold uppercase tracking-[0.12em] text-[#9CA3AF]">
@foreach ($dashboard['calendar']['weekdays'] as $weekday)
<div class="rounded-md bg-[#F9FAFB] px-2 py-2.5">{{ $weekday }}</div>
@endforeach
</div>
<div class="mt-3 space-y-2.5">
@foreach ($dashboard['calendar']['weeks'] as $week)
<div class="grid grid-cols-7 gap-2.5">
@foreach ($week as $day)
<div class="aspect-[0.82/1] min-h-[72px] rounded-lg border px-1.5 py-1.5 {{ $day['isCurrentMonth'] ? 'border-[#E5E7EB] bg-white' : 'border-[#EEF2F7] bg-[#F9FAFB]/80' }} {{ $day['isToday'] ? 'ring-2 ring-[#625DF5]/20' : '' }}">
<div class="flex items-center justify-between">
<span class="text-[13px] font-semibold {{ $day['isCurrentMonth'] ? 'text-[#15171A]' : 'text-[#9CA3AF]' }}">{{ $day['day'] }}</span>
@if ($day['isToday'])
<span class="rounded-full bg-[#625DF5] px-1 py-0.5 text-[8px] font-semibold leading-none text-white">Hari ini</span>
@endif
</div>
<div class="mt-1.5 space-y-1">
@foreach (array_slice($day['events'], 0, 3) as $event)
<div class="rounded-md border px-1.5 py-0.5 text-[8px] leading-3 {{ $event['className'] }}">
<p class="font-semibold">{{ $event['jenis'] }}</p>
<p class="truncate">{{ $event['title'] }}</p>
</div>
@endforeach
</div>
</div>
@endforeach
</div>
@endforeach
</div>
</article>
</section>
</x-dosen.partials.page-shell>

View File

@@ -0,0 +1,118 @@
<x-layouts.app :title="$title" :dashboard-layout="true">
<main class="bg-[#F9FAFB] min-h-screen">
<div class="dashboard-shell">
<aside class="dashboard-sidebar">
<div class="dashboard-sidebar-card">
<p class="text-xs font-semibold uppercase tracking-[0.18em] text-[#979797]">Menu Mahasiswa</p>
<div class="mt-4 space-y-1">
@foreach ($dashboard['menus'] as $menu)
@if (isset($menu['children']))
<div class="dashboard-sidebar-group">
<div class="dashboard-sidebar-group-label">
<span class="dashboard-sidebar-icon">@include('dashboard.partials.icon', ['icon' => $menu['icon']])</span>
<span>{{ $menu['title'] }}</span>
</div>
<div class="dashboard-sidebar-submenu">
@foreach ($menu['children'] as $child)
<a href="{{ $child['href'] }}" class="dashboard-sidebar-link">
<span class="dashboard-sidebar-icon">@include('dashboard.partials.icon', ['icon' => $child['icon']])</span>
<span>{{ $child['title'] }}</span>
</a>
@endforeach
</div>
</div>
@else
<a href="{{ $menu['href'] }}" class="dashboard-sidebar-link {{ !empty($menu['active']) ? 'dashboard-sidebar-link-active' : '' }}">
<span class="dashboard-sidebar-icon">@include('dashboard.partials.icon', ['icon' => $menu['icon']])</span>
<span>{{ $menu['title'] }}</span>
</a>
@endif
@endforeach
</div>
</div>
</aside>
<div class="dashboard-content">
<div class="flex flex-col gap-7.5 rounded-xl bg-white p-4 shadow-[0_8px_12px_rgba(13,10,44,0.04)] lg:flex-row lg:items-center lg:justify-between lg:p-6">
<div class="lg:max-w-[700px]">
<span class="mb-4 inline-flex rounded-full bg-[#625DF5]/[0.08] px-3 py-1 text-sm font-medium text-[#625DF5]">{{ $dashboard['eyebrow'] }}</span>
<h1 class="mb-4 font-bold text-[22px] leading-[30px] text-[#15171A] xl:text-[30px] xl:leading-[38px]">{{ $dashboard['title'] }}</h1>
<p>{{ $dashboard['description'] }}</p>
</div>
<div class="flex flex-wrap items-center gap-3">
<div class="rounded-md border border-[#E5E7EB] bg-[#F9FAFB] px-4 py-3 text-sm text-[#15171A]">{{ $user['nim'] }} · {{ $user['nmprodi'] }}</div>
<form method="POST" action="{{ route('legacy.logout') }}">
@csrf
<button type="submit" class="rounded-md bg-[#15171A] px-5.5 py-2.5 text-sm font-medium text-white hover:opacity-90">Logout</button>
</form>
</div>
</div>
<section id="ringkasan" class="mt-5 grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
@foreach ($dashboard['stats'] as $stat)
<article class="rounded-xl border border-[#E5E7EB] bg-white p-5 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<p class="text-sm font-semibold text-[#5C6A78]">{{ $stat['label'] }}</p>
<div class="mt-3 flex items-start justify-between gap-4">
<p class="text-3xl font-bold text-[#15171A]">{{ $stat['value'] }}</p>
<span class="rounded-md px-3 py-1 text-xs font-semibold {{ $stat['deltaClass'] }}">{{ $stat['delta'] }}</span>
</div>
<p class="mt-3 text-sm leading-7">{{ $stat['note'] }}</p>
</article>
@endforeach
</section>
<div class="mt-6 grid gap-6 lg:grid-cols-[minmax(0,1fr)_380px]">
<section class="space-y-6">
<article id="status-usulan" class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<h2 class="text-xl font-semibold text-[#15171A]">Status Usulan</h2>
@if ($dashboard['latestTitle'])
<p class="mt-3 text-sm leading-7 text-[#4B5563]">Judul terakhir: {{ $dashboard['latestTitle'] }}</p>
@endif
<div class="mt-5 rounded-xl border p-5 {{ $dashboard['statusAlert']['class'] }}">
<h3 class="text-lg font-semibold">{{ $dashboard['statusAlert']['title'] }}</h3>
<p class="mt-3 text-sm leading-7">{{ $dashboard['statusAlert']['description'] }}</p>
@if ($dashboard['statusAlert']['button'])
<div class="mt-4">
<a href="{{ $dashboard['statusAlert']['buttonHref'] }}" class="inline-flex rounded-md px-4 py-2.5 text-sm font-medium {{ $dashboard['statusAlert']['buttonClass'] }}">{{ $dashboard['statusAlert']['button'] }}</a>
</div>
@endif
</div>
</article>
<article id="pengumuman" class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<h2 class="text-xl font-semibold text-[#15171A]">Pengumuman</h2>
<div class="mt-5 rounded-xl border p-5 {{ $dashboard['announcementAlert']['class'] }}">
<h3 class="text-lg font-semibold">{{ $dashboard['announcementAlert']['title'] }}</h3>
<p class="mt-3 text-sm leading-7">{{ $dashboard['announcementAlert']['description'] }}</p>
<div class="mt-4">
<a href="{{ $dashboard['announcementAlert']['buttonHref'] }}" class="inline-flex rounded-md px-4 py-2.5 text-sm font-medium {{ $dashboard['announcementAlert']['buttonClass'] }}">{{ $dashboard['announcementAlert']['button'] }}</a>
</div>
</div>
</article>
</section>
<section id="jadwal" class="space-y-6">
<article class="rounded-xl border border-[#E5E7EB] bg-white p-6 shadow-[0_8px_12px_rgba(13,10,44,0.04)]">
<div class="flex items-center justify-between gap-3">
<div>
<p class="text-sm font-semibold uppercase tracking-[0.16em] text-[#979797]">Jadwal</p>
<h2 class="mt-2 text-xl font-semibold text-[#15171A]">Jadwal Terdekat</h2>
</div>
<span class="rounded-full border border-[#E5E7EB] bg-[#F9FAFB] px-3 py-1 text-xs font-semibold text-[#4B5563]">{{ $dashboard['publishedSchedules'] }} publikasi</span>
</div>
@if ($dashboard['nextSchedule'])
<div class="mt-5 rounded-xl border border-sky-200 bg-sky-50 p-5 text-sky-900">
<p class="text-sm font-semibold uppercase tracking-[0.16em]">{{ $dashboard['nextSchedule']['jenis'] }}</p>
<p class="mt-3 text-lg font-semibold">{{ $dashboard['nextSchedule']['tanggal'] }}</p>
<p class="mt-2 text-sm leading-7">Ruangan: {{ $dashboard['nextSchedule']['ruangan'] }}</p>
</div>
@else
<div class="mt-5 rounded-xl border border-dashed border-[#D1D5DB] bg-[#F9FAFB] p-5 text-sm leading-7 text-[#6B7280]">
Belum ada jadwal seminar yang dipublikasikan untuk mahasiswa ini.
</div>
@endif
</article>
</section>
</div>
</div>
</div>
</main>
</x-layouts.app>

View File

@@ -0,0 +1,46 @@
@switch($icon)
@case('home')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 10.5 12 3l9 7.5"/><path d="M5 9.5V21h14V9.5"/></svg>
@break
@case('folder')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 7.5A2.5 2.5 0 0 1 5.5 5H10l2 2h6.5A2.5 2.5 0 0 1 21 9.5v8A2.5 2.5 0 0 1 18.5 20h-13A2.5 2.5 0 0 1 3 17.5z"/></svg>
@break
@case('briefcase')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 6V4.5h6V6"/><path d="M4 8.5h16v9A2.5 2.5 0 0 1 17.5 20h-11A2.5 2.5 0 0 1 4 17.5z"/><path d="M4 11h16"/></svg>
@break
@case('chat')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M5 6.5A2.5 2.5 0 0 1 7.5 4h9A2.5 2.5 0 0 1 19 6.5v6A2.5 2.5 0 0 1 16.5 15H10l-4 4v-4H7.5A2.5 2.5 0 0 1 5 12.5z"/></svg>
@break
@case('search')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="5.5"/><path d="m16 16 4 4"/></svg>
@break
@case('users')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16.5 19a4.5 4.5 0 0 0-9 0"/><circle cx="12" cy="9" r="3"/><path d="M18.5 18a3.5 3.5 0 0 0-2.5-3.36"/><path d="M8 14.64A3.5 3.5 0 0 0 5.5 18"/></svg>
@break
@case('bell')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4.5a4 4 0 0 0-4 4V11c0 1.4-.5 2.75-1.4 3.82L5.5 16h13l-1.1-1.18A5.74 5.74 0 0 1 16 11V8.5a4 4 0 0 0-4-4Z"/><path d="M10 18a2 2 0 0 0 4 0"/></svg>
@break
@case('megaphone')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 11v2a2 2 0 0 0 2 2h2l3 3V6L8 9H6a2 2 0 0 0-2 2Z"/><path d="M14 8.5a6 6 0 0 1 0 7"/><path d="M16.5 6a9 9 0 0 1 0 12"/></svg>
@break
@case('user')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="3.5"/><path d="M5.5 19a6.5 6.5 0 0 1 13 0"/></svg>
@break
@case('document')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3.5h6l4 4V20a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 7 20V5A1.5 1.5 0 0 1 8.5 3.5Z"/><path d="M14 3.5V8h4"/></svg>
@break
@case('warning')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 4 21 20H3z"/><path d="M12 9v4.5"/><circle cx="12" cy="16.5" r=".8" fill="currentColor" stroke="none"/></svg>
@break
@case('clipboard')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 4.5h6"/><path d="M9.5 3h5A1.5 1.5 0 0 1 16 4.5V6h2A1.5 1.5 0 0 1 19.5 7.5v12A1.5 1.5 0 0 1 18 21h-12a1.5 1.5 0 0 1-1.5-1.5v-12A1.5 1.5 0 0 1 6 6h2V4.5A1.5 1.5 0 0 1 9.5 3Z"/></svg>
@break
@case('clock')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8"/><path d="M12 7.5V12l3 2"/></svg>
@break
@case('chart')
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M5 19.5h14"/><path d="M7.5 17V10"/><path d="M12 17V6.5"/><path d="M16.5 17v-4"/></svg>
@break
@default
<svg viewBox="0 0 24 24" class="h-[18px] w-[18px]" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="7"/></svg>
@endswitch