mirror of
https://github.com/fmhy/edit.git
synced 2025-11-28 00:41:20 +11:00
Compare commits
2 commits
538105ee82
...
a5220e1485
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5220e1485 | ||
|
|
7a1ca832ad |
2 changed files with 72 additions and 41 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
import { colors } from '@fmhy/colors'
|
import { colors } from '@fmhy/colors'
|
||||||
import { useStorage, useStyleTag } from '@vueuse/core'
|
import { useStorage, useStyleTag } from '@vueuse/core'
|
||||||
import { watch, onMounted } from 'vue'
|
import { watch, onMounted } from 'vue'
|
||||||
|
import Switch from './Switch.vue'
|
||||||
|
|
||||||
// Add Halloween colors
|
// Add Halloween colors
|
||||||
const halloweenColors = {
|
const halloweenColors = {
|
||||||
|
|
@ -40,6 +41,7 @@ const colorScales = [
|
||||||
|
|
||||||
type ColorNames = keyof typeof extendedColors
|
type ColorNames = keyof typeof extendedColors
|
||||||
const selectedColor = useStorage<ColorNames>('preferred-color', 'halloween')
|
const selectedColor = useStorage<ColorNames>('preferred-color', 'halloween')
|
||||||
|
const isAmoledMode = useStorage('amoled-mode', false)
|
||||||
|
|
||||||
const colorOptions = Object.keys(extendedColors).filter(
|
const colorOptions = Object.keys(extendedColors).filter(
|
||||||
(key) => typeof extendedColors[key as keyof typeof extendedColors] === 'object'
|
(key) => typeof extendedColors[key as keyof typeof extendedColors] === 'object'
|
||||||
|
|
@ -47,7 +49,7 @@ const colorOptions = Object.keys(extendedColors).filter(
|
||||||
|
|
||||||
const { css } = useStyleTag('', { id: 'brand-color' })
|
const { css } = useStyleTag('', { id: 'brand-color' })
|
||||||
|
|
||||||
const updateThemeColor = (colorName: ColorNames) => {
|
const updateThemeColor = (colorName: ColorNames, amoledEnabled: boolean) => {
|
||||||
const colorSet = extendedColors[colorName]
|
const colorSet = extendedColors[colorName]
|
||||||
|
|
||||||
const cssVars = colorScales
|
const cssVars = colorScales
|
||||||
|
|
@ -56,9 +58,30 @@ const updateThemeColor = (colorName: ColorNames) => {
|
||||||
|
|
||||||
const htmlElement = document.documentElement
|
const htmlElement = document.documentElement
|
||||||
|
|
||||||
|
// Manage theme classes
|
||||||
if (colorName === 'halloween') {
|
if (colorName === 'halloween') {
|
||||||
// Apply Halloween theme
|
|
||||||
htmlElement.classList.add('theme-halloween')
|
htmlElement.classList.add('theme-halloween')
|
||||||
|
} else {
|
||||||
|
htmlElement.classList.remove('theme-halloween')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (amoledEnabled) {
|
||||||
|
htmlElement.classList.add('theme-amoled')
|
||||||
|
} else {
|
||||||
|
htmlElement.classList.remove('theme-amoled')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determine dark background color based on AMOLED mode
|
||||||
|
const darkBg = amoledEnabled ? '#000000' : 'rgb(26, 26, 26)'
|
||||||
|
const darkBgAlt = amoledEnabled ? '#000000' : 'rgb(23, 23, 23)'
|
||||||
|
const darkBgElv = amoledEnabled ? 'rgba(0, 0, 0, 0.9)' : 'rgba(23, 23, 23, 0.8)'
|
||||||
|
const darkBgSoft = amoledEnabled ? '#000000' : 'rgb(23, 23, 23)'
|
||||||
|
|
||||||
|
// Apply Halloween theme backgrounds or normal backgrounds
|
||||||
|
if (colorName === 'halloween') {
|
||||||
|
const halloweenDarkBg = amoledEnabled ? '#000000' : 'rgb(15, 15, 15)'
|
||||||
|
const halloweenDarkBgAlt = amoledEnabled ? '#000000' : 'rgb(12, 12, 12)'
|
||||||
|
const halloweenDarkBgElv = amoledEnabled ? 'rgba(0, 0, 0, 0.9)' : 'rgba(12, 12, 12, 0.8)'
|
||||||
|
|
||||||
css.value = `
|
css.value = `
|
||||||
:root {
|
:root {
|
||||||
|
|
@ -75,12 +98,21 @@ const updateThemeColor = (colorName: ColorNames) => {
|
||||||
--vp-c-brand-2: ${colorSet[500]};
|
--vp-c-brand-2: ${colorSet[500]};
|
||||||
--vp-c-brand-3: ${colorSet[700]};
|
--vp-c-brand-3: ${colorSet[700]};
|
||||||
--vp-c-brand-soft: ${colorSet[300]};
|
--vp-c-brand-soft: ${colorSet[300]};
|
||||||
|
--vp-c-bg: ${halloweenDarkBg} !important;
|
||||||
|
--vp-c-bg-alt: ${halloweenDarkBgAlt} !important;
|
||||||
|
--vp-c-bg-elv: ${halloweenDarkBgElv} !important;
|
||||||
|
--vp-c-bg-soft: ${halloweenDarkBgAlt} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark html, .dark body {
|
||||||
|
background-color: ${halloweenDarkBg} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .VPApp, .dark .Layout, .dark .VPContent, .dark .VPHome, .dark .VPHero, .dark #app, .dark .vp-doc {
|
||||||
|
background-color: ${halloweenDarkBg} !important;
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
} else {
|
} else {
|
||||||
// Remove Halloween theme and apply other theme with normal backgrounds
|
|
||||||
htmlElement.classList.remove('theme-halloween')
|
|
||||||
|
|
||||||
css.value = `
|
css.value = `
|
||||||
:root {
|
:root {
|
||||||
${cssVars}
|
${cssVars}
|
||||||
|
|
@ -100,10 +132,10 @@ const updateThemeColor = (colorName: ColorNames) => {
|
||||||
--vp-c-brand-2: ${colorSet[500]};
|
--vp-c-brand-2: ${colorSet[500]};
|
||||||
--vp-c-brand-3: ${colorSet[700]};
|
--vp-c-brand-3: ${colorSet[700]};
|
||||||
--vp-c-brand-soft: ${colorSet[300]};
|
--vp-c-brand-soft: ${colorSet[300]};
|
||||||
--vp-c-bg: rgb(26, 26, 26) !important;
|
--vp-c-bg: ${darkBg} !important;
|
||||||
--vp-c-bg-alt: rgb(23, 23, 23) !important;
|
--vp-c-bg-alt: ${darkBgAlt} !important;
|
||||||
--vp-c-bg-elv: rgba(23, 23, 23, 0.8) !important;
|
--vp-c-bg-elv: ${darkBgElv} !important;
|
||||||
--vp-c-bg-soft: rgb(23, 23, 23) !important;
|
--vp-c-bg-soft: ${darkBgSoft} !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
|
|
@ -114,52 +146,45 @@ const updateThemeColor = (colorName: ColorNames) => {
|
||||||
background-color: #ffffff !important;
|
background-color: #ffffff !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.VPHome {
|
|
||||||
background-color: #ffffff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.VPHome .VPHero {
|
|
||||||
background-color: #ffffff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark html, .dark body {
|
.dark html, .dark body {
|
||||||
background-color: rgb(26, 26, 26) !important;
|
background-color: ${darkBg} !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .VPApp, .dark .Layout, .dark .VPContent, .dark .VPHome, .dark .VPHero, .dark #app, .dark .vp-doc {
|
.dark .VPApp, .dark .Layout, .dark .VPContent, .dark .VPHome, .dark .VPHero, .dark #app, .dark .vp-doc {
|
||||||
background-color: rgb(26, 26, 26) !important;
|
background-color: ${darkBg} !important;
|
||||||
}
|
|
||||||
|
|
||||||
.dark .VPHome {
|
|
||||||
background-color: rgb(26, 26, 26) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark .VPHome .VPHero {
|
|
||||||
background-color: rgb(26, 26, 26) !important;
|
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set Halloween theme ASAP if its the pref
|
onMounted(() => {
|
||||||
|
// Set Halloween theme ASAP if its the pref (only in browser)
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
const storedTheme = localStorage.getItem('preferred-color')
|
const storedTheme = localStorage.getItem('preferred-color')
|
||||||
|
const storedAmoled = localStorage.getItem('amoled-mode')
|
||||||
|
|
||||||
if (!storedTheme || storedTheme === '"halloween"') {
|
if (!storedTheme || storedTheme === '"halloween"') {
|
||||||
document.documentElement.classList.add('theme-halloween')
|
document.documentElement.classList.add('theme-halloween')
|
||||||
}
|
}
|
||||||
|
if (storedAmoled === 'true') {
|
||||||
|
document.documentElement.classList.add('theme-amoled')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize theme color
|
|
||||||
updateThemeColor(selectedColor.value)
|
|
||||||
|
|
||||||
// halloween stuff
|
|
||||||
onMounted(() => {
|
|
||||||
if (selectedColor.value === 'halloween') {
|
if (selectedColor.value === 'halloween') {
|
||||||
document.documentElement.classList.add('theme-halloween')
|
document.documentElement.classList.add('theme-halloween')
|
||||||
}
|
}
|
||||||
|
if (isAmoledMode.value) {
|
||||||
|
document.documentElement.classList.add('theme-amoled')
|
||||||
|
}
|
||||||
|
|
||||||
// Re-apply the theme to ensure everything is initialized
|
// Re-apply the theme to ensure everything is initialized
|
||||||
updateThemeColor(selectedColor.value)
|
updateThemeColor(selectedColor.value, isAmoledMode.value)
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(selectedColor, updateThemeColor)
|
watch([selectedColor, isAmoledMode], ([color, amoled]) => {
|
||||||
|
updateThemeColor(color, amoled)
|
||||||
|
})
|
||||||
|
|
||||||
const normalizeColorName = (colorName: string) =>
|
const normalizeColorName = (colorName: string) =>
|
||||||
colorName.replaceAll(/-/g, ' ').charAt(0).toUpperCase() +
|
colorName.replaceAll(/-/g, ' ').charAt(0).toUpperCase() +
|
||||||
|
|
@ -195,5 +220,11 @@ const normalizeColorName = (colorName: string) =>
|
||||||
<div class="mt-2 text-sm text-$vp-c-text-2">
|
<div class="mt-2 text-sm text-$vp-c-text-2">
|
||||||
Selected: {{ normalizeColorName(selectedColor) }}
|
Selected: {{ normalizeColorName(selectedColor) }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- AMOLED toggle -->
|
||||||
|
<div class="mt-4 flex items-center gap-2">
|
||||||
|
<span class="text-sm text-$vp-c-text-2">AMOLED</span>
|
||||||
|
<Switch @click="isAmoledMode = !isAmoledMode" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -488,7 +488,7 @@
|
||||||
## ▷ Email Aliasing
|
## ▷ Email Aliasing
|
||||||
|
|
||||||
* 🌐 **[Email Aliasing Comparison](https://email-aliasing-comparison.netlify.app/)** / [GitHub](https://github.com/fynks/email-aliasing-comparison)
|
* 🌐 **[Email Aliasing Comparison](https://email-aliasing-comparison.netlify.app/)** / [GitHub](https://github.com/fynks/email-aliasing-comparison)
|
||||||
* ⭐ **[SimpleLogin](https://simplelogin.io/)** - Email Aliasing / [X](https://x.com/SimpleLogin) / [Subreddit](https://www.reddit.com/r/Simplelogin/) / [GitHub](https://github.com/simple-login/app)
|
* ⭐ **[SimpleLogin](https://simplelogin.io/)** - Email Aliasing / 10 Alias Limit / [X](https://x.com/SimpleLogin) / [Subreddit](https://www.reddit.com/r/Simplelogin/) / [GitHub](https://github.com/simple-login/app)
|
||||||
* ⭐ **[addy.io](https://addy.io/)** - Email Aliasing / [GitHub](https://github.com/anonaddy/anonaddy)
|
* ⭐ **[addy.io](https://addy.io/)** - Email Aliasing / [GitHub](https://github.com/anonaddy/anonaddy)
|
||||||
* ⭐ **[DuckDuckGo Email Protection](https://duckduckgo.com/email/)** - Email Aliasing / [Send Mail](https://duckduckgo.com/duckduckgo-help-pages/email-protection/duck-addresses/how-do-i-compose-a-new-email)
|
* ⭐ **[DuckDuckGo Email Protection](https://duckduckgo.com/email/)** - Email Aliasing / [Send Mail](https://duckduckgo.com/duckduckgo-help-pages/email-protection/duck-addresses/how-do-i-compose-a-new-email)
|
||||||
* [Mailgw](https://mailgw.com/) - Email Aliasing
|
* [Mailgw](https://mailgw.com/) - Email Aliasing
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue