Files
manolia-alpha/node_modules/buetify/lib/composables/theme/provideTheme.js
Robin COuret e0e50af706 init component
2026-02-16 17:28:37 +01:00

49 lines
1.2 KiB
JavaScript
Executable File

import { getItem, setItem } from 'fp-ts-local-storage';
import { constant, constVoid } from 'fp-ts/lib/function';
import { getOrElse, none, some } from 'fp-ts/lib/Option';
import { provide, shallowRef, watch } from 'vue';
export const DEFAULT_THEME_INJECTION = {
currentTheme: shallowRef(none),
isThemeable: shallowRef(false),
setTheme: constVoid
};
export const THEME_INJECTION_SYMBOL = Symbol('theme');
const persistentTheme = getOrElse(constant('dark'))(getItem('theme')());
export const ProvideThemePropDefinitions = {
isThemeable: {
type: Boolean,
default: true
},
persistTheme: {
type: Boolean,
default: true
}
};
export function provideTheme(props) {
const isThemeable = shallowRef(props.isThemeable);
watch(() => props.isThemeable, themeable => {
isThemeable.value = themeable;
});
const currentTheme = shallowRef(some(persistentTheme));
function setTheme(newTheme) {
currentTheme.value = some(newTheme);
if (props.persistTheme) {
setItem('theme', newTheme)();
}
}
const injection = {
isThemeable,
currentTheme,
setTheme
};
provide(THEME_INJECTION_SYMBOL, injection);
return {
setTheme,
currentTheme,
isThemeable
};
}
//# sourceMappingURL=provideTheme.js.map