From a71bb4c0d01187f4594447ca9acfd50096f84165 Mon Sep 17 00:00:00 2001 From: Mottamim Abdul Muhit Date: Fri, 30 Jan 2026 08:23:34 +0600 Subject: [PATCH] Custom Color Theme Selector (#4641) * Add custom theme color selector to ColorPicker Introduces a CustomColorSelector component and integrates it into the ColorPicker, allowing users to define and persist custom link, text, and background colors for the site theme. Updates dependencies to include tinycolor2 and its types for color manipulation. * Add custom theme mode with improved color handling Introduces a 'custom' display mode for themes, allowing users to define and persist their own color schemes. Updates ColorPicker and ThemeDropdown to support the custom mode, including UI logic to prevent switching from custom to default modes without explicit action. Enhances themeHandler to register and apply custom themes from localStorage, manage previous mode restoration, and apply additional CSS variables for custom backgrounds. * Remove unused variables from theme components Cleaned up ColorPicker.vue and ThemeDropdown.vue by removing unused variables and functions related to theme state. This improves code clarity and maintainability. * Remove close on overlay click in color selector modal The @click.self handler was removed from the modal overlay, so clicking the overlay no longer closes the CustomColorSelector modal. * Increase card background lightening for custom themes Adjusted the lightening values for card backgrounds in custom themes from 5/8 to 10/15 to improve visual distinction between cards and the main background. * Improve custom color theme handling in color picker Exclude the 'custom' theme from preset theme options in ColorPicker.vue and correct button text color assignments for custom themes. In CustomColorSelector.vue, update button styles to reflect selected custom colors dynamically, enhancing the user experience when previewing and applying custom color selections. * Update Vue version and config improvements Bump Vue dependency to 3.5.0 in package.json. Add SCSS preprocessor option to VitePress config for modern compiler API. Refactor UnoCSS config to use kebab-case CSS property names for consistency. * Update pnpm lockfile Regenerated pnpm-lock.yaml to reflect updated dependencies. * Update header description text color style Replaces the description paragraph's class-based text color with an inline style using the CSS variable '--vp-c-text-1' for improved consistency with theming. * Add contrast warnings to color selector Introduces computed warnings for low contrast between link/text and background colors based on WCAG AA standards. Displays warning messages in the UI when contrast ratios fall below 4.5:1 to improve accessibility awareness. --- docs/.vitepress/config.mts | 7 + .../theme/components/ColorPicker.vue | 252 ++++++++- .../theme/components/CustomColorSelector.vue | 486 ++++++++++++++++++ .../theme/components/ThemeDropdown.vue | 73 ++- docs/.vitepress/theme/themes/themeHandler.ts | 208 +++++++- docs/.vitepress/theme/themes/types.ts | 2 +- docs/.vitepress/transformer/constants.ts | 2 +- package-lock.json | Bin 587199 -> 592368 bytes package.json | 4 +- pnpm-lock.yaml | Bin 330600 -> 339045 bytes unocss.config.ts | 10 +- 11 files changed, 1014 insertions(+), 30 deletions(-) create mode 100644 docs/.vitepress/theme/components/CustomColorSelector.vue diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 019284713..c769477a9 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -207,6 +207,13 @@ export default defineConfig({ build: { // Shut the fuck up chunkSizeWarningLimit: Number.POSITIVE_INFINITY + }, + css: { + preprocessorOptions: { + scss: { + api: 'modern-compiler' + } + } } }, markdown: { diff --git a/docs/.vitepress/theme/components/ColorPicker.vue b/docs/.vitepress/theme/components/ColorPicker.vue index 8cf98c059..fb306f7b9 100644 --- a/docs/.vitepress/theme/components/ColorPicker.vue +++ b/docs/.vitepress/theme/components/ColorPicker.vue @@ -1,24 +1,37 @@ diff --git a/docs/.vitepress/theme/components/CustomColorSelector.vue b/docs/.vitepress/theme/components/CustomColorSelector.vue new file mode 100644 index 000000000..e08890637 --- /dev/null +++ b/docs/.vitepress/theme/components/CustomColorSelector.vue @@ -0,0 +1,486 @@ + + + + + diff --git a/docs/.vitepress/theme/components/ThemeDropdown.vue b/docs/.vitepress/theme/components/ThemeDropdown.vue index e7f2d6994..e13b88ab4 100644 --- a/docs/.vitepress/theme/components/ThemeDropdown.vue +++ b/docs/.vitepress/theme/components/ThemeDropdown.vue @@ -3,7 +3,7 @@ import { ref, computed, onMounted, onUnmounted } from 'vue' import { useTheme } from '../themes/themeHandler' import type { DisplayMode } from '../themes/types' -const { mode, setMode, state, amoledEnabled, setAmoledEnabled } = useTheme() +const { mode, setMode, amoledEnabled, setAmoledEnabled } = useTheme() const isOpen = ref(false) const dropdownRef = ref(null) @@ -15,18 +15,33 @@ interface ModeChoice { isAmoled?: boolean } -const modeChoices: ModeChoice[] = [ +const baseModeChoices: ModeChoice[] = [ { mode: 'light', label: 'Light', icon: 'i-ph-sun-duotone' }, { mode: 'dark', label: 'Dark', icon: 'i-ph-moon-duotone' }, - { mode: 'dark', label: 'AMOLED', icon: 'i-ph-moon-stars-duotone', isAmoled: true } + { mode: 'dark', label: 'AMOLED', icon: 'i-ph-moon-stars-duotone', isAmoled: true }, + { mode: 'custom', label: 'Custom', icon: 'i-lucide-palette' } ] +// Only show custom mode when already in custom mode +const modeChoices = computed(() => { + const current = (mode && (mode as any).value) ? (mode as any).value : 'light' + if (current === 'custom') { + return baseModeChoices + } + // Filter out custom mode when not in custom + return baseModeChoices.filter(choice => choice.mode !== 'custom') +}) + const currentChoice = computed(() => { const current = (mode && (mode as any).value) ? (mode as any).value : 'light' - if (current === 'dark' && amoledEnabled.value) { - return modeChoices[2] // AMOLED option + // Handle custom mode + if (current === 'custom') { + return baseModeChoices[3] // Custom option } - return modeChoices.find(choice => choice.mode === current && !choice.isAmoled) || modeChoices[0] + if (current === 'dark' && amoledEnabled.value) { + return baseModeChoices[2] // AMOLED option + } + return baseModeChoices.find(choice => choice.mode === current && !choice.isAmoled) || baseModeChoices[0] }) const toggleDropdown = () => { @@ -34,6 +49,20 @@ const toggleDropdown = () => { } const selectMode = (choice: ModeChoice) => { + const current = (mode && (mode as any).value) ? (mode as any).value : 'light' + + // Prevent switching to Light/Dark/AMOLED when in custom mode + if (current === 'custom' && choice.mode !== 'custom') { + isOpen.value = false + return + } + + // Prevent switching when clicking custom (clicking custom does nothing) + if (choice.mode === 'custom') { + isOpen.value = false + return + } + if (choice.isAmoled) { setMode('dark') setAmoledEnabled(true) @@ -46,12 +75,31 @@ const selectMode = (choice: ModeChoice) => { const isActiveChoice = (choice: ModeChoice) => { const current = (mode && (mode as any).value) ? (mode as any).value : 'light' + // Handle custom mode + if (choice.mode === 'custom') { + return current === 'custom' + } if (choice.isAmoled) { return current === 'dark' && amoledEnabled.value } return choice.mode === current && !choice.isAmoled && !amoledEnabled.value } +// Check if a choice should be disabled +const isDisabled = (choice: ModeChoice) => { + const current = (mode && (mode as any).value) ? (mode as any).value : 'light' + // Disable Light/Dark/AMOLED when in custom mode + return current === 'custom' && choice.mode !== 'custom' +} + +// Get tooltip for disabled items +const getTooltip = (choice: ModeChoice) => { + if (isDisabled(choice)) { + return 'Use default themes to select this' + } + return choice.label +} + const handleClickOutside = (event: MouseEvent) => { if (dropdownRef.value && !dropdownRef.value.contains(event.target as Node)) { isOpen.value = false @@ -86,7 +134,8 @@ onUnmounted(() => { v-for="(choice, index) in modeChoices" :key="index" class="theme-dropdown-item" - :class="{ active: isActiveChoice(choice) }" + :class="{ active: isActiveChoice(choice), disabled: isDisabled(choice) }" + :title="getTooltip(choice)" @click="selectMode(choice)" >
@@ -166,6 +215,16 @@ onUnmounted(() => { font-weight: 500; } + &.disabled { + color: var(--vp-c-text-3); + opacity: 0.5; + cursor: not-allowed; + + &:hover { + background: transparent; + } + } + span { flex: 1; } diff --git a/docs/.vitepress/theme/themes/themeHandler.ts b/docs/.vitepress/theme/themes/themeHandler.ts index c11c1601d..bb175abbf 100644 --- a/docs/.vitepress/theme/themes/themeHandler.ts +++ b/docs/.vitepress/theme/themes/themeHandler.ts @@ -17,10 +17,12 @@ import { ref, onMounted, computed } from 'vue' import type { DisplayMode, ThemeState, Theme, ModeColors } from './types' import { themeRegistry } from './configs' +import tinycolor from 'tinycolor2' const STORAGE_KEY_THEME = 'vitepress-theme-name' const STORAGE_KEY_MODE = 'vitepress-display-mode' const STORAGE_KEY_AMOLED = 'vitepress-amoled-enabled' +const STORAGE_KEY_PREVIOUS_MODE = 'vitepress-previous-mode' export class ThemeHandler { private state = ref({ @@ -29,11 +31,178 @@ export class ThemeHandler { theme: null }) private amoledEnabled = ref(false) + private previousMode = ref('light') constructor() { this.initializeTheme() } + private registerCustomThemeFromStorage() { + if (typeof window === 'undefined') return + + // Load saved custom colors from localStorage + const savedLinkColor = localStorage.getItem('custom-theme-link-color') || '#ffffff' + const savedTextColor = localStorage.getItem('custom-theme-text-color') || '#cccccc' + const savedBgColor = localStorage.getItem('custom-theme-bg-color') || '#000000' + + // Create lighter versions of background for cards + // Increase lightening to make cards more distinct + const lightenedBg = tinycolor(savedBgColor).lighten(10).toString() + const lightenedBgAlt = tinycolor(savedBgColor).lighten(15).toString() + + // Create custom theme with saved colors + const customTheme = { + name: 'custom', + displayName: 'Custom', + preview: savedBgColor, + modes: { + light: { + brand: { + 1: savedLinkColor, + 2: savedLinkColor, + 3: savedLinkColor, + soft: savedLinkColor + }, + bg: savedBgColor, + bgAlt: lightenedBg, + bgElv: lightenedBgAlt, + text: { + 1: savedTextColor, + 2: savedTextColor, + 3: savedTextColor + }, + button: { + brand: { + bg: savedLinkColor, + border: savedLinkColor, + text: savedBgColor, + hoverBorder: savedLinkColor, + hoverText: savedBgColor, + hoverBg: savedLinkColor, + activeBorder: savedLinkColor, + activeText: savedBgColor, + activeBg: savedLinkColor + }, + alt: { + bg: '#484848', + text: '#f0eeee', + hoverBg: '#484848', + hoverText: '#f0eeee' + } + }, + customBlock: { + info: { + bg: savedBgColor, + border: savedLinkColor, + text: savedTextColor, + textDeep: savedTextColor + }, + tip: { + bg: '#D8F8E4', + border: '#447A61', + text: '#2D6A58', + textDeep: '#166534' + }, + warning: { + bg: '#FCEFC3', + border: '#9A8034', + text: '#9C701B', + textDeep: '#92400e' + }, + danger: { + bg: '#FBE1E2', + border: '#B3565E', + text: '#912239', + textDeep: '#991b1b' + } + }, + selection: { + bg: savedLinkColor + }, + home: { + heroNameColor: savedLinkColor, + heroNameBackground: savedBgColor, + heroImageBackground: `linear-gradient(135deg, ${savedBgColor} 0%, ${savedLinkColor} 100%)`, + heroImageFilter: 'blur(44px)' + } + }, + dark: { + brand: { + 1: savedLinkColor, + 2: savedLinkColor, + 3: savedLinkColor, + soft: savedLinkColor + }, + bg: savedBgColor, + bgAlt: lightenedBg, + bgElv: lightenedBgAlt, + text: { + 1: savedTextColor, + 2: savedTextColor, + 3: savedTextColor + }, + button: { + brand: { + bg: savedLinkColor, + border: savedLinkColor, + text: savedBgColor, + hoverBorder: savedLinkColor, + hoverText: savedBgColor, + hoverBg: savedLinkColor, + activeBorder: savedLinkColor, + activeText: savedBgColor, + activeBg: savedLinkColor + }, + alt: { + bg: '#484848', + text: '#f0eeee', + hoverBg: '#484848', + hoverText: '#f0eeee' + } + }, + customBlock: { + info: { + bg: savedBgColor, + border: savedLinkColor, + text: savedTextColor, + textDeep: savedTextColor + }, + tip: { + bg: '#0C2A20', + border: '#184633', + text: '#B0EBC9', + textDeep: '#166534' + }, + warning: { + bg: '#403207', + border: '#7E6211', + text: '#F9DE88', + textDeep: '#92400e' + }, + danger: { + bg: '#3F060A', + border: '#7C0F18', + text: '#F7C1BC', + textDeep: '#991b1b' + } + }, + selection: { + bg: savedLinkColor + }, + home: { + heroNameColor: savedLinkColor, + heroNameBackground: savedBgColor, + heroImageBackground: `linear-gradient(135deg, ${savedBgColor} 0%, ${savedLinkColor} 100%)`, + heroImageFilter: 'blur(44px)' + } + } + } + } + + // Register custom theme + themeRegistry['custom'] = customTheme + } + private initializeTheme() { if (typeof window === 'undefined') return @@ -42,6 +211,11 @@ export class ThemeHandler { const savedMode = localStorage.getItem(STORAGE_KEY_MODE) as DisplayMode | null const savedAmoled = localStorage.getItem(STORAGE_KEY_AMOLED) === 'true' + // If custom theme was saved, register it early from localStorage + if (savedTheme === 'custom') { + this.registerCustomThemeFromStorage() + } + if (themeRegistry[savedTheme]) { this.state.value.currentTheme = savedTheme this.state.value.theme = themeRegistry[savedTheme] @@ -91,7 +265,9 @@ export class ThemeHandler { if (!theme) return - const modeColors = theme.modes[currentMode] + // Custom mode uses dark mode colors from the theme + const effectiveMode = currentMode === 'custom' ? 'dark' : currentMode + const modeColors = theme.modes[effectiveMode] this.applyDOMClasses(currentMode) this.applyCSSVariables(modeColors, theme) @@ -107,7 +283,7 @@ export class ThemeHandler { const root = document.documentElement // Remove all mode classes - root.classList.remove('dark', 'light', 'amoled') + root.classList.remove('dark', 'light', 'amoled', 'custom') // Add current mode class root.classList.add(mode) @@ -159,6 +335,14 @@ export class ThemeHandler { root.style.setProperty('--vp-c-bg', bgColor) root.style.setProperty('--vp-c-bg-alt', bgAltColor) root.style.setProperty('--vp-c-bg-elv', bgElvColor) + + // Apply additional background variables for cards and other elements + root.style.setProperty('--vp-c-bg-soft', bgAltColor) + root.style.setProperty('--vp-c-default-soft', bgElvColor) + root.style.setProperty('--vp-c-default-1', bgAltColor) + root.style.setProperty('--vp-c-default-2', bgElvColor) + root.style.setProperty('--vp-c-default-3', bgColor) + if (colors.bgMark) { root.style.setProperty('--vp-c-bg-mark', colors.bgMark) } @@ -282,6 +466,12 @@ export class ThemeHandler { } public setMode(mode: DisplayMode) { + // Save current mode as previous mode before switching to custom + if (mode === 'custom' && this.state.value.currentMode !== 'custom') { + this.previousMode.value = this.state.value.currentMode + localStorage.setItem(STORAGE_KEY_PREVIOUS_MODE, this.previousMode.value) + } + this.state.value.currentMode = mode localStorage.setItem(STORAGE_KEY_MODE, mode) this.applyTheme() @@ -319,7 +509,9 @@ export class ThemeHandler { if (!theme) return // If theme doesn't specify brand colors, force ColorPicker to reapply its selection const currentMode = this.state.value.currentMode - const modeColors = theme.modes[currentMode] + // Custom mode uses dark mode colors + const effectiveMode = currentMode === 'custom' ? 'dark' : currentMode + const modeColors = theme.modes[effectiveMode] if (!modeColors.brand || !modeColors.brand[1]) { // Trigger a custom event that ColorPicker can listen to @@ -360,6 +552,15 @@ export class ThemeHandler { public isAmoledMode() { return this.state.value.currentMode === 'dark' && this.amoledEnabled.value } + + public restorePreviousMode() { + // Only restore if currently in custom mode + if (this.state.value.currentMode === 'custom') { + const savedPreviousMode = localStorage.getItem(STORAGE_KEY_PREVIOUS_MODE) as DisplayMode | null + const modeToRestore = savedPreviousMode || this.previousMode.value + this.setMode(modeToRestore) + } + } } // Global theme handler instance @@ -395,6 +596,7 @@ export function useTheme() { amoledEnabled: handler.getAmoledEnabledRef(), setAmoledEnabled: (enabled: boolean) => handler.setAmoledEnabled(enabled), toggleAmoled: () => handler.toggleAmoled(), + restorePreviousMode: () => handler.restorePreviousMode(), state } } \ No newline at end of file diff --git a/docs/.vitepress/theme/themes/types.ts b/docs/.vitepress/theme/themes/types.ts index de54fa80a..56e3d2bf2 100644 --- a/docs/.vitepress/theme/themes/types.ts +++ b/docs/.vitepress/theme/themes/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export type DisplayMode = 'light' | 'dark' +export type DisplayMode = 'light' | 'dark' | 'custom' export interface ModeColors { // Brand colors (optional - if not specified, ColorPicker values are used) diff --git a/docs/.vitepress/transformer/constants.ts b/docs/.vitepress/transformer/constants.ts index 727a3144b..91765cf0a 100644 --- a/docs/.vitepress/transformer/constants.ts +++ b/docs/.vitepress/transformer/constants.ts @@ -147,7 +147,7 @@ export function getHeader(id: string) { const title = '

' - const description = '

' + const description = '

' const feedback = meta.build.api ? '' : '' diff --git a/package-lock.json b/package-lock.json index bc3a32bdf3548d7eb7feae5ac45e2378647b17c1..56915ee328403e08bb5fa51c8b4e8eae5445da81 100644 GIT binary patch delta 6989 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 delta 5025 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 Tv@7Huer0Lz?6aS9_MiG+3)*rG diff --git a/package.json b/package.json index 0a62134a3..414e9aee2 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,9 @@ "nprogress": "^0.2.0", "pathe": "^2.0.3", "reka-ui": "^2.6.1", + "tinycolor2": "^1.6.0", "unocss": "66.5.10", "vitepress": "^1.6.4", - "vue": "^3.5.25", "x-satori": "^0.4.0", "zod": "^4.1.13" }, @@ -61,6 +61,7 @@ "@iconify/utils": "^3.1.0", "@types/node": "^24.10.1", "@types/nprogress": "^0.2.3", + "@types/tinycolor2": "^1.4.6", "@vue/compiler-sfc": "^3.5.27", "floating-vue": "^5.2.2", "nitro-cloudflare-dev": "^0.2.2", @@ -73,6 +74,7 @@ "vite-plugin-optimize-exclude": "^0.0.1", "vite-plugin-pwa": "^1.2.0", "vite-plugin-terminal": "^1.3.0", + "vue": "^3.5.0", "wrangler": "^4.52.1" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 820f45b8ad49f24485cca3ed605ca057dbc26be6..5a1c5c47e8115e55dfc83d1e28877049158c65e0 100644 GIT binary patch delta 43188 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,wsL6`%1KL~5 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 bf9>UR?q30dLHmSgg);6Ci17HCoYnsaR5=&P diff --git a/unocss.config.ts b/unocss.config.ts index 001b1f731..f940a4d1f 100644 --- a/unocss.config.ts +++ b/unocss.config.ts @@ -102,12 +102,12 @@ export default defineConfig({ { display: 'inline-block', padding: '0.2em 0.4em', - fontSize: '0.75em', - fontWeight: '500', - lineHeight: '1', + 'font-size': '0.75em', + 'font-weight': '500', + 'line-height': '1', color: 'var(--vp-c-text-1)', - backgroundColor: 'rgb(var(--vp-c-bg-alt))', - borderRadius: '4px' + 'background-color': 'rgb(var(--vp-c-bg-alt))', + 'border-radius': '4px' } ] ],