From 861f406d45f4f64c4a56e903065a0753dfdb570d Mon Sep 17 00:00:00 2001 From: Warinyourself Date: Sun, 14 Jun 2026 02:13:45 +0300 Subject: [PATCH] Extract theme domain into useThemeStore --- src/components/base/BackgroundImage.tsx | 6 +- src/components/base/SettingsComponent.tsx | 6 +- .../base/settings/SettingsCustom.tsx | 16 +-- .../base/settings/SettingsThemes.tsx | 10 +- src/components/base/settings/SettingsView.tsx | 6 +- src/components/themes/destruction/index.tsx | 12 +-- src/components/themes/flow/index.tsx | 16 +-- src/components/themes/planet/index.tsx | 10 +- src/components/themes/plasma/index.tsx | 10 +- src/components/themes/random/index.tsx | 18 ++-- src/components/themes/rings/index.tsx | 12 +-- src/components/themes/sphere/index.tsx | 16 +-- src/components/themes/tenderness/index.tsx | 8 +- src/composables/useQuerySync.ts | 14 +-- src/store/app.ts | 101 ++---------------- src/store/page.ts | 3 +- src/store/theme.ts | 97 +++++++++++++++++ src/utils/helper.ts | 3 +- src/utils/hotkeys.ts | 3 +- 19 files changed, 193 insertions(+), 174 deletions(-) create mode 100644 src/store/theme.ts diff --git a/src/components/base/BackgroundImage.tsx b/src/components/base/BackgroundImage.tsx index a951b3c..46523d6 100644 --- a/src/components/base/BackgroundImage.tsx +++ b/src/components/base/BackgroundImage.tsx @@ -1,5 +1,5 @@ import { defineComponent, computed, h } from 'vue' -import { useAppStore } from '@/store/app' +import { useThemeStore } from '@/store/theme' import flow from '@/components/themes/flow' import sphere from '@/components/themes/sphere' @@ -24,8 +24,8 @@ const themeMap: Record = { export default defineComponent({ name: 'BackgroundImage', setup() { - const appStore = useAppStore() - const theme = computed(() => appStore.activeTheme) + const themeStore = useThemeStore() + const theme = computed(() => themeStore.activeTheme) return () => { const component = themeMap[theme.value.component ?? 'random'] ?? themeMap.random diff --git a/src/components/base/SettingsComponent.tsx b/src/components/base/SettingsComponent.tsx index 7271aba..7f6546a 100644 --- a/src/components/base/SettingsComponent.tsx +++ b/src/components/base/SettingsComponent.tsx @@ -1,14 +1,14 @@ import { CircleX, Palette, SlidersHorizontal, Settings } from '@lucide/vue' import { defineComponent, computed } from 'vue' import { useI18n } from 'vue-i18n' -import { useAppStore } from '@/store/app' +import { useThemeStore } from '@/store/theme' import { usePageStore } from '@/store/page' import SettingsView from './settings/SettingsView' export default defineComponent({ name: 'SettingsComponent', setup() { - const appStore = useAppStore() + const themeStore = useThemeStore() const pageStore = usePageStore() const { t } = useI18n() @@ -19,7 +19,7 @@ export default defineComponent({ { label: t('settings.choice-themes'), icon: Palette }, { label: t('settings.title'), icon: Settings } ] - if (appStore.activeTheme?.settings?.length !== undefined) { + if (themeStore.activeTheme?.settings?.length !== undefined) { list.splice(1, 0, { label: t('settings.customize-theme'), icon: SlidersHorizontal }) } return list diff --git a/src/components/base/settings/SettingsCustom.tsx b/src/components/base/settings/SettingsCustom.tsx index b33ea5a..32da93a 100644 --- a/src/components/base/settings/SettingsCustom.tsx +++ b/src/components/base/settings/SettingsCustom.tsx @@ -1,6 +1,6 @@ import { defineComponent, computed, type VNode } from 'vue' import { useI18n } from 'vue-i18n' -import { useAppStore } from '@/store/app' +import { useThemeStore } from '@/store/theme' import AppSlider from '@/components/app/AppSlider' import AppButton from '@/components/app/AppButton' import AppSwitch from '@/components/app/AppSwitch' @@ -19,10 +19,10 @@ import type { export default defineComponent({ name: 'SettingsCustom', setup() { - const appStore = useAppStore() + const themeStore = useThemeStore() const { t } = useI18n() - const inputs = computed(() => appStore.activeTheme?.settings || []) + const inputs = computed(() => themeStore.activeTheme?.settings || []) const buildSlider = (input: AppInputThemeSlider) => { const { label, value, options: { step, min: from, max: to } } = input @@ -34,7 +34,7 @@ export default defineComponent({ label={label} modelValue={value as number} onUpdate:modelValue={(v: number) => { - appStore.changeSettingsThemeInput({ key: input.name, value: v }) + themeStore.changeSettingsThemeInput({ key: input.name, value: v }) input.callback?.(v) }} /> @@ -49,7 +49,7 @@ export default defineComponent({ items={[...values]} modelValue={value as string} onUpdate:modelValue={(v: string) => { - appStore.changeSettingsThemeInput({ key: input.name, value: v }) + themeStore.changeSettingsThemeInput({ key: input.name, value: v }) }} /> ) @@ -63,7 +63,7 @@ export default defineComponent({ label={label} modelValue={value as string} onUpdate:modelValue={(color: AppInputColor) => { - appStore.changeSettingsThemeInput({ key: input.name, value: color.hex }) + themeStore.changeSettingsThemeInput({ key: input.name, value: color.hex }) input.callback?.(color.hex) }} /> @@ -77,7 +77,7 @@ export default defineComponent({ label={t(label)} modelValue={value as boolean} onUpdate:modelValue={(v: boolean) => { - appStore.changeSettingsThemeInput({ key: input.name, value: v }) + themeStore.changeSettingsThemeInput({ key: input.name, value: v }) input.callback?.(v) }} /> @@ -92,7 +92,7 @@ export default defineComponent({ modelValue={value as number} values={values} onUpdate:modelValue={(v: number) => { - appStore.changeSettingsThemeInput({ key: input.name, value: v }) + themeStore.changeSettingsThemeInput({ key: input.name, value: v }) }} /> ) diff --git a/src/components/base/settings/SettingsThemes.tsx b/src/components/base/settings/SettingsThemes.tsx index f05087f..97f2a6e 100644 --- a/src/components/base/settings/SettingsThemes.tsx +++ b/src/components/base/settings/SettingsThemes.tsx @@ -1,5 +1,5 @@ import { defineComponent, computed } from 'vue' -import { useAppStore } from '@/store/app' +import { useThemeStore } from '@/store/theme' const themeImages = import.meta.glob('@/assets/images/themes/*/index.png', { eager: true, import: 'default' }) as Record @@ -11,9 +11,9 @@ function getThemeImage(name: string): string { export default defineComponent({ name: 'SettingsThemes', setup() { - const appStore = useAppStore() - const themes = computed(() => appStore.themes) - const activeTheme = computed(() => appStore.activeTheme) + const themeStore = useThemeStore() + const themes = computed(() => themeStore.themes) + const activeTheme = computed(() => themeStore.activeTheme) return () => (