Files
quiz-test/chunk-T6TXUSUP.js
2025-12-29 22:23:30 +02:00

2 lines
3.8 KiB
JavaScript

import{b as c}from"./chunk-RC3JXGN6.js";import{a as d}from"./chunk-52JZ5I3Y.js";import{w as l}from"./chunk-COFYR5MX.js";import{Fc as s,_ as i,da as o,ta as r}from"./chunk-2MUIW2M6.js";var g=class a{loadingSignal=r(!1);loadingMessageSignal=r("");loadingCountSignal=r(0);isLoading=this.loadingSignal.asReadonly();loadingMessage=this.loadingMessageSignal.asReadonly();constructor(){}start(e="Loading..."){this.loadingCountSignal.update(t=>t+1),this.loadingMessageSignal.set(e),this.loadingSignal.set(!0)}stop(){this.loadingCountSignal.update(e=>{let t=Math.max(0,e-1);return t===0&&(this.loadingSignal.set(!1),this.loadingMessageSignal.set("")),t})}stopAll(){this.loadingCountSignal.set(0),this.loadingSignal.set(!1),this.loadingMessageSignal.set("")}getLoadingState(){return this.loadingSignal()}static \u0275fac=function(t){return new(t||a)};static \u0275prov=i({token:a,factory:a.\u0275fac,providedIn:"root"})};var m=class a{THEME_KEY="app-theme";storageService=o(c);themeSignal=r(this.getInitialTheme());theme=this.themeSignal.asReadonly();constructor(){this.applyTheme(this.themeSignal()),s(()=>{let e=this.themeSignal();this.applyTheme(e),this.storageService.setTheme(e)}),this.watchSystemThemePreference()}getInitialTheme(){let e=this.storageService.getTheme();return e||(typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")}applyTheme(e){if(typeof document<"u"){let t=document.body;e==="dark"?(t.classList.add("dark-theme"),t.classList.remove("light-theme")):(t.classList.add("light-theme"),t.classList.remove("dark-theme")),document.documentElement.style.colorScheme=e}}watchSystemThemePreference(){typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",t=>{this.storageService.getTheme()||this.setTheme(t.matches?"dark":"light")})}setTheme(e){this.themeSignal.set(e)}toggleTheme(){let e=this.themeSignal();this.setTheme(e==="light"?"dark":"light")}isDarkMode(){return this.themeSignal()==="dark"}resetToSystemPreference(){if(localStorage.removeItem(this.THEME_KEY),typeof window<"u"&&window.matchMedia){let e=window.matchMedia("(prefers-color-scheme: dark)").matches;this.setTheme(e?"dark":"light")}else this.setTheme("light")}static \u0275fac=function(t){return new(t||a)};static \u0275prov=i({token:a,factory:a.\u0275fac,providedIn:"root"})};var u=class a{toastService=o(d);router=o(l);handleError(e){console.error("Global error caught:",e),this.logErrorToExternalService(e);let t="An unexpected error occurred. Please try again.",n=!1;if(e instanceof Error&&(e.message.includes("ChunkLoadError")||e.message.includes("Loading chunk")?t="Failed to load application resources. Please refresh the page.":e.message.includes("Network")?t="Network error. Please check your internet connection.":e.name==="TypeError"&&(t="A technical error occurred. Our team has been notified.",n=!0)),e?.status)switch(e.status){case 0:t="Cannot connect to server. Please check your internet connection.";break;case 401:t="Session expired. Please login again.",this.router.navigate(["/login"]);return;case 403:t="You do not have permission to perform this action.";break;case 404:t="The requested resource was not found.";break;case 500:case 502:case 503:t="Server error. Please try again later.",n=!0;break;default:t=`An error occurred (${e.status}). Please try again.`}this.toastService.error(t,8e3),n&&!this.router.url.includes("/error")&&this.router.navigate(["/error"],{queryParams:{message:t,timestamp:Date.now()}})}logErrorToExternalService(e){let t={message:e?.message||"Unknown error",stack:e?.stack,timestamp:new Date().toISOString(),url:window.location.href,userAgent:navigator.userAgent};console.log("Error logged:",t)}static \u0275fac=function(t){return new(t||a)};static \u0275prov=i({token:a,factory:a.\u0275fac,providedIn:"root"})};export{g as a,m as b,u as c};