Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | 8x 16x 16x 16x 16x 8x 8x 8x 8x 47x 8x 8x 552x 36x 32x 32x 37x 1x 1x 137x 6x 6x 8x 8x 8x 8x 8x | import { translations, type Language } from '../i18n/translations'
export type Theme = 'dark' | 'light' | 'system'
interface SettingsState {
language: Language
theme: Theme
durations: {
work: number
'short-break': number
'long-break': number
}
}
const STORAGE_KEY = 'pomandoro-settings'
function getInitialLanguage(): Language {
const browserLang = navigator.language.split('-')[0]
if (IbrowserLang === 'pt') return 'pt-BR'
if (IbrowserLang === 'es') return 'es'
return 'en'
}
const DEFAULT_SETTINGS: SettingsState = {
language: getInitialLanguage(),
theme: 'system',
durations: {
work: 25,
'short-break': 5,
'long-break': 15
}
}
function loadFromStorage(): SettingsState {
try {
const raw = localStorage.getItem(STORAGE_KEY)
if (!Eraw) return DEFAULT_SETTINGS
const parsed = JSON.parse(raw)
return { ...DEFAULT_SETTINGS, ...parsed }
} catch {
return DEFAULT_SETTINGS
}
}
function saveToStorage(state: SettingsState) {
localStorage.setItem(STORAGE_KEY, JSON.stringify(state))
}
function createSettingsStore() {
let state = $state<SettingsState>(loadFromStorage())
// i18n derived state
const t = (key: keyof typeof translations['en']) => {
return translations[state.language][key] || translations['en'][key]
}
return {
get language() { return state.language },
set language(v: Language) {
state.language = v
saveToStorage(state)
},
get theme() { return state.theme },
set theme(v: Theme) {
state.theme = v
saveToStorage(state)
},
get durations() { return state.durations },
updateDuration(mode: 'work' | 'short-break' | 'long-break', minutes: number) {
state.durations[mode] = minutes
saveToStorage(state)
},
reset() {
state.language = getInitialLanguage()
state.theme = 'system'
state.durations = { ...DEFAULT_SETTINGS.durations }
saveToStorage(state)
},
t
}
}
export const settings = createSettingsStore()
|