2023-02-22 18:53:08 +01:00
|
|
|
import { browser } from '$app/environment';
|
2024-01-07 01:15:25 +01:00
|
|
|
import { Theme } from '$lib/constants';
|
2023-02-22 18:53:08 +01:00
|
|
|
import { persisted } from 'svelte-local-storage-store';
|
2024-01-07 01:15:25 +01:00
|
|
|
import { get } from 'svelte/store';
|
2023-02-22 18:53:08 +01:00
|
|
|
|
2024-01-07 01:15:25 +01:00
|
|
|
export interface ThemeSetting {
|
|
|
|
|
value: Theme;
|
|
|
|
|
system: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const handleToggleTheme = () => {
|
|
|
|
|
const theme = get(colorTheme);
|
|
|
|
|
theme.value = theme.value === Theme.DARK ? Theme.LIGHT : Theme.DARK;
|
|
|
|
|
colorTheme.set(theme);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const initTheme = (): ThemeSetting => {
|
|
|
|
|
if (browser) {
|
|
|
|
|
if (!window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
|
|
|
return { value: Theme.LIGHT, system: false };
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return { value: Theme.DARK, system: false };
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const initialTheme = initTheme();
|
2023-02-22 18:53:08 +01:00
|
|
|
|
|
|
|
|
// The 'color-theme' key is also used by app.html to prevent FOUC on page load.
|
2024-01-07 01:15:25 +01:00
|
|
|
export const colorTheme = persisted<ThemeSetting>('color-theme', initialTheme, {
|
2023-07-01 00:50:47 -04:00
|
|
|
serializer: {
|
2024-01-07 01:15:25 +01:00
|
|
|
parse: (text: string): ThemeSetting => {
|
|
|
|
|
const parsedText: ThemeSetting = JSON.parse(text);
|
|
|
|
|
if (Object.values(Theme).includes(parsedText.value)) {
|
|
|
|
|
return parsedText;
|
|
|
|
|
} else {
|
|
|
|
|
return initTheme();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
stringify: (obj) => JSON.stringify(obj),
|
2023-07-01 00:50:47 -04:00
|
|
|
},
|
2023-02-22 18:53:08 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Locale to use for formatting dates, numbers, etc.
|
|
|
|
|
export const locale = persisted<string | undefined>('locale', undefined, {
|
2023-07-01 00:50:47 -04:00
|
|
|
serializer: {
|
|
|
|
|
parse: (text) => text,
|
|
|
|
|
stringify: (obj) => obj ?? '',
|
|
|
|
|
},
|
2023-02-22 18:53:08 +01:00
|
|
|
});
|
2023-05-21 08:26:06 +02:00
|
|
|
|
2023-06-02 15:55:08 +02:00
|
|
|
export interface MapSettings {
|
2023-07-01 00:50:47 -04:00
|
|
|
allowDarkMode: boolean;
|
2023-10-04 15:51:07 +02:00
|
|
|
includeArchived: boolean;
|
2023-07-01 00:50:47 -04:00
|
|
|
onlyFavorites: boolean;
|
|
|
|
|
relativeDate: string;
|
|
|
|
|
dateAfter: string;
|
|
|
|
|
dateBefore: string;
|
2023-06-02 15:55:08 +02:00
|
|
|
}
|
|
|
|
|
|
2023-05-21 08:26:06 +02:00
|
|
|
export const mapSettings = persisted<MapSettings>('map-settings', {
|
2023-07-01 00:50:47 -04:00
|
|
|
allowDarkMode: true,
|
2023-10-04 15:51:07 +02:00
|
|
|
includeArchived: false,
|
2023-07-01 00:50:47 -04:00
|
|
|
onlyFavorites: false,
|
|
|
|
|
relativeDate: '',
|
|
|
|
|
dateAfter: '',
|
|
|
|
|
dateBefore: '',
|
2023-05-21 08:26:06 +02:00
|
|
|
});
|
2023-06-21 16:59:13 +02:00
|
|
|
|
|
|
|
|
export const videoViewerVolume = persisted<number>('video-viewer-volume', 1, {});
|
2023-06-26 18:54:20 +02:00
|
|
|
|
2023-06-29 04:14:16 +02:00
|
|
|
export const isShowDetail = persisted<boolean>('info-opened', false, {});
|
|
|
|
|
|
2023-06-26 18:54:20 +02:00
|
|
|
export interface AlbumViewSettings {
|
2023-07-01 00:50:47 -04:00
|
|
|
sortBy: string;
|
2023-10-10 04:29:04 +02:00
|
|
|
sortDesc: boolean;
|
2023-08-17 15:46:39 +02:00
|
|
|
view: string;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-27 23:09:54 -04:00
|
|
|
export interface SidebarSettings {
|
|
|
|
|
people: boolean;
|
2023-10-29 01:42:51 +00:00
|
|
|
sharing: boolean;
|
2023-09-27 23:09:54 -04:00
|
|
|
}
|
|
|
|
|
|
2023-10-30 09:17:37 -05:00
|
|
|
export const sidebarSettings = persisted<SidebarSettings>('sidebar-settings-1', {
|
2023-09-27 23:09:54 -04:00
|
|
|
people: false,
|
2023-10-29 01:42:51 +00:00
|
|
|
sharing: true,
|
2023-09-27 23:09:54 -04:00
|
|
|
});
|
|
|
|
|
|
2023-08-17 15:46:39 +02:00
|
|
|
export enum AlbumViewMode {
|
|
|
|
|
Cover = 'Cover',
|
|
|
|
|
List = 'List',
|
2023-06-26 18:54:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const albumViewSettings = persisted<AlbumViewSettings>('album-view-settings', {
|
2023-07-01 00:50:47 -04:00
|
|
|
sortBy: 'Most recent photo',
|
2023-10-10 04:29:04 +02:00
|
|
|
sortDesc: true,
|
2023-08-17 15:46:39 +02:00
|
|
|
view: AlbumViewMode.Cover,
|
2023-06-26 18:54:20 +02:00
|
|
|
});
|