@dvcol/neo-svelte
Version:
Neomorphic ui library for svelte 5
41 lines (40 loc) • 1.48 kB
JavaScript
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);