mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
add LightDark option for customer dashboard
This commit is contained in:
52
resources/scripts/components/CustomerLightDarkButton.vue
Normal file
52
resources/scripts/components/CustomerLightDarkButton.vue
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<template>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="
|
||||||
|
bg-white
|
||||||
|
p-1.5
|
||||||
|
rounded-full
|
||||||
|
text-gray-400
|
||||||
|
hover:text-gray-500
|
||||||
|
focus:outline-none
|
||||||
|
focus:ring-2
|
||||||
|
focus:ring-primary-500
|
||||||
|
dark:bg-transparent
|
||||||
|
dark:focus:ring-gray-500
|
||||||
|
"
|
||||||
|
@click="onChange"
|
||||||
|
>
|
||||||
|
|
||||||
|
<BaseIcon v-if="!globalStore.isDarkModeOn" class="h-5 w-5 text-yellow-500" name="SunIcon" />
|
||||||
|
<BaseIcon v-else class="h-5 w-5 text-primary-400" name="MoonIcon" />
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue'
|
||||||
|
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
||||||
|
|
||||||
|
const globalStore = useGlobalStore()
|
||||||
|
|
||||||
|
const enabled = computed(
|
||||||
|
()=>
|
||||||
|
localStorage.getItem('theme') === 'dark' ||
|
||||||
|
document.documentElement.classList.contains('dark')
|
||||||
|
)
|
||||||
|
|
||||||
|
globalStore.isDarkModeOn = enabled.value
|
||||||
|
|
||||||
|
function onChange() {
|
||||||
|
globalStore.isDarkModeOn = !globalStore.isDarkModeOn
|
||||||
|
|
||||||
|
if (globalStore.isDarkModeOn) {
|
||||||
|
localStorage.theme = 'dark'
|
||||||
|
document.documentElement.classList.add('dark')
|
||||||
|
document.documentElement.style.setProperty('color-scheme', 'dark')
|
||||||
|
} else {
|
||||||
|
localStorage.theme = 'light'
|
||||||
|
document.documentElement.classList.remove('dark')
|
||||||
|
document.documentElement.style.setProperty('color-scheme', 'light')
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
@ -44,6 +44,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="hidden sm:ml-6 sm:flex sm:items-center">
|
<div class="hidden sm:ml-6 sm:flex sm:items-center">
|
||||||
|
<!-- Dark mode Toggle -->
|
||||||
|
<CustomerLightDarkButton/>
|
||||||
|
|
||||||
<!-- Profile dropdown -->
|
<!-- Profile dropdown -->
|
||||||
|
|
||||||
@ -134,6 +136,7 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div class="pt-4 pb-3 border-t border-gray-200 dark:border-gray-500">
|
<div class="pt-4 pb-3 border-t border-gray-200 dark:border-gray-500">
|
||||||
|
<div class="flex items-center justify-between pr-5">
|
||||||
<div class="flex items-center px-4">
|
<div class="flex items-center px-4">
|
||||||
<div class="shrink-0">
|
<div class="shrink-0">
|
||||||
<img class="h-10 w-10 rounded-full" :src="previewAvatar" alt="" />
|
<img class="h-10 w-10 rounded-full" :src="previewAvatar" alt="" />
|
||||||
@ -146,6 +149,9 @@
|
|||||||
{{ globalStore.currentUser.email }}
|
{{ globalStore.currentUser.email }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Dark mode Toggle -->
|
||||||
|
<CustomerLightDarkButton/>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 space-y-1">
|
<div class="mt-3 space-y-1">
|
||||||
<router-link
|
<router-link
|
||||||
@ -172,6 +178,7 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
import { ref, watch, computed } from 'vue'
|
import { ref, watch, computed } from 'vue'
|
||||||
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
import { useGlobalStore } from '@/scripts/customer/stores/global'
|
||||||
import MainLogo from '@/scripts/components/icons/MainLogo.vue'
|
import MainLogo from '@/scripts/components/icons/MainLogo.vue'
|
||||||
|
import CustomerLightDarkButton from '@/scripts/components/CustomerLightDarkButton.vue'
|
||||||
import {
|
import {
|
||||||
Disclosure,
|
Disclosure,
|
||||||
DisclosureButton,
|
DisclosureButton,
|
||||||
|
|||||||
@ -13,7 +13,8 @@ export const useGlobalStore = defineStore({
|
|||||||
currentUser: null,
|
currentUser: null,
|
||||||
companySlug: '',
|
companySlug: '',
|
||||||
mainMenu: null,
|
mainMenu: null,
|
||||||
enabledModules: []
|
enabledModules: [],
|
||||||
|
isDarkModeOn: false
|
||||||
}),
|
}),
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
|
|||||||
Reference in New Issue
Block a user