ngx-ui-loader
Version:
An all-in-one and fully customizable loader/spinner for Angular applications. It supports foreground, background spinner/loader, indicative progress bar and multiple loaders.
1 lines • 82.2 kB
Source Map (JSON)
{"version":3,"file":"ngx-ui-loader.mjs","sources":["../../../projects/ngx-ui-loader/src/lib/utils/enums.ts","../../../projects/ngx-ui-loader/src/lib/utils/constants.ts","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader-config.token.ts","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader.service.ts","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader.component.ts","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader.component.html","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader-blurred.directive.ts","../../../projects/ngx-ui-loader/src/lib/core/ngx-ui-loader.module.ts","../../../projects/ngx-ui-loader/src/lib/router/ngx-ui-loader-router-config.token.ts","../../../projects/ngx-ui-loader/src/lib/utils/functions.ts","../../../projects/ngx-ui-loader/src/lib/router/ngx-ui-loader-router.module.ts","../../../projects/ngx-ui-loader/src/lib/http/ngx-ui-loader-http-config.token.ts","../../../projects/ngx-ui-loader/src/lib/http/ngx-ui-loader-http.interceptor.ts","../../../projects/ngx-ui-loader/src/lib/http/ngx-ui-loader-http.module.ts","../../../projects/ngx-ui-loader/src/public-api.ts","../../../projects/ngx-ui-loader/src/ngx-ui-loader.ts"],"sourcesContent":["/**\n * Available spinner types\n */\nexport enum SPINNER {\n ballScaleMultiple = 'ball-scale-multiple',\n ballSpin = 'ball-spin',\n ballSpinClockwise = 'ball-spin-clockwise',\n ballSpinClockwiseFadeRotating = 'ball-spin-clockwise-fade-rotating',\n ballSpinFadeRotating = 'ball-spin-fade-rotating',\n chasingDots = 'chasing-dots',\n circle = 'circle',\n cubeGrid = 'cube-grid',\n doubleBounce = 'double-bounce',\n fadingCircle = 'fading-circle',\n foldingCube = 'folding-cube',\n pulse = 'pulse',\n rectangleBounce = 'rectangle-bounce',\n rectangleBounceParty = 'rectangle-bounce-party',\n rectangleBouncePulseOut = 'rectangle-bounce-pulse-out',\n rectangleBouncePulseOutRapid = 'rectangle-bounce-pulse-out-rapid',\n rotatingPlane = 'rotating-plane',\n squareJellyBox = 'square-jelly-box',\n squareLoader = 'square-loader',\n threeBounce = 'three-bounce',\n threeStrings = 'three-strings',\n wanderingCubes = 'wandering-cubes',\n}\n\n/**\n * Available postions\n */\nexport enum POSITION {\n bottomCenter = 'bottom-center',\n bottomLeft = 'bottom-left',\n bottomRight = 'bottom-right',\n centerCenter = 'center-center',\n centerLeft = 'center-left',\n centerRight = 'center-right',\n topCenter = 'top-center',\n topLeft = 'top-left',\n topRight = 'top-right',\n}\n\n/**\n * Progress bar directions\n */\nexport enum PB_DIRECTION {\n leftToRight = 'ltr',\n rightToLeft = 'rtl',\n}\n","import { NgxUiLoaderConfig, Time } from '../utils/interfaces';\nimport { POSITION, PB_DIRECTION, SPINNER } from './enums';\n\n/**\n * The default value of foreground task id\n */\nexport const DEFAULT_FG_TASK_ID = 'fg-default';\n\n/**\n * The default value of background task id\n */\nexport const DEFAULT_BG_TASK_ID = 'bg-default';\n\n/**\n * The default value of loader id\n */\nexport const DEFAULT_MASTER_LOADER_ID = 'master';\n\nexport const DEFAULT_TIME: Time = {};\n\nexport const MIN_DELAY = 0;\n\nexport const MIN_TIME = 0;\n\nexport const CLOSING_TIME = 1001;\n\nexport const FAST_CLOSING_TIME = 601;\n\nexport const BACKGROUND = false;\n\nexport const FOREGROUND = true;\n\nexport const OVERLAY_DISAPPEAR_TIME = 500;\n\nexport const FAST_OVERLAY_DISAPPEAR_TIME = 300;\n\n/**\n * Http loader taskId\n */\nexport const HTTP_LOADER_TASK_ID = '$_http-loader';\n\n/**\n * Router loader taskId\n */\nexport const ROUTER_LOADER_TASK_ID = '$_router_loader';\n\n/**\n * The configuration of spinners\n */\nexport const SPINNER_CONFIG = {\n 'ball-scale-multiple': {\n divs: 3,\n class: 'sk-ball-scale-multiple',\n },\n 'ball-spin': {\n divs: 8,\n class: 'sk-ball-spin',\n },\n 'ball-spin-clockwise': {\n divs: 8,\n class: 'sk-ball-spin-clockwise',\n },\n 'ball-spin-clockwise-fade-rotating': {\n divs: 8,\n class: 'sk-ball-spin-clockwise-fade-rotating',\n },\n 'ball-spin-fade-rotating': {\n divs: 8,\n class: 'sk-ball-spin-fade-rotating',\n },\n 'chasing-dots': {\n divs: 2,\n class: 'sk-chasing-dots',\n },\n circle: {\n divs: 12,\n class: 'sk-circle',\n },\n 'cube-grid': {\n divs: 9,\n class: 'sk-cube-grid',\n },\n 'double-bounce': {\n divs: 2,\n class: 'sk-double-bounce',\n },\n 'fading-circle': {\n divs: 12,\n class: 'sk-fading-circle',\n },\n 'folding-cube': {\n divs: 4,\n class: 'sk-folding-cube',\n },\n pulse: {\n divs: 1,\n class: 'sk-pulse',\n },\n 'rectangle-bounce': {\n divs: 5,\n class: 'sk-rectangle-bounce',\n },\n 'rectangle-bounce-party': {\n divs: 5,\n class: 'sk-rectangle-bounce-party',\n },\n 'rectangle-bounce-pulse-out': {\n divs: 5,\n class: 'sk-rectangle-bounce-pulse-out',\n },\n 'rectangle-bounce-pulse-out-rapid': {\n divs: 5,\n class: 'sk-rectangle-bounce-pulse-out-rapid',\n },\n 'rotating-plane': {\n divs: 1,\n class: 'sk-rotating-plane',\n },\n 'square-jelly-box': {\n divs: 2,\n class: 'sk-square-jelly-box',\n },\n 'square-loader': {\n divs: 1,\n class: 'sk-square-loader',\n },\n 'three-bounce': {\n divs: 3,\n class: 'sk-three-bounce',\n },\n 'three-strings': {\n divs: 3,\n class: 'sk-three-strings',\n },\n 'wandering-cubes': {\n divs: 2,\n class: 'sk-wandering-cubes',\n },\n};\n\n/**\n * The default configuration of ngx-ui-loader\n */\nexport const DEFAULT_CONFIG: NgxUiLoaderConfig = {\n bgsColor: '#00ACC1',\n bgsOpacity: 0.5,\n bgsPosition: POSITION.bottomRight,\n bgsSize: 60,\n bgsType: SPINNER.ballSpinClockwise,\n blur: 5,\n delay: 0,\n fastFadeOut: false,\n fgsColor: '#00ACC1',\n fgsPosition: POSITION.centerCenter,\n fgsSize: 60,\n fgsType: SPINNER.ballSpinClockwise,\n gap: 24,\n logoPosition: POSITION.centerCenter,\n logoSize: 120,\n logoUrl: '',\n masterLoaderId: DEFAULT_MASTER_LOADER_ID,\n overlayBorderRadius: '0',\n overlayColor: 'rgba(40, 40, 40, 0.8)',\n pbColor: '#00ACC1',\n pbDirection: PB_DIRECTION.leftToRight,\n pbThickness: 3,\n hasProgressBar: true,\n text: '',\n textColor: '#FFFFFF',\n textPosition: POSITION.centerCenter,\n maxTime: -1,\n minTime: 300,\n};\n","import { InjectionToken } from '@angular/core';\nimport { NgxUiLoaderConfig } from '../utils/interfaces';\n\n/**\n * Injection token for ngx-ui-loader configuration\n */\nexport const NGX_UI_LOADER_CONFIG_TOKEN = new InjectionToken<NgxUiLoaderConfig>(\n 'ngxUiLoaderCustom.config'\n);\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport {\n BACKGROUND,\n CLOSING_TIME,\n DEFAULT_BG_TASK_ID,\n DEFAULT_CONFIG,\n DEFAULT_FG_TASK_ID,\n DEFAULT_TIME,\n FAST_CLOSING_TIME,\n FOREGROUND,\n MIN_DELAY,\n MIN_TIME,\n OVERLAY_DISAPPEAR_TIME,\n FAST_OVERLAY_DISAPPEAR_TIME,\n} from '../utils/constants';\nimport { NGX_UI_LOADER_CONFIG_TOKEN } from './ngx-ui-loader-config.token';\nimport { NgxUiLoaderConfig } from '../utils/interfaces';\nimport {\n Loaders,\n Loader,\n ShowEvent,\n Tasks,\n Task,\n Time,\n} from '../utils/interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxUiLoaderService {\n /**\n * For internal use only.\n *\n * @docs-private\n */\n backgroundClosing$: Observable<ShowEvent>;\n\n /**\n * For internal use only.\n *\n * @docs-private\n */\n foregroundClosing$: Observable<ShowEvent>;\n\n /**\n * For internal use only.\n *\n * @docs-private\n */\n showBackground$: Observable<ShowEvent>;\n\n /**\n * For internal use only.\n *\n * @docs-private\n */\n showForeground$: Observable<ShowEvent>;\n\n private bgClosing: BehaviorSubject<ShowEvent>;\n private defaultConfig: NgxUiLoaderConfig;\n private fgClosing: BehaviorSubject<ShowEvent>;\n private loaders: Loaders;\n private showBackground: BehaviorSubject<ShowEvent>;\n private showForeground: BehaviorSubject<ShowEvent>;\n\n /**\n * Constructor\n */\n constructor(\n @Optional()\n @Inject(NGX_UI_LOADER_CONFIG_TOKEN)\n private config: NgxUiLoaderConfig\n ) {\n this.defaultConfig = { ...DEFAULT_CONFIG };\n if (this.config) {\n if (this.config.minTime && this.config.minTime < MIN_TIME) {\n this.config.minTime = MIN_TIME;\n }\n this.defaultConfig = { ...this.defaultConfig, ...this.config };\n }\n this.loaders = {};\n this.showForeground = new BehaviorSubject<ShowEvent>({\n loaderId: '',\n isShow: false,\n });\n this.showForeground$ = this.showForeground.asObservable();\n this.showBackground = new BehaviorSubject<ShowEvent>({\n loaderId: '',\n isShow: false,\n });\n this.showBackground$ = this.showBackground.asObservable();\n this.fgClosing = new BehaviorSubject<ShowEvent>({\n loaderId: '',\n isShow: false,\n });\n this.foregroundClosing$ = this.fgClosing.asObservable();\n this.bgClosing = new BehaviorSubject<ShowEvent>({\n loaderId: '',\n isShow: false,\n });\n this.backgroundClosing$ = this.bgClosing.asObservable();\n }\n\n /**\n * For internal use only.\n *\n * @docs-private\n */\n bindLoaderData(loaderId: string): void {\n const isMaster = loaderId === this.defaultConfig.masterLoaderId;\n if (this.loaders[loaderId]) {\n if (this.loaders[loaderId].isBound) {\n throw new Error(\n `[ngx-ui-loader] - loaderId \"${loaderId}\" is duplicated.`\n );\n }\n this.loaders[loaderId].isBound = true;\n this.loaders[loaderId].isMaster = isMaster;\n // emit showEvent after data loader is bound\n if (this.hasRunningTask(FOREGROUND, loaderId)) {\n this.showForeground.next({ loaderId, isShow: true });\n } else {\n if (this.hasRunningTask(BACKGROUND, loaderId)) {\n this.showBackground.next({ loaderId, isShow: true });\n }\n }\n } else {\n this.createLoaderData(loaderId, isMaster, true);\n }\n }\n\n /**\n * For internal use only.\n *\n * @docs-private\n */\n destroyLoaderData(loaderId: string): void {\n this.stopAllLoader(loaderId);\n delete this.loaders[loaderId];\n }\n\n /**\n * Get default loader configuration\n *\n * @returns default configuration object\n */\n getDefaultConfig(): NgxUiLoaderConfig {\n return { ...this.defaultConfig };\n }\n\n /**\n * Get all the loaders\n */\n getLoaders(): Loaders {\n return JSON.parse(JSON.stringify(this.loaders));\n }\n\n /**\n * Get data of a specified loader. If loaderId is not provided, it will return data of\n * master loader(if existed). Otherwise null is returned.\n */\n getLoader(loaderId?: string): Loader {\n loaderId = loaderId ? loaderId : this.defaultConfig.masterLoaderId;\n if (this.loaders[loaderId]) {\n return JSON.parse(JSON.stringify(this.loaders[loaderId]));\n }\n return null;\n }\n\n /**\n * Start the foreground loading of loader having `loaderId` with a specified `taskId`.\n * The loading is only closed off when all taskIds of that loader are called with stopLoader() method.\n *\n * @param loaderId the loader Id\n * @param taskId the optional task Id of the loading. taskId is set to 'fd-default' by default.\n */\n startLoader(\n loaderId: string,\n taskId: string = DEFAULT_FG_TASK_ID,\n time?: Time\n ): void {\n if (!this.readyToStart(loaderId, taskId, true, time)) {\n return;\n }\n if (!this.loaders[loaderId].tasks[taskId].isOtherRunning) {\n // no other foreground task running\n if (this.hasRunningTask(BACKGROUND, loaderId)) {\n this.backgroundCloseout(loaderId);\n this.showBackground.next({ loaderId, isShow: false });\n }\n this.showForeground.next({ loaderId, isShow: true });\n }\n }\n\n /**\n * Start the foreground loading of master loader with a specified `taskId`.\n * The loading is only closed off when all taskIds of that loader are called with stop() method.\n * NOTE: Really this function just wraps startLoader() function\n *\n * @param taskId the optional task Id of the loading. taskId is set to 'fd-default' by default.\n */\n start(taskId: string = DEFAULT_FG_TASK_ID, time?: Time): void {\n this.startLoader(this.defaultConfig.masterLoaderId, taskId, time);\n }\n\n /**\n * Start the background loading of loader having `loaderId` with a specified `taskId`.\n * The loading is only closed off when all taskIds of that loader are called with stopLoaderBackground() method.\n *\n * @param loaderId the loader Id\n * @param taskId the optional task Id of the loading. taskId is set to 'bg-default' by default.\n */\n startBackgroundLoader(\n loaderId: string,\n taskId: string = DEFAULT_BG_TASK_ID,\n time?: Time\n ): void {\n if (!this.readyToStart(loaderId, taskId, false, time)) {\n return;\n }\n if (\n !this.hasRunningTask(FOREGROUND, loaderId) &&\n !this.loaders[loaderId].tasks[taskId].isOtherRunning\n ) {\n this.showBackground.next({ loaderId, isShow: true });\n }\n }\n\n /**\n * Start the background loading of master loader with a specified `taskId`.\n * The loading is only closed off when all taskIds of that loader are called with stopBackground() method.\n * NOTE: Really this function just wraps startBackgroundLoader() function\n *\n * @param taskId the optional task Id of the loading. taskId is set to 'bg-default' by default.\n */\n startBackground(taskId: string = DEFAULT_BG_TASK_ID, time?: Time): void {\n this.startBackgroundLoader(this.defaultConfig.masterLoaderId, taskId, time);\n }\n\n /**\n * Stop a foreground loading of loader having `loaderId` with specific `taskId`\n *\n * @param loaderId the loader Id\n * @param taskId the optional task Id to stop. If not provided, 'fg-default' is used.\n * @returns Object\n */\n stopLoader(loaderId: string, taskId: string = DEFAULT_FG_TASK_ID): void {\n if (!this.readyToStop(loaderId, taskId)) {\n return;\n }\n if (!this.hasRunningTask(FOREGROUND, loaderId)) {\n this.foregroundCloseout(loaderId);\n this.showForeground.next({ loaderId, isShow: false });\n if (this.hasRunningTask(BACKGROUND, loaderId)) {\n setTimeout(\n () => {\n if (this.hasRunningTask(BACKGROUND, loaderId)) {\n // still have background tasks\n this.showBackground.next({ loaderId, isShow: true });\n }\n },\n this.defaultConfig.fastFadeOut\n ? FAST_OVERLAY_DISAPPEAR_TIME\n : OVERLAY_DISAPPEAR_TIME\n );\n }\n }\n }\n\n /**\n * Stop a foreground loading of master loader with specific `taskId`\n *\n * @param taskId the optional task Id to stop. If not provided, 'fg-default' is used.\n * @returns Object\n */\n stop(taskId: string = DEFAULT_FG_TASK_ID): void {\n this.stopLoader(this.defaultConfig.masterLoaderId, taskId);\n }\n\n /**\n * Stop a background loading of loader having `loaderId` with specific `taskId`\n *\n * @param loaderId the loader Id\n * @param taskId the optional task Id to stop. If not provided, 'bg-default' is used.\n * @returns Object\n */\n stopBackgroundLoader(\n loaderId: string,\n taskId: string = DEFAULT_BG_TASK_ID\n ): void {\n if (!this.readyToStop(loaderId, taskId)) {\n return;\n }\n if (\n !this.hasRunningTask(FOREGROUND, loaderId) &&\n !this.hasRunningTask(BACKGROUND, loaderId)\n ) {\n this.backgroundCloseout(loaderId);\n this.showBackground.next({ loaderId, isShow: false });\n }\n }\n\n /**\n * Stop a background loading of master loader with specific taskId\n *\n * @param taskId the optional task Id to stop. If not provided, 'bg-default' is used.\n * @returns Object\n */\n stopBackground(taskId: string = DEFAULT_BG_TASK_ID): void {\n this.stopBackgroundLoader(this.defaultConfig.masterLoaderId, taskId);\n }\n\n /**\n * Stop all the background and foreground loadings of loader having `loaderId`\n *\n * @param loaderId the loader Id\n */\n stopAllLoader(loaderId: string): void {\n if (!this.loaders[loaderId]) {\n console.warn(`[ngx-ui-loader] - loaderId \"${loaderId}\" does not exist.`);\n return;\n }\n if (this.hasRunningTask(FOREGROUND, loaderId)) {\n this.foregroundCloseout(loaderId);\n this.showForeground.next({ loaderId, isShow: false });\n } else if (this.hasRunningTask(BACKGROUND, loaderId)) {\n this.backgroundCloseout(loaderId);\n this.showBackground.next({ loaderId, isShow: false });\n }\n this.clearAllTimers(this.loaders[loaderId].tasks);\n this.loaders[loaderId].tasks = {};\n }\n\n /**\n * Stop all the background and foreground loadings of master loader\n */\n stopAll(): void {\n this.stopAllLoader(this.defaultConfig.masterLoaderId);\n }\n\n /**\n * Check whether the specified loader has a running task with the given `taskId`.\n * If no `taskId` specified, it will check whether the loader has any running tasks.\n * For internal use only.\n *\n * @docs-private\n * @param isForeground foreground task or background task\n * @param loaderId the loader Id\n * @param taskId the optional task Id\n * @returns boolean\n */\n hasRunningTask(\n isForeground: boolean,\n loaderId: string,\n taskId?: string\n ): boolean {\n if (this.loaders[loaderId]) {\n const tasks: Tasks = this.loaders[loaderId].tasks;\n if (taskId) {\n return tasks[taskId] ? (tasks[taskId].startAt ? true : false) : false;\n }\n return Object.keys(tasks).some(\n (id) => !!tasks[id].startAt && tasks[id].isForeground === isForeground\n );\n }\n return false;\n }\n\n /**\n * Create loader data if it does not exist\n *\n * @docs-private\n */\n private createLoaderData(\n loaderId: string,\n isMaster: boolean,\n isBound: boolean\n ): void {\n if (!this.loaders[loaderId]) {\n this.loaders[loaderId] = {\n loaderId,\n tasks: {},\n isMaster,\n isBound,\n };\n }\n }\n\n /**\n * Manage to close foreground loading\n *\n * @docs-private\n * @param loaderId the loader id\n */\n private foregroundCloseout(loaderId: string): void {\n this.fgClosing.next({ loaderId, isShow: true });\n setTimeout(\n () => {\n this.fgClosing.next({ loaderId, isShow: false });\n },\n this.defaultConfig.fastFadeOut ? FAST_CLOSING_TIME : CLOSING_TIME\n );\n }\n\n /**\n * Manage to close background loading\n *\n * @docs-private\n * @param loaderId the loader id\n */\n private backgroundCloseout(loaderId: string): void {\n this.bgClosing.next({ loaderId, isShow: true });\n setTimeout(\n () => {\n this.bgClosing.next({ loaderId, isShow: false });\n },\n this.defaultConfig.fastFadeOut ? FAST_CLOSING_TIME : CLOSING_TIME\n );\n }\n\n /**\n * Clear all timers of the given task\n *\n * @docs-private\n */\n private clearTimers(task: Task): void {\n clearTimeout(task.delayTimer);\n clearTimeout(task.maxTimer);\n clearTimeout(task.minTimer);\n }\n\n /**\n * Clear all timers of the given tasks\n *\n * @docs-private\n */\n private clearAllTimers(tasks: Tasks): void {\n Object.keys(tasks).map((id) => {\n this.clearTimers(tasks[id]);\n });\n }\n\n /**\n * @docs-private\n */\n private readyToStart(\n loaderId: string,\n taskId: string,\n isForeground: boolean,\n time: Time = DEFAULT_TIME\n ): boolean {\n this.createLoaderData(loaderId, undefined, false);\n const isOtherRunning = this.hasRunningTask(isForeground, loaderId);\n if (!this.loaders[loaderId].tasks[taskId]) {\n this.loaders[loaderId].tasks[taskId] = {\n taskId,\n isForeground,\n minTime:\n time.minTime >= MIN_TIME ? time.minTime : this.defaultConfig.minTime,\n maxTime: time.maxTime ? time.maxTime : this.defaultConfig.maxTime,\n delay: time.delay >= MIN_DELAY ? time.delay : this.defaultConfig.delay,\n };\n } else {\n if (this.loaders[loaderId].tasks[taskId].isForeground !== isForeground) {\n throw new Error(`[ngx-ui-loader] - taskId \"${taskId}\" is duplicated.`);\n }\n }\n if (this.setDelayTimer(this.loaders[loaderId].tasks[taskId], loaderId)) {\n return false;\n }\n this.loaders[loaderId].tasks[taskId] = {\n ...this.loaders[loaderId].tasks[taskId],\n isOtherRunning,\n startAt: Date.now(),\n };\n this.setMaxTimer(this.loaders[loaderId].tasks[taskId], loaderId);\n if (!this.loaders[loaderId].isBound) {\n return false;\n }\n return true;\n }\n\n /**\n * @docs-private\n */\n private readyToStop(loaderId: string, taskId: string): boolean {\n if (!this.loaders[loaderId]) {\n console.warn(`[ngx-ui-loader] - loaderId \"${loaderId}\" does not exist.`);\n return false;\n }\n const task: Task = this.loaders[loaderId].tasks[taskId];\n if (!task) {\n return false;\n }\n if (task.isDelayed) {\n this.clearTimers(task);\n delete this.loaders[loaderId].tasks[taskId];\n return false;\n }\n if (this.setMinTimer(task, loaderId)) {\n return false;\n }\n this.clearTimers(task);\n delete this.loaders[loaderId].tasks[taskId];\n return true;\n }\n\n /**\n * Set delay timer, if `delay` > 0\n *\n * @docs-private\n * @returns boolean\n */\n private setDelayTimer(task: Task, loaderId: string): boolean {\n if (task.delay > MIN_DELAY) {\n if (task.isDelayed) {\n return true;\n }\n if (!task.delayTimer) {\n task.isDelayed = true;\n task.delayTimer = setTimeout(() => {\n task.isDelayed = false;\n if (task.isForeground) {\n this.startLoader(loaderId, task.taskId);\n } else {\n this.startBackgroundLoader(loaderId, task.taskId);\n }\n }, task.delay);\n return true;\n }\n }\n return false;\n }\n\n /**\n * Set maxTimer if `maxTime` > `minTime`\n *\n * @docs-private\n * @returns boolean\n */\n private setMaxTimer(task: Task, loaderId: string): void {\n if (task.maxTime > task.minTime) {\n // restart the task, reset maxTimer\n clearTimeout(task.maxTimer);\n task.maxTimer = setTimeout(() => {\n if (task.isForeground) {\n this.stopLoader(loaderId, task.taskId);\n } else {\n this.stopBackgroundLoader(loaderId, task.taskId);\n }\n }, task.maxTime);\n }\n }\n\n /**\n * Set minTimer if `startAt` + `minTime` > `Date.now()`\n *\n * @docs-private\n * @returns boolean\n */\n private setMinTimer(task: Task, loaderId: string): boolean {\n const now = Date.now();\n if (task.startAt) {\n if (task.startAt + task.minTime > now) {\n task.minTimer = setTimeout(() => {\n if (task.isForeground) {\n this.stopLoader(loaderId, task.taskId);\n } else {\n this.stopBackgroundLoader(loaderId, task.taskId);\n }\n }, task.startAt + task.minTime - now);\n return true;\n }\n }\n return false;\n }\n}\n","/* eslint-disable @angular-eslint/component-selector */\n/* eslint-disable @angular-eslint/prefer-standalone */\nimport {\n Component,\n Input,\n OnInit,\n OnChanges,\n SimpleChanges,\n SimpleChange,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n TemplateRef,\n} from '@angular/core';\nimport {\n DomSanitizer,\n SafeResourceUrl,\n SafeStyle,\n} from '@angular/platform-browser';\nimport { NgxUiLoaderService } from './ngx-ui-loader.service';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { NgxUiLoaderConfig } from '../utils/interfaces';\nimport { DirectionType, PositionType, SpinnerType } from '../utils/types';\nimport { POSITION } from '../utils/enums';\nimport { SPINNER_CONFIG } from '../utils/constants';\nimport { ShowEvent } from '../utils/interfaces';\n\n@Component({\n selector: 'ngx-ui-loader',\n templateUrl: './ngx-ui-loader.component.html',\n styleUrls: ['./ngx-ui-loader.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class NgxUiLoaderComponent implements OnChanges, OnDestroy, OnInit {\n @Input() bgsColor: string;\n @Input() bgsOpacity: number;\n @Input() bgsPosition: PositionType;\n @Input() bgsSize: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() bgsTemplate: TemplateRef<any>;\n @Input() bgsType: SpinnerType;\n @Input() fgsColor: string;\n @Input() fgsPosition: PositionType;\n @Input() fgsSize: number;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() fgsTemplate: TemplateRef<any>;\n @Input() fgsType: SpinnerType;\n @Input() gap: number;\n @Input() loaderId: string;\n @Input() logoPosition: PositionType;\n @Input() logoSize: number;\n @Input() logoUrl: string;\n @Input() overlayBorderRadius: string;\n @Input() overlayColor: string;\n @Input() pbColor: string;\n @Input() pbDirection: DirectionType;\n @Input() pbThickness: number;\n @Input() hasProgressBar: boolean;\n @Input() text: string;\n @Input() textColor: string;\n @Input() textPosition: PositionType;\n\n fastFadeOut: boolean;\n fgDivs: number[];\n fgSpinnerClass: string;\n bgDivs: number[];\n bgSpinnerClass: string;\n showForeground: boolean;\n showBackground: boolean;\n foregroundClosing: boolean;\n backgroundClosing: boolean;\n\n trustedLogoUrl: SafeResourceUrl;\n logoTop: SafeStyle;\n spinnerTop: SafeStyle;\n textTop: SafeStyle;\n\n showForegroundWatcher: Subscription;\n showBackgroundWatcher: Subscription;\n foregroundClosingWatcher: Subscription;\n backgroundClosingWatcher: Subscription;\n\n defaultConfig: NgxUiLoaderConfig;\n initialized: boolean;\n\n /**\n * Constructor\n */\n constructor(\n private domSanitizer: DomSanitizer,\n private changeDetectorRef: ChangeDetectorRef,\n private ngxService: NgxUiLoaderService,\n ) {\n this.initialized = false;\n this.defaultConfig = this.ngxService.getDefaultConfig();\n\n this.bgsColor = this.defaultConfig.bgsColor;\n this.bgsOpacity = this.defaultConfig.bgsOpacity;\n this.bgsPosition = this.defaultConfig.bgsPosition;\n this.bgsSize = this.defaultConfig.bgsSize;\n this.bgsType = this.defaultConfig.bgsType;\n this.fastFadeOut = this.defaultConfig.fastFadeOut;\n this.fgsColor = this.defaultConfig.fgsColor;\n this.fgsPosition = this.defaultConfig.fgsPosition;\n this.fgsSize = this.defaultConfig.fgsSize;\n this.fgsType = this.defaultConfig.fgsType;\n this.gap = this.defaultConfig.gap;\n this.loaderId = this.defaultConfig.masterLoaderId;\n this.logoPosition = this.defaultConfig.logoPosition;\n this.logoSize = this.defaultConfig.logoSize;\n this.logoUrl = this.defaultConfig.logoUrl;\n this.overlayBorderRadius = this.defaultConfig.overlayBorderRadius;\n this.overlayColor = this.defaultConfig.overlayColor;\n this.pbColor = this.defaultConfig.pbColor;\n this.pbDirection = this.defaultConfig.pbDirection;\n this.pbThickness = this.defaultConfig.pbThickness;\n this.hasProgressBar = this.defaultConfig.hasProgressBar;\n this.text = this.defaultConfig.text;\n this.textColor = this.defaultConfig.textColor;\n this.textPosition = this.defaultConfig.textPosition;\n }\n\n /**\n * On init event\n */\n ngOnInit() {\n this.initializeSpinners();\n this.ngxService.bindLoaderData(this.loaderId);\n this.determinePositions();\n\n this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(\n this.logoUrl,\n );\n\n this.showForegroundWatcher = this.ngxService.showForeground$\n .pipe(\n filter((showEvent: ShowEvent) => this.loaderId === showEvent.loaderId),\n )\n .subscribe((data) => {\n this.showForeground = data.isShow;\n this.changeDetectorRef.markForCheck();\n });\n\n this.showBackgroundWatcher = this.ngxService.showBackground$\n .pipe(\n filter((showEvent: ShowEvent) => this.loaderId === showEvent.loaderId),\n )\n .subscribe((data) => {\n this.showBackground = data.isShow;\n this.changeDetectorRef.markForCheck();\n });\n\n this.foregroundClosingWatcher = this.ngxService.foregroundClosing$\n .pipe(\n filter((showEvent: ShowEvent) => this.loaderId === showEvent.loaderId),\n )\n .subscribe((data) => {\n this.foregroundClosing = data.isShow;\n this.changeDetectorRef.markForCheck();\n });\n\n this.backgroundClosingWatcher = this.ngxService.backgroundClosing$\n .pipe(\n filter((showEvent: ShowEvent) => this.loaderId === showEvent.loaderId),\n )\n .subscribe((data) => {\n this.backgroundClosing = data.isShow;\n this.changeDetectorRef.markForCheck();\n });\n this.initialized = true;\n }\n\n /**\n * On changes event\n */\n ngOnChanges(changes: SimpleChanges) {\n if (!this.initialized) {\n return;\n }\n\n const bgsTypeChange: SimpleChange = changes['bgsType'];\n const fgsTypeChange: SimpleChange = changes['fgsType'];\n const logoUrlChange: SimpleChange = changes['logoUrl'];\n\n if (fgsTypeChange || bgsTypeChange) {\n this.initializeSpinners();\n }\n\n this.determinePositions();\n\n if (logoUrlChange) {\n this.trustedLogoUrl = this.domSanitizer.bypassSecurityTrustResourceUrl(\n this.logoUrl,\n );\n }\n }\n\n /**\n * On destroy event\n */\n ngOnDestroy() {\n this.ngxService.destroyLoaderData(this.loaderId);\n if (this.showForegroundWatcher) {\n this.showForegroundWatcher.unsubscribe();\n }\n if (this.showBackgroundWatcher) {\n this.showBackgroundWatcher.unsubscribe();\n }\n if (this.foregroundClosingWatcher) {\n this.foregroundClosingWatcher.unsubscribe();\n }\n if (this.backgroundClosingWatcher) {\n this.backgroundClosingWatcher.unsubscribe();\n }\n }\n\n /**\n * Initialize spinners\n */\n private initializeSpinners(): void {\n this.fgDivs = Array(SPINNER_CONFIG[this.fgsType].divs).fill(1);\n this.fgSpinnerClass = SPINNER_CONFIG[this.fgsType].class;\n this.bgDivs = Array(SPINNER_CONFIG[this.bgsType].divs).fill(1);\n this.bgSpinnerClass = SPINNER_CONFIG[this.bgsType].class;\n }\n\n /**\n * Determine the positions of spinner, logo and text\n */\n private determinePositions(): void {\n this.logoTop = 'initial';\n this.spinnerTop = 'initial';\n this.textTop = 'initial';\n const textSize = 24;\n\n if (this.logoPosition.startsWith('center')) {\n this.logoTop = '50%';\n } else if (this.logoPosition.startsWith('top')) {\n this.logoTop = '30px';\n }\n\n if (this.fgsPosition.startsWith('center')) {\n this.spinnerTop = '50%';\n } else if (this.fgsPosition.startsWith('top')) {\n this.spinnerTop = '30px';\n }\n\n if (this.textPosition.startsWith('center')) {\n this.textTop = '50%';\n } else if (this.textPosition.startsWith('top')) {\n this.textTop = '30px';\n }\n\n if (this.fgsPosition === POSITION.centerCenter) {\n if (this.logoUrl && this.logoPosition === POSITION.centerCenter) {\n if (this.text && this.textPosition === POSITION.centerCenter) {\n // logo, spinner and text\n this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% - ${this.fgsSize / 2}px - ${textSize / 2}px - ${\n this.gap\n }px)`,\n );\n this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% + ${this.logoSize / 2}px - ${textSize / 2}px)`,\n );\n this.textTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% + ${this.logoSize / 2}px + ${this.gap}px + ${\n this.fgsSize / 2\n }px)`,\n );\n } else {\n // logo and spinner\n this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% - ${this.fgsSize / 2}px - ${this.gap / 2}px)`,\n );\n this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% + ${this.logoSize / 2}px + ${this.gap / 2}px)`,\n );\n }\n } else {\n if (this.text && this.textPosition === POSITION.centerCenter) {\n // spinner and text\n this.spinnerTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% - ${textSize / 2}px - ${this.gap / 2}px)`,\n );\n this.textTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% + ${this.fgsSize / 2}px + ${this.gap / 2}px)`,\n );\n }\n }\n } else {\n if (\n this.logoUrl &&\n this.logoPosition === POSITION.centerCenter &&\n this.text &&\n this.textPosition === POSITION.centerCenter\n ) {\n // logo and text\n this.logoTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% - ${textSize / 2}px - ${this.gap / 2}px)`,\n );\n this.textTop = this.domSanitizer.bypassSecurityTrustStyle(\n `calc(50% + ${this.logoSize / 2}px + ${this.gap / 2}px)`,\n );\n }\n }\n }\n}\n","<!-- Progress bar {{{ -->\n<div\n *ngIf=\"hasProgressBar\"\n class=\"ngx-progress-bar\"\n [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n [ngClass]=\"'ngx-progress-bar-' + pbDirection\"\n [style.height.px]=\"pbThickness\"\n [style.color]=\"pbColor\"\n [class.loading-foreground]=\"showForeground\"\n [class.foreground-closing]=\"foregroundClosing\"\n [class.fast-closing]=\"foregroundClosing && fastFadeOut\"\n></div>\n<!-- Progress bar }}} -->\n\n<!-- Foreground container {{{ -->\n<div\n class=\"ngx-overlay\"\n [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n [style.background-color]=\"overlayColor\"\n [style.border-radius]=\"overlayBorderRadius\"\n [class.loading-foreground]=\"showForeground\"\n [class.foreground-closing]=\"foregroundClosing\"\n [class.fast-closing]=\"foregroundClosing && fastFadeOut\"\n>\n <!-- Logo {{{ -->\n <img\n *ngIf=\"logoUrl\"\n class=\"ngx-loading-logo\"\n [ngClass]=\"logoPosition\"\n [src]=\"trustedLogoUrl\"\n [style.width.px]=\"logoSize\"\n [style.height.px]=\"logoSize\"\n [style.top]=\"logoTop\"\n />\n <!-- Logo }}} -->\n\n <!-- Foreground spinner {{{ -->\n <div\n class=\"ngx-foreground-spinner\"\n [ngClass]=\"fgsPosition\"\n [style.color]=\"fgsColor\"\n [style.width.px]=\"fgsSize\"\n [style.height.px]=\"fgsSize\"\n [style.top]=\"spinnerTop\"\n >\n <div *ngIf=\"!fgsTemplate; else foregroundTemplate\" [class]=\"fgSpinnerClass\">\n <div *ngFor=\"let div of fgDivs\"></div>\n </div>\n <ng-template #foregroundTemplate>\n <ng-container *ngTemplateOutlet=\"fgsTemplate\"></ng-container>\n </ng-template>\n </div>\n <!-- Foreground spinner }}} -->\n\n <!-- Loading text {{{ -->\n <div\n class=\"ngx-loading-text\"\n [ngClass]=\"textPosition\"\n [style.top]=\"textTop\"\n [style.color]=\"textColor\"\n >\n <span>{{ text }}</span>\n </div>\n <!-- Loading text }}} -->\n</div>\n<!-- Foreground container }}} -->\n\n<!-- Background spinner {{{ -->\n<div\n class=\"ngx-background-spinner\"\n [class.ngx-position-absolute]=\"loaderId !== defaultConfig.masterLoaderId\"\n [ngClass]=\"bgsPosition\"\n [class.loading-background]=\"showBackground\"\n [class.background-closing]=\"backgroundClosing\"\n [class.fast-closing]=\"backgroundClosing && fastFadeOut\"\n [style.width.px]=\"bgsSize\"\n [style.height.px]=\"bgsSize\"\n [style.color]=\"bgsColor\"\n [style.opacity]=\"bgsOpacity\"\n>\n <div *ngIf=\"!bgsTemplate; else backgroundTemplate\" [class]=\"bgSpinnerClass\">\n <div *ngFor=\"let div of bgDivs\"></div>\n </div>\n <ng-template #backgroundTemplate>\n <ng-container *ngTemplateOutlet=\"bgsTemplate\"></ng-container>\n </ng-template>\n</div>\n<!-- Background spinner }}} -->\n","/* eslint-disable @angular-eslint/directive-selector */\n/* eslint-disable @angular-eslint/prefer-standalone */\nimport {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n Renderer2,\n OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { NgxUiLoaderService } from './ngx-ui-loader.service';\nimport { ShowEvent } from '../utils/interfaces';\nimport {\n FOREGROUND,\n OVERLAY_DISAPPEAR_TIME,\n FAST_OVERLAY_DISAPPEAR_TIME,\n} from '../utils/constants';\n\n@Directive({\n selector: '[ngxUiLoaderBlurred]',\n standalone: false,\n})\nexport class NgxUiLoaderBlurredDirective implements OnInit, OnDestroy {\n @Input() blur: number;\n @Input() loaderId: string;\n\n showForegroundWatcher: Subscription;\n fastFadeOut: boolean;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private loader: NgxUiLoaderService,\n ) {\n this.blur = this.loader.getDefaultConfig().blur;\n this.loaderId = this.loader.getDefaultConfig().masterLoaderId;\n this.fastFadeOut = this.loader.getDefaultConfig().fastFadeOut;\n }\n\n /**\n * On Init event\n */\n ngOnInit() {\n this.showForegroundWatcher = this.loader.showForeground$\n .pipe(\n filter((showEvent: ShowEvent) => this.loaderId === showEvent.loaderId),\n )\n .subscribe((data) => {\n if (data.isShow) {\n const filterValue = `blur(${this.blur}px)`;\n this.renderer.setStyle(\n this.elementRef.nativeElement,\n '-webkit-filter',\n filterValue,\n );\n this.renderer.setStyle(\n this.elementRef.nativeElement,\n 'filter',\n filterValue,\n );\n } else {\n setTimeout(\n () => {\n if (!this.loader.hasRunningTask(FOREGROUND, data.loaderId)) {\n this.renderer.setStyle(\n this.elementRef.nativeElement,\n '-webkit-filter',\n 'none',\n );\n this.renderer.setStyle(\n this.elementRef.nativeElement,\n 'filter',\n 'none',\n );\n }\n },\n this.fastFadeOut\n ? FAST_OVERLAY_DISAPPEAR_TIME\n : OVERLAY_DISAPPEAR_TIME,\n );\n }\n });\n }\n\n /**\n * On destroy event\n */\n ngOnDestroy() {\n if (this.showForegroundWatcher) {\n this.showForegroundWatcher.unsubscribe();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxUiLoaderComponent } from './ngx-ui-loader.component';\nimport { NgxUiLoaderBlurredDirective } from './ngx-ui-loader-blurred.directive';\nimport { NGX_UI_LOADER_CONFIG_TOKEN } from './ngx-ui-loader-config.token';\nimport { NgxUiLoaderConfig } from '../utils/interfaces';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective],\n exports: [NgxUiLoaderComponent, NgxUiLoaderBlurredDirective],\n})\nexport class NgxUiLoaderModule {\n /**\n * forRoot\n *\n * @returns A module with its provider dependencies\n */\n static forRoot(\n ngxUiLoaderConfig: NgxUiLoaderConfig\n ): ModuleWithProviders<NgxUiLoaderModule> {\n return {\n ngModule: NgxUiLoaderModule,\n providers: [\n {\n provide: NGX_UI_LOADER_CONFIG_TOKEN,\n useValue: ngxUiLoaderConfig,\n },\n ],\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { NgxUiLoaderRouterConfig } from '../utils/interfaces';\n\n/**\n * Injection token for ngx-ui-loader-router configuration\n */\nexport const NGX_UI_LOADER_ROUTER_CONFIG_TOKEN =\n new InjectionToken<NgxUiLoaderRouterConfig>('ngxUiLoaderRouterCustom.config');\n","import { Config, Exclude } from './interfaces';\n\nexport function getExcludeObj(config: Config): Exclude {\n let strs: string[];\n let regExps: RegExp[];\n\n if (config) {\n if (config.exclude) {\n strs = config.exclude.map((url) => url.toLowerCase());\n }\n\n if (config.excludeRegexp) {\n regExps = config.excludeRegexp.map((regexp) => new RegExp(regexp, 'i'));\n }\n }\n\n return { strs, regExps };\n}\n\nexport function isIgnored(\n url: string,\n excludeStrings: string[],\n excludeRegexps: RegExp[]\n): boolean {\n if (excludeStrings) {\n // do not show the loader for urls in the `exclude` list\n if (\n excludeStrings.findIndex((str) => url.toLowerCase().startsWith(str)) !==\n -1\n ) {\n return true;\n }\n }\n\n if (excludeRegexps) {\n // do not show the loader for urls which matches regexps in the `excludeRegexp` list\n if (excludeRegexps.findIndex((regexp) => regexp.test(url)) !== -1) {\n return true;\n }\n }\n\n return false;\n}\n","import {\n NgModule,\n ModuleWithProviders,\n Inject,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n Router,\n Event,\n} from '@angular/router';\n\nimport { NgxUiLoaderService } from '../core/ngx-ui-loader.service';\nimport { NgxUiLoaderRouterConfig } from '../utils/interfaces';\nimport { NGX_UI_LOADER_ROUTER_CONFIG_TOKEN } from './ngx-ui-loader-router-config.token';\nimport { ROUTER_LOADER_TASK_ID } from '../utils/constants';\nimport { getExcludeObj, isIgnored } from '../utils/functions';\nimport { Exclude } from '../utils/interfaces';\n\n@NgModule({})\nexport class NgxUiLoaderRouterModule {\n private exclude: Exclude;\n\n /**\n * Constructor\n */\n constructor(\n @Optional() @SkipSelf() parentModule: NgxUiLoaderRouterModule,\n @Optional()\n @Inject(NGX_UI_LOADER_ROUTER_CONFIG_TOKEN)\n customConfig: NgxUiLoaderRouterConfig,\n router: Router,\n loader: NgxUiLoaderService\n ) {\n if (parentModule) {\n throw new Error(\n '[ngx-ui-loader] - NgxUiLoaderRouterModule is already loaded. It should be imported in the root `AppModule` only!'\n );\n }\n\n let config: NgxUiLoaderRouterConfig = {\n loaderId: loader.getDefaultConfig().masterLoaderId,\n showForeground: true,\n };\n\n this.exclude = getExcludeObj(customConfig);\n\n if (customConfig) {\n config = { ...config, ...customConfig };\n }\n\n router.events.subscribe((event: Event) => {\n if (event instanceof NavigationStart) {\n if (!isIgnored(event.url, this.exclude.strs, this.exclude.regExps)) {\n if (config.showForeground) {\n loader.startLoader(config.loaderId, ROUTER_LOADER_TASK_ID);\n } else {\n loader.startBackgroundLoader(\n config.loaderId,\n ROUTER_LOADER_TASK_ID\n );\n }\n }\n }\n\n if (\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError\n ) {\n if (!isIgnored(event.url, this.exclude.strs, this.exclude.regExps)) {\n if (config.showForeground) {\n loader.stopLoader(config.loaderId, ROUTER_LOADER_TASK_ID);\n } else {\n loader.stopBackgroundLoader(config.loaderId, ROUTER_LOADER_TASK_ID);\n }\n }\n }\n });\n }\n\n /**\n * forRoot\n *\n * @returns A module with its provider dependencies\n */\n static forRoot(\n routerConfig: NgxUiLoaderRouterConfig\n ): ModuleWithProviders<NgxUiLoaderRouterModule> {\n return {\n ngModule: NgxUiLoaderRouterModule,\n providers: [\n {\n provide: NGX_UI_LOADER_ROUTER_CONFIG_TOKEN,\n useValue: routerConfig,\n },\n ],\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { NgxUiLoaderHttpConfig } from '../utils/interfaces';\n\n/**\n * Injection token for ngx-ui-loader-http configuration\n */\nexport const NGX_UI_LOADER_HTTP_CONFIG_TOKEN =\n new InjectionToken<NgxUiLoaderHttpConfig>('ngxUiLoaderHttpCustom.config');\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpEvent,\n HttpHandler,\n HttpRequest,\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\n\nimport { NgxUiLoaderService } from '../core/ngx-ui-loader.service';\nimport { NGX_UI_LOADER_HTTP_CONFIG_TOKEN } from './ngx-ui-loader-http-config.token';\nimport { NgxUiLoaderHttpConfig } from '../utils/interfaces';\nimport { HTTP_LOADER_TASK_ID } from '../utils/constants';\nimport { getExcludeObj, isIgnored } from '../utils/functions';\nimport { Exclude } from '../utils/interfaces';\n\n@Injectable()\nexport class NgxUiLoaderHttpInterceptor implements HttpInterceptor {\n private count: number;\n private config: NgxUiLoaderHttpConfig;\n private exclude: Exclude;\n\n /**\n * Constructor\n */\n constructor(\n @Optional()\n @Inject(NGX_UI_LOADER_HTTP_CONFIG_TOKEN)\n customConfig: NgxUiLoaderHttpConfig,\n private loader: NgxUiLoaderService,\n ) {\n this.count = 0;\n this.config = {\n loaderId: this.loader.getDefaultConfig().masterLoaderId,\n showForeground: false,\n };\n\n this.exclude = getExcludeObj(customConfig);\n\n if (customConfig) {\n this.config = { ...this.config, ...customConfig };\n }\n }\n\n intercept(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: HttpRequest<any>,\n next: HttpHandler,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): Observable<HttpEvent<any>> {\n if (isIgnored(req.url, this.exclude.strs, this.exclude.regExps)) {\n return next.handle(req);\n }\n\n this.count++;\n if (this.config.showForeground) {\n this.loader.startLoader(\n this.config.loaderId,\n HTTP_LOADER_TASK_ID,\n this.config,\n );\n } else {\n this.loader.startBackgroundLoader(\n this.config.loaderId,\n HTTP_LOADER_TASK_ID,\n this.config,\n );\n }\n\n return next.handle(req).pipe(\n finalize(() => {\n this.count--;\n if (this.count === 0) {\n if (this.config.showForeground) {\n this.loader.stopLoader(this.config.loaderId, HTTP_LOADER_TASK_ID);\n } else {\n this.loader.stopBackgroundLoader(\n this.config.loaderId,\n HTTP_LOADER_TASK_ID,\n );\n }\n }\n }),\n );\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n Optional,\n SkipSelf,\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { NgxUiLoaderHttpInterceptor } from './ngx-ui-loader-http.interceptor';\nimport { NgxUiLoaderHttpConfig } from '../utils/interfaces';\nimport { NGX_UI_LOADER_HTTP_CONFIG_TOKEN } from './ngx-ui-loader-http-config.token';\n\n@NgModule({\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: NgxUiLoaderHttpInterceptor,\n multi: true,\n },\n ],\n})\nexport class NgxUiLoaderHttpModule {\n /**\n * Constructor\n */\n constructor(@Optional() @SkipSelf() parentModule: NgxUiLoaderHttpModule) {\n if (parentModule) {\n throw new Error(\n '[ngx-ui-loader] - NgxUiLoaderHttpModule is already loaded. It should be imported in the root `AppModule` only!'\n );\n }\n }\n\n /**\n * forRoot\n *\n * @returns A module with its provider dependencies\n */\n static forRoot(\n httpConfig: NgxUiLoaderHttpConfig\n ): ModuleWithProviders<NgxUiLoaderHttpModule> {\n return {\n ngModule: NgxUiLoaderHttpModule,\n providers: [\n {\n provide: NGX_UI_LOADER_HTTP_CONFIG_TOKEN,\n useValue: httpConfig,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of ngx-ui-loader\n */\n\nexport { NgxUiLoaderService } from './lib/core/ngx-ui-loader.service';\nexport { NgxUiLoaderModule } from './lib/core/ngx-ui-loader.module';\nexport { NgxUiLoaderComponent } from './lib/core/ngx-ui-loader.component';\nexport { NgxUiLoaderBlurredDirective } from './lib/core/ngx-ui-loader-blurred.directive';\nexport { SPINNER, POSITION, PB_DIRECTION } from './lib/utils/enums';\nexport {\n Loader,\n Loaders,\n NgxUiLoaderConfig,\n NgxUiLoaderHttpConfig,\n NgxUiLoaderRouterConfig,\n Task,\n Tasks,\n Time,\n} from './lib/utils/interfaces';\nexport { NgxUiLoaderRouterModule } from './lib/router/ngx-ui-loader-router.module';\nexport { NgxUiLoaderHttpModule } from './lib/http/ngx-ui-loader-http.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.NgxUiLoaderService","i1.NgxUiLoaderService","i1"],"mappings":"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"}