From f438cf751b59414903932694a87620f56c305d4c Mon Sep 17 00:00:00 2001 From: ocavue Date: Fri, 13 Sep 2024 01:33:31 +1000 Subject: [PATCH] feat: export theme getter and setter --- lib/handle-toggle-click.ts | 6 ++++-- lib/index.ts | 1 + lib/theme.ts | 13 +++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 lib/theme.ts diff --git a/lib/handle-toggle-click.ts b/lib/handle-toggle-click.ts index ee0f640..417a7cc 100644 --- a/lib/handle-toggle-click.ts +++ b/lib/handle-toggle-click.ts @@ -1,6 +1,8 @@ +import { getTheme, setTheme } from './theme' + function toggleTheme() { - const theme = window.themeToggle?.getTheme?.() - window.themeToggle?.setTheme?.(theme === 'light' ? 'dark' : 'light') + const theme = getTheme() + setTheme(theme === 'light' ? 'dark' : 'light') } async function startCircleAnimation( diff --git a/lib/index.ts b/lib/index.ts index b498dbb..6d9d762 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -1,2 +1,3 @@ export { handleToggleClick } from './handle-toggle-click' +export { getTheme, setTheme } from './theme' export { default as ThemeScript } from './theme-script.astro' diff --git a/lib/theme.ts b/lib/theme.ts new file mode 100644 index 0000000..faddccd --- /dev/null +++ b/lib/theme.ts @@ -0,0 +1,13 @@ +export function getTheme(): 'light' | 'dark' { + if (typeof window === 'undefined') { + return 'light' + } + return window.themeToggle?.getTheme?.() || 'light' +} + +export function setTheme(theme: 'light' | 'dark') { + if (typeof window === 'undefined') { + return + } + window.themeToggle?.setTheme?.(theme) +}