elk/composables/settings/definition.ts

95 lines
2.5 KiB
TypeScript
Raw Normal View History

2023-01-15 12:23:47 +00:00
import { DEFAULT_FONT_SIZE } from '~/constants'
2023-01-22 20:18:03 +00:00
export type FontSize = `${number}px`
// Temporary type for backward compatibility
export type OldFontSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
export type ColorMode = 'light' | 'dark' | 'system'
2023-01-15 14:19:22 +00:00
export interface PreferencesSettings {
hideAltIndicatorOnPosts: boolean
hideBoostCount: boolean
hideReplyCount: boolean
hideFavoriteCount: boolean
hideFollowerCount: boolean
hideTranslation: boolean
hideUsernameEmojis: boolean
hideAccountHoverCard: boolean
hideNews: boolean
grayscaleMode: boolean
enableAutoplay: boolean
optimizeForLowPerformanceDevice: boolean
2023-02-15 10:34:23 +00:00
enableDataSaving: boolean
enablePinchToZoom: boolean
useStarFavoriteIcon: boolean
zenMode: boolean
2023-01-15 14:19:22 +00:00
experimentalVirtualScroller: boolean
experimentalGitHubCards: boolean
experimentalUserPicker: boolean
experimentalEmbeddedMedia: boolean
}
export interface UserSettings {
2023-01-15 14:19:22 +00:00
preferences: Partial<PreferencesSettings>
colorMode?: ColorMode
fontSize: FontSize
language: string
disabledTranslationLanguages: string[]
2023-01-16 10:26:19 +00:00
themeColors?: ThemeColors
}
export interface ThemeColors {
'--theme-color-name': string
'--c-primary': string
'--c-primary-active': string
'--c-primary-light': string
'--c-primary-fade': string
'--c-dark-primary': string
'--c-dark-primary-active': string
'--c-dark-primary-light': string
'--c-dark-primary-fade': string
'--rgb-primary': string
'--rgb-dark-primary': string
}
2023-01-15 12:23:47 +00:00
export function getDefaultLanguage(languages: string[]) {
2024-02-24 16:46:14 +00:00
if (import.meta.server)
2023-01-15 12:23:47 +00:00
return 'en-US'
return matchLanguages(languages, navigator.languages) || 'en-US'
}
2023-01-15 14:19:22 +00:00
export const DEFAULT__PREFERENCES_SETTINGS: PreferencesSettings = {
hideAltIndicatorOnPosts: false,
hideBoostCount: false,
hideReplyCount: false,
hideFavoriteCount: false,
hideFollowerCount: false,
hideTranslation: false,
hideUsernameEmojis: false,
hideAccountHoverCard: false,
hideNews: false,
grayscaleMode: false,
enableAutoplay: true,
optimizeForLowPerformanceDevice: false,
2023-02-15 10:34:23 +00:00
enableDataSaving: false,
enablePinchToZoom: false,
useStarFavoriteIcon: false,
zenMode: false,
experimentalVirtualScroller: true,
experimentalGitHubCards: true,
experimentalUserPicker: true,
experimentalEmbeddedMedia: false,
}
export function getDefaultUserSettings(locales: string[]): UserSettings {
return {
language: getDefaultLanguage(locales),
fontSize: DEFAULT_FONT_SIZE,
disabledTranslationLanguages: [],
preferences: DEFAULT__PREFERENCES_SETTINGS,
}
}