UNPKG

@dvcol/neo-svelte

Version:

Neomorphic ui library for svelte 5

41 lines (40 loc) 1.48 kB
import {} from 'svelte'; /** * The active theme (`dark` or `light`) */ export const NeoTheme = { Light: 'light', Dark: 'dark', }; /** * The light source to simulate shadows */ export const NeoSource = { TopLeft: 'top-left', TopRight: 'top-right', BottomRight: 'bottom-right', BottomLeft: 'bottom-left', }; export const NeoThemeRoot = 'neo-theme-root'; export const NeoThemeStorageKey = { Reset: 'neo-reset', Theme: 'neo-theme', Source: 'neo-source', Remember: 'neo-remember', Transition: 'neo-transition', }; export const getSavedTheme = () => localStorage?.getItem(NeoThemeStorageKey.Theme); export const getPreferTheme = () => (window.matchMedia('(prefers-color-scheme: dark)').matches ? NeoTheme.Dark : NeoTheme.Light); export const getTheme = () => getSavedTheme() ?? getPreferTheme(); export const getSavedSource = () => localStorage?.getItem(NeoThemeStorageKey.Source); export const getSource = () => getSavedSource() ?? NeoSource.TopLeft; const getBoolean = (str, fallback = false) => { // If saved reset is always truthy as it is a string if (!str) return fallback; return str === 'true'; }; export const getSavedReset = () => localStorage?.getItem(NeoThemeStorageKey.Reset); export const getReset = () => getBoolean(getSavedReset(), true); export const getSavedRemember = () => localStorage?.getItem(NeoThemeStorageKey.Remember); export const getRemember = () => getBoolean(getSavedRemember(), true);