import { writable } from "svelte/store"; interface LoadingState { isLoading: boolean; progress: number; } function createLoadingStore() { const { subscribe, set, update } = writable({ isLoading: true, progress: 0, }); let progressInterval: number | null = null; return { subscribe, setProgress: (progress: number) => { update((state) => ({ ...state, progress: Math.min(100, Math.max(0, progress)), })); }, startLoading: () => { set({ isLoading: true, progress: 0 }); let currentProgress = 0; progressInterval = window.setInterval(() => { currentProgress += Math.random() * 15; if (currentProgress >= 90) { if (progressInterval) { clearInterval(progressInterval); progressInterval = null; } currentProgress = 90; } update((state) => ({ ...state, progress: currentProgress })); }, 200); }, finishLoading: () => { if (progressInterval) { clearInterval(progressInterval); progressInterval = null; } update((state) => ({ ...state, progress: 100 })); setTimeout(() => { set({ isLoading: false, progress: 100 }); }, 300); }, }; } export const loadingStore = createLoadingStore();