import { DEFAULT_FONT_SIZE, DEFAULT_LINE_HEIGHT } from '~/constants' export type FontSize = `${number}px` export type LineHeight = 'narrow' | 'normal' | 'wide' // Temporary type for backward compatibility export type OldFontSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' export type ColorMode = 'light' | 'dark' | 'system' export type NavButtonName = 'home' | 'search' | 'notification' | 'mention' | 'favorite' | 'bookmark' | 'compose' | 'explore' | 'local' | 'federated' | 'list' | 'hashtag' | 'setting' | 'moreMenu' export interface PreferencesSettings { hideAltIndicatorOnPosts: boolean hideGifIndicatorOnPosts: boolean hideBoostCount: boolean hideReplyCount: boolean hideFavoriteCount: boolean hideFollowerCount: boolean hideTranslation: boolean hideUsernameEmojis: boolean hideAccountHoverCard: boolean hideTagHoverCard: boolean hideNews: boolean grayscaleMode: boolean enableAutoplay: boolean optimizeForLowPerformanceDevice: boolean enableDataSaving: boolean enablePinchToZoom: boolean useStarFavoriteIcon: boolean zenMode: boolean experimentalVirtualScroller: boolean experimentalGitHubCards: boolean experimentalUserPicker: boolean experimentalEmbeddedMedia: boolean } export interface UserSettings { preferences: Partial colorMode?: ColorMode fontSize: FontSize lineHeight: LineHeight language: string disabledTranslationLanguages: string[] 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 } export function getDefaultLanguage(languages: string[]) { if (import.meta.server) return 'en-US' return matchLanguages(languages, navigator.languages) || 'en-US' } export const DEFAULT__PREFERENCES_SETTINGS: PreferencesSettings = { hideAltIndicatorOnPosts: false, hideGifIndicatorOnPosts: false, hideBoostCount: false, hideReplyCount: false, hideFavoriteCount: false, hideFollowerCount: false, hideTranslation: false, hideUsernameEmojis: false, hideAccountHoverCard: false, hideTagHoverCard: false, hideNews: false, grayscaleMode: false, enableAutoplay: true, optimizeForLowPerformanceDevice: false, 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, lineHeight: DEFAULT_LINE_HEIGHT, disabledTranslationLanguages: [], preferences: DEFAULT__PREFERENCES_SETTINGS, } }