import { writable } from "svelte/store"; export type ViewMode = "code" | "preview" | "about"; export interface UIState { viewMode: ViewMode; previousViewMode: "code" | "preview"; error: string | null; isAnimating: boolean; } function createUIStore() { const { subscribe, update, set } = writable({ viewMode: "code", previousViewMode: "code", error: null, isAnimating: false, }); return { subscribe, setViewMode: (viewMode: ViewMode) => update((state) => { const previousViewMode = state.viewMode === "about" ? state.previousViewMode : state.viewMode === "code" || state.viewMode === "preview" ? state.viewMode : state.previousViewMode; return { ...state, viewMode, previousViewMode }; }), setError: (error: string | null) => update((state) => ({ ...state, error })), setAnimating: (isAnimating: boolean) => update((state) => ({ ...state, isAnimating })), toggleViewMode: () => update((state) => ({ ...state, viewMode: state.viewMode === "code" ? "preview" : "code", previousViewMode: state.viewMode === "code" ? "preview" : "code", })), showAbout: () => update((state) => ({ ...state, previousViewMode: state.viewMode === "code" || state.viewMode === "preview" ? state.viewMode : state.previousViewMode, viewMode: "about", })), hideAbout: () => update((state) => ({ ...state, viewMode: state.previousViewMode, })), reset: () => set({ viewMode: "code", previousViewMode: "code", error: null, isAnimating: false, }), }; } export const uiStore = createUIStore();