import { NgModule, isDevMode } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' import { BrowserAnimationsModule } from '@angular/platform-browser/animations' import { HTTP_INTERCEPTORS, provideHttpClient, withFetch, withInterceptorsFromDi } from '@angular/common/http' import { CommonModule } from '@angular/common' import { AppRoutingModule } from './app-routing.module' import { AppComponent } from './app.component' import { FormsModule, ReactiveFormsModule } from '@angular/forms' import { WafrnAuthInterceptor } from './interceptors/wafrn-auth.interceptor' import { ServiceWorkerModule } from '@angular/service-worker' import { MAT_RIPPLE_GLOBAL_OPTIONS, MatNativeDateModule, RippleGlobalOptions } from '@angular/material/core' import { FontAwesomeModule } from '@fortawesome/angular-fontawesome' import { MatSnackBarModule } from '@angular/material/snack-bar' import { TranslateHttpLoader } from '@ngx-translate/http-loader' import { TranslateLoader, TranslateModule } from '@ngx-translate/core' import { HttpClient } from '@angular/common/http' import { HotkeyManagerComponent } from './components/hotkey-manager/hotkey-manager.component' import buildData from '../buildData.json' import { ThemeManagerComponent } from './components/theme-manager/theme-manager.component' const globalRippleConfig: RippleGlobalOptions = { disabled: true, animation: { enterDuration: 300, exitDuration: 0 } } @NgModule({ declarations: [AppComponent], bootstrap: [AppComponent], exports: [], imports: [ BrowserModule, BrowserAnimationsModule, CommonModule, FormsModule, ReactiveFormsModule, AppRoutingModule, MatNativeDateModule, ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode(), // Register the ServiceWorker as soon as the application is stable // or after 5 seconds (whichever comes first). registrationStrategy: 'registerWhenStable:5000' }), FontAwesomeModule, MatSnackBarModule, TranslateModule.forRoot({ loader: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] } }), ThemeManagerComponent, HotkeyManagerComponent ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: WafrnAuthInterceptor, multi: true }, { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: globalRippleConfig }, provideHttpClient(withInterceptorsFromDi(), withFetch()) ] }) export class AppModule {} export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader { return new TranslateHttpLoader(http, '/assets/i18n/', `.json?v=${buildData.git.fullHash}`) }