2026-05-30 22:15:16 +07:00
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
|
|
|
|
|
|
|
|
|
<title>@yield('title', 'Tunggal Pharma LMS')</title>
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
|
|
|
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600,700&display=swap" rel="stylesheet" />
|
|
|
|
|
|
|
|
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
|
|
|
@livewireStyles
|
|
|
|
|
</head>
|
|
|
|
|
<body class="font-sans antialiased text-slate-900 bg-slate-100">
|
|
|
|
|
|
|
|
|
|
<div class="flex h-screen overflow-hidden bg-slate-100">
|
|
|
|
|
|
|
|
|
|
@include('partials.sidebar')
|
|
|
|
|
|
|
|
|
|
<div class="flex-1 flex flex-col overflow-hidden relative">
|
|
|
|
|
|
|
|
|
|
@include('partials.navbar')
|
|
|
|
|
|
|
|
|
|
<main class="flex-1 overflow-y-auto bg-slate-50 p-4 sm:p-6 lg:p-8">
|
|
|
|
|
@yield('content')
|
|
|
|
|
</main>
|
|
|
|
|
|
|
|
|
|
@include('partials.footer')
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
@livewireScripts
|
2026-06-05 13:39:13 +07:00
|
|
|
|
|
|
|
|
@if(session()->has('success') || session()->has('error') || session()->has('info') || session()->has('warning') || $errors->any())
|
|
|
|
|
<div x-data="{ show: true }"
|
|
|
|
|
x-show="show"
|
|
|
|
|
x-init="setTimeout(() => show = false, 5000)"
|
|
|
|
|
x-transition:enter="transform ease-out duration-300 transition"
|
|
|
|
|
x-transition:enter-start="translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-10"
|
|
|
|
|
x-transition:enter-end="translate-y-0 opacity-100 sm:translate-x-0"
|
|
|
|
|
x-transition:leave="transition ease-in duration-200"
|
|
|
|
|
x-transition:leave-start="opacity-100 sm:translate-x-0"
|
|
|
|
|
x-transition:leave-end="opacity-0 sm:translate-x-10"
|
|
|
|
|
class="fixed top-5 right-5 z-[9999] flex w-full max-w-sm overflow-hidden bg-white rounded-xl shadow-2xl border border-slate-100"
|
|
|
|
|
style="display: none;">
|
|
|
|
|
|
|
|
|
|
@if(session('success'))
|
|
|
|
|
<div class="flex items-center justify-center w-12 bg-emerald-500">
|
|
|
|
|
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path></svg>
|
|
|
|
|
</div>
|
|
|
|
|
@elseif(session('error') || $errors->any())
|
|
|
|
|
<div class="flex items-center justify-center w-12 bg-red-500">
|
|
|
|
|
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
|
|
|
|
|
</div>
|
|
|
|
|
@elseif(session('info'))
|
|
|
|
|
<div class="flex items-center justify-center w-12 bg-blue-500">
|
|
|
|
|
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
|
|
|
|
|
</div>
|
|
|
|
|
@elseif(session('warning'))
|
|
|
|
|
<div class="flex items-center justify-center w-12 bg-amber-500">
|
|
|
|
|
<svg class="w-6 h-6 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"></path></svg>
|
|
|
|
|
</div>
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
<div class="px-4 py-3 -mx-3 w-full">
|
|
|
|
|
<div class="mx-3">
|
|
|
|
|
@if(session('success')) <span class="font-bold text-emerald-500">Berhasil!</span>
|
|
|
|
|
@elseif(session('error') || $errors->any()) <span class="font-bold text-red-500">Gagal Menyimpan!</span>
|
|
|
|
|
@elseif(session('info')) <span class="font-bold text-blue-500">Informasi</span>
|
|
|
|
|
@elseif(session('warning')) <span class="font-bold text-amber-500">Peringatan</span>
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
<p class="text-sm text-slate-600 mt-1 font-medium line-clamp-2">
|
|
|
|
|
@if($errors->any())
|
|
|
|
|
{{ $errors->first() }}
|
|
|
|
|
@else
|
|
|
|
|
{{ session('success') ?? session('error') ?? session('info') ?? session('warning') }}
|
|
|
|
|
@endif
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="ml-auto flex items-start px-2 py-2 shrink-0">
|
|
|
|
|
<button @click="show = false" class="text-slate-400 hover:text-slate-600 focus:outline-none transition-colors">
|
|
|
|
|
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="absolute bottom-0 left-0 h-1
|
|
|
|
|
{{ session('success') ? 'bg-emerald-200' : (session('error') || $errors->any() ? 'bg-red-200' : (session('info') ? 'bg-blue-200' : 'bg-amber-200')) }}
|
|
|
|
|
w-full"
|
|
|
|
|
x-data="{ width: '100%' }"
|
|
|
|
|
x-init="setTimeout(() => width = '0%', 50)"
|
|
|
|
|
:style="`width: ${width}; transition: width 5s linear;`">
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
@endif
|
2026-05-30 22:15:16 +07:00
|
|
|
</body>
|
|
|
|
|
</html>
|