{"version":3,"file":"covalent-core-loading.mjs","sources":["../tmp-esm2022/loading/loading.component.js","../tmp-esm2022/loading/services/loading.factory.js","../tmp-esm2022/loading/services/loading.service.js","../tmp-esm2022/loading/directives/loading.directive.js","../tmp-esm2022/loading/loading.module.js","../tmp-esm2022/loading/covalent-core-loading.js"],"sourcesContent":["import { Component, ChangeDetectorRef, ElementRef, inject, } from '@angular/core';\nimport { tdFadeInOutAnimation } from '@covalent/core/common';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nfunction TdLoadingComponent_mat_progress_spinner_2_Template(rf, ctx) { if (rf & 1) {\n    i0.ɵɵelement(0, \"mat-progress-spinner\", 5);\n} if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"mode\", ctx_r0.mode)(\"value\", ctx_r0.value)(\"color\", ctx_r0.color)(\"diameter\", ctx_r0.getCircleDiameter())(\"strokeWidth\", ctx_r0.getCircleStrokeWidth());\n} }\nfunction TdLoadingComponent_mat_progress_bar_3_Template(rf, ctx) { if (rf & 1) {\n    i0.ɵɵelement(0, \"mat-progress-bar\", 6);\n} if (rf & 2) {\n    const ctx_r0 = i0.ɵɵnextContext();\n    i0.ɵɵproperty(\"mode\", ctx_r0.mode)(\"value\", ctx_r0.value)(\"color\", ctx_r0.color);\n} }\nfunction TdLoadingComponent_ng_template_4_Template(rf, ctx) { }\nexport var LoadingType;\n(function (LoadingType) {\n    LoadingType[\"Circular\"] = \"circular\";\n    LoadingType[\"Linear\"] = \"linear\";\n})(LoadingType || (LoadingType = {}));\nexport var LoadingMode;\n(function (LoadingMode) {\n    LoadingMode[\"Determinate\"] = \"determinate\";\n    LoadingMode[\"Indeterminate\"] = \"indeterminate\";\n})(LoadingMode || (LoadingMode = {}));\nexport var LoadingStrategy;\n(function (LoadingStrategy) {\n    LoadingStrategy[\"Overlay\"] = \"overlay\";\n    LoadingStrategy[\"Replace\"] = \"replace\";\n})(LoadingStrategy || (LoadingStrategy = {}));\nexport var LoadingStyle;\n(function (LoadingStyle) {\n    LoadingStyle[\"FullScreen\"] = \"fullscreen\";\n    LoadingStyle[\"Overlay\"] = \"overlay\";\n    LoadingStyle[\"None\"] = \"none\";\n})(LoadingStyle || (LoadingStyle = {}));\nexport const TD_CIRCLE_DIAMETER = 40;\nexport class TdLoadingComponent {\n    _elementRef = inject(ElementRef);\n    _changeDetectorRef = inject(ChangeDetectorRef);\n    _mode = LoadingMode.Indeterminate;\n    _defaultMode = LoadingMode.Indeterminate;\n    _value = 0;\n    _circleDiameter = TD_CIRCLE_DIAMETER;\n    /**\n     * Flag for animation\n     */\n    animation = false;\n    /**\n     * Content injected into loading component.\n     */\n    content;\n    /**\n     * Sets mode of [TdLoadingComponent] to LoadingMode.Determinate or LoadingMode.Indeterminate\n     */\n    set mode(mode) {\n        this._defaultMode = mode;\n    }\n    get mode() {\n        return this._mode;\n    }\n    /**\n     * Sets value of [TdLoadingComponent] if mode is 'LoadingMode.Determinate'\n     */\n    set value(value) {\n        this._value = value;\n        // Check for changes for `OnPush` change detection\n        this._changeDetectorRef.markForCheck();\n    }\n    get value() {\n        return this._value;\n    }\n    style = LoadingStyle.None;\n    /**\n     * height: number\n     * Sets height of [TdLoadingComponent].\n     */\n    height = 100;\n    /**\n     * type: LoadingType\n     * Sets type of [TdLoadingComponent] rendered.\n     */\n    type = LoadingType.Circular;\n    /**\n     * color: primary' | 'accent' | 'warn'\n     * Sets theme color of [TdLoadingComponent] rendered.\n     */\n    color = 'primary';\n    ngDoCheck() {\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    getHeight() {\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        }\n        else {\n            return this.height ? `${this.height}px` : '150px';\n        }\n    }\n    getCircleDiameter() {\n        return this._circleDiameter;\n    }\n    getCircleStrokeWidth() {\n        // we calculate the stroke width by setting it as 10% of its diameter\n        const strokeWidth = this.getCircleDiameter() / 10;\n        return Math.abs(strokeWidth);\n    }\n    isCircular() {\n        return this.type === LoadingType.Circular;\n    }\n    isLinear() {\n        return this.type === LoadingType.Linear;\n    }\n    isFullScreen() {\n        return this.style === LoadingStyle.FullScreen;\n    }\n    isOverlay() {\n        return this.style === LoadingStyle.Overlay;\n    }\n    /**\n     * Starts in animation and returns an observable for completition event.\n     */\n    show() {\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     * Starts out animation and returns an observable for completition event.\n     */\n    hide() {\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     * Calculate the proper diameter for the circle and set it\n     */\n    _setCircleDiameter() {\n        // we set a default diameter of 100 since this is the default in material\n        let diameter = 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        }\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        }\n        else {\n            this._circleDiameter = TD_CIRCLE_DIAMETER;\n        }\n    }\n    /**\n     * Returns the host height of the loading component\n     */\n    _hostHeight() {\n        if (this._elementRef.nativeElement) {\n            return (this._elementRef.nativeElement).getBoundingClientRect().height;\n        }\n        return 0;\n    }\n    static ɵfac = function TdLoadingComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdLoadingComponent)(); };\n    static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdLoadingComponent, selectors: [[\"td-loading\"]], decls: 5, vars: 14, consts: [[1, \"td-loading-wrapper\"], [1, \"td-loading\"], [3, \"mode\", \"value\", \"color\", \"diameter\", \"strokeWidth\", 4, \"ngIf\"], [3, \"mode\", \"value\", \"color\", 4, \"ngIf\"], [3, \"cdkPortalOutlet\"], [3, \"mode\", \"value\", \"color\", \"diameter\", \"strokeWidth\"], [3, \"mode\", \"value\", \"color\"]], template: function TdLoadingComponent_Template(rf, ctx) { if (rf & 1) {\n            i0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n            i0.ɵɵtemplate(2, TdLoadingComponent_mat_progress_spinner_2_Template, 1, 5, \"mat-progress-spinner\", 2)(3, TdLoadingComponent_mat_progress_bar_3_Template, 1, 3, \"mat-progress-bar\", 3);\n            i0.ɵɵelementEnd();\n            i0.ɵɵtemplate(4, TdLoadingComponent_ng_template_4_Template, 0, 0, \"ng-template\", 4);\n            i0.ɵɵelementEnd();\n        } if (rf & 2) {\n            i0.ɵɵstyleProp(\"min-height\", ctx.getHeight());\n            i0.ɵɵclassProp(\"td-overlay-circular\", (ctx.isOverlay() || ctx.isFullScreen()) && !ctx.isLinear())(\"td-overlay\", ctx.isOverlay() || ctx.isFullScreen())(\"td-fullscreen\", ctx.isFullScreen());\n            i0.ɵɵadvance();\n            i0.ɵɵstyleProp(\"min-height\", ctx.getHeight());\n            i0.ɵɵproperty(\"@tdFadeInOut\", ctx.animation);\n            i0.ɵɵadvance();\n            i0.ɵɵproperty(\"ngIf\", ctx.isCircular());\n            i0.ɵɵadvance();\n            i0.ɵɵproperty(\"ngIf\", ctx.isLinear());\n            i0.ɵɵadvance();\n            i0.ɵɵproperty(\"cdkPortalOutlet\", ctx.content);\n        } }, dependencies: [CommonModule, i1.NgIf, MatProgressBar, MatProgressSpinner, CdkPortalOutlet], styles: [\".td-loading-wrapper[_ngcontent-%COMP%]{position:relative;display:block}.td-loading-wrapper.td-fullscreen[_ngcontent-%COMP%]{position:inherit}.td-loading-wrapper[_ngcontent-%COMP%]   .td-loading[_ngcontent-%COMP%]{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;align-content:center;max-width:100%;justify-content:center;flex:1}.td-loading-wrapper.td-overlay[_ngcontent-%COMP%]   .td-loading[_ngcontent-%COMP%]{position:absolute;margin:0;top:0;left:0;right:0;z-index:1000}.td-loading-wrapper.td-overlay[_ngcontent-%COMP%]   .td-loading[_ngcontent-%COMP%]   mat-progress-bar[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0}.td-loading-wrapper.td-overlay-circular[_ngcontent-%COMP%]   .td-loading[_ngcontent-%COMP%]{bottom:0}\"], data: { animation: [tdFadeInOutAnimation] } });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdLoadingComponent, [{\n        type: Component,\n        args: [{ selector: 'td-loading', animations: [tdFadeInOutAnimation], imports: [CommonModule, MatProgressBar, MatProgressSpinner, CdkPortalOutlet], template: \"<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\", styles: [\".td-loading-wrapper{position:relative;display:block}.td-loading-wrapper.td-fullscreen{position:inherit}.td-loading-wrapper .td-loading{box-sizing:border-box;display:flex;flex-direction:row;align-items:center;align-content:center;max-width:100%;justify-content:center;flex:1}.td-loading-wrapper.td-overlay .td-loading{position:absolute;margin:0;top:0;left:0;right:0;z-index:1000}.td-loading-wrapper.td-overlay .td-loading mat-progress-bar{position:absolute;top:0;left:0;right:0}.td-loading-wrapper.td-overlay-circular .td-loading{bottom:0}\\n\"] }]\n    }], null, null); })();\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassDebugInfo(TdLoadingComponent, { className: \"TdLoadingComponent\", filePath: \"loading.component.ts\", lineNumber: 44 }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvbG9hZGluZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvbG9hZGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixVQUFVLEVBRVYsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztJQ0MzQywwQ0FPd0I7OztJQUR0QixBQURBLEFBREEsQUFEQSxBQURBLGtDQUFhLHVCQUNFLHVCQUNBLHdDQUNpQiw4Q0FDTTs7O0lBRXhDLHNDQUtvQjs7O0lBRGxCLEFBREEsQUFEQSxrQ0FBYSx1QkFDRSx1QkFDQTs7O0FEWHJCLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsb0NBQXFCLENBQUE7SUFDckIsZ0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQiwwQ0FBMkIsQ0FBQTtJQUMzQiw4Q0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBSFcsV0FBVyxLQUFYLFdBQVcsUUFHdEI7QUFFRCxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQs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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIERvQ2hlY2ssXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0ZEZhZGVJbk91dEFuaW1hdGlvbiB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2NvbW1vbic7XG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmV4cG9ydCBlbnVtIExvYWRpbmdUeXBlIHtcbiAgQ2lyY3VsYXIgPSAnY2lyY3VsYXInLFxuICBMaW5lYXIgPSAnbGluZWFyJyxcbn1cblxuZXhwb3J0IGVudW0gTG9hZGluZ01vZGUge1xuICBEZXRlcm1pbmF0ZSA9ICdkZXRlcm1pbmF0ZScsXG4gIEluZGV0ZXJtaW5hdGUgPSAnaW5kZXRlcm1pbmF0ZScsXG59XG5cbmV4cG9ydCBlbnVtIExvYWRpbmdTdHJhdGVneSB7XG4gIE92ZXJsYXkgPSAnb3ZlcmxheScsXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBlbnVtIExvYWRpbmdTdHlsZSB7XG4gIEZ1bGxTY3JlZW4gPSAnZnVsbHNjcmVlbicsXG4gIE92ZXJsYXkgPSAnb3ZlcmxheScsXG4gIE5vbmUgPSAnbm9uZScsXG59XG5cbmV4cG9ydCBjb25zdCBURF9DSVJDTEVfRElBTUVURVIgPSA0MDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGQtbG9hZGluZycsXG4gIHN0eWxlVXJsczogWycuL2xvYWRpbmcuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvYWRpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBhbmltYXRpb25zOiBbdGRGYWRlSW5PdXRBbmltYXRpb25dLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRQcm9ncmVzc0JhciwgTWF0UHJvZ3Jlc3NTcGlubmVyLCBDZGtQb3J0YWxPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBUZExvYWRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgcHJpdmF0ZSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIHByaXZhdGUgX21vZGU6IExvYWRpbmdNb2RlID0gTG9hZGluZ01vZGUuSW5kZXRlcm1pbmF0ZTtcbiAgcHJpdmF0ZSBfZGVmYXVsdE1vZGU6IExvYWRpbmdNb2RlID0gTG9hZGluZ01vZGUuSW5kZXRlcm1pbmF0ZTtcbiAgcHJpdmF0ZSBfdmFsdWUgPSAwO1xuICBwcml2YXRlIF9jaXJjbGVEaWFtZXRlcjogbnVtYmVyID0gVERfQ0lSQ0xFX0RJQU1FVEVSO1xuXG4gIC8qKlxuICAgKiBGbGFnIGZvciBhbmltYXRpb25cbiAgICovXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb250ZW50IGluamVjdGVkIGludG8gbG9hZGluZyBjb21wb25lbnQuXG4gICAqL1xuICBjb250ZW50ITogVGVtcGxhdGVQb3J0YWw8YW55PjtcblxuICAvKipcbiAgICogU2V0cyBtb2RlIG9mIFtUZExvYWRpbmdDb21wb25lbnRdIHRvIExvYWRpbmdNb2RlLkRldGVybWluYXRlIG9yIExvYWRpbmdNb2RlLkluZGV0ZXJtaW5hdGVcbiAgICovXG4gIHNldCBtb2RlKG1vZGU6IExvYWRpbmdNb2RlKSB7XG4gICAgdGhpcy5fZGVmYXVsdE1vZGUgPSBtb2RlO1xuICB9XG4gIGdldCBtb2RlKCk6IExvYWRpbmdNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHZhbHVlIG9mIFtUZExvYWRpbmdDb21wb25lbnRdIGlmIG1vZGUgaXMgJ0xvYWRpbmdNb2RlLkRldGVybWluYXRlJ1xuICAgKi9cbiAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIGZvciBgT25QdXNoYCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3R5bGU6IExvYWRpbmdTdHlsZSA9IExvYWRpbmdTdHlsZS5Ob25lO1xuXG4gIC8qKlxuICAgKiBoZWlnaHQ6IG51bWJlclxuICAgKiBTZXRzIGhlaWdodCBvZiBbVGRMb2FkaW5nQ29tcG9uZW50XS5cbiAgICovXG4gIGhlaWdodCA9IDEwMDtcblxuICAvKipcbiAgICogdHlwZTogTG9hZGluZ1R5cGVcbiAgICogU2V0cyB0eXBlIG9mIFtUZExvYWRpbmdDb21wb25lbnRdIHJlbmRlcmVkLlxuICAgKi9cbiAgdHlwZTogTG9hZGluZ1R5cGUgPSBMb2FkaW5nVHlwZS5DaXJjdWxhcjtcblxuICAvKipcbiAgICogY29sb3I6IHByaW1hcnknIHwgJ2FjY2VudCcgfCAnd2FybidcbiAgICogU2V0cyB0aGVtZSBjb2xvciBvZiBbVGRMb2FkaW5nQ29tcG9uZW50XSByZW5kZXJlZC5cbiAgICovXG4gIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyA9ICdwcmltYXJ5JztcblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgLy8gV2hlbiBvdmVybGF5IGlzIHVzZWQgYW5kIHRoZSBob3N0IHdpZHRoIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAxcHhcbiAgICAvLyBzZXQgdGhlIGNpcmNsZSBkaWFtZXRlciB3aGVuIHBvc3NpYmxlIGluY2FzZSB0aGUgbG9hZGluZyBjb21wb25lbnQgd2FzIHJlbmRlcmVkIGluIGEgaGlkZGVuIHN0YXRlXG4gICAgaWYgKHRoaXMuaXNPdmVybGF5KCkgJiYgdGhpcy5faG9zdEhlaWdodCgpID4gMSAmJiB0aGlzLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fc2V0Q2lyY2xlRGlhbWV0ZXIoKTtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldEhlaWdodCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIElnbm9yZSBoZWlnaHQgaWYgc3R5bGUgaXMgYG92ZXJsYXlgIG9yIGBmdWxsc2NyZWVuYC5cbiAgICAvLyBBZGQgaGVpZ2h0IGlmIGNoaWxkIGVsZW1lbnRzIGhhdmUgYSBoZWlnaHQgYW5kIHN0eWxlIGlzIGBub25lYCwgZWxzZSByZXR1cm4gZGVmYXVsdCBoZWlnaHQuXG4gICAgaWYgKHRoaXMuaXNPdmVybGF5KCkgfHwgdGhpcy5pc0Z1bGxTY3JlZW4oKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ID8gYCR7dGhpcy5oZWlnaHR9cHhgIDogJzE1MHB4JztcbiAgICB9XG4gIH1cblxuICBnZXRDaXJjbGVEaWFtZXRlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jaXJjbGVEaWFtZXRlcjtcbiAgfVxuXG4gIGdldENpcmNsZVN0cm9rZVdpZHRoKCk6IG51bWJlciB7XG4gICAgLy8gd2UgY2FsY3VsYXRlIHRoZSBzdHJva2Ugd2lkdGggYnkgc2V0dGluZyBpdCBhcyAxMCUgb2YgaXRzIGRpYW1ldGVyXG4gICAgY29uc3Qgc3Ryb2tlV2lkdGg6IG51bWJlciA9IHRoaXMuZ2V0Q2lyY2xlRGlhbWV0ZXIoKSAvIDEwO1xuICAgIHJldHVybiBNYXRoLmFicyhzdHJva2VXaWR0aCk7XG4gIH1cblxuICBpc0NpcmN1bGFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IExvYWRpbmdUeXBlLkNpcmN1bGFyO1xuICB9XG5cbiAgaXNMaW5lYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gTG9hZGluZ1R5cGUuTGluZWFyO1xuICB9XG5cbiAgaXNGdWxsU2NyZWVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0eWxlID09PSBMb2FkaW5nU3R5bGUuRnVsbFNjcmVlbjtcbiAgfVxuXG4gIGlzT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZSA9PT0gTG9hZGluZ1N0eWxlLk92ZXJsYXk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGluIGFuaW1hdGlvbiBhbmQgcmV0dXJucyBhbiBvYnNlcnZhYmxlIGZvciBjb21wbGV0aXRpb24gZXZlbnQuXG4gICAqL1xuICBzaG93KCk6IHZvaWQge1xuICAgIC8qIG5lZWQgdG8gc3dpdGNoIGJhY2sgdG8gdGhlIHNlbGVjdGVkIG1vZGUsIHNvIHdlIGhhdmUgc2F2ZWQgaXQgaW4gYW5vdGhlciB2YXJpYWJsZVxuICAgICAqICBhbmQgdGhlbiByZWNvdmVyIGl0LiAoaXNzdWUgd2l0aCBwcm90cmFjdG9yKVxuICAgICAqL1xuICAgIHRoaXMuX21vZGUgPSB0aGlzLl9kZWZhdWx0TW9kZTtcbiAgICAvLyBTZXQgdmFsdWVzIGJlZm9yZSB0aGUgYW5pbWF0aW9ucyBzdGFydHNcbiAgICB0aGlzLl9zZXRDaXJjbGVEaWFtZXRlcigpO1xuICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIGZvciBgT25QdXNoYCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBvdXQgYW5pbWF0aW9uIGFuZCByZXR1cm5zIGFuIG9ic2VydmFibGUgZm9yIGNvbXBsZXRpdGlvbiBldmVudC5cbiAgICovXG4gIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAvKiBuZWVkIHRvIHN3aXRjaCBiYWNrIGFuZCBmb3J0aCBmcm9tIGRldGVybWluYXRlL2luZGV0ZXJtaW5hdGUgc28gdGhlIHNldEludGVydmFsKClcbiAgICAgKiBpbnNpZGUgbWF0LXByb2dyZXNzLXNwaW5uZXIgc3RvcHMgYW5kIHByb3RyYWN0b3IgZG9lc250IHRpbWVvdXQgd2FpdGluZyB0byBzeW5jLlxuICAgICAqL1xuICAgIHRoaXMuX21vZGUgPSBMb2FkaW5nTW9kZS5EZXRlcm1pbmF0ZTtcbiAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyBmb3IgYE9uUHVzaGAgY2hhbmdlIGRldGVjdGlvblxuICAgIC8qIGxpdHRsZSBoYWNrIHRvIHJlc2V0IHRoZSBsb2FkZXIgdmFsdWUgYW5kIGFuaW1hdGlvbiBiZWZvcmUgcmVtb3ZpbmcgaXQgZnJvbSBET01cbiAgICAgKiBlbHNlLCB0aGUgbG9hZGVyIHdpbGwgYXBwZWFyIHdpdGggcHJldiB2YWx1ZSB3aGVuIGl0cyByZWdpc3RlcmVkIGFnYWluXG4gICAgICogYW5kIHdpbGwgZG8gYW4gYW5pbWF0aW9uIGdvaW5nIHByZXYgdmFsdWUgdG8gMC5cbiAgICAgKi9cbiAgICB0aGlzLnZhbHVlID0gMDtcbiAgICAvLyBDaGVjayBmb3IgY2hhbmdlcyBmb3IgYE9uUHVzaGAgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJvcGVyIGRpYW1ldGVyIGZvciB0aGUgY2lyY2xlIGFuZCBzZXQgaXRcbiAgICovXG4gIHByaXZhdGUgX3NldENpcmNsZURpYW1ldGVyKCk6IHZvaWQge1xuICAgIC8vIHdlIHNldCBhIGRlZmF1bHQgZGlhbWV0ZXIgb2YgMTAwIHNpbmNlIHRoaXMgaXMgdGhlIGRlZmF1bHQgaW4gbWF0ZXJpYWxcbiAgICBsZXQgZGlhbWV0ZXI6IG51bWJlciA9IFREX0NJUkNMRV9ESUFNRVRFUjtcbiAgICAvLyBpZiBoZWlnaHQgaXMgcHJvdmlkZWQsIHRoZW4gd2UgdGFrZSB0aGF0IGFzIGRpYW1ldGVyXG4gICAgaWYgKHRoaXMuaGVpZ2h0KSB7XG4gICAgICBkaWFtZXRlciA9IHRoaXMuaGVpZ2h0O1xuICAgICAgLy8gZWxzZSBpZiBpdHMgbm90IHByb3ZpZGVkLCB0aGVuIHdlIHRha2UgdGhlIGhvc3QgaGVpZ2h0XG4gICAgfSBlbHNlIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaWFtZXRlciA9IHRoaXMuX2hvc3RIZWlnaHQoKTtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGRpYW1ldGVyIGlzIG92ZXIgVERfQ0lSQ0xFX0RJQU1FVEVSLCB3ZSBzZXQgVERfQ0lSQ0xFX0RJQU1FVEVSXG4gICAgaWYgKGRpYW1ldGVyIDw9IFREX0NJUkNMRV9ESUFNRVRFUikge1xuICAgICAgdGhpcy5fY2lyY2xlRGlhbWV0ZXIgPSBNYXRoLmZsb29yKGRpYW1ldGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2lyY2xlRGlhbWV0ZXIgPSBURF9DSVJDTEVfRElBTUVURVI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGhvc3QgaGVpZ2h0IG9mIHRoZSBsb2FkaW5nIGNvbXBvbmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfaG9zdEhlaWdodCgpOiBudW1iZXIge1xuICAgIGlmICg8SFRNTEVsZW1lbnQ+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gKDxIVE1MRWxlbWVudD4oXG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgKSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInRkLWxvYWRpbmctd3JhcHBlclwiXG4gIFtzdHlsZS5taW4taGVpZ2h0XT1cImdldEhlaWdodCgpXCJcbiAgW2NsYXNzLnRkLW92ZXJsYXktY2lyY3VsYXJdPVwiKGlzT3ZlcmxheSgpIHx8IGlzRnVsbFNjcmVlbigpKSAmJiAhaXNMaW5lYXIoKVwiXG4gIFtjbGFzcy50ZC1vdmVybGF5XT1cImlzT3ZlcmxheSgpIHx8IGlzRnVsbFNjcmVlbigpXCJcbiAgW2NsYXNzLnRkLWZ1bGxzY3JlZW5dPVwiaXNGdWxsU2NyZWVuKClcIlxuPlxuICA8ZGl2XG4gICAgW0B0ZEZhZGVJbk91dF09XCJhbmltYXRpb25cIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cImdldEhlaWdodCgpXCJcbiAgICBjbGFzcz1cInRkLWxvYWRpbmdcIlxuICA+XG4gICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAqbmdJZj1cImlzQ2lyY3VsYXIoKVwiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgW2RpYW1ldGVyXT1cImdldENpcmNsZURpYW1ldGVyKClcIlxuICAgICAgW3N0cm9rZVdpZHRoXT1cImdldENpcmNsZVN0cm9rZVdpZHRoKClcIlxuICAgID48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyXG4gICAgICAqbmdJZj1cImlzTGluZWFyKClcIlxuICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICA+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtjZGtQb3J0YWxPdXRsZXRdPVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==","import { Injectable, ComponentFactoryResolver, SkipSelf, Optional, inject, } from '@angular/core';\nimport { Injector, } from '@angular/core';\nimport { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { TdLoadingComponent, LoadingStyle } from '../loading.component';\nimport * as i0 from \"@angular/core\";\n/**\n * NOTE: @internal usage only.\n */\nexport class TdLoadingFactory {\n    _componentFactoryResolver = inject(ComponentFactoryResolver);\n    _overlay = inject(Overlay);\n    _injector = inject(Injector);\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    createFullScreenComponent(options) {\n        options.height = undefined;\n        options.style = LoadingStyle.FullScreen;\n        const loadingRef = this._initializeContext();\n        let loading = false;\n        let overlayRef;\n        loadingRef.observable\n            .pipe(distinctUntilChanged())\n            .subscribe((registered) => {\n            if (registered > 0 && !loading) {\n                loading = true;\n                overlayRef = this._createOverlay();\n                loadingRef.componentRef = overlayRef.attach(new ComponentPortal(TdLoadingComponent));\n                this._mapOptions(options, loadingRef.componentRef?.instance);\n                loadingRef.componentRef?.instance.show();\n                loadingRef.componentRef?.changeDetectorRef.detectChanges();\n            }\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     * 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    createOverlayComponent(options, viewContainerRef, templateRef) {\n        options.height = undefined;\n        options.style = LoadingStyle.Overlay;\n        const loadingRef = this._createComponent(options);\n        let loading = false;\n        if (loadingRef.componentRef) {\n            loadingRef.componentRef.instance.content = new TemplatePortal(templateRef, viewContainerRef);\n            viewContainerRef.clear();\n            viewContainerRef.insert(loadingRef.componentRef?.hostView, 0);\n        }\n        loadingRef.observable\n            .pipe(distinctUntilChanged())\n            .subscribe((registered) => {\n            if (registered > 0 && !loading) {\n                loading = true;\n                loadingRef.componentRef?.instance.show();\n            }\n            else if (registered <= 0 && loading) {\n                loading = false;\n                loadingRef.componentRef?.instance.hide();\n            }\n        });\n        return loadingRef;\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    createReplaceComponent(options, viewContainerRef, templateRef, context) {\n        const nativeElement = (templateRef.elementRef.nativeElement);\n        options.height = nativeElement.nextElementSibling\n            ? nativeElement.nextElementSibling.scrollHeight\n            : undefined;\n        options.style = LoadingStyle.None;\n        const loadingRef = 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 = viewContainerRef.createEmbeddedView(templateRef, context);\n        loadingRef.observable\n            .pipe(distinctUntilChanged())\n            .subscribe((registered) => {\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 = viewContainerRef.indexOf(loadingRef.componentRef.hostView);\n                if (index < 0) {\n                    viewContainerRef.detach(viewContainerRef.indexOf(contentRef));\n                    viewContainerRef.insert(loadingRef.componentRef.hostView, 0);\n                }\n                loadingRef.componentRef?.instance.show();\n            }\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 = viewContainerRef.indexOf(contentRef);\n                if (index < 0) {\n                    viewContainerRef.detach(viewContainerRef.indexOf(loadingRef.componentRef.hostView));\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     * Creates a fullscreen overlay for the loading usage.\n     */\n    _createOverlay() {\n        const state = 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     * Creates a generic component dynamically waiting to be attached to a viewContainerRef.\n     */\n    _createComponent(options) {\n        const compRef = 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     * Initialize context for loading component.\n     */\n    _initializeContext() {\n        const subject = new Subject();\n        return {\n            observable: subject.asObservable(),\n            subject,\n            componentRef: undefined,\n            times: 0,\n        };\n    }\n    /**\n     * Maps configuration to the loading component instance.\n     */\n    _mapOptions(options, instance) {\n        if (options.style) {\n            instance.style = options.style;\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    static ɵfac = function TdLoadingFactory_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdLoadingFactory)(); };\n    static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TdLoadingFactory, factory: TdLoadingFactory.ɵfac });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdLoadingFactory, [{\n        type: Injectable\n    }], null, null); })();\nexport function LOADING_FACTORY_PROVIDER_FACTORY(parent) {\n    return parent || new TdLoadingFactory();\n}\nexport const LOADING_FACTORY_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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvYWRpbmcvc3JjL3NlcnZpY2VzL2xvYWRpbmcuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLHdCQUF3QixFQUV4QixRQUFRLEVBQ1IsUUFBUSxFQUVSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsUUFBUSxHQUlULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFleEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdELFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQzs7Ozs7T0FLRztJQUNJLHlCQUF5QixDQUFDLE9BQXlCO1FBQzlCLE9BQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzVCLE9BQVEsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNuRSxNQUFNLFVBQVUsR0FBZ0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FB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WUFDaEMsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDOzBHQTFNVSxnQkFBZ0I7Z0VBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7O2lGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVTs7QUE4TVgsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxNQUF3QjtJQUV4QixPQUFPLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFhO0lBQ2hELG1GQUFtRjtJQUNuRixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLElBQUksRUFBRTtRQUNKLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLGdCQUFnQixDQUFDO1FBQ2xELHdCQUF3QjtRQUN4QixPQUFPO1FBQ1AsUUFBUTtLQUNUO0lBQ0QsVUFBVSxFQUFFLGdDQUFnQztDQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBQcm92aWRlcixcbiAgU2tpcFNlbGYsXG4gIE9wdGlvbmFsLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBJbmplY3RvcixcbiAgQ29tcG9uZW50UmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCwgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVGRMb2FkaW5nQ29udGV4dCB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbG9hZGluZy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGRMb2FkaW5nQ29tcG9uZW50LCBMb2FkaW5nU3R5bGUgfSBmcm9tICcuLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJVGRMb2FkaW5nQ29uZmlnIH0gZnJvbSAnLi9sb2FkaW5nLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElJbnRlcm5hbExvYWRpbmdPcHRpb25zIGV4dGVuZHMgSVRkTG9hZGluZ0NvbmZpZyB7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgc3R5bGU/OiBMb2FkaW5nU3R5bGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRpbmdSZWYge1xuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuICBzdWJqZWN0OiBTdWJqZWN0PGFueT47XG4gIHRpbWVzOiBudW1iZXI7XG59XG5cbi8qKlxuICogTk9URTogQGludGVybmFsIHVzYWdlIG9ubHkuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZExvYWRpbmdGYWN0b3J5IHtcbiAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyID0gaW5qZWN0KENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gIHByaXZhdGUgX292ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvKipcbiAgICogVXNlcyBtYXRlcmlhbCBgT3ZlcmxheWAgc2VydmljZXMgdG8gY3JlYXRlIGEgRE9NIGVsZW1lbnQgYW5kIGF0dGFjaCB0aGUgbG9hZGluZyBjb21wb25lbnRcbiAgICogaW50byBpdC4gTGV2ZXJhZ2luZyB0aGUgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSBpdC5cbiAgICpcbiAgICogU2F2ZXMgYSByZWZlcmVuY2UgaW4gY29udGV4dCB0byBiZSBjYWxsZWQgd2hlbiByZWdpc3RlcmluZy9yZXNvbHZpbmcgdGhlIGxvYWRpbmcgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVGdWxsU2NyZWVuQ29tcG9uZW50KG9wdGlvbnM6IElUZExvYWRpbmdDb25maWcpOiBJTG9hZGluZ1JlZiB7XG4gICAgKDxJSW50ZXJuYWxMb2FkaW5nT3B0aW9ucz5vcHRpb25zKS5oZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgKDxJSW50ZXJuYWxMb2FkaW5nT3B0aW9ucz5vcHRpb25zKS5zdHlsZSA9IExvYWRpbmdTdHlsZS5GdWxsU2NyZWVuO1xuICAgIGNvbnN0IGxvYWRpbmdSZWY6IElMb2FkaW5nUmVmID0gdGhpcy5faW5pdGlhbGl6ZUNvbnRleHQoKTtcbiAgICBsZXQgbG9hZGluZyA9IGZhbHNlO1xuICAgIGxldCBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuICAgIGxvYWRpbmdSZWYub2JzZXJ2YWJsZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlZ2lzdGVyZWQ6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCA+IDAgJiYgIWxvYWRpbmcpIHtcbiAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBvdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheSgpO1xuICAgICAgICAgIGxvYWRpbmdSZWYuY29tcG9uZW50UmVmID0gb3ZlcmxheVJlZi5hdHRhY2goXG4gICAgICAgICAgICBuZXcgQ29tcG9uZW50UG9ydGFsKFRkTG9hZGluZ0NvbXBvbmVudCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9tYXBPcHRpb25zKG9wdGlvbnMsIGxvYWRpbmdSZWYuY29tcG9uZW50UmVmPy5pbnN0YW5jZSk7XG4gICAgICAgICAgbG9hZGluZ1JlZi5jb21wb25lbnRSZWY/Lmluc3RhbmNlLnNob3coKTtcbiAgICAgICAgICBsb2FkaW5nUmVmLmNvbXBvbmVudFJlZj8uY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlZ2lzdGVyZWQgPD0gMCAmJiBsb2FkaW5nKSB7XG4gICAgICAgICAgbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGxvYWRpbmdSZWYuY29tcG9uZW50UmVmPy5pbnN0YW5jZS5oaWRlKCk7XG4gICAgICAgICAgbG9hZGluZ1JlZi5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICAgICAgICBvdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICAgIG92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gbG9hZGluZ1JlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbG9hZGluZyBjb21wb25lbnQgZHluYW1pY2FsbHkgYW5kIGF0dGFjaGVzIGl0IGludG8gdGhlIGdpdmVuIHZpZXdDb250YWluZXJSZWYuXG4gICAqIExldmVyYWdlcyBUZW1wbGF0ZVBvcnRhbHMgZnJvbSBtYXRlcmlhbCB0byBpbmplY3QgdGhlIHRlbXBsYXRlIGluc2lkZSBvZiBpdCBzbyBpdCBmaXRzXG4gICAqIHBlcmZlY3RseSB3aGVuIG92ZXJsYXlpbmcgaXQuXG4gICAqXG4gICAqIFNhdmVzIGEgcmVmZXJlbmNlIGluIGNvbnRleHQgdG8gYmUgY2FsbGVkIHdoZW4gcmVnaXN0ZXJpbmcvcmVzb2x2aW5nIHRoZSBsb2FkaW5nIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlT3ZlcmxheUNvbXBvbmVudChcbiAgICBvcHRpb25zOiBJVGRMb2FkaW5nQ29uZmlnLFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPG9iamVjdD4sXG4gICk6IElMb2FkaW5nUmVmIHtcbiAgICAoPElJbnRlcm5hbExvYWRpbmdPcHRpb25zPm9wdGlvbnMpLmhlaWdodCA9IHVuZGVmaW5lZDtcbiAgICAoPElJbnRlcm5hbExvYWRpbmdPcHRpb25zPm9wdGlvbnMpLnN0eWxlID0gTG9hZGluZ1N0eWxlLk92ZXJsYXk7XG4gICAgY29uc3QgbG9hZGluZ1JlZjogSUxvYWRpbmdSZWYgPSB0aGlzLl9jcmVhdGVDb21wb25lbnQob3B0aW9ucyk7XG4gICAgbGV0IGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmIChsb2FkaW5nUmVmLmNvbXBvbmVudFJlZikge1xuICAgICAgbG9hZGluZ1JlZi5jb21wb25lbnRSZWYuaW5zdGFuY2UuY29udGVudCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChcbiAgICAgICAgdGVtcGxhdGVSZWYsXG4gICAgICAgIHZpZXdDb250YWluZXJSZWYsXG4gICAgICApO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgdmlld0NvbnRhaW5lclJlZi5pbnNlcnQobG9hZGluZ1JlZi5jb21wb25lbnRSZWY/Lmhvc3RWaWV3LCAwKTtcbiAgICB9XG5cbiAgICBsb2FkaW5nUmVmLm9ic2VydmFibGVcbiAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKChyZWdpc3RlcmVkOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgPiAwICYmICFsb2FkaW5nKSB7XG4gICAgICAgICAgbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgbG9hZGluZ1JlZi5jb21wb25lbnRSZWY/Lmluc3RhbmNlLnNob3coKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlcmVkIDw9IDAgJiYgbG9hZGluZykge1xuICAgICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBsb2FkaW5nUmVmLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gbG9hZGluZ1JlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbG9hZGluZyBjb21wb25lbnQgZHluYW1pY2FsbHkgYW5kIGF0dGFjaGVzIGl0IGludG8gdGhlIGdpdmVuIHZpZXdDb250YWluZXJSZWYuXG4gICAqIFJlcGxhY2VzIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBsb2FkaW5nIGNvbXBvbmVudCBkZXBlbmRpbmcgaWYgaXQgd2FzIHJlZ2lzdGVyZWQgb3IgcmVzb2x2ZWQuXG4gICAqXG4gICAqIFNhdmVzIGEgcmVmZXJlbmNlIGluIGNvbnRleHQgdG8gYmUgY2FsbGVkIHdoZW4gcmVnaXN0ZXJpbmcvcmVzb2x2aW5nIHRoZSBsb2FkaW5nIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlUmVwbGFjZUNvbXBvbmVudChcbiAgICBvcHRpb25zOiBJVGRMb2FkaW5nQ29uZmlnLFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPG9iamVjdD4sXG4gICAgY29udGV4dDogVGRMb2FkaW5nQ29udGV4dCxcbiAgKTogSUxvYWRpbmdSZWYge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PihcbiAgICAgIHRlbXBsYXRlUmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICk7XG4gICAgKDxJSW50ZXJuYWxMb2FkaW5nT3B0aW9ucz5vcHRpb25zKS5oZWlnaHQgPSBuYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xuICAgICAgPyBuYXRpdmVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZy5zY3JvbGxIZWlnaHRcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgICg8SUludGVybmFsTG9hZGluZ09wdGlvbnM+b3B0aW9ucykuc3R5bGUgPSBMb2FkaW5nU3R5bGUuTm9uZTtcbiAgICBjb25zdCBsb2FkaW5nUmVmOiBJTG9hZGluZ1JlZiA9IHRoaXMuX2NyZWF0ZUNvbXBvbmVudChvcHRpb25zKTtcbiAgICBsZXQgbG9hZGluZyA9IGZhbHNlO1xuICAgIC8vIHBhc3NpbmcgY29udGV4dCBzbyB3aGVuIHRoZSB0ZW1wbGF0ZSBpcyBhdHRhY2hlZCwgd2UgY2FuIGtlZXAgdGhlIHJlZmVyZW5jZSBvZiB0aGUgdmFyaWFibGVzXG4gICAgY29uc3QgY29udGVudFJlZjogRW1iZWRkZWRWaWV3UmVmPG9iamVjdD4gPVxuICAgICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGVSZWYsIGNvbnRleHQpO1xuICAgIGxvYWRpbmdSZWYub2JzZXJ2YWJsZVxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlZ2lzdGVyZWQ6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCA+IDAgJiYgIWxvYWRpbmcgJiYgbG9hZGluZ1JlZi5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAvLyBkZXRhY2ggdGhlIGNvbnRlbnQgYW5kIGF0dGFjaCB0aGUgbG9hZGVyIGlmIGxvYWRlciBpcyB0aGVyZVxuICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB2aWV3Q29udGFpbmVyUmVmLmluZGV4T2YoXG4gICAgICAgICAgICBsb2FkaW5nUmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYuZGV0YWNoKHZpZXdDb250YWluZXJSZWYuaW5kZXhPZihjb250ZW50UmVmKSk7XG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmLmluc2VydChsb2FkaW5nUmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldywgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvYWRpbmdSZWYuY29tcG9uZW50UmVmPy5pbnN0YW5jZS5zaG93KCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJlZCA8PSAwICYmIGxvYWRpbmcgJiYgbG9hZGluZ1JlZi5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgbG9hZGluZ1JlZi5jb21wb25lbnRSZWY/Lmluc3RhbmNlLmhpZGUoKTtcbiAgICAgICAgICAvLyBkZXRhY2ggbG9hZGVyIGFuZCBhdHRhY2ggdGhlIGNvbnRlbnQgaWYgY29udGVudCBpcyB0aGVyZVxuICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB2aWV3Q29udGFpbmVyUmVmLmluZGV4T2YoY29udGVudFJlZik7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZi5kZXRhY2goXG4gICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWYuaW5kZXhPZihsb2FkaW5nUmVmLmNvbXBvbmVudFJlZi5ob3N0VmlldyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZi5pbnNlcnQoY29udGVudFJlZiwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE5lZWQgdG8gY2FsbCBcIm1hcmtGb3JDaGVja1wiIGFuZCBcImRldGVjdENoYW5nZXNcIiBvbiBhdHRhY2hlZCB0ZW1wbGF0ZSwgc28gaXRzIGRldGVjdGVkIGJ5IHBhcmVudCBjb21wb25lbnQgd2hlbiBhdHRhY2hlZFxuICAgICAgICAgICAqIHdpdGggXCJPblB1c2hcIiBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29udGVudFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgY29udGVudFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuIGxvYWRpbmdSZWY7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZ1bGxzY3JlZW4gb3ZlcmxheSBmb3IgdGhlIGxvYWRpbmcgdXNhZ2UuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVPdmVybGF5KCk6IE92ZXJsYXlSZWYge1xuICAgIGNvbnN0IHN0YXRlOiBPdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoKTtcbiAgICBzdGF0ZS5oYXNCYWNrZHJvcCA9IGZhbHNlO1xuICAgIHN0YXRlLnBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmdsb2JhbCgpXG4gICAgICAuY2VudGVySG9yaXpvbnRhbGx5KClcbiAgICAgIC5jZW50ZXJWZXJ0aWNhbGx5KCk7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXkuY3JlYXRlKHN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZ2VuZXJpYyBjb21wb25lbnQgZHluYW1pY2FsbHkgd2FpdGluZyB0byBiZSBhdHRhY2hlZCB0byBhIHZpZXdDb250YWluZXJSZWYuXG4gICAqL1xuICBwcml2YXRlIF9jcmVhdGVDb21wb25lbnQob3B0aW9uczogSUludGVybmFsTG9hZGluZ09wdGlvbnMpOiBJTG9hZGluZ1JlZiB7XG4gICAgY29uc3QgY29tcFJlZjogSUxvYWRpbmdSZWYgPSB0aGlzLl9pbml0aWFsaXplQ29udGV4dCgpO1xuICAgIGNvbXBSZWYuY29tcG9uZW50UmVmID0gdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoVGRMb2FkaW5nQ29tcG9uZW50KVxuICAgICAgLmNyZWF0ZSh0aGlzLl9pbmplY3Rvcik7XG4gICAgdGhpcy5fbWFwT3B0aW9ucyhvcHRpb25zLCBjb21wUmVmLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgcmV0dXJuIGNvbXBSZWY7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBjb250ZXh0IGZvciBsb2FkaW5nIGNvbXBvbmVudC5cbiAgICovXG4gIHByaXZhdGUgX2luaXRpYWxpemVDb250ZXh0KCk6IElMb2FkaW5nUmVmIHtcbiAgICBjb25zdCBzdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9ic2VydmFibGU6IHN1YmplY3QuYXNPYnNlcnZhYmxlKCksXG4gICAgICBzdWJqZWN0LFxuICAgICAgY29tcG9uZW50UmVmOiB1bmRlZmluZWQsXG4gICAgICB0aW1lczogMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgY29uZmlndXJhdGlvbiB0byB0aGUgbG9hZGluZyBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBwcml2YXRlIF9tYXBPcHRpb25zKFxuICAgIG9wdGlvbnM6IElJbnRlcm5hbExvYWRpbmdPcHRpb25zLFxuICAgIGluc3RhbmNlOiBUZExvYWRpbmdDb21wb25lbnQsXG4gICk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zLnN0eWxlKSB7XG4gICAgICBpbnN0YW5jZS5zdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbnN0YW5jZS50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2UuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2UubW9kZSA9IG9wdGlvbnMubW9kZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2UuY29sb3IgPSBvcHRpb25zLmNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTE9BRElOR19GQUNUT1JZX1BST1ZJREVSX0ZBQ1RPUlkoXG4gIHBhcmVudDogVGRMb2FkaW5nRmFjdG9yeSxcbik6IFRkTG9hZGluZ0ZhY3Rvcnkge1xuICByZXR1cm4gcGFyZW50IHx8IG5ldyBUZExvYWRpbmdGYWN0b3J5KCk7XG59XG5cbmV4cG9ydCBjb25zdCBMT0FESU5HX0ZBQ1RPUllfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgc2VydmljZSBhdmFpbGFibGUsIHVzZSB0aGF0LiBPdGhlcndpc2UsIHByb3ZpZGUgYSBuZXcgb25lLlxuICBwcm92aWRlOiBUZExvYWRpbmdGYWN0b3J5LFxuICBkZXBzOiBbXG4gICAgW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgVGRMb2FkaW5nRmFjdG9yeV0sXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIE92ZXJsYXksXG4gICAgSW5qZWN0b3IsXG4gIF0sXG4gIHVzZUZhY3Rvcnk6IExPQURJTkdfRkFDVE9SWV9QUk9WSURFUl9GQUNUT1JZLFxufTtcbiJdfQ==","import { Injectable, SkipSelf, Optional, inject, } from '@angular/core';\nimport { LoadingMode, LoadingStrategy, LoadingType, } from '../loading.component';\nimport { TdLoadingFactory } from './loading.factory';\nimport * as i0 from \"@angular/core\";\nexport class TdLoadingConfig {\n    name;\n    type;\n    mode;\n    color;\n    constructor(config) {\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}\nexport class TdLoadingDirectiveConfig extends TdLoadingConfig {\n    strategy;\n    constructor(config) {\n        super(config);\n        this.strategy = config.strategy ? config.strategy : LoadingStrategy.Replace;\n    }\n}\nexport class TdLoadingService {\n    _loadingFactory = inject(TdLoadingFactory);\n    _context = {};\n    _timeouts = {};\n    constructor() {\n        this.create({\n            name: 'td-loading-main',\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(config, viewContainerRef, templateRef, context) {\n        const directiveConfig = new TdLoadingDirectiveConfig(config);\n        if (this._context[directiveConfig.name]) {\n            throw Error(`Name duplication: [TdLoading] directive has a name conflict with ${directiveConfig.name}.`);\n        }\n        if (directiveConfig.strategy === LoadingStrategy.Overlay) {\n            this._context[directiveConfig.name] =\n                this._loadingFactory.createOverlayComponent(directiveConfig, viewContainerRef, templateRef);\n        }\n        else {\n            this._context[directiveConfig.name] =\n                this._loadingFactory.createReplaceComponent(directiveConfig, viewContainerRef, templateRef, context);\n        }\n        return this._context[directiveConfig.name];\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    create(config) {\n        const fullscreenConfig = new TdLoadingConfig(config);\n        this.removeComponent(fullscreenConfig.name);\n        this._context[fullscreenConfig.name] =\n            this._loadingFactory.createFullScreenComponent(fullscreenConfig);\n    }\n    /**\n     * params:\n     * - name: string\n     *\n     * Removes `loading` component from service context.\n     */\n    removeComponent(name) {\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     * 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    register(name = 'td-loading-main', registers = 1) {\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        }\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            }\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     * 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    resolve(name = 'td-loading-main', resolves = 1) {\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 = 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     * 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    resolveAll(name = 'td-loading-main') {\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     * 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    setValue(name, value) {\n        if (this._context[name]) {\n            const instance = 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     * Clears timeout linked to the name.\n     * @param name Name of the loading component to be cleared\n     */\n    _clearTimeout(name) {\n        clearTimeout(this._timeouts[name]);\n        delete this._timeouts[name];\n    }\n    static ɵfac = function TdLoadingService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdLoadingService)(); };\n    static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TdLoadingService, factory: TdLoadingService.ɵfac });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdLoadingService, [{\n        type: Injectable\n    }], () => [], null); })();\nexport function LOADING_PROVIDER_FACTORY(parent) {\n    return parent || new TdLoadingService();\n}\nexport const LOADING_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//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvYWRpbmcvc3JjL3NlcnZpY2VzL2xvYWRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFFTCxXQUFXLEVBQ1gsZUFBZSxFQUNmLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBZSxNQUFNLG1CQUFtQixDQUFDOztBQVNsRSxNQUFNLE9BQU8sZUFBZTtJQUMxQixJQUFJLENBQVM7SUFDYixJQUFJLENBQWU7SUFDbkIsSUFBSSxDQUFlO0lBQ25CLEtBQUssQ0FBaUM7SUFFdEMsWUFBWSxNQUF3QjtRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUNsRSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkQsQ0FBQztD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SUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sUUFBUSxHQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQztZQUM3QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssYUFBYSxDQUFDLElBQVk7UUFDaEMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzswR0E3TVUsZ0JBQWdCO2dFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCOztpRkFBaEIsZ0JBQWdCO2NBRDVCLFVBQVU7O0FBaU5YLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsTUFBd0I7SUFFeEIsT0FBTyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0FBQzFDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBYTtJQUN4QyxtRkFBbUY7SUFDbkYsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLGdCQUFnQixDQUFDO0lBQzVFLFVBQVUsRUFBRSx3QkFBd0I7Q0FDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIFByb3ZpZGVyLFxuICBTa2lwU2VsZixcbiAgT3B0aW9uYWwsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUZExvYWRpbmdDb250ZXh0IH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sb2FkaW5nLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBUZExvYWRpbmdDb21wb25lbnQsXG4gIExvYWRpbmdNb2RlLFxuICBMb2FkaW5nU3RyYXRlZ3ksXG4gIExvYWRpbmdUeXBlLFxufSBmcm9tICcuLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZExvYWRpbmdGYWN0b3J5LCBJTG9hZGluZ1JlZiB9IGZyb20gJy4vbG9hZGluZy5mYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJVGRMb2FkaW5nQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlPzogTG9hZGluZ1R5cGU7XG4gIG1vZGU/OiBMb2FkaW5nTW9kZTtcbiAgY29sb3I/OiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJztcbn1cblxuZXhwb3J0IGNsYXNzIFRkTG9hZGluZ0NvbmZpZyBpbXBsZW1lbnRzIElUZExvYWRpbmdDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU/OiBMb2FkaW5nVHlwZTtcbiAgbW9kZT86IExvYWRpbmdNb2RlO1xuICBjb2xvcj86ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVRkTG9hZGluZ0NvbmZpZykge1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmFtZSBpcyByZXF1aXJlZCBmb3IgW1RkTG9hZGluZ10gY29uZmlndXJhdGlvbi4nKTtcbiAgICB9XG4gICAgdGhpcy5tb2RlID0gY29uZmlnLm1vZGUgPyBjb25maWcubW9kZSA6IExvYWRpbmdNb2RlLkluZGV0ZXJtaW5hdGU7XG4gICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGUgPyBjb25maWcudHlwZSA6IExvYWRpbmdUeXBlLkNpcmN1bGFyO1xuICAgIHRoaXMuY29sb3IgPSBjb25maWcuY29sb3IgPyBjb25maWcuY29sb3IgOiAncHJpbWFyeSc7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGRMb2FkaW5nRGlyZWN0aXZlQ29uZmlnIGV4dGVuZHMgSVRkTG9hZGluZ0NvbmZpZyB7XG4gIHN0cmF0ZWd5PzogTG9hZGluZ1N0cmF0ZWd5O1xufVxuXG5leHBvcnQgY2xhc3MgVGRMb2FkaW5nRGlyZWN0aXZlQ29uZmlnXG4gIGV4dGVuZHMgVGRMb2FkaW5nQ29uZmlnXG4gIGltcGxlbWVudHMgSVRkTG9hZGluZ0RpcmVjdGl2ZUNvbmZpZ1xue1xuICBzdHJhdGVneTogTG9hZGluZ1N0cmF0ZWd5O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSVRkTG9hZGluZ0RpcmVjdGl2ZUNvbmZpZykge1xuICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgdGhpcy5zdHJhdGVneSA9IGNvbmZpZy5zdHJhdGVneSA/IGNvbmZpZy5zdHJhdGVneSA6IExvYWRpbmdTdHJhdGVneS5SZXBsYWNlO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZExvYWRpbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9hZGluZ0ZhY3RvcnkgPSBpbmplY3QoVGRMb2FkaW5nRmFjdG9yeSk7XG5cbiAgcHJpdmF0ZSBfY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBJTG9hZGluZ1JlZiB9ID0ge307XG4gIHByaXZhdGUgX3RpbWVvdXRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jcmVhdGUoe1xuICAgICAgbmFtZTogJ3RkLWxvYWRpbmctbWFpbicsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogcGFyYW1zOlxuICAgKiAtIGNvbmZpZzogSUxvYWRpbmdEaXJlY3RpdmVDb25maWdcbiAgICogLSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICAqIC0gdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPE9iamVjdD5cbiAgICpcbiAgICogQ3JlYXRlcyBhbiByZXBsYWNlIGxvYWRpbmcgbWFzayBhbmQgYXR0YWNoZXMgaXQgdG8gdGhlIHZpZXdDb250YWluZXJSZWYuXG4gICAqIFJlcGxhY2VzIHRoZSB0ZW1wbGF0ZVJlZiB3aXRoIHRoZSBtYXNrIHdoZW4gYSByZXF1ZXN0IGlzIHJlZ2lzdGVyZWQgb24gaXQuXG4gICAqXG4gICAqIE5PVEU6IEBpbnRlcm5hbCB1c2FnZSBvbmx5LlxuICAgKi9cbiAgY3JlYXRlQ29tcG9uZW50KFxuICAgIGNvbmZpZzogSVRkTG9hZGluZ0RpcmVjdGl2ZUNvbmZpZyxcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxvYmplY3Q+LFxuICAgIGNvbnRleHQ6IFRkTG9hZGluZ0NvbnRleHQsXG4gICk6IElMb2FkaW5nUmVmIHtcbiAgICBjb25zdCBkaXJlY3RpdmVDb25maWc6IFRkTG9hZGluZ0RpcmVjdGl2ZUNvbmZpZyA9XG4gICAgICBuZXcgVGRMb2FkaW5nRGlyZWN0aXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgaWYgKHRoaXMuX2NvbnRleHRbZGlyZWN0aXZlQ29uZmlnLm5hbWVdKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYE5hbWUgZHVwbGljYXRpb246IFtUZExvYWRpbmddIGRpcmVjdGl2ZSBoYXMgYSBuYW1lIGNvbmZsaWN0IHdpdGggJHtkaXJlY3RpdmVDb25maWcubmFtZX0uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RpdmVDb25maWcuc3RyYXRlZ3kgPT09IExvYWRpbmdTdHJhdGVneS5PdmVybGF5KSB7XG4gICAgICB0aGlzLl9jb250ZXh0W2RpcmVjdGl2ZUNvbmZpZy5uYW1lXSA9XG4gICAgICAgIHRoaXMuX2xvYWRpbmdGYWN0b3J5LmNyZWF0ZU92ZXJsYXlDb21wb25lbnQoXG4gICAgICAgICAgZGlyZWN0aXZlQ29uZmlnLFxuICAgICAgICAgIHZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgdGVtcGxhdGVSZWYsXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHRbZGlyZWN0aXZlQ29uZmlnLm5hbWVdID1cbiAgICAgICAgdGhpcy5fbG9hZGluZ0ZhY3RvcnkuY3JlYXRlUmVwbGFjZUNvbXBvbmVudChcbiAgICAgICAgICBkaXJlY3RpdmVDb25maWcsXG4gICAgICAgICAgdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICB0ZW1wbGF0ZVJlZixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29udGV4dFtkaXJlY3RpdmVDb25maWcubmFtZV07XG4gIH1cblxuICAvKipcbiAgICogcGFyYW1zOlxuICAgKiAtIGNvbmZpZzogSVRkTG9hZGluZ0NvbmZpZ1xuICAgKlxuICAgKiBDcmVhdGVzIGEgZnVsbHNjcmVlbiBsb2FkaW5nIG1hc2sgYW5kIGF0dGFjaGVzIGl0IHRvIHRoZSBET00gd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cbiAgICogT25seSBkaXNwbGF5ZWQgd2hlbiB0aGUgbWFzayBoYXMgYSByZXF1ZXN0IHJlZ2lzdGVyZWQgb24gaXQuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlKGNvbmZpZzogSVRkTG9hZGluZ0NvbmZpZyk6IHZvaWQge1xuICAgIGNvbnN0IGZ1bGxzY3JlZW5Db25maWc6IFRkTG9hZGluZ0NvbmZpZyA9IG5ldyBUZExvYWRpbmdDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLnJlbW92ZUNvbXBvbmVudChmdWxsc2NyZWVuQ29uZmlnLm5hbWUpO1xuICAgIHRoaXMuX2NvbnRleHRbZnVsbHNjcmVlbkNvbmZpZy5uYW1lXSA9XG4gICAgICB0aGlzLl9sb2FkaW5nRmFjdG9yeS5jcmVhdGVGdWxsU2NyZWVuQ29tcG9uZW50KGZ1bGxzY3JlZW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIHBhcmFtczpcbiAgICogLSBuYW1lOiBzdHJpbmdcbiAgICpcbiAgICogUmVtb3ZlcyBgbG9hZGluZ2AgY29tcG9uZW50IGZyb20gc2VydmljZSBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNvbXBvbmVudChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29udGV4dFtuYW1lXSkge1xuICAgICAgdGhpcy5fY29udGV4dFtuYW1lXS5zdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAodGhpcy5fY29udGV4dFtuYW1lXS5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fY29udGV4dFtuYW1lXS5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBwYXJhbXM6XG4gICAqIC0gbmFtZTogc3RyaW5nXG4gICAqIC0gcmVnaXN0ZXJzPzogbnVtYmVyXG4gICAqIHJldHVybnM6IHRydWUgaWYgc3VjY2Vzc2Z1bFxuICAgKlxuICAgKiBSZXNvbHZlcyBhIHJlcXVlc3QgZm9yIHRoZSBsb2FkaW5nIG1hc2sgcmVmZXJlbmNlZCBieSB0aGUgbmFtZSBwYXJhbWV0ZXIuXG4gICAqIENhbiBvcHRpb25hbGx5IHBhc3MgcmVnaXN0ZXJzIGFyZ3VtZW50IHRvIHNldCBhIG51bWJlciBvZiByZWdpc3RlciBjYWxscy5cbiAgICpcbiAgICogSWYgbm8gcGFyYW1lbWV0ZXJzIGFyZSB1c2VkLCB0aGVuIGRlZmF1bHQgbWFpbiBtYXNrIHdpbGwgYmUgdXNlZC5cbiAgICpcbiAgICogZS5nLiBsb2FkaW5nU2VydmljZS5yZWdpc3RlcigpXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXIoXG4gICAgbmFtZTogc3RyaW5nID0gJ3RkLWxvYWRpbmctbWFpbicsXG4gICAgcmVnaXN0ZXJzOiBudW1iZXIgPSAxLFxuICApOiBib29sZWFuIHtcbiAgICAvLyB0cnkgcmVnaXN0ZXJpbmcgaW50byB0aGUgc2VydmljZSBpZiB0aGUgbG9hZGluZyBjb21wb25lbnQgaGFzIGJlZW4gaW5zdGFuY2lhdGVkIG9yIGlmIGl0IGV4aXN0cy5cbiAgICBpZiAodGhpcy5fY29udGV4dFtuYW1lXSkge1xuICAgICAgcmVnaXN0ZXJzID0gcmVnaXN0ZXJzIDwgMSA/IDEgOiByZWdpc3RlcnM7XG4gICAgICB0aGlzLl9jb250ZXh0W25hbWVdLnRpbWVzICs9IHJlZ2lzdGVycztcbiAgICAgIHRoaXMuX2NvbnRleHRbbmFtZV0uc3ViamVjdC5uZXh0KHRoaXMuX2NvbnRleHRbbmFtZV0udGltZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGl0IGRvZXNudCBleGlzdCwgc2V0IGEgdGltZW91dCBzbyBpdHMgcmVnaXN0ZXJlZCBhZnRlciBjaGFuZ2UgZGV0ZWN0aW9uIGhhcHBlbnNcbiAgICAgIC8vIHRoaXMgaW4gY2FzZSBcInJlZ2lzdGVyXCIgb2NjdXJlZCBvbiB0aGUgYG5nT25Jbml0YCBsaWZlaG9vayBjeWNsZS5cbiAgICAgIGlmICghdGhpcy5fdGltZW91dHNbbmFtZV0pIHtcbiAgICAgICAgdGhpcy5fdGltZW91dHNbbmFtZV0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyKG5hbWUsIHJlZ2lzdGVycyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgaXQgdGltZW91dCBvY2N1cmVkIGFuZCBzdGlsbCBkb2VzbnQgZXhpc3QsIGl0IG1lYW5zIHRoZSB0aWVtb3V0IHdhc250IG5lZWRlZCBzbyB3ZSBjbGVhciBpdC5cbiAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcGFyYW1zOlxuICAgKiAtIG5hbWU6IHN0cmluZ1xuICAgKiAtIHJlc29sdmVzPzogbnVtYmVyXG4gICAqIHJldHVybnM6IHRydWUgaWYgc3VjY2Vzc2Z1bFxuICAgKlxuICAgKiBSZXNvbHZlcyBhIHJlcXVlc3QgZm9yIHRoZSBsb2FkaW5nIG1hc2sgcmVmZXJlbmNlZCBieSB0aGUgbmFtZSBwYXJhbWV0ZXIuXG4gICAqIENhbiBvcHRpb25hbGx5IHBhc3MgcmVzb2x2ZXMgYXJndW1lbnQgdG8gc2V0IGEgbnVtYmVyIG9mIHJlc29sdmUgY2FsbHMuXG4gICAqXG4gICAqIElmIG5vIHBhcmFtZW1ldGVycyBhcmUgdXNlZCwgdGhlbiBkZWZhdWx0IG1haW4gbWFzayB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIGUuZy4gbG9hZGluZ1NlcnZpY2UucmVzb2x2ZSgpXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZShcbiAgICBuYW1lOiBzdHJpbmcgPSAndGQtbG9hZGluZy1tYWluJyxcbiAgICByZXNvbHZlczogbnVtYmVyID0gMSxcbiAgKTogYm9vbGVhbiB7XG4gICAgLy8gY2xlYXIgdGltZW91dCBpZiB0aGUgbG9hZGluZyBjb21wb25lbnQgaXMgXCJyZXNvbHZlZFwiIGJlZm9yZSBpdHMgXCJyZWdpc3RlcmVkXCJcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQobmFtZSk7XG4gICAgaWYgKHRoaXMuX2NvbnRleHRbbmFtZV0pIHtcbiAgICAgIHJlc29sdmVzID0gcmVzb2x2ZXMgPCAxID8gMSA6IHJlc29sdmVzO1xuICAgICAgaWYgKHRoaXMuX2NvbnRleHRbbmFtZV0udGltZXMpIHtcbiAgICAgICAgbGV0IHRpbWVzOiBudW1iZXIgPSB0aGlzLl9jb250ZXh0W25hbWVdLnRpbWVzO1xuICAgICAgICB0aW1lcyAtPSByZXNvbHZlcztcbiAgICAgICAgdGhpcy5fY29udGV4dFtuYW1lXS50aW1lcyA9IHRpbWVzIDwgMCA/IDAgOiB0aW1lcztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NvbnRleHRbbmFtZV0uc3ViamVjdD8ubmV4dCh0aGlzLl9jb250ZXh0W25hbWVdLnRpbWVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcGFyYW1zOlxuICAgKiAtIG5hbWU6IHN0cmluZ1xuICAgKiByZXR1cm5zOiB0cnVlIGlmIHN1Y2Nlc3NmdWxcbiAgICpcbiAgICogUmVzb2x2ZXMgYWxsIHJlcXVlc3QgZm9yIHRoZSBsb2FkaW5nIG1hc2sgcmVmZXJlbmNlZCBieSB0aGUgbmFtZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIElmIG5vIHBhcmFtZW1ldGVycyBhcmUgdXNlZCwgdGhlbiBkZWZhdWx0IG1haW4gbWFzayB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIGUuZy4gbG9hZGluZ1NlcnZpY2UucmVzb2x2ZUFsbCgpXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZUFsbChuYW1lOiBzdHJpbmcgPSAndGQtbG9hZGluZy1tYWluJyk6IGJvb2xlYW4ge1xuICAgIC8vIGNsZWFyIHRpbWVvdXQgaWYgdGhlIGxvYWRpbmcgY29tcG9uZW50IGlzIFwicmVzb2x2ZWRcIiBiZWZvcmUgaXRzIFwicmVnaXN0ZXJlZFwiXG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KG5hbWUpO1xuICAgIGlmICh0aGlzLl9jb250ZXh0W25hbWVdKSB7XG4gICAgICB0aGlzLl9jb250ZXh0W25hbWVdLnRpbWVzID0gMDtcbiAgICAgIHRoaXMuX2NvbnRleHRbbmFtZV0uc3ViamVjdD8ubmV4dCh0aGlzLl9jb250ZXh0W25hbWVdLnRpbWVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcGFyYW1zOlxuICAgKiAtIG5hbWU6IHN0cmluZ1xuICAgKiAtIHZhbHVlOiBudW1iZXJcbiAgICogcmV0dXJuczogdHJ1ZSBpZiBzdWNjZXNzZnVsXG4gICAqXG4gICAqIFNldCB2YWx1ZSBvbiBhIGxvYWRpbmcgbWFzayByZWZlcmVuY2VkIGJ5IHRoZSBuYW1lIHBhcmFtZXRlci5cbiAgICogVXNhZ2Ugb25seSBhdmFpbGFibGUgaWYgaXRzIG1vZGUgaXMgJ2RldGVybWluYXRlJyBhbmQgaWYgbG9hZGluZyBpcyBzaG93aW5nLlxuICAgKi9cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9jb250ZXh0W25hbWVdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogVGRMb2FkaW5nQ29tcG9uZW50ID1cbiAgICAgICAgdGhpcy5fY29udGV4dFtuYW1lXS5jb21wb25lbnRSZWY/Lmluc3RhbmNlO1xuICAgICAgaWYgKGluc3RhbmNlLm1vZGUgPT09IExvYWRpbmdNb2RlLkRldGVybWluYXRlICYmIGluc3RhbmNlLmFuaW1hdGlvbikge1xuICAgICAgICBpbnN0YW5jZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aW1lb3V0IGxpbmtlZCB0byB0aGUgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgbG9hZGluZyBjb21wb25lbnQgdG8gYmUgY2xlYXJlZFxuICAgKi9cbiAgcHJpdmF0ZSBfY2xlYXJUaW1lb3V0KG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0c1tuYW1lXSk7XG4gICAgZGVsZXRlIHRoaXMuX3RpbWVvdXRzW25hbWVdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMT0FESU5HX1BST1ZJREVSX0ZBQ1RPUlkoXG4gIHBhcmVudDogVGRMb2FkaW5nU2VydmljZSxcbik6IFRkTG9hZGluZ1NlcnZpY2Uge1xuICByZXR1cm4gcGFyZW50IHx8IG5ldyBUZExvYWRpbmdTZXJ2aWNlKCk7XG59XG5cbmV4cG9ydCBjb25zdCBMT0FESU5HX1BST1ZJREVSOiBQcm92aWRlciA9IHtcbiAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlcnZpY2UgYXZhaWxhYmxlLCB1c2UgdGhhdC4gT3RoZXJ3aXNlLCBwcm92aWRlIGEgbmV3IG9uZS5cbiAgcHJvdmlkZTogVGRMb2FkaW5nU2VydmljZSxcbiAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIFRkTG9hZGluZ1NlcnZpY2VdLCBUZExvYWRpbmdGYWN0b3J5XSxcbiAgdXNlRmFjdG9yeTogTE9BRElOR19QUk9WSURFUl9GQUNUT1JZLFxufTtcbiJdfQ==","import { Directive, Input, inject } from '@angular/core';\nimport { ViewContainerRef, TemplateRef } from '@angular/core';\nimport { LoadingType, LoadingMode, LoadingStrategy, } from '../loading.component';\nimport { TdLoadingService } from '../services/loading.service';\nimport * as i0 from \"@angular/core\";\n/**\n * Context class for variable reference\n */\nexport class TdLoadingContext {\n    $implicit = undefined;\n    tdLoading = undefined;\n}\n// Constant for generation of the id for the next component\nlet TD_LOADING_NEXT_ID = 0;\nexport class TdLoadingDirective {\n    _viewContainerRef = inject(ViewContainerRef);\n    _templateRef = inject(TemplateRef);\n    _loadingService = inject(TdLoadingService);\n    _context = new TdLoadingContext();\n    _loadingRef;\n    /**\n     * tdLoading: string\n     * Name reference of the loading mask, used to register/resolve requests to the mask.\n     */\n    name;\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    set until(until) {\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        }\n        else {\n            this._loadingService.resolveAll(this.name);\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    type = LoadingType.Circular;\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    mode = LoadingMode.Indeterminate;\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    strategy = LoadingStrategy.Replace;\n    /**\n     * tdLoadingColor?: \"primary\" | \"accent\" | \"warn\"\n     * Sets the theme color of the loading component. Defaults to \"primary\"\n     */\n    color = 'primary';\n    /**\n     * Registers component in the DOM, so it will be available when calling resolve/register.\n     */\n    ngOnInit() {\n        this._registerComponent();\n    }\n    /**\n     * Remove component when directive is destroyed.\n     */\n    ngOnDestroy() {\n        this._loadingService.removeComponent(this.name);\n        this._loadingRef = undefined;\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    _registerComponent() {\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                name: this.name,\n                type: this.type,\n                mode: this.mode,\n                color: this.color,\n                strategy: this.strategy,\n            }, this._viewContainerRef, this._templateRef, this._context);\n        }\n    }\n    static ɵfac = function TdLoadingDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdLoadingDirective)(); };\n    static ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TdLoadingDirective, selectors: [[\"\", \"tdLoading\", \"\"]], inputs: { name: [0, \"tdLoading\", \"name\"], until: [0, \"tdLoadingUntil\", \"until\"], type: [0, \"tdLoadingType\", \"type\"], mode: [0, \"tdLoadingMode\", \"mode\"], strategy: [0, \"tdLoadingStrategy\", \"strategy\"], color: [0, \"tdLoadingColor\", \"color\"] } });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdLoadingDirective, [{\n        type: Directive,\n        args: [{\n                selector: '[tdLoading]',\n            }]\n    }], null, { name: [{\n            type: Input,\n            args: ['tdLoading']\n        }], until: [{\n            type: Input,\n            args: ['tdLoadingUntil']\n        }], type: [{\n            type: Input,\n            args: ['tdLoadingType']\n        }], mode: [{\n            type: Input,\n            args: ['tdLoadingMode']\n        }], strategy: [{\n            type: Input,\n            args: ['tdLoadingStrategy']\n        }], color: [{\n            type: Input,\n            args: ['tdLoadingColor']\n        }] }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvZGlyZWN0aXZlcy9sb2FkaW5nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsZUFBZSxHQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUcvRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsU0FBUyxHQUFRLFNBQVMsQ0FBQztJQUMzQixTQUFTLEdBQVEsU0FBUyxDQUFDO0NBQ25DO0FBRUQsMkRBQTJEO0FBQzNELElBQUksa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBSzNCLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0MsWUFBWSxHQUFHLE1BQU0sQ0FBZ0MsV0FBVyxDQUFDLENBQUM7SUFDbEUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTNDLFFBQVEsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BELFdBQVcsQ0FBZTtJQUVsQzs7O09BR0c7SUFFSCxJQUFJLENBQVU7SUFFZDs7Ozs7T0FLRztJQUNILElBQ0ksS0FBSyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFFSCxJQUFJLEdBQWdCLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFFekM7Ozs7T0FJRztJQUNxQixJQUFJLEdBQWdCLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFFdEU7Ozs7T0FJRztJQUVILFFBQVEsR0FDTixlQUFlLENBQUMsT0FBTyxDQUFDO0lBRTFCOzs7T0FHRztJQUNzQixLQUFLLEdBQWtDLFNBQVMsQ0FBQztJQUUxRTs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsaUZBQWlGO1FBQ2pGLHNHQUFzRztRQUN0RyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQ3JEO2dCQUNFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3hCLEVBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzs0R0F2R1Usa0JBQWtCOzZEQUFsQixrQkFBa0I7O2lGQUFsQixrQkFBa0I7Y0FIOUIsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2FBQ3hCOztrQkFhRSxLQUFLO21CQUFDLFdBQVc7O2tCQVNqQixLQUFLO21CQUFDLGdCQUFnQjs7a0JBa0J0QixLQUFLO21CQUFDLGVBQWU7O2tCQVFyQixLQUFLO21CQUFDLGVBQWU7O2tCQU9yQixLQUFLO21CQUFDLG1CQUFtQjs7a0JBUXpCLEtBQUs7bUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgTG9hZGluZ1R5cGUsXG4gIExvYWRpbmdNb2RlLFxuICBMb2FkaW5nU3RyYXRlZ3ksXG59IGZyb20gJy4uL2xvYWRpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFRkTG9hZGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUxvYWRpbmdSZWYgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2FkaW5nLmZhY3RvcnknO1xuXG4vKipcbiAqIENvbnRleHQgY2xhc3MgZm9yIHZhcmlhYmxlIHJlZmVyZW5jZVxuICovXG5leHBvcnQgY2xhc3MgVGRMb2FkaW5nQ29udGV4dCB7XG4gIHB1YmxpYyAkaW1wbGljaXQ6IGFueSA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHRkTG9hZGluZzogYW55ID0gdW5kZWZpbmVkO1xufVxuXG4vLyBDb25zdGFudCBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgaWQgZm9yIHRoZSBuZXh0IGNvbXBvbmVudFxubGV0IFREX0xPQURJTkdfTkVYVF9JRCA9IDA7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZExvYWRpbmddJyxcbn0pXG5leHBvcnQgY2xhc3MgVGRMb2FkaW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIF90ZW1wbGF0ZVJlZiA9IGluamVjdDxUZW1wbGF0ZVJlZjxUZExvYWRpbmdDb250ZXh0Pj4oVGVtcGxhdGVSZWYpO1xuICBwcml2YXRlIF9sb2FkaW5nU2VydmljZSA9IGluamVjdChUZExvYWRpbmdTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9jb250ZXh0OiBUZExvYWRpbmdDb250ZXh0ID0gbmV3IFRkTG9hZGluZ0NvbnRleHQoKTtcbiAgcHJpdmF0ZSBfbG9hZGluZ1JlZj86IElMb2FkaW5nUmVmO1xuXG4gIC8qKlxuICAgKiB0ZExvYWRpbmc6IHN0cmluZ1xuICAgKiBOYW1lIHJlZmVyZW5jZSBvZiB0aGUgbG9hZGluZyBtYXNrLCB1c2VkIHRvIHJlZ2lzdGVyL3Jlc29sdmUgcmVxdWVzdHMgdG8gdGhlIG1hc2suXG4gICAqL1xuICBASW5wdXQoJ3RkTG9hZGluZycpXG4gIG5hbWUhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRkTG9hZGluZ1VudGlsPzogYW55XG4gICAqIElmIGl0cyBudWxsLCB1bmRlZmluZWQgb3IgZmFsc2UgaXQgd2lsbCBiZSB1c2VkIHRvIHJlZ2lzdGVyIHJlcXVlc3RzIHRvIHRoZSBtYXNrLlxuICAgKiBFbHNlIGlmIGl0cyBhbnkgdmFsdWUgdGhhdCBjYW4gYmUgcmVzb2x2ZWQgYXMgdHJ1ZSwgaXQgd2lsbCByZXNvbHZlIHRoZSBtYXNrLlxuICAgKiBbbmFtZV0gaXMgb3B0aW9uYWwgd2hlbiB1c2luZyBbdW50aWxdLCBidXQgY2FuIHN0aWxsIGJlIHVzZWQgdG8gcmVnaXN0ZXIvcmVzb2x2ZSBpdCBtYW51YWxseS5cbiAgICovXG4gIEBJbnB1dCgndGRMb2FkaW5nVW50aWwnKVxuICBzZXQgdW50aWwodW50aWw6IGFueSkge1xuICAgIGlmICghdGhpcy5uYW1lKSB7XG4gICAgICB0aGlzLm5hbWUgPSAndGQtbG9hZGluZy11bnRpbC0nICsgVERfTE9BRElOR19ORVhUX0lEKys7XG4gICAgfVxuICAgIHRoaXMuX2NvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5fY29udGV4dC50ZExvYWRpbmcgPSB1bnRpbDtcbiAgICBpZiAoIXVudGlsKSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5yZWdpc3Rlcih0aGlzLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5yZXNvbHZlQWxsKHRoaXMubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHRkTG9hZGluZ1R5cGU/OiBMb2FkaW5nVHlwZSBvciBbJ2xpbmVhcicgfCAnY2lyY3VsYXInXVxuICAgKiBTZXRzIHRoZSB0eXBlIG9mIGxvYWRpbmcgbWFzayBkZXBlbmRpbmcgb24gdmFsdWUuXG4gICAqIERlZmF1bHRzIHRvIFtMb2FkaW5nVHlwZS5DaXJjdWxhciB8ICdjaXJjdWxhciddLlxuICAgKi9cbiAgQElucHV0KCd0ZExvYWRpbmdUeXBlJylcbiAgdHlwZTogTG9hZGluZ1R5cGUgPSBMb2FkaW5nVHlwZS5DaXJjdWxhcjtcblxuICAvKipcbiAgICogdGRMb2FkaW5nTW9kZT86IExvYWRpbmdNb2RlIG9yIFsnZGV0ZXJtaW5hdGUnIHwgJ2luZGV0ZXJtaW5hdGUnXVxuICAgKiBTZXRzIHRoZSBtb2RlIG9mIGxvYWRpbmcgbWFzayBkZXBlbmRpbmcgb24gdmFsdWUuXG4gICAqIERlZmF1bHRzIHRvIFtMb2FkaW5nTW9kZS5JbmRldGVybWluYXRlIHwgJ2luZGV0ZXJtaW5hdGUnXS5cbiAgICovXG4gIEBJbnB1dCgndGRMb2FkaW5nTW9kZScpIG1vZGU6IExvYWRpbmdNb2RlID0gTG9hZGluZ01vZGUuSW5kZXRlcm1pbmF0ZTtcblxuICAvKipcbiAgICogdGRMb2FkaW5nU3RyYXRlZ3k/OiBMb2FkaW5nU3RyYXRlZ3kgb3IgWydyZXBsYWNlJyB8ICdvdmVybGF5J11cbiAgICogU2V0cyB0aGUgc3RyYXRlZ3kgb2YgbG9hZGluZyBtYXNrIGRlcGVuZGluZyBvbiB2YWx1ZS5cbiAgICogRGVmYXVsdHMgdG8gW0xvYWRpbmdNb2RlLlJlcGxhY2UgfCAncmVwbGFjZSddLlxuICAgKi9cbiAgQElucHV0KCd0ZExvYWRpbmdTdHJhdGVneScpXG4gIHN0cmF0ZWd5OiBMb2FkaW5nU3RyYXRlZ3kuT3ZlcmxheSB8IExvYWRpbmdTdHJhdGVneS5SZXBsYWNlID1cbiAgICBMb2FkaW5nU3RyYXRlZ3kuUmVwbGFjZTtcblxuICAvKipcbiAgICogdGRMb2FkaW5nQ29sb3I/OiBcInByaW1hcnlcIiB8IFwiYWNjZW50XCIgfCBcIndhcm5cIlxuICAgKiBTZXRzIHRoZSB0aGVtZSBjb2xvciBvZiB0aGUgbG9hZGluZyBjb21wb25lbnQuIERlZmF1bHRzIHRvIFwicHJpbWFyeVwiXG4gICAqL1xuICBASW5wdXQoJ3RkTG9hZGluZ0NvbG9yJykgY29sb3I6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nID0gJ3ByaW1hcnknO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY29tcG9uZW50IGluIHRoZSBET00sIHNvIGl0IHdpbGwgYmUgYXZhaWxhYmxlIHdoZW4gY2FsbGluZyByZXNvbHZlL3JlZ2lzdGVyLlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb21wb25lbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgY29tcG9uZW50IHdoZW4gZGlyZWN0aXZlIGlzIGRlc3Ryb3llZC5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnJlbW92ZUNvbXBvbmVudCh0aGlzLm5hbWUpO1xuICAgIHRoaXMuX2xvYWRpbmdSZWYgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBbVGRMb2FkaW5nQ29tcG9uZW50XSBhbmQgYXR0YWNoZXMgaXQgdG8gdGhpcyBkaXJlY3RpdmUncyBbVmlld0NvbnRhaW5lclJlZl0uXG4gICAqIFBhc3NlcyB0aGlzIGRpcmVjdGl2ZSdzIFtUZW1wbGF0ZVJlZl0gdG8gbW9kaWZ5IERPTSBkZXBlbmRpbmcgb24gbG9hZGluZyBgc3RyYXRlZ3lgLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmFtZSBpcyBuZWVkZWQgdG8gcmVnaXN0ZXIgbG9hZGluZyBkaXJlY3RpdmUnKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgYFRkTG9hZGluZ0NvbXBvbmVudGAgaGFzIGJlZW4gY3JlYXRlZCBiZWZvcmUgdHJ5aW5nIHRvIGFkZCBvbmUgYWdhaW4uXG4gICAgLy8gVGhlcmUgaXMgYSB3ZWlyZCBlZGdlIGNhc2Ugd2hlbiB1c2luZyBgW3JvdXRlckxpbmtBY3RpdmVdYCB0aGF0IGNhbGxzIHRoZSBgbmdPbkluaXRgIHR3aWNlIGluIGEgcm93XG4gICAgaWYgKCF0aGlzLl9sb2FkaW5nUmVmKSB7XG4gICAgICB0aGlzLl9sb2FkaW5nUmVmID0gdGhpcy5fbG9hZGluZ1NlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsXG4gICAgICAgICAgc3RyYXRlZ3k6IHRoaXMuc3RyYXRlZ3ksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHRoaXMuX3RlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLl9jb250ZXh0LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { 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';\nimport * as i0 from \"@angular/core\";\nconst TD_LOADING = [TdLoadingComponent, TdLoadingDirective];\nexport class CovalentLoadingModule {\n    static ɵfac = function CovalentLoadingModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CovalentLoadingModule)(); };\n    static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CovalentLoadingModule });\n    static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [LOADING_FACTORY_PROVIDER, LOADING_PROVIDER], imports: [TdLoadingComponent] });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CovalentLoadingModule, [{\n        type: NgModule,\n        args: [{\n                imports: [TD_LOADING],\n                exports: [TD_LOADING],\n                providers: [LOADING_FACTORY_PROVIDER, LOADING_PROVIDER],\n            }]\n    }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && i0.ɵɵsetNgModuleScope(CovalentLoadingModule, { imports: [TdLoadingComponent, TdLoadingDirective], exports: [TdLoadingComponent, TdLoadingDirective] }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvbG9hZGluZy9zcmMvbG9hZGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFekQsTUFBTSxVQUFVLEdBQWdCLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQU96RSxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7NERBQXJCLHFCQUFxQjtpRUFGckIsQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxZQUx4QixrQkFBa0I7O2lGQU90QyxxQkFBcUI7Y0FMakMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDckIsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO2dCQUNyQixTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQzthQUN4RDs7d0ZBQ1kscUJBQXFCLGNBUEQsa0JBQWtCLEVBQUUsa0JBQWtCLGFBQXRDLGtCQUFrQixFQUFFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMT0FESU5HX1BST1ZJREVSIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTE9BRElOR19GQUNUT1JZX1BST1ZJREVSIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2FkaW5nLmZhY3RvcnknO1xuaW1wb3J0IHsgVGRMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xvYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRkTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy5jb21wb25lbnQnO1xuXG5jb25zdCBURF9MT0FESU5HOiBUeXBlPGFueT5bXSA9IFtUZExvYWRpbmdDb21wb25lbnQsIFRkTG9hZGluZ0RpcmVjdGl2ZV07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtURF9MT0FESU5HXSxcbiAgZXhwb3J0czogW1REX0xPQURJTkddLFxuICBwcm92aWRlcnM6IFtMT0FESU5HX0ZBQ1RPUllfUFJPVklERVIsIExPQURJTkdfUFJPVklERVJdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3ZhbGVudExvYWRpbmdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtY29yZS1sb2FkaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2xvYWRpbmcvc3JjL2NvdmFsZW50LWNvcmUtbG9hZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":[],"mappings":"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"}