removed dark mod and applied fixes for text colors

This commit is contained in:
Naser Mansour 2026-01-08 19:15:02 +02:00
parent ddbb224d07
commit dfee2ff5c8
64 changed files with 744 additions and 711 deletions

View File

@ -6,7 +6,6 @@ return [
'settings' => 'الإعدادات', 'settings' => 'الإعدادات',
'profile' => 'الملف الشخصي', 'profile' => 'الملف الشخصي',
'password' => 'كلمة المرور', 'password' => 'كلمة المرور',
'appearance' => 'المظهر',
'two_factor' => 'المصادقة الثنائية', 'two_factor' => 'المصادقة الثنائية',
'logout' => 'تسجيل الخروج', 'logout' => 'تسجيل الخروج',
'login' => 'تسجيل الدخول', 'login' => 'تسجيل الدخول',

View File

@ -6,7 +6,6 @@ return [
'settings' => 'Settings', 'settings' => 'Settings',
'profile' => 'Profile', 'profile' => 'Profile',
'password' => 'Password', 'password' => 'Password',
'appearance' => 'Appearance',
'two_factor' => 'Two-Factor Authentication', 'two_factor' => 'Two-Factor Authentication',
'logout' => 'Log Out', 'logout' => 'Log Out',
'login' => 'Login', 'login' => 'Login',

View File

@ -9,8 +9,6 @@
@source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php'; @source '../../vendor/livewire/flux-pro/stubs/**/*.blade.php';
@source '../../vendor/livewire/flux/stubs/**/*.blade.php'; @source '../../vendor/livewire/flux/stubs/**/*.blade.php';
@custom-variant dark (&:where(.dark, .dark *));
@theme { @theme {
/* Font definitions - to be updated in typography story */ /* Font definitions - to be updated in typography story */
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
@ -72,14 +70,6 @@
--color-warning: #F39C12; --color-warning: #F39C12;
} }
@layer theme {
.dark {
--color-accent: var(--color-white);
--color-accent-content: var(--color-white);
--color-accent-foreground: var(--color-neutral-800);
}
}
@layer base { @layer base {
*, *,
@ -91,6 +81,112 @@
} }
} }
/* ==========================================================================
Flux UI Light Mode Overrides
Ensure proper text visibility after dark mode removal
========================================================================== */
/* Flux Headings - ensure dark text */
[data-flux-heading] {
color: rgb(24 24 27) !important;
}
/* Flux Text/Subheading - ensure readable gray */
[data-flux-text],
[data-flux-subheading] {
color: rgb(113 113 122) !important;
}
/* Navlist group headings */
[data-flux-navlist-group] > div:first-child {
color: rgb(113 113 122) !important;
}
/* Navlist items */
[data-flux-navlist-item] {
color: rgb(63 63 70) !important;
}
[data-flux-navlist-item]:hover {
color: rgb(24 24 27) !important;
background-color: rgb(244 244 245) !important;
}
[data-flux-navlist-item][data-current="true"],
[data-flux-navlist-item][aria-current="page"] {
color: rgb(24 24 27) !important;
background-color: rgb(244 244 245) !important;
}
/* Flux Menu items */
[data-flux-menu-item] {
color: rgb(63 63 70) !important;
}
[data-flux-menu-item]:hover {
color: rgb(24 24 27) !important;
background-color: rgb(244 244 245) !important;
}
/* Flux Modal content */
[data-flux-modal] {
background-color: rgb(255 255 255) !important;
color: rgb(24 24 27) !important;
}
/* Flux Dropdown/Select */
[data-flux-menu],
[data-flux-listbox] {
background-color: rgb(255 255 255) !important;
border-color: rgb(228 228 231) !important;
}
/* Flux Profile text */
[data-flux-profile] span {
color: rgb(63 63 70) !important;
}
/* Flux Badge - ensure text is visible */
[data-flux-badge] {
color: rgb(255 255 255) !important;
}
/* Flux Badge variants with proper contrast */
[data-flux-badge][data-variant="outline"] {
color: rgb(63 63 70) !important;
}
/* Flux Callout text */
[data-flux-callout],
[data-flux-callout] * {
color: rgb(63 63 70) !important;
}
[data-flux-callout-heading] {
color: rgb(24 24 27) !important;
}
/* Flux Table cells */
[data-flux-table] td,
[data-flux-table] th {
color: rgb(63 63 70) !important;
}
[data-flux-table] th {
color: rgb(24 24 27) !important;
}
/* Flux Card content */
[data-flux-card] {
background-color: rgb(255 255 255) !important;
color: rgb(63 63 70) !important;
}
/* Flux Separator */
[data-flux-separator] {
background-color: rgb(228 228 231) !important;
}
/* ========================================================================== /* ==========================================================================
Logo Badge Styling (Story 12.2) Logo Badge Styling (Story 12.2)
Creates "seal/stamp" effect for logo on Dark Charcoal backgrounds Creates "seal/stamp" effect for logo on Dark Charcoal backgrounds
@ -673,7 +769,7 @@ img, video, iframe {
} }
.timeline-line { .timeline-line {
@apply absolute top-0 bottom-0 w-0.5 bg-zinc-200 dark:bg-zinc-700; @apply absolute top-0 bottom-0 w-0.5 bg-zinc-200;
@apply start-4 sm:start-6; @apply start-4 sm:start-6;
} }

View File

@ -1,10 +1,10 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="dark"> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head> <head>
@include('partials.head') @include('partials.head')
</head> </head>
<body class="min-h-screen bg-white dark:bg-zinc-800"> <body class="min-h-screen bg-white">
<flux:header container class="border-b border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900"> <flux:header container class="border-b border-zinc-200 bg-zinc-50">
<flux:sidebar.toggle class="lg:hidden" icon="bars-2" inset="left" /> <flux:sidebar.toggle class="lg:hidden" icon="bars-2" inset="left" />
<a href="{{ route('dashboard') }}" class="ms-2 me-5 flex items-center space-x-2 rtl:space-x-reverse lg:ms-0" wire:navigate> <a href="{{ route('dashboard') }}" class="ms-2 me-5 flex items-center space-x-2 rtl:space-x-reverse lg:ms-0" wire:navigate>
@ -56,7 +56,7 @@
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm"> <div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg"> <span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
<span <span
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white" class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
> >
{{ auth()->user()->initials() }} {{ auth()->user()->initials() }}
</span> </span>
@ -89,7 +89,7 @@
</flux:header> </flux:header>
<!-- Mobile Menu --> <!-- Mobile Menu -->
<flux:sidebar stashable sticky class="lg:hidden border-e border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900"> <flux:sidebar stashable sticky class="lg:hidden border-e border-zinc-200 bg-zinc-50">
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" /> <flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
<a href="{{ route('dashboard') }}" class="ms-1 flex items-center space-x-2 rtl:space-x-reverse" wire:navigate> <a href="{{ route('dashboard') }}" class="ms-1 flex items-center space-x-2 rtl:space-x-reverse" wire:navigate>

View File

@ -1,15 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}" class="dark"> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
<head> <head>
@include('partials.head') @include('partials.head')
</head> </head>
<body class="min-h-screen bg-white dark:bg-zinc-800" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})"> <body class="min-h-screen bg-white" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
<!-- Skip to content link for keyboard accessibility --> <!-- Skip to content link for keyboard accessibility -->
<a href="#main-content" class="skip-link" data-test="skip-to-content"> <a href="#main-content" class="skip-link" data-test="skip-to-content">
{{ __('accessibility.skip_to_content') }} {{ __('accessibility.skip_to_content') }}
</a> </a>
<flux:sidebar sticky stashable class="border-e border-zinc-200 bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900"> <flux:sidebar sticky stashable class="border-e border-zinc-200 bg-zinc-50 text-zinc-800">
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" /> <flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
@php @php
@ -179,7 +179,7 @@
<div class="px-3 py-2"> <div class="px-3 py-2">
<a <a
href="{{ route('admin.bookings.pending') }}" href="{{ route('admin.bookings.pending') }}"
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800" class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100"
wire:navigate wire:navigate
> >
<flux:icon name="bell" class="h-5 w-5" /> <flux:icon name="bell" class="h-5 w-5" />
@ -222,7 +222,7 @@
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm"> <div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg"> <span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
<span <span
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white" class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
> >
{{ auth()->user()->initials() }} {{ auth()->user()->initials() }}
</span> </span>
@ -266,7 +266,7 @@
@endphp @endphp
<a <a
href="{{ route('admin.bookings.pending') }}" href="{{ route('admin.bookings.pending') }}"
class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100 dark:text-zinc-400 dark:hover:bg-zinc-800" class="relative inline-flex items-center rounded-lg p-2 text-zinc-600 transition-colors hover:bg-zinc-100"
wire:navigate wire:navigate
> >
<flux:icon name="bell" class="h-5 w-5" /> <flux:icon name="bell" class="h-5 w-5" />
@ -293,7 +293,7 @@
<div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm"> <div class="flex items-center gap-2 px-1 py-1.5 text-start text-sm">
<span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg"> <span class="relative flex h-8 w-8 shrink-0 overflow-hidden rounded-lg">
<span <span
class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white" class="flex h-full w-full items-center justify-center rounded-lg bg-neutral-200 text-black"
> >
{{ auth()->user()->initials() }} {{ auth()->user()->initials() }}
</span> </span>

View File

@ -3,7 +3,7 @@
<head> <head>
@include('partials.head') @include('partials.head')
</head> </head>
<body class="min-h-screen bg-neutral-100 antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})"> <body class="min-h-screen bg-neutral-100 antialiased" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
<!-- Skip to content link for keyboard accessibility --> <!-- Skip to content link for keyboard accessibility -->
<a href="#main-content" class="skip-link" data-test="skip-to-content"> <a href="#main-content" class="skip-link" data-test="skip-to-content">
{{ __('accessibility.skip_to_content') }} {{ __('accessibility.skip_to_content') }}
@ -22,7 +22,7 @@
</a> </a>
<div class="flex flex-col gap-6"> <div class="flex flex-col gap-6">
<div class="rounded-xl border bg-white dark:bg-stone-950 dark:border-stone-800 text-stone-800 shadow-xs"> <div class="rounded-xl border bg-white text-stone-800 shadow-xs">
<div class="px-10 py-8">{{ $slot }}</div> <div class="px-10 py-8">{{ $slot }}</div>
</div> </div>
</div> </div>

View File

@ -3,7 +3,7 @@
<head> <head>
@include('partials.head') @include('partials.head')
</head> </head>
<body class="min-h-screen bg-white antialiased dark:bg-linear-to-b dark:from-neutral-950 dark:to-neutral-900" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})"> <body class="min-h-screen bg-white antialiased" style="font-family: var(--font-{{ app()->getLocale() === 'ar' ? 'arabic' : 'english' }})">
<!-- Skip to content link for keyboard accessibility --> <!-- Skip to content link for keyboard accessibility -->
<a href="#main-content" class="skip-link" data-test="skip-to-content"> <a href="#main-content" class="skip-link" data-test="skip-to-content">
{{ __('accessibility.skip_to_content') }} {{ __('accessibility.skip_to_content') }}

View File

@ -6,7 +6,6 @@
@if (Laravel\Fortify\Features::canManageTwoFactorAuthentication()) @if (Laravel\Fortify\Features::canManageTwoFactorAuthentication())
<flux:navlist.item :href="route('two-factor.show')" wire:navigate>{{ __('Two-Factor Auth') }}</flux:navlist.item> <flux:navlist.item :href="route('two-factor.show')" wire:navigate>{{ __('Two-Factor Auth') }}</flux:navlist.item>
@endif @endif
<flux:navlist.item :href="route('appearance.edit')" wire:navigate>{{ __('Appearance') }}</flux:navlist.item>
</flux:navlist> </flux:navlist>
</div> </div>

View File

@ -1,18 +1,18 @@
<x-layouts.app :title="__('Dashboard')"> <x-layouts.app :title="__('Dashboard')">
<div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl"> <div class="flex h-full w-full flex-1 flex-col gap-4 rounded-xl">
<div class="grid auto-rows-min gap-4 md:grid-cols-3"> <div class="grid auto-rows-min gap-4 md:grid-cols-3">
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700"> <div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" /> <x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
</div> </div>
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700"> <div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" /> <x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
</div> </div>
<div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700"> <div class="relative aspect-video overflow-hidden rounded-xl border border-neutral-200">
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" /> <x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
</div> </div>
</div> </div>
<div class="relative h-full flex-1 overflow-hidden rounded-xl border border-neutral-200 dark:border-neutral-700"> <div class="relative h-full flex-1 overflow-hidden rounded-xl border border-neutral-200">
<x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20 dark:stroke-neutral-100/20" /> <x-placeholder-pattern class="absolute inset-0 size-full stroke-gray-900/20" />
</div> </div>
</div> </div>
</x-layouts.app> </x-layouts.app>

View File

@ -13,7 +13,7 @@
> >
<button <button
type="button" type="button"
class="group/disclosure-button mb-[2px] flex h-10 w-full items-center rounded-lg text-zinc-500 hover:bg-zinc-800/5 hover:text-zinc-800 lg:h-8 dark:text-white/80 dark:hover:bg-white/[7%] dark:hover:text-white" class="group/disclosure-button mb-[2px] flex h-10 w-full items-center rounded-lg text-zinc-500 hover:bg-zinc-800/5 hover:text-zinc-800 lg:h-8"
> >
<div class="ps-3 pe-4"> <div class="ps-3 pe-4">
<flux:icon.chevron-down class="hidden size-3! group-data-open/disclosure-button:block" /> <flux:icon.chevron-down class="hidden size-3! group-data-open/disclosure-button:block" />
@ -24,7 +24,7 @@
</button> </button>
<div class="relative hidden space-y-[2px] ps-7 data-open:block" @if ($expanded === true) data-open @endif> <div class="relative hidden space-y-[2px] ps-7 data-open:block" @if ($expanded === true) data-open @endif>
<div class="absolute inset-y-[3px] start-0 ms-4 w-px bg-zinc-200 dark:bg-white/30"></div> <div class="absolute inset-y-[3px] start-0 ms-4 w-px bg-zinc-200"></div>
{{ $slot }} {{ $slot }}
</div> </div>

View File

@ -131,7 +131,7 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('audit.audit_logs') }}</flux:heading> <flux:heading size="xl">{{ __('audit.audit_logs') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('audit.audit_logs_description') }}</p> <p class="text-sm text-zinc-500 mt-1">{{ __('audit.audit_logs_description') }}</p>
</div> </div>
<flux:button wire:click="exportCsv" icon="arrow-down-tray"> <flux:button wire:click="exportCsv" icon="arrow-down-tray">
{{ __('audit.export_csv') }} {{ __('audit.export_csv') }}
@ -139,7 +139,7 @@ new class extends Component
</div> </div>
<!-- Filters --> <!-- Filters -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
<flux:field> <flux:field>
<flux:select wire:model.live="actionFilter"> <flux:select wire:model.live="actionFilter">
@ -188,7 +188,7 @@ new class extends Component
</div> </div>
<!-- Sort Headers --> <!-- Sort Headers -->
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0"> <div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
<span class="w-40">{{ __('audit.timestamp') }}</span> <span class="w-40">{{ __('audit.timestamp') }}</span>
<span class="w-32">{{ __('audit.admin') }}</span> <span class="w-32">{{ __('audit.admin') }}</span>
<span class="w-28">{{ __('audit.action') }}</span> <span class="w-28">{{ __('audit.action') }}</span>
@ -200,18 +200,18 @@ new class extends Component
<!-- Logs List --> <!-- Logs List -->
<div class="space-y-0"> <div class="space-y-0">
@forelse($logs as $log) @forelse($logs as $log)
<div wire:key="log-{{ $log->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}"> <div wire:key="log-{{ $log->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
<div class="flex flex-col lg:flex-row lg:items-center gap-4"> <div class="flex flex-col lg:flex-row lg:items-center gap-4">
<!-- Timestamp --> <!-- Timestamp -->
<div class="lg:w-40"> <div class="lg:w-40">
<div class="text-sm font-medium text-zinc-900 dark:text-zinc-100"> <div class="text-sm font-medium text-zinc-900">
{{ $log->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'd/m/Y H:i' : 'm/d/Y H:i') }} {{ $log->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'd/m/Y H:i' : 'm/d/Y H:i') }}
</div> </div>
</div> </div>
<!-- Admin --> <!-- Admin -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ $log->admin?->name ?? __('audit.system') }} {{ $log->admin?->name ?? __('audit.system') }}
</div> </div>
</div> </div>
@ -234,14 +234,14 @@ new class extends Component
<!-- Target --> <!-- Target -->
<div class="flex-1"> <div class="flex-1">
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ __("audit.target_{$log->target_type}") }} #{{ $log->target_id }} {{ __("audit.target_{$log->target_type}") }} #{{ $log->target_id }}
</div> </div>
</div> </div>
<!-- IP Address --> <!-- IP Address -->
<div class="lg:w-36"> <div class="lg:w-36">
<div class="text-sm text-zinc-500 dark:text-zinc-400 font-mono"> <div class="text-sm text-zinc-500 font-mono">
{{ $log->ip_address }} {{ $log->ip_address }}
</div> </div>
</div> </div>
@ -255,7 +255,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="clipboard-document-list" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="clipboard-document-list" class="w-12 h-12 mx-auto mb-4" />
<p>{{ $actionFilter || $targetFilter || $dateFrom || $dateTo || $search ? __('audit.no_results') : __('audit.no_logs_found') }}</p> <p>{{ $actionFilter || $targetFilter || $dateFrom || $dateTo || $search ? __('audit.no_results') : __('audit.no_logs_found') }}</p>
</div> </div>
@ -274,38 +274,38 @@ new class extends Component
<div class="grid grid-cols-2 gap-4 text-sm"> <div class="grid grid-cols-2 gap-4 text-sm">
<div> <div>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.timestamp') }}:</span> <span class="font-medium text-zinc-500">{{ __('audit.timestamp') }}:</span>
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ $selectedLog->created_at->format('Y-m-d H:i:s') }}</span> <span class="ms-2 text-zinc-900">{{ $selectedLog->created_at->format('Y-m-d H:i:s') }}</span>
</div> </div>
<div> <div>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.admin') }}:</span> <span class="font-medium text-zinc-500">{{ __('audit.admin') }}:</span>
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ $selectedLog->admin?->name ?? __('audit.system') }}</span> <span class="ms-2 text-zinc-900">{{ $selectedLog->admin?->name ?? __('audit.system') }}</span>
</div> </div>
<div> <div>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.action') }}:</span> <span class="font-medium text-zinc-500">{{ __('audit.action') }}:</span>
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ __("audit.action_{$selectedLog->action}") }}</span> <span class="ms-2 text-zinc-900">{{ __("audit.action_{$selectedLog->action}") }}</span>
</div> </div>
<div> <div>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.target') }}:</span> <span class="font-medium text-zinc-500">{{ __('audit.target') }}:</span>
<span class="ms-2 text-zinc-900 dark:text-zinc-100">{{ __("audit.target_{$selectedLog->target_type}") }} #{{ $selectedLog->target_id }}</span> <span class="ms-2 text-zinc-900">{{ __("audit.target_{$selectedLog->target_type}") }} #{{ $selectedLog->target_id }}</span>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ __('audit.ip_address') }}:</span> <span class="font-medium text-zinc-500">{{ __('audit.ip_address') }}:</span>
<span class="ms-2 text-zinc-900 dark:text-zinc-100 font-mono">{{ $selectedLog->ip_address }}</span> <span class="ms-2 text-zinc-900 font-mono">{{ $selectedLog->ip_address }}</span>
</div> </div>
</div> </div>
@if($selectedLog->old_values) @if($selectedLog->old_values)
<div> <div>
<strong class="text-zinc-700 dark:text-zinc-300">{{ __('audit.old_values') }}:</strong> <strong class="text-zinc-700">{{ __('audit.old_values') }}:</strong>
<pre class="bg-zinc-100 dark:bg-zinc-900 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800 dark:text-zinc-200" dir="ltr">{{ json_encode($selectedLog->old_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre> <pre class="bg-zinc-100 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800" dir="ltr">{{ json_encode($selectedLog->old_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
</div> </div>
@endif @endif
@if($selectedLog->new_values) @if($selectedLog->new_values)
<div> <div>
<strong class="text-zinc-700 dark:text-zinc-300">{{ __('audit.new_values') }}:</strong> <strong class="text-zinc-700">{{ __('audit.new_values') }}:</strong>
<pre class="bg-zinc-100 dark:bg-zinc-900 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800 dark:text-zinc-200" dir="ltr">{{ json_encode($selectedLog->new_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre> <pre class="bg-zinc-100 p-3 rounded-lg text-sm overflow-auto mt-2 text-zinc-800" dir="ltr">{{ json_encode($selectedLog->new_values, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) }}</pre>
</div> </div>
@endif @endif

View File

@ -182,7 +182,7 @@ new class extends Component
@endif @endif
<!-- Filters --> <!-- Filters -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
<div class="flex flex-col sm:flex-row gap-4 items-end"> <div class="flex flex-col sm:flex-row gap-4 items-end">
<flux:field class="flex-1"> <flux:field class="flex-1">
<flux:label>{{ __('admin.date_from') }}</flux:label> <flux:label>{{ __('admin.date_from') }}</flux:label>
@ -205,7 +205,7 @@ new class extends Component
<!-- Bookings List --> <!-- Bookings List -->
<div class="space-y-4"> <div class="space-y-4">
@forelse($bookings as $booking) @forelse($bookings as $booking)
<div wire:key="booking-{{ $booking->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700"> <div wire:key="booking-{{ $booking->id }}" class="bg-white rounded-lg p-4 border border-zinc-200">
<div class="flex flex-col lg:flex-row lg:items-start justify-between gap-4"> <div class="flex flex-col lg:flex-row lg:items-start justify-between gap-4">
<!-- Booking Info --> <!-- Booking Info -->
<div class="flex-1"> <div class="flex-1">
@ -213,7 +213,7 @@ new class extends Component
@if($booking->isGuest()) @if($booking->isGuest())
<flux:badge color="amber" size="sm">{{ __('admin.guest') }}</flux:badge> <flux:badge color="amber" size="sm">{{ __('admin.guest') }}</flux:badge>
@endif @endif
<span class="font-semibold text-zinc-900 dark:text-zinc-100"> <span class="font-semibold text-zinc-900">
{{ $booking->getClientName() }} {{ $booking->getClientName() }}
</span> </span>
<flux:badge variant="warning" size="sm"> <flux:badge variant="warning" size="sm">
@ -221,7 +221,7 @@ new class extends Component
</flux:badge> </flux:badge>
</div> </div>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-zinc-600 dark:text-zinc-400"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-zinc-600">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<flux:icon name="calendar" class="w-4 h-4" /> <flux:icon name="calendar" class="w-4 h-4" />
{{ \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('l, d M Y') }} {{ \Carbon\Carbon::parse($booking->booking_date)->translatedFormat('l, d M Y') }}
@ -242,7 +242,7 @@ new class extends Component
</div> </div>
</div> </div>
<p class="mt-3 text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2"> <p class="mt-3 text-sm text-zinc-600 line-clamp-2">
{{ Str::limit($booking->problem_summary, 150) }} {{ Str::limit($booking->problem_summary, 150) }}
</p> </p>
</div> </div>
@ -279,7 +279,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
<p>{{ __('admin.no_pending_bookings') }}</p> <p>{{ __('admin.no_pending_bookings') }}</p>
</div> </div>

View File

@ -210,7 +210,7 @@ new class extends Component
@endif @endif
<!-- Client/Guest Information --> <!-- Client/Guest Information -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
<div class="flex items-center gap-2 mb-4"> <div class="flex items-center gap-2 mb-4">
<flux:heading size="lg">{{ __('admin.client_information') }}</flux:heading> <flux:heading size="lg">{{ __('admin.client_information') }}</flux:heading>
@if($consultation->isGuest()) @if($consultation->isGuest())
@ -220,22 +220,22 @@ new class extends Component
<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_name') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.client_name') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ $consultation->getClientName() }} {{ $consultation->getClientName() }}
</p> </p>
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_email') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.client_email') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
<a href="mailto:{{ $consultation->getClientEmail() }}" class="text-primary hover:underline"> <a href="mailto:{{ $consultation->getClientEmail() }}" class="text-primary hover:underline">
{{ $consultation->getClientEmail() }} {{ $consultation->getClientEmail() }}
</a> </a>
</p> </p>
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_phone') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.client_phone') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
@if($consultation->getClientPhone()) @if($consultation->getClientPhone())
<a href="tel:{{ $consultation->getClientPhone() }}" class="text-primary hover:underline"> <a href="tel:{{ $consultation->getClientPhone() }}" class="text-primary hover:underline">
{{ $consultation->getClientPhone() }} {{ $consultation->getClientPhone() }}
@ -247,8 +247,8 @@ new class extends Component
</div> </div>
@unless($consultation->isGuest()) @unless($consultation->isGuest())
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_type') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.client_type') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ ucfirst($consultation->user?->user_type?->value ?? '-') }} {{ ucfirst($consultation->user?->user_type?->value ?? '-') }}
</p> </p>
</div> </div>
@ -257,30 +257,30 @@ new class extends Component
</div> </div>
<!-- Booking Details --> <!-- Booking Details -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4">
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_date') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.requested_date') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }} {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}
</p> </p>
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_time') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.requested_time') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</p> </p>
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.submission_date') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.submission_date') }}</p>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ $consultation->created_at->translatedFormat('d M Y, g:i A') }} {{ $consultation->created_at->translatedFormat('d M Y, g:i A') }}
</p> </p>
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.current_status') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.current_status') }}</p>
<flux:badge :variant="match($consultation->status) { <flux:badge :variant="match($consultation->status) {
ConsultationStatus::Pending => 'warning', ConsultationStatus::Pending => 'warning',
ConsultationStatus::Approved => 'success', ConsultationStatus::Approved => 'success',
@ -293,8 +293,8 @@ new class extends Component
</div> </div>
<div> <div>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">{{ __('admin.problem_summary') }}</p> <p class="text-sm text-zinc-500 mb-2">{{ __('admin.problem_summary') }}</p>
<p class="text-zinc-900 dark:text-zinc-100 whitespace-pre-wrap"> <p class="text-zinc-900 whitespace-pre-wrap">
{{ $consultation->problem_summary }} {{ $consultation->problem_summary }}
</p> </p>
</div> </div>
@ -302,17 +302,17 @@ new class extends Component
<!-- Consultation History --> <!-- Consultation History -->
@if($consultationHistory->count() > 0) @if($consultationHistory->count() > 0)
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-6 border border-zinc-200 mb-6">
<flux:heading size="lg" class="mb-4">{{ __('admin.consultation_history') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.consultation_history') }}</flux:heading>
<div class="space-y-3"> <div class="space-y-3">
@foreach($consultationHistory as $history) @foreach($consultationHistory as $history)
<div class="flex items-center justify-between p-3 bg-zinc-50 dark:bg-zinc-700 rounded-lg"> <div class="flex items-center justify-between p-3 bg-zinc-50 rounded-lg">
<div> <div>
<p class="font-medium text-zinc-900 dark:text-zinc-100"> <p class="font-medium text-zinc-900">
{{ \Carbon\Carbon::parse($history->booking_date)->translatedFormat('d M Y') }} {{ \Carbon\Carbon::parse($history->booking_date)->translatedFormat('d M Y') }}
</p> </p>
<p class="text-sm text-zinc-500 dark:text-zinc-400"> <p class="text-sm text-zinc-500">
{{ $history->consultation_type?->value ?? '-' }} {{ $history->consultation_type?->value ?? '-' }}
</p> </p>
</div> </div>
@ -350,7 +350,7 @@ new class extends Component
<flux:heading size="lg">{{ __('admin.approve_booking') }}</flux:heading> <flux:heading size="lg">{{ __('admin.approve_booking') }}</flux:heading>
<!-- Client Info Summary --> <!-- Client Info Summary -->
<div class="bg-zinc-50 dark:bg-zinc-700 p-4 rounded-lg"> <div class="bg-zinc-50 p-4 rounded-lg">
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p> <p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p> <p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p> <p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>
@ -405,7 +405,7 @@ new class extends Component
<flux:heading size="lg">{{ __('admin.reject_booking') }}</flux:heading> <flux:heading size="lg">{{ __('admin.reject_booking') }}</flux:heading>
<!-- Client Info Summary --> <!-- Client Info Summary -->
<div class="bg-zinc-50 dark:bg-zinc-700 p-4 rounded-lg"> <div class="bg-zinc-50 p-4 rounded-lg">
<p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p> <p><strong>{{ __('admin.client') }}:</strong> {{ $consultation->getClientName() }}</p>
<p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p> <p><strong>{{ __('admin.date') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('l, d M Y') }}</p>
<p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p> <p><strong>{{ __('admin.time') }}:</strong> {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}</p>

View File

@ -87,10 +87,10 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.create_company') }}</flux:heading> <flux:heading size="xl">{{ __('clients.create_company') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.company_clients') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('clients.company_clients') }}</flux:text>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="create" class="space-y-6"> <form wire:submit="create" class="space-y-6">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<flux:field> <flux:field>
@ -174,7 +174,7 @@ new class extends Component {
</flux:field> </flux:field>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
{{ __('clients.cancel') }} {{ __('clients.cancel') }}
</flux:button> </flux:button>

View File

@ -111,10 +111,10 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.edit_company') }}</flux:heading> <flux:heading size="xl">{{ __('clients.edit_company') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->company_name }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ $client->company_name }}</flux:text>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="update" class="space-y-6"> <form wire:submit="update" class="space-y-6">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<flux:field> <flux:field>
@ -210,7 +210,7 @@ new class extends Component {
</flux:field> </flux:field>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.clients.company.index')" wire:navigate>
{{ __('clients.cancel') }} {{ __('clients.cancel') }}
</flux:button> </flux:button>

View File

@ -55,7 +55,7 @@ new class extends Component {
<div class="page-header mb-6"> <div class="page-header mb-6">
<div> <div>
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.company_clients') }}</flux:heading> <flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.company_clients') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.clients') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('clients.clients') }}</flux:text>
</div> </div>
<div class="header-actions"> <div class="header-actions">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center"> <flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
@ -67,7 +67,7 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4">
<div class="flex flex-col gap-4 sm:flex-row sm:items-end"> <div class="flex flex-col gap-4 sm:flex-row sm:items-end">
<div class="flex-1"> <div class="flex-1">
<flux:input <flux:input
@ -101,50 +101,50 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="overflow-hidden rounded-lg border border-zinc-200 bg-white">
<div class="table-scroll-wrapper"> <div class="table-scroll-wrapper">
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700"> <table class="min-w-full divide-y divide-zinc-200">
<thead class="bg-zinc-50 dark:bg-zinc-900"> <thead class="bg-zinc-50">
<tr> <tr>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.company_name') }} {{ __('clients.company_name') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.contact_person') }} {{ __('clients.contact_person') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.email') }} {{ __('clients.email') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.registration_number') }} {{ __('clients.registration_number') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.status') }} {{ __('clients.status') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.created_at') }} {{ __('clients.created_at') }}
</th> </th>
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.actions') }} {{ __('clients.actions') }}
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody class="divide-y divide-zinc-200 bg-white dark:divide-zinc-700 dark:bg-zinc-800"> <tbody class="divide-y divide-zinc-200 bg-white">
@forelse ($clients as $client) @forelse ($clients as $client)
<tr wire:key="client-{{ $client->id }}"> <tr wire:key="client-{{ $client->id }}">
<td class="whitespace-nowrap px-6 py-4"> <td class="whitespace-nowrap px-6 py-4">
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<flux:avatar size="sm" :name="$client->company_name" /> <flux:avatar size="sm" :name="$client->company_name" />
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->company_name }}</span> <span class="font-medium text-zinc-900">{{ $client->company_name }}</span>
</div> </div>
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->contact_person_name }} {{ $client->contact_person_name }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->email }} {{ $client->email }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->company_cert_number }} {{ $client->company_cert_number }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4"> <td class="whitespace-nowrap px-6 py-4">
@ -154,7 +154,7 @@ new class extends Component {
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge> <flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
@endif @endif
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->created_at->format('Y-m-d') }} {{ $client->created_at->format('Y-m-d') }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-end"> <td class="whitespace-nowrap px-6 py-4 text-end">
@ -183,7 +183,7 @@ new class extends Component {
<td colspan="7" class="px-6 py-12 text-center"> <td colspan="7" class="px-6 py-12 text-center">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<flux:icon name="building-office" class="mb-4 h-12 w-12 text-zinc-400" /> <flux:icon name="building-office" class="mb-4 h-12 w-12 text-zinc-400" />
<flux:text class="text-zinc-500 dark:text-zinc-400"> <flux:text class="text-zinc-500">
@if ($search || $statusFilter) @if ($search || $statusFilter)
{{ __('clients.no_companies_match') }} {{ __('clients.no_companies_match') }}
@else @else
@ -204,7 +204,7 @@ new class extends Component {
</div> </div>
@if ($clients->hasPages()) @if ($clients->hasPages())
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4 dark:border-zinc-700 dark:bg-zinc-900"> <div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4">
{{ $clients->links() }} {{ $clients->links() }}
</div> </div>
@endif @endif

View File

@ -29,7 +29,7 @@ new class extends Component {
</flux:button> </flux:button>
</div> </div>
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" x-data x-on:click="$flux.modal('convert-to-individual').show()" icon="user"> <flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50" x-data x-on:click="$flux.modal('convert-to-individual').show()" icon="user">
{{ __('clients.convert_to_individual') }} {{ __('clients.convert_to_individual') }}
</flux:button> </flux:button>
<flux:button variant="primary" :href="route('admin.clients.company.edit', $client)" wire:navigate icon="pencil"> <flux:button variant="primary" :href="route('admin.clients.company.edit', $client)" wire:navigate icon="pencil">
@ -40,14 +40,14 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.company_profile') }}</flux:heading> <flux:heading size="xl">{{ __('clients.company_profile') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->company_name }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ $client->company_name }}</flux:text>
</div> </div>
<div class="grid gap-6 lg:grid-cols-3"> <div class="grid gap-6 lg:grid-cols-3">
{{-- Company Information --}} {{-- Company Information --}}
<div class="lg:col-span-2"> <div class="lg:col-span-2">
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.company_information') }}</flux:heading> <flux:heading size="lg">{{ __('clients.company_information') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
@ -56,37 +56,37 @@ new class extends Component {
<div class="flex-1"> <div class="flex-1">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.company_name') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.company_name') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->company_name }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->company_name }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.registration_number') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.registration_number') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->company_cert_number }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->company_cert_number }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_name') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.contact_person_name') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->contact_person_name }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->contact_person_name }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_id') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.contact_person_id') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->contact_person_id }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->contact_person_id }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.email') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.email') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->email }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->email }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.phone') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.phone') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->phone }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->phone }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.preferred_language') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.preferred_language') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100"> <flux:text class="mt-1 text-zinc-900">
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }} {{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
</flux:text> </flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.status') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.status') }}</flux:text>
<div class="mt-1"> <div class="mt-1">
@if ($client->status === UserStatus::Active) @if ($client->status === UserStatus::Active)
<flux:badge color="green">{{ __('clients.active') }}</flux:badge> <flux:badge color="green">{{ __('clients.active') }}</flux:badge>
@ -96,12 +96,12 @@ new class extends Component {
</div> </div>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.member_since') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.member_since') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->created_at->format('Y-m-d') }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->created_at->format('Y-m-d') }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.user_type') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.user_type') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ __('clients.company') }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ __('clients.company') }}</flux:text>
</div> </div>
</div> </div>
</div> </div>
@ -113,34 +113,34 @@ new class extends Component {
{{-- Stats Sidebar --}} {{-- Stats Sidebar --}}
<div class="space-y-6"> <div class="space-y-6">
{{-- Consultation Summary --}} {{-- Consultation Summary --}}
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading> <flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
<div class="space-y-4"> <div class="space-y-4">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.total_consultations') }}</flux:text>
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge> <flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.pending_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.pending_consultations') }}</flux:text>
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge> <flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.completed_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.completed_consultations') }}</flux:text>
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge> <flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
</div> </div>
</div> </div>
@if ($client->consultations_count > 0) @if ($client->consultations_count > 0)
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.view_all_consultations') }} {{ __('clients.view_all_consultations') }}
</flux:text> </flux:text>
</div> </div>
@else @else
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.no_consultations') }} {{ __('clients.no_consultations') }}
</flux:text> </flux:text>
</div> </div>
@ -149,30 +149,30 @@ new class extends Component {
</div> </div>
{{-- Timeline Summary --}} {{-- Timeline Summary --}}
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading> <flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
<div class="space-y-4"> <div class="space-y-4">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_timelines') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.total_timelines') }}</flux:text>
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge> <flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.active_timelines') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.active_timelines') }}</flux:text>
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge> <flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
</div> </div>
</div> </div>
@if ($client->timelines_count > 0) @if ($client->timelines_count > 0)
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.view_all_timelines') }} {{ __('clients.view_all_timelines') }}
</flux:text> </flux:text>
</div> </div>
@else @else
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.no_timelines') }} {{ __('clients.no_timelines') }}
</flux:text> </flux:text>
</div> </div>
@ -183,7 +183,7 @@ new class extends Component {
</div> </div>
{{-- Lifecycle Actions Section --}} {{-- Lifecycle Actions Section --}}
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
<livewire:admin.clients.lifecycle-actions :client="$client" /> <livewire:admin.clients.lifecycle-actions :client="$client" />
</div> </div>

View File

@ -54,41 +54,41 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('admin.client_consultations') }}</flux:heading> <flux:heading size="xl">{{ __('admin.client_consultations') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ $user->full_name }}</p> <p class="text-sm text-zinc-500 mt-1">{{ $user->full_name }}</p>
</div> </div>
</div> </div>
<!-- Statistics --> <!-- Statistics -->
<div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6"> <div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-6">
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center"> <div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
<p class="text-2xl font-bold text-zinc-900 dark:text-zinc-100">{{ $statistics['total'] }}</p> <p class="text-2xl font-bold text-zinc-900">{{ $statistics['total'] }}</p>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.total_consultations') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.total_consultations') }}</p>
</div> </div>
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center"> <div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
<p class="text-2xl font-bold text-green-600 dark:text-green-400">{{ $statistics['completed'] }}</p> <p class="text-2xl font-bold text-green-600">{{ $statistics['completed'] }}</p>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.completed_consultations') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.completed_consultations') }}</p>
</div> </div>
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center"> <div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
<p class="text-2xl font-bold text-red-600 dark:text-red-400">{{ $statistics['cancelled'] }}</p> <p class="text-2xl font-bold text-red-600">{{ $statistics['cancelled'] }}</p>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.cancelled_consultations') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.cancelled_consultations') }}</p>
</div> </div>
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 text-center"> <div class="bg-white rounded-lg p-4 border border-zinc-200 text-center">
<p class="text-2xl font-bold text-amber-600 dark:text-amber-400">{{ $statistics['no_show'] }}</p> <p class="text-2xl font-bold text-amber-600">{{ $statistics['no_show'] }}</p>
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.no_show_consultations') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.no_show_consultations') }}</p>
</div> </div>
</div> </div>
<!-- Consultations List --> <!-- Consultations List -->
<div class="space-y-4"> <div class="space-y-4">
@forelse($consultations as $consultation) @forelse($consultations as $consultation)
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700"> <div wire:key="consultation-{{ $consultation->id }}" class="bg-white rounded-lg p-4 border border-zinc-200">
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4"> <div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-3 mb-2"> <div class="flex items-center gap-3 mb-2">
<span class="font-medium text-zinc-900 dark:text-zinc-100"> <span class="font-medium text-zinc-900">
{{ $consultation->booking_date->translatedFormat('l, d M Y') }} {{ $consultation->booking_date->translatedFormat('l, d M Y') }}
</span> </span>
<span class="text-zinc-500 dark:text-zinc-400"> <span class="text-zinc-500">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</span> </span>
</div> </div>
@ -127,7 +127,7 @@ new class extends Component
</div> </div>
@if($consultation->problem_summary) @if($consultation->problem_summary)
<p class="mt-2 text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2"> <p class="mt-2 text-sm text-zinc-600 line-clamp-2">
{{ Str::limit($consultation->problem_summary, 150) }} {{ Str::limit($consultation->problem_summary, 150) }}
</p> </p>
@endif @endif
@ -144,7 +144,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
<p>{{ __('admin.no_consultations') }}</p> <p>{{ __('admin.no_consultations') }}</p>
</div> </div>

View File

@ -99,7 +99,7 @@ new class extends Component {
<div class="space-y-6"> <div class="space-y-6">
<div> <div>
<flux:heading size="lg">{{ __('clients.convert_to_company') }}</flux:heading> <flux:heading size="lg">{{ __('clients.convert_to_company') }}</flux:heading>
<flux:text class="mt-2 text-zinc-600 dark:text-zinc-400"> <flux:text class="mt-2 text-zinc-600">
{{ __('clients.convert_to_company_description') }} {{ __('clients.convert_to_company_description') }}
</flux:text> </flux:text>
</div> </div>
@ -146,18 +146,18 @@ new class extends Component {
<flux:callout.text>{{ __('clients.confirm_conversion_to_company_message') }}</flux:callout.text> <flux:callout.text>{{ __('clients.confirm_conversion_to_company_message') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="rounded-lg border border-zinc-200 p-4 dark:border-zinc-700"> <div class="rounded-lg border border-zinc-200 p-4">
<div class="space-y-2 text-sm"> <div class="space-y-2 text-sm">
<div class="flex justify-between"> <div class="flex justify-between">
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.company_name') }}:</span> <span class="text-zinc-500">{{ __('clients.company_name') }}:</span>
<span class="font-medium">{{ $company_name }}</span> <span class="font-medium">{{ $company_name }}</span>
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.registration_number') }}:</span> <span class="text-zinc-500">{{ __('clients.registration_number') }}:</span>
<span class="font-medium">{{ $company_cert_number }}</span> <span class="font-medium">{{ $company_cert_number }}</span>
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.contact_person_name') }}:</span> <span class="text-zinc-500">{{ __('clients.contact_person_name') }}:</span>
<span class="font-medium">{{ $contact_person_name }}</span> <span class="font-medium">{{ $contact_person_name }}</span>
</div> </div>
</div> </div>

View File

@ -93,7 +93,7 @@ new class extends Component {
<div class="space-y-6"> <div class="space-y-6">
<div> <div>
<flux:heading size="lg">{{ __('clients.convert_to_individual') }}</flux:heading> <flux:heading size="lg">{{ __('clients.convert_to_individual') }}</flux:heading>
<flux:text class="mt-2 text-zinc-600 dark:text-zinc-400"> <flux:text class="mt-2 text-zinc-600">
{{ __('clients.convert_to_individual_description') }} {{ __('clients.convert_to_individual_description') }}
</flux:text> </flux:text>
</div> </div>
@ -132,14 +132,14 @@ new class extends Component {
<flux:callout.text>{{ __('clients.confirm_conversion_to_individual_message') }}</flux:callout.text> <flux:callout.text>{{ __('clients.confirm_conversion_to_individual_message') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="rounded-lg border border-zinc-200 p-4 dark:border-zinc-700"> <div class="rounded-lg border border-zinc-200 p-4">
<div class="space-y-2 text-sm"> <div class="space-y-2 text-sm">
<div class="flex justify-between"> <div class="flex justify-between">
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.full_name') }}:</span> <span class="text-zinc-500">{{ __('clients.full_name') }}:</span>
<span class="font-medium">{{ $full_name }}</span> <span class="font-medium">{{ $full_name }}</span>
</div> </div>
<div class="flex justify-between"> <div class="flex justify-between">
<span class="text-zinc-500 dark:text-zinc-400">{{ __('clients.national_id') }}:</span> <span class="text-zinc-500">{{ __('clients.national_id') }}:</span>
<span class="font-medium">{{ $national_id }}</span> <span class="font-medium">{{ $national_id }}</span>
</div> </div>
</div> </div>

View File

@ -80,10 +80,10 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.create_client') }}</flux:heading> <flux:heading size="xl">{{ __('clients.create_client') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.individual_clients') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('clients.individual_clients') }}</flux:text>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="create" class="space-y-6"> <form wire:submit="create" class="space-y-6">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<flux:field> <flux:field>
@ -147,7 +147,7 @@ new class extends Component {
</flux:field> </flux:field>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
{{ __('clients.cancel') }} {{ __('clients.cancel') }}
</flux:button> </flux:button>

View File

@ -102,10 +102,10 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.edit_client') }}</flux:heading> <flux:heading size="xl">{{ __('clients.edit_client') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->full_name }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ $client->full_name }}</flux:text>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="update" class="space-y-6"> <form wire:submit="update" class="space-y-6">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<flux:field> <flux:field>
@ -181,7 +181,7 @@ new class extends Component {
</flux:field> </flux:field>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.clients.individual.index')" wire:navigate>
{{ __('clients.cancel') }} {{ __('clients.cancel') }}
</flux:button> </flux:button>

View File

@ -55,7 +55,7 @@ new class extends Component {
<div class="page-header mb-6"> <div class="page-header mb-6">
<div> <div>
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.individual_clients') }}</flux:heading> <flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('clients.individual_clients') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('clients.clients') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('clients.clients') }}</flux:text>
</div> </div>
<div class="header-actions"> <div class="header-actions">
<flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center"> <flux:button :href="route('admin.users.export')" wire:navigate icon="arrow-down-tray" class="w-full sm:w-auto justify-center">
@ -67,7 +67,7 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-4">
<div class="flex flex-col gap-4 sm:flex-row sm:items-end"> <div class="flex flex-col gap-4 sm:flex-row sm:items-end">
<div class="flex-1"> <div class="flex-1">
<flux:input <flux:input
@ -101,50 +101,50 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="overflow-hidden rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="overflow-hidden rounded-lg border border-zinc-200 bg-white">
<div class="table-scroll-wrapper"> <div class="table-scroll-wrapper">
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700"> <table class="min-w-full divide-y divide-zinc-200">
<thead class="bg-zinc-50 dark:bg-zinc-900"> <thead class="bg-zinc-50">
<tr> <tr>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.full_name') }} {{ __('clients.full_name') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.email') }} {{ __('clients.email') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.national_id') }} {{ __('clients.national_id') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.phone') }} {{ __('clients.phone') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.status') }} {{ __('clients.status') }}
</th> </th>
<th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-start text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.created_at') }} {{ __('clients.created_at') }}
</th> </th>
<th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400"> <th class="px-6 py-3 text-end text-xs font-medium uppercase tracking-wider text-zinc-500">
{{ __('clients.actions') }} {{ __('clients.actions') }}
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody class="divide-y divide-zinc-200 bg-white dark:divide-zinc-700 dark:bg-zinc-800"> <tbody class="divide-y divide-zinc-200 bg-white">
@forelse ($clients as $client) @forelse ($clients as $client)
<tr wire:key="client-{{ $client->id }}"> <tr wire:key="client-{{ $client->id }}">
<td class="whitespace-nowrap px-6 py-4"> <td class="whitespace-nowrap px-6 py-4">
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<flux:avatar size="sm" :name="$client->full_name" /> <flux:avatar size="sm" :name="$client->full_name" />
<span class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</span> <span class="font-medium text-zinc-900">{{ $client->full_name }}</span>
</div> </div>
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->email }} {{ $client->email }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->national_id }} {{ $client->national_id }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->phone }} {{ $client->phone }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4"> <td class="whitespace-nowrap px-6 py-4">
@ -154,7 +154,7 @@ new class extends Component {
<flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge> <flux:badge color="red" size="sm">{{ __('clients.deactivated') }}</flux:badge>
@endif @endif
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-zinc-600 dark:text-zinc-400"> <td class="whitespace-nowrap px-6 py-4 text-zinc-600">
{{ $client->created_at->format('Y-m-d') }} {{ $client->created_at->format('Y-m-d') }}
</td> </td>
<td class="whitespace-nowrap px-6 py-4 text-end"> <td class="whitespace-nowrap px-6 py-4 text-end">
@ -183,7 +183,7 @@ new class extends Component {
<td colspan="7" class="px-6 py-12 text-center"> <td colspan="7" class="px-6 py-12 text-center">
<div class="flex flex-col items-center"> <div class="flex flex-col items-center">
<flux:icon name="users" class="mb-4 h-12 w-12 text-zinc-400" /> <flux:icon name="users" class="mb-4 h-12 w-12 text-zinc-400" />
<flux:text class="text-zinc-500 dark:text-zinc-400"> <flux:text class="text-zinc-500">
@if ($search || $statusFilter) @if ($search || $statusFilter)
{{ __('clients.no_clients_match') }} {{ __('clients.no_clients_match') }}
@else @else
@ -204,7 +204,7 @@ new class extends Component {
</div> </div>
@if ($clients->hasPages()) @if ($clients->hasPages())
<div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4 dark:border-zinc-700 dark:bg-zinc-900"> <div class="border-t border-zinc-200 bg-zinc-50 px-6 py-4">
{{ $clients->links() }} {{ $clients->links() }}
</div> </div>
@endif @endif

View File

@ -29,7 +29,7 @@ new class extends Component {
</flux:button> </flux:button>
</div> </div>
<div class="flex flex-wrap gap-2"> <div class="flex flex-wrap gap-2">
<flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" x-data x-on:click="$flux.modal('convert-to-company').show()" icon="building-office"> <flux:button variant="ghost" class="border border-amber-500 text-amber-600 hover:bg-amber-50" x-data x-on:click="$flux.modal('convert-to-company').show()" icon="building-office">
{{ __('clients.convert_to_company') }} {{ __('clients.convert_to_company') }}
</flux:button> </flux:button>
<flux:button variant="primary" :href="route('admin.clients.individual.edit', $client)" wire:navigate icon="pencil"> <flux:button variant="primary" :href="route('admin.clients.individual.edit', $client)" wire:navigate icon="pencil">
@ -40,14 +40,14 @@ new class extends Component {
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('clients.client_profile') }}</flux:heading> <flux:heading size="xl">{{ __('clients.client_profile') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ $client->full_name }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ $client->full_name }}</flux:text>
</div> </div>
<div class="grid gap-6 lg:grid-cols-3"> <div class="grid gap-6 lg:grid-cols-3">
{{-- Client Information --}} {{-- Client Information --}}
<div class="lg:col-span-2"> <div class="lg:col-span-2">
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.client_information') }}</flux:heading> <flux:heading size="lg">{{ __('clients.client_information') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
@ -56,29 +56,29 @@ new class extends Component {
<div class="flex-1"> <div class="flex-1">
<div class="grid gap-6 sm:grid-cols-2"> <div class="grid gap-6 sm:grid-cols-2">
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.full_name') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.full_name') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->full_name }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.national_id') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.national_id') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->national_id }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->national_id }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.email') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.email') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->email }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->email }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.phone') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.phone') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->phone }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->phone }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.preferred_language') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.preferred_language') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100"> <flux:text class="mt-1 text-zinc-900">
{{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }} {{ $client->preferred_language === 'ar' ? __('clients.arabic') : __('clients.english') }}
</flux:text> </flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.status') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.status') }}</flux:text>
<div class="mt-1"> <div class="mt-1">
@if ($client->status === UserStatus::Active) @if ($client->status === UserStatus::Active)
<flux:badge color="green">{{ __('clients.active') }}</flux:badge> <flux:badge color="green">{{ __('clients.active') }}</flux:badge>
@ -88,12 +88,12 @@ new class extends Component {
</div> </div>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.member_since') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.member_since') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ $client->created_at->format('Y-m-d') }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ $client->created_at->format('Y-m-d') }}</flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-500 dark:text-zinc-400">{{ __('clients.user_type') }}</flux:text> <flux:text class="text-sm font-medium text-zinc-500">{{ __('clients.user_type') }}</flux:text>
<flux:text class="mt-1 text-zinc-900 dark:text-zinc-100">{{ __('clients.individual') }}</flux:text> <flux:text class="mt-1 text-zinc-900">{{ __('clients.individual') }}</flux:text>
</div> </div>
</div> </div>
</div> </div>
@ -105,34 +105,34 @@ new class extends Component {
{{-- Stats Sidebar --}} {{-- Stats Sidebar --}}
<div class="space-y-6"> <div class="space-y-6">
{{-- Consultation Summary --}} {{-- Consultation Summary --}}
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading> <flux:heading size="lg">{{ __('clients.consultation_history') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
<div class="space-y-4"> <div class="space-y-4">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.total_consultations') }}</flux:text>
<flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge> <flux:badge color="zinc">{{ $client->consultations_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.pending_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.pending_consultations') }}</flux:text>
<flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge> <flux:badge color="yellow">{{ $client->pending_consultations_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.completed_consultations') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.completed_consultations') }}</flux:text>
<flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge> <flux:badge color="green">{{ $client->completed_consultations_count }}</flux:badge>
</div> </div>
</div> </div>
@if ($client->consultations_count > 0) @if ($client->consultations_count > 0)
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.view_all_consultations') }} {{ __('clients.view_all_consultations') }}
</flux:text> </flux:text>
</div> </div>
@else @else
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.no_consultations') }} {{ __('clients.no_consultations') }}
</flux:text> </flux:text>
</div> </div>
@ -141,30 +141,30 @@ new class extends Component {
</div> </div>
{{-- Timeline Summary --}} {{-- Timeline Summary --}}
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
<div class="border-b border-zinc-200 px-6 py-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 px-6 py-4">
<flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading> <flux:heading size="lg">{{ __('clients.timeline_history') }}</flux:heading>
</div> </div>
<div class="p-6"> <div class="p-6">
<div class="space-y-4"> <div class="space-y-4">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.total_timelines') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.total_timelines') }}</flux:text>
<flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge> <flux:badge color="zinc">{{ $client->timelines_count }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('clients.active_timelines') }}</flux:text> <flux:text class="text-sm text-zinc-500">{{ __('clients.active_timelines') }}</flux:text>
<flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge> <flux:badge color="blue">{{ $client->active_timelines_count }}</flux:badge>
</div> </div>
</div> </div>
@if ($client->timelines_count > 0) @if ($client->timelines_count > 0)
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.view_all_timelines') }} {{ __('clients.view_all_timelines') }}
</flux:text> </flux:text>
</div> </div>
@else @else
<div class="mt-4 border-t border-zinc-200 pt-4 dark:border-zinc-700"> <div class="mt-4 border-t border-zinc-200 pt-4">
<flux:text class="text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="text-sm text-zinc-500">
{{ __('clients.no_timelines') }} {{ __('clients.no_timelines') }}
</flux:text> </flux:text>
</div> </div>
@ -175,7 +175,7 @@ new class extends Component {
</div> </div>
{{-- Lifecycle Actions Section --}} {{-- Lifecycle Actions Section --}}
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('clients.account_actions') }}</flux:heading>
<livewire:admin.clients.lifecycle-actions :client="$client" /> <livewire:admin.clients.lifecycle-actions :client="$client" />
</div> </div>

View File

@ -220,11 +220,11 @@ new class extends Component {
{{-- Deactivate/Reactivate Button --}} {{-- Deactivate/Reactivate Button --}}
@if ($client->isActive()) @if ($client->isActive())
<flux:button variant="ghost" class="text-amber-600 hover:bg-amber-50 dark:text-amber-400 dark:hover:bg-amber-900/20" icon="pause-circle" wire:click="openDeactivateModal"> <flux:button variant="ghost" class="text-amber-600 hover:bg-amber-50" icon="pause-circle" wire:click="openDeactivateModal">
{{ __('clients.deactivate') }} {{ __('clients.deactivate') }}
</flux:button> </flux:button>
@else @else
<flux:button variant="ghost" class="text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20" icon="play-circle" wire:click="openReactivateModal"> <flux:button variant="ghost" class="text-green-600 hover:bg-green-50" icon="play-circle" wire:click="openReactivateModal">
{{ __('clients.reactivate') }} {{ __('clients.reactivate') }}
</flux:button> </flux:button>
@endif @endif
@ -246,7 +246,7 @@ new class extends Component {
<flux:callout.text>{{ __('clients.deactivate_warning') }}</flux:callout.text> <flux:callout.text>{{ __('clients.deactivate_warning') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="text-sm text-zinc-600 dark:text-zinc-400"> <div class="text-sm text-zinc-600">
<p class="mb-2">{{ __('clients.deactivate_effects') }}:</p> <p class="mb-2">{{ __('clients.deactivate_effects') }}:</p>
<ul class="list-disc ps-5 space-y-1"> <ul class="list-disc ps-5 space-y-1">
<li>{{ __('clients.deactivate_effect_login') }}</li> <li>{{ __('clients.deactivate_effect_login') }}</li>
@ -278,7 +278,7 @@ new class extends Component {
<flux:callout.text>{{ __('clients.reactivate_message') }}</flux:callout.text> <flux:callout.text>{{ __('clients.reactivate_message') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="text-sm text-zinc-600 dark:text-zinc-400"> <div class="text-sm text-zinc-600">
<p class="mb-2">{{ __('clients.reactivate_effects') }}:</p> <p class="mb-2">{{ __('clients.reactivate_effects') }}:</p>
<ul class="list-disc ps-5 space-y-1"> <ul class="list-disc ps-5 space-y-1">
<li>{{ __('clients.reactivate_effect_login') }}</li> <li>{{ __('clients.reactivate_effect_login') }}</li>
@ -310,7 +310,7 @@ new class extends Component {
<flux:callout.text>{{ __('clients.delete_warning') }}</flux:callout.text> <flux:callout.text>{{ __('clients.delete_warning') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="text-sm text-zinc-600 dark:text-zinc-400"> <div class="text-sm text-zinc-600">
<p class="mb-2">{{ __('clients.will_be_deleted') }}:</p> <p class="mb-2">{{ __('clients.will_be_deleted') }}:</p>
<ul class="list-disc ps-5 space-y-1"> <ul class="list-disc ps-5 space-y-1">
<li>{{ __('clients.delete_item_consultations') }}</li> <li>{{ __('clients.delete_item_consultations') }}</li>
@ -348,7 +348,7 @@ new class extends Component {
<flux:callout.text>{{ __('clients.reset_password_message') }}</flux:callout.text> <flux:callout.text>{{ __('clients.reset_password_message') }}</flux:callout.text>
</flux:callout> </flux:callout>
<div class="text-sm text-zinc-600 dark:text-zinc-400"> <div class="text-sm text-zinc-600">
<p class="mb-2">{{ __('clients.reset_password_effects') }}:</p> <p class="mb-2">{{ __('clients.reset_password_effects') }}:</p>
<ul class="list-disc ps-5 space-y-1"> <ul class="list-disc ps-5 space-y-1">
<li>{{ __('clients.reset_password_effect_generate') }}</li> <li>{{ __('clients.reset_password_effect_generate') }}</li>

View File

@ -185,11 +185,11 @@ new class extends Component {
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"> <div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ __('export.export_consultations') }}</flux:heading> <flux:heading size="xl">{{ __('export.export_consultations') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_consultations_description') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('export.export_consultations_description') }}</flux:text>
</div> </div>
</div> </div>
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5"> <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-5">
@ -243,11 +243,11 @@ new class extends Component {
@endif @endif
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row"> <div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
<div> <div>
<flux:text class="text-zinc-600 dark:text-zinc-400"> <flux:text class="text-zinc-600">
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span> {{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
</flux:text> </flux:text>
</div> </div>
@ -279,9 +279,9 @@ new class extends Component {
</div> </div>
@if ($previewCount === 0) @if ($previewCount === 0)
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900"> <div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
<flux:icon name="calendar" class="mx-auto mb-4 h-12 w-12 text-zinc-400" /> <flux:icon name="calendar" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_consultations_match') }}</flux:text> <flux:text class="text-zinc-500">{{ __('export.no_consultations_match') }}</flux:text>
</div> </div>
@endif @endif
</div> </div>

View File

@ -206,7 +206,7 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('admin.consultations') }}</flux:heading> <flux:heading size="xl">{{ __('admin.consultations') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('admin.consultations_description') }}</p> <p class="text-sm text-zinc-500 mt-1">{{ __('admin.consultations_description') }}</p>
</div> </div>
</div> </div>
@ -223,7 +223,7 @@ new class extends Component
@endif @endif
<!-- Filters --> <!-- Filters -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
<flux:field> <flux:field>
<flux:input <flux:input
@ -290,15 +290,15 @@ new class extends Component
</div> </div>
<!-- Sort Headers --> <!-- Sort Headers -->
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0"> <div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
<button wire:click="sort('booking_date')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('booking_date')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
{{ __('admin.date') }} {{ __('admin.date') }}
@if($sortBy === 'booking_date') @if($sortBy === 'booking_date')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<span class="flex-1">{{ __('admin.client') }}</span> <span class="flex-1">{{ __('admin.client') }}</span>
<button wire:click="sort('status')" class="flex items-center gap-1 w-24 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('status')" class="flex items-center gap-1 w-24 hover:text-zinc-900">
{{ __('admin.current_status') }} {{ __('admin.current_status') }}
@if($sortBy === 'status') @if($sortBy === 'status')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@ -311,14 +311,14 @@ new class extends Component
<!-- Consultations List --> <!-- Consultations List -->
<div class="space-y-0"> <div class="space-y-0">
@forelse($consultations as $consultation) @forelse($consultations as $consultation)
<div wire:key="consultation-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}"> <div wire:key="consultation-{{ $consultation->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
<div class="flex flex-col lg:flex-row lg:items-center gap-4"> <div class="flex flex-col lg:flex-row lg:items-center gap-4">
<!-- Date/Time --> <!-- Date/Time -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm font-medium text-zinc-900 dark:text-zinc-100"> <div class="text-sm font-medium text-zinc-900">
{{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('d M Y') }} {{ \Carbon\Carbon::parse($consultation->booking_date)->translatedFormat('d M Y') }}
</div> </div>
<div class="text-xs text-zinc-500 dark:text-zinc-400"> <div class="text-xs text-zinc-500">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</div> </div>
</div> </div>
@ -326,14 +326,14 @@ new class extends Component
<!-- Client Info --> <!-- Client Info -->
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-2 mb-1"> <div class="flex items-center gap-2 mb-1">
<a href="{{ route('admin.consultations.show', $consultation) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate> <a href="{{ route('admin.consultations.show', $consultation) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
{{ $consultation->user?->full_name ?? __('common.unknown') }} {{ $consultation->user?->full_name ?? __('common.unknown') }}
</a> </a>
<flux:badge size="sm" variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}"> <flux:badge size="sm" variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
{{ $consultation->consultation_type->label() }} {{ $consultation->consultation_type->label() }}
</flux:badge> </flux:badge>
</div> </div>
<div class="text-sm text-zinc-500 dark:text-zinc-400"> <div class="text-sm text-zinc-500">
{{ $consultation->user?->email ?? '-' }} {{ $consultation->user?->email ?? '-' }}
</div> </div>
</div> </div>
@ -444,7 +444,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
<p>{{ __('admin.no_consultations') }}</p> <p>{{ __('admin.no_consultations') }}</p>
</div> </div>

View File

@ -350,24 +350,24 @@ new class extends Component
<!-- Main Details --> <!-- Main Details -->
<div class="lg:col-span-2 space-y-6"> <div class="lg:col-span-2 space-y-6">
<!-- Booking Info --> <!-- Booking Info -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.booking_details') }}</flux:heading>
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_date') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.requested_date') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100 font-medium"> <dd class="text-zinc-900 font-medium">
{{ $consultation->booking_date->translatedFormat('l, d M Y') }} {{ $consultation->booking_date->translatedFormat('l, d M Y') }}
</dd> </dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.requested_time') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.requested_time') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100 font-medium"> <dd class="text-zinc-900 font-medium">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</dd> </dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.current_status') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.current_status') }}</dt>
<dd> <dd>
@php @php
$statusVariant = match($consultation->status) { $statusVariant = match($consultation->status) {
@ -385,7 +385,7 @@ new class extends Component
</dd> </dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.consultation_type') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.consultation_type') }}</dt>
<dd> <dd>
<flux:badge variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}"> <flux:badge variant="{{ $consultation->consultation_type === \App\Enums\ConsultationType::Paid ? 'primary' : 'outline' }}">
{{ $consultation->consultation_type->label() }} {{ $consultation->consultation_type->label() }}
@ -395,16 +395,16 @@ new class extends Component
</div> </div>
@if($consultation->problem_summary) @if($consultation->problem_summary)
<div class="mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-700"> <div class="mt-4 pt-4 border-t border-zinc-200">
<dt class="text-sm text-zinc-500 dark:text-zinc-400 mb-2">{{ __('admin.problem_summary') }}</dt> <dt class="text-sm text-zinc-500 mb-2">{{ __('admin.problem_summary') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->problem_summary }}</dd> <dd class="text-zinc-900">{{ $consultation->problem_summary }}</dd>
</div> </div>
@endif @endif
</div> </div>
<!-- Payment Info (for paid consultations) --> <!-- Payment Info (for paid consultations) -->
@if($consultation->consultation_type === \App\Enums\ConsultationType::Paid) @if($consultation->consultation_type === \App\Enums\ConsultationType::Paid)
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<div class="flex justify-between items-center mb-4"> <div class="flex justify-between items-center mb-4">
<flux:heading size="lg">{{ __('admin.payment_details') }}</flux:heading> <flux:heading size="lg">{{ __('admin.payment_details') }}</flux:heading>
@if($consultation->payment_status === \App\Enums\PaymentStatus::Pending) @if($consultation->payment_status === \App\Enums\PaymentStatus::Pending)
@ -421,13 +421,13 @@ new class extends Component
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_amount') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.payment_amount') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100 font-medium"> <dd class="text-zinc-900 font-medium">
{{ number_format($consultation->payment_amount, 2) }} {{ __('common.currency') }} {{ number_format($consultation->payment_amount, 2) }} {{ __('common.currency') }}
</dd> </dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_status') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.payment_status') }}</dt>
<dd> <dd>
@php @php
$paymentVariant = match($consultation->payment_status) { $paymentVariant = match($consultation->payment_status) {
@ -443,8 +443,8 @@ new class extends Component
</div> </div>
@if($consultation->payment_received_at) @if($consultation->payment_received_at)
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.payment_received_at') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.payment_received_at') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100"> <dd class="text-zinc-900">
{{ $consultation->payment_received_at->translatedFormat('d M Y, g:i A') }} {{ $consultation->payment_received_at->translatedFormat('d M Y, g:i A') }}
</dd> </dd>
</div> </div>
@ -454,7 +454,7 @@ new class extends Component
@endif @endif
<!-- Admin Notes --> <!-- Admin Notes -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<flux:heading size="lg" class="mb-4">{{ __('admin.admin_notes') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.admin_notes') }}</flux:heading>
<!-- Add Note Form --> <!-- Add Note Form -->
@ -479,7 +479,7 @@ new class extends Component
<!-- Notes List --> <!-- Notes List -->
<div class="space-y-4"> <div class="space-y-4">
@forelse($consultation->admin_notes ?? [] as $index => $note) @forelse($consultation->admin_notes ?? [] as $index => $note)
<div wire:key="note-{{ $index }}" class="p-4 bg-zinc-50 dark:bg-zinc-700/50 rounded-lg"> <div wire:key="note-{{ $index }}" class="p-4 bg-zinc-50 rounded-lg">
@if($editingNoteIndex === $index) @if($editingNoteIndex === $index)
<flux:field> <flux:field>
<flux:textarea <flux:textarea
@ -499,8 +499,8 @@ new class extends Component
</flux:button> </flux:button>
</div> </div>
@else @else
<p class="text-zinc-900 dark:text-zinc-100 mb-2">{{ $note['text'] }}</p> <p class="text-zinc-900 mb-2">{{ $note['text'] }}</p>
<div class="flex justify-between items-center text-xs text-zinc-500 dark:text-zinc-400"> <div class="flex justify-between items-center text-xs text-zinc-500">
<span> <span>
{{ __('admin.added_by') }}: {{ $adminUsers[$note['admin_id']] ?? __('common.unknown') }} {{ __('admin.added_by') }}: {{ $adminUsers[$note['admin_id']] ?? __('common.unknown') }}
@if(isset($note['updated_at'])) @if(isset($note['updated_at']))
@ -525,7 +525,7 @@ new class extends Component
@endif @endif
</div> </div>
@empty @empty
<p class="text-zinc-500 dark:text-zinc-400 text-center py-4">{{ __('admin.no_notes') }}</p> <p class="text-zinc-500 text-center py-4">{{ __('admin.no_notes') }}</p>
@endforelse @endforelse
</div> </div>
</div> </div>
@ -534,30 +534,30 @@ new class extends Component
<!-- Sidebar --> <!-- Sidebar -->
<div class="space-y-6"> <div class="space-y-6">
<!-- Client Info --> <!-- Client Info -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<flux:heading size="lg" class="mb-4">{{ __('admin.client_information') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.client_information') }}</flux:heading>
@if($consultation->user) @if($consultation->user)
<div class="space-y-3"> <div class="space-y-3">
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_name') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.client_name') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100 font-medium"> <dd class="text-zinc-900 font-medium">
{{ $consultation->user->full_name }} {{ $consultation->user->full_name }}
</dd> </dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_email') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.client_email') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->user->email }}</dd> <dd class="text-zinc-900">{{ $consultation->user->email }}</dd>
</div> </div>
@if($consultation->user->phone) @if($consultation->user->phone)
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.client_phone') }}</dt> <dt class="text-sm text-zinc-500">{{ __('admin.client_phone') }}</dt>
<dd class="text-zinc-900 dark:text-zinc-100">{{ $consultation->user->phone }}</dd> <dd class="text-zinc-900">{{ $consultation->user->phone }}</dd>
</div> </div>
@endif @endif
</div> </div>
<div class="mt-4 pt-4 border-t border-zinc-200 dark:border-zinc-700"> <div class="mt-4 pt-4 border-t border-zinc-200">
<flux:button <flux:button
href="{{ route('admin.clients.consultation-history', $consultation->user) }}" href="{{ route('admin.clients.consultation-history', $consultation->user) }}"
variant="ghost" variant="ghost"
@ -569,13 +569,13 @@ new class extends Component
</flux:button> </flux:button>
</div> </div>
@else @else
<p class="text-zinc-500 dark:text-zinc-400">{{ __('messages.client_account_not_found') }}</p> <p class="text-zinc-500">{{ __('messages.client_account_not_found') }}</p>
@endif @endif
</div> </div>
<!-- Status Actions --> <!-- Status Actions -->
@if($consultation->status === \App\Enums\ConsultationStatus::Approved) @if($consultation->status === \App\Enums\ConsultationStatus::Approved)
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
<div class="space-y-2"> <div class="space-y-2">
@ -613,7 +613,7 @@ new class extends Component
@endif @endif
@if($consultation->status === \App\Enums\ConsultationStatus::Pending) @if($consultation->status === \App\Enums\ConsultationStatus::Pending)
<div class="bg-white dark:bg-zinc-800 rounded-lg p-6 border border-zinc-200 dark:border-zinc-700"> <div class="bg-white rounded-lg p-6 border border-zinc-200">
<flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('common.actions') }}</flux:heading>
<flux:button <flux:button
@ -635,9 +635,9 @@ new class extends Component
<div class="p-6"> <div class="p-6">
<flux:heading size="lg" class="mb-4">{{ __('admin.reschedule_consultation') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('admin.reschedule_consultation') }}</flux:heading>
<div class="mb-4 p-4 bg-zinc-50 dark:bg-zinc-700/50 rounded-lg"> <div class="mb-4 p-4 bg-zinc-50 rounded-lg">
<p class="text-sm text-zinc-500 dark:text-zinc-400 mb-1">{{ __('admin.current_schedule') }}</p> <p class="text-sm text-zinc-500 mb-1">{{ __('admin.current_schedule') }}</p>
<p class="text-zinc-900 dark:text-zinc-100 font-medium"> <p class="text-zinc-900 font-medium">
{{ $consultation->booking_date->translatedFormat('l, d M Y') }} {{ $consultation->booking_date->translatedFormat('l, d M Y') }}
{{ __('admin.to') }} {{ __('admin.to') }}
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
@ -663,7 +663,7 @@ new class extends Component
@endforeach @endforeach
</flux:select> </flux:select>
@else @else
<p class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('admin.no_slots_available') }}</p> <p class="text-sm text-zinc-500">{{ __('admin.no_slots_available') }}</p>
@endif @endif
@error('newTime') @error('newTime')
<flux:error>{{ $message }}</flux:error> <flux:error>{{ $message }}</flux:error>

View File

@ -187,106 +187,106 @@ new class extends Component
<div> <div>
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('admin_metrics.title') }}</flux:heading> <flux:heading size="xl" class="text-xl sm:text-2xl">{{ __('admin_metrics.title') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.subtitle') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('admin_metrics.subtitle') }}</flux:text>
</div> </div>
<div class="stats-grid"> <div class="stats-grid">
{{-- User Metrics Card --}} {{-- User Metrics Card --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="mb-4 flex items-center gap-3"> <div class="mb-4 flex items-center gap-3">
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900"> <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
<flux:icon name="users" class="h-5 w-5" /> <flux:icon name="users" class="h-5 w-5" />
</div> </div>
<flux:heading size="lg">{{ __('admin_metrics.clients') }}</flux:heading> <flux:heading size="lg">{{ __('admin_metrics.clients') }}</flux:heading>
</div> </div>
<div class="space-y-3"> <div class="space-y-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.total_active') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.total_active') }}</flux:text>
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $userMetrics['total_active'] }}</span> <span class="text-xl font-semibold text-zinc-900">{{ $userMetrics['total_active'] }}</span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.individual') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.individual') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $userMetrics['individual'] }}</span> <span class="font-medium text-zinc-700">{{ $userMetrics['individual'] }}</span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.company') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.company') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $userMetrics['company'] }}</span> <span class="font-medium text-zinc-700">{{ $userMetrics['company'] }}</span>
</div> </div>
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700"> <div class="border-t border-zinc-200 pt-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.deactivated') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.deactivated') }}</flux:text>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ $userMetrics['deactivated'] }}</span> <span class="font-medium text-zinc-500">{{ $userMetrics['deactivated'] }}</span>
</div> </div>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.new_this_month') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.new_this_month') }}</flux:text>
<flux:badge color="lime" size="sm">{{ $userMetrics['new_this_month'] }}</flux:badge> <flux:badge color="lime" size="sm">{{ $userMetrics['new_this_month'] }}</flux:badge>
</div> </div>
</div> </div>
</div> </div>
{{-- Booking Metrics Card --}} {{-- Booking Metrics Card --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="mb-4 flex items-center gap-3"> <div class="mb-4 flex items-center gap-3">
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900"> <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
<flux:icon name="calendar" class="h-5 w-5" /> <flux:icon name="calendar" class="h-5 w-5" />
</div> </div>
<flux:heading size="lg">{{ __('admin_metrics.consultations') }}</flux:heading> <flux:heading size="lg">{{ __('admin_metrics.consultations') }}</flux:heading>
</div> </div>
<div class="space-y-3"> <div class="space-y-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.pending_requests') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.pending_requests') }}</flux:text>
<flux:badge color="amber" size="sm">{{ $bookingMetrics['pending'] }}</flux:badge> <flux:badge color="amber" size="sm">{{ $bookingMetrics['pending'] }}</flux:badge>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.today') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.today') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['today'] }}</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['today'] }}</span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.this_week') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.this_week') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['this_week'] }}</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['this_week'] }}</span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.this_month') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.this_month') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['this_month'] }}</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['this_month'] }}</span>
</div> </div>
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700"> <div class="border-t border-zinc-200 pt-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.free') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.free') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['free'] }}</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['free'] }}</span>
</div> </div>
<div class="mt-2 flex items-center justify-between"> <div class="mt-2 flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.paid') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.paid') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['paid'] }}</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['paid'] }}</span>
</div> </div>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.no_show_rate') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.no_show_rate') }}</flux:text>
<span class="font-medium text-zinc-700 dark:text-zinc-300">{{ $bookingMetrics['no_show_rate'] }}%</span> <span class="font-medium text-zinc-700">{{ $bookingMetrics['no_show_rate'] }}%</span>
</div> </div>
</div> </div>
</div> </div>
{{-- Timeline Metrics Card --}} {{-- Timeline Metrics Card --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="mb-4 flex items-center gap-3"> <div class="mb-4 flex items-center gap-3">
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900"> <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
<flux:icon name="clipboard-document-list" class="h-5 w-5" /> <flux:icon name="clipboard-document-list" class="h-5 w-5" />
</div> </div>
<flux:heading size="lg">{{ __('admin_metrics.timelines') }}</flux:heading> <flux:heading size="lg">{{ __('admin_metrics.timelines') }}</flux:heading>
</div> </div>
<div class="space-y-3"> <div class="space-y-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.active_cases') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.active_cases') }}</flux:text>
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $timelineMetrics['active'] }}</span> <span class="text-xl font-semibold text-zinc-900">{{ $timelineMetrics['active'] }}</span>
</div> </div>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.archived') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.archived') }}</flux:text>
<span class="font-medium text-zinc-500 dark:text-zinc-400">{{ $timelineMetrics['archived'] }}</span> <span class="font-medium text-zinc-500">{{ $timelineMetrics['archived'] }}</span>
</div> </div>
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700"> <div class="border-t border-zinc-200 pt-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.updates_this_week') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.updates_this_week') }}</flux:text>
<flux:badge color="lime" size="sm">{{ $timelineMetrics['updates_this_week'] }}</flux:badge> <flux:badge color="lime" size="sm">{{ $timelineMetrics['updates_this_week'] }}</flux:badge>
</div> </div>
</div> </div>
@ -294,21 +294,21 @@ new class extends Component
</div> </div>
{{-- Posts Metrics Card --}} {{-- Posts Metrics Card --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="mb-4 flex items-center gap-3"> <div class="mb-4 flex items-center gap-3">
<div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white dark:bg-[#D4AF37] dark:text-zinc-900"> <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-[#0A1F44] text-white">
<flux:icon name="document-text" class="h-5 w-5" /> <flux:icon name="document-text" class="h-5 w-5" />
</div> </div>
<flux:heading size="lg">{{ __('admin_metrics.posts') }}</flux:heading> <flux:heading size="lg">{{ __('admin_metrics.posts') }}</flux:heading>
</div> </div>
<div class="space-y-3"> <div class="space-y-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.total_published') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.total_published') }}</flux:text>
<span class="text-xl font-semibold text-zinc-900 dark:text-zinc-100">{{ $postMetrics['total_published'] }}</span> <span class="text-xl font-semibold text-zinc-900">{{ $postMetrics['total_published'] }}</span>
</div> </div>
<div class="border-t border-zinc-200 pt-3 dark:border-zinc-700"> <div class="border-t border-zinc-200 pt-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<flux:text class="text-zinc-600 dark:text-zinc-400">{{ __('admin_metrics.published_this_month') }}</flux:text> <flux:text class="text-zinc-600">{{ __('admin_metrics.published_this_month') }}</flux:text>
<flux:badge color="lime" size="sm">{{ $postMetrics['this_month'] }}</flux:badge> <flux:badge color="lime" size="sm">{{ $postMetrics['this_month'] }}</flux:badge>
</div> </div>
</div> </div>
@ -373,11 +373,11 @@ new class extends Component
<div class="grid grid-cols-1 gap-6 lg:grid-cols-2"> <div class="grid grid-cols-1 gap-6 lg:grid-cols-2">
{{-- Monthly Trends Chart --}} {{-- Monthly Trends Chart --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.monthly_trends') }}</flux:heading> <flux:heading size="sm" class="mb-4">{{ __('admin_metrics.monthly_trends') }}</flux:heading>
@if (array_sum($chartData['newClients']) === 0 && array_sum($chartData['consultations']) === 0) @if (array_sum($chartData['newClients']) === 0 && array_sum($chartData['consultations']) === 0)
<div class="flex h-64 items-center justify-center"> <div class="flex h-64 items-center justify-center">
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text> <flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
</div> </div>
@else @else
<div <div
@ -441,11 +441,11 @@ new class extends Component
</div> </div>
{{-- Consultation Breakdown Chart --}} {{-- Consultation Breakdown Chart --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.consultation_breakdown') }}</flux:heading> <flux:heading size="sm" class="mb-4">{{ __('admin_metrics.consultation_breakdown') }}</flux:heading>
@if ($chartData['consultationBreakdown']['free'] === 0 && $chartData['consultationBreakdown']['paid'] === 0) @if ($chartData['consultationBreakdown']['free'] === 0 && $chartData['consultationBreakdown']['paid'] === 0)
<div class="flex h-64 items-center justify-center"> <div class="flex h-64 items-center justify-center">
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text> <flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
</div> </div>
@else @else
<div <div
@ -502,11 +502,11 @@ new class extends Component
</div> </div>
{{-- No-show Rate Chart --}} {{-- No-show Rate Chart --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 lg:col-span-2"> <div class="rounded-lg border border-zinc-200 bg-white p-6 lg:col-span-2">
<flux:heading size="sm" class="mb-4">{{ __('admin_metrics.noshow_rate_trend') }}</flux:heading> <flux:heading size="sm" class="mb-4">{{ __('admin_metrics.noshow_rate_trend') }}</flux:heading>
@if (array_sum($chartData['noShowRates']) === 0) @if (array_sum($chartData['noShowRates']) === 0)
<div class="flex h-64 items-center justify-center"> <div class="flex h-64 items-center justify-center">
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('admin_metrics.no_data_available') }}</flux:text> <flux:text class="text-zinc-500">{{ __('admin_metrics.no_data_available') }}</flux:text>
</div> </div>
@else @else
<div <div
@ -595,22 +595,22 @@ new class extends Component
<div class="widget-grid"> <div class="widget-grid">
{{-- Quick Actions Panel --}} {{-- Quick Actions Panel --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800 lg:col-span-3"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 lg:col-span-3">
<livewire:admin.widgets.quick-actions /> <livewire:admin.widgets.quick-actions />
</div> </div>
{{-- Pending Bookings Widget --}} {{-- Pending Bookings Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6">
<livewire:admin.widgets.pending-bookings /> <livewire:admin.widgets.pending-bookings />
</div> </div>
{{-- Today's Schedule Widget --}} {{-- Today's Schedule Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6">
<livewire:admin.widgets.todays-schedule /> <livewire:admin.widgets.todays-schedule />
</div> </div>
{{-- Recent Updates Widget --}} {{-- Recent Updates Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6">
<livewire:admin.widgets.recent-updates /> <livewire:admin.widgets.recent-updates />
</div> </div>
</div> </div>

View File

@ -69,7 +69,7 @@ new class extends Component
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center"> <div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
<div> <div>
<flux:heading size="xl">{{ __('pages.edit_page') }}: {{ $page->title_en }}</flux:heading> <flux:heading size="xl">{{ __('pages.edit_page') }}: {{ $page->title_en }}</flux:heading>
<p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400"> <p class="mt-1 text-sm text-zinc-500">
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }} {{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
</p> </p>
</div> </div>
@ -81,19 +81,19 @@ new class extends Component
</flux:callout> </flux:callout>
@endif @endif
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<!-- Language Tabs --> <!-- Language Tabs -->
<div class="mb-6 border-b border-zinc-200 dark:border-zinc-700"> <div class="mb-6 border-b border-zinc-200">
<nav class="-mb-px flex gap-4"> <nav class="-mb-px flex gap-4">
<button <button
wire:click="setTab('ar')" wire:click="setTab('ar')"
class="{{ $activeTab === 'ar' ? 'border-blue-500 text-blue-600 dark:text-blue-400' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700 dark:text-zinc-400' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors" class="{{ $activeTab === 'ar' ? 'border-blue-500 text-blue-600' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
> >
{{ __('pages.arabic') }} {{ __('pages.arabic') }}
</button> </button>
<button <button
wire:click="setTab('en')" wire:click="setTab('en')"
class="{{ $activeTab === 'en' ? 'border-blue-500 text-blue-600 dark:text-blue-400' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700 dark:text-zinc-400' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors" class="{{ $activeTab === 'en' ? 'border-blue-500 text-blue-600' : 'border-transparent text-zinc-500 hover:border-zinc-300 hover:text-zinc-700' }} border-b-2 px-1 pb-3 text-sm font-medium transition-colors"
> >
{{ __('pages.english') }} {{ __('pages.english') }}
</button> </button>
@ -108,7 +108,7 @@ new class extends Component
<div wire:ignore> <div wire:ignore>
<div <div
id="editor-ar" id="editor-ar"
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900" class="min-h-[300px] rounded-lg border border-zinc-200 bg-white"
dir="rtl" dir="rtl"
></div> ></div>
<textarea id="content_ar" wire:model="content_ar" class="hidden">{{ $content_ar }}</textarea> <textarea id="content_ar" wire:model="content_ar" class="hidden">{{ $content_ar }}</textarea>
@ -123,14 +123,14 @@ new class extends Component
<div wire:ignore> <div wire:ignore>
<div <div
id="editor-en" id="editor-en"
class="min-h-[300px] rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-900" class="min-h-[300px] rounded-lg border border-zinc-200 bg-white"
></div> ></div>
<textarea id="content_en" wire:model="content_en" class="hidden">{{ $content_en }}</textarea> <textarea id="content_en" wire:model="content_en" class="hidden">{{ $content_en }}</textarea>
</div> </div>
</flux:field> </flux:field>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.pages.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.pages.index')" wire:navigate>
{{ __('common.cancel') }} {{ __('common.cancel') }}
</flux:button> </flux:button>
@ -150,16 +150,16 @@ new class extends Component
<flux:heading size="lg" class="mb-4">{{ __('pages.preview') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('pages.preview') }}</flux:heading>
<div class="space-y-6"> <div class="space-y-6">
<div class="border-b border-zinc-200 pb-4 dark:border-zinc-700"> <div class="border-b border-zinc-200 pb-4">
<h3 class="mb-2 text-lg font-semibold text-zinc-600 dark:text-zinc-400">{{ __('pages.arabic') }}</h3> <h3 class="mb-2 text-lg font-semibold text-zinc-600">{{ __('pages.arabic') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $page->title_ar }}</h2> <h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $page->title_ar }}</h2>
<div class="prose prose-sm mt-2 max-w-none dark:prose-invert" dir="rtl">{!! clean($content_ar) !!}</div> <div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($content_ar) !!}</div>
</div> </div>
<div> <div>
<h3 class="mb-2 text-lg font-semibold text-zinc-600 dark:text-zinc-400">{{ __('pages.english') }}</h3> <h3 class="mb-2 text-lg font-semibold text-zinc-600">{{ __('pages.english') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $page->title_en }}</h2> <h2 class="text-xl font-bold text-zinc-900">{{ $page->title_en }}</h2>
<div class="prose prose-sm mt-2 max-w-none dark:prose-invert">{!! clean($content_en) !!}</div> <div class="prose prose-sm mt-2 max-w-none">{!! clean($content_en) !!}</div>
</div> </div>
</div> </div>
@ -181,45 +181,6 @@ new class extends Component
.ql-container { .ql-container {
font-family: inherit; font-family: inherit;
} }
.dark .ql-toolbar {
border-color: rgb(63 63 70);
background: rgb(24 24 27);
}
.dark .ql-container {
border-color: rgb(63 63 70);
background: rgb(24 24 27);
}
.dark .ql-editor {
color: rgb(244 244 245);
}
.dark .ql-stroke {
stroke: rgb(161 161 170);
}
.dark .ql-fill {
fill: rgb(161 161 170);
}
.dark .ql-picker-label {
color: rgb(161 161 170);
}
.dark .ql-picker-options {
background: rgb(39 39 42);
border-color: rgb(63 63 70);
}
.dark .ql-picker-item {
color: rgb(244 244 245);
}
.dark .ql-picker-item:hover {
color: rgb(59 130 246);
}
</style> </style>
@endpush @endpush

View File

@ -20,7 +20,7 @@ new class extends Component
<div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center"> <div class="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
<div> <div>
<flux:heading size="xl">{{ __('pages.legal_pages') }}</flux:heading> <flux:heading size="xl">{{ __('pages.legal_pages') }}</flux:heading>
<p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">{{ __('pages.legal_pages_description') }}</p> <p class="mt-1 text-sm text-zinc-500">{{ __('pages.legal_pages_description') }}</p>
</div> </div>
</div> </div>
@ -34,17 +34,17 @@ new class extends Component
@forelse ($pages as $page) @forelse ($pages as $page)
<div <div
wire:key="page-{{ $page->id }}" wire:key="page-{{ $page->id }}"
class="{{ $loop->first ? 'rounded-t-lg' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ ! $loop->first ? 'border-t-0' : '' }} border border-zinc-200 bg-white p-4 dark:border-zinc-700 dark:bg-zinc-800" class="{{ $loop->first ? 'rounded-t-lg' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ ! $loop->first ? 'border-t-0' : '' }} border border-zinc-200 bg-white p-4"
> >
<div class="flex flex-col gap-4 lg:flex-row lg:items-center"> <div class="flex flex-col gap-4 lg:flex-row lg:items-center">
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
<flux:icon name="document-text" class="h-5 w-5 text-zinc-400" /> <flux:icon name="document-text" class="h-5 w-5 text-zinc-400" />
<div> <div>
<h3 class="font-semibold text-zinc-900 dark:text-zinc-100"> <h3 class="font-semibold text-zinc-900">
{{ $page->title_en }} {{ $page->title_en }}
</h3> </h3>
<p class="text-sm text-zinc-500 dark:text-zinc-400" dir="rtl"> <p class="text-sm text-zinc-500" dir="rtl">
{{ $page->title_ar }} {{ $page->title_ar }}
</p> </p>
</div> </div>
@ -58,7 +58,7 @@ new class extends Component
</div> </div>
<div class="lg:w-40"> <div class="lg:w-40">
<div class="text-sm text-zinc-500 dark:text-zinc-400"> <div class="text-sm text-zinc-500">
{{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }} {{ __('pages.last_updated') }}: {{ $page->updated_at->diffForHumans() }}
</div> </div>
</div> </div>
@ -76,7 +76,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="rounded-lg border border-zinc-200 bg-white py-12 text-center text-zinc-500 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-400"> <div class="rounded-lg border border-zinc-200 bg-white py-12 text-center text-zinc-500">
<flux:icon name="document-text" class="mx-auto mb-4 h-12 w-12" /> <flux:icon name="document-text" class="mx-auto mb-4 h-12 w-12" />
<p>{{ __('pages.no_pages') }}</p> <p>{{ __('pages.no_pages') }}</p>
</div> </div>

View File

@ -139,7 +139,7 @@ new class extends Component
</flux:callout> </flux:callout>
@endif @endif
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="save" class="space-y-6"> <form wire:submit="save" class="space-y-6">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<!-- Arabic Fields --> <!-- Arabic Fields -->
@ -159,7 +159,7 @@ new class extends Component
<trix-editor <trix-editor
input="body_ar" input="body_ar"
dir="rtl" dir="rtl"
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]" class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
x-data x-data
x-on:trix-change="$wire.set('body_ar', $event.target.value)" x-on:trix-change="$wire.set('body_ar', $event.target.value)"
></trix-editor> ></trix-editor>
@ -184,7 +184,7 @@ new class extends Component
<input id="body_en" type="hidden" wire:model="body_en"> <input id="body_en" type="hidden" wire:model="body_en">
<trix-editor <trix-editor
input="body_en" input="body_en"
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]" class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
x-data x-data
x-on:trix-change="$wire.set('body_en', $event.target.value)" x-on:trix-change="$wire.set('body_en', $event.target.value)"
></trix-editor> ></trix-editor>
@ -194,7 +194,7 @@ new class extends Component
</div> </div>
</div> </div>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6">
<flux:button variant="ghost" :href="route('admin.posts.index')" wire:navigate> <flux:button variant="ghost" :href="route('admin.posts.index')" wire:navigate>
{{ __('common.cancel') }} {{ __('common.cancel') }}
</flux:button> </flux:button>
@ -217,16 +217,16 @@ new class extends Component
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
<div class="space-y-6"> <div class="space-y-6">
<div class="border-b border-zinc-200 dark:border-zinc-700 pb-4"> <div class="border-b border-zinc-200 pb-4">
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.arabic_content') }}</h3> <h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.arabic_content') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $title_ar }}</h2> <h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $title_ar }}</h2>
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div> <div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
</div> </div>
<div> <div>
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.english_content') }}</h3> <h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.english_content') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $title_en }}</h2> <h2 class="text-xl font-bold text-zinc-900">{{ $title_en }}</h2>
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none">{!! clean($body_en) !!}</div> <div class="prose prose-sm mt-2 max-w-none">{!! clean($body_en) !!}</div>
</div> </div>
</div> </div>

View File

@ -162,10 +162,10 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('posts.edit_post') }}</flux:heading> <flux:heading size="xl">{{ __('posts.edit_post') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1"> <p class="text-sm text-zinc-500 mt-1">
{{ __('posts.last_updated') }}: {{ $post->updated_at->diffForHumans() }} {{ __('posts.last_updated') }}: {{ $post->updated_at->diffForHumans() }}
@if($status === 'draft') @if($status === 'draft')
<span class="text-amber-600 dark:text-amber-400">({{ __('posts.auto_save_enabled') }})</span> <span class="text-amber-600">({{ __('posts.auto_save_enabled') }})</span>
@endif @endif
</p> </p>
</div> </div>
@ -180,7 +180,7 @@ new class extends Component
</flux:callout> </flux:callout>
@endif @endif
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="save" class="space-y-6"> <form wire:submit="save" class="space-y-6">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6"> <div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<!-- Arabic Fields --> <!-- Arabic Fields -->
@ -200,7 +200,7 @@ new class extends Component
<trix-editor <trix-editor
input="body_ar" input="body_ar"
dir="rtl" dir="rtl"
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]" class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
x-data x-data
x-on:trix-change="$wire.set('body_ar', $event.target.value)" x-on:trix-change="$wire.set('body_ar', $event.target.value)"
></trix-editor> ></trix-editor>
@ -225,7 +225,7 @@ new class extends Component
<input id="body_en" type="hidden" wire:model="body_en" value="{{ $body_en }}"> <input id="body_en" type="hidden" wire:model="body_en" value="{{ $body_en }}">
<trix-editor <trix-editor
input="body_en" input="body_en"
class="trix-content prose prose-sm max-w-none bg-white dark:bg-zinc-900 rounded-lg border border-zinc-200 dark:border-zinc-700 min-h-[200px]" class="trix-content prose prose-sm max-w-none bg-white rounded-lg border border-zinc-200 min-h-[200px]"
x-data x-data
x-on:trix-change="$wire.set('body_en', $event.target.value)" x-on:trix-change="$wire.set('body_en', $event.target.value)"
></trix-editor> ></trix-editor>
@ -235,7 +235,7 @@ new class extends Component
</div> </div>
</div> </div>
<div class="flex items-center justify-between gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-between gap-4 border-t border-zinc-200 pt-6">
<div> <div>
<flux:button variant="danger" type="button" wire:click="delete"> <flux:button variant="danger" type="button" wire:click="delete">
{{ __('posts.delete_post') }} {{ __('posts.delete_post') }}
@ -274,16 +274,16 @@ new class extends Component
<flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('posts.preview') }}</flux:heading>
<div class="space-y-6"> <div class="space-y-6">
<div class="border-b border-zinc-200 dark:border-zinc-700 pb-4"> <div class="border-b border-zinc-200 pb-4">
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.arabic_content') }}</h3> <h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.arabic_content') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100" dir="rtl">{{ $title_ar }}</h2> <h2 class="text-xl font-bold text-zinc-900" dir="rtl">{{ $title_ar }}</h2>
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div> <div class="prose prose-sm mt-2 max-w-none" dir="rtl">{!! clean($body_ar) !!}</div>
</div> </div>
<div> <div>
<h3 class="font-semibold text-lg mb-2 text-zinc-600 dark:text-zinc-400">{{ __('posts.english_content') }}</h3> <h3 class="font-semibold text-lg mb-2 text-zinc-600">{{ __('posts.english_content') }}</h3>
<h2 class="text-xl font-bold text-zinc-900 dark:text-zinc-100">{{ $title_en }}</h2> <h2 class="text-xl font-bold text-zinc-900">{{ $title_en }}</h2>
<div class="prose prose-sm dark:prose-invert mt-2 max-w-none">{!! clean($body_en) !!}</div> <div class="prose prose-sm mt-2 max-w-none">{!! clean($body_en) !!}</div>
</div> </div>
</div> </div>
@ -302,7 +302,7 @@ new class extends Component
{{ __('posts.delete_post_warning') }} {{ __('posts.delete_post_warning') }}
</flux:callout> </flux:callout>
<p class="text-zinc-700 dark:text-zinc-300"> <p class="text-zinc-700">
{{ __('posts.deleting_post', ['title' => $post->getTitle()]) }} {{ __('posts.deleting_post', ['title' => $post->getTitle()]) }}
</p> </p>

View File

@ -161,7 +161,7 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('posts.posts') }}</flux:heading> <flux:heading size="xl">{{ __('posts.posts') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('posts.posts_description') }}</p> <p class="text-sm text-zinc-500 mt-1">{{ __('posts.posts_description') }}</p>
</div> </div>
<flux:button href="{{ route('admin.posts.create') }}" variant="primary" icon="plus" wire:navigate> <flux:button href="{{ route('admin.posts.create') }}" variant="primary" icon="plus" wire:navigate>
{{ __('posts.create_post') }} {{ __('posts.create_post') }}
@ -181,7 +181,7 @@ new class extends Component
@endif @endif
<!-- Filters --> <!-- Filters -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<flux:field> <flux:field>
<flux:input <flux:input
@ -219,21 +219,21 @@ new class extends Component
</div> </div>
<!-- Sort Headers --> <!-- Sort Headers -->
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0"> <div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
<button wire:click="sort('title')" class="flex items-center gap-1 flex-1 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('title')" class="flex items-center gap-1 flex-1 hover:text-zinc-900">
{{ __('posts.title') }} {{ __('posts.title') }}
@if($sortBy === 'title') @if($sortBy === 'title')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<span class="w-24">{{ __('admin.current_status') }}</span> <span class="w-24">{{ __('admin.current_status') }}</span>
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
{{ __('posts.last_updated') }} {{ __('posts.last_updated') }}
@if($sortBy === 'updated_at') @if($sortBy === 'updated_at')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
{{ __('posts.created') }} {{ __('posts.created') }}
@if($sortBy === 'created_at') @if($sortBy === 'created_at')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@ -245,14 +245,14 @@ new class extends Component
<!-- Posts List --> <!-- Posts List -->
<div class="space-y-0"> <div class="space-y-0">
@forelse($posts as $post) @forelse($posts as $post)
<div wire:key="post-{{ $post->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}"> <div wire:key="post-{{ $post->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
<div class="flex flex-col lg:flex-row lg:items-center gap-4"> <div class="flex flex-col lg:flex-row lg:items-center gap-4">
<!-- Title --> <!-- Title -->
<div class="flex-1"> <div class="flex-1">
<a href="{{ route('admin.posts.edit', $post) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate> <a href="{{ route('admin.posts.edit', $post) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
{{ $post->getTitle() }} {{ $post->getTitle() }}
</a> </a>
<div class="text-sm text-zinc-500 dark:text-zinc-400 mt-1 line-clamp-2"> <div class="text-sm text-zinc-500 mt-1 line-clamp-2">
{{ $post->getExcerpt() }} {{ $post->getExcerpt() }}
</div> </div>
</div> </div>
@ -266,14 +266,14 @@ new class extends Component
<!-- Last Updated --> <!-- Last Updated -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ $post->updated_at->diffForHumans() }} {{ $post->updated_at->diffForHumans() }}
</div> </div>
</div> </div>
<!-- Created --> <!-- Created -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm text-zinc-500 dark:text-zinc-400"> <div class="text-sm text-zinc-500">
{{ $post->created_at->format('Y-m-d') }} {{ $post->created_at->format('Y-m-d') }}
</div> </div>
</div> </div>
@ -306,7 +306,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="document-text" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="document-text" class="w-12 h-12 mx-auto mb-4" />
<p>{{ __('posts.no_posts') }}</p> <p>{{ __('posts.no_posts') }}</p>
<div class="mt-4"> <div class="mt-4">
@ -332,7 +332,7 @@ new class extends Component
</flux:callout> </flux:callout>
@if($postToDelete) @if($postToDelete)
<p class="text-zinc-700 dark:text-zinc-300"> <p class="text-zinc-700">
{{ __('posts.deleting_post', ['title' => $postToDelete->getTitle()]) }} {{ __('posts.deleting_post', ['title' => $postToDelete->getTitle()]) }}
</p> </p>
@endif @endif

View File

@ -55,11 +55,11 @@ new class extends Component
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"> <div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ __('report.monthly_report') }}</flux:heading> <flux:heading size="xl">{{ __('report.monthly_report') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('report.monthly_report_description') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('report.monthly_report_description') }}</flux:text>
</div> </div>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="flex flex-col gap-6 sm:flex-row sm:items-end"> <div class="flex flex-col gap-6 sm:flex-row sm:items-end">
<div class="w-full sm:w-64"> <div class="w-full sm:w-64">
<flux:select wire:model="selectedPeriod" :label="__('report.select_period')"> <flux:select wire:model="selectedPeriod" :label="__('report.select_period')">
@ -83,31 +83,31 @@ new class extends Component
</flux:button> </flux:button>
</div> </div>
<div class="mt-8 rounded-lg bg-zinc-50 p-6 dark:bg-zinc-900"> <div class="mt-8 rounded-lg bg-zinc-50 p-6">
<flux:heading size="sm" class="mb-4">{{ __('report.table_of_contents') }}</flux:heading> <flux:heading size="sm" class="mb-4">{{ __('report.table_of_contents') }}</flux:heading>
<div class="space-y-2 text-sm text-zinc-600 dark:text-zinc-400"> <div class="space-y-2 text-sm text-zinc-600">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">1</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">1</span>
<span>{{ __('report.executive_summary') }}</span> <span>{{ __('report.executive_summary') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">2</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">2</span>
<span>{{ __('report.user_statistics') }}</span> <span>{{ __('report.user_statistics') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">3</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">3</span>
<span>{{ __('report.consultation_statistics') }}</span> <span>{{ __('report.consultation_statistics') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">4</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">4</span>
<span>{{ __('report.timeline_statistics') }}</span> <span>{{ __('report.timeline_statistics') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">5</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">5</span>
<span>{{ __('report.post_statistics') }}</span> <span>{{ __('report.post_statistics') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white dark:bg-[#A68966] dark:text-zinc-900">6</span> <span class="flex h-6 w-6 items-center justify-center rounded-full bg-[#2D3624] text-xs text-white">6</span>
<span>{{ __('report.trends_chart') }}</span> <span>{{ __('report.trends_chart') }}</span>
</div> </div>
</div> </div>

View File

@ -221,7 +221,7 @@ new class extends Component {
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"> <div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ __('admin.blocked_times') }}</flux:heading> <flux:heading size="xl">{{ __('admin.blocked_times') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400"> <flux:text class="mt-1 text-zinc-500">
{{ __('admin.blocked_times_description') }} {{ __('admin.blocked_times_description') }}
</flux:text> </flux:text>
</div> </div>
@ -248,11 +248,11 @@ new class extends Component {
</div> </div>
{{-- List --}} {{-- List --}}
<div class="rounded-lg border border-zinc-200 bg-white dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white">
@forelse($blockedTimes as $blocked) @forelse($blockedTimes as $blocked)
<div <div
wire:key="blocked-{{ $blocked->id }}" wire:key="blocked-{{ $blocked->id }}"
class="flex flex-col gap-4 border-b border-zinc-200 p-4 last:border-b-0 dark:border-zinc-700 sm:flex-row sm:items-center sm:justify-between" class="flex flex-col gap-4 border-b border-zinc-200 p-4 last:border-b-0 sm:flex-row sm:items-center sm:justify-between"
> >
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-3"> <div class="flex items-center gap-3">
@ -268,14 +268,14 @@ new class extends Component {
{{ __('admin.all_day') }} {{ __('admin.all_day') }}
</flux:badge> </flux:badge>
@else @else
<span class="text-sm text-zinc-600 dark:text-zinc-400"> <span class="text-sm text-zinc-600">
{{ $blocked->start_time }} - {{ $blocked->end_time }} {{ $blocked->start_time }} - {{ $blocked->end_time }}
</span> </span>
@endif @endif
</div> </div>
@if ($blocked->reason) @if ($blocked->reason)
<p class="mt-2 text-sm text-zinc-500 dark:text-zinc-400"> <p class="mt-2 text-sm text-zinc-500">
{{ $blocked->reason }} {{ $blocked->reason }}
</p> </p>
@endif @endif
@ -297,7 +297,7 @@ new class extends Component {
@empty @empty
<div class="p-8 text-center"> <div class="p-8 text-center">
<flux:icon name="calendar-days" class="mx-auto h-12 w-12 text-zinc-400" /> <flux:icon name="calendar-days" class="mx-auto h-12 w-12 text-zinc-400" />
<flux:text class="mt-2 text-zinc-500 dark:text-zinc-400"> <flux:text class="mt-2 text-zinc-500">
{{ __('admin.no_blocked_times') }} {{ __('admin.no_blocked_times') }}
</flux:text> </flux:text>
</div> </div>

View File

@ -90,7 +90,7 @@ new class extends Component {
<div> <div>
<div class="mb-6"> <div class="mb-6">
<flux:heading size="xl">{{ __('admin.working_hours') }}</flux:heading> <flux:heading size="xl">{{ __('admin.working_hours') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400"> <flux:text class="mt-1 text-zinc-500">
{{ __('admin.working_hours_description') }} {{ __('admin.working_hours_description') }}
</flux:text> </flux:text>
</div> </div>
@ -103,20 +103,20 @@ new class extends Component {
</div> </div>
@endif @endif
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<form wire:submit="save"> <form wire:submit="save">
<div class="space-y-1"> <div class="space-y-1">
@foreach (range(0, 6) as $day) @foreach (range(0, 6) as $day)
<div <div
wire:key="day-{{ $day }}" wire:key="day-{{ $day }}"
class="flex flex-col gap-4 border-b border-zinc-200 py-4 last:border-b-0 dark:border-zinc-700 sm:flex-row sm:items-center" class="flex flex-col gap-4 border-b border-zinc-200 py-4 last:border-b-0 sm:flex-row sm:items-center"
> >
<div class="flex items-center gap-4 sm:w-48"> <div class="flex items-center gap-4 sm:w-48">
<flux:switch <flux:switch
wire:model.live="schedule.{{ $day }}.is_active" wire:model.live="schedule.{{ $day }}.is_active"
aria-label="{{ __('admin.working_hours') }} - {{ \App\Models\WorkingHour::getDayName($day) }}" aria-label="{{ __('admin.working_hours') }} - {{ \App\Models\WorkingHour::getDayName($day) }}"
/> />
<span class="font-medium text-zinc-900 dark:text-zinc-100"> <span class="font-medium text-zinc-900">
{{ \App\Models\WorkingHour::getDayName($day) }} {{ \App\Models\WorkingHour::getDayName($day) }}
</span> </span>
</div> </div>
@ -129,7 +129,7 @@ new class extends Component {
wire:model.live="schedule.{{ $day }}.start_time" wire:model.live="schedule.{{ $day }}.start_time"
class="w-36" class="w-36"
/> />
<span class="text-zinc-500 dark:text-zinc-400">{{ __('admin.to') }}</span> <span class="text-zinc-500">{{ __('admin.to') }}</span>
<flux:input <flux:input
type="time" type="time"
wire:model.live="schedule.{{ $day }}.end_time" wire:model.live="schedule.{{ $day }}.end_time"
@ -138,7 +138,7 @@ new class extends Component {
</div> </div>
<div class="flex items-center gap-2 text-sm"> <div class="flex items-center gap-2 text-sm">
<span class="text-zinc-500 dark:text-zinc-400"> <span class="text-zinc-500">
({{ $this->formatTime($schedule[$day]['start_time']) }} - {{ $this->formatTime($schedule[$day]['end_time']) }}) ({{ $this->formatTime($schedule[$day]['start_time']) }} - {{ $this->formatTime($schedule[$day]['end_time']) }})
</span> </span>
@php($slots = $this->getSlotCount($day)) @php($slots = $this->getSlotCount($day))
@ -160,13 +160,13 @@ new class extends Component {
</div> </div>
@enderror @enderror
@else @else
<span class="text-zinc-400 dark:text-zinc-500">{{ __('admin.closed') }}</span> <span class="text-zinc-400">{{ __('admin.closed') }}</span>
@endif @endif
</div> </div>
@endforeach @endforeach
</div> </div>
<div class="mt-6 flex justify-end border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="mt-6 flex justify-end border-t border-zinc-200 pt-6">
<flux:button variant="primary" type="submit"> <flux:button variant="primary" type="submit">
{{ __('admin.save_working_hours') }} {{ __('admin.save_working_hours') }}
</flux:button> </flux:button>

View File

@ -115,18 +115,18 @@ new class extends Component {
<flux:heading size="xl">{{ __('timelines.create_timeline') }}</flux:heading> <flux:heading size="xl">{{ __('timelines.create_timeline') }}</flux:heading>
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6 ">
<form wire:submit="create" class="space-y-6"> <form wire:submit="create" class="space-y-6">
{{-- Client Selection --}} {{-- Client Selection --}}
<flux:field> <flux:field>
<flux:label class="required">{{ __('timelines.select_client') }}</flux:label> <flux:label class="required">{{ __('timelines.select_client') }}</flux:label>
@if($selectedUser) @if($selectedUser)
<div class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-3 dark:border-zinc-700 dark:bg-zinc-900"> <div class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-3 ">
<flux:avatar size="sm" name="{{ $selectedUser->full_name }}" /> <flux:avatar size="sm" name="{{ $selectedUser->full_name }}" />
<div class="flex-1"> <div class="flex-1">
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $selectedUser->full_name }}</div> <div class="font-medium text-zinc-900 ">{{ $selectedUser->full_name }}</div>
<div class="text-sm text-zinc-500 dark:text-zinc-400">{{ $selectedUser->email }}</div> <div class="text-sm text-zinc-500 ">{{ $selectedUser->email }}</div>
</div> </div>
<flux:button variant="ghost" size="sm" wire:click="clearSelection" icon="x-mark" /> <flux:button variant="ghost" size="sm" wire:click="clearSelection" icon="x-mark" />
</div> </div>
@ -141,29 +141,29 @@ new class extends Component {
/> />
@if(strlen($search) >= 2) @if(strlen($search) >= 2)
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg dark:border-zinc-700 dark:bg-zinc-800"> <div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg ">
@forelse($this->clients as $client) @forelse($this->clients as $client)
<button <button
type="button" type="button"
wire:key="client-{{ $client->id }}" wire:key="client-{{ $client->id }}"
wire:click="selectUser({{ $client->id }})" wire:click="selectUser({{ $client->id }})"
class="flex w-full items-center gap-3 px-4 py-3 text-start hover:bg-zinc-50 dark:hover:bg-zinc-700 first:rounded-t-lg last:rounded-b-lg" class="flex w-full items-center gap-3 px-4 py-3 text-start hover:bg-zinc-50 first:rounded-t-lg last:rounded-b-lg"
> >
<flux:avatar size="sm" name="{{ $client->full_name }}" /> <flux:avatar size="sm" name="{{ $client->full_name }}" />
<div> <div>
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $client->full_name }}</div> <div class="font-medium text-zinc-900 ">{{ $client->full_name }}</div>
<div class="text-sm text-zinc-500 dark:text-zinc-400">{{ $client->email }}</div> <div class="text-sm text-zinc-500 ">{{ $client->email }}</div>
</div> </div>
</button> </button>
@empty @empty
<div class="px-4 py-3 text-sm text-zinc-500 dark:text-zinc-400"> <div class="px-4 py-3 text-sm text-zinc-500 ">
{{ __('timelines.no_clients_found') }} {{ __('timelines.no_clients_found') }}
</div> </div>
@endforelse @endforelse
</div> </div>
@elseif(strlen($search) > 0 && strlen($search) < 2) @elseif(strlen($search) > 0 && strlen($search) < 2)
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white p-3 shadow-lg dark:border-zinc-700 dark:bg-zinc-800"> <div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white p-3 shadow-lg ">
<div class="text-sm text-zinc-500 dark:text-zinc-400"> <div class="text-sm text-zinc-500 ">
{{ __('timelines.type_to_search') }} {{ __('timelines.type_to_search') }}
</div> </div>
</div> </div>
@ -210,7 +210,7 @@ new class extends Component {
<flux:error name="initialNotes" /> <flux:error name="initialNotes" />
</flux:field> </flux:field>
<div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 dark:border-zinc-700"> <div class="flex items-center justify-end gap-4 border-t border-zinc-200 pt-6 ">
<flux:button variant="ghost" :href="route('admin.dashboard')" wire:navigate> <flux:button variant="ghost" :href="route('admin.dashboard')" wire:navigate>
{{ __('timelines.cancel') }} {{ __('timelines.cancel') }}
</flux:button> </flux:button>

View File

@ -196,11 +196,11 @@ new class extends Component {
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"> <div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ __('export.export_timelines') }}</flux:heading> <flux:heading size="xl">{{ __('export.export_timelines') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_timelines_description') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('export.export_timelines_description') }}</flux:text>
</div> </div>
</div> </div>
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"> <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
@ -217,19 +217,19 @@ new class extends Component {
<button <button
wire:click="clearClient" wire:click="clearClient"
type="button" type="button"
class="absolute end-2 top-8 text-zinc-400 hover:text-zinc-600 dark:hover:text-zinc-300" class="absolute end-2 top-8 text-zinc-400 hover:text-zinc-600"
> >
<flux:icon name="x-mark" class="h-4 w-4" /> <flux:icon name="x-mark" class="h-4 w-4" />
</button> </button>
@endif @endif
@if (strlen($clientSearch) >= 2 && ! $clientId && $this->clients->count() > 0) @if (strlen($clientSearch) >= 2 && ! $clientId && $this->clients->count() > 0)
<div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg dark:border-zinc-700 dark:bg-zinc-800"> <div class="absolute z-10 mt-1 w-full rounded-lg border border-zinc-200 bg-white shadow-lg">
@foreach ($this->clients as $client) @foreach ($this->clients as $client)
<button <button
wire:click="selectClient({{ $client->id }})" wire:click="selectClient({{ $client->id }})"
type="button" type="button"
class="block w-full px-4 py-2 text-start hover:bg-zinc-100 dark:hover:bg-zinc-700" class="block w-full px-4 py-2 text-start hover:bg-zinc-100"
> >
<span class="font-medium">{{ $client->full_name }}</span> <span class="font-medium">{{ $client->full_name }}</span>
<span class="text-sm text-zinc-500">{{ $client->email }}</span> <span class="text-sm text-zinc-500">{{ $client->email }}</span>
@ -273,7 +273,7 @@ new class extends Component {
wire:model.live="includeUpdates" wire:model.live="includeUpdates"
:label="__('export.include_updates')" :label="__('export.include_updates')"
/> />
<flux:text class="ms-6 text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="ms-6 text-sm text-zinc-500">
{{ __('export.include_updates_description') }} {{ __('export.include_updates_description') }}
</flux:text> </flux:text>
</div> </div>
@ -287,11 +287,11 @@ new class extends Component {
@endif @endif
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row"> <div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
<div> <div>
<flux:text class="text-zinc-600 dark:text-zinc-400"> <flux:text class="text-zinc-600">
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span> {{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
</flux:text> </flux:text>
</div> </div>
@ -323,9 +323,9 @@ new class extends Component {
</div> </div>
@if ($previewCount === 0) @if ($previewCount === 0)
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900"> <div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
<flux:icon name="clock" class="mx-auto mb-4 h-12 w-12 text-zinc-400" /> <flux:icon name="clock" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_timelines_match') }}</flux:text> <flux:text class="text-zinc-500">{{ __('export.no_timelines_match') }}</flux:text>
</div> </div>
@endif @endif
</div> </div>

View File

@ -125,7 +125,7 @@ new class extends Component
<div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-6">
<div> <div>
<flux:heading size="xl">{{ __('timelines.timelines') }}</flux:heading> <flux:heading size="xl">{{ __('timelines.timelines') }}</flux:heading>
<p class="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{{ __('timelines.timelines_description') }}</p> <p class="text-sm text-zinc-500 mt-1">{{ __('timelines.timelines_description') }}</p>
</div> </div>
<div class="flex gap-2"> <div class="flex gap-2">
<flux:button href="{{ route('admin.timelines.export') }}" icon="arrow-down-tray" wire:navigate> <flux:button href="{{ route('admin.timelines.export') }}" icon="arrow-down-tray" wire:navigate>
@ -150,7 +150,7 @@ new class extends Component
@endif @endif
<!-- Filters --> <!-- Filters -->
<div class="bg-white dark:bg-zinc-800 rounded-lg p-4 border border-zinc-200 dark:border-zinc-700 mb-6"> <div class="bg-white rounded-lg p-4 border border-zinc-200 mb-6">
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4"> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4 mb-4">
<flux:field> <flux:field>
<flux:input <flux:input
@ -208,27 +208,27 @@ new class extends Component
</div> </div>
<!-- Sort Headers --> <!-- Sort Headers -->
<div class="hidden lg:flex bg-zinc-100 dark:bg-zinc-700 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 dark:text-zinc-300 gap-4 mb-0"> <div class="hidden lg:flex bg-zinc-100 rounded-t-lg px-4 py-2 text-sm font-medium text-zinc-600 gap-4 mb-0">
<button wire:click="sort('case_name')" class="flex items-center gap-1 flex-1 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('case_name')" class="flex items-center gap-1 flex-1 hover:text-zinc-900">
{{ __('timelines.case_name') }} {{ __('timelines.case_name') }}
@if($sortBy === 'case_name') @if($sortBy === 'case_name')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<button wire:click="sort('user_id')" class="flex items-center gap-1 w-40 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('user_id')" class="flex items-center gap-1 w-40 hover:text-zinc-900">
{{ __('admin.client') }} {{ __('admin.client') }}
@if($sortBy === 'user_id') @if($sortBy === 'user_id')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<span class="w-24">{{ __('admin.current_status') }}</span> <span class="w-24">{{ __('admin.current_status') }}</span>
<button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('updated_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
{{ __('timelines.last_updated') }} {{ __('timelines.last_updated') }}
@if($sortBy === 'updated_at') @if($sortBy === 'updated_at')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@endif @endif
</button> </button>
<button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900 dark:hover:text-white"> <button wire:click="sort('created_at')" class="flex items-center gap-1 w-32 hover:text-zinc-900">
{{ __('timelines.created') }} {{ __('timelines.created') }}
@if($sortBy === 'created_at') @if($sortBy === 'created_at')
<flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" /> <flux:icon name="{{ $sortDir === 'asc' ? 'chevron-up' : 'chevron-down' }}" class="w-4 h-4" />
@ -241,15 +241,15 @@ new class extends Component
<!-- Timelines List --> <!-- Timelines List -->
<div class="space-y-0"> <div class="space-y-0">
@forelse($timelines as $timeline) @forelse($timelines as $timeline)
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white dark:bg-zinc-800 p-4 border border-zinc-200 dark:border-zinc-700 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}"> <div wire:key="timeline-{{ $timeline->id }}" class="bg-white p-4 border border-zinc-200 {{ $loop->first ? 'rounded-t-lg lg:rounded-t-none' : '' }} {{ $loop->last ? 'rounded-b-lg' : '' }} {{ !$loop->first ? 'border-t-0' : '' }}">
<div class="flex flex-col lg:flex-row lg:items-center gap-4"> <div class="flex flex-col lg:flex-row lg:items-center gap-4">
<!-- Case Name --> <!-- Case Name -->
<div class="flex-1"> <div class="flex-1">
<a href="{{ route('admin.timelines.show', $timeline) }}" class="font-semibold text-zinc-900 dark:text-zinc-100 hover:text-blue-600 dark:hover:text-blue-400" wire:navigate> <a href="{{ route('admin.timelines.show', $timeline) }}" class="font-semibold text-zinc-900 hover:text-blue-600" wire:navigate>
{{ $timeline->case_name }} {{ $timeline->case_name }}
</a> </a>
@if($timeline->case_reference) @if($timeline->case_reference)
<div class="text-xs text-zinc-500 dark:text-zinc-400 mt-1"> <div class="text-xs text-zinc-500 mt-1">
{{ __('timelines.reference') }}: {{ $timeline->case_reference }} {{ __('timelines.reference') }}: {{ $timeline->case_reference }}
</div> </div>
@endif @endif
@ -257,10 +257,10 @@ new class extends Component
<!-- Client --> <!-- Client -->
<div class="lg:w-40"> <div class="lg:w-40">
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ $timeline->user->full_name }} {{ $timeline->user->full_name }}
</div> </div>
<div class="text-xs text-zinc-500 dark:text-zinc-400"> <div class="text-xs text-zinc-500">
{{ $timeline->user->email }} {{ $timeline->user->email }}
</div> </div>
</div> </div>
@ -274,14 +274,14 @@ new class extends Component
<!-- Last Updated --> <!-- Last Updated -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ $timeline->updated_at->diffForHumans() }} {{ $timeline->updated_at->diffForHumans() }}
</div> </div>
</div> </div>
<!-- Created --> <!-- Created -->
<div class="lg:w-32"> <div class="lg:w-32">
<div class="text-sm text-zinc-500 dark:text-zinc-400"> <div class="text-sm text-zinc-500">
{{ $timeline->created_at->format('Y-m-d') }} {{ $timeline->created_at->format('Y-m-d') }}
</div> </div>
</div> </div>
@ -342,7 +342,7 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<div class="text-center py-12 text-zinc-500 dark:text-zinc-400 bg-white dark:bg-zinc-800 rounded-lg border border-zinc-200 dark:border-zinc-700"> <div class="text-center py-12 text-zinc-500 bg-white rounded-lg border border-zinc-200">
<flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" /> <flux:icon name="inbox" class="w-12 h-12 mx-auto mb-4" />
<p>{{ __('timelines.no_timelines') }}</p> <p>{{ __('timelines.no_timelines') }}</p>
</div> </div>

View File

@ -157,12 +157,12 @@ new class extends Component {
</div> </div>
{{-- Timeline Header --}} {{-- Timeline Header --}}
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 {{ $timeline->isArchived() ? 'opacity-75' : '' }}"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 {{ $timeline->isArchived() ? 'opacity-75' : '' }}">
<div class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between"> <div class="flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading> <flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
@if($timeline->case_reference) @if($timeline->case_reference)
<div class="mt-1 text-sm text-zinc-500 dark:text-zinc-400"> <div class="mt-1 text-sm text-zinc-500 ">
{{ __('timelines.reference') }}: {{ $timeline->case_reference }} {{ __('timelines.reference') }}: {{ $timeline->case_reference }}
</div> </div>
@endif @endif
@ -185,7 +185,7 @@ new class extends Component {
</div> </div>
</div> </div>
<div class="mt-4 flex flex-wrap gap-4 text-sm text-zinc-600 dark:text-zinc-300"> <div class="mt-4 flex flex-wrap gap-4 text-sm text-zinc-600 ">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<flux:icon.user class="size-4" /> <flux:icon.user class="size-4" />
<span>{{ $timeline->user->full_name }}</span> <span>{{ $timeline->user->full_name }}</span>
@ -219,7 +219,7 @@ new class extends Component {
@endif @endif
{{-- Add Update Form --}} {{-- Add Update Form --}}
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800 {{ $timeline->isArchived() ? 'opacity-60' : '' }}"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 {{ $timeline->isArchived() ? 'opacity-60' : '' }}">
<flux:heading size="lg" class="mb-4">{{ __('timelines.add_update') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('timelines.add_update') }}</flux:heading>
@if($timeline->isArchived()) @if($timeline->isArchived())
@ -258,34 +258,34 @@ new class extends Component {
</div> </div>
{{-- Timeline Updates --}} {{-- Timeline Updates --}}
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6 ">
<flux:heading size="lg" class="mb-6">{{ __('timelines.updates_history') }}</flux:heading> <flux:heading size="lg" class="mb-6">{{ __('timelines.updates_history') }}</flux:heading>
@if($timeline->updates->isEmpty()) @if($timeline->updates->isEmpty())
<div class="text-center py-8 text-zinc-500 dark:text-zinc-400"> <div class="text-center py-8 text-zinc-500 ">
{{ __('timelines.no_updates') }} {{ __('timelines.no_updates') }}
</div> </div>
@else @else
<div class="relative"> <div class="relative">
{{-- Timeline line --}} {{-- Timeline line --}}
<div class="absolute start-4 top-0 bottom-0 w-0.5 bg-zinc-200 dark:bg-zinc-700"></div> <div class="absolute start-4 top-0 bottom-0 w-0.5 bg-zinc-200 "></div>
<div class="space-y-6"> <div class="space-y-6">
@foreach($timeline->updates as $update) @foreach($timeline->updates as $update)
<div wire:key="update-{{ $update->id }}" class="relative flex gap-4"> <div wire:key="update-{{ $update->id }}" class="relative flex gap-4">
{{-- Timeline dot --}} {{-- Timeline dot --}}
<div class="relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900"> <div class="relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-blue-100 ">
<flux:icon.document-text class="size-4 text-blue-600 dark:text-blue-400" /> <flux:icon.document-text class="size-4 text-blue-600 " />
</div> </div>
{{-- Update content --}} {{-- Update content --}}
<div class="flex-1 rounded-lg border border-zinc-200 bg-zinc-50 p-4 dark:border-zinc-700 dark:bg-zinc-900"> <div class="flex-1 rounded-lg border border-zinc-200 bg-zinc-50 p-4 ">
<div class="mb-2 flex flex-wrap items-center justify-between gap-2"> <div class="mb-2 flex flex-wrap items-center justify-between gap-2">
<div class="flex flex-wrap items-center gap-3 text-sm"> <div class="flex flex-wrap items-center gap-3 text-sm">
<span class="font-medium text-zinc-900 dark:text-zinc-100"> <span class="font-medium text-zinc-900 ">
{{ $update->admin->full_name }} {{ $update->admin->full_name }}
</span> </span>
<span class="text-zinc-500 dark:text-zinc-400"> <span class="text-zinc-500 ">
{{ $update->created_at->format('Y-m-d H:i') }} {{ $update->created_at->format('Y-m-d H:i') }}
</span> </span>
@if($update->updated_at->gt($update->created_at)) @if($update->updated_at->gt($update->created_at))
@ -307,7 +307,7 @@ new class extends Component {
@endif @endif
</div> </div>
<div class="prose prose-sm dark:prose-invert max-w-none"> <div class="prose prose-sm max-w-none">
{!! $update->update_text !!} {!! $update->update_text !!}
</div> </div>
</div> </div>

View File

@ -158,11 +158,11 @@ new class extends Component {
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"> <div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
<div> <div>
<flux:heading size="xl">{{ __('export.export_users') }}</flux:heading> <flux:heading size="xl">{{ __('export.export_users') }}</flux:heading>
<flux:text class="mt-1 text-zinc-500 dark:text-zinc-400">{{ __('export.export_users_description') }}</flux:text> <flux:text class="mt-1 text-zinc-500">{{ __('export.export_users_description') }}</flux:text>
</div> </div>
</div> </div>
<div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="mb-6 rounded-lg border border-zinc-200 bg-white p-6">
<flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading> <flux:heading size="lg" class="mb-4">{{ __('export.filters_applied') }}</flux:heading>
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"> <div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
@ -208,11 +208,11 @@ new class extends Component {
@endif @endif
</div> </div>
<div class="rounded-lg border border-zinc-200 bg-white p-6 dark:border-zinc-700 dark:bg-zinc-800"> <div class="rounded-lg border border-zinc-200 bg-white p-6">
<div class="flex flex-col items-center justify-between gap-4 sm:flex-row"> <div class="flex flex-col items-center justify-between gap-4 sm:flex-row">
<div> <div>
<flux:text class="text-zinc-600 dark:text-zinc-400"> <flux:text class="text-zinc-600">
{{ __('export.total_records') }}: <span class="font-semibold text-zinc-900 dark:text-zinc-100">{{ $previewCount }}</span> {{ __('export.total_records') }}: <span class="font-semibold text-zinc-900">{{ $previewCount }}</span>
</flux:text> </flux:text>
</div> </div>
@ -244,9 +244,9 @@ new class extends Component {
</div> </div>
@if ($previewCount === 0) @if ($previewCount === 0)
<div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center dark:bg-zinc-900"> <div class="mt-6 rounded-lg bg-zinc-50 p-8 text-center">
<flux:icon name="users" class="mx-auto mb-4 h-12 w-12 text-zinc-400" /> <flux:icon name="users" class="mx-auto mb-4 h-12 w-12 text-zinc-400" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('export.no_users_match') }}</flux:text> <flux:text class="text-zinc-500">{{ __('export.no_users_match') }}</flux:text>
</div> </div>
@endif @endif
</div> </div>

View File

@ -27,21 +27,21 @@ new class extends Component
</div> </div>
@forelse ($pendingBookings as $booking) @forelse ($pendingBookings as $booking)
<div wire:key="pending-{{ $booking->id }}" class="border-b border-zinc-100 py-2 last:border-0 dark:border-zinc-700"> <div wire:key="pending-{{ $booking->id }}" class="border-b border-zinc-100 py-2 last:border-0">
<div class="font-medium text-zinc-900 dark:text-zinc-100">{{ $booking->user?->full_name ?? __('widgets.unknown_client') }}</div> <div class="font-medium text-zinc-900">{{ $booking->user?->full_name ?? __('widgets.unknown_client') }}</div>
<div class="flex items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400"> <div class="flex items-center gap-2 text-sm text-zinc-500">
<span>{{ $booking->booking_date->translatedFormat('M j') }}</span> <span>{{ $booking->booking_date->translatedFormat('M j') }}</span>
<flux:badge size="sm">{{ $booking->consultation_type->label() }}</flux:badge> <flux:badge size="sm">{{ $booking->consultation_type->label() }}</flux:badge>
</div> </div>
</div> </div>
@empty @empty
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_pending_bookings') }}</flux:text> <flux:text class="text-zinc-500">{{ __('widgets.no_pending_bookings') }}</flux:text>
@endforelse @endforelse
@if ($pendingCount > 5) @if ($pendingCount > 5)
<a <a
href="{{ route('admin.bookings.pending') }}" href="{{ route('admin.bookings.pending') }}"
class="mt-4 block text-sm text-blue-600 hover:underline dark:text-blue-400" class="mt-4 block text-sm text-blue-600 hover:underline"
wire:navigate wire:navigate
> >
{{ __('widgets.view_all_pending', ['count' => $pendingCount]) }} {{ __('widgets.view_all_pending', ['count' => $pendingCount]) }}

View File

@ -24,22 +24,22 @@ new class extends Component
<a <a
wire:key="update-{{ $update->id }}" wire:key="update-{{ $update->id }}"
href="{{ route('admin.timelines.show', $update->timeline_id) }}" href="{{ route('admin.timelines.show', $update->timeline_id) }}"
class="block border-b border-zinc-100 py-2 last:border-0 hover:bg-zinc-50 dark:border-zinc-700 dark:hover:bg-zinc-700/50" class="block border-b border-zinc-100 py-2 last:border-0 hover:bg-zinc-50"
wire:navigate wire:navigate
> >
<div class="text-sm text-zinc-900 dark:text-zinc-100"> <div class="text-sm text-zinc-900">
{{ Str::limit($update->update_text, 50) }} {{ Str::limit($update->update_text, 50) }}
</div> </div>
<div class="mt-1 flex items-center gap-2 text-xs text-zinc-500 dark:text-zinc-400"> <div class="mt-1 flex items-center gap-2 text-xs text-zinc-500">
<span>{{ $update->timeline?->case_name ?? __('widgets.unknown_case') }}</span> <span>{{ $update->timeline?->case_name ?? __('widgets.unknown_case') }}</span>
<span>&bull;</span> <span>&bull;</span>
<span>{{ $update->timeline?->user?->full_name ?? __('widgets.unknown_client') }}</span> <span>{{ $update->timeline?->user?->full_name ?? __('widgets.unknown_client') }}</span>
</div> </div>
<div class="mt-1 text-xs text-zinc-400 dark:text-zinc-500"> <div class="mt-1 text-xs text-zinc-400">
{{ $update->created_at->diffForHumans() }} {{ $update->created_at->diffForHumans() }}
</div> </div>
</a> </a>
@empty @empty
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_recent_updates') }}</flux:text> <flux:text class="text-zinc-500">{{ __('widgets.no_recent_updates') }}</flux:text>
@endforelse @endforelse
</div> </div>

View File

@ -33,12 +33,12 @@ new class extends Component
<flux:heading size="sm" class="mb-4">{{ __('widgets.todays_schedule') }}</flux:heading> <flux:heading size="sm" class="mb-4">{{ __('widgets.todays_schedule') }}</flux:heading>
@forelse ($todaySchedule as $consultation) @forelse ($todaySchedule as $consultation)
<div wire:key="schedule-{{ $consultation->id }}" class="flex items-center justify-between border-b border-zinc-100 py-2 last:border-0 dark:border-zinc-700"> <div wire:key="schedule-{{ $consultation->id }}" class="flex items-center justify-between border-b border-zinc-100 py-2 last:border-0">
<div> <div>
<div class="font-medium text-zinc-900 dark:text-zinc-100"> <div class="font-medium text-zinc-900">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</div> </div>
<div class="flex items-center gap-2 text-sm text-zinc-500 dark:text-zinc-400"> <div class="flex items-center gap-2 text-sm text-zinc-500">
<span>{{ $consultation->user?->full_name ?? __('widgets.unknown_client') }}</span> <span>{{ $consultation->user?->full_name ?? __('widgets.unknown_client') }}</span>
<flux:badge size="sm">{{ $consultation->consultation_type->label() }}</flux:badge> <flux:badge size="sm">{{ $consultation->consultation_type->label() }}</flux:badge>
</div> </div>
@ -62,6 +62,6 @@ new class extends Component
</div> </div>
</div> </div>
@empty @empty
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('widgets.no_consultations_today') }}</flux:text> <flux:text class="text-zinc-500">{{ __('widgets.no_consultations_today') }}</flux:text>
@endforelse @endforelse
</div> </div>

View File

@ -63,7 +63,7 @@
</form> </form>
@if (Route::has('register')) @if (Route::has('register'))
<div class="space-x-1 text-sm text-center rtl:space-x-reverse text-zinc-600 dark:text-zinc-400"> <div class="space-x-1 text-sm text-center rtl:space-x-reverse text-zinc-600">
<span>{{ __('Don\'t have an account?') }}</span> <span>{{ __('Don\'t have an account?') }}</span>
<flux:link :href="route('register')" wire:navigate>{{ __('Sign up') }}</flux:link> <flux:link :href="route('register')" wire:navigate>{{ __('Sign up') }}</flux:link>
</div> </div>

View File

@ -70,7 +70,7 @@
</div> </div>
</form> </form>
<div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-600 dark:text-zinc-400"> <div class="space-x-1 rtl:space-x-reverse text-center text-sm text-zinc-600">
<span>{{ __('Already have an account?') }}</span> <span>{{ __('Already have an account?') }}</span>
<flux:link :href="route('login')" wire:navigate>{{ __('Log in') }}</flux:link> <flux:link :href="route('login')" wire:navigate>{{ __('Log in') }}</flux:link>
</div> </div>

View File

@ -5,7 +5,7 @@
</flux:text> </flux:text>
@if (session('status') == 'verification-link-sent') @if (session('status') == 'verification-link-sent')
<flux:text class="text-center font-medium !dark:text-green-400 !text-green-600"> <flux:text class="text-center font-medium !text-green-600">
{{ __('A new verification link has been sent to the email address you provided during registration.') }} {{ __('A new verification link has been sent to the email address you provided during registration.') }}
</flux:text> </flux:text>
@endif @endif

View File

@ -172,7 +172,7 @@ new class extends Component
<!-- Day Headers --> <!-- Day Headers -->
<div class="grid grid-cols-7 gap-1 mb-2" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}"> <div class="grid grid-cols-7 gap-1 mb-2" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
@foreach($dayHeaders as $day) @foreach($dayHeaders as $day)
<div class="text-center text-sm font-semibold text-zinc-600 dark:text-zinc-400"> <div class="text-center text-sm font-semibold text-zinc-600">
{{ __("calendar.{$day}") }} {{ __("calendar.{$day}") }}
</div> </div>
@endforeach @endforeach
@ -188,11 +188,11 @@ new class extends Component
wire:click="selectDate('{{ $dayData['date'] }}')" wire:click="selectDate('{{ $dayData['date'] }}')"
@class([ @class([
'calendar-cell rounded-lg text-center transition-colors font-medium min-h-[44px] text-white', 'calendar-cell rounded-lg text-center transition-colors font-medium min-h-[44px] text-white',
'bg-[#4A5D23]/70 hover:bg-[#4A5D23]/85 dark:bg-[#4A5D23]/60 dark:hover:bg-[#4A5D23]/75' => $dayData['status'] === 'available', 'bg-[#4A5D23]/70 hover:bg-[#4A5D23]/85' => $dayData['status'] === 'available',
'bg-[#D4A84B]/70 hover:bg-[#D4A84B]/85 dark:bg-[#D4A84B]/60 dark:hover:bg-[#D4A84B]/75' => $dayData['status'] === 'partial', 'bg-[#D4A84B]/70 hover:bg-[#D4A84B]/85' => $dayData['status'] === 'partial',
'bg-sky-400/50 cursor-not-allowed dark:bg-sky-500/40' => $dayData['status'] === 'user_booked', 'bg-sky-400/50 cursor-not-allowed' => $dayData['status'] === 'user_booked',
'bg-zinc-300/50 !text-zinc-400 cursor-not-allowed dark:bg-zinc-700/50 dark:!text-zinc-500' => in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']), 'bg-zinc-300/50 !text-zinc-400 cursor-not-allowed' => in_array($dayData['status'], ['past', 'closed', 'blocked', 'full']),
'ring-2 ring-[#A68966] dark:ring-[#C4A882]' => $selectedDate === $dayData['date'], 'ring-2 ring-[#A68966]' => $selectedDate === $dayData['date'],
]) ])
@disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full', 'user_booked'])) @disabled(in_array($dayData['status'], ['past', 'closed', 'blocked', 'full', 'user_booked']))
> >
@ -215,14 +215,14 @@ new class extends Component
@foreach($availableSlots as $slot) @foreach($availableSlots as $slot)
<button <button
wire:click="$parent.selectSlot('{{ $selectedDate }}', '{{ $slot }}')" wire:click="$parent.selectSlot('{{ $selectedDate }}', '{{ $slot }}')"
class="time-slot-btn rounded-lg border border-amber-500 text-amber-600 hover:bg-amber-500 hover:text-white transition-colors dark:border-amber-400 dark:text-amber-400 dark:hover:bg-amber-500 dark:hover:text-white" class="time-slot-btn rounded-lg border border-amber-500 text-amber-600 hover:bg-amber-500 hover:text-white transition-colors"
> >
{{ \Carbon\Carbon::parse($slot)->format('g:i A') }} {{ \Carbon\Carbon::parse($slot)->format('g:i A') }}
</button> </button>
@endforeach @endforeach
</div> </div>
@else @else
<p class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_slots_available') }}</p> <p class="text-zinc-500">{{ __('booking.no_slots_available') }}</p>
@endif @endif
</div> </div>
@endif @endif
@ -230,22 +230,22 @@ new class extends Component
<!-- Legend --> <!-- Legend -->
<div class="flex flex-wrap gap-4 mt-6 text-sm"> <div class="flex flex-wrap gap-4 mt-6 text-sm">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="w-4 h-4 rounded bg-[#4A5D23]/70 dark:bg-[#4A5D23]/60"></div> <div class="w-4 h-4 rounded bg-[#4A5D23]/70"></div>
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.available') }}</span> <span class="text-zinc-600">{{ __('booking.available') }}</span>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="w-4 h-4 rounded bg-[#D4A84B]/70 dark:bg-[#D4A84B]/60"></div> <div class="w-4 h-4 rounded bg-[#D4A84B]/70"></div>
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.partial') }}</span> <span class="text-zinc-600">{{ __('booking.partial') }}</span>
</div> </div>
@if(count($bookedDates) > 0) @if(count($bookedDates) > 0)
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="w-4 h-4 rounded bg-sky-400/50 dark:bg-sky-500/40"></div> <div class="w-4 h-4 rounded bg-sky-400/50"></div>
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.user_booked') }}</span> <span class="text-zinc-600">{{ __('booking.user_booked') }}</span>
</div> </div>
@endif @endif
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<div class="w-4 h-4 rounded bg-zinc-300/50 dark:bg-zinc-700/50"></div> <div class="w-4 h-4 rounded bg-zinc-300/50"></div>
<span class="text-zinc-600 dark:text-zinc-400">{{ __('booking.unavailable') }}</span> <span class="text-zinc-600">{{ __('booking.unavailable') }}</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -187,32 +187,32 @@ new class extends Component
<flux:heading size="xl" class="mb-6 text-xl sm:text-2xl">{{ __('booking.request_consultation') }}</flux:heading> <flux:heading size="xl" class="mb-6 text-xl sm:text-2xl">{{ __('booking.request_consultation') }}</flux:heading>
{{-- Booking Status Banner --}} {{-- Booking Status Banner --}}
<div class="mb-6 rounded-lg border p-4 {{ $canBookToday ? 'border-green-200 bg-green-50 dark:border-green-800 dark:bg-green-900/20' : 'border-amber-200 bg-amber-50 dark:border-amber-800 dark:bg-amber-900/20' }}"> <div class="mb-6 rounded-lg border p-4 {{ $canBookToday ? 'border-green-200 bg-green-50' : 'border-amber-200 bg-amber-50' }}">
<div class="flex items-start gap-3"> <div class="flex items-start gap-3">
@if($canBookToday) @if($canBookToday)
<flux:icon name="check-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-green-600 dark:text-green-400" /> <flux:icon name="check-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-green-600" />
<div> <div>
<p class="font-medium text-green-700 dark:text-green-400">{{ __('booking.can_book_today') }}</p> <p class="font-medium text-green-700">{{ __('booking.can_book_today') }}</p>
</div> </div>
@else @else
<flux:icon name="information-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600 dark:text-amber-400" /> <flux:icon name="information-circle" class="mt-0.5 h-5 w-5 flex-shrink-0 text-amber-600" />
<div> <div>
<p class="font-medium text-amber-700 dark:text-amber-400">{{ __('booking.already_booked_today') }}</p> <p class="font-medium text-amber-700">{{ __('booking.already_booked_today') }}</p>
</div> </div>
@endif @endif
</div> </div>
@if($pendingRequests->isNotEmpty()) @if($pendingRequests->isNotEmpty())
<div class="mt-3 border-t border-zinc-200 pt-3 dark:border-zinc-700"> <div class="mt-3 border-t border-zinc-200 pt-3">
@if($pendingRequests->count() === 1) @if($pendingRequests->count() === 1)
<p class="text-sm text-zinc-600 dark:text-zinc-400"> <p class="text-sm text-zinc-600">
{{ __('booking.pending_for_date', ['date' => $pendingRequests->first()->booking_date->format('d/m/Y')]) }} {{ __('booking.pending_for_date', ['date' => $pendingRequests->first()->booking_date->format('d/m/Y')]) }}
</p> </p>
@else @else
<p class="text-sm text-zinc-600 dark:text-zinc-400"> <p class="text-sm text-zinc-600">
{{ __('booking.pending_count', ['count' => $pendingRequests->count()]) }} {{ __('booking.pending_count', ['count' => $pendingRequests->count()]) }}
</p> </p>
<ul class="mt-1 list-inside list-disc text-sm text-zinc-500 dark:text-zinc-400"> <ul class="mt-1 list-inside list-disc text-sm text-zinc-500">
@foreach($pendingRequests->take(3) as $request) @foreach($pendingRequests->take(3) as $request)
<li>{{ $request->booking_date->format('d/m/Y') }}</li> <li>{{ $request->booking_date->format('d/m/Y') }}</li>
@endforeach @endforeach
@ -224,7 +224,7 @@ new class extends Component
</div> </div>
@endif @endif
<p class="mt-3 text-xs text-zinc-500 dark:text-zinc-400"> <p class="mt-3 text-xs text-zinc-500">
{{ __('booking.limit_message') }} {{ __('booking.limit_message') }}
</p> </p>
</div> </div>
@ -232,19 +232,19 @@ new class extends Component
@if(!$selectedDate || !$selectedTime) @if(!$selectedDate || !$selectedTime)
<!-- Step 1: Calendar Selection --> <!-- Step 1: Calendar Selection -->
<div class="mt-6"> <div class="mt-6">
<p class="mb-4 text-zinc-600 dark:text-zinc-400">{{ __('booking.select_date_time') }}</p> <p class="mb-4 text-zinc-600">{{ __('booking.select_date_time') }}</p>
<livewire:availability-calendar :booked-dates="$bookedDates" /> <livewire:availability-calendar :booked-dates="$bookedDates" />
</div> </div>
@else @else
<!-- Step 2: Problem Summary --> <!-- Step 2: Problem Summary -->
<div class="mt-6"> <div class="mt-6">
<!-- Selected Time Display --> <!-- Selected Time Display -->
<div class="bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg mb-6 border border-amber-200 dark:border-amber-800"> <div class="bg-amber-50 p-4 rounded-lg mb-6 border border-amber-200">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<div> <div>
<p class="font-semibold text-zinc-900 dark:text-zinc-100">{{ __('booking.selected_time') }}</p> <p class="font-semibold text-zinc-900">{{ __('booking.selected_time') }}</p>
<p class="text-zinc-600 dark:text-zinc-400">{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}</p> <p class="text-zinc-600">{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}</p>
<p class="text-zinc-600 dark:text-zinc-400">{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}</p> <p class="text-zinc-600">{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}</p>
</div> </div>
<flux:button size="sm" wire:click="clearSelection"> <flux:button size="sm" wire:click="clearSelection">
{{ __('common.change') }} {{ __('common.change') }}
@ -285,7 +285,7 @@ new class extends Component
<!-- Confirmation Step --> <!-- Confirmation Step -->
<flux:callout> <flux:callout>
<flux:heading size="sm">{{ __('booking.confirm_booking') }}</flux:heading> <flux:heading size="sm">{{ __('booking.confirm_booking') }}</flux:heading>
<p class="text-zinc-600 dark:text-zinc-400">{{ __('booking.confirm_message') }}</p> <p class="text-zinc-600">{{ __('booking.confirm_message') }}</p>
<div class="mt-4 space-y-2"> <div class="mt-4 space-y-2">
<p><strong>{{ __('booking.date') }}:</strong> <p><strong>{{ __('booking.date') }}:</strong>
@ -297,7 +297,7 @@ new class extends Component
<div class="mt-4"> <div class="mt-4">
<p><strong>{{ __('booking.problem_summary') }}:</strong></p> <p><strong>{{ __('booking.problem_summary') }}:</strong></p>
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">{{ $problemSummary }}</p> <p class="mt-1 text-sm text-zinc-600">{{ $problemSummary }}</p>
</div> </div>
</flux:callout> </flux:callout>

View File

@ -65,18 +65,18 @@ new class extends Component
@if($upcoming->isNotEmpty()) @if($upcoming->isNotEmpty())
<div class="space-y-3 sm:space-y-4"> <div class="space-y-3 sm:space-y-4">
@foreach($upcoming as $consultation) @foreach($upcoming as $consultation)
<div wire:key="upcoming-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700"> <div wire:key="upcoming-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
<div class="flex flex-col sm:flex-row justify-between items-start gap-4"> <div class="flex flex-col sm:flex-row justify-between items-start gap-4">
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-2 mb-2"> <div class="flex items-center gap-2 mb-2">
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" /> <flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
<span class="font-semibold text-zinc-900 dark:text-zinc-100"> <span class="font-semibold text-zinc-900">
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }} {{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
</span> </span>
</div> </div>
<div class="flex items-center gap-2 mb-3"> <div class="flex items-center gap-2 mb-3">
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" /> <flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
<span class="text-zinc-600 dark:text-zinc-400"> <span class="text-zinc-600">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</span> </span>
</div> </div>
@ -116,9 +116,9 @@ new class extends Component
@endforeach @endforeach
</div> </div>
@else @else
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg"> <div class="empty-state bg-zinc-50 rounded-lg">
<flux:icon name="calendar-days" class="empty-state-icon text-zinc-300 dark:text-zinc-600" /> <flux:icon name="calendar-days" class="empty-state-icon text-zinc-300" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_upcoming_consultations') }}</flux:text> <flux:text class="text-zinc-500">{{ __('booking.no_upcoming_consultations') }}</flux:text>
<div class="mt-4"> <div class="mt-4">
<flux:button href="{{ route('client.consultations.book') }}" variant="primary" size="sm" wire:navigate class="w-full sm:w-auto"> <flux:button href="{{ route('client.consultations.book') }}" variant="primary" size="sm" wire:navigate class="w-full sm:w-auto">
{{ __('booking.book_consultation') }} {{ __('booking.book_consultation') }}
@ -135,26 +135,26 @@ new class extends Component
@if($pending->isNotEmpty()) @if($pending->isNotEmpty())
<div class="space-y-3 sm:space-y-4"> <div class="space-y-3 sm:space-y-4">
@foreach($pending as $consultation) @foreach($pending as $consultation)
<div wire:key="pending-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700"> <div wire:key="pending-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
<div class="flex flex-col sm:flex-row justify-between items-start gap-4"> <div class="flex flex-col sm:flex-row justify-between items-start gap-4">
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-2 mb-2"> <div class="flex items-center gap-2 mb-2">
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" /> <flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
<span class="font-semibold text-zinc-900 dark:text-zinc-100"> <span class="font-semibold text-zinc-900">
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }} {{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
</span> </span>
</div> </div>
<div class="flex items-center gap-2 mb-2"> <div class="flex items-center gap-2 mb-2">
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" /> <flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
<span class="text-zinc-600 dark:text-zinc-400"> <span class="text-zinc-600">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</span> </span>
</div> </div>
<div class="text-sm text-zinc-500 dark:text-zinc-400 mb-2"> <div class="text-sm text-zinc-500 mb-2">
{{ __('booking.submitted_on') }}: {{ $consultation->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }} {{ __('booking.submitted_on') }}: {{ $consultation->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}
</div> </div>
@if($consultation->problem_summary) @if($consultation->problem_summary)
<p class="text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2"> <p class="text-sm text-zinc-600 line-clamp-2">
{{ Str::limit($consultation->problem_summary, 150) }} {{ Str::limit($consultation->problem_summary, 150) }}
</p> </p>
@endif @endif
@ -167,9 +167,9 @@ new class extends Component
@endforeach @endforeach
</div> </div>
@else @else
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg"> <div class="empty-state bg-zinc-50 rounded-lg">
<flux:icon name="inbox" class="empty-state-icon text-zinc-300 dark:text-zinc-600" /> <flux:icon name="inbox" class="empty-state-icon text-zinc-300" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_pending_requests') }}</flux:text> <flux:text class="text-zinc-500">{{ __('booking.no_pending_requests') }}</flux:text>
</div> </div>
@endif @endif
</section> </section>
@ -181,18 +181,18 @@ new class extends Component
@if($past->isNotEmpty()) @if($past->isNotEmpty())
<div class="space-y-3 sm:space-y-4"> <div class="space-y-3 sm:space-y-4">
@foreach($past as $consultation) @foreach($past as $consultation)
<div wire:key="past-{{ $consultation->id }}" class="bg-white dark:bg-zinc-800 rounded-lg p-3 sm:p-4 border border-zinc-200 dark:border-zinc-700"> <div wire:key="past-{{ $consultation->id }}" class="bg-white rounded-lg p-3 sm:p-4 border border-zinc-200">
<div class="flex flex-col sm:flex-row justify-between items-start gap-4"> <div class="flex flex-col sm:flex-row justify-between items-start gap-4">
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center gap-2 mb-2"> <div class="flex items-center gap-2 mb-2">
<flux:icon name="calendar" class="w-5 h-5 text-zinc-500" /> <flux:icon name="calendar" class="w-5 h-5 text-zinc-500" />
<span class="font-semibold text-zinc-900 dark:text-zinc-100"> <span class="font-semibold text-zinc-900">
{{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }} {{ $consultation->booking_date->translatedFormat(app()->getLocale() === 'ar' ? 'l، j F Y' : 'l, F j, Y') }}
</span> </span>
</div> </div>
<div class="flex items-center gap-2 mb-3"> <div class="flex items-center gap-2 mb-3">
<flux:icon name="clock" class="w-5 h-5 text-zinc-500" /> <flux:icon name="clock" class="w-5 h-5 text-zinc-500" />
<span class="text-zinc-600 dark:text-zinc-400"> <span class="text-zinc-600">
{{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }} {{ \Carbon\Carbon::parse($consultation->booking_time)->format('g:i A') }}
</span> </span>
</div> </div>
@ -226,9 +226,9 @@ new class extends Component
{{ $past->links() }} {{ $past->links() }}
</div> </div>
@else @else
<div class="empty-state bg-zinc-50 dark:bg-zinc-800/50 rounded-lg"> <div class="empty-state bg-zinc-50 rounded-lg">
<flux:icon name="archive-box" class="empty-state-icon text-zinc-300 dark:text-zinc-600" /> <flux:icon name="archive-box" class="empty-state-icon text-zinc-300" />
<flux:text class="text-zinc-500 dark:text-zinc-400">{{ __('booking.no_past_consultations') }}</flux:text> <flux:text class="text-zinc-500">{{ __('booking.no_past_consultations') }}</flux:text>
</div> </div>
@endif @endif
</section> </section>

View File

@ -33,7 +33,7 @@ new class extends Component {
<div class="space-y-6 p-4 sm:p-6"> <div class="space-y-6 p-4 sm:p-6">
{{-- Welcome Section --}} {{-- Welcome Section --}}
<div class="rounded-lg border border-zinc-200 bg-[#0A1F44] p-4 sm:p-6 text-white dark:border-zinc-700"> <div class="rounded-lg border border-zinc-200 bg-[#0A1F44] p-4 sm:p-6 text-white">
<flux:heading size="xl" class="text-white text-lg sm:text-xl lg:text-2xl"> <flux:heading size="xl" class="text-white text-lg sm:text-xl lg:text-2xl">
{{ __('client.dashboard.welcome', ['name' => auth()->user()->full_name]) }} {{ __('client.dashboard.welcome', ['name' => auth()->user()->full_name]) }}
</flux:heading> </flux:heading>
@ -45,7 +45,7 @@ new class extends Component {
{{-- Widgets Grid --}} {{-- Widgets Grid --}}
<div class="grid gap-4 sm:gap-6 grid-cols-1 sm:grid-cols-2"> <div class="grid gap-4 sm:gap-6 grid-cols-1 sm:grid-cols-2">
{{-- Upcoming Consultation Widget --}} {{-- Upcoming Consultation Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
<flux:heading size="lg" class="mb-4 text-base sm:text-lg"> <flux:heading size="lg" class="mb-4 text-base sm:text-lg">
{{ __('client.dashboard.upcoming_consultation') }} {{ __('client.dashboard.upcoming_consultation') }}
</flux:heading> </flux:heading>
@ -106,7 +106,7 @@ new class extends Component {
</div> </div>
{{-- Active Cases Widget --}} {{-- Active Cases Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
<flux:heading size="lg" class="mb-4 text-base sm:text-lg"> <flux:heading size="lg" class="mb-4 text-base sm:text-lg">
{{ __('client.dashboard.active_cases') }} {{ __('client.dashboard.active_cases') }}
</flux:heading> </flux:heading>
@ -122,8 +122,8 @@ new class extends Component {
$latestUpdate = $latestTimeline->updates()->reorder()->latest()->first(); $latestUpdate = $latestTimeline->updates()->reorder()->latest()->first();
@endphp @endphp
@if ($latestUpdate) @if ($latestUpdate)
<div class="rounded-lg bg-zinc-50 p-3 dark:bg-zinc-800"> <div class="rounded-lg bg-zinc-50 p-3">
<flux:text size="sm" class="text-zinc-600 dark:text-zinc-400"> <flux:text size="sm" class="text-zinc-600">
{{ __('client.dashboard.latest_update') }}: {{ __('client.dashboard.latest_update') }}:
</flux:text> </flux:text>
<flux:text class="mt-1"> <flux:text class="mt-1">
@ -152,7 +152,7 @@ new class extends Component {
</div> </div>
{{-- Recent Updates Widget --}} {{-- Recent Updates Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
<flux:heading size="lg" class="mb-4 text-base sm:text-lg"> <flux:heading size="lg" class="mb-4 text-base sm:text-lg">
{{ __('client.dashboard.recent_updates') }} {{ __('client.dashboard.recent_updates') }}
</flux:heading> </flux:heading>
@ -160,7 +160,7 @@ new class extends Component {
@if ($recentUpdates->isNotEmpty()) @if ($recentUpdates->isNotEmpty())
<div class="space-y-3"> <div class="space-y-3">
@foreach ($recentUpdates as $update) @foreach ($recentUpdates as $update)
<div class="border-b border-zinc-100 pb-3 last:border-0 last:pb-0 dark:border-zinc-800"> <div class="border-b border-zinc-100 pb-3 last:border-0 last:pb-0 ">
<div class="flex items-start justify-between gap-2"> <div class="flex items-start justify-between gap-2">
<div class="flex-1"> <div class="flex-1">
<flux:text size="sm" class="font-medium"> <flux:text size="sm" class="font-medium">
@ -193,7 +193,7 @@ new class extends Component {
</div> </div>
{{-- Booking Status Widget --}} {{-- Booking Status Widget --}}
<div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900"> <div class="rounded-lg border border-zinc-200 bg-white p-4 sm:p-6 shadow-sm ">
<flux:heading size="lg" class="mb-4 text-base sm:text-lg"> <flux:heading size="lg" class="mb-4 text-base sm:text-lg">
{{ __('client.dashboard.booking_status') }} {{ __('client.dashboard.booking_status') }}
</flux:heading> </flux:heading>
@ -208,18 +208,18 @@ new class extends Component {
</div> </div>
@endif @endif
<div class="rounded-lg p-3 {{ $canBookToday ? 'bg-green-50 dark:bg-green-900/20' : 'bg-amber-50 dark:bg-amber-900/20' }}"> <div class="rounded-lg p-3 {{ $canBookToday ? 'bg-green-50' : 'bg-amber-50' }}">
@if ($canBookToday) @if ($canBookToday)
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<flux:icon name="check-circle" class="h-5 w-5 text-green-600" /> <flux:icon name="check-circle" class="h-5 w-5 text-green-600" />
<flux:text class="text-green-700 dark:text-green-400"> <flux:text class="text-green-700">
{{ __('client.dashboard.can_book') }} {{ __('client.dashboard.can_book') }}
</flux:text> </flux:text>
</div> </div>
@else @else
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<flux:icon name="information-circle" class="h-5 w-5 text-amber-600" /> <flux:icon name="information-circle" class="h-5 w-5 text-amber-600" />
<flux:text class="text-amber-700 dark:text-amber-400"> <flux:text class="text-amber-700">
{{ __('client.dashboard.cannot_book') }} {{ __('client.dashboard.cannot_book') }}
</flux:text> </flux:text>
</div> </div>

View File

@ -39,66 +39,66 @@ new class extends Component
</div> </div>
{{-- Profile Information Card --}} {{-- Profile Information Card --}}
<div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 shadow-sm dark:border-zinc-700 dark:bg-zinc-900"> <div class="mt-6 rounded-lg border border-zinc-200 bg-white p-6 shadow-sm">
@if ($isIndividual) @if ($isIndividual)
<dl class="space-y-4"> <dl class="space-y-4">
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.full_name') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.full_name') }}</dt>
<dd class="text-lg font-medium">{{ $user->full_name }}</dd> <dd class="text-lg font-medium">{{ $user->full_name }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.national_id') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.national_id') }}</dt>
<dd>{{ $user->national_id }}</dd> <dd>{{ $user->national_id }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.email') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.email') }}</dt>
<dd>{{ $user->email }}</dd> <dd>{{ $user->email }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.phone') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.phone') }}</dt>
<dd>{{ $user->phone }}</dd> <dd>{{ $user->phone }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.preferred_language') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.preferred_language') }}</dt>
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd> <dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.member_since') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.member_since') }}</dt>
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd> <dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
</div> </div>
</dl> </dl>
@else @else
<dl class="space-y-4"> <dl class="space-y-4">
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.company_name') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.company_name') }}</dt>
<dd class="text-lg font-medium">{{ $user->company_name }}</dd> <dd class="text-lg font-medium">{{ $user->company_name }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.registration_number') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.registration_number') }}</dt>
<dd>{{ $user->company_cert_number }}</dd> <dd>{{ $user->company_cert_number }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.contact_person') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.contact_person') }}</dt>
<dd>{{ $user->contact_person_name }}</dd> <dd>{{ $user->contact_person_name }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.contact_person_id') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.contact_person_id') }}</dt>
<dd>{{ $user->contact_person_id }}</dd> <dd>{{ $user->contact_person_id }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.email') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.email') }}</dt>
<dd>{{ $user->email }}</dd> <dd>{{ $user->email }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.phone') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.phone') }}</dt>
<dd>{{ $user->phone }}</dd> <dd>{{ $user->phone }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.preferred_language') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.preferred_language') }}</dt>
<dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd> <dd>{{ $user->preferred_language === 'ar' ? __('profile.arabic') : __('profile.english') }}</dd>
</div> </div>
<div> <div>
<dt class="text-sm text-zinc-500 dark:text-zinc-400">{{ __('profile.member_since') }}</dt> <dt class="text-sm text-zinc-500">{{ __('profile.member_since') }}</dt>
<dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd> <dd>{{ $user->created_at->translatedFormat(app()->getLocale() === 'ar' ? 'j F Y' : 'F j, Y') }}</dd>
</div> </div>
</dl> </dl>

View File

@ -34,17 +34,17 @@ new class extends Component
{{-- Active Timelines --}} {{-- Active Timelines --}}
@if($activeTimelines->total() > 0) @if($activeTimelines->total() > 0)
<div class="mb-6 sm:mb-8"> <div class="mb-6 sm:mb-8">
<h2 class="text-base sm:text-lg font-semibold text-zinc-900 dark:text-zinc-100 mb-4">{{ __('client.active_cases') }}</h2> <h2 class="text-base sm:text-lg font-semibold text-zinc-900 mb-4">{{ __('client.active_cases') }}</h2>
<div class="space-y-3 sm:space-y-4"> <div class="space-y-3 sm:space-y-4">
@foreach($activeTimelines as $timeline) @foreach($activeTimelines as $timeline)
<div wire:key="timeline-{{ $timeline->id }}" class="bg-white dark:bg-zinc-800 p-3 sm:p-4 rounded-lg border-s-4 border-amber-500 shadow-sm"> <div wire:key="timeline-{{ $timeline->id }}" class="bg-white p-3 sm:p-4 rounded-lg border-s-4 border-amber-500 shadow-sm">
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3"> <div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h3 class="font-medium text-zinc-900 dark:text-zinc-100 truncate">{{ $timeline->case_name }}</h3> <h3 class="font-medium text-zinc-900 truncate">{{ $timeline->case_name }}</h3>
@if($timeline->case_reference) @if($timeline->case_reference)
<p class="text-sm text-zinc-600 dark:text-zinc-400">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p> <p class="text-sm text-zinc-600">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
@endif @endif
<p class="text-xs sm:text-sm text-zinc-500 dark:text-zinc-500 mt-1"> <p class="text-xs sm:text-sm text-zinc-500 mt-1">
{{ __('client.updates') }}: {{ $timeline->updates_count }} {{ __('client.updates') }}: {{ $timeline->updates_count }}
@if($timeline->updates->first()) @if($timeline->updates->first())
· {{ __('client.last_update') }}: {{ $timeline->updates->first()->created_at->diffForHumans() }} · {{ __('client.last_update') }}: {{ $timeline->updates->first()->created_at->diffForHumans() }}
@ -72,17 +72,17 @@ new class extends Component
{{-- Archived Timelines --}} {{-- Archived Timelines --}}
@if($archivedTimelines->total() > 0) @if($archivedTimelines->total() > 0)
<div> <div>
<h2 class="text-base sm:text-lg font-semibold text-zinc-600 dark:text-zinc-400 mb-4">{{ __('client.archived_cases') }}</h2> <h2 class="text-base sm:text-lg font-semibold text-zinc-600 mb-4">{{ __('client.archived_cases') }}</h2>
<div class="space-y-3 sm:space-y-4 opacity-75"> <div class="space-y-3 sm:space-y-4 opacity-75">
@foreach($archivedTimelines as $timeline) @foreach($archivedTimelines as $timeline)
<div wire:key="timeline-{{ $timeline->id }}" class="bg-zinc-50 dark:bg-zinc-900 p-3 sm:p-4 rounded-lg shadow-sm"> <div wire:key="timeline-{{ $timeline->id }}" class="bg-zinc-50 p-3 sm:p-4 rounded-lg shadow-sm">
<div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3"> <div class="flex flex-col sm:flex-row sm:justify-between sm:items-start gap-3">
<div class="flex-1 min-w-0"> <div class="flex-1 min-w-0">
<h3 class="font-medium text-zinc-700 dark:text-zinc-300 truncate">{{ $timeline->case_name }}</h3> <h3 class="font-medium text-zinc-700 truncate">{{ $timeline->case_name }}</h3>
@if($timeline->case_reference) @if($timeline->case_reference)
<p class="text-sm text-zinc-500 dark:text-zinc-500">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p> <p class="text-sm text-zinc-500">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
@endif @endif
<p class="text-xs sm:text-sm text-zinc-400 dark:text-zinc-600 mt-1"> <p class="text-xs sm:text-sm text-zinc-400 mt-1">
{{ __('client.updates') }}: {{ $timeline->updates_count }} {{ __('client.updates') }}: {{ $timeline->updates_count }}
</p> </p>
</div> </div>
@ -107,8 +107,8 @@ new class extends Component
{{-- Empty State --}} {{-- Empty State --}}
@if($activeTimelines->total() === 0 && $archivedTimelines->total() === 0) @if($activeTimelines->total() === 0 && $archivedTimelines->total() === 0)
<div class="empty-state"> <div class="empty-state">
<flux:icon name="folder-open" class="empty-state-icon text-zinc-300 dark:text-zinc-600" /> <flux:icon name="folder-open" class="empty-state-icon text-zinc-300" />
<p class="text-zinc-500 dark:text-zinc-400">{{ __('client.no_cases_yet') }}</p> <p class="text-zinc-500">{{ __('client.no_cases_yet') }}</p>
</div> </div>
@endif @endif
</div> </div>

View File

@ -22,7 +22,7 @@ new class extends Component
<div> <div>
<flux:heading size="xl">{{ $timeline->case_name }}</flux:heading> <flux:heading size="xl">{{ $timeline->case_name }}</flux:heading>
@if($timeline->case_reference) @if($timeline->case_reference)
<p class="text-zinc-600 dark:text-zinc-400">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p> <p class="text-zinc-600 ">{{ __('client.reference') }}: {{ $timeline->case_reference }}</p>
@endif @endif
</div> </div>
<flux:badge :variant="$timeline->status->value === 'active' ? 'success' : 'default'"> <flux:badge :variant="$timeline->status->value === 'active' ? 'success' : 'default'">
@ -39,19 +39,19 @@ new class extends Component
@forelse($timeline->updates as $update) @forelse($timeline->updates as $update)
<div wire:key="update-{{ $update->id }}" class="relative ps-12"> <div wire:key="update-{{ $update->id }}" class="relative ps-12">
{{-- Dot --}} {{-- Dot --}}
<div class="absolute start-2 top-2 w-4 h-4 rounded-full bg-amber-500 border-4 border-amber-50 dark:border-zinc-900"></div> <div class="absolute start-2 top-2 w-4 h-4 rounded-full bg-amber-500 border-4 border-amber-50 "></div>
<div class="bg-white dark:bg-zinc-800 p-4 rounded-lg shadow-sm"> <div class="bg-white p-4 rounded-lg shadow-sm">
<div class="text-sm text-zinc-500 dark:text-zinc-400 mb-2"> <div class="text-sm text-zinc-500 mb-2">
{{ $update->created_at->translatedFormat('l, d M Y - g:i A') }} {{ $update->created_at->translatedFormat('l, d M Y - g:i A') }}
</div> </div>
<div class="prose prose-sm dark:prose-invert max-w-none"> <div class="prose prose-sm max-w-none">
{!! $update->update_text !!} {!! $update->update_text !!}
</div> </div>
</div> </div>
</div> </div>
@empty @empty
<p class="text-center text-zinc-500 dark:text-zinc-400 py-8"> <p class="text-center text-zinc-500 py-8">
{{ __('client.no_updates_yet') }} {{ __('client.no_updates_yet') }}
</p> </p>
@endforelse @endforelse

View File

@ -15,7 +15,7 @@ new #[Layout('components.layouts.public')] class extends Component
{{ __('booking.success_title') }} {{ __('booking.success_title') }}
</flux:heading> </flux:heading>
<p class="text-zinc-600 dark:text-zinc-400 mb-6"> <p class="text-zinc-600 mb-6">
{{ __('booking.success_message') }} {{ __('booking.success_message') }}
</p> </p>

View File

@ -207,23 +207,23 @@ new #[Layout('components.layouts.public')] class extends Component
<p class="text-body">{{ __('booking.guest_intro') }}</p> <p class="text-body">{{ __('booking.guest_intro') }}</p>
</flux:callout> </flux:callout>
<p class="mb-4 text-zinc-600 dark:text-zinc-400"> <p class="mb-4 text-zinc-600">
{{ __('booking.select_date_time') }} {{ __('booking.select_date_time') }}
</p> </p>
<livewire:availability-calendar /> <livewire:availability-calendar />
@else @else
{{-- Step 2+: Contact Form & Confirmation --}} {{-- Step 2+: Contact Form & Confirmation --}}
<div class="bg-amber-50 dark:bg-amber-900/20 p-4 rounded-lg mb-6 border border-amber-200 dark:border-amber-800"> <div class="bg-amber-50 p-4 rounded-lg mb-6 border border-amber-200">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<div> <div>
<p class="font-semibold text-zinc-900 dark:text-zinc-100"> <p class="font-semibold text-zinc-900">
{{ __('booking.selected_time') }} {{ __('booking.selected_time') }}
</p> </p>
<p class="text-zinc-600 dark:text-zinc-400"> <p class="text-zinc-600">
{{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }} {{ \Carbon\Carbon::parse($selectedDate)->translatedFormat('l, d M Y') }}
</p> </p>
<p class="text-zinc-600 dark:text-zinc-400"> <p class="text-zinc-600">
{{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }} {{ \Carbon\Carbon::parse($selectedTime)->format('g:i A') }}
</p> </p>
</div> </div>
@ -292,7 +292,7 @@ new #[Layout('components.layouts.public')] class extends Component
{{-- Confirmation Step --}} {{-- Confirmation Step --}}
<flux:callout> <flux:callout>
<flux:heading size="sm" class="text-body">{{ __('booking.confirm_booking') }}</flux:heading> <flux:heading size="sm" class="text-body">{{ __('booking.confirm_booking') }}</flux:heading>
<p class="text-zinc-600 dark:text-zinc-400">{{ __('booking.confirm_message') }}</p> <p class="text-zinc-600">{{ __('booking.confirm_message') }}</p>
<div class="mt-4 space-y-2"> <div class="mt-4 space-y-2">
<p><strong>{{ __('booking.guest_name') }}:</strong> {{ $guestName }}</p> <p><strong>{{ __('booking.guest_name') }}:</strong> {{ $guestName }}</p>
@ -307,7 +307,7 @@ new #[Layout('components.layouts.public')] class extends Component
<div class="mt-4"> <div class="mt-4">
<p><strong>{{ __('booking.problem_summary') }}:</strong></p> <p><strong>{{ __('booking.problem_summary') }}:</strong></p>
<p class="mt-1 text-sm text-zinc-600 dark:text-zinc-400">{{ $problemSummary }}</p> <p class="mt-1 text-sm text-zinc-600">{{ $problemSummary }}</p>
</div> </div>
</flux:callout> </flux:callout>

View File

@ -1,19 +0,0 @@
<?php
use Livewire\Volt\Component;
new class extends Component {
//
}; ?>
<section class="w-full">
@include('partials.settings-heading')
<x-settings.layout :heading="__('Appearance')" :subheading="__('Update the appearance settings for your account')">
<flux:radio.group x-data variant="segmented" x-model="$flux.appearance">
<flux:radio value="light" icon="sun">{{ __('Light') }}</flux:radio>
<flux:radio value="dark" icon="moon">{{ __('Dark') }}</flux:radio>
<flux:radio value="system" icon="computer-desktop">{{ __('System') }}</flux:radio>
</flux:radio.group>
</x-settings.layout>
</section>

View File

@ -113,7 +113,7 @@ new class extends Component {
</flux:text> </flux:text>
@if (session('status') === 'verification-link-sent') @if (session('status') === 'verification-link-sent')
<flux:text class="mt-2 font-medium !dark:text-green-400 !text-green-600"> <flux:text class="mt-2 font-medium !text-green-600">
{{ __('A new verification link has been sent to your email address.') }} {{ __('A new verification link has been sent to your email address.') }}
</flux:text> </flux:text>
@endif @endif
@ -144,7 +144,7 @@ new class extends Component {
<div> <div>
<flux:heading size="lg">{{ __('Email Configuration') }}</flux:heading> <flux:heading size="lg">{{ __('Email Configuration') }}</flux:heading>
<flux:text class="mt-1 text-sm text-zinc-500 dark:text-zinc-400"> <flux:text class="mt-1 text-sm text-zinc-500">
{{ __('Verify your email configuration is working correctly.') }} {{ __('Verify your email configuration is working correctly.') }}
</flux:text> </flux:text>
@ -166,18 +166,18 @@ new class extends Component {
<div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2"> <div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
<div> <div>
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400"> <flux:text class="text-sm font-medium text-zinc-600">
{{ __('admin.sender_name') }} {{ __('admin.sender_name') }}
</flux:text> </flux:text>
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100"> <flux:text class="mt-1 font-medium text-zinc-900">
{{ config('mail.from.name') }} {{ config('mail.from.name') }}
</flux:text> </flux:text>
</div> </div>
<div> <div>
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400"> <flux:text class="text-sm font-medium text-zinc-600">
{{ __('admin.sender_email') }} {{ __('admin.sender_email') }}
</flux:text> </flux:text>
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100"> <flux:text class="mt-1 font-medium text-zinc-900">
{{ config('mail.from.address') }} {{ config('mail.from.address') }}
</flux:text> </flux:text>
</div> </div>

View File

@ -239,21 +239,21 @@ new class extends Component {
> >
<div class="space-y-6"> <div class="space-y-6">
<div class="flex flex-col items-center space-y-4"> <div class="flex flex-col items-center space-y-4">
<div class="p-0.5 w-auto rounded-full border border-stone-100 dark:border-stone-600 bg-white dark:bg-stone-800 shadow-sm"> <div class="p-0.5 w-auto rounded-full border border-stone-100 bg-white shadow-sm">
<div class="p-2.5 rounded-full border border-stone-200 dark:border-stone-600 overflow-hidden bg-stone-100 dark:bg-stone-200 relative"> <div class="p-2.5 rounded-full border border-stone-200 overflow-hidden bg-stone-100 relative">
<div class="flex items-stretch absolute inset-0 w-full h-full divide-x [&>div]:flex-1 divide-stone-200 dark:divide-stone-300 justify-around opacity-50"> <div class="flex items-stretch absolute inset-0 w-full h-full divide-x [&>div]:flex-1 divide-stone-200 justify-around opacity-50">
@for ($i = 1; $i <= 5; $i++) @for ($i = 1; $i <= 5; $i++)
<div></div> <div></div>
@endfor @endfor
</div> </div>
<div class="flex flex-col items-stretch absolute w-full h-full divide-y [&>div]:flex-1 inset-0 divide-stone-200 dark:divide-stone-300 justify-around opacity-50"> <div class="flex flex-col items-stretch absolute w-full h-full divide-y [&>div]:flex-1 inset-0 divide-stone-200 justify-around opacity-50">
@for ($i = 1; $i <= 5; $i++) @for ($i = 1; $i <= 5; $i++)
<div></div> <div></div>
@endfor @endfor
</div> </div>
<flux:icon.qr-code class="relative z-20 dark:text-accent-foreground"/> <flux:icon.qr-code class="relative z-20"/>
</div> </div>
</div> </div>
@ -301,9 +301,9 @@ new class extends Component {
@enderror @enderror
<div class="flex justify-center"> <div class="flex justify-center">
<div class="relative w-64 overflow-hidden border rounded-lg border-stone-200 dark:border-stone-700 aspect-square"> <div class="relative w-64 overflow-hidden border rounded-lg border-stone-200 aspect-square">
@empty($qrCodeSvg) @empty($qrCodeSvg)
<div class="absolute inset-0 flex items-center justify-center bg-white dark:bg-stone-700 animate-pulse"> <div class="absolute inset-0 flex items-center justify-center bg-white animate-pulse">
<flux:icon.loading/> <flux:icon.loading/>
</div> </div>
@else @else
@ -329,8 +329,8 @@ new class extends Component {
<div class="space-y-4"> <div class="space-y-4">
<div class="relative flex items-center justify-center w-full"> <div class="relative flex items-center justify-center w-full">
<div class="absolute inset-0 w-full h-px top-1/2 bg-stone-200 dark:bg-stone-600"></div> <div class="absolute inset-0 w-full h-px top-1/2 bg-stone-200"></div>
<span class="relative px-2 text-sm bg-white dark:bg-stone-800 text-stone-600 dark:text-stone-400"> <span class="relative px-2 text-sm bg-white text-stone-600">
{{ __('or, enter the code manually') }} {{ __('or, enter the code manually') }}
</span> </span>
</div> </div>
@ -350,9 +350,9 @@ new class extends Component {
} }
}" }"
> >
<div class="flex items-stretch w-full border rounded-xl dark:border-stone-700"> <div class="flex items-stretch w-full border rounded-xl">
@empty($manualSetupKey) @empty($manualSetupKey)
<div class="flex items-center justify-center w-full p-3 bg-stone-100 dark:bg-stone-700"> <div class="flex items-center justify-center w-full p-3 bg-stone-100">
<flux:icon.loading variant="mini"/> <flux:icon.loading variant="mini"/>
</div> </div>
@else @else
@ -360,12 +360,12 @@ new class extends Component {
type="text" type="text"
readonly readonly
value="{{ $manualSetupKey }}" value="{{ $manualSetupKey }}"
class="w-full p-3 bg-transparent outline-none text-stone-900 dark:text-stone-100" class="w-full p-3 bg-transparent outline-none text-stone-900"
/> />
<button <button
@click="copy()" @click="copy()"
class="px-3 transition-colors border-l cursor-pointer border-stone-200 dark:border-stone-600" class="px-3 transition-colors border-l cursor-pointer border-stone-200"
> >
<flux:icon.document-duplicate x-show="!copied" variant="outline"></flux:icon> <flux:icon.document-duplicate x-show="!copied" variant="outline"></flux:icon>
<flux:icon.check <flux:icon.check

View File

@ -46,7 +46,7 @@ new class extends Component {
}; ?> }; ?>
<div <div
class="py-6 space-y-6 border shadow-sm rounded-xl border-zinc-200 dark:border-white/10" class="py-6 space-y-6 border shadow-sm rounded-xl border-zinc-200"
wire:cloak wire:cloak
x-data="{ showRecoveryCodes: false }" x-data="{ showRecoveryCodes: false }"
> >
@ -112,7 +112,7 @@ new class extends Component {
@if (filled($recoveryCodes)) @if (filled($recoveryCodes))
<div <div
class="grid gap-1 p-4 font-mono text-sm rounded-lg bg-zinc-100 dark:bg-white/5" class="grid gap-1 p-4 font-mono text-sm rounded-lg bg-zinc-100"
role="list" role="list"
aria-label="Recovery codes" aria-label="Recovery codes"
> >

View File

@ -1,14 +1,14 @@
<x-layouts.public> <x-layouts.public>
<div class="py-8"> <div class="py-8">
<h1 class="mb-6 text-3xl font-bold text-text dark:text-off-white">{{ $page->getTitle() }}</h1> <h1 class="mb-6 text-3xl font-bold text-text">{{ $page->getTitle() }}</h1>
<div class="prose prose-brand max-w-none rounded-lg bg-card p-8 shadow-card dark:bg-zinc-800 dark:prose-invert" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}"> <div class="prose prose-brand max-w-none rounded-lg bg-card p-8 shadow-card" dir="{{ app()->getLocale() === 'ar' ? 'rtl' : 'ltr' }}">
@if ($page->getContent()) @if ($page->getContent())
{!! clean($page->getContent()) !!} {!! clean($page->getContent()) !!}
@else @else
<p class="text-body dark:text-zinc-400">{{ __('pages.content_coming_soon') }}</p> <p class="text-body">{{ __('pages.content_coming_soon') }}</p>
@endif @endif
</div> </div>
<p class="mt-4 text-sm text-body/70 dark:text-zinc-400"> <p class="mt-4 text-sm text-body/70">
{{ __('pages.last_updated') }}: {{ $page->updated_at->format('M d, Y') }} {{ __('pages.last_updated') }}: {{ $page->updated_at->format('M d, Y') }}
</p> </p>
</div> </div>

View File

@ -20,4 +20,3 @@
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
@vite(['resources/css/app.css', 'resources/js/app.js']) @vite(['resources/css/app.css', 'resources/js/app.js'])
@fluxAppearance

View File

@ -154,7 +154,6 @@ Route::middleware(['auth', 'active'])->group(function () {
Volt::route('settings/profile', 'settings.profile')->name('profile.edit'); Volt::route('settings/profile', 'settings.profile')->name('profile.edit');
Volt::route('settings/password', 'settings.password')->name('user-password.edit'); Volt::route('settings/password', 'settings.password')->name('user-password.edit');
Volt::route('settings/appearance', 'settings.appearance')->name('appearance.edit');
Volt::route('settings/two-factor', 'settings.two-factor') Volt::route('settings/two-factor', 'settings.two-factor')
->middleware( ->middleware(