@furystack/shades-common-components
Version:
Common UI components for FuryStack Shades
26 lines • 1.06 kB
JavaScript
import { defineService } from '@furystack/inject';
import { EventHub } from '@furystack/utils';
import { cssVariableTheme, useThemeCssVariables } from './css-variable-theme.js';
export const ThemeProviderService = defineService({
name: '@furystack/shades-common-components/ThemeProviderService',
lifetime: 'singleton',
factory: ({ onDispose }) => {
const hub = new EventHub();
let assignedTheme = cssVariableTheme;
const setAssignedTheme = (theme, root) => {
assignedTheme = theme;
useThemeCssVariables(theme, root);
hub.emit('themeChanged', theme);
};
onDispose(() => {
// eslint-disable-next-line furystack/prefer-using-wrapper -- Disposal is deferred to the injector's onDispose hook.
hub[Symbol.dispose]?.();
});
return Object.assign(hub, {
theme: cssVariableTheme,
getAssignedTheme: () => assignedTheme,
setAssignedTheme,
});
},
});
//# sourceMappingURL=theme-provider-service.js.map