Spaces:
Running
Running
File size: 1,818 Bytes
794cf6c db9635c 794cf6c db9635c 794cf6c db9635c 794cf6c db9635c 794cf6c db9635c 794cf6c db9635c 794cf6c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
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<UIState>({
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();
|