import { NgModule, ModuleWithProviders } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FlexLayoutModule } from '@angular/flex-layout'; import { MatButtonModule } from '@angular/material/button'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { MatCardModule } from '@angular/material/card'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatIconModule } from '@angular/material/icon'; import { MatMenuModule } from '@angular/material/menu'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatSliderModule } from '@angular/material/slider'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { I18nModule } from '@ucap/ng-i18n'; import { ModuleConfig } from './config/module-config'; import { _MODULE_CONFIG } from './config/token'; import { FileUploadQueueComponent } from './components/file-upload-queue.component'; import { BinaryViewerComponent } from './components/file-viewer/binary-viewer.component'; import { DocumentViewerComponent } from './components/file-viewer/document-viewer.component'; import { ImageViewerComponent } from './components/file-viewer/image-viewer.component'; import { SoundViewerComponent } from './components/file-viewer/sound-viewer.component'; import { VideoViewerComponent } from './components/file-viewer/video-viewer.component'; import { FileViewerComponent } from './components/file-viewer.component'; import { FloatActionButtonComponent } from './components/float-action-button.component'; import { InlineEditInputComponent } from './components/inline-edit-input.component'; import { PickDateComponent } from './components/pick-date.component'; import { PickTimeComponent } from './components/pick-time.component'; import { SplitButtonComponent } from './components/split-button.component'; import { StepInputComponent } from './components/step-input.component'; import { TitleBarComponent } from './components/title-bar.component'; import { AlertDialogComponent } from './dialogs/alert.dialog.component'; import { ConfirmDialogComponent } from './dialogs/confirm.dialog.component'; import { CdkVirtualScrollViewportPatchDirective } from './directives/cdk-virtual-scroll-viewport-patch.directive'; import { ClickDebounceDirective } from './directives/click-debounce.directive'; import { ClickOutsideDirective } from './directives/click-outside.directive'; import { FileUploadForDirective } from './directives/file-upload-for.directive'; import { ImageDirective } from './directives/image.directive'; import { BytesPipe } from './pipes/bytes.pipe'; import { DatePipe } from './pipes/date.pipe'; import { EmptyPipe } from './pipes/empty.pipe'; import { HtmlToLinefeedPipe, LinefeedToHtmlPipe } from './pipes/linefeed.pipe'; import { LinkyPipe } from './pipes/linky.pipe'; import { PhoneNumberPipe } from './pipes/phone-number.pipe'; import { SafeHtmlPipe } from './pipes/safe-html.pipe'; import { SecondsToMinutesPipe } from './pipes/seconds-to-minutes.pipe'; import { DateService } from './services/date.service'; const COMPONENTS = [ FileUploadQueueComponent, BinaryViewerComponent, DocumentViewerComponent, ImageViewerComponent, SoundViewerComponent, VideoViewerComponent, FileViewerComponent, FloatActionButtonComponent, InlineEditInputComponent, PickDateComponent, PickTimeComponent, SplitButtonComponent, StepInputComponent, TitleBarComponent ]; const DIALOGS = [AlertDialogComponent, ConfirmDialogComponent]; const PIPES = [ BytesPipe, DatePipe, EmptyPipe, HtmlToLinefeedPipe, LinefeedToHtmlPipe, LinkyPipe, PhoneNumberPipe, SafeHtmlPipe, SecondsToMinutesPipe ]; const DIRECTIVES = [ CdkVirtualScrollViewportPatchDirective, ClickDebounceDirective, ClickOutsideDirective, FileUploadForDirective, ImageDirective ]; const SERVICES = [DateService]; @NgModule({ declarations: [], imports: [], exports: [] }) export class UiRootModule {} @NgModule({ imports: [ CommonModule, FlexLayoutModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatDatepickerModule, MatIconModule, MatMenuModule, MatProgressBarModule, MatSliderModule, MatToolbarModule, MatTooltipModule, I18nModule ], exports: [...COMPONENTS, ...DIRECTIVES, ...PIPES], declarations: [...COMPONENTS, ...DIALOGS, ...DIRECTIVES, ...PIPES], entryComponents: [...DIALOGS] }) export class UiModule { public static forRoot( config: ModuleConfig ): ModuleWithProviders { return { ngModule: UiRootModule, providers: [{ provide: _MODULE_CONFIG, useValue: config }, ...SERVICES] }; } }