From 9c98a399632b5cbe4be11350d72b84cb8fcbace9 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 1 Apr 2026 11:02:59 +0000 Subject: feat(ui): add april fools executive mode --- src/stores/aprilFools.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/stores/aprilFools.ts (limited to 'src/stores') diff --git a/src/stores/aprilFools.ts b/src/stores/aprilFools.ts new file mode 100644 index 00000000..d86829c1 --- /dev/null +++ b/src/stores/aprilFools.ts @@ -0,0 +1,37 @@ +import { browser } from "$app/environment"; +import { writable } from "svelte/store"; + +const storageKey = (date = new Date()) => + `aprilFoolsExecutiveMode:${date.getFullYear()}`; + +export const isAprilFoolsDay = (date = new Date()) => + date.getMonth() === 3 && date.getDate() === 1; + +let hydrated = !browser; + +const store = writable(false); + +export const hydrateAprilFools = () => { + if (!browser || hydrated) return; + + const storedValue = localStorage.getItem(storageKey()); + + store.set(storedValue === null ? isAprilFoolsDay() : storedValue === "true"); + hydrated = true; +}; + +store.subscribe((value) => { + if (!browser || !hydrated) return; + + localStorage.setItem(storageKey(), String(value)); +}); + +export const aprilFoolsVisible = () => isAprilFoolsDay(); + +const aprilFools = { + subscribe: store.subscribe, + set: store.set, + toggle: () => store.update((value) => !value), +}; + +export default aprilFools; -- cgit v1.2.3