Files
zemailnator/resources/views/components/layouts/app.blade.php
2025-04-27 17:04:05 +05:30

185 lines
9.9 KiB
PHP

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title', config('app.settings.app_title'))</title>
@if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot')))
@vite(['resources/css/app.css', 'resources/css/boil.css', 'resources/js/app.js', 'resources/js/boil.js'])
@endif
<link rel="icon" type="image/png" href="{{ asset('images/logo.webp') }}">
@fluxAppearance
</head>
<body class="min-h-screen bg-white dark:bg-zinc-800">
<flux:sidebar sticky stashable class="bg-zinc-50 dark:bg-zinc-900 border-r rtl:border-r-0 rtl:border-l border-zinc-200 dark:border-zinc-700">
<flux:sidebar.toggle class="lg:hidden" icon="x-mark" />
<div class="flex items-center px-2 py-2 cursor-pointer" onclick="window.location.href='{{ route('home') }}'">
<img src="{{ asset('images/zemail-logo-light.webp') }}" class="dark:hidden" alt="logo"/>
<img src="{{ asset('images/zemail-logo-dark.webp') }}" class="hidden dark:flex" alt="logo"/>
</div>
<flux:navlist variant="outline">
<flux:button class="cursor-pointer inbox-btn" variant="filled" icon="inbox" x-on:click="window.location.href = '{{ route('mailbox') }}'">{{ __('Inbox') }}</flux:button>
{{-- <flux:button class="mt-2 cursor-pointer" variant="filled" icon="refresh-cw" x-on:click="Livewire.dispatch('fetchMessages')">Refresh</flux:button>--}}
<button type="button" class="relative items-center font-medium justify-center gap-2 whitespace-nowrap disabled:opacity-75 dark:disabled:opacity-75 disabled:cursor-default disabled:pointer-events-none h-10 text-sm rounded-lg px-4 inline-flex bg-zinc-800/5 hover:bg-zinc-800/10 dark:bg-white/10 dark:hover:bg-white/20 text-zinc-800 dark:text-white [[data-flux-button-group]_&amp;]:border-e [:is([data-flux-button-group]>&amp;:last-child,_[data-flux-button-group]_:last-child>&amp;)]:border-e-0 [[data-flux-button-group]_&amp;]:border-zinc-200/80 dark:[[data-flux-button-group]_&amp;]:border-zinc-900/50 mt-2 cursor-pointer" data-flux-button="data-flux-button" data-flux-group-target="data-flux-group-target" x-on:click="Livewire.dispatch('fetchMessages'); document.getElementById('refresh-icon').classList.add('animate-spin')">
<svg id="refresh-icon" class="shrink-0 [:where(&amp;)]:size-4" data-flux-icon="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-slot="icon">
<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"></path>
<path d="M21 3v5h-5"></path>
<path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"></path>
<path d="M8 16H3v5"></path>
</svg>
{{ __('Refresh') }}
</button>
</flux:navlist>
<img src="https://placehold.co/300x250?font=roboto" alt="sideAds" />
<flux:spacer />
<flux:navlist variant="outline">
<flux:navlist.item href="#">API</flux:navlist.item>
<flux:navlist.item href="#">FAQ</flux:navlist.item>
<flux:navlist.item href="#">Privacy</flux:navlist.item>
<flux:navlist.item href="#">Feedback</flux:navlist.item>
<flux:navlist.item href="#">Contacts</flux:navlist.item>
<flux:separator variant="subtle" />
</flux:navlist>
<p class="text-sm font-medium">&copy; {{ config('app.settings.app_name') }}</p>
</flux:sidebar>
<flux:header sticky container class="bg-zinc-50 dark:bg-zinc-900 border-b border-zinc-200 dark:border-zinc-700">
<flux:sidebar.toggle class="lg:hidden" icon="bars-3" inset="left" />
<flux:separator vertical class="lg:hidden lg:mx-0 mx-3" />
<flux:icon.mail variant="mini"/>
<livewire:frontend.email type="header"/>
<flux:spacer />
<flux:navbar class="me-4">
<flux:dropdown position="top" align="start">
<flux:tooltip content="Language">
<flux:button x-data x-on:click="" icon="language" variant="subtle" aria-label="Language" />
</flux:tooltip>
<flux:menu>
<span>
@foreach(config('app.locales') as $item => $language)
<span x-on:click="window.location.href ='{{ route('locale', $language) }}'" role="menuitem" class="cursor-pointer group dark:hover:bg-zinc-600/75 dark:hover:text-gray-300 dark:focus:bg-zinc-600/75 dark:focus:text-gray-300 flex items-center px-4 py-2 dark:text-gray-400 text-gray-700 hover:text-gray-900 focus:text-gray-900 text-sm leading-5 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none truncate">{{ config('app.locales_text')[$item] }}</span>
@endforeach
</span>
</flux:menu>
</flux:dropdown>
<flux:tooltip content="Switch Theme">
<flux:button x-data x-on:click="$flux.dark = ! $flux.dark" icon="moon" variant="subtle" aria-label="Toggle dark mode" />
</flux:tooltip>
<flux:dropdown position="top" align="start">
<flux:tooltip content="Account">
<flux:button icon="circle-user-round" variant="subtle" aria-label="Account" />
</flux:tooltip>
<flux:menu>
<flux:text class="p-1">{{ __('You are signed in as:') }}</flux:text>
<div wire:ignore>
<livewire:frontend.email />
</div>
<flux:menu.separator />
<div class="flex">
<flux:modal.trigger name="create-account">
<flux:button class="p-1 w-full" variant="outline" icon="mail-plus" style="">{{ __('New') }}</flux:button>
</flux:modal.trigger>
<flux:modal.trigger name="delete-account">
<flux:tooltip content="{{ __('Delete') }}">
<flux:button class="ml-1 p-1" icon="trash" variant="outline" style="color:#F14743;"></flux:button>
</flux:tooltip>
</flux:modal.trigger>
</div>
</flux:menu>
</flux:dropdown>
</flux:navbar>
<flux:modal name="create-account" class="md:w-96">
<div class="space-y-6">
<div>
<flux:heading size="lg">Generate Your Temporary Email</flux:heading>
</div>
<livewire:frontend.action action="customEmail" />
<flux:separator text="or" />
<div class="flex w-full">
<div class="w-1/2">
<livewire:frontend.action action="random" />
</div>
<div class="w-1/2">
<livewire:frontend.action action="gmail" />
</div>
</div>
</div>
</flux:modal>
<flux:modal name="delete-account" class="min-w-[22rem]">
<div class="space-y-6">
<div>
<flux:heading size="lg">Delete account?</flux:heading>
<flux:text class="mt-2">
<p>You're about to delete this account.</p>
</flux:text>
</div>
<div class="flex gap-2">
<flux:spacer />
<flux:modal.close>
<flux:button variant="ghost">Cancel</flux:button>
</flux:modal.close>
<livewire:frontend.action action="delete" />
</div>
</div>
</flux:modal>
</flux:header>
<flux:main class="dark:bg-gray-900 bg-gray-100">
{{ $slot }}
</flux:main>
<!-- Toast Container -->
<div id="toast-container" class="fixed top-5 left-1/2 transform -translate-x-1/2 z-50 space-y-4"></div>
<p class="hidden" id="copyEmailText">{{ __('Email ID Copied to Clipboard') }}</p>
@fluxScripts
<script>
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
const email = '{{ App\Models\ZEmail::getEmail(true) }}';
const add_mail_in_title = "{{ json_decode(config('app.settings.configuration_settings'))->add_mail_in_title ? 'yes' : 'no' }}"
if(add_mail_in_title === 'yes') {
document.title += ` - ${email}`;
}
Livewire.dispatch('updateEmail');
}, 2000);
document.addEventListener('stopLoader', () => {
document.querySelectorAll('#refresh-icon').forEach(el => {
setTimeout(() => {
el.classList.remove('animate-spin');
}, 1000);
});
});
let counter = parseInt({{ json_decode(config('app.settings.configuration_settings'))->fetch_seconds }});
setInterval(() => {
if (counter === 0 && document.getElementById('imap-error') === null && !document.hidden) {
document.querySelectorAll('#refresh-icon').forEach(el => {
el.classList.add('animate-spin');
});
Livewire.dispatch('fetchMessages');
counter = parseInt({{ json_decode(config('app.settings.configuration_settings'))->fetch_seconds }});
}
counter--;
if(document.hidden) {
counter = 1;
}
}, 1000);
});
</script>
</body>
</html>