This commit is contained in:
tugcekucukoglu
2024-07-29 13:18:55 +03:00
parent 2726aeb8a1
commit 0e3130d2a6
4 changed files with 44 additions and 56 deletions

View File

@@ -1,10 +1,10 @@
<script setup> <script setup>
import { ref, computed } from 'vue';
import { $t, updatePreset, updateSurfacePalette } from '@primevue/themes';
import { useLayout } from '@/layout/composables/layout'; import { useLayout } from '@/layout/composables/layout';
import { $t, updatePreset, updateSurfacePalette } from '@primevue/themes';
import Aura from '@primevue/themes/aura'; import Aura from '@primevue/themes/aura';
import Lara from '@primevue/themes/lara'; import Lara from '@primevue/themes/lara';
import Nora from '@primevue/themes/nora'; import Nora from '@primevue/themes/nora';
import { ref } from 'vue';
const { layoutConfig, setPrimary, setSurface, setPreset, isDarkTheme } = useLayout(); const { layoutConfig, setPrimary, setSurface, setPreset, isDarkTheme } = useLayout();
@@ -123,7 +123,7 @@ function getPresetExt() {
} }
}; };
} else { } else {
if (layoutConfig.preset === 'Nora') { if (layoutConfig.preset.value === 'Nora') {
return { return {
semantic: { semantic: {
primary: color.palette, primary: color.palette,
@@ -222,22 +222,10 @@ function applyTheme(type, color) {
function onPresetChange(value) { function onPresetChange(value) {
setPreset(value); setPreset(value);
const presetValue = presets[value]; const presetValue = presets[value];
const surfacePalette = surfaces.value.find((s) => s.name === selectedSurfaceColor.value)?.palette; const surfacePalette = surfaces.value.find((s) => s.name === layoutConfig.surface.value)?.palette;
$t().preset(presetValue).preset(getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true }); $t().preset(presetValue).preset(getPresetExt()).surfacePalette(surfacePalette).use({ useDefaultOptions: true });
} }
const selectedPrimaryColor = computed(() => {
return layoutConfig.primary.value;
});
const selectedSurfaceColor = computed(() => {
return layoutConfig.surface.value;
});
const preset = computed(() => {
return layoutConfig.preset.value;
});
</script> </script>
<template> <template>
@@ -252,7 +240,7 @@ const preset = computed(() => {
type="button" type="button"
:title="primaryColor.name" :title="primaryColor.name"
@click="updateColors('primary', primaryColor)" @click="updateColors('primary', primaryColor)"
:class="{ 'active-color': selectedPrimaryColor === primaryColor.name }" :class="{ 'active-color': layoutConfig.primary.value === primaryColor.name }"
:style="{ backgroundColor: `${primaryColor.name === 'noir' ? 'var(--text-color)' : primaryColor.palette['500']}` }" :style="{ backgroundColor: `${primaryColor.name === 'noir' ? 'var(--text-color)' : primaryColor.palette['500']}` }"
></button> ></button>
</div> </div>
@@ -266,14 +254,14 @@ const preset = computed(() => {
type="button" type="button"
:title="surface.name" :title="surface.name"
@click="updateColors('surface', surface)" @click="updateColors('surface', surface)"
:class="{ 'active-color': selectedSurfaceColor ? selectedSurfaceColor === surface.name : isDarkTheme ? surface.name === 'zinc' : surface.name === 'slate' }" :class="{ 'active-color': layoutConfig.surface.value ? layoutConfig.surface.value === surface.name : isDarkTheme ? surface.name === 'zinc' : surface.name === 'slate' }"
:style="{ backgroundColor: `${surface.palette['500']}` }" :style="{ backgroundColor: `${surface.palette['500']}` }"
></button> ></button>
</div> </div>
</div> </div>
<div class="config-panel-settings"> <div class="config-panel-settings">
<span class="config-panel-label">Presets</span> <span class="config-panel-label">Presets</span>
<SelectButton v-model="preset" @update:modelValue="onPresetChange" :options="presetOptions" :allowEmpty="false" /> <SelectButton v-model="layoutConfig.preset.value" @update:modelValue="onPresetChange" :options="presetOptions" :allowEmpty="false" />
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,9 +1,9 @@
<script setup> <script setup>
import { computed, watch, ref } from 'vue'; import { useLayout } from '@/layout/composables/layout';
import AppTopbar from './AppTopbar.vue'; import { computed, ref, watch } from 'vue';
import AppFooter from './AppFooter.vue'; import AppFooter from './AppFooter.vue';
import AppSidebar from './AppSidebar.vue'; import AppSidebar from './AppSidebar.vue';
import { useLayout } from '@/layout/composables/layout'; import AppTopbar from './AppTopbar.vue';
const { layoutConfig, layoutState, isSidebarActive } = useLayout(); const { layoutConfig, layoutState, isSidebarActive } = useLayout();
@@ -19,14 +19,13 @@ watch(isSidebarActive, (newVal) => {
const containerClass = computed(() => { const containerClass = computed(() => {
return { return {
'layout-theme-light': layoutConfig.darkTheme.value === 'light', 'layout-theme-light': !layoutConfig.darkTheme.value,
'layout-theme-dark': layoutConfig.darkTheme.value === 'dark', 'layout-theme-dark': layoutConfig.darkTheme.value,
'layout-overlay': layoutConfig.menuMode.value === 'overlay', 'layout-overlay': layoutConfig.menuMode.value === 'overlay',
'layout-static': layoutConfig.menuMode.value === 'static', 'layout-static': layoutConfig.menuMode.value === 'static',
'layout-static-inactive': layoutState.staticMenuDesktopInactive.value && layoutConfig.menuMode.value === 'static', 'layout-static-inactive': layoutState.staticMenuDesktopInactive.value && layoutConfig.menuMode.value === 'static',
'layout-overlay-active': layoutState.overlayMenuActive.value, 'layout-overlay-active': layoutState.overlayMenuActive.value,
'layout-mobile-active': layoutState.staticMenuMobileActive.value, 'layout-mobile-active': layoutState.staticMenuMobileActive.value
'p-ripple-disabled': layoutConfig.ripple.value === false
}; };
}); });
const bindOutsideClickListener = () => { const bindOutsideClickListener = () => {

View File

@@ -1,15 +1,11 @@
import { toRefs, reactive, computed } from 'vue'; import { computed, reactive, toRefs } from 'vue';
const layoutConfig = reactive({ const layoutConfig = reactive({
ripple: true, preset: 'Aura',
darkTheme: false,
inputStyle: 'outlined',
menuMode: 'static',
theme: 'aura-light-green',
scale: 14,
primary: 'emerald', primary: 'emerald',
surface: null, surface: null,
preset: 'Aura', darkTheme: false,
menuMode: 'static',
activeMenuItem: null activeMenuItem: null
}); });
@@ -23,14 +19,27 @@ const layoutState = reactive({
}); });
export function useLayout() { export function useLayout() {
const setScale = (scale) => { const setPrimary = (value) => {
layoutConfig.scale = scale; layoutConfig.primary = value;
};
const setSurface = (value) => {
layoutConfig.surface = value;
};
const setPreset = (value) => {
layoutConfig.preset = value;
}; };
const setActiveMenuItem = (item) => { const setActiveMenuItem = (item) => {
layoutConfig.activeMenuItem = item.value || item; layoutConfig.activeMenuItem = item.value || item;
}; };
const toggleDarkMode = () => {
layoutConfig.darkTheme = !layoutConfig.darkTheme;
document.documentElement.classList.toggle('app-dark');
};
const onMenuToggle = () => { const onMenuToggle = () => {
if (layoutConfig.menuMode === 'overlay') { if (layoutConfig.menuMode === 'overlay') {
layoutState.overlayMenuActive = !layoutState.overlayMenuActive; layoutState.overlayMenuActive = !layoutState.overlayMenuActive;
@@ -47,22 +56,5 @@ export function useLayout() {
const isDarkTheme = computed(() => layoutConfig.darkTheme); const isDarkTheme = computed(() => layoutConfig.darkTheme);
const toggleDarkMode = () => { return { layoutConfig: toRefs(layoutConfig), layoutState: toRefs(layoutState), onMenuToggle, isSidebarActive, isDarkTheme, setActiveMenuItem, toggleDarkMode, setPrimary, setSurface, setPreset };
layoutConfig.darkTheme = !layoutConfig.darkTheme;
document.documentElement.classList.toggle('app-dark');
};
const setPrimary = (value) => {
layoutConfig.primary = value;
};
const setSurface = (value) => {
layoutConfig.surface = value;
};
const setPreset = (value) => {
layoutConfig.preset = value;
};
return { layoutConfig: toRefs(layoutConfig), layoutState: toRefs(layoutState), setScale, onMenuToggle, isSidebarActive, isDarkTheme, setActiveMenuItem, toggleDarkMode, setPrimary, setSurface, setPreset };
} }

View File

@@ -1,6 +1,6 @@
<script setup> <script setup>
import { ref, watch } from 'vue';
import { useLayout } from '@/layout/composables/layout'; import { useLayout } from '@/layout/composables/layout';
import { ref, watch } from 'vue';
const { layoutConfig } = useLayout(); const { layoutConfig } = useLayout();
let documentStyle = getComputedStyle(document.documentElement); let documentStyle = getComputedStyle(document.documentElement);
@@ -223,7 +223,16 @@ const setChart = () => {
}; };
watch( watch(
layoutConfig.theme, layoutConfig.primary,
() => {
setColorOptions();
setChart();
},
{ immediate: true }
);
watch(
layoutConfig.darkTheme,
() => { () => {
setColorOptions(); setColorOptions();
setChart(); setChart();