mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-30 16:33:19 -04:00
3579b6f8f3
+ refactor hooks
28 lines
763 B
React
28 lines
763 B
React
import { useState } from 'react';
|
|
import { settings } from './repl/themes.mjs';
|
|
import { useEffect } from 'react';
|
|
|
|
function useTheme() {
|
|
const [theme, setTheme] = useState(localStorage.getItem('strudel-theme'));
|
|
useEvent('strudel-theme', (e) => setTheme(e.detail));
|
|
const themeSettings = settings[theme || 'strudelTheme'];
|
|
return {
|
|
theme,
|
|
setTheme,
|
|
settings: themeSettings,
|
|
isDark: !themeSettings.light,
|
|
isLight: !!themeSettings.light,
|
|
};
|
|
}
|
|
// TODO: dedupe
|
|
function useEvent(name, onTrigger, useCapture = false) {
|
|
useEffect(() => {
|
|
document.addEventListener(name, onTrigger, useCapture);
|
|
return () => {
|
|
document.removeEventListener(name, onTrigger, useCapture);
|
|
};
|
|
}, [onTrigger]);
|
|
}
|
|
|
|
export default useTheme;
|