Skip to content

Commit e868085

Browse files
committed
Create composables folder with the useTheme file
1 parent 280e77d commit e868085

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

src/components/ThemeSwitcher.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<a href="#" @click.prevent="toggleTheme" aria-label="Theme Switcher">
2+
<a href="#" @click="toggleTheme" aria-label="Theme Switcher">
33
<i
44
v-if="theme === 'light'"
55
data-feather="moon"

src/composables/useThemeSwitcher.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import { ref } from '@vue/reactivity';
2+
3+
export default function useThemeSwitcher() {
4+
const currentTheme = ref('light');
5+
6+
function toggleTheme() {
7+
if (currentTheme.value == 'dark') {
8+
setLightTheme();
9+
} else {
10+
setDarkTheme();
11+
}
12+
}
13+
14+
// Light Theme Function
15+
function setLightTheme() {
16+
currentTheme.value = 'light';
17+
18+
document.documentElement.style.setProperty(
19+
'--primary',
20+
'var(--purple)'
21+
);
22+
document.documentElement.style.setProperty(
23+
'--background',
24+
'var(--bg--light)'
25+
);
26+
document.documentElement.style.setProperty(
27+
'--text',
28+
'var(--text--light'
29+
);
30+
document.documentElement.style.setProperty(
31+
'--link-text',
32+
'var(--link-text--light'
33+
);
34+
document.documentElement.style.setProperty(
35+
'--active-link-text',
36+
'var(--active-link-text--light'
37+
);
38+
document.documentElement.style.setProperty(
39+
'--shadow',
40+
'var(--shadow--light'
41+
);
42+
document.documentElement.style.setProperty(
43+
'--quote-bg',
44+
'var(--quote-bg--light'
45+
);
46+
47+
process.isClient && localStorage.setItem('theme', 'light');
48+
}
49+
50+
// Dark Theme Function
51+
function setDarkTheme() {
52+
currentTheme.value = 'dark';
53+
54+
document.documentElement.style.setProperty('--primary', 'var(--teal)');
55+
document.documentElement.style.setProperty(
56+
'--background',
57+
'var(--bg--dark)'
58+
);
59+
document.documentElement.style.setProperty(
60+
'--text',
61+
'var(--text--dark'
62+
);
63+
document.documentElement.style.setProperty(
64+
'--link-text',
65+
'var(--link-text--dark'
66+
);
67+
document.documentElement.style.setProperty(
68+
'--active-link-text',
69+
'var(--active-link-text--dark'
70+
);
71+
document.documentElement.style.setProperty(
72+
'--shadow',
73+
'var(--shadow--dark'
74+
);
75+
document.documentElement.style.setProperty(
76+
'--quote-bg',
77+
'var(--quote-bg--dark'
78+
);
79+
80+
process.isClient && localStorage.setItem('theme', 'dark');
81+
}
82+
83+
return {
84+
toggleTheme,
85+
};
86+
}

0 commit comments

Comments
 (0)