diff --git a/src/components/app/AppColorSelector.tsx b/src/components/app/AppColorSelector.tsx index ea02a5d..af46b2c 100644 --- a/src/components/app/AppColorSelector.tsx +++ b/src/components/app/AppColorSelector.tsx @@ -16,7 +16,7 @@ export default defineComponent({ return () => (
-

{t(props.label)}

+

{t(props.label)} {props.modelValue}

{t(props.label)}

+ {props.modelValue}
- {appStore.showTime && ( -
- {formattedTime.value} -
- )} - +
{desktop && (
@@ -58,6 +52,12 @@ export default defineComponent({
)} + {appStore.showTime && ( +
+ {formattedTime.value} +
+ )} + {sys.canAccessBattery.value && bat && (
diff --git a/src/components/themes/contour/constants.ts b/src/components/themes/contour/constants.ts new file mode 100644 index 0000000..0e2ead0 --- /dev/null +++ b/src/components/themes/contour/constants.ts @@ -0,0 +1,29 @@ +import type { AppTheme } from '@/models/app' +import { + pxratio, + randomButton, + resetButton, + buildInputSlider, + buildInputColor, +} from '../../../utils/theme-inputs' + +export const CONTOUR_SETTINGS: AppTheme = { + name: 'Contour', + component: 'contour', + color: { + background: '#0a001a' + }, + settings: [ + pxratio({ value: 1 }), + buildInputSlider({ value: 0.7, min: 0, max: 15, step: 0.1 }), + buildInputSlider({ name: 'scale', value: 4, min: 1, max: 8, step: 0.1 }), + buildInputSlider({ name: 'contour', value: 18, min: 2, max: 64, step: 1 }), + buildInputSlider({ name: 'width', value: 0.01, min: 0.01, max: 1, step: 0.01 }), + buildInputSlider({ name: 'max-line', value: 0.03, min: 0.01, max: 1, step: 0.01 }), + buildInputColor({ name: 'color-active', value: '#ed2ce6' }), + buildInputColor({ name: 'color-second', value: '#1360dd' }), + buildInputColor({ name: 'color-bg', value: '#06010e' }), + randomButton, + resetButton + ] +} diff --git a/src/components/themes/contour/index.tsx b/src/components/themes/contour/index.tsx index 93c98c6..c7dd206 100644 --- a/src/components/themes/contour/index.tsx +++ b/src/components/themes/contour/index.tsx @@ -14,7 +14,7 @@ export default defineComponent({ const themeStore = useThemeStore() const canvasRef = ref(null) - const animationSpeed = computed(() => themeStore.getThemeInput('animation-speed')?.value as number || 5) + const animationSpeed = computed(() => themeStore.getThemeInput('animation-speed')?.value as number || 0.7) const pxratio = computed(() => themeStore.getThemeInput('pxratio')?.value as number || 0.8) const scale = computed(() => themeStore.getThemeInput('scale')?.value as number || 3.0) const contour = computed(() => themeStore.getThemeInput('contour')?.value as number || 32.0) diff --git a/src/store/app.ts b/src/store/app.ts index 572e529..9469201 100644 --- a/src/store/app.ts +++ b/src/store/app.ts @@ -18,8 +18,8 @@ export const useAppStore = defineStore('app', () => { const defaultColor = ref('#6BBBED') const zoom = ref(1) const hotkeysEnabled = ref(false) - const showTime = ref(false) - const timeFormat = ref('HH:mm') + const showTime = ref(true) + const timeFormat = ref('short') const bodyClass = reactive>({ blur: true, 'no-transition': false, @@ -50,6 +50,7 @@ export const useAppStore = defineStore('app', () => { else if (key === 'username') session.username.value = value else if (key === 'defaultColor') defaultColor.value = value else if (key === 'zoom') zoom.value = parseFloat(value) + localStorage.setItem(key, value) } @@ -71,8 +72,8 @@ export const useAppStore = defineStore('app', () => { zoom.value = settings.zoom || 1 hotkeysEnabled.value = settings.hotkeysEnabled ?? false - showTime.value = settings.showTime ?? false - timeFormat.value = settings.timeFormat ?? 'HH:mm' + showTime.value = settings.showTime ?? true + timeFormat.value = settings.timeFormat ?? 'short' } catch { setUpSettings() } diff --git a/src/store/theme.ts b/src/store/theme.ts index bb2069f..51314c3 100644 --- a/src/store/theme.ts +++ b/src/store/theme.ts @@ -3,7 +3,7 @@ import { computed, ref } from 'vue' import type { AppTheme, AppSettings, AppInputTheme, AppInputThemeValue } from '@/models/app' -import { randomizeSettingsTheme as buildRandomThemeSettings } from '@/utils/themeInputs' +import { randomizeSettingsTheme as buildRandomThemeSettings } from '@/utils/theme-inputs' import { setCSSVariable } from '@/utils/dom' import { AppThemes, defaultTheme } from '@/utils/constant' diff --git a/src/style/atom.styl b/src/style/atom.styl index d5bbe7c..599a816 100644 --- a/src/style/atom.styl +++ b/src/style/atom.styl @@ -61,3 +61,6 @@ gap 12px .title grid-column 1 / 3 + +.caption + opacity 0.6 \ No newline at end of file diff --git a/src/utils/constant.ts b/src/utils/constant.ts index 8a32aaa..b84f0ca 100644 --- a/src/utils/constant.ts +++ b/src/utils/constant.ts @@ -8,214 +8,183 @@ import { buildInputSlider, buildInputColor, buildInvertCheckbox, -} from './themeInputs' +} from './theme-inputs' +import { CONTOUR_SETTINGS } from '../components/themes/contour/constants.ts' const background = '#22233D' -export const defaultTheme: AppTheme = { - name: 'Random', - component: 'random', - color: { - background: '#19102e' - }, - settings: [ - pxratio(), - buildInputSlider({ min: 0.2 }), - buildInputSlider({ name: 'symmetry', min: 0.01, max: 2, value: 0.1 }), - buildInputSlider({ name: 'thickness', min: 0.01, max: 0.7, value: 0.1 }), - hueSlider(), - brightnessSlider(), - buildInvertCheckbox(), - randomButton, - resetButton - ] -} +export const defaultTheme: AppTheme = CONTOUR_SETTINGS export const AppThemes: AppTheme[] = [ - defaultTheme, + CONTOUR_SETTINGS, { - name: 'Sphere', - component: 'sphere', - color: { - background - }, + name: 'Zappy', + component: 'zappy', + color: { background: '#000010' }, settings: [ pxratio(), - buildInvertCheckbox(), - hueSlider(), - brightnessSlider(), - buildInputSlider({ max: 10 }), - buildInputSlider({ value: 2, max: 3, min: 1.4, name: 'size' }), + buildInputSlider({ value: 5, min: 0, max: 15, step: 0.1 }), + buildInputSlider({ name: 'zoom', value: 0.2, min: 0.05, max: 0.6, step: 0.01 }), + buildInputSlider({ name: 'color-shift', value: 0, min: 0, max: 6.28, step: 0.05 }), randomButton, resetButton ] }, { - name: 'Planet', - component: 'planet', + name: 'Rings3D', + component: 'rings3d', color: { - background + background: '#0a0015' }, settings: [ pxratio(), - buildInputSlider(), - { - name: 'position', - type: 'slider', - label: 'input.position', - value: 3.9, - icon: 'position', - options: { - step: 0.01, - max: 20, - min: 2.8, - changeOnUpdate: true - } - }, + buildInputSlider({ value: 5, min: 0, max: 15, step: 0.1 }), + buildInputSlider({ name: 'tube-size', value: 0.2, min: 0.02, max: 0.6, step: 0.01 }), + buildInputSlider({ name: 'bubble-size', value: 1.85, min: 0.5, max: 3.5, step: 0.05 }), + buildInputSlider({ name: 'fog-density', value: 0.8, min: 0.2, max: 1.0, step: 0.01 }), + buildInputSlider({ name: 'spectrum-speed', value: 6.0, min: 1.0, max: 12.0, step: 0.5 }), + buildInputColor({ name: 'color-glow', value: '#AAFFCE' }), + buildInputColor({ name: 'color-fog', value: '#9940B3' }), randomButton, resetButton ] }, { - name: 'Destruction', - component: 'destruction', + name: 'Plasma', + component: 'plasma', color: { - background: '#13122E' + background }, settings: [ pxratio(), - buildInputSlider({ name: 'position', value: 0.1, icon: 'position', max: 1, min: 0.01 }), - buildInputSlider({ name: 'perspective', value: 0.1, icon: 'perspective', max: 1, min: 0.01 }), - buildInputSlider({ value: 10, max: 15 }), + hueSlider(), + buildInputSlider({ value: 10, max: 25 }), randomButton, resetButton ] }, { - name: 'Rings', - component: 'rings', + name: 'Flow', + component: 'flow', color: { background }, settings: [ pxratio(), - buildInputSlider(), - buildInputSlider({ name: 'hue', value: 0, icon: 'hue', max: 0.5, min: -0.5 }), - buildInputSlider({ name: 'zoom', value: 32, icon: 'zoom', max: 100, min: 2 }), + hueSlider(), + brightnessSlider(), + buildInvertCheckbox(), + buildInputSlider({ value: 10, max: 15 }), + buildInputSlider({ value: 1, max: 2.8, min: 0.2, name: 'size' }), randomButton, resetButton ] }, { - name: 'Tenderness', - component: 'tenderness', + name: 'Tunnel', + component: 'tunnel', color: { - background + background: '#000014' }, settings: [ pxratio(), - buildInputSlider({ value: 10, max: 15 }), + buildInputSlider({ value: 5, max: 15 }), + buildInputSlider({ name: 'step', value: 0.07, min: 0.01, max: 0.3, step: 0.01 }), + buildInputSlider({ name: 'frequency', value: 9, min: 1, max: 20, step: 0.5 }), + buildInputSlider({ name: 'amplitude', value: 1, min: 0, max: 3, step: 0.1 }), + buildInputSlider({ name: 'brightness',value: 0.01, min: 0.001,max: 0.05, step: 0.001 }), randomButton, resetButton ] }, { - name: 'Plasma', - component: 'plasma', + name: 'Planet', + component: 'planet', color: { background }, settings: [ pxratio(), - hueSlider(), - buildInputSlider({ value: 10, max: 25 }), + buildInputSlider(), + buildInputSlider({ name: 'position', value: 3.9, icon: 'position', step: 0.01, max: 20, min: 2.8 }), randomButton, resetButton ] }, { - name: 'Flow', - component: 'flow', + name: 'Destruction', + component: 'destruction', color: { - background + background: '#13122E' }, settings: [ pxratio(), - hueSlider(), - brightnessSlider(), - buildInvertCheckbox(), + buildInputSlider({ name: 'position', value: 0.1, icon: 'position', max: 1, min: 0.01 }), + buildInputSlider({ name: 'perspective', value: 0.1, icon: 'perspective', max: 1, min: 0.01 }), buildInputSlider({ value: 10, max: 15 }), - buildInputSlider({ value: 1, max: 2.8, min: 0.2, name: 'size' }), randomButton, resetButton ] }, { - name: 'Tunnel', - component: 'tunnel', + name: 'Rings', + component: 'rings', color: { - background: '#000014' + background }, settings: [ pxratio(), - buildInputSlider({ value: 5, max: 15 }), - buildInputSlider({ name: 'step', value: 0.07, min: 0.01, max: 0.3, step: 0.01 }), - buildInputSlider({ name: 'frequency', value: 9, min: 1, max: 20, step: 0.5 }), - buildInputSlider({ name: 'amplitude', value: 1, min: 0, max: 3, step: 0.1 }), - buildInputSlider({ name: 'brightness',value: 0.01, min: 0.001,max: 0.05, step: 0.001 }), + buildInputSlider(), + buildInputSlider({ name: 'hue', value: 0, icon: 'hue', max: 0.5, min: -0.5 }), + buildInputSlider({ name: 'zoom', value: 32, icon: 'zoom', max: 100, min: 2 }), randomButton, resetButton ] }, { - name: 'Rings3D', - component: 'rings3d', + name: 'Tenderness', + component: 'tenderness', color: { - background: '#0a0015' + background }, settings: [ pxratio(), - buildInputSlider({ value: 5, min: 0, max: 15, step: 0.1 }), - buildInputSlider({ name: 'tube-size', value: 0.2, min: 0.02, max: 0.6, step: 0.01 }), - buildInputSlider({ name: 'bubble-size', value: 1.85, min: 0.5, max: 3.5, step: 0.05 }), - buildInputSlider({ name: 'fog-density', value: 0.8, min: 0.2, max: 1.0, step: 0.01 }), - buildInputSlider({ name: 'spectrum-speed', value: 6.0, min: 1.0, max: 12.0, step: 0.5 }), - buildInputColor({ name: 'color-glow', value: '#AAFFCE' }), - buildInputColor({ name: 'color-fog', value: '#9940B3' }), + buildInputSlider({ value: 10, max: 15 }), randomButton, resetButton ] }, { - name: 'Zappy', - component: 'zappy', - color: { background: '#000010' }, + name: 'Sphere', + component: 'sphere', + color: { + background + }, settings: [ pxratio(), - buildInputSlider({ value: 5, min: 0, max: 15, step: 0.1 }), - buildInputSlider({ name: 'zoom', value: 0.2, min: 0.05, max: 0.6, step: 0.01 }), - buildInputSlider({ name: 'color-shift', value: 0, min: 0, max: 6.28, step: 0.05 }), + buildInvertCheckbox(), + hueSlider(), + brightnessSlider(), + buildInputSlider({ max: 10 }), + buildInputSlider({ value: 2, max: 3, min: 1.4, name: 'size' }), randomButton, resetButton ] }, { - name: 'Contour', - component: 'contour', + name: 'Random', + component: 'random', color: { - background: '#0a001a' + background: '#19102e' }, settings: [ pxratio(), - buildInputSlider({ value: 3, min: 0, max: 15, step: 0.1 }), - buildInputSlider({ name: 'scale', value: 3, min: 1, max: 8, step: 0.1 }), - buildInputSlider({ name: 'contour', value: 32, min: 2, max: 64, step: 1 }), - buildInputSlider({ name: 'width', value: 0.15, min: 0.01, max: 1, step: 0.01 }), - buildInputSlider({ name: 'max-line', value: 0.3, min: 0.01, max: 1, step: 0.01 }), - - buildInputColor({ name: 'color-active', value: '#FF00FF' }), - buildInputColor({ name: 'color-second', value: '#00FFFF' }), - buildInputColor({ name: 'color-bg', value: '#000000' }), + buildInputSlider({ min: 0.2 }), + buildInputSlider({ name: 'symmetry', min: 0.01, max: 2, value: 0.1 }), + buildInputSlider({ name: 'thickness', min: 0.01, max: 0.7, value: 0.1 }), + hueSlider(), + brightnessSlider(), + buildInvertCheckbox(), randomButton, resetButton ]