@covalent/core
Version:
Core Teradata UI Platform for layouts, icons, custom components and themes. This should be added as a dependency for any project that wants to use layouts, icons and themes for Angular Material.
1 lines • 49.4 kB
Source Map (JSON)
{"version":3,"file":"covalent-core-loading.mjs","sources":["../../../../libs/angular/loading/src/loading.component.html","../../../../libs/angular/loading/src/loading.component.ts","../../../../libs/angular/loading/src/services/loading.factory.ts","../../../../libs/angular/loading/src/services/loading.service.ts","../../../../libs/angular/loading/src/directives/loading.directive.ts","../../../../libs/angular/loading/src/loading.module.ts","../../../../libs/angular/loading/src/covalent-core-loading.ts"],"sourcesContent":["<div\n class=\"td-loading-wrapper\"\n [style.min-height]=\"getHeight()\"\n [class.td-overlay-circular]=\"(isOverlay() || isFullScreen()) && !isLinear()\"\n [class.td-overlay]=\"isOverlay() || isFullScreen()\"\n [class.td-fullscreen]=\"isFullScreen()\"\n>\n <div\n [@tdFadeInOut]=\"animation\"\n [style.min-height]=\"getHeight()\"\n class=\"td-loading\"\n >\n <mat-progress-spinner\n *ngIf=\"isCircular()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n [diameter]=\"getCircleDiameter()\"\n [strokeWidth]=\"getCircleStrokeWidth()\"\n ></mat-progress-spinner>\n <mat-progress-bar\n *ngIf=\"isLinear()\"\n [mode]=\"mode\"\n [value]=\"value\"\n [color]=\"color\"\n ></mat-progress-bar>\n </div>\n <ng-template [cdkPortalOutlet]=\"content\"></ng-template>\n</div>\n","import {\n Component,\n ChangeDetectorRef,\n ElementRef,\n DoCheck,\n} from '@angular/core';\nimport { tdFadeInOutAnimation } from '@covalent/core/common';\nimport { CdkPortalOutlet, TemplatePortal } from '@angular/cdk/portal';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CommonModule } from '@angular/common';\n\nexport enum LoadingType {\n Circular = 'circular',\n Linear = 'linear',\n}\n\nexport enum LoadingMode {\n Determinate = 'determinate',\n Indeterminate = 'indeterminate',\n}\n\nexport enum LoadingStrategy {\n Overlay = 'overlay',\n Replace = 'replace',\n}\n\nexport enum LoadingStyle {\n FullScreen = 'fullscreen',\n Overlay = 'overlay',\n None = 'none',\n}\n\nexport const TD_CIRCLE_DIAMETER = 40;\n\n@Component({\n selector: 'td-loading',\n styleUrls: ['./loading.component.scss'],\n templateUrl: './loading.component.html',\n animations: [tdFadeInOutAnimation],\n imports: [\n CommonModule,\n MatProgressBar,\n MatProgressSpinner,\n CdkPortalOutlet,\n ],\n})\nexport class TdLoadingComponent implements DoCheck {\n private _mode: LoadingMode = LoadingMode.Indeterminate;\n private _defaultMode: LoadingMode = LoadingMode.Indeterminate;\n private _value = 0;\n private _circleDiameter: number = TD_CIRCLE_DIAMETER;\n\n /**\n * Flag for animation\n */\n animation = false;\n\n /**\n * Content injected into loading component.\n */\n content!: TemplatePortal<any>;\n\n /**\n * Sets mode of [TdLoadingComponent] to LoadingMode.Determinate or LoadingMode.Indeterminate\n */\n set mode(mode: LoadingMode) {\n this._defaultMode = mode;\n }\n get mode(): LoadingMode {\n return this._mode;\n }\n\n /**\n * Sets value of [TdLoadingComponent] if mode is 'LoadingMode.Determinate'\n */\n set value(value: number) {\n this._value = value;\n // Check for changes for `OnPush` change detection\n this._changeDetectorRef.markForCheck();\n }\n get value(): number {\n return this._value;\n }\n\n style: LoadingStyle = LoadingStyle.None;\n\n /**\n * height: number\n * Sets height of [TdLoadingComponent].\n */\n height = 100;\n\n /**\n * type: LoadingType\n * Sets type of [TdLoadingComponent] rendered.\n */\n type: LoadingType = LoadingType.Circular;\n\n /**\n * color: primary' | 'accent' | 'warn'\n * Sets theme color of [TdLoadingComponent] rendered.\n */\n color: 'primary' | 'accent' | 'warn' = 'primary';\n\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngDoCheck(): void {\n // When overlay is used and the host width has a value greater than 1px\n // set the circle diameter when possible incase the loading component was rendered in a hidden state\n if (this.isOverlay() && this._hostHeight() > 1 && this.animation) {\n this._setCircleDiameter();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n getHeight(): string | undefined {\n // Ignore height if style is `overlay` or `fullscreen`.\n // Add height if child elements have a height and style is `none`, else return default height.\n if (this.isOverlay() || this.isFullScreen()) {\n return undefined;\n } else {\n return this.height ? `${this.height}px` : '150px';\n }\n }\n\n getCircleDiameter(): number {\n return this._circleDiameter;\n }\n\n getCircleStrokeWidth(): number {\n // we calculate the stroke width by setting it as 10% of its diameter\n const strokeWidth: number = this.getCircleDiameter() / 10;\n return Math.abs(strokeWidth);\n }\n\n isCircular(): boolean {\n return this.type === LoadingType.Circular;\n }\n\n isLinear(): boolean {\n return this.type === LoadingType.Linear;\n }\n\n isFullScreen(): boolean {\n return this.style === LoadingStyle.FullScreen;\n }\n\n isOverlay(): boolean {\n return this.style === LoadingStyle.Overlay;\n }\n\n /**\n * Starts in animation and returns an observable for completition event.\n */\n show(): void {\n /* need to switch back to the selected mode, so we have saved it in another variable\n * and then recover it. (issue with protractor)\n */\n this._mode = this._defaultMode;\n // Set values before the animations starts\n this._setCircleDiameter();\n // Check for changes for `OnPush` change detection\n this.animation = true;\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Starts out animation and returns an observable for completition event.\n */\n hide(): void {\n this.animation = false;\n /* need to switch back and forth from determinate/indeterminate so the setInterval()\n * inside mat-progress-spinner stops and protractor doesnt timeout waiting to sync.\n */\n this._mode = LoadingMode.Determinate;\n // Check for changes for `OnPush` change detection\n /* little hack to reset the loader value and animation before removing it from DOM\n * else, the loader will appear with prev value when its registered again\n * and will do an animation going prev value to 0.\n */\n this.value = 0;\n // Check for changes for `OnPush` change detection\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Calculate the proper diameter for the circle and set it\n */\n private _setCircleDiameter(): void {\n // we set a default diameter of 100 since this is the default in material\n let diameter: number = TD_CIRCLE_DIAMETER;\n // if height is provided, then we take that as diameter\n if (this.height) {\n diameter = this.height;\n // else if its not provided, then we take the host height\n } else if (this.height === undefined) {\n diameter = this._hostHeight();\n }\n // if the diameter is over TD_CIRCLE_DIAMETER, we set TD_CIRCLE_DIAMETER\n if (diameter <= TD_CIRCLE_DIAMETER) {\n this._circleDiameter = Math.floor(diameter);\n } else {\n this._circleDiameter = TD_CIRCLE_DIAMETER;\n }\n }\n\n /**\n * Returns the host height of the loading component\n */\n private _hostHeight(): number {\n if (<HTMLElement>this._elementRef.nativeElement) {\n return (<HTMLElement>(\n this._elementRef.nativeElement\n )).getBoundingClientRect().height;\n }\n return 0;\n }\n}\n","import {\n Injectable,\n ComponentFactoryResolver,\n Provider,\n SkipSelf,\n Optional,\n EmbeddedViewRef,\n} from '@angular/core';\nimport {\n Injector,\n ComponentRef,\n ViewContainerRef,\n TemplateRef,\n} from '@angular/core';\nimport { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\n\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport { TdLoadingContext } from '../directives/loading.directive';\nimport { TdLoadingComponent, LoadingStyle } from '../loading.component';\nimport { ITdLoadingConfig } from './loading.service';\n\nexport interface IInternalLoadingOptions extends ITdLoadingConfig {\n height?: number;\n style?: LoadingStyle;\n}\n\nexport interface ILoadingRef {\n observable: Observable<any>;\n componentRef?: ComponentRef<any>;\n subject: Subject<any>;\n times: number;\n}\n\n/**\n * NOTE: @internal usage only.\n */\n@Injectable()\nexport class TdLoadingFactory {\n constructor(\n private _componentFactoryResolver: ComponentFactoryResolver,\n private _overlay: Overlay,\n private _injector: Injector\n ) {}\n\n /**\n * Uses material `Overlay` services to create a DOM element and attach the loading component\n * into it. Leveraging the state and configuration from it.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createFullScreenComponent(options: ITdLoadingConfig): ILoadingRef {\n (<IInternalLoadingOptions>options).height = undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.FullScreen;\n const loadingRef: ILoadingRef = this._initializeContext();\n let loading = false;\n let overlayRef: OverlayRef;\n loadingRef.observable\n .pipe(distinctUntilChanged())\n .subscribe((registered: number) => {\n if (registered > 0 && !loading) {\n loading = true;\n overlayRef = this._createOverlay();\n loadingRef.componentRef = overlayRef.attach(\n new ComponentPortal(TdLoadingComponent)\n );\n this._mapOptions(options, loadingRef.componentRef?.instance);\n loadingRef.componentRef?.instance.show();\n loadingRef.componentRef?.changeDetectorRef.detectChanges();\n } else if (registered <= 0 && loading) {\n loading = false;\n loadingRef.componentRef?.instance.hide();\n loadingRef.componentRef?.destroy();\n overlayRef.detach();\n overlayRef.dispose();\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a loading component dynamically and attaches it into the given viewContainerRef.\n * Leverages TemplatePortals from material to inject the template inside of it so it fits\n * perfectly when overlaying it.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createOverlayComponent(\n options: ITdLoadingConfig,\n viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<object>\n ): ILoadingRef {\n (<IInternalLoadingOptions>options).height = undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.Overlay;\n const loadingRef: ILoadingRef = this._createComponent(options);\n let loading = false;\n\n if (loadingRef.componentRef) {\n loadingRef.componentRef.instance.content = new TemplatePortal(\n templateRef,\n viewContainerRef\n );\n viewContainerRef.clear();\n viewContainerRef.insert(loadingRef.componentRef?.hostView, 0);\n }\n\n loadingRef.observable\n .pipe(distinctUntilChanged())\n .subscribe((registered: number) => {\n if (registered > 0 && !loading) {\n loading = true;\n loadingRef.componentRef?.instance.show();\n } else if (registered <= 0 && loading) {\n loading = false;\n loadingRef.componentRef?.instance.hide();\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a loading component dynamically and attaches it into the given viewContainerRef.\n * Replaces the template with the loading component depending if it was registered or resolved.\n *\n * Saves a reference in context to be called when registering/resolving the loading element.\n */\n public createReplaceComponent(\n options: ITdLoadingConfig,\n viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<object>,\n context: TdLoadingContext\n ): ILoadingRef {\n const nativeElement: HTMLElement = <HTMLElement>(\n templateRef.elementRef.nativeElement\n );\n (<IInternalLoadingOptions>options).height = nativeElement.nextElementSibling\n ? nativeElement.nextElementSibling.scrollHeight\n : undefined;\n (<IInternalLoadingOptions>options).style = LoadingStyle.None;\n const loadingRef: ILoadingRef = this._createComponent(options);\n let loading = false;\n // passing context so when the template is attached, we can keep the reference of the variables\n const contentRef: EmbeddedViewRef<object> =\n viewContainerRef.createEmbeddedView(templateRef, context);\n loadingRef.observable\n .pipe(distinctUntilChanged())\n .subscribe((registered: number) => {\n if (registered > 0 && !loading && loadingRef.componentRef) {\n loading = true;\n // detach the content and attach the loader if loader is there\n const index: number = viewContainerRef.indexOf(\n loadingRef.componentRef.hostView\n );\n if (index < 0) {\n viewContainerRef.detach(viewContainerRef.indexOf(contentRef));\n viewContainerRef.insert(loadingRef.componentRef.hostView, 0);\n }\n loadingRef.componentRef?.instance.show();\n } else if (registered <= 0 && loading && loadingRef.componentRef) {\n loading = false;\n loadingRef.componentRef?.instance.hide();\n // detach loader and attach the content if content is there\n const index: number = viewContainerRef.indexOf(contentRef);\n if (index < 0) {\n viewContainerRef.detach(\n viewContainerRef.indexOf(loadingRef.componentRef.hostView)\n );\n viewContainerRef.insert(contentRef, 0);\n }\n /**\n * Need to call \"markForCheck\" and \"detectChanges\" on attached template, so its detected by parent component when attached\n * with \"OnPush\" change detection\n */\n contentRef.detectChanges();\n contentRef.markForCheck();\n }\n });\n return loadingRef;\n }\n\n /**\n * Creates a fullscreen overlay for the loading usage.\n */\n private _createOverlay(): OverlayRef {\n const state: OverlayConfig = new OverlayConfig();\n state.hasBackdrop = false;\n state.positionStrategy = this._overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n return this._overlay.create(state);\n }\n\n /**\n * Creates a generic component dynamically waiting to be attached to a viewContainerRef.\n */\n private _createComponent(options: IInternalLoadingOptions): ILoadingRef {\n const compRef: ILoadingRef = this._initializeContext();\n compRef.componentRef = this._componentFactoryResolver\n .resolveComponentFactory(TdLoadingComponent)\n .create(this._injector);\n this._mapOptions(options, compRef.componentRef.instance);\n return compRef;\n }\n\n /**\n * Initialize context for loading component.\n */\n private _initializeContext(): ILoadingRef {\n const subject: Subject<any> = new Subject<any>();\n return {\n observable: subject.asObservable(),\n subject,\n componentRef: undefined,\n times: 0,\n };\n }\n\n /**\n * Maps configuration to the loading component instance.\n */\n private _mapOptions(\n options: IInternalLoadingOptions,\n instance: TdLoadingComponent\n ): void {\n if (options.style) {\n instance.style = options.style;\n }\n\n if (options.type !== undefined) {\n instance.type = options.type;\n }\n if (options.height !== undefined) {\n instance.height = options.height;\n }\n if (options.mode !== undefined) {\n instance.mode = options.mode;\n }\n if (options.color !== undefined) {\n instance.color = options.color;\n }\n }\n}\n\nexport function LOADING_FACTORY_PROVIDER_FACTORY(\n parent: TdLoadingFactory,\n componentFactoryResolver: ComponentFactoryResolver,\n overlay: Overlay,\n injector: Injector\n): TdLoadingFactory {\n return (\n parent || new TdLoadingFactory(componentFactoryResolver, overlay, injector)\n );\n}\n\nexport const LOADING_FACTORY_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdLoadingFactory,\n deps: [\n [new Optional(), new SkipSelf(), TdLoadingFactory],\n ComponentFactoryResolver,\n Overlay,\n Injector,\n ],\n useFactory: LOADING_FACTORY_PROVIDER_FACTORY,\n};\n","import { Injectable, Provider, SkipSelf, Optional } from '@angular/core';\nimport { ViewContainerRef, TemplateRef } from '@angular/core';\n\nimport { TdLoadingContext } from '../directives/loading.directive';\nimport {\n TdLoadingComponent,\n LoadingMode,\n LoadingStrategy,\n LoadingType,\n} from '../loading.component';\nimport { TdLoadingFactory, ILoadingRef } from './loading.factory';\n\nexport interface ITdLoadingConfig {\n name: string;\n type?: LoadingType;\n mode?: LoadingMode;\n color?: 'primary' | 'accent' | 'warn';\n}\n\nexport class TdLoadingConfig implements ITdLoadingConfig {\n name: string;\n type?: LoadingType;\n mode?: LoadingMode;\n color?: 'primary' | 'accent' | 'warn';\n\n constructor(config: ITdLoadingConfig) {\n this.name = config.name;\n if (!this.name) {\n throw Error('Name is required for [TdLoading] configuration.');\n }\n this.mode = config.mode ? config.mode : LoadingMode.Indeterminate;\n this.type = config.type ? config.type : LoadingType.Circular;\n this.color = config.color ? config.color : 'primary';\n }\n}\n\nexport interface ITdLoadingDirectiveConfig extends ITdLoadingConfig {\n strategy?: LoadingStrategy;\n}\n\nexport class TdLoadingDirectiveConfig\n extends TdLoadingConfig\n implements ITdLoadingDirectiveConfig\n{\n strategy: LoadingStrategy;\n\n constructor(config: ITdLoadingDirectiveConfig) {\n super(config);\n this.strategy = config.strategy ? config.strategy : LoadingStrategy.Replace;\n }\n}\n\n@Injectable()\nexport class TdLoadingService {\n private _context: { [key: string]: ILoadingRef } = {};\n private _timeouts: { [key: string]: any } = {};\n\n constructor(private _loadingFactory: TdLoadingFactory) {\n this.create({\n name: 'td-loading-main',\n });\n }\n\n /**\n * params:\n * - config: ILoadingDirectiveConfig\n * - viewContainerRef: ViewContainerRef\n * - templateRef: TemplateRef<Object>\n *\n * Creates an replace loading mask and attaches it to the viewContainerRef.\n * Replaces the templateRef with the mask when a request is registered on it.\n *\n * NOTE: @internal usage only.\n */\n createComponent(\n config: ITdLoadingDirectiveConfig,\n viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<object>,\n context: TdLoadingContext\n ): ILoadingRef {\n const directiveConfig: TdLoadingDirectiveConfig =\n new TdLoadingDirectiveConfig(config);\n if (this._context[directiveConfig.name]) {\n throw Error(\n `Name duplication: [TdLoading] directive has a name conflict with ${directiveConfig.name}.`\n );\n }\n if (directiveConfig.strategy === LoadingStrategy.Overlay) {\n this._context[directiveConfig.name] =\n this._loadingFactory.createOverlayComponent(\n directiveConfig,\n viewContainerRef,\n templateRef\n );\n } else {\n this._context[directiveConfig.name] =\n this._loadingFactory.createReplaceComponent(\n directiveConfig,\n viewContainerRef,\n templateRef,\n context\n );\n }\n return this._context[directiveConfig.name];\n }\n\n /**\n * params:\n * - config: ITdLoadingConfig\n *\n * Creates a fullscreen loading mask and attaches it to the DOM with the given configuration.\n * Only displayed when the mask has a request registered on it.\n */\n public create(config: ITdLoadingConfig): void {\n const fullscreenConfig: TdLoadingConfig = new TdLoadingConfig(config);\n this.removeComponent(fullscreenConfig.name);\n this._context[fullscreenConfig.name] =\n this._loadingFactory.createFullScreenComponent(fullscreenConfig);\n }\n\n /**\n * params:\n * - name: string\n *\n * Removes `loading` component from service context.\n */\n public removeComponent(name: string): void {\n if (this._context[name]) {\n this._context[name].subject.unsubscribe();\n if (this._context[name].componentRef) {\n this._context[name].componentRef?.destroy();\n }\n delete this._context[name];\n }\n }\n\n /**\n * params:\n * - name: string\n * - registers?: number\n * returns: true if successful\n *\n * Resolves a request for the loading mask referenced by the name parameter.\n * Can optionally pass registers argument to set a number of register calls.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.register()\n */\n public register(\n name: string = 'td-loading-main',\n registers: number = 1\n ): boolean {\n // try registering into the service if the loading component has been instanciated or if it exists.\n if (this._context[name]) {\n registers = registers < 1 ? 1 : registers;\n this._context[name].times += registers;\n this._context[name].subject.next(this._context[name].times);\n return true;\n } else {\n // if it doesnt exist, set a timeout so its registered after change detection happens\n // this in case \"register\" occured on the `ngOnInit` lifehook cycle.\n if (!this._timeouts[name]) {\n this._timeouts[name] = setTimeout(() => {\n this.register(name, registers);\n });\n } else {\n // if it timeout occured and still doesnt exist, it means the tiemout wasnt needed so we clear it.\n this._clearTimeout(name);\n }\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * - resolves?: number\n * returns: true if successful\n *\n * Resolves a request for the loading mask referenced by the name parameter.\n * Can optionally pass resolves argument to set a number of resolve calls.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.resolve()\n */\n public resolve(\n name: string = 'td-loading-main',\n resolves: number = 1\n ): boolean {\n // clear timeout if the loading component is \"resolved\" before its \"registered\"\n this._clearTimeout(name);\n if (this._context[name]) {\n resolves = resolves < 1 ? 1 : resolves;\n if (this._context[name].times) {\n let times: number = this._context[name].times;\n times -= resolves;\n this._context[name].times = times < 0 ? 0 : times;\n }\n this._context[name].subject?.next(this._context[name].times);\n return true;\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * returns: true if successful\n *\n * Resolves all request for the loading mask referenced by the name parameter.\n *\n * If no paramemeters are used, then default main mask will be used.\n *\n * e.g. loadingService.resolveAll()\n */\n public resolveAll(name: string = 'td-loading-main'): boolean {\n // clear timeout if the loading component is \"resolved\" before its \"registered\"\n this._clearTimeout(name);\n if (this._context[name]) {\n this._context[name].times = 0;\n this._context[name].subject?.next(this._context[name].times);\n return true;\n }\n return false;\n }\n\n /**\n * params:\n * - name: string\n * - value: number\n * returns: true if successful\n *\n * Set value on a loading mask referenced by the name parameter.\n * Usage only available if its mode is 'determinate' and if loading is showing.\n */\n public setValue(name: string, value: number): boolean {\n if (this._context[name]) {\n const instance: TdLoadingComponent =\n this._context[name].componentRef?.instance;\n if (instance.mode === LoadingMode.Determinate && instance.animation) {\n instance.value = value;\n return true;\n }\n }\n return false;\n }\n\n /**\n * Clears timeout linked to the name.\n * @param name Name of the loading component to be cleared\n */\n private _clearTimeout(name: string): void {\n clearTimeout(this._timeouts[name]);\n delete this._timeouts[name];\n }\n}\n\nexport function LOADING_PROVIDER_FACTORY(\n parent: TdLoadingService,\n loadingFactory: TdLoadingFactory\n): TdLoadingService {\n return parent || new TdLoadingService(loadingFactory);\n}\n\nexport const LOADING_PROVIDER: Provider = {\n // If there is already a service available, use that. Otherwise, provide a new one.\n provide: TdLoadingService,\n deps: [[new Optional(), new SkipSelf(), TdLoadingService], TdLoadingFactory],\n useFactory: LOADING_PROVIDER_FACTORY,\n};\n","import { Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { ViewContainerRef, TemplateRef } from '@angular/core';\n\nimport {\n LoadingType,\n LoadingMode,\n LoadingStrategy,\n} from '../loading.component';\nimport { TdLoadingService } from '../services/loading.service';\nimport { ILoadingRef } from '../services/loading.factory';\n\n/**\n * Context class for variable reference\n */\nexport class TdLoadingContext {\n public $implicit: any = undefined;\n public tdLoading: any = undefined;\n}\n\n// Constant for generation of the id for the next component\nlet TD_LOADING_NEXT_ID = 0;\n\n@Directive({\n selector: '[tdLoading]',\n})\nexport class TdLoadingDirective implements OnInit, OnDestroy {\n private _context: TdLoadingContext = new TdLoadingContext();\n private _loadingRef?: ILoadingRef;\n\n /**\n * tdLoading: string\n * Name reference of the loading mask, used to register/resolve requests to the mask.\n */\n @Input('tdLoading')\n name!: string;\n\n /**\n * tdLoadingUntil?: any\n * If its null, undefined or false it will be used to register requests to the mask.\n * Else if its any value that can be resolved as true, it will resolve the mask.\n * [name] is optional when using [until], but can still be used to register/resolve it manually.\n */\n @Input('tdLoadingUntil')\n set until(until: any) {\n if (!this.name) {\n this.name = 'td-loading-until-' + TD_LOADING_NEXT_ID++;\n }\n this._context.$implicit = this._context.tdLoading = until;\n if (!until) {\n this._loadingService.register(this.name);\n } else {\n this._loadingService.resolveAll(this.name);\n }\n }\n\n /**\n * tdLoadingType?: LoadingType or ['linear' | 'circular']\n * Sets the type of loading mask depending on value.\n * Defaults to [LoadingType.Circular | 'circular'].\n */\n @Input('tdLoadingType')\n type: LoadingType = LoadingType.Circular;\n\n /**\n * tdLoadingMode?: LoadingMode or ['determinate' | 'indeterminate']\n * Sets the mode of loading mask depending on value.\n * Defaults to [LoadingMode.Indeterminate | 'indeterminate'].\n */\n @Input('tdLoadingMode') mode: LoadingMode = LoadingMode.Indeterminate;\n\n /**\n * tdLoadingStrategy?: LoadingStrategy or ['replace' | 'overlay']\n * Sets the strategy of loading mask depending on value.\n * Defaults to [LoadingMode.Replace | 'replace'].\n */\n @Input('tdLoadingStrategy')\n strategy: LoadingStrategy.Overlay | LoadingStrategy.Replace =\n LoadingStrategy.Replace;\n\n /**\n * tdLoadingColor?: \"primary\" | \"accent\" | \"warn\"\n * Sets the theme color of the loading component. Defaults to \"primary\"\n */\n @Input('tdLoadingColor') color: 'primary' | 'accent' | 'warn' = 'primary';\n\n constructor(\n private _viewContainerRef: ViewContainerRef,\n private _templateRef: TemplateRef<TdLoadingContext>,\n private _loadingService: TdLoadingService\n ) {}\n\n /**\n * Registers component in the DOM, so it will be available when calling resolve/register.\n */\n ngOnInit(): void {\n this._registerComponent();\n }\n\n /**\n * Remove component when directive is destroyed.\n */\n ngOnDestroy(): void {\n this._loadingService.removeComponent(this.name);\n this._loadingRef = undefined;\n }\n\n /**\n * Creates [TdLoadingComponent] and attaches it to this directive's [ViewContainerRef].\n * Passes this directive's [TemplateRef] to modify DOM depending on loading `strategy`.\n */\n private _registerComponent(): void {\n if (!this.name) {\n throw new Error('Name is needed to register loading directive');\n }\n // Check if `TdLoadingComponent` has been created before trying to add one again.\n // There is a weird edge case when using `[routerLinkActive]` that calls the `ngOnInit` twice in a row\n if (!this._loadingRef) {\n this._loadingRef = this._loadingService.createComponent(\n {\n name: this.name,\n type: this.type,\n mode: this.mode,\n color: this.color,\n strategy: this.strategy,\n },\n this._viewContainerRef,\n this._templateRef,\n this._context\n );\n }\n }\n}\n","import { Type } from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport { LOADING_PROVIDER } from './services/loading.service';\nimport { LOADING_FACTORY_PROVIDER } from './services/loading.factory';\nimport { TdLoadingDirective } from './directives/loading.directive';\nimport { TdLoadingComponent } from './loading.component';\n\nconst TD_LOADING: Type<any>[] = [TdLoadingComponent, TdLoadingDirective];\n\n@NgModule({\n imports: [TD_LOADING],\n exports: [TD_LOADING],\n providers: [LOADING_FACTORY_PROVIDER, LOADING_PROVIDER],\n})\nexport class CovalentLoadingModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.TdLoadingFactory","i1.TdLoadingService"],"mappings":"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"}