160 lines
5.3 KiB
Vue
160 lines
5.3 KiB
Vue
<script setup>
|
|
const props = defineProps({
|
|
isMinimized: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
});
|
|
|
|
const layoutStore = useLayoutStore();
|
|
const isRTL = computed(() => layoutStore.isRTL);
|
|
|
|
defineEmits(["toggle"]);
|
|
|
|
const unreadCount = 2;
|
|
</script>
|
|
|
|
<template>
|
|
<header
|
|
class="sticky top-0 h-14 bg-background border-b px-3 flex items-center gap-3 z-50"
|
|
:class="[isRTL ? 'flex-row-reverse' : 'flex-row']"
|
|
>
|
|
<!-- Left side -->
|
|
<button
|
|
@click="$emit('toggle')"
|
|
:class="[
|
|
'p-1.5 hover:bg-accent rounded-lg flex items-center justify-center',
|
|
isRTL ? 'order-last' : 'order-first',
|
|
]"
|
|
>
|
|
<Icon name="mdi:menu" class="w-4 h-4" />
|
|
</button>
|
|
|
|
<!-- Right side -->
|
|
<div
|
|
class="flex items-center gap-2"
|
|
:class="[isRTL ? 'mr-auto' : 'ml-auto']"
|
|
>
|
|
<!-- Theme Switcher -->
|
|
<ThemeSwitcher />
|
|
|
|
<!-- Notification -->
|
|
<Dropdown>
|
|
<DropdownTrigger class="relative">
|
|
<button
|
|
class="p-1.5 hover:bg-accent rounded-lg flex items-center justify-center"
|
|
>
|
|
<Icon name="mdi:bell" class="w-5 h-5" />
|
|
<span
|
|
v-if="unreadCount"
|
|
:class="[
|
|
'absolute top-0.5 w-3.5 h-3.5 bg-danger rounded-full text-[10px] text-danger-foreground flex items-center justify-center',
|
|
isRTL ? 'left-0.5' : 'right-0.5',
|
|
]"
|
|
>
|
|
{{ unreadCount }}
|
|
</span>
|
|
</button>
|
|
</DropdownTrigger>
|
|
<DropdownContent class="w-80">
|
|
<div class="px-3 py-2 border-b">
|
|
<h3 class="font-semibold text-sm">Notifications</h3>
|
|
</div>
|
|
<div class="py-1.5">
|
|
<DropdownItem>
|
|
<div class="flex items-start gap-3">
|
|
<div class="p-1 bg-primary/10 rounded">
|
|
<Icon name="mdi:email" class="w-3.5 h-3.5 text-primary" />
|
|
</div>
|
|
<div class="flex-1 min-w-0">
|
|
<p class="text-sm font-medium">New message received</p>
|
|
<p class="text-xs text-muted-foreground truncate">
|
|
You have a new message from John Doe
|
|
</p>
|
|
</div>
|
|
<p class="text-xs text-muted-foreground">2m ago</p>
|
|
</div>
|
|
</DropdownItem>
|
|
<DropdownItem>
|
|
<div class="flex items-start gap-3">
|
|
<div class="p-1 bg-success/10 rounded">
|
|
<Icon
|
|
name="mdi:check-circle"
|
|
class="w-3.5 h-3.5 text-success"
|
|
/>
|
|
</div>
|
|
<div class="flex-1 min-w-0">
|
|
<p class="text-sm font-medium">Task completed</p>
|
|
<p class="text-xs text-muted-foreground truncate">
|
|
Project X has been successfully deployed
|
|
</p>
|
|
</div>
|
|
<p class="text-xs text-muted-foreground">1h ago</p>
|
|
</div>
|
|
</DropdownItem>
|
|
</div>
|
|
<div class="px-3 py-2 border-t text-center">
|
|
<NuxtLink
|
|
to="#"
|
|
class="text-xs text-primary hover:text-primary/90"
|
|
>
|
|
View all notifications
|
|
</NuxtLink>
|
|
</div>
|
|
</DropdownContent>
|
|
</Dropdown>
|
|
|
|
<!-- User Profile -->
|
|
<Dropdown>
|
|
<DropdownTrigger>
|
|
<button
|
|
class="flex items-center gap-2 p-1 hover:bg-accent rounded-lg"
|
|
>
|
|
<div
|
|
class="w-7 h-7 rounded-full border flex items-center justify-center"
|
|
>
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width="24"
|
|
height="24"
|
|
viewBox="0 0 256 256"
|
|
>
|
|
<path
|
|
fill="currentColor"
|
|
d="M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24M74.08 197.5a64 64 0 0 1 107.84 0a87.83 87.83 0 0 1-107.84 0M96 120a32 32 0 1 1 32 32a32 32 0 0 1-32-32m97.76 66.41a79.66 79.66 0 0 0-36.06-28.75a48 48 0 1 0-59.4 0a79.66 79.66 0 0 0-36.06 28.75a88 88 0 1 1 131.52 0"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
<div class="flex flex-col items-start">
|
|
<span class="text-sm font-medium">John Doe</span>
|
|
<span class="text-xs text-muted-foreground">Administrator</span>
|
|
</div>
|
|
<Icon name="mdi:chevron-down" class="w-4 h-4" />
|
|
</button>
|
|
</DropdownTrigger>
|
|
<DropdownContent>
|
|
<DropdownItem>
|
|
<div class="flex items-center gap-2">
|
|
<Icon name="mdi:account" class="w-4 h-4" />
|
|
<span class="text-sm">Profile</span>
|
|
</div>
|
|
</DropdownItem>
|
|
<DropdownItem>
|
|
<div class="flex items-center gap-2">
|
|
<Icon name="mdi:cog" class="w-4 h-4" />
|
|
<span class="text-sm">Settings</span>
|
|
</div>
|
|
</DropdownItem>
|
|
<DropdownSeparator />
|
|
<DropdownItem>
|
|
<div class="flex items-center gap-2">
|
|
<Icon name="mdi:logout" class="w-4 h-4" />
|
|
<span class="text-sm">Log out</span>
|
|
</div>
|
|
</DropdownItem>
|
|
</DropdownContent>
|
|
</Dropdown>
|
|
</div>
|
|
</header>
|
|
</template>
|