import {
ApplicationConfig,
provideZoneChangeDetection,
provideAppInitializer,
inject,
isDevMode,
} from '@angular/core';
import { withPreloading, provideRouter, PreloadAllModules } from '@angular/router';
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
import {
Title,
Meta,
provideClientHydration,
withEventReplay,
withHttpTransferCacheOptions,
} from '@angular/platform-browser';
import { CdnService, MarkdownService } from './service';
import { provideHttpClient, withFetch } from '@angular/common/http';
import { provideServiceWorker } from '@angular/service-worker';
import { appRoutes } from './app.routes';
import { RouterService } from './modules/web/services/router';
import { CookieService } from './modules/web/services/cookie';
import { SettingsService } from './modules/web/services/settings';
import { LocaleService } from './modules/web/services/locale';
import { MediaQueryService } from './modules/web/services/media-query';
import { Boot as WebBoot } from './modules/web/boot';
import { ThemeService } from './modules/material/services/theme';
import { NotifyService } from './modules/material/services/notify/notify';
import { Boot as MaterialBoot } from './modules/material/boot';
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection(),
Title,
Meta,
// Web services (previously from CorifeusModule)
RouterService,
CookieService,
SettingsService,
LocaleService,
MediaQueryService,
WebBoot,
// Material services (previously from CorifeusMaterialModule)
ThemeService,
NotifyService,
MaterialBoot,
{ provide: 'Window', useFactory: () => typeof window !== 'undefined' ? window : {} as Window },
// App-level services
CdnService,
MarkdownService,
// Angular platform providers
provideAnimationsAsync(),
provideHttpClient(withFetch()),
provideRouter(appRoutes, withPreloading(PreloadAllModules)),
provideServiceWorker('ngsw-worker.js', {
enabled: !isDevMode(),
registrationStrategy: 'registerWhenStable:30000',
}),
provideClientHydration(
withEventReplay(),
withHttpTransferCacheOptions({
includePostRequests: false,
filter: (req) =>
req.url.startsWith('https://cdn.corifeus.com') ||
req.url.startsWith('https://network.corifeus.com'),
}),
),
/* Boot side-effects run before the root component renders.
Order matters: web registers 'core' settings + boots locale,
material registers 'material' settings + translations + theme. */
provideAppInitializer(() => {
inject(WebBoot).boot();
}),
provideAppInitializer(() => {
inject(MaterialBoot); // constructor performs the work
}),
],
};