Socket
Socket
Sign inDemoInstall

ngx-ntk-smart-module

Package Overview
Dependencies
5
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.3 to 1.1.2

esm2015/lib/modal/ntk-smart-modal-stack.service.js

4

bundles/ngx-ntk-smart-module.umd.min.js

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-ntk-smart-module",["exports","@angular/core","@angular/common"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["ngx-ntk-smart-module"]={},t.ng.core,t.ng.common)}(this,(function(t,e,i){"use strict";
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("ngx-ntk-smart-module",["exports","@angular/core","@angular/common"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["ngx-ntk-smart-module"]={},t.ng.core,t.ng.common)}(this,(function(t,e,n){"use strict";
/*! *****************************************************************************

@@ -15,3 +15,3 @@ Copyright (c) Microsoft Corporation.

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */Object.create;function o(t,e){var i="function"==typeof Symbol&&t[Symbol.iterator];if(!i)return t;var o,n,s=i.call(t),r=[];try{for(;(void 0===e||e-- >0)&&!(o=s.next()).done;)r.push(o.value)}catch(t){n={error:t}}finally{try{o&&!o.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}return r}function n(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t}Object.create;var s=function(){function t(){this.modalStack=[]}return t.prototype.addModal=function(t,e){if(e){var i=this.modalStack.findIndex((function(e){return e.id===t.id}));i>-1?this.modalStack[i].modal=t.modal:this.modalStack.push(t)}else this.modalStack.push(t)},t.prototype.getModal=function(t){if(!this.modalStack||0===this.modalStack.length)return null;var e=this.modalStack.filter((function(e){return e.id===t}))[0];return e?e.modal:null},t.prototype.get=function(t){return this.getModal(t)},t.prototype.open=function(t,e){void 0===e&&(e=!1);var i=this.modalStack.find((function(e){return e.id===t}));if(!i)throw new Error("Modal not found");i.modal.open(e)},t.prototype.close=function(t){var e=this.modalStack.find((function(e){return e.id===t}));if(!e)throw new Error("Modal not found");e.modal.close()},t.prototype.toggle=function(t,e){void 0===e&&(e=!1);var i=this.modalStack.find((function(e){return e.id===t}));if(!i)throw new Error("Modal not found");i.modal.toggle(e)},t.prototype.getModalStack=function(){return this.modalStack},t.prototype.getOpenedModals=function(){var t=[];return this.modalStack.forEach((function(e){e.modal.visible&&t.push(e)})),t},t.prototype.getHigherIndex=function(){var t=[1041];return this.getModalStack().forEach((function(e){t.push(e.modal.layerPosition)})),Math.max.apply(Math,n(t))+1},t.prototype.getModalStackCount=function(){return this.modalStack.length},t.prototype.removeModal=function(t){var e=this.modalStack.findIndex((function(e){return e.id===t}));e>-1&&this.modalStack.splice(e,1)},t.prototype.setModalData=function(t,e,i){return!!this.modalStack.find((function(t){return t.id===e}))&&(this.getModal(e).setData(t,i),!0)},t.prototype.getModalData=function(t){return this.getModal(t).getData()},t.prototype.resetModalData=function(t){if(this.modalStack.find((function(e){return e.id===t}))){var e=this.getModal(t).getData();return this.getModal(t).removeData(),e}return!1},t.prototype.closeLatestModal=function(){var t=this;clearTimeout(this.debouncer),this.debouncer=setTimeout((function(){var e;return t.getOpenedModals().forEach((function(t){t.modal.layerPosition>(e?e.modal.layerPosition:0)&&(e=t)})),!!e&&e.modal.close()}),100)},t}();s.decorators=[{type:e.Injectable}];var r=function(){function t(t,i,o){var n=this;this.privateRenderer=t,this.privateChangeDetectorRef=i,this.privateNtkSmartModalService=o,this.closable=!0,this.escapable=!0,this.dismissable=!0,this.identifier="",this.customClass="nsm-dialog-animation-fade",this.visible=!1,this.backdrop=!0,this.force=!0,this.hideDelay=500,this.autostart=!1,this.visibleChange=new e.EventEmitter,this.onClose=new e.EventEmitter,this.onCloseFinished=new e.EventEmitter,this.onDismiss=new e.EventEmitter,this.onDismissFinished=new e.EventEmitter,this.onAnyCloseEvent=new e.EventEmitter,this.onAnyCloseEventFinished=new e.EventEmitter,this.onOpen=new e.EventEmitter,this.onEscape=new e.EventEmitter,this.onDataAdded=new e.EventEmitter,this.onDataRemoved=new e.EventEmitter,this.layerPosition=1041,this.overlayVisible=!1,this.openedClass=!1,this.escapeKeyboardEvent=function(t){27===t.keyCode&&(n.onEscape.emit(n),n.privateNtkSmartModalService.closeLatestModal())}}return t.prototype.ngOnInit=function(){if(!this.identifier||!this.identifier.length)throw new Error("identifier field isn’t set. Please set one before calling <ntk-smart-modal> in a template.");this.layerPosition+=this.privateNtkSmartModalService.getModalStackCount(),this.privateNtkSmartModalService.addModal({id:this.identifier,modal:this},this.force),this.autostart&&this.privateNtkSmartModalService.open(this.identifier)},t.prototype.ngOnDestroy=function(){this.privateNtkSmartModalService.removeModal(this.identifier),window.removeEventListener("keyup",this.escapeKeyboardEvent),this.privateNtkSmartModalService.getModalStack.length||this.privateRenderer.removeClass(document.body,"dialog-open")},t.prototype.open=function(t){var e=this;t&&(this.layerPosition=this.privateNtkSmartModalService.getHigherIndex()),this.privateRenderer.addClass(document.body,"dialog-open"),this.overlayVisible=!0,this.visible=!0,setTimeout((function(){e.openedClass=!0,e.target&&e.targetPlacement(),e.privateChangeDetectorRef.markForCheck()})),this.onOpen.emit(this),this.escapable&&window.addEventListener("keyup",this.escapeKeyboardEvent)},t.prototype.close=function(){var t=this;this.openedClass=!1,this.onClose.emit(this),this.onAnyCloseEvent.emit(this),this.privateNtkSmartModalService.getOpenedModals().length<2&&this.privateRenderer.removeClass(document.body,"dialog-open"),setTimeout((function(){t.visibleChange.emit(t.visible),t.visible=!1,t.overlayVisible=!1,t.privateChangeDetectorRef.markForCheck(),t.onCloseFinished.emit(t),t.onAnyCloseEventFinished.emit(t)}),this.hideDelay),window.removeEventListener("keyup",this.escapeKeyboardEvent)},t.prototype.dismiss=function(t){var e=this;this.dismissable&&t.target.classList.contains("overlay")&&(this.openedClass=!1,this.onDismiss.emit(this),this.onAnyCloseEvent.emit(this),this.privateNtkSmartModalService.getOpenedModals().length<2&&this.privateRenderer.removeClass(document.body,"dialog-open"),setTimeout((function(){e.visible=!1,e.visibleChange.emit(e.visible),e.overlayVisible=!1,e.privateChangeDetectorRef.markForCheck(),e.onDismissFinished.emit(e),e.onAnyCloseEventFinished.emit(e)}),this.hideDelay),window.removeEventListener("keyup",this.escapeKeyboardEvent))},t.prototype.toggle=function(t){this.visible?this.close():this.open(t)},t.prototype.addCustomClass=function(t){this.customClass.length?this.customClass+=" "+t:this.customClass=t},t.prototype.removeCustomClass=function(t){this.customClass=t?this.customClass.replace(t,"").trim():""},t.prototype.isVisible=function(){return this.visible},t.prototype.hasData=function(){return void 0!==this.privateData},t.prototype.setData=function(t,e){(!this.hasData()||this.hasData()&&e)&&(this.privateData=t,this.onDataAdded.emit(this.privateData),this.privateChangeDetectorRef.markForCheck())},t.prototype.getData=function(){return this.privateData},t.prototype.removeData=function(){this.privateData=void 0,this.onDataRemoved.emit(!0),this.privateChangeDetectorRef.markForCheck()},t.prototype.targetPlacement=function(){if(this.nsmDialog&&this.nsmContent&&this.nsmOverlay&&this.target){var t=document.querySelector(this.target).getBoundingClientRect(),e=this.nsmOverlay.nativeElement.getBoundingClientRect(),i=this.nsmContent.nativeElement.getBoundingClientRect(),o=this.nsmDialog.nativeElement.getBoundingClientRect(),n=parseInt(getComputedStyle(this.nsmContent.nativeElement).marginLeft,10),s=parseInt(getComputedStyle(this.nsmContent.nativeElement).marginTop,10),r=t.top-o.top-(i.height-t.height)/2,a=t.left-o.left-(i.width-t.width)/2;a+o.left+i.width+2*n>e.width?a=e.width-(o.left+i.width)-2*n:a+o.left<0&&(a=-o.left),r+o.top+i.height+s>e.height&&(r=e.height-(o.top+i.height)-s),r<0&&(r=0),this.privateRenderer.setStyle(this.nsmContent.nativeElement,"top",r+"px"),this.privateRenderer.setStyle(this.nsmContent.nativeElement,"left",a+"px")}},t}();r.decorators=[{type:e.Component,args:[{selector:"ntk-smart-modal",template:'\n <div\n *ngIf="overlayVisible"\n [style.z-index]="visible ? layerPosition - 1 : -1"\n [ngClass]="{ transparent: !backdrop, overlay: true, \'nsm-overlay-open\': openedClass }"\n (click)="dismiss($event)"\n #nsmOverlay\n >\n <div\n [style.z-index]="visible ? layerPosition : -1"\n [ngClass]="[\'nsm-dialog\', customClass, openedClass ? \'nsm-dialog-open\' : \'nsm-dialog-close\']"\n #nsmDialog\n >\n <div class="nsm-content" #nsmContent>\n <div class="nsm-body">\n <ng-content></ng-content>\n </div>\n <button type="button" *ngIf="closable" (click)="close()" aria-label="Close" class="nsm-dialog-btn-close">\n <img\n src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDMsNi4wNThjLTguMDc3LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDksMEw2LjA1OCw0NzYuNjkzYy04LjA3Nyw4LjA3Ny04LjA3NywyMS4xNzIsMCwyOS4yNDkgICAgQzEwLjA5Niw1MDkuOTgyLDE1LjM5LDUxMiwyMC42ODMsNTEyYzUuMjkzLDAsMTAuNTg2LTIuMDE5LDE0LjYyNS02LjA1OUw1MDUuOTQzLDM1LjMwNiAgICBDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDIsNDc2LjY5NEwzNS4zMDYsNi4wNTljLTguMDc2LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDgsMGMtOC4wNzcsOC4wNzYtOC4wNzcsMjEuMTcxLDAsMjkuMjQ4bDQ3MC42MzYsNDcwLjYzNiAgICBjNC4wMzgsNC4wMzksOS4zMzIsNi4wNTgsMTQuNjI1LDYuMDU4YzUuMjkzLDAsMTAuNTg3LTIuMDE5LDE0LjYyNC02LjA1N0M1MTQuMDE4LDQ5Ny44NjYsNTE0LjAxOCw0ODQuNzcxLDUwNS45NDIsNDc2LjY5NHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K"\n />\n </button>\n </div>\n </div>\n </div>\n '}]}],r.ctorParameters=function(){return[{type:e.Renderer2},{type:e.ChangeDetectorRef},{type:s}]},r.propDecorators={closable:[{type:e.Input}],escapable:[{type:e.Input}],dismissable:[{type:e.Input}],identifier:[{type:e.Input}],customClass:[{type:e.Input}],visible:[{type:e.Input}],backdrop:[{type:e.Input}],force:[{type:e.Input}],hideDelay:[{type:e.Input}],autostart:[{type:e.Input}],target:[{type:e.Input}],visibleChange:[{type:e.Output}],onClose:[{type:e.Output}],onCloseFinished:[{type:e.Output}],onDismiss:[{type:e.Output}],onDismissFinished:[{type:e.Output}],onAnyCloseEvent:[{type:e.Output}],onAnyCloseEventFinished:[{type:e.Output}],onOpen:[{type:e.Output}],onEscape:[{type:e.Output}],onDataAdded:[{type:e.Output}],onDataRemoved:[{type:e.Output}],nsmContent:[{type:e.ViewChild,args:["nsmContent"]}],nsmDialog:[{type:e.ViewChild,args:["nsmDialog"]}],nsmOverlay:[{type:e.ViewChild,args:["nsmOverlay"]}],targetPlacement:[{type:e.HostListener,args:["window:resize"]}]};var a=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[s]}},t.forChild=function(){return{ngModule:t,providers:[s]}},t}();a.decorators=[{type:e.NgModule,args:[{declarations:[r],exports:[r],imports:[i.CommonModule]}]}];var d=function(){function t(){this.privateloaderStack=[],this.privateActions=[]}return t.prototype.addLoader=function(t,e){if(e){var i=this.privateloaderStack.findIndex((function(e){return e.id===t.id}));i>-1?this.privateloaderStack[i].component=t.component:this.privateloaderStack.push(t)}else{if(this._getLoader(t.id))throw new Error("Loader with "+t.id+" identifier already exist");this.privateloaderStack.push(t)}},t.prototype.removeLoader=function(t){this.privateloaderStack=this.privateloaderStack.filter((function(e){return e.id!==t})),this._removeAction(t,"*")},t.prototype.getLoaderStack=function(){return this.privateloaderStack},t.prototype.getLoaderStackCount=function(){return this.privateloaderStack.length},t.prototype.getOpenedLoaders=function(){return this.privateloaderStack.filter((function(t){return t.component.visible}))},t.prototype.getActiveLoaders=function(){return this.privateloaderStack.filter((function(t){return t.component.loading}))},t.prototype.getHigherIndex=function(){var t=this.getOpenedLoaders().map((function(t){return t.component.layerPosition}));return Math.max.apply(Math,n(t))+1},t.prototype.start=function(t){var e,i=this;Array.isArray(t)?t.forEach((function(t){i.start(t)})):(e=this._getLoader(t))?(e.component.start(),this._removeAction(t,"start")):this._addAction(t,"start")},t.prototype.startAll=function(){var t=this;this.privateloaderStack.forEach((function(e){return t.start(e.id)}))},t.prototype.stop=function(t){var e,i=this;Array.isArray(t)?t.forEach((function(t){i.stop(t)})):(e=this._getLoader(t))?(e.component.stop(),this._removeAction(t,"stop")):this._addAction(t,"stop")},t.prototype.stopAll=function(){var t=this;this.privateloaderStack.forEach((function(e){return t.stop(e.id)}))},t.prototype.isLoading=function(t){var e,i=this;if(Array.isArray(t)){var o=[];return t.forEach((function(t){i.privateloaderStack.forEach((function(e){e.id===t&&o.push(e.component.loading)}))})),-1===o.indexOf(!1)}return!!(e=this._getLoader(t))&&e.component.loading},t.prototype.executeAction=function(t,e){if(this.privateActions.find((function(i){return i.identifier===t&&i.action===e})))switch(e){case"start":this.start(t);break;case"stop":this.stop(t)}},t.prototype._getLoader=function(t){return this.privateloaderStack.find((function(e){return e.id===t}))||null},t.prototype._addAction=function(t,e){var i=this;Array.isArray(t)?t.forEach((function(t){i._addAction(t,e)})):this.privateActions.push({identifier:t,action:e})},t.prototype._removeAction=function(t,e){var i=this;Array.isArray(t)?t.forEach((function(t){i._removeAction(t,e)})):this.privateActions=this.privateActions.filter((function(i){return i.identifier!==t||i.action!==e&&"*"!==e}))},t}();d.decorators=[{type:e.Injectable}];var l=function(t){this.id=t.identifier,this.component=t},c=function(){function t(t,i){this.ntkSmartLoaderService=t,this.changeDetectorRef=i,this.identifier="",this.customClass="",this.force=!1,this.delayIn=0,this.delayOut=0,this.autostart=!1,this.onStart=new e.EventEmitter,this.onStop=new e.EventEmitter,this.onVisibleChange=new e.EventEmitter,this.loading=!1,this.visible=!1,this.layerPosition=999,this.privateIsProcessing=!1,this.privateLoaderBodyClass="loader-open",this.privateEnterClass="enter",this.privateLeaveClass="leave"}return t.prototype.ngOnInit=function(){try{var t=new l(this);this.ntkSmartLoaderService.addLoader(t,this.force),this.layerPosition+=this.ntkSmartLoaderService.getLoaderStackCount(),this.addCustomClass(this.identifier.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()),this.autostart?this.ntkSmartLoaderService.start(this.identifier):this.ntkSmartLoaderService.executeAction(this.identifier,"start")}catch(t){throw t}},t.prototype.ngOnDestroy=function(){this.ntkSmartLoaderService.removeLoader(this.identifier)},t.prototype.start=function(t){var e=this;this.privateIsProcessing=!0,clearInterval(this.privateDebouncer),this.visible=!0,setTimeout((function(){e.addCustomClass(e.privateEnterClass)})),this.privateDebouncer=setTimeout((function(){t&&(e.layerPosition=e.ntkSmartLoaderService.getHigherIndex()),document.body.classList.contains(e.privateLoaderBodyClass)||document.body.classList.add(e.privateLoaderBodyClass),e.loading=!0,e.onStart.emit(e),e.onVisibleChange.emit(e),e.removeCustomClass(e.privateEnterClass),e.privateIsProcessing=!1}),this.delayIn)},t.prototype.stop=function(){var t=this;this.privateIsProcessing&&(this.visible=!1,this.loading=!1),clearInterval(this.privateDebouncer),this.addCustomClass(this.privateLeaveClass),this.loading=!1,this.privateDebouncer=setTimeout((function(){document.body.classList.contains(t.privateLoaderBodyClass)&&document.body.classList.remove(t.privateLoaderBodyClass),t.visible=!1,t.onStop.emit(t),t.onVisibleChange.emit(t),t.removeCustomClass(t.privateLeaveClass),setTimeout((function(){t.changeDetectorRef.markForCheck()}))}),this.delayOut)},t.prototype.addCustomClass=function(t){this.customClass.length?-1===this.customClass.indexOf(t)&&(this.customClass+=" "+t):this.customClass=t},t.prototype.removeCustomClass=function(t){this.customClass=t?this.customClass.replace(t,"").trim():""},t}();c.decorators=[{type:e.Component,args:[{selector:"ntk-smart-loader",template:'\n <div class="loader-container {{customClass}}" [ngClass]="{\'active\': loading}"\n [style.z-index]="layerPosition - 1" *ngIf="visible">\n <ng-content></ng-content>\n </div>\n '}]}],c.ctorParameters=function(){return[{type:d},{type:e.ChangeDetectorRef}]},c.propDecorators={identifier:[{type:e.Input}],customClass:[{type:e.Input}],force:[{type:e.Input}],delayIn:[{type:e.Input}],delayOut:[{type:e.Input}],autostart:[{type:e.Input}],onStart:[{type:e.Output}],onStop:[{type:e.Output}],onVisibleChange:[{type:e.Output}]};var p=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[d]}},t.forChild=function(){return{ngModule:t,providers:[d]}},t}();p.decorators=[{type:e.NgModule,args:[{declarations:[c],exports:[c],imports:[i.CommonModule]}]}],t.NtkSmartLoaderComponent=c,t.NtkSmartLoaderModule=p,t.NtkSmartLoaderService=d,t.NtkSmartModalComponent=r,t.NtkSmartModalModule=a,t.NtkSmartModalService=s,Object.defineProperty(t,"__esModule",{value:!0})}));
***************************************************************************** */Object.create;function o(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var o,i,r=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(o=r.next()).done;)a.push(o.value)}catch(t){i={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(i)throw i.error}}return a}function i(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(o(arguments[e]));return t}Object.create;var r=function(){function t(){this._modalStack=[]}return t.prototype.addModal=function(t,e){if(e){var n=this._modalStack.findIndex((function(e){return e.id===t.id}));n>-1?this._modalStack[n].modal=t.modal:this._modalStack.push(t)}else this._modalStack.push(t)},t.prototype.getModal=function(t){var e=this._modalStack.find((function(e){return e.id===t}));if(void 0!==e)return e.modal;throw new Error("Cannot find modal with identifier "+t)},t.prototype.getModalStack=function(){return this._modalStack},t.prototype.getOpenedModals=function(){return this._modalStack.filter((function(t){return t.modal.visible}))},t.prototype.getTopOpenedModal=function(){if(!this.getOpenedModals().length)throw new Error("No modal is opened");return this.getOpenedModals().map((function(t){return t.modal})).reduce((function(t,e){return e.layerPosition>t.layerPosition?e:t}),this.getOpenedModals()[0].modal)},t.prototype.getHigherIndex=function(){return Math.max.apply(Math,i(this._modalStack.map((function(t){return t.modal.layerPosition})),[1041]))+1},t.prototype.getModalStackCount=function(){return this._modalStack.length},t.prototype.removeModal=function(t){var e=this._modalStack.findIndex((function(e){return e.id===t}));e>-1&&this._modalStack.splice(e,1)},t}();r.decorators=[{type:e.Injectable}],r.ctorParameters=function(){return[]};var a="dialog-open",s="ntk-smart-modal.",l=function(){function t(t,n,o,i,r){this._renderer=t,this._changeDetectorRef=n,this.componentFactoryResolver=o,this._document=i,this._platformId=r,this.closable=!0,this.escapable=!0,this.dismissable=!0,this.identifier="",this.customClass="nsm-dialog-animation-fade",this.visible=!1,this.backdrop=!0,this.force=!0,this.hideDelay=500,this.autostart=!1,this.target="",this.ariaLabel=null,this.ariaLabelledBy=null,this.ariaDescribedBy=null,this.refocus=!0,this.visibleChange=new e.EventEmitter,this.onClose=new e.EventEmitter,this.onCloseFinished=new e.EventEmitter,this.onDismiss=new e.EventEmitter,this.onDismissFinished=new e.EventEmitter,this.onAnyCloseEvent=new e.EventEmitter,this.onAnyCloseEventFinished=new e.EventEmitter,this.onOpen=new e.EventEmitter,this.onOpenFinished=new e.EventEmitter,this.onEscape=new e.EventEmitter,this.onDataAdded=new e.EventEmitter,this.onDataRemoved=new e.EventEmitter,this.layerPosition=1041,this.overlayVisible=!1,this.openedClass=!1,this.createFrom="html"}return t.prototype.ngOnInit=function(){if(!this.identifier||!this.identifier.length)throw new Error("identifier field isn’t set. Please set one before calling <ngx-smart-modal> in a template.");this._sendEvent("create")},t.prototype.ngAfterViewInit=function(){var t=this;if(this.contentComponent){var e=this.componentFactoryResolver.resolveComponentFactory(this.contentComponent);this.createDynamicContent(this.dynamicContentContainer,e),this.dynamicContentContainer.changes.subscribe((function(n){t.createDynamicContent(n,e)}))}},t.prototype.ngOnDestroy=function(){this._sendEvent("delete")},t.prototype.open=function(t){return this._sendEvent("open",{top:t}),this},t.prototype.close=function(){return this._sendEvent("close"),this},t.prototype.dismiss=function(t){return this.dismissable&&t.target.classList.contains("overlay")?(this._sendEvent("dismiss"),this):this},t.prototype.toggle=function(t){return this._sendEvent("toggle",{top:t}),this},t.prototype.addCustomClass=function(t){return this.customClass.length?this.customClass+=" "+t:this.customClass=t,this},t.prototype.removeCustomClass=function(t){return this.customClass=t?this.customClass.replace(t,"").trim():"",this},t.prototype.isVisible=function(){return this.visible},t.prototype.hasData=function(){return void 0!==this._data},t.prototype.setData=function(t,e){return(!this.hasData()||this.hasData()&&e)&&(this._data=t,this.onDataAdded.emit(this._data),this.markForCheck()),this},t.prototype.getData=function(){return this._data},t.prototype.removeData=function(){return this._data=void 0,this.onDataRemoved.emit(!0),this.markForCheck(),this},t.prototype.addBodyClass=function(){return this._renderer.addClass(this._document.body,a),this},t.prototype.removeBodyClass=function(){return this._renderer.removeClass(this._document.body,a),this},t.prototype.markForCheck=function(){try{this._changeDetectorRef.detectChanges()}catch(t){}this._changeDetectorRef.markForCheck()},t.prototype.targetPlacement=function(){if(!(this.isBrowser&&this.nsmDialog.length&&this.nsmContent.length&&this.nsmOverlay.length&&this.target))return!1;var t=this._document.querySelector(this.target);if(!t)return!1;var e=t.getBoundingClientRect(),n=this.nsmOverlay.first.nativeElement.getBoundingClientRect(),o=this.nsmContent.first.nativeElement.getBoundingClientRect(),i=this.nsmDialog.first.nativeElement.getBoundingClientRect(),r=parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginLeft,10),a=parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginTop,10),s=e.top-i.top-(o.height-e.height)/2,l=e.left-i.left-(o.width-e.width)/2;l+i.left+o.width+2*r>n.width?l=n.width-(i.left+o.width)-2*r:l+i.left<0&&(l=-i.left),s+i.top+o.height+a>n.height&&(s=n.height-(i.top+o.height)-a),this._renderer.setStyle(this.nsmContent.first.nativeElement,"top",(s<0?0:s)+"px"),this._renderer.setStyle(this.nsmContent.first.nativeElement,"left",l+"px")},t.prototype._sendEvent=function(t,e){if(!this.isBrowser)return!1;var n={extraData:e,instance:{id:this.identifier,modal:this}},o=new CustomEvent(s+t,{detail:n});return window.dispatchEvent(o)},Object.defineProperty(t.prototype,"isBrowser",{get:function(){return n.isPlatformBrowser(this._platformId)},enumerable:!1,configurable:!0}),t.prototype.createDynamicContent=function(t,e){var n=this;t.forEach((function(t){t.clear(),t.createComponent(e),n.markForCheck()}))},t}();l.decorators=[{type:e.Component,args:[{selector:"ntk-smart-modal",template:'\n <div *ngIf="overlayVisible"\n [style.z-index]="visible ? layerPosition-1 : -1"\n [ngClass]="{\'transparent\':!backdrop, \'overlay\':true, \'nsm-overlay-open\':openedClass}"\n (click)="dismiss($event)" #nsmOverlay>\n <div [style.z-index]="visible ? layerPosition : -1"\n [ngClass]="[\'nsm-dialog\', customClass, openedClass ? \'nsm-dialog-open\': \'nsm-dialog-close\']" #nsmDialog\n [attr.aria-hidden]="openedClass ? false : true"\n [attr.aria-label]="ariaLabel"\n [attr.aria-labelledby]="ariaLabelledBy"\n [attr.aria-describedby]="ariaDescribedBy">\n <div class="nsm-content" #nsmContent>\n <div class="nsm-body">\n <ng-template #dynamicContent></ng-template>\n <ng-content></ng-content>\n\n </div>\n <button type="button" *ngIf="closable" (click)="close()" aria-label="Close" class="nsm-dialog-btn-close">\n <svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512"\n xml:space="preserve" width="16px" height="16px" role="img" aria-labelledby="closeIconTitle closeIconDesc">\n <title id="closeIconTitle">Close Icon</title>\n <desc id="closeIconDesc">A light-gray close icon used to close the modal</desc>\n <g>\n <path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249 C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306 C514.019,27.23,514.019,14.135,505.943,6.058z"\n fill="currentColor"/>\n </g>\n <g>\n <path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636 c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"\n fill="currentColor"/>\n </g>\n </svg>\n </button>\n </div>\n </div>\n </div>\n '}]}],l.ctorParameters=function(){return[{type:e.Renderer2},{type:e.ChangeDetectorRef},{type:e.ComponentFactoryResolver},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:void 0,decorators:[{type:e.Inject,args:[e.PLATFORM_ID]}]}]},l.propDecorators={closable:[{type:e.Input}],escapable:[{type:e.Input}],dismissable:[{type:e.Input}],identifier:[{type:e.Input}],customClass:[{type:e.Input}],visible:[{type:e.Input}],backdrop:[{type:e.Input}],force:[{type:e.Input}],hideDelay:[{type:e.Input}],autostart:[{type:e.Input}],target:[{type:e.Input}],ariaLabel:[{type:e.Input}],ariaLabelledBy:[{type:e.Input}],ariaDescribedBy:[{type:e.Input}],refocus:[{type:e.Input}],visibleChange:[{type:e.Output}],onClose:[{type:e.Output}],onCloseFinished:[{type:e.Output}],onDismiss:[{type:e.Output}],onDismissFinished:[{type:e.Output}],onAnyCloseEvent:[{type:e.Output}],onAnyCloseEventFinished:[{type:e.Output}],onOpen:[{type:e.Output}],onOpenFinished:[{type:e.Output}],onEscape:[{type:e.Output}],onDataAdded:[{type:e.Output}],onDataRemoved:[{type:e.Output}],nsmContent:[{type:e.ViewChildren,args:["nsmContent"]}],nsmDialog:[{type:e.ViewChildren,args:["nsmDialog"]}],nsmOverlay:[{type:e.ViewChildren,args:["nsmOverlay"]}],dynamicContentContainer:[{type:e.ViewChildren,args:["dynamicContent",{read:e.ViewContainerRef}]}],targetPlacement:[{type:e.HostListener,args:["window:resize"]}]};var d=function(){function t(t,e,n,o,i,r,a){var s=this;this._componentFactoryResolver=t,this._appRef=e,this._injector=n,this._modalStack=o,this.applicationRef=i,this._document=r,this._platformId=a,this._escapeKeyboardEvent=function(t){if("Escape"===t.key)try{var e=s.getTopOpenedModal();return!!e.escapable&&(e.onEscape.emit(e),s.closeLatestModal(),!0)}catch(t){return!1}return!1},this._trapFocusModal=function(t){if("Tab"===t.key)try{var e=s.getTopOpenedModal();return e.nsmDialog.first.nativeElement.contains(document.activeElement)||(t.preventDefault(),t.stopPropagation(),e.nsmDialog.first.nativeElement.focus()),!0}catch(t){return!1}return!1},this._addEvents()}return t.prototype.addModal=function(t,e){this._modalStack.addModal(t,e)},t.prototype.getModal=function(t){return this._modalStack.getModal(t)},t.prototype.get=function(t){return this.getModal(t)},t.prototype.open=function(t,e){return void 0===e&&(e=!1),this._openModal(this.get(t),e)},t.prototype.close=function(t){return this._closeModal(this.get(t))},t.prototype.closeAll=function(){var t=this;this.getOpenedModals().forEach((function(e){t._closeModal(e.modal)}))},t.prototype.toggle=function(t,e){return void 0===e&&(e=!1),this._toggleModal(this.get(t),e)},t.prototype.getModalStack=function(){return this._modalStack.getModalStack()},t.prototype.getOpenedModals=function(){return this._modalStack.getOpenedModals()},t.prototype.getTopOpenedModal=function(){return this._modalStack.getTopOpenedModal()},t.prototype.getHigherIndex=function(){return this._modalStack.getHigherIndex()},t.prototype.getModalStackCount=function(){return this._modalStack.getModalStackCount()},t.prototype.removeModal=function(t){this._modalStack.removeModal(t)},t.prototype.setModalData=function(t,e,n){var o;return!!(o=this.get(e))&&(o.setData(t,n),!0)},t.prototype.getModalData=function(t){var e;return(e=this.get(t))?e.getData():null},t.prototype.resetModalData=function(t){if(this._modalStack.getModalStack().find((function(e){return e.id===t}))){var e=this.getModal(t).getData();return this.getModal(t).removeData(),e}return!1},t.prototype.closeLatestModal=function(){this.getTopOpenedModal().close()},t.prototype.create=function(t,n,o){void 0===o&&(o={});try{return this.getModal(t)}catch(d){var i=this._componentFactoryResolver.resolveComponentFactory(l),r=this._resolveNgContent(n),a=i.create(this._injector,r);n instanceof e.Type&&(a.instance.contentComponent=n),a.instance.identifier=t,a.instance.createFrom="service","boolean"==typeof o.closable&&(a.instance.closable=o.closable),"boolean"==typeof o.escapable&&(a.instance.escapable=o.escapable),"boolean"==typeof o.dismissable&&(a.instance.dismissable=o.dismissable),"string"==typeof o.customClass&&(a.instance.customClass=o.customClass),"boolean"==typeof o.backdrop&&(a.instance.backdrop=o.backdrop),"boolean"==typeof o.force&&(a.instance.force=o.force),"number"==typeof o.hideDelay&&(a.instance.hideDelay=o.hideDelay),"boolean"==typeof o.autostart&&(a.instance.autostart=o.autostart),"string"==typeof o.target&&(a.instance.target=o.target),"string"==typeof o.ariaLabel&&(a.instance.ariaLabel=o.ariaLabel),"string"==typeof o.ariaLabelledBy&&(a.instance.ariaLabelledBy=o.ariaLabelledBy),"string"==typeof o.ariaDescribedBy&&(a.instance.ariaDescribedBy=o.ariaDescribedBy),"boolean"==typeof o.refocus&&(a.instance.refocus=o.refocus),this._appRef.attachView(a.hostView);var s=a.hostView.rootNodes[0];return this._document.body.appendChild(s),a.instance}},t.prototype._addEvents=function(){var t=this;return!!this.isBrowser&&(window.addEventListener(s+"create",(function(e){t._initModal(e.detail.instance)})),window.addEventListener(s+"delete",(function(e){t._deleteModal(e.detail.instance)})),window.addEventListener(s+"open",(function(e){t._openModal(e.detail.instance.modal,e.detail.top)})),window.addEventListener(s+"toggle",(function(e){t._toggleModal(e.detail.instance.modal,e.detail.top)})),window.addEventListener(s+"close",(function(e){t._closeModal(e.detail.instance.modal)})),window.addEventListener(s+"dismiss",(function(e){t._dismissModal(e.detail.instance.modal)})),window.addEventListener("keyup",this._escapeKeyboardEvent),!0)},t.prototype._initModal=function(t){t.modal.layerPosition+=this.getModalStackCount(),this.addModal(t,t.modal.force),t.modal.autostart&&this.open(t.id)},t.prototype._openModal=function(t,e){return!t.visible&&(this.lastElementFocused=document.activeElement,t.escapable&&window.addEventListener("keyup",this._escapeKeyboardEvent),t.backdrop&&window.addEventListener("keydown",this._trapFocusModal),e&&(t.layerPosition=this.getHigherIndex()),t.addBodyClass(),t.overlayVisible=!0,t.visible=!0,t.onOpen.emit(t),t.markForCheck(),setTimeout((function(){t.openedClass=!0,t.target&&t.targetPlacement(),t.nsmDialog.first.nativeElement.setAttribute("role","dialog"),t.nsmDialog.first.nativeElement.setAttribute("tabIndex","-1"),t.nsmDialog.first.nativeElement.setAttribute("aria-modal","true"),t.nsmDialog.first.nativeElement.focus(),t.markForCheck(),t.onOpenFinished.emit(t)})),!0)},t.prototype._toggleModal=function(t,e){return t.visible?this._closeModal(t):this._openModal(t,e)},t.prototype._closeModal=function(t){var e=this;return!!t.openedClass&&(t.openedClass=!1,t.onClose.emit(t),t.onAnyCloseEvent.emit(t),this.getOpenedModals().length<2&&(t.removeBodyClass(),window.removeEventListener("keyup",this._escapeKeyboardEvent),window.removeEventListener("keydown",this._trapFocusModal)),setTimeout((function(){t.visibleChange.emit(t.visible),t.visible=!1,t.overlayVisible=!1,t.nsmDialog.first.nativeElement.removeAttribute("tabIndex"),t.markForCheck(),t.onCloseFinished.emit(t),t.onAnyCloseEventFinished.emit(t),t.refocus&&e.lastElementFocused.focus()}),t.hideDelay),!0)},t.prototype._dismissModal=function(t){return!!t.openedClass&&(t.openedClass=!1,t.onDismiss.emit(t),t.onAnyCloseEvent.emit(t),this.getOpenedModals().length<2&&t.removeBodyClass(),setTimeout((function(){t.visible=!1,t.visibleChange.emit(t.visible),t.overlayVisible=!1,t.markForCheck(),t.onDismissFinished.emit(t),t.onAnyCloseEventFinished.emit(t)}),t.hideDelay),!0)},t.prototype._deleteModal=function(t){this.removeModal(t.id),this.getModalStack().length||t.modal.removeBodyClass()},t.prototype._resolveNgContent=function(t){if("string"==typeof t)return[[this._document.createTextNode(t)]];if(t instanceof e.TemplateRef){var n=t.createEmbeddedView(null);return this.applicationRef.attachView(n),[n.rootNodes]}return[]},Object.defineProperty(t.prototype,"isBrowser",{get:function(){return n.isPlatformBrowser(this._platformId)},enumerable:!1,configurable:!0}),t}();d.decorators=[{type:e.Injectable}],d.ctorParameters=function(){return[{type:e.ComponentFactoryResolver},{type:e.ApplicationRef},{type:e.Injector},{type:r},{type:e.ApplicationRef},{type:void 0,decorators:[{type:e.Inject,args:[n.DOCUMENT]}]},{type:void 0,decorators:[{type:e.Inject,args:[e.PLATFORM_ID]}]}]};var c=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[d,r]}},t.forChild=function(){return{ngModule:t,providers:[d,r]}},t}();c.decorators=[{type:e.NgModule,args:[{declarations:[l],exports:[l],imports:[n.CommonModule]}]}];var p=function(){function t(){this.privateloaderStack=[],this.privateActions=[]}return t.prototype.addLoader=function(t,e){if(e){var n=this.privateloaderStack.findIndex((function(e){return e.id===t.id}));n>-1?this.privateloaderStack[n].component=t.component:this.privateloaderStack.push(t)}else{if(this._getLoader(t.id))throw new Error("Loader with "+t.id+" identifier already exist");this.privateloaderStack.push(t)}},t.prototype.removeLoader=function(t){this.privateloaderStack=this.privateloaderStack.filter((function(e){return e.id!==t})),this._removeAction(t,"*")},t.prototype.getLoaderStack=function(){return this.privateloaderStack},t.prototype.getLoaderStackCount=function(){return this.privateloaderStack.length},t.prototype.getOpenedLoaders=function(){return this.privateloaderStack.filter((function(t){return t.component.visible}))},t.prototype.getActiveLoaders=function(){return this.privateloaderStack.filter((function(t){return t.component.loading}))},t.prototype.getHigherIndex=function(){var t=this.getOpenedLoaders().map((function(t){return t.component.layerPosition}));return Math.max.apply(Math,i(t))+1},t.prototype.start=function(t){var e,n=this;Array.isArray(t)?t.forEach((function(t){n.start(t)})):(e=this._getLoader(t))?(e.component.start(),this._removeAction(t,"start")):this._addAction(t,"start")},t.prototype.startAll=function(){var t=this;this.privateloaderStack.forEach((function(e){return t.start(e.id)}))},t.prototype.stop=function(t){var e,n=this;Array.isArray(t)?t.forEach((function(t){n.stop(t)})):(e=this._getLoader(t))?(e.component.stop(),this._removeAction(t,"stop")):this._addAction(t,"stop")},t.prototype.stopAll=function(){var t=this;this.privateloaderStack.forEach((function(e){return t.stop(e.id)}))},t.prototype.isLoading=function(t){var e,n=this;if(Array.isArray(t)){var o=[];return t.forEach((function(t){n.privateloaderStack.forEach((function(e){e.id===t&&o.push(e.component.loading)}))})),-1===o.indexOf(!1)}return!!(e=this._getLoader(t))&&e.component.loading},t.prototype.executeAction=function(t,e){if(this.privateActions.find((function(n){return n.identifier===t&&n.action===e})))switch(e){case"start":this.start(t);break;case"stop":this.stop(t)}},t.prototype._getLoader=function(t){return this.privateloaderStack.find((function(e){return e.id===t}))||null},t.prototype._addAction=function(t,e){var n=this;Array.isArray(t)?t.forEach((function(t){n._addAction(t,e)})):this.privateActions.push({identifier:t,action:e})},t.prototype._removeAction=function(t,e){var n=this;Array.isArray(t)?t.forEach((function(t){n._removeAction(t,e)})):this.privateActions=this.privateActions.filter((function(n){return n.identifier!==t||n.action!==e&&"*"!==e}))},t}();p.ɵprov=e.ɵɵdefineInjectable({factory:function(){return new p},token:p,providedIn:"root"}),p.decorators=[{type:e.Injectable,args:[{providedIn:"root"}]}];var u=function(t){this.id=t.identifier,this.component=t},h=function(){function t(t,n){this.ntkSmartLoaderService=t,this.changeDetectorRef=n,this.identifier="",this.customClass="",this.force=!1,this.delayIn=0,this.delayOut=0,this.autostart=!1,this.onStart=new e.EventEmitter,this.onStop=new e.EventEmitter,this.onVisibleChange=new e.EventEmitter,this.loading=!1,this.visible=!1,this.layerPosition=999,this.privateIsProcessing=!1,this.privateLoaderBodyClass="loader-open",this.privateEnterClass="enter",this.privateLeaveClass="leave"}return t.prototype.ngOnInit=function(){try{var t=new u(this);this.ntkSmartLoaderService.addLoader(t,this.force),this.layerPosition+=this.ntkSmartLoaderService.getLoaderStackCount(),this.addCustomClass(this.identifier.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()),this.autostart?this.ntkSmartLoaderService.start(this.identifier):this.ntkSmartLoaderService.executeAction(this.identifier,"start")}catch(t){throw t}},t.prototype.ngOnDestroy=function(){this.ntkSmartLoaderService.removeLoader(this.identifier)},t.prototype.start=function(t){var e=this;this.privateIsProcessing=!0,clearInterval(this.privateDebouncer),this.visible=!0,setTimeout((function(){e.addCustomClass(e.privateEnterClass)})),this.privateDebouncer=setTimeout((function(){t&&(e.layerPosition=e.ntkSmartLoaderService.getHigherIndex()),document.body.classList.contains(e.privateLoaderBodyClass)||document.body.classList.add(e.privateLoaderBodyClass),e.loading=!0,e.onStart.emit(e),e.onVisibleChange.emit(e),e.removeCustomClass(e.privateEnterClass),e.privateIsProcessing=!1}),this.delayIn)},t.prototype.stop=function(){var t=this;this.privateIsProcessing&&(this.visible=!1,this.loading=!1),clearInterval(this.privateDebouncer),this.addCustomClass(this.privateLeaveClass),this.loading=!1,this.privateDebouncer=setTimeout((function(){document.body.classList.contains(t.privateLoaderBodyClass)&&document.body.classList.remove(t.privateLoaderBodyClass),t.visible=!1,t.onStop.emit(t),t.onVisibleChange.emit(t),t.removeCustomClass(t.privateLeaveClass),setTimeout((function(){t.changeDetectorRef.markForCheck()}))}),this.delayOut)},t.prototype.addCustomClass=function(t){this.customClass.length?-1===this.customClass.indexOf(t)&&(this.customClass+=" "+t):this.customClass=t},t.prototype.removeCustomClass=function(t){this.customClass=t?this.customClass.replace(t,"").trim():""},t}();h.decorators=[{type:e.Component,args:[{selector:"ntk-smart-loader",template:'\n <div class="loader-container {{customClass}}" [ngClass]="{\'active\': loading}"\n [style.z-index]="layerPosition - 1" *ngIf="visible">\n <ng-content></ng-content>\n </div>\n '}]}],h.ctorParameters=function(){return[{type:p},{type:e.ChangeDetectorRef}]},h.propDecorators={identifier:[{type:e.Input}],customClass:[{type:e.Input}],force:[{type:e.Input}],delayIn:[{type:e.Input}],delayOut:[{type:e.Input}],autostart:[{type:e.Input}],onStart:[{type:e.Output}],onStop:[{type:e.Output}],onVisibleChange:[{type:e.Output}]};var m=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[p]}},t.forChild=function(){return{ngModule:t,providers:[p]}},t}();m.decorators=[{type:e.NgModule,args:[{declarations:[h],exports:[h],imports:[n.CommonModule]}]}],t.NtkSmartLoaderComponent=h,t.NtkSmartLoaderModule=m,t.NtkSmartLoaderService=p,t.NtkSmartModalComponent=l,t.NtkSmartModalModule=c,t.NtkSmartModalService=d,t.ɵa=r,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=ngx-ntk-smart-module.umd.min.js.map
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class NtkSmartLoaderService {

@@ -221,5 +222,8 @@ constructor() {

}
NtkSmartLoaderService.ɵprov = i0.ɵɵdefineInjectable({ factory: function NtkSmartLoaderService_Factory() { return new NtkSmartLoaderService(); }, token: NtkSmartLoaderService, providedIn: "root" });
NtkSmartLoaderService.decorators = [
{ type: Injectable }
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkQ6L1NvdXJjZUthcmF2aS9HaXRIdWIvbnBtLW50ay1jbXMtYW5ndWxhci9wcm9qZWN0cy9uZ3gtbnRrLXNtYXJ0LW1vZHVsZS9zcmMvIiwic291cmNlcyI6WyJsaWIvbG9hZGVyL250ay1zbWFydC1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFFVSx1QkFBa0IsR0FBcUIsRUFBRSxDQUFDO1FBQzFDLG1CQUFjLEdBQWtELEVBQUUsQ0FBQztJQWlPN0UsQ0FBQztJQS9OQzs7Ozs7OztPQU9HO0lBQ0ksU0FBUyxDQUFDLGNBQThCLEVBQUUsS0FBZTtRQUM5RCxJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sQ0FBQyxHQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFpQixFQUFFLEVBQUU7Z0JBQ3hFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDOUM7WUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLE1BQU0sQ0FBQztRQUNYLHNEQUFzRDtRQUN0RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMvQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxH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LE1BQWM7UUFDekQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3JCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvSDtJQUNILENBQUM7OztZQW5PRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTG9hZGVySW5zdGFuY2UgfSBmcm9tICcuL2xvYWRlci1pbnN0YW5jZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOdGtTbWFydExvYWRlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpdmF0ZWxvYWRlclN0YWNrOiBMb2FkZXJJbnN0YW5jZVtdID0gW107XHJcbiAgcHJpdmF0ZSBwcml2YXRlQWN0aW9uczogQXJyYXk8eyBpZGVudGlmaWVyOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBsb2FkZXIgaW5zdGFuY2UuIFRoaXMgc3RlcCBpcyBlc3NlbnRpYWwgYW5kIGFsbG93cyB0byByZXRyaWV2ZSBhbnkgbG9hZGVyIGF0IGFueSB0aW1lLlxyXG4gICAqIEl0IHN0b3JlcyBhbiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbG9hZGVyIGlkZW50aWZpZXIgYW5kIHRoZSBsb2FkZXIgaXRzZWxmIGRpcmVjdGx5IGluIHRoZSBgbG9hZGVyU3RhY2tgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGxvYWRlckluc3RhbmNlIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbG9hZGVyIGlkZW50aWZpZXIgYW5kIHRoZSBsb2FkZXIgaXRzZWxmLlxyXG4gICAqIEBwYXJhbSBmb3JjZSBPcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBmb3JjZXMgdGhlIG92ZXJyaWRpbmcgb2YgbG9hZGVyIGluc3RhbmNlIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgbm90aGluZyBzcGVjaWFsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRMb2FkZXIobG9hZGVySW5zdGFuY2U6IExvYWRlckluc3RhbmNlLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChmb3JjZSkge1xyXG4gICAgICBjb25zdCBpOiBudW1iZXIgPSB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maW5kSW5kZXgoKG86IExvYWRlckluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG8uaWQgPT09IGxvYWRlckluc3RhbmNlLmlkO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrW2ldLmNvbXBvbmVudCA9IGxvYWRlckluc3RhbmNlLmNvbXBvbmVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5wdXNoKGxvYWRlckluc3RhbmNlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbG9hZGVyO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XHJcbiAgICBpZiAobG9hZGVyID0gdGhpcy5fZ2V0TG9hZGVyKGxvYWRlckluc3RhbmNlLmlkKSkge1xyXG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdMb2FkZXIgd2l0aCAnICsgbG9hZGVySW5zdGFuY2UuaWQgKyAnIGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdCcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLnB1c2gobG9hZGVySW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgbG9hZGVyIGluc3RhbmNlIGZyb20gdGhlIGxvYWRlciBzdGFjay5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUxvYWRlcihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjayA9IHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLmZpbHRlcigobG9hZGVyKSA9PiBsb2FkZXIuaWQgIT09IGlkKTtcclxuXHJcbiAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaWQsICcqJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIGNyZWF0ZWQgbG9hZGVycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgbG9hZGVyIGluc3RhbmNlcy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TG9hZGVyU3RhY2soKTogTG9hZGVySW5zdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcml2YXRlbG9hZGVyU3RhY2s7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGxvYWRlciBpbnN0YW5jZXMuIEl0J3MgaGVscGZ1bCB0byBrbm93IGlmIHRoZSBsb2FkZXIgc3RhY2sgaXMgZW1wdHkgb3Igbm90LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvYWRlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldExvYWRlclN0YWNrQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIG9wZW5lZCBsb2FkZXJzLiBJdCBsb29rcyBmb3IgYWxsIGxvYWRlciBpbnN0YW5jZXMgd2l0aCB0aGVpciBgdmlzaWJsZWAgcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgdGhlIG9wZW5lZCBsb2FkZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRPcGVuZWRMb2FkZXJzKCk6IExvYWRlckluc3RhbmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLmZpbHRlcigobG9hZGVyKSA9PiBsb2FkZXIuY29tcG9uZW50LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYWxsIHRoZSBhY3RpdmUgbG9hZGVycy4gSXQgbG9va3MgZm9yIGFsbCBsb2FkZXIgaW5zdGFuY2VzIHdpdGggdGhlaXIgYGxvYWRpbmdgIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IHRoYXQgY29udGFpbnMgYWxsIHRoZSBhY3RpdmUgbG9hZGVycy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0QWN0aXZlTG9hZGVycygpOiBMb2FkZXJJbnN0YW5jZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maWx0ZXIoKGxvYWRlcikgPT4gbG9hZGVyLmNvbXBvbmVudC5sb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgaGlnaGVyIGB6LWluZGV4YCB2YWx1ZSBiZXR3ZWVuIGFsbCB0aGUgbG9hZGVyIGluc3RhbmNlcy4gSXQgaXRlcmF0ZXMgb3ZlciB0aGUgYExvYWRlclN0YWNrYCBhcnJheSBhbmRcclxuICAgKiBjYWxjdWxhdGVzIGEgaGlnaGVyIHZhbHVlIChpdCB0YWtlcyB0aGUgaGlnaGVzdCBpbmRleCB2YWx1ZSBiZXR3ZWVuIGFsbCB0aGUgbG9hZGVyIGluc3RhbmNlcyBhbmQgYWRkcyAxKS5cclxuICAgKiBVc2UgaXQgdG8gbWFrZSBhIGxvYWRlciBhcHBlYXIgZm9yZWdyb3VuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBoaWdoZXIgaW5kZXggZnJvbSBhbGwgdGhlIGV4aXN0aW5nIGxvYWRlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldEhpZ2hlckluZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBpbmRleDogbnVtYmVyW10gPSB0aGlzLmdldE9wZW5lZExvYWRlcnMoKS5tYXAoKGxvYWRlcikgPT4gbG9hZGVyLmNvbXBvbmVudC5sYXllclBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uaW5kZXgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZSBsb2FkaW5nIHN0YXRlIHRvIG9uZSBvciBzZXZlcmFsIGxvYWRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIGxvYWRlciBpZGVudGlmaWVyLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGFydChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGxldCBsb2FkZXI7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAgIGlkLmZvckVhY2goKGk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhcnQoaSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIGxvYWRlci5jb21wb25lbnQuc3RhcnQoKTtcclxuICAgICAgdGhpcy5fcmVtb3ZlQWN0aW9uKGlkLCAnc3RhcnQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FkZEFjdGlvbihpZCwgJ3N0YXJ0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgbG9hZGluZyBzdGF0ZSB0byBhbGwgbG9hZGVycy5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhcnRBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkZXIpID0+IHRoaXMuc3RhcnQobG9hZGVyLmlkKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGxvYWRpbmcgc3RhdGUgdG8gb25lIG9yIHNldmVyYWwgbG9hZGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICovXHJcbiAgcHVibGljIHN0b3AoaWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBsZXQgbG9hZGVyO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3AoaSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIGxvYWRlci5jb21wb25lbnQuc3RvcCgpO1xyXG4gICAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaWQsICdzdG9wJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hZGRBY3Rpb24oaWQsICdzdG9wJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGxvYWRpbmcgc3RhdGUgdG8gYWxsIGxvYWRlcnMuXHJcbiAgICovXHJcbiAgcHVibGljIHN0b3BBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkZXIpID0+IHRoaXMuc3RvcChsb2FkZXIuaWQpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0xvYWRpbmcoaWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbG9hZGVyO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAgIGNvbnN0IHRtcDogYW55ID0gW107XHJcblxyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkKSA9PiB7XHJcbiAgICAgICAgICBpZiAobG9hZC5pZCA9PT0gaSkge1xyXG4gICAgICAgICAgICB0bXAucHVzaChsb2FkLmNvbXBvbmVudC5sb2FkaW5nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0bXAuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIHJldHVybiBsb2FkZXIuY29tcG9uZW50LmxvYWRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGFuIGFjdGlvbiBvbiBsb2FkZXJzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIGxvYWRlciBpZGVudGlmaWVyLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gTmFtZSBvZiB0aGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBleGVjdXRlQWN0aW9uKGlkOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcml2YXRlQWN0aW9ucy5maW5kKChhY3QpID0+IGFjdC5pZGVudGlmaWVyID09PSBpZCAmJiBhY3QuYWN0aW9uID09PSBhY3Rpb24pKSB7XHJcbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgICAgdGhpcy5zdGFydChpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdG9wJzpcclxuICAgICAgICAgIHRoaXMuc3RvcChpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBsb2FkZXIgaW5zdGFuY2UgYnkgaXRzIGlkZW50aWZpZXIuXHJcbiAgICogSWYgdGhlcmUncyBzZXZlcmFsIGxvYWRlcnMgd2l0aCBzYW1lIGlkZW50aWZpZXIsIHRoZSBmaXJzdCBpcyByZXR1cm5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldExvYWRlcihpZDogc3RyaW5nKTogTG9hZGVySW5zdGFuY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maW5kKChsb2FkKSA9PiBsb2FkLmlkID09PSBpZCkgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYW4gYWN0aW9uIG9uIG9uZSBvciBtb3JlIGxvYWRlcnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkQWN0aW9uKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9hZGRBY3Rpb24oaSwgYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByaXZhdGVBY3Rpb25zLnB1c2goeyBpZGVudGlmaWVyOiBpZCwgYWN0aW9uOiBhY3Rpb24gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYWN0aW9uIG9uIG9uZSBvciBtb3JlIGxvYWRlcnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWN0aW9uKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaSwgYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByaXZhdGVBY3Rpb25zID0gdGhpcy5wcml2YXRlQWN0aW9ucy5maWx0ZXIoKGFjdCkgPT4gYWN0LmlkZW50aWZpZXIgIT09IGlkIHx8IChhY3QuYWN0aW9uICE9PSBhY3Rpb24gJiYgYWN0aW9uICE9PSAnKicpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkQ6L1NvdXJjZUthcmF2aS9HaXRIdWIvbnBtLW50ay1jbXMtYW5ndWxhci9wcm9qZWN0cy9uZ3gtbnRrLXNtYXJ0LW1vZHVsZS9zcmMvIiwic291cmNlcyI6WyJsaWIvbG9hZGVyL250ay1zbWFydC1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8zQyxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSVUsdUJBQWtCLEdBQXFCLEVBQUUsQ0FBQztRQUMxQyxtQkFBYyxHQUFrRCxFQUFFLENBQUM7S0FpTzVFO0lBL05DOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQUMsY0FBOEIsRUFBRSxLQUFlO1FBQzlELElBQUksS0FBSyxFQUFFO1lBQ1QsTUFBTSxDQUFDLEdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRTtnQkFDeEUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUM5QztZQUNELE9BQU87U0FDUjtRQUNELElBQUksTUFBTSxDQUFDO1FBQ1gsc0RBQXNEO1FBQ3RELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLEdBQUcs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YztRQUN6RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDckIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQy9IO0lBQ0gsQ0FBQzs7OztZQXJPRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBMb2FkZXJJbnN0YW5jZSB9IGZyb20gJy4vbG9hZGVyLWluc3RhbmNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdGtTbWFydExvYWRlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJpdmF0ZWxvYWRlclN0YWNrOiBMb2FkZXJJbnN0YW5jZVtdID0gW107XHJcbiAgcHJpdmF0ZSBwcml2YXRlQWN0aW9uczogQXJyYXk8eyBpZGVudGlmaWVyOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBsb2FkZXIgaW5zdGFuY2UuIFRoaXMgc3RlcCBpcyBlc3NlbnRpYWwgYW5kIGFsbG93cyB0byByZXRyaWV2ZSBhbnkgbG9hZGVyIGF0IGFueSB0aW1lLlxyXG4gICAqIEl0IHN0b3JlcyBhbiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbG9hZGVyIGlkZW50aWZpZXIgYW5kIHRoZSBsb2FkZXIgaXRzZWxmIGRpcmVjdGx5IGluIHRoZSBgbG9hZGVyU3RhY2tgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGxvYWRlckluc3RhbmNlIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbG9hZGVyIGlkZW50aWZpZXIgYW5kIHRoZSBsb2FkZXIgaXRzZWxmLlxyXG4gICAqIEBwYXJhbSBmb3JjZSBPcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBmb3JjZXMgdGhlIG92ZXJyaWRpbmcgb2YgbG9hZGVyIGluc3RhbmNlIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgbm90aGluZyBzcGVjaWFsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRMb2FkZXIobG9hZGVySW5zdGFuY2U6IExvYWRlckluc3RhbmNlLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChmb3JjZSkge1xyXG4gICAgICBjb25zdCBpOiBudW1iZXIgPSB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maW5kSW5kZXgoKG86IExvYWRlckluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG8uaWQgPT09IGxvYWRlckluc3RhbmNlLmlkO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrW2ldLmNvbXBvbmVudCA9IGxvYWRlckluc3RhbmNlLmNvbXBvbmVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5wdXNoKGxvYWRlckluc3RhbmNlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbG9hZGVyO1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XHJcbiAgICBpZiAobG9hZGVyID0gdGhpcy5fZ2V0TG9hZGVyKGxvYWRlckluc3RhbmNlLmlkKSkge1xyXG4gICAgICB0aHJvdyAobmV3IEVycm9yKCdMb2FkZXIgd2l0aCAnICsgbG9hZGVySW5zdGFuY2UuaWQgKyAnIGlkZW50aWZpZXIgYWxyZWFkeSBleGlzdCcpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLnB1c2gobG9hZGVySW5zdGFuY2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgbG9hZGVyIGluc3RhbmNlIGZyb20gdGhlIGxvYWRlciBzdGFjay5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUxvYWRlcihpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjayA9IHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLmZpbHRlcigobG9hZGVyKSA9PiBsb2FkZXIuaWQgIT09IGlkKTtcclxuXHJcbiAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaWQsICcqJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIGNyZWF0ZWQgbG9hZGVycy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgbG9hZGVyIGluc3RhbmNlcy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TG9hZGVyU3RhY2soKTogTG9hZGVySW5zdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcml2YXRlbG9hZGVyU3RhY2s7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCBnaXZlcyB0aGUgbnVtYmVyIG9mIGxvYWRlciBpbnN0YW5jZXMuIEl0J3MgaGVscGZ1bCB0byBrbm93IGlmIHRoZSBsb2FkZXIgc3RhY2sgaXMgZW1wdHkgb3Igbm90LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxvYWRlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldExvYWRlclN0YWNrQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIG9wZW5lZCBsb2FkZXJzLiBJdCBsb29rcyBmb3IgYWxsIGxvYWRlciBpbnN0YW5jZXMgd2l0aCB0aGVpciBgdmlzaWJsZWAgcHJvcGVydHkgc2V0IHRvIGB0cnVlYC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgdGhlIG9wZW5lZCBsb2FkZXJzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRPcGVuZWRMb2FkZXJzKCk6IExvYWRlckluc3RhbmNlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJpdmF0ZWxvYWRlclN0YWNrLmZpbHRlcigobG9hZGVyKSA9PiBsb2FkZXIuY29tcG9uZW50LnZpc2libGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYWxsIHRoZSBhY3RpdmUgbG9hZGVycy4gSXQgbG9va3MgZm9yIGFsbCBsb2FkZXIgaW5zdGFuY2VzIHdpdGggdGhlaXIgYGxvYWRpbmdgIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IHRoYXQgY29udGFpbnMgYWxsIHRoZSBhY3RpdmUgbG9hZGVycy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0QWN0aXZlTG9hZGVycygpOiBMb2FkZXJJbnN0YW5jZVtdIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maWx0ZXIoKGxvYWRlcikgPT4gbG9hZGVyLmNvbXBvbmVudC5sb2FkaW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgaGlnaGVyIGB6LWluZGV4YCB2YWx1ZSBiZXR3ZWVuIGFsbCB0aGUgbG9hZGVyIGluc3RhbmNlcy4gSXQgaXRlcmF0ZXMgb3ZlciB0aGUgYExvYWRlclN0YWNrYCBhcnJheSBhbmRcclxuICAgKiBjYWxjdWxhdGVzIGEgaGlnaGVyIHZhbHVlIChpdCB0YWtlcyB0aGUgaGlnaGVzdCBpbmRleCB2YWx1ZSBiZXR3ZWVuIGFsbCB0aGUgbG9hZGVyIGluc3RhbmNlcyBhbmQgYWRkcyAxKS5cclxuICAgKiBVc2UgaXQgdG8gbWFrZSBhIGxvYWRlciBhcHBlYXIgZm9yZWdyb3VuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBoaWdoZXIgaW5kZXggZnJvbSBhbGwgdGhlIGV4aXN0aW5nIGxvYWRlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldEhpZ2hlckluZGV4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBpbmRleDogbnVtYmVyW10gPSB0aGlzLmdldE9wZW5lZExvYWRlcnMoKS5tYXAoKGxvYWRlcikgPT4gbG9hZGVyLmNvbXBvbmVudC5sYXllclBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4uaW5kZXgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZSBsb2FkaW5nIHN0YXRlIHRvIG9uZSBvciBzZXZlcmFsIGxvYWRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIGxvYWRlciBpZGVudGlmaWVyLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGFydChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIGxldCBsb2FkZXI7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAgIGlkLmZvckVhY2goKGk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhcnQoaSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIGxvYWRlci5jb21wb25lbnQuc3RhcnQoKTtcclxuICAgICAgdGhpcy5fcmVtb3ZlQWN0aW9uKGlkLCAnc3RhcnQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FkZEFjdGlvbihpZCwgJ3N0YXJ0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgbG9hZGluZyBzdGF0ZSB0byBhbGwgbG9hZGVycy5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhcnRBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkZXIpID0+IHRoaXMuc3RhcnQobG9hZGVyLmlkKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGxvYWRpbmcgc3RhdGUgdG8gb25lIG9yIHNldmVyYWwgbG9hZGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICovXHJcbiAgcHVibGljIHN0b3AoaWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBsZXQgbG9hZGVyO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3AoaSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIGxvYWRlci5jb21wb25lbnQuc3RvcCgpO1xyXG4gICAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaWQsICdzdG9wJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hZGRBY3Rpb24oaWQsICdzdG9wJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlIGxvYWRpbmcgc3RhdGUgdG8gYWxsIGxvYWRlcnMuXHJcbiAgICovXHJcbiAgcHVibGljIHN0b3BBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkZXIpID0+IHRoaXMuc3RvcChsb2FkZXIuaWQpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0xvYWRpbmcoaWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbG9hZGVyO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAgIGNvbnN0IHRtcDogYW55ID0gW107XHJcblxyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5mb3JFYWNoKChsb2FkKSA9PiB7XHJcbiAgICAgICAgICBpZiAobG9hZC5pZCA9PT0gaSkge1xyXG4gICAgICAgICAgICB0bXAucHVzaChsb2FkLmNvbXBvbmVudC5sb2FkaW5nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiB0bXAuaW5kZXhPZihmYWxzZSkgPT09IC0xO1xyXG4gICAgfSBlbHNlIGlmIChsb2FkZXIgPSB0aGlzLl9nZXRMb2FkZXIoaWQpKSB7XHJcbiAgICAgIHJldHVybiBsb2FkZXIuY29tcG9uZW50LmxvYWRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGFuIGFjdGlvbiBvbiBsb2FkZXJzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIGxvYWRlciBpZGVudGlmaWVyLlxyXG4gICAqIEBwYXJhbSBhY3Rpb24gTmFtZSBvZiB0aGUgYWN0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBleGVjdXRlQWN0aW9uKGlkOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcml2YXRlQWN0aW9ucy5maW5kKChhY3QpID0+IGFjdC5pZGVudGlmaWVyID09PSBpZCAmJiBhY3QuYWN0aW9uID09PSBhY3Rpb24pKSB7XHJcbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgICAgdGhpcy5zdGFydChpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdzdG9wJzpcclxuICAgICAgICAgIHRoaXMuc3RvcChpZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBsb2FkZXIgaW5zdGFuY2UgYnkgaXRzIGlkZW50aWZpZXIuXHJcbiAgICogSWYgdGhlcmUncyBzZXZlcmFsIGxvYWRlcnMgd2l0aCBzYW1lIGlkZW50aWZpZXIsIHRoZSBmaXJzdCBpcyByZXR1cm5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldExvYWRlcihpZDogc3RyaW5nKTogTG9hZGVySW5zdGFuY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVsb2FkZXJTdGFjay5maW5kKChsb2FkKSA9PiBsb2FkLmlkID09PSBpZCkgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYW4gYWN0aW9uIG9uIG9uZSBvciBtb3JlIGxvYWRlcnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYWRkQWN0aW9uKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9hZGRBY3Rpb24oaSwgYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByaXZhdGVBY3Rpb25zLnB1c2goeyBpZGVudGlmaWVyOiBpZCwgYWN0aW9uOiBhY3Rpb24gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYW4gYWN0aW9uIG9uIG9uZSBvciBtb3JlIGxvYWRlcnNcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbG9hZGVyIGlkZW50aWZpZXIuXHJcbiAgICogQHBhcmFtIGFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWN0aW9uKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSkge1xyXG4gICAgICBpZC5mb3JFYWNoKChpOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLl9yZW1vdmVBY3Rpb24oaSwgYWN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByaXZhdGVBY3Rpb25zID0gdGhpcy5wcml2YXRlQWN0aW9ucy5maWx0ZXIoKGFjdCkgPT4gYWN0LmlkZW50aWZpZXIgIT09IGlkIHx8IChhY3QuYWN0aW9uICE9PSBhY3Rpb24gJiYgYWN0aW9uICE9PSAnKicpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19

@@ -1,8 +0,11 @@

import { Input, Output, Renderer2, Component, EventEmitter, HostListener, ChangeDetectorRef, ViewChild, ElementRef, } from '@angular/core';
import { NtkSmartModalService } from './ntk-smart-modal.service';
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
import { ChangeDetectorRef, Component, ComponentFactoryResolver, EventEmitter, HostListener, Inject, Input, Output, PLATFORM_ID, QueryList, Renderer2, ViewChildren, ViewContainerRef } from '@angular/core';
import { NtkSmartModalConfig } from './ntk-smart-modal.config';
export class NtkSmartModalComponent {
constructor(privateRenderer, privateChangeDetectorRef, privateNtkSmartModalService) {
this.privateRenderer = privateRenderer;
this.privateChangeDetectorRef = privateChangeDetectorRef;
this.privateNtkSmartModalService = privateNtkSmartModalService;
constructor(_renderer, _changeDetectorRef, componentFactoryResolver, _document, _platformId) {
this._renderer = _renderer;
this._changeDetectorRef = _changeDetectorRef;
this.componentFactoryResolver = componentFactoryResolver;
this._document = _document;
this._platformId = _platformId;
this.closable = true;

@@ -18,2 +21,7 @@ this.escapable = true;

this.autostart = false;
this.target = '';
this.ariaLabel = null;
this.ariaLabelledBy = null;
this.ariaDescribedBy = null;
this.refocus = true;
this.visibleChange = new EventEmitter();

@@ -27,2 +35,3 @@ this.onClose = new EventEmitter();

this.onOpen = new EventEmitter();
this.onOpenFinished = new EventEmitter();
this.onEscape = new EventEmitter();

@@ -34,96 +43,70 @@ this.onDataAdded = new EventEmitter();

this.openedClass = false;
this.escapeKeyboardEvent = (event) => {
if (event.keyCode === 27) {
this.onEscape.emit(this);
this.privateNtkSmartModalService.closeLatestModal();
}
};
this.createFrom = 'html';
}
ngOnInit() {
if (!!this.identifier && this.identifier.length) {
this.layerPosition += this.privateNtkSmartModalService.getModalStackCount();
this.privateNtkSmartModalService.addModal({ id: this.identifier, modal: this }, this.force);
if (this.autostart) {
this.privateNtkSmartModalService.open(this.identifier);
}
if (!this.identifier || !this.identifier.length) {
throw new Error('identifier field isn’t set. Please set one before calling <ngx-smart-modal> in a template.');
}
else {
throw new Error('identifier field isn’t set. Please set one before calling <ntk-smart-modal> in a template.');
this._sendEvent('create');
}
ngAfterViewInit() {
if (this.contentComponent) {
const factory = this.componentFactoryResolver.resolveComponentFactory(this.contentComponent);
this.createDynamicContent(this.dynamicContentContainer, factory);
this.dynamicContentContainer.changes.subscribe((contentViewContainers) => {
this.createDynamicContent(contentViewContainers, factory);
});
}
}
ngOnDestroy() {
this.privateNtkSmartModalService.removeModal(this.identifier);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
if (!this.privateNtkSmartModalService.getModalStack.length) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
this._sendEvent('delete');
}
/**
* Open the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
open(top) {
if (top) {
this.layerPosition = this.privateNtkSmartModalService.getHigherIndex();
}
this.privateRenderer.addClass(document.body, 'dialog-open');
this.overlayVisible = true;
this.visible = true;
setTimeout(() => {
this.openedClass = true;
if (this.target) {
this.targetPlacement();
}
this.privateChangeDetectorRef.markForCheck();
});
this.onOpen.emit(this);
if (this.escapable) {
window.addEventListener('keyup', this.escapeKeyboardEvent);
}
this._sendEvent('open', { top: top });
return this;
}
/**
* Close the modal instance
*
* @returns the modal component
*/
close() {
const me = this;
this.openedClass = false;
this.onClose.emit(this);
this.onAnyCloseEvent.emit(this);
if (this.privateNtkSmartModalService.getOpenedModals().length < 2) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
setTimeout(() => {
me.visibleChange.emit(me.visible);
me.visible = false;
me.overlayVisible = false;
me.privateChangeDetectorRef.markForCheck();
me.onCloseFinished.emit(me);
me.onAnyCloseEventFinished.emit(me);
}, this.hideDelay);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
this._sendEvent('close');
return this;
}
/**
* Dismiss the modal instance
*
* @param e the event sent by the browser
* @returns the modal component
*/
dismiss(e) {
const me = this;
if (!this.dismissable) {
return;
if (!this.dismissable || !e.target.classList.contains('overlay')) {
return this;
}
if (e.target.classList.contains('overlay')) {
this.openedClass = false;
this.onDismiss.emit(this);
this.onAnyCloseEvent.emit(this);
if (this.privateNtkSmartModalService.getOpenedModals().length < 2) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
setTimeout(() => {
me.visible = false;
me.visibleChange.emit(me.visible);
me.overlayVisible = false;
me.privateChangeDetectorRef.markForCheck();
me.onDismissFinished.emit(me);
me.onAnyCloseEventFinished.emit(me);
}, this.hideDelay);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
}
this._sendEvent('dismiss');
return this;
}
/**
* Toggle visibility of the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
toggle(top) {
if (this.visible) {
this.close();
}
else {
this.open(top);
}
this._sendEvent('toggle', { top: top });
return this;
}
/**
* Add a custom class to the modal instance
*
* @param className the class to add
* @returns the modal component
*/
addCustomClass(className) {

@@ -136,3 +119,10 @@ if (!this.customClass.length) {

}
return this;
}
/**
* Remove a custom class to the modal instance
*
* @param className the class to remove
* @returns the modal component
*/
removeCustomClass(className) {

@@ -145,39 +135,96 @@ if (className) {

}
return this;
}
/**
* Returns the visibility state of the modal instance
*/
isVisible() {
return this.visible;
}
/**
* Checks if data is attached to the modal instance
*/
hasData() {
return this.privateData !== undefined;
return this._data !== undefined;
}
/**
* Attach data to the modal instance
*
* @param data the data to attach
* @param force override potentially attached data
* @returns the modal component
*/
setData(data, force) {
if (!this.hasData() || (this.hasData() && force)) {
this.privateData = data;
this.onDataAdded.emit(this.privateData);
this.privateChangeDetectorRef.markForCheck();
this._data = data;
this.onDataAdded.emit(this._data);
this.markForCheck();
}
return this;
}
/**
* Retrieve the data attached to the modal instance
*/
getData() {
return this.privateData;
return this._data;
}
/**
* Remove the data attached to the modal instance
*
* @returns the modal component
*/
removeData() {
this.privateData = undefined;
this._data = undefined;
this.onDataRemoved.emit(true);
this.privateChangeDetectorRef.markForCheck();
this.markForCheck();
return this;
}
/**
* Add body class modal opened
*
* @returns the modal component
*/
addBodyClass() {
this._renderer.addClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);
return this;
}
/**
* Add body class modal opened
*
* @returns the modal component
*/
removeBodyClass() {
this._renderer.removeClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);
return this;
}
markForCheck() {
try {
this._changeDetectorRef.detectChanges();
}
catch (e) {
}
this._changeDetectorRef.markForCheck();
}
/**
* Listens for window resize event and recalculates modal instance position if it is element-relative
*/
targetPlacement() {
if (!this.nsmDialog || !this.nsmContent || !this.nsmOverlay || !this.target) {
return;
if (!this.isBrowser || !this.nsmDialog.length || !this.nsmContent.length || !this.nsmOverlay.length || !this.target) {
return false;
}
const targetElementRect = document.querySelector(this.target).getBoundingClientRect();
const bodyRect = this.nsmOverlay.nativeElement.getBoundingClientRect();
const nsmContentRect = this.nsmContent.nativeElement.getBoundingClientRect();
const nsmDialogRect = this.nsmDialog.nativeElement.getBoundingClientRect();
const marginLeft = parseInt(getComputedStyle(this.nsmContent.nativeElement).marginLeft, 10);
const marginTop = parseInt(getComputedStyle(this.nsmContent.nativeElement).marginTop, 10);
let offsetTop = targetElementRect.top - nsmDialogRect.top - (nsmContentRect.height - targetElementRect.height) / 2;
let offsetLeft = targetElementRect.left - nsmDialogRect.left - (nsmContentRect.width - targetElementRect.width) / 2;
if (offsetLeft + nsmDialogRect.left + nsmContentRect.width + marginLeft * 2 > bodyRect.width) {
offsetLeft = bodyRect.width - (nsmDialogRect.left + nsmContentRect.width) - marginLeft * 2;
const targetElement = this._document.querySelector(this.target);
if (!targetElement) {
return false;
}
const targetElementRect = targetElement.getBoundingClientRect();
const bodyRect = this.nsmOverlay.first.nativeElement.getBoundingClientRect();
const nsmContentRect = this.nsmContent.first.nativeElement.getBoundingClientRect();
const nsmDialogRect = this.nsmDialog.first.nativeElement.getBoundingClientRect();
const marginLeft = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginLeft, 10);
const marginTop = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginTop, 10);
let offsetTop = targetElementRect.top - nsmDialogRect.top - ((nsmContentRect.height - targetElementRect.height) / 2);
let offsetLeft = targetElementRect.left - nsmDialogRect.left - ((nsmContentRect.width - targetElementRect.width) / 2);
if (offsetLeft + nsmDialogRect.left + nsmContentRect.width + (marginLeft * 2) > bodyRect.width) {
offsetLeft = bodyRect.width - (nsmDialogRect.left + nsmContentRect.width) - (marginLeft * 2);
}
else if (offsetLeft + nsmDialogRect.left < 0) {

@@ -189,8 +236,32 @@ offsetLeft = -nsmDialogRect.left;

}
if (offsetTop < 0) {
offsetTop = 0;
this._renderer.setStyle(this.nsmContent.first.nativeElement, 'top', (offsetTop < 0 ? 0 : offsetTop) + 'px');
this._renderer.setStyle(this.nsmContent.first.nativeElement, 'left', offsetLeft + 'px');
}
_sendEvent(name, extraData) {
if (!this.isBrowser) {
return false;
}
this.privateRenderer.setStyle(this.nsmContent.nativeElement, 'top', offsetTop + 'px');
this.privateRenderer.setStyle(this.nsmContent.nativeElement, 'left', offsetLeft + 'px');
const data = {
extraData: extraData,
instance: { id: this.identifier, modal: this }
};
const event = new CustomEvent(NtkSmartModalConfig.prefixEvent + name, { detail: data });
return window.dispatchEvent(event);
}
/**
* Is current platform browser
*/
get isBrowser() {
return isPlatformBrowser(this._platformId);
}
/**
* Creates content inside provided ViewContainerRef
*/
createDynamicContent(changes, factory) {
changes.forEach((viewContainerRef) => {
viewContainerRef.clear();
viewContainerRef.createComponent(factory);
this.markForCheck();
});
}
}

@@ -201,22 +272,32 @@ NtkSmartModalComponent.decorators = [

template: `
<div
*ngIf="overlayVisible"
[style.z-index]="visible ? layerPosition - 1 : -1"
[ngClass]="{ transparent: !backdrop, overlay: true, 'nsm-overlay-open': openedClass }"
(click)="dismiss($event)"
#nsmOverlay
>
<div
[style.z-index]="visible ? layerPosition : -1"
[ngClass]="['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open' : 'nsm-dialog-close']"
#nsmDialog
>
<div *ngIf="overlayVisible"
[style.z-index]="visible ? layerPosition-1 : -1"
[ngClass]="{'transparent':!backdrop, 'overlay':true, 'nsm-overlay-open':openedClass}"
(click)="dismiss($event)" #nsmOverlay>
<div [style.z-index]="visible ? layerPosition : -1"
[ngClass]="['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open': 'nsm-dialog-close']" #nsmDialog
[attr.aria-hidden]="openedClass ? false : true"
[attr.aria-label]="ariaLabel"
[attr.aria-labelledby]="ariaLabelledBy"
[attr.aria-describedby]="ariaDescribedBy">
<div class="nsm-content" #nsmContent>
<div class="nsm-body">
<ng-template #dynamicContent></ng-template>
<ng-content></ng-content>
</div>
<button type="button" *ngIf="closable" (click)="close()" aria-label="Close" class="nsm-dialog-btn-close">
<img
src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDMsNi4wNThjLTguMDc3LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDksMEw2LjA1OCw0NzYuNjkzYy04LjA3Nyw4LjA3Ny04LjA3NywyMS4xNzIsMCwyOS4yNDkgICAgQzEwLjA5Niw1MDkuOTgyLDE1LjM5LDUxMiwyMC42ODMsNTEyYzUuMjkzLDAsMTAuNTg2LTIuMDE5LDE0LjYyNS02LjA1OUw1MDUuOTQzLDM1LjMwNiAgICBDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDIsNDc2LjY5NEwzNS4zMDYsNi4wNTljLTguMDc2LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDgsMGMtOC4wNzcsOC4wNzYtOC4wNzcsMjEuMTcxLDAsMjkuMjQ4bDQ3MC42MzYsNDcwLjYzNiAgICBjNC4wMzgsNC4wMzksOS4zMzIsNi4wNTgsMTQuNjI1LDYuMDU4YzUuMjkzLDAsMTAuNTg3LTIuMDE5LDE0LjYyNC02LjA1N0M1MTQuMDE4LDQ5Ny44NjYsNTE0LjAxOCw0ODQuNzcxLDUwNS45NDIsNDc2LjY5NHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K"
/>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512"
xml:space="preserve" width="16px" height="16px" role="img" aria-labelledby="closeIconTitle closeIconDesc">
<title id="closeIconTitle">Close Icon</title>
<desc id="closeIconDesc">A light-gray close icon used to close the modal</desc>
<g>
<path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249 C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306 C514.019,27.23,514.019,14.135,505.943,6.058z"
fill="currentColor"/>
</g>
<g>
<path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636 c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"
fill="currentColor"/>
</g>
</svg>
</button>

@@ -232,3 +313,5 @@ </div>

{ type: ChangeDetectorRef },
{ type: NtkSmartModalService }
{ type: ComponentFactoryResolver },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];

@@ -247,2 +330,6 @@ NtkSmartModalComponent.propDecorators = {

target: [{ type: Input }],
ariaLabel: [{ type: Input }],
ariaLabelledBy: [{ type: Input }],
ariaDescribedBy: [{ type: Input }],
refocus: [{ type: Input }],
visibleChange: [{ type: Output }],

@@ -256,10 +343,12 @@ onClose: [{ type: Output }],

onOpen: [{ type: Output }],
onOpenFinished: [{ type: Output }],
onEscape: [{ type: Output }],
onDataAdded: [{ type: Output }],
onDataRemoved: [{ type: Output }],
nsmContent: [{ type: ViewChild, args: ['nsmContent',] }],
nsmDialog: [{ type: ViewChild, args: ['nsmDialog',] }],
nsmOverlay: [{ type: ViewChild, args: ['nsmOverlay',] }],
nsmContent: [{ type: ViewChildren, args: ['nsmContent',] }],
nsmDialog: [{ type: ViewChildren, args: ['nsmDialog',] }],
nsmOverlay: [{ type: ViewChildren, args: ['nsmOverlay',] }],
dynamicContentContainer: [{ type: ViewChildren, args: ['dynamicContent', { read: ViewContainerRef },] }],
targetPlacement: [{ type: HostListener, args: ['window:resize',] }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Tb3VyY2VLYXJhdmkvR2l0SHViL25wbS1udGstY21zLWFuZ3VsYXIvcHJvamVjdHMvbmd4LW50ay1zbWFydC1tb2R1bGUvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsL250ay1zbWFydC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBR04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBK0JqRSxNQUFNLE9BQU8sc0JBQXNCO0lBbUNqQyxZQUNVLGVBQTBCLEVBQzFCLHdCQUEyQyxFQUMzQywyQkFBaUQ7UUFGakQsb0JBQWUsR0FBZixlQUFlLENBQVc7UUFDMUIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFtQjtRQUMzQyxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQXNCO1FBckMzQyxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFBVyxHQUFHLDJCQUEyQixDQUFDO1FBQzFDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNoQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBR2pCLGtCQUFhLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDbkUsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELG9CQUFlLEdB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RUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUYsQ0FBQzs7O1lBcFFGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQ7YUFDRjs7O1lBdkNDLFNBQVM7WUFJVCxpQkFBaUI7WUFLVixvQkFBb0I7Ozt1QkFnQzFCLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7cUJBQ0wsS0FBSzs0QkFFTCxNQUFNO3NCQUNOLE1BQU07OEJBQ04sTUFBTTt3QkFDTixNQUFNO2dDQUNOLE1BQU07OEJBQ04sTUFBTTtzQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTswQkFDTixNQUFNOzRCQUNOLE1BQU07eUJBUU4sU0FBUyxTQUFDLFlBQVk7d0JBQ3RCLFNBQVMsU0FBQyxXQUFXO3lCQUNyQixTQUFTLFNBQUMsWUFBWTs4QkFvS3RCLFlBQVksU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBSZW5kZXJlcjIsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsU2VydmljZSB9IGZyb20gJy4vbnRrLXNtYXJ0LW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdudGstc21hcnQtbW9kYWwnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwib3ZlcmxheVZpc2libGVcIlxyXG4gICAgICBbc3R5bGUuei1pbmRleF09XCJ2aXNpYmxlID8gbGF5ZXJQb3NpdGlvbiAtIDEgOiAtMVwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgdHJhbnNwYXJlbnQ6ICFiYWNrZHJvcCwgb3ZlcmxheTogdHJ1ZSwgJ25zbS1vdmVybGF5LW9wZW4nOiBvcGVuZWRDbGFzcyB9XCJcclxuICAgICAgKGNsaWNrKT1cImRpc21pc3MoJGV2ZW50KVwiXHJcbiAgICAgICNuc21PdmVybGF5XHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCJ2aXNpYmxlID8gbGF5ZXJQb3NpdGlvbiA6IC0xXCJcclxuICAgICAgICBbbmdDbGFzc109XCJbJ25zbS1kaWFsb2cnLCBjdXN0b21DbGFzcywgb3BlbmVkQ2xhc3MgPyAnbnNtLWRpYWxvZy1vcGVuJyA6ICduc20tZGlhbG9nLWNsb3NlJ11cIlxyXG4gICAgICAgICNuc21EaWFsb2dcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuc20tY29udGVudFwiICNuc21Db250ZW50PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5zbS1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJjbG9zYWJsZVwiIChjbGljayk9XCJjbG9zZSgpXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJuc20tZGlhbG9nLWJ0bi1jbG9zZVwiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgc3JjPVwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpYVhOdkxUZzROVGt0TVNJL1BnbzhJUzB0SUVkbGJtVnlZWFJ2Y2pvZ1FXUnZZbVVnU1d4c2RYTjBjbUYwYjNJZ01Ua3VNQzR3TENCVFZrY2dSWGh3YjNKMElGQnNkV2N0U1c0Z0xpQlRWa2NnVm1WeWMybHZiam9nTmk0d01DQkNkV2xzWkNBd0tTQWdMUzArQ2p4emRtY2dlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpSUhacFpYZENiM2c5SWpBZ01DQTFNVElnTlRFeUlpQnpkSGxzWlQwaVpXNWhZbXhsTFdKaFkydG5jbTkxYm1RNmJtVjNJREFnTUNBMU1USWdOVEV5T3lJZ2VHMXNPbk53WVdObFBTSndjbVZ6WlhKMlpTSWdkMmxrZEdnOUlqRTJjSGdpSUdobGFXZG9kRDBpTVRad2VDSStDanhuUGdvSlBHYytDZ2tKUEhCaGRHZ2daRDBpVFRVd05TNDVORE1zTmk0d05UaGpMVGd1TURjM0xUZ3VNRGMzTFRJeExqRTNNaTA0TGpBM055MHlPUzR5TkRrc01FdzJMakExT0N3ME56WXVOamt6WXkwNExqQTNOeXc0TGpBM055MDRMakEzTnl3eU1TNHhOeklzTUN3eU9TNHlORGtnSUNBZ1F6RXdMakE1Tml3MU1Ea3VPVGd5TERFMUxqTTVMRFV4TWl3eU1DNDJPRE1zTlRFeVl6VXVNamt6TERBc01UQXVOVGcyTFRJdU1ERTVMREUwTGpZeU5TMDJMakExT1V3MU1EVXVPVFF6TERNMUxqTXdOaUFnSUNCRE5URTBMakF4T1N3eU55NHlNeXcxTVRRdU1ERTVMREUwTGpFek5TdzFNRFV1T1RRekxEWXVNRFU0ZWlJZ1ptbHNiRDBpSXpBd01EQXdNQ0l2UGdvSlBDOW5QZ284TDJjK0NqeG5QZ29KUEdjK0Nna0pQSEJoZEdnZ1pEMGlUVFV3TlM0NU5ESXNORGMyTGpZNU5Fd3pOUzR6TURZc05pNHdOVGxqTFRndU1EYzJMVGd1TURjM0xUSXhMakUzTWkwNExqQTNOeTB5T1M0eU5EZ3NNR010T0M0d056Y3NPQzR3TnpZdE9DNHdOemNzTWpFdU1UY3hMREFzTWprdU1qUTRiRFEzTUM0Mk16WXNORGN3TGpZek5pQWdJQ0JqTkM0d016Z3NOQzR3TXprc09TNHpNeklzTmk0d05UZ3NNVFF1TmpJMUxEWXVNRFU0WXpVdU1qa3pMREFzTVRBdU5UZzNMVEl1TURFNUxERTBMall5TkMwMkxqQTFOME0xTVRRdU1ERTRMRFE1Tnk0NE5qWXNOVEUwTGpBeE9DdzBPRFF1TnpjeExEVXdOUzQ1TkRJc05EYzJMalk1TkhvaUlHWnBiR3c5SWlNd01EQXdNREFpTHo0S0NUd3ZaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhaejRLUEM5blBnbzhMM04yWno0S1wiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnRrU21hcnRNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBwdWJsaWMgY2xvc2FibGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlc2NhcGFibGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNtaXNzYWJsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgcHVibGljIGlkZW50aWZpZXIgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3MgPSAnbnNtLWRpYWxvZy1hbmltYXRpb24tZmFkZSc7XHJcbiAgQElucHV0KCkgcHVibGljIHZpc2libGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYmFja2Ryb3AgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JjZSA9IHRydWU7XHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVEZWxheSA9IDUwMDtcclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b3N0YXJ0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRhcmdldDogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DbG9zZUZpbmlzaGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uRGlzbWlzczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkRpc21pc3NGaW5pc2hlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkFueUNsb3NlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25BbnlDbG9zZUV2ZW50RmluaXNoZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uRXNjYXBlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uRGF0YUFkZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uRGF0YVJlbW92ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgbGF5ZXJQb3NpdGlvbiA9IDEwNDE7XHJcbiAgcHVibGljIG92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XHJcbiAgcHVibGljIG9wZW5lZENsYXNzID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcHJpdmF0ZURhdGE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbnNtQ29udGVudCcpIHByaXZhdGUgbnNtQ29udGVudDogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCduc21EaWFsb2cnKSBwcml2YXRlIG5zbURpYWxvZzogRWxlbWVudFJlZiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCduc21PdmVybGF5JykgcHJpdmF0ZSBuc21PdmVybGF5OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcHJpdmF0ZVJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHByaXZhdGVDaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHByaXZhdGVOdGtTbWFydE1vZGFsU2VydmljZTogTnRrU21hcnRNb2RhbFNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5pZGVudGlmaWVyICYmIHRoaXMuaWRlbnRpZmllci5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5sYXllclBvc2l0aW9uICs9IHRoaXMucHJpdmF0ZU50a1NtYXJ0TW9kYWxTZXJ2aWNlLmdldE1vZGFsU3RhY2tDb3VudCgpO1xyXG4gICAgICB0aGlzLnByaXZhdGVOdGtTbWFydE1vZGFsU2VydmljZS5hZGRNb2RhbCh7IGlkOiB0aGlzLmlkZW50aWZpZXIsIG1vZGFsOiB0aGlzIH0sIHRoaXMuZm9yY2UpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b3N0YXJ0KSB7XHJcbiAgICAgICAgdGhpcy5wcml2YXRlTnRrU21hcnRNb2RhbFNlcnZpY2Uub3Blbih0aGlzLmlkZW50aWZpZXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkZW50aWZpZXIgZmllbGQgaXNu4oCZdCBzZXQuIFBsZWFzZSBzZXQgb25lIGJlZm9yZSBjYWxsaW5nIDxudGstc21hcnQtbW9kYWw+IGluIGEgdGVtcGxhdGUuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnByaXZhdGVOdGtTbWFydE1vZGFsU2VydmljZS5yZW1vdmVNb2RhbCh0aGlzLmlkZW50aWZpZXIpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5lc2NhcGVLZXlib2FyZEV2ZW50KTtcclxuICAgIGlmICghdGhpcy5wcml2YXRlTnRrU21hcnRNb2RhbFNlcnZpY2UuZ2V0TW9kYWxTdGFjay5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5wcml2YXRlUmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2RpYWxvZy1vcGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3Blbih0b3A/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodG9wKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJQb3NpdGlvbiA9IHRoaXMucHJpdmF0ZU50a1NtYXJ0TW9kYWxTZXJ2aWNlLmdldEhpZ2hlckluZGV4KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcml2YXRlUmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2RpYWxvZy1vcGVuJyk7XHJcbiAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3BlbmVkQ2xhc3MgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XHJcbiAgICAgICAgdGhpcy50YXJnZXRQbGFjZW1lbnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5wcml2YXRlQ2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uT3Blbi5lbWl0KHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmVzY2FwYWJsZSkge1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmVzY2FwZUtleWJvYXJkRXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG5cclxuICAgIHRoaXMub3BlbmVkQ2xhc3MgPSBmYWxzZTtcclxuICAgIHRoaXMub25DbG9zZS5lbWl0KHRoaXMpO1xyXG4gICAgdGhpcy5vbkFueUNsb3NlRXZlbnQuZW1pdCh0aGlzKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcml2YXRlTnRrU21hcnRNb2RhbFNlcnZpY2UuZ2V0T3BlbmVkTW9kYWxzKCkubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLnByaXZhdGVSZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCAnZGlhbG9nLW9wZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbWUudmlzaWJsZUNoYW5nZS5lbWl0KG1lLnZpc2libGUpO1xyXG4gICAgICBtZS52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIG1lLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIG1lLnByaXZhdGVDaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgbWUub25DbG9zZUZpbmlzaGVkLmVtaXQobWUpO1xyXG4gICAgICBtZS5vbkFueUNsb3NlRXZlbnRGaW5pc2hlZC5lbWl0KG1lKTtcclxuICAgIH0sIHRoaXMuaGlkZURlbGF5KTtcclxuXHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLmVzY2FwZUtleWJvYXJkRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRpc21pc3MoZTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBtZSA9IHRoaXM7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc21pc3NhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdvdmVybGF5JykpIHtcclxuICAgICAgdGhpcy5vcGVuZWRDbGFzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm9uRGlzbWlzcy5lbWl0KHRoaXMpO1xyXG4gICAgICB0aGlzLm9uQW55Q2xvc2VFdmVudC5lbWl0KHRoaXMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMucHJpdmF0ZU50a1NtYXJ0TW9kYWxTZXJ2aWNlLmdldE9wZW5lZE1vZGFscygpLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICB0aGlzLnByaXZhdGVSZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCAnZGlhbG9nLW9wZW4nKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbWUudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIG1lLnZpc2libGVDaGFuZ2UuZW1pdChtZS52aXNpYmxlKTtcclxuICAgICAgICBtZS5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIG1lLnByaXZhdGVDaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICBtZS5vbkRpc21pc3NGaW5pc2hlZC5lbWl0KG1lKTtcclxuICAgICAgICBtZS5vbkFueUNsb3NlRXZlbnRGaW5pc2hlZC5lbWl0KG1lKTtcclxuICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpO1xyXG5cclxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5lc2NhcGVLZXlib2FyZEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGUodG9wPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudmlzaWJsZSkge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9wZW4odG9wKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRDdXN0b21DbGFzcyhjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmN1c3RvbUNsYXNzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNsYXNzID0gY2xhc3NOYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXN0b21DbGFzcyArPSAnICcgKyBjbGFzc05hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ2xhc3MgPSB0aGlzLmN1c3RvbUNsYXNzLnJlcGxhY2UoY2xhc3NOYW1lLCAnJykudHJpbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXN0b21DbGFzcyA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzRGF0YSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnByaXZhdGVEYXRhICE9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBhbnksIGZvcmNlPzogYm9vbGVhbik6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMuaGFzRGF0YSgpIHx8ICh0aGlzLmhhc0RhdGEoKSAmJiBmb3JjZSkpIHtcclxuICAgICAgdGhpcy5wcml2YXRlRGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMub25EYXRhQWRkZWQuZW1pdCh0aGlzLnByaXZhdGVEYXRhKTtcclxuICAgICAgdGhpcy5wcml2YXRlQ2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJpdmF0ZURhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJpdmF0ZURhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm9uRGF0YVJlbW92ZWQuZW1pdCh0cnVlKTtcclxuICAgIHRoaXMucHJpdmF0ZUNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVzY2FwZUtleWJvYXJkRXZlbnQgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAyNykge1xyXG4gICAgICB0aGlzLm9uRXNjYXBlLmVtaXQodGhpcyk7XHJcbiAgICAgIHRoaXMucHJpdmF0ZU50a1NtYXJ0TW9kYWxTZXJ2aWNlLmNsb3NlTGF0ZXN0TW9kYWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIHB1YmxpYyB0YXJnZXRQbGFjZW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubnNtRGlhbG9nIHx8ICF0aGlzLm5zbUNvbnRlbnQgfHwgIXRoaXMubnNtT3ZlcmxheSB8fCAhdGhpcy50YXJnZXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRSZWN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLnRhcmdldCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBib2R5UmVjdCA9IHRoaXMubnNtT3ZlcmxheS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGNvbnN0IG5zbUNvbnRlbnRSZWN0ID0gdGhpcy5uc21Db250ZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBuc21EaWFsb2dSZWN0ID0gdGhpcy5uc21EaWFsb2cubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5zbUNvbnRlbnQubmF0aXZlRWxlbWVudCkubWFyZ2luTGVmdCBhcyBhbnksIDEwKTtcclxuICAgIGNvbnN0IG1hcmdpblRvcCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy5uc21Db250ZW50Lm5hdGl2ZUVsZW1lbnQpLm1hcmdpblRvcCBhcyBhbnksIDEwKTtcclxuXHJcbiAgICBsZXQgb2Zmc2V0VG9wID0gdGFyZ2V0RWxlbWVudFJlY3QudG9wIC0gbnNtRGlhbG9nUmVjdC50b3AgLSAobnNtQ29udGVudFJlY3QuaGVpZ2h0IC0gdGFyZ2V0RWxlbWVudFJlY3QuaGVpZ2h0KSAvIDI7XHJcbiAgICBsZXQgb2Zmc2V0TGVmdCA9IHRhcmdldEVsZW1lbnRSZWN0LmxlZnQgLSBuc21EaWFsb2dSZWN0LmxlZnQgLSAobnNtQ29udGVudFJlY3Qud2lkdGggLSB0YXJnZXRFbGVtZW50UmVjdC53aWR0aCkgLyAyO1xyXG5cclxuICAgIGlmIChvZmZzZXRMZWZ0ICsgbnNtRGlhbG9nUmVjdC5sZWZ0ICsgbnNtQ29udGVudFJlY3Qud2lkdGggKyBtYXJnaW5MZWZ0ICogMiA+IGJvZHlSZWN0LndpZHRoKSB7XHJcbiAgICAgIG9mZnNldExlZnQgPSBib2R5UmVjdC53aWR0aCAtIChuc21EaWFsb2dSZWN0LmxlZnQgKyBuc21Db250ZW50UmVjdC53aWR0aCkgLSBtYXJnaW5MZWZ0ICogMjtcclxuICAgIH0gZWxzZSBpZiAob2Zmc2V0TGVmdCArIG5zbURpYWxvZ1JlY3QubGVmdCA8IDApIHtcclxuICAgICAgb2Zmc2V0TGVmdCA9IC1uc21EaWFsb2dSZWN0LmxlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9mZnNldFRvcCArIG5zbURpYWxvZ1JlY3QudG9wICsgbnNtQ29udGVudFJlY3QuaGVpZ2h0ICsgbWFyZ2luVG9wID4gYm9keVJlY3QuaGVpZ2h0KSB7XHJcbiAgICAgIG9mZnNldFRvcCA9IGJvZHlSZWN0LmhlaWdodCAtIChuc21EaWFsb2dSZWN0LnRvcCArIG5zbUNvbnRlbnRSZWN0LmhlaWdodCkgLSBtYXJnaW5Ub3A7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9mZnNldFRvcCA8IDApIHtcclxuICAgICAgb2Zmc2V0VG9wID0gMDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByaXZhdGVSZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5zbUNvbnRlbnQubmF0aXZlRWxlbWVudCwgJ3RvcCcsIG9mZnNldFRvcCArICdweCcpO1xyXG4gICAgdGhpcy5wcml2YXRlUmVuZGVyZXIuc2V0U3R5bGUodGhpcy5uc21Db250ZW50Lm5hdGl2ZUVsZW1lbnQsICdsZWZ0Jywgb2Zmc2V0TGVmdCArICdweCcpO1xyXG4gIH1cclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9Tb3VyY2VLYXJhdmkvR2l0SHViL25wbS1udGstY21zLWFuZ3VsYXIvcHJvamVjdHMvbmd4LW50ay1zbWFydC1tb2R1bGUvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsL250ay1zbWFydC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUVULHdCQUF3QixFQUV4QixZQUFZLEVBQ1osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUVULFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUEwQy9ELE1BQU0sT0FBTyxzQkFBc0I7SUE0Q2pDLFlBQ1UsU0FBb0IsRUFDcEIsa0JBQXFDLEVBQ3JDLHdCQUFrRCxFQUNoQyxTQUFjLEVBQ1gsV0FBZ0I7UUFKckMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDaEMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNYLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBaEQvQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFDNUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFXLDJCQUEyQixDQUFDO1FBQ2xELFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixVQUFLLEdBQVksSUFBSSxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFDeEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBQ2hDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxvQkFBZSxHQUFrQixJQUFJLENBQUM7UUFDdEMsWUFBTyxHQUFZLElBQUksQ0FBQztRQUV2QixrQkFBYSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ25FLFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxRCxvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hELDRCQUF1QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hFLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQyxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHaEUsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0IsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsZUFBVSxHQUFHLE1BQU0sQ0FBQztJQWV2QixDQUFDO0lBRUUsUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO1NBQy9HO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHFCQUFrRCxFQUFFLEVBQUU7Z0JBQ3BHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQUMsR0FBYTtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE9BQU8sQ0FBQyxDQUFNO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEdBQWE7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxTQUFpQjtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7U0FDOUI7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksaUJBQWlCLENBQUMsU0FBa0I7UUFDekMsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNuRTthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDdkI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE9BQU8sQ0FBQyxJQUFTLEVBQUUsS0FBZTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSTtZQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN6QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1NBQ1g7UUFFRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBRUksZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkgsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ25GLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRWpGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZHLElBQUksU0FBUyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JILElBQUksVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRILElBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLEtBQUssR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQzlGLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUY7YUFBTSxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUM5QyxVQUFVLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3ZGLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO1NBQ3ZGO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDNUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFZLEVBQUUsU0FBZTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQy9DLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEYsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVksU0FBUztRQUNuQixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxPQUFvQyxFQUFFLE9BQW9DO1FBQ3JHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBa0MsRUFBRSxFQUFFO1lBQ3JELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUE3VkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ1Q7YUFDRjs7O1lBOUNDLFNBQVM7WUFkVCxpQkFBaUI7WUFHakIsd0JBQXdCOzRDQTBHckIsTUFBTSxTQUFDLFFBQVE7NENBQ2YsTUFBTSxTQUFDLFdBQVc7Ozt1QkFoRHBCLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7cUJBQ0wsS0FBSzt3QkFDTCxLQUFLOzZCQUNMLEtBQUs7OEJBQ0wsS0FBSztzQkFDTCxLQUFLOzRCQUVMLE1BQU07c0JBQ04sTUFBTTs4QkFDTixNQUFNO3dCQUNOLE1BQU07Z0NBQ04sTUFBTTs4QkFDTixNQUFNO3NDQUNOLE1BQU07cUJBQ04sTUFBTTs2QkFDTixNQUFNO3VCQUNOLE1BQU07MEJBQ04sTUFBTTs0QkFDTixNQUFNO3lCQVdOLFlBQVksU0FBQyxZQUFZO3dCQUN6QixZQUFZLFNBQUMsV0FBVzt5QkFDeEIsWUFBWSxTQUFDLFlBQVk7c0NBQ3pCLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTs4QkF3TXpELFlBQVksU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFBMQVRGT1JNX0lELFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVHlwZSxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsQ29uZmlnIH0gZnJvbSAnLi9udGstc21hcnQtbW9kYWwuY29uZmlnJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ250ay1zbWFydC1tb2RhbCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgKm5nSWY9XCJvdmVybGF5VmlzaWJsZVwiXHJcbiAgICAgICAgIFtzdHlsZS56LWluZGV4XT1cInZpc2libGUgPyBsYXllclBvc2l0aW9uLTEgOiAtMVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsndHJhbnNwYXJlbnQnOiFiYWNrZHJvcCwgJ292ZXJsYXknOnRydWUsICduc20tb3ZlcmxheS1vcGVuJzpvcGVuZWRDbGFzc31cIlxyXG4gICAgICAgICAoY2xpY2spPVwiZGlzbWlzcygkZXZlbnQpXCIgI25zbU92ZXJsYXk+XHJcbiAgICAgIDxkaXYgW3N0eWxlLnotaW5kZXhdPVwidmlzaWJsZSA/IGxheWVyUG9zaXRpb24gOiAtMVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiWyduc20tZGlhbG9nJywgY3VzdG9tQ2xhc3MsIG9wZW5lZENsYXNzID8gJ25zbS1kaWFsb2ctb3Blbic6ICduc20tZGlhbG9nLWNsb3NlJ11cIiAjbnNtRGlhbG9nXHJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwib3BlbmVkQ2xhc3MgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcclxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxyXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZEJ5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5zbS1jb250ZW50XCIgI25zbUNvbnRlbnQ+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibnNtLWJvZHlcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkeW5hbWljQ29udGVudD48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImNsb3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cIm5zbS1kaWFsb2ctYnRuLWNsb3NlXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZlcnNpb249XCIxLjFcIiBpZD1cIkxheWVyXzFcIiB4PVwiMHB4XCIgeT1cIjBweFwiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiXHJcbiAgICAgICAgICAgICAgICAgeG1sOnNwYWNlPVwicHJlc2VydmVcIiB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgcm9sZT1cImltZ1wiIGFyaWEtbGFiZWxsZWRieT1cImNsb3NlSWNvblRpdGxlIGNsb3NlSWNvbkRlc2NcIj5cclxuICAgICAgICAgICAgICA8dGl0bGUgaWQ9XCJjbG9zZUljb25UaXRsZVwiPkNsb3NlIEljb248L3RpdGxlPlxyXG4gICAgICAgICAgICAgIDxkZXNjIGlkPVwiY2xvc2VJY29uRGVzY1wiPkEgbGlnaHQtZ3JheSBjbG9zZSBpY29uIHVzZWQgdG8gY2xvc2UgdGhlIG1vZGFsPC9kZXNjPlxyXG4gICAgICAgICAgICAgIDxnPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk01MDUuOTQzLDYuMDU4Yy04LjA3Ny04LjA3Ny0yMS4xNzItOC4wNzctMjkuMjQ5LDBMNi4wNTgsNDc2LjY5M2MtOC4wNzcsOC4wNzctOC4wNzcsMjEuMTcyLDAsMjkuMjQ5ICAgIEMxMC4wOTYsNTA5Ljk4MiwxNS4zOSw1MTIsMjAuNjgzLDUxMmM1LjI5MywwLDEwLjU4Ni0yLjAxOSwxNC42MjUtNi4wNTlMNTA1Ljk0MywzNS4zMDYgICAgQzUxNC4wMTksMjcuMjMsNTE0LjAxOSwxNC4xMzUsNTA1Ljk0Myw2LjA1OHpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPGc+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUwNS45NDIsNDc2LjY5NEwzNS4zMDYsNi4wNTljLTguMDc2LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDgsMGMtOC4wNzcsOC4wNzYtOC4wNzcsMjEuMTcxLDAsMjkuMjQ4bDQ3MC42MzYsNDcwLjYzNiAgICBjNC4wMzgsNC4wMzksOS4zMzIsNi4wNTgsMTQuNjI1LDYuMDU4YzUuMjkzLDAsMTAuNTg3LTIuMDE5LDE0LjYyNC02LjA1N0M1MTQuMDE4LDQ5Ny44NjYsNTE0LjAxOCw0ODQuNzcxLDUwNS45NDIsNDc2LjY5NHpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnRrU21hcnRNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBwdWJsaWMgY2xvc2FibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlc2NhcGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNtaXNzYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcHVibGljIGlkZW50aWZpZXI6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzczogc3RyaW5nID0gJ25zbS1kaWFsb2ctYW5pbWF0aW9uLWZhZGUnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGJhY2tkcm9wOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZm9yY2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlRGVsYXk6IG51bWJlciA9IDUwMDtcclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b3N0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRhcmdldDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgcHVibGljIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBASW5wdXQoKSBwdWJsaWMgcmVmb2N1czogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlRmluaXNoZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25EaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uRGlzbWlzc0ZpbmlzaGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uQW55Q2xvc2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkFueUNsb3NlRXZlbnRGaW5pc2hlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW46IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25PcGVuRmluaXNoZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25Fc2NhcGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25EYXRhQWRkZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25EYXRhUmVtb3ZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBjb250ZW50Q29tcG9uZW50OiBUeXBlPENvbXBvbmVudD47XHJcbiAgcHVibGljIGxheWVyUG9zaXRpb246IG51bWJlciA9IDEwNDE7XHJcbiAgcHVibGljIG92ZXJsYXlWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG9wZW5lZENsYXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBjcmVhdGVGcm9tID0gJ2h0bWwnO1xyXG5cclxuICBwcml2YXRlIF9kYXRhOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ25zbUNvbnRlbnQnKSBwcml2YXRlIG5zbUNvbnRlbnQ6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAVmlld0NoaWxkcmVuKCduc21EaWFsb2cnKSBwdWJsaWMgbnNtRGlhbG9nOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQFZpZXdDaGlsZHJlbignbnNtT3ZlcmxheScpIHByaXZhdGUgbnNtT3ZlcmxheTogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2R5bmFtaWNDb250ZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGR5bmFtaWNDb250ZW50Q29udGFpbmVyOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBfcGxhdGZvcm1JZDogYW55LFxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pZGVudGlmaWVyIHx8ICF0aGlzLmlkZW50aWZpZXIubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignaWRlbnRpZmllciBmaWVsZCBpc27igJl0IHNldC4gUGxlYXNlIHNldCBvbmUgYmVmb3JlIGNhbGxpbmcgPG5neC1zbWFydC1tb2RhbD4gaW4gYSB0ZW1wbGF0ZS4nKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZW5kRXZlbnQoJ2NyZWF0ZScpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29udGVudENvbXBvbmVudCk7XHJcbiAgICAgIHRoaXMuY3JlYXRlRHluYW1pY0NvbnRlbnQodGhpcy5keW5hbWljQ29udGVudENvbnRhaW5lciwgZmFjdG9yeSk7XHJcbiAgICAgIHRoaXMuZHluYW1pY0NvbnRlbnRDb250YWluZXIuY2hhbmdlcy5zdWJzY3JpYmUoKGNvbnRlbnRWaWV3Q29udGFpbmVyczogUXVlcnlMaXN0PFZpZXdDb250YWluZXJSZWY+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEeW5hbWljQ29udGVudChjb250ZW50Vmlld0NvbnRhaW5lcnMsIGZhY3RvcnkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbmRFdmVudCgnZGVsZXRlJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHRvcCBvcGVuIHRoZSBtb2RhbCB0b3Agb2YgYWxsIG90aGVyXHJcbiAgICogQHJldHVybnMgdGhlIG1vZGFsIGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBvcGVuKHRvcD86IGJvb2xlYW4pOiBOdGtTbWFydE1vZGFsQ29tcG9uZW50IHtcclxuICAgIHRoaXMuX3NlbmRFdmVudCgnb3BlbicsIHsgdG9wOiB0b3AgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSB0aGUgbW9kYWwgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHRoZSBtb2RhbCBjb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2UoKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICB0aGlzLl9zZW5kRXZlbnQoJ2Nsb3NlJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNtaXNzIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGUgdGhlIGV2ZW50IHNlbnQgYnkgdGhlIGJyb3dzZXJcclxuICAgKiBAcmV0dXJucyB0aGUgbW9kYWwgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIGRpc21pc3MoZTogYW55KTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzbWlzc2FibGUgfHwgIWUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnb3ZlcmxheScpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbmRFdmVudCgnZGlzbWlzcycpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgdGhlIG1vZGFsIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdG9wIG9wZW4gdGhlIG1vZGFsIHRvcCBvZiBhbGwgb3RoZXJcclxuICAgKiBAcmV0dXJucyB0aGUgbW9kYWwgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZSh0b3A/OiBib29sZWFuKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICB0aGlzLl9zZW5kRXZlbnQoJ3RvZ2dsZScsIHsgdG9wOiB0b3AgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBjdXN0b20gY2xhc3MgdG8gdGhlIG1vZGFsIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBjbGFzcyB0byBhZGRcclxuICAgKiBAcmV0dXJucyB0aGUgbW9kYWwgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIGFkZEN1c3RvbUNsYXNzKGNsYXNzTmFtZTogc3RyaW5nKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICBpZiAoIXRoaXMuY3VzdG9tQ2xhc3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ2xhc3MgPSBjbGFzc05hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1c3RvbUNsYXNzICs9ICcgJyArIGNsYXNzTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGN1c3RvbSBjbGFzcyB0byB0aGUgbW9kYWwgaW5zdGFuY2VcclxuICAgKlxyXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIGNsYXNzIHRvIHJlbW92ZVxyXG4gICAqIEByZXR1cm5zIHRoZSBtb2RhbCBjb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlQ3VzdG9tQ2xhc3MoY2xhc3NOYW1lPzogc3RyaW5nKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICBpZiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ2xhc3MgPSB0aGlzLmN1c3RvbUNsYXNzLnJlcGxhY2UoY2xhc3NOYW1lLCAnJykudHJpbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXN0b21DbGFzcyA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgbW9kYWwgaW5zdGFuY2VcclxuICAgKi9cclxuICBwdWJsaWMgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGFjaCBkYXRhIHRvIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgdG8gYXR0YWNoXHJcbiAgICogQHBhcmFtIGZvcmNlIG92ZXJyaWRlIHBvdGVudGlhbGx5IGF0dGFjaGVkIGRhdGFcclxuICAgKiBAcmV0dXJucyB0aGUgbW9kYWwgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIHNldERhdGEoZGF0YTogYW55LCBmb3JjZT86IGJvb2xlYW4pOiBOdGtTbWFydE1vZGFsQ29tcG9uZW50IHtcclxuICAgIGlmICghdGhpcy5oYXNEYXRhKCkgfHwgKHRoaXMuaGFzRGF0YSgpICYmIGZvcmNlKSkge1xyXG4gICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5vbkRhdGFBZGRlZC5lbWl0KHRoaXMuX2RhdGEpO1xyXG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGhlIGRhdGEgYXR0YWNoZWQgdG8gdGhlIG1vZGFsIGluc3RhbmNlXHJcbiAgICovXHJcbiAgcHVibGljIGdldERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIHRoZSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBtb2RhbCBpbnN0YW5jZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIG1vZGFsIGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVEYXRhKCk6IE50a1NtYXJ0TW9kYWxDb21wb25lbnQge1xyXG4gICAgdGhpcy5fZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMub25EYXRhUmVtb3ZlZC5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBib2R5IGNsYXNzIG1vZGFsIG9wZW5lZFxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIG1vZGFsIGNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRCb2R5Q2xhc3MoKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9kb2N1bWVudC5ib2R5LCBOdGtTbWFydE1vZGFsQ29uZmlnLmJvZHlDbGFzc09wZW4pO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGJvZHkgY2xhc3MgbW9kYWwgb3BlbmVkXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgbW9kYWwgY29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUJvZHlDbGFzcygpOiBOdGtTbWFydE1vZGFsQ29tcG9uZW50IHtcclxuICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2RvY3VtZW50LmJvZHksIE50a1NtYXJ0TW9kYWxDb25maWcuYm9keUNsYXNzT3Blbik7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVucyBmb3Igd2luZG93IHJlc2l6ZSBldmVudCBhbmQgcmVjYWxjdWxhdGVzIG1vZGFsIGluc3RhbmNlIHBvc2l0aW9uIGlmIGl0IGlzIGVsZW1lbnQtcmVsYXRpdmVcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBwdWJsaWMgdGFyZ2V0UGxhY2VtZW50KCk6IGJvb2xlYW4gfCB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIgfHwgIXRoaXMubnNtRGlhbG9nLmxlbmd0aCB8fCAhdGhpcy5uc21Db250ZW50Lmxlbmd0aCB8fCAhdGhpcy5uc21PdmVybGF5Lmxlbmd0aCB8fCAhdGhpcy50YXJnZXQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy50YXJnZXQpO1xyXG5cclxuICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudFJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgYm9keVJlY3QgPSB0aGlzLm5zbU92ZXJsYXkuZmlyc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICBjb25zdCBuc21Db250ZW50UmVjdCA9IHRoaXMubnNtQ29udGVudC5maXJzdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgbnNtRGlhbG9nUmVjdCA9IHRoaXMubnNtRGlhbG9nLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgY29uc3QgbWFyZ2luTGVmdCA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUodGhpcy5uc21Db250ZW50LmZpcnN0Lm5hdGl2ZUVsZW1lbnQpLm1hcmdpbkxlZnQgYXMgYW55LCAxMCk7XHJcbiAgICBjb25zdCBtYXJnaW5Ub3AgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRoaXMubnNtQ29udGVudC5maXJzdC5uYXRpdmVFbGVtZW50KS5tYXJnaW5Ub3AgYXMgYW55LCAxMCk7XHJcblxyXG4gICAgbGV0IG9mZnNldFRvcCA9IHRhcmdldEVsZW1lbnRSZWN0LnRvcCAtIG5zbURpYWxvZ1JlY3QudG9wIC0gKChuc21Db250ZW50UmVjdC5oZWlnaHQgLSB0YXJnZXRFbGVtZW50UmVjdC5oZWlnaHQpIC8gMik7XHJcbiAgICBsZXQgb2Zmc2V0TGVmdCA9IHRhcmdldEVsZW1lbnRSZWN0LmxlZnQgLSBuc21EaWFsb2dSZWN0LmxlZnQgLSAoKG5zbUNvbnRlbnRSZWN0LndpZHRoIC0gdGFyZ2V0RWxlbWVudFJlY3Qud2lkdGgpIC8gMik7XHJcblxyXG4gICAgaWYgKG9mZnNldExlZnQgKyBuc21EaWFsb2dSZWN0LmxlZnQgKyBuc21Db250ZW50UmVjdC53aWR0aCArIChtYXJnaW5MZWZ0ICogMikgPiBib2R5UmVjdC53aWR0aCkge1xyXG4gICAgICBvZmZzZXRMZWZ0ID0gYm9keVJlY3Qud2lkdGggLSAobnNtRGlhbG9nUmVjdC5sZWZ0ICsgbnNtQ29udGVudFJlY3Qud2lkdGgpIC0gKG1hcmdpbkxlZnQgKiAyKTtcclxuICAgIH0gZWxzZSBpZiAob2Zmc2V0TGVmdCArIG5zbURpYWxvZ1JlY3QubGVmdCA8IDApIHtcclxuICAgICAgb2Zmc2V0TGVmdCA9IC1uc21EaWFsb2dSZWN0LmxlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9mZnNldFRvcCArIG5zbURpYWxvZ1JlY3QudG9wICsgbnNtQ29udGVudFJlY3QuaGVpZ2h0ICsgbWFyZ2luVG9wID4gYm9keVJlY3QuaGVpZ2h0KSB7XHJcbiAgICAgIG9mZnNldFRvcCA9IGJvZHlSZWN0LmhlaWdodCAtIChuc21EaWFsb2dSZWN0LnRvcCArIG5zbUNvbnRlbnRSZWN0LmhlaWdodCkgLSBtYXJnaW5Ub3A7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5uc21Db250ZW50LmZpcnN0Lm5hdGl2ZUVsZW1lbnQsICd0b3AnLCAob2Zmc2V0VG9wIDwgMCA/IDAgOiBvZmZzZXRUb3ApICsgJ3B4Jyk7XHJcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm5zbUNvbnRlbnQuZmlyc3QubmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBvZmZzZXRMZWZ0ICsgJ3B4Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZW5kRXZlbnQobmFtZTogc3RyaW5nLCBleHRyYURhdGE/OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIGV4dHJhRGF0YTogZXh0cmFEYXRhLFxyXG4gICAgICBpbnN0YW5jZTogeyBpZDogdGhpcy5pZGVudGlmaWVyLCBtb2RhbDogdGhpcyB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KE50a1NtYXJ0TW9kYWxDb25maWcucHJlZml4RXZlbnQgKyBuYW1lLCB7IGRldGFpbDogZGF0YSB9KTtcclxuXHJcbiAgICByZXR1cm4gd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXMgY3VycmVudCBwbGF0Zm9ybSBicm93c2VyXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMuX3BsYXRmb3JtSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBjb250ZW50IGluc2lkZSBwcm92aWRlZCBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVEeW5hbWljQ29udGVudChjaGFuZ2VzOiBRdWVyeUxpc3Q8Vmlld0NvbnRhaW5lclJlZj4sIGZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8Q29tcG9uZW50Pik6IHZvaWQge1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoKCh2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSA9PiB7XHJcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgICAgdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XHJcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { NtkSmartModalStackService } from './ntk-smart-modal-stack.service';
import { NtkSmartModalComponent } from './ntk-smart-modal.component';
import { NtkSmartModalService } from './ntk-smart-modal.service';
import { NtkSmartModalComponent } from './ntk-smart-modal.component';
export class NtkSmartModalModule {

@@ -12,3 +13,6 @@ /**

ngModule: NtkSmartModalModule,
providers: [NtkSmartModalService],
providers: [
NtkSmartModalService,
NtkSmartModalStackService
],
};

@@ -22,3 +26,6 @@ }

ngModule: NtkSmartModalModule,
providers: [NtkSmartModalService],
providers: [
NtkSmartModalService,
NtkSmartModalStackService
],
};

@@ -34,2 +41,2 @@ }

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJEOi9Tb3VyY2VLYXJhdmkvR2l0SHViL25wbS1udGstY21zLWFuZ3VsYXIvcHJvamVjdHMvbmd4LW50ay1zbWFydC1tb2R1bGUvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsL250ay1zbWFydC1tb2RhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBT3JFLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTztRQUNuQixPQUFPO1lBQ0wsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7UUFDcEIsT0FBTztZQUNMLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDbEMsQ0FBQztJQUNKLENBQUM7OztZQXhCRixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNqQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7YUFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsU2VydmljZSB9IGZyb20gJy4vbnRrLXNtYXJ0LW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9udGstc21hcnQtbW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbTnRrU21hcnRNb2RhbENvbXBvbmVudF0sXHJcbiAgZXhwb3J0czogW050a1NtYXJ0TW9kYWxDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnRrU21hcnRNb2RhbE1vZHVsZSB7XHJcbiAgLyoqXHJcbiAgICogVXNlIGluIEFwcE1vZHVsZTogbmV3IGluc3RhbmNlIG9mIE50a1NtYXJ0TW9kYWwuXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TnRrU21hcnRNb2RhbE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IE50a1NtYXJ0TW9kYWxNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW050a1NtYXJ0TW9kYWxTZXJ2aWNlXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2UgaW4gZmVhdHVyZXMgbW9kdWxlcyB3aXRoIGxhenkgbG9hZGluZzogbmV3IGluc3RhbmNlIG9mIE50a1NtYXJ0TW9kYWwuXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBmb3JDaGlsZCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE50a1NtYXJ0TW9kYWxNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBOdGtTbWFydE1vZGFsTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtOdGtTbWFydE1vZGFsU2VydmljZV0sXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJEOi9Tb3VyY2VLYXJhdmkvR2l0SHViL25wbS1udGstY21zLWFuZ3VsYXIvcHJvamVjdHMvbmd4LW50ay1zbWFydC1tb2R1bGUvc3JjLyIsInNvdXJjZXMiOlsibGliL21vZGFsL250ay1zbWFydC1tb2RhbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBT2pFLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTztRQUNuQixPQUFPO1lBQ0wsUUFBUSxFQUFFLG1CQUFtQjtZQUM3QixTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CO2dCQUNwQix5QkFBeUI7YUFDMUI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7UUFDcEIsT0FBTztZQUNMLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsU0FBUyxFQUFFO2dCQUNULG9CQUFvQjtnQkFDcEIseUJBQXlCO2FBQzFCO1NBQ0YsQ0FBQztJQUNKLENBQUM7OztZQTlCRixRQUFRLFNBQUM7Z0JBQ1IsWUFBWSxFQUFFLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2dCQUNqQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7YUFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsU3RhY2tTZXJ2aWNlIH0gZnJvbSAnLi9udGstc21hcnQtbW9kYWwtc3RhY2suc2VydmljZSc7XHJcbmltcG9ydCB7IE50a1NtYXJ0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL250ay1zbWFydC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsU2VydmljZSB9IGZyb20gJy4vbnRrLXNtYXJ0LW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtOdGtTbWFydE1vZGFsQ29tcG9uZW50XSxcclxuICBleHBvcnRzOiBbTnRrU21hcnRNb2RhbENvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOdGtTbWFydE1vZGFsTW9kdWxlIHtcclxuICAvKipcclxuICAgKiBVc2UgaW4gQXBwTW9kdWxlOiBuZXcgaW5zdGFuY2Ugb2YgTnRrU21hcnRNb2RhbC5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOdGtTbWFydE1vZGFsTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTnRrU21hcnRNb2RhbE1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgTnRrU21hcnRNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgTnRrU21hcnRNb2RhbFN0YWNrU2VydmljZVxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZSBpbiBmZWF0dXJlcyBtb2R1bGVzIHdpdGggbGF6eSBsb2FkaW5nOiBuZXcgaW5zdGFuY2Ugb2YgTnRrU21hcnRNb2RhbC5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGZvckNoaWxkKCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TnRrU21hcnRNb2RhbE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IE50a1NtYXJ0TW9kYWxNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE50a1NtYXJ0TW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIE50a1NtYXJ0TW9kYWxTdGFja1NlcnZpY2VcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==

@@ -1,5 +0,58 @@

import { Injectable } from '@angular/core';
import { Injectable, ComponentFactoryResolver, ApplicationRef, Injector, Inject, TemplateRef, Type, PLATFORM_ID } from '@angular/core';
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
import { NtkSmartModalStackService } from './ntk-smart-modal-stack.service';
import { NtkSmartModalComponent } from './ntk-smart-modal.component';
import { NtkSmartModalConfig } from './ntk-smart-modal.config';
export class NtkSmartModalService {
constructor() {
this.modalStack = [];
constructor(_componentFactoryResolver, _appRef, _injector, _modalStack, applicationRef, _document, _platformId) {
this._componentFactoryResolver = _componentFactoryResolver;
this._appRef = _appRef;
this._injector = _injector;
this._modalStack = _modalStack;
this.applicationRef = applicationRef;
this._document = _document;
this._platformId = _platformId;
/**
* Close the latest opened modal if escape key event is emitted
* @param event The Keyboard Event
*/
this._escapeKeyboardEvent = (event) => {
if (event.key === 'Escape') {
try {
const modal = this.getTopOpenedModal();
if (!modal.escapable) {
return false;
}
modal.onEscape.emit(modal);
this.closeLatestModal();
return true;
}
catch (e) {
return false;
}
}
return false;
};
/**
* While modal is open, the focus stay on it
* @param event The Keyboar dEvent
*/
this._trapFocusModal = (event) => {
if (event.key === 'Tab') {
try {
const modal = this.getTopOpenedModal();
if (!modal.nsmDialog.first.nativeElement.contains(document.activeElement)) {
event.preventDefault();
event.stopPropagation();
modal.nsmDialog.first.nativeElement.focus();
}
return true;
}
catch (e) {
return false;
}
}
return false;
};
this._addEvents();
}

@@ -15,15 +68,3 @@ /**

addModal(modalInstance, force) {
if (force) {
const i = this.modalStack.findIndex((o) => {
return o.id === modalInstance.id;
});
if (i > -1) {
this.modalStack[i].modal = modalInstance.modal;
}
else {
this.modalStack.push(modalInstance);
}
return;
}
this.modalStack.push(modalInstance);
this._modalStack.addModal(modalInstance, force);
}

@@ -36,12 +77,3 @@ /**

getModal(id) {
if (!this.modalStack || this.modalStack.length === 0) {
return null;
}
const ret = this.modalStack.filter((o) => {
return o.id === id;
})[0];
if (!ret) {
return null;
}
return ret.modal;
return this._modalStack.getModal(id);
}

@@ -63,11 +95,3 @@ /**

open(id, force = false) {
const instance = this.modalStack.find((o) => {
return o.id === id;
});
if (!!instance) {
instance.modal.open(force);
}
else {
throw new Error('Modal not found');
}
return this._openModal(this.get(id), force);
}

@@ -80,11 +104,11 @@ /**

close(id) {
const instance = this.modalStack.find((o) => {
return o.id === id;
return this._closeModal(this.get(id));
}
/**
* Close all opened modals
*/
closeAll() {
this.getOpenedModals().forEach((instance) => {
this._closeModal(instance.modal);
});
if (!!instance) {
instance.modal.close();
}
else {
throw new Error('Modal not found');
}
}

@@ -99,11 +123,3 @@ /**

toggle(id, force = false) {
const instance = this.modalStack.find((o) => {
return o.id === id;
});
if (!!instance) {
instance.modal.toggle(force);
}
else {
throw new Error('Modal not found');
}
return this._toggleModal(this.get(id), force);
}

@@ -116,3 +132,3 @@ /**

getModalStack() {
return this.modalStack;
return this._modalStack.getModalStack();
}

@@ -125,11 +141,13 @@ /**

getOpenedModals() {
const modals = [];
this.modalStack.forEach((o) => {
if (o.modal.visible) {
modals.push(o);
}
});
return modals;
return this._modalStack.getOpenedModals();
}
/**
* Retrieve the opened modal with highest z-index.
*
* @returns the opened modal with highest z-index.
*/
getTopOpenedModal() {
return this._modalStack.getTopOpenedModal();
}
/**
* Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and

@@ -142,8 +160,3 @@ * calculates a higher value (it takes the highest index value between all the modal instances and adds 1).

getHigherIndex() {
const index = [1041];
const modals = this.getModalStack();
modals.forEach((o) => {
index.push(o.modal.layerPosition);
});
return Math.max(...index) + 1;
return this._modalStack.getHigherIndex();
}

@@ -156,3 +169,3 @@ /**

getModalStackCount() {
return this.modalStack.length;
return this._modalStack.getModalStackCount();
}

@@ -166,8 +179,3 @@ /**

removeModal(id) {
const i = this.modalStack.findIndex((o) => {
return o.id === id;
});
if (i > -1) {
this.modalStack.splice(i, 1);
}
this._modalStack.removeModal(id);
}

@@ -186,6 +194,5 @@ /**

setModalData(data, id, force) {
if (!!this.modalStack.find((o) => {
return o.id === id;
})) {
this.getModal(id).setData(data, force);
let i;
if (i = this.get(id)) {
i.setData(data, force);
return true;

@@ -204,3 +211,7 @@ }

getModalData(id) {
return this.getModal(id).getData();
let i;
if (i = this.get(id)) {
return i.getData();
}
return null;
}

@@ -214,5 +225,3 @@ /**

resetModalData(id) {
if (!!this.modalStack.find((o) => {
return o.id === id;
})) {
if (!!this._modalStack.getModalStack().find((o) => o.id === id)) {
const removed = this.getModal(id).getData();

@@ -232,14 +241,214 @@ this.getModal(id).removeData();

closeLatestModal() {
const me = this;
clearTimeout(this.debouncer);
this.debouncer = setTimeout(() => {
let tmp;
me.getOpenedModals().forEach((m) => {
if (m.modal.layerPosition > (!!tmp ? tmp.modal.layerPosition : 0 && m.modal.escapable)) {
tmp = m;
}
});
return !!tmp ? tmp.modal.close() : false;
}, 100);
this.getTopOpenedModal().close();
}
/**
* Create dynamic NtkSmartModalComponent
* @param id The modal identifier used at creation time.
* @param content The modal content ( string, templateRef or Component )
*/
create(id, content, options = {}) {
try {
return this.getModal(id);
}
catch (e) {
const componentFactory = this._componentFactoryResolver.resolveComponentFactory(NtkSmartModalComponent);
const ngContent = this._resolveNgContent(content);
const componentRef = componentFactory.create(this._injector, ngContent);
if (content instanceof Type) {
componentRef.instance.contentComponent = content;
}
componentRef.instance.identifier = id;
componentRef.instance.createFrom = 'service';
if (typeof options.closable === 'boolean') {
componentRef.instance.closable = options.closable;
}
if (typeof options.escapable === 'boolean') {
componentRef.instance.escapable = options.escapable;
}
if (typeof options.dismissable === 'boolean') {
componentRef.instance.dismissable = options.dismissable;
}
if (typeof options.customClass === 'string') {
componentRef.instance.customClass = options.customClass;
}
if (typeof options.backdrop === 'boolean') {
componentRef.instance.backdrop = options.backdrop;
}
if (typeof options.force === 'boolean') {
componentRef.instance.force = options.force;
}
if (typeof options.hideDelay === 'number') {
componentRef.instance.hideDelay = options.hideDelay;
}
if (typeof options.autostart === 'boolean') {
componentRef.instance.autostart = options.autostart;
}
if (typeof options.target === 'string') {
componentRef.instance.target = options.target;
}
if (typeof options.ariaLabel === 'string') {
componentRef.instance.ariaLabel = options.ariaLabel;
}
if (typeof options.ariaLabelledBy === 'string') {
componentRef.instance.ariaLabelledBy = options.ariaLabelledBy;
}
if (typeof options.ariaDescribedBy === 'string') {
componentRef.instance.ariaDescribedBy = options.ariaDescribedBy;
}
if (typeof options.refocus === 'boolean') {
componentRef.instance.refocus = options.refocus;
}
this._appRef.attachView(componentRef.hostView);
const domElem = componentRef.hostView.rootNodes[0];
this._document.body.appendChild(domElem);
return componentRef.instance;
}
}
_addEvents() {
if (!this.isBrowser) {
return false;
}
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'create', ((e) => {
this._initModal(e.detail.instance);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'delete', ((e) => {
this._deleteModal(e.detail.instance);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'open', ((e) => {
this._openModal(e.detail.instance.modal, e.detail.top);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'toggle', ((e) => {
this._toggleModal(e.detail.instance.modal, e.detail.top);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'close', ((e) => {
this._closeModal(e.detail.instance.modal);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'dismiss', ((e) => {
this._dismissModal(e.detail.instance.modal);
}));
window.addEventListener('keyup', this._escapeKeyboardEvent);
return true;
}
_initModal(modalInstance) {
modalInstance.modal.layerPosition += this.getModalStackCount();
this.addModal(modalInstance, modalInstance.modal.force);
if (modalInstance.modal.autostart) {
this.open(modalInstance.id);
}
}
_openModal(modal, top) {
if (modal.visible) {
return false;
}
this.lastElementFocused = document.activeElement;
if (modal.escapable) {
window.addEventListener('keyup', this._escapeKeyboardEvent);
}
if (modal.backdrop) {
window.addEventListener('keydown', this._trapFocusModal);
}
if (top) {
modal.layerPosition = this.getHigherIndex();
}
modal.addBodyClass();
modal.overlayVisible = true;
modal.visible = true;
modal.onOpen.emit(modal);
modal.markForCheck();
setTimeout(() => {
modal.openedClass = true;
if (modal.target) {
modal.targetPlacement();
}
modal.nsmDialog.first.nativeElement.setAttribute('role', 'dialog');
modal.nsmDialog.first.nativeElement.setAttribute('tabIndex', '-1');
modal.nsmDialog.first.nativeElement.setAttribute('aria-modal', 'true');
modal.nsmDialog.first.nativeElement.focus();
modal.markForCheck();
modal.onOpenFinished.emit(modal);
});
return true;
}
_toggleModal(modal, top) {
if (modal.visible) {
return this._closeModal(modal);
}
else {
return this._openModal(modal, top);
}
}
_closeModal(modal) {
if (!modal.openedClass) {
return false;
}
modal.openedClass = false;
modal.onClose.emit(modal);
modal.onAnyCloseEvent.emit(modal);
if (this.getOpenedModals().length < 2) {
modal.removeBodyClass();
window.removeEventListener('keyup', this._escapeKeyboardEvent);
window.removeEventListener('keydown', this._trapFocusModal);
}
setTimeout(() => {
modal.visibleChange.emit(modal.visible);
modal.visible = false;
modal.overlayVisible = false;
modal.nsmDialog.first.nativeElement.removeAttribute('tabIndex');
modal.markForCheck();
modal.onCloseFinished.emit(modal);
modal.onAnyCloseEventFinished.emit(modal);
if (modal.refocus) {
this.lastElementFocused.focus();
}
}, modal.hideDelay);
return true;
}
_dismissModal(modal) {
if (!modal.openedClass) {
return false;
}
modal.openedClass = false;
modal.onDismiss.emit(modal);
modal.onAnyCloseEvent.emit(modal);
if (this.getOpenedModals().length < 2) {
modal.removeBodyClass();
}
setTimeout(() => {
modal.visible = false;
modal.visibleChange.emit(modal.visible);
modal.overlayVisible = false;
modal.markForCheck();
modal.onDismissFinished.emit(modal);
modal.onAnyCloseEventFinished.emit(modal);
}, modal.hideDelay);
return true;
}
_deleteModal(modalInstance) {
this.removeModal(modalInstance.id);
if (!this.getModalStack().length) {
modalInstance.modal.removeBodyClass();
}
}
/**
* Resolve content according to the types
* @param content The modal content ( string, templateRef or Component )
*/
_resolveNgContent(content) {
if (typeof content === 'string') {
const element = this._document.createTextNode(content);
return [[element]];
}
if (content instanceof TemplateRef) {
const viewRef = content.createEmbeddedView(null);
this.applicationRef.attachView(viewRef);
return [viewRef.rootNodes];
}
return [];
}
/**
* Is current platform browser
*/
get isBrowser() {
return isPlatformBrowser(this._platformId);
}
}

@@ -249,2 +458,11 @@ NtkSmartModalService.decorators = [

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiRDovU291cmNlS2FyYXZpL0dpdEh1Yi9ucG0tbnRrLWNtcy1hbmd1bGFyL3Byb2plY3RzL25neC1udGstc21hcnQtbW9kdWxlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9udGstc21hcnQtbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFUyxlQUFVLEdBQW9CLEVBQUUsQ0FBQztJQWdQMUMsQ0FBQztJQTdPQzs7Ozs7OztPQU9HO0lBQ0ksUUFBUSxDQUFDLGFBQTRCLEVBQUUsS0FBZTtRQUMzRCxJQUFJLEtBQUssRUFBRTtZQUNULE1BQU0sQ0FBQyxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsRUFBRSxFQUFFO2dCQUMvRCxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDckM7WUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxFQUFVO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNw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QUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzs7O1lBalBGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE50a1NtYXJ0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL250ay1zbWFydC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNb2RhbEluc3RhbmNlIH0gZnJvbSAnLi9tb2RhbC1pbnN0YW5jZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOdGtTbWFydE1vZGFsU2VydmljZSB7XHJcbiAgcHVibGljIG1vZGFsU3RhY2s6IE1vZGFsSW5zdGFuY2VbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIG5ldyBtb2RhbCBpbnN0YW5jZS4gVGhpcyBzdGVwIGlzIGVzc2VudGlhbCBhbmQgYWxsb3dzIHRvIHJldHJpZXZlIGFueSBtb2RhbCBhdCBhbnkgdGltZS5cclxuICAgKiBJdCBzdG9yZXMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIG1vZGFsIGlkZW50aWZpZXIgYW5kIHRoZSBtb2RhbCBpdHNlbGYgZGlyZWN0bHkgaW4gdGhlIGBtb2RhbFN0YWNrYC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBtb2RhbEluc3RhbmNlIFRoZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbW9kYWwgaWRlbnRpZmllciBhbmQgdGhlIG1vZGFsIGl0c2VsZi5cclxuICAgKiBAcGFyYW0gZm9yY2UgT3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZm9yY2VzIHRoZSBvdmVycmlkaW5nIG9mIG1vZGFsIGluc3RhbmNlIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxyXG4gICAqIEByZXR1cm5zIG5vdGhpbmcgc3BlY2lhbC5cclxuICAgKi9cclxuICBwdWJsaWMgYWRkTW9kYWwobW9kYWxJbnN0YW5jZTogTW9kYWxJbnN0YW5jZSwgZm9yY2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgY29uc3QgaTogbnVtYmVyID0gdGhpcy5tb2RhbFN0YWNrLmZpbmRJbmRleCgobzogTW9kYWxJbnN0YW5jZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvLmlkID09PSBtb2RhbEluc3RhbmNlLmlkO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICAgIHRoaXMubW9kYWxTdGFja1tpXS5tb2RhbCA9IG1vZGFsSW5zdGFuY2UubW9kYWw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFN0YWNrLnB1c2gobW9kYWxJbnN0YW5jZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RhbFN0YWNrLnB1c2gobW9kYWxJbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIG1vZGFsIGluc3RhbmNlIGJ5IGl0cyBpZGVudGlmaWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBtb2RhbCBpZGVudGlmaWVyIHVzZWQgYXQgY3JlYXRpb24gdGltZS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TW9kYWwoaWQ6IHN0cmluZyk6IE50a1NtYXJ0TW9kYWxDb21wb25lbnQgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5tb2RhbFN0YWNrIHx8IHRoaXMubW9kYWxTdGFjay5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXQgPSB0aGlzLm1vZGFsU3RhY2suZmlsdGVyKChvOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIG8uaWQgPT09IGlkO1xyXG4gICAgfSlbMF07XHJcbiAgICBpZiAoIXJldCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXQubW9kYWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGlhcyBvZiBgZ2V0TW9kYWxgIHRvIHJldHJpZXZlIGEgbW9kYWwgaW5zdGFuY2UgYnkgaXRzIGlkZW50aWZpZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IE50a1NtYXJ0TW9kYWxDb21wb25lbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9kYWwoaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhIGdpdmVuIG1vZGFsXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqIEBwYXJhbSBmb3JjZSBUZWxsIHRoZSBtb2RhbCB0byBvcGVuIHRvcCBvZiBhbGwgb3RoZXIgb3BlbmVkIG1vZGFsc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBvcGVuKGlkOiBzdHJpbmcsIGZvcmNlID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5tb2RhbFN0YWNrLmZpbmQoKG86IE1vZGFsSW5zdGFuY2UpID0+IHtcclxuICAgICAgcmV0dXJuIG8uaWQgPT09IGlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoISFpbnN0YW5jZSkge1xyXG4gICAgICBpbnN0YW5jZS5tb2RhbC5vcGVuKGZvcmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kYWwgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhIGdpdmVuIG1vZGFsXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMubW9kYWxTdGFjay5maW5kKChvOiBNb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIHJldHVybiBvLmlkID09PSBpZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKCEhaW5zdGFuY2UpIHtcclxuICAgICAgaW5zdGFuY2UubW9kYWwuY2xvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kYWwgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgZ2l2ZW4gbW9kYWxcclxuICAgKiBJZiB0aGUgcmV0cmlldmVkIG1vZGFsIGlzIG9wZW5lZCBpdCBjbG9zZXMgaXQsIGVsc2UgaXQgb3BlbnMgaXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqIEBwYXJhbSBmb3JjZSBUZWxsIHRoZSBtb2RhbCB0byBvcGVuIHRvcCBvZiBhbGwgb3RoZXIgb3BlbmVkIG1vZGFsc1xyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGUoaWQ6IHN0cmluZywgZm9yY2UgPSBmYWxzZSk6IGFueSB7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMubW9kYWxTdGFjay5maW5kKChvOiBNb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIHJldHVybiBvLmlkID09PSBpZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKCEhaW5zdGFuY2UpIHtcclxuICAgICAgaW5zdGFuY2UubW9kYWwudG9nZ2xlKGZvcmNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTW9kYWwgbm90IGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIGNyZWF0ZWQgbW9kYWxzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgbW9kYWwgaW5zdGFuY2VzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRNb2RhbFN0YWNrKCk6IE1vZGFsSW5zdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RhbFN0YWNrO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYWxsIHRoZSBvcGVuZWQgbW9kYWxzLiBJdCBsb29rcyBmb3IgYWxsIG1vZGFsIGluc3RhbmNlcyB3aXRoIHRoZWlyIGB2aXNpYmxlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgdGhlIG9wZW5lZCBtb2RhbHMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldE9wZW5lZE1vZGFscygpOiBNb2RhbEluc3RhbmNlW10ge1xyXG4gICAgY29uc3QgbW9kYWxzOiBNb2RhbEluc3RhbmNlW10gPSBbXTtcclxuICAgIHRoaXMubW9kYWxTdGFjay5mb3JFYWNoKChvOiBNb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIGlmIChvLm1vZGFsLnZpc2libGUpIHtcclxuICAgICAgICBtb2RhbHMucHVzaChvKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbW9kYWxzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBoaWdoZXIgYHotaW5kZXhgIHZhbHVlIGJldHdlZW4gYWxsIHRoZSBtb2RhbCBpbnN0YW5jZXMuIEl0IGl0ZXJhdGVzIG92ZXIgdGhlIGBNb2RhbFN0YWNrYCBhcnJheSBhbmRcclxuICAgKiBjYWxjdWxhdGVzIGEgaGlnaGVyIHZhbHVlIChpdCB0YWtlcyB0aGUgaGlnaGVzdCBpbmRleCB2YWx1ZSBiZXR3ZWVuIGFsbCB0aGUgbW9kYWwgaW5zdGFuY2VzIGFuZCBhZGRzIDEpLlxyXG4gICAqIFVzZSBpdCB0byBtYWtlIGEgbW9kYWwgYXBwZWFyIGZvcmVncm91bmQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBhIGhpZ2hlciBpbmRleCBmcm9tIGFsbCB0aGUgZXhpc3RpbmcgbW9kYWwgaW5zdGFuY2VzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRIaWdoZXJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgaW5kZXg6IG51bWJlcltdID0gWzEwNDFdO1xyXG4gICAgY29uc3QgbW9kYWxzOiBNb2RhbEluc3RhbmNlW10gPSB0aGlzLmdldE1vZGFsU3RhY2soKTtcclxuICAgIG1vZGFscy5mb3JFYWNoKChvOiBNb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgIGluZGV4LnB1c2goby5tb2RhbC5sYXllclBvc2l0aW9uKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLmluZGV4KSArIDE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCBnaXZlcyB0aGUgbnVtYmVyIG9mIG1vZGFsIGluc3RhbmNlcy4gSXQncyBoZWxwZnVsIHRvIGtub3cgaWYgdGhlIG1vZGFsIHN0YWNrIGlzIGVtcHR5IG9yIG5vdC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHRoZSBudW1iZXIgb2YgbW9kYWwgaW5zdGFuY2VzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRNb2RhbFN0YWNrQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGFsU3RhY2subGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIGEgbW9kYWwgaW5zdGFuY2UgZnJvbSB0aGUgbW9kYWwgc3RhY2suXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIuXHJcbiAgICogQHJldHVybnMgdGhlIHJlbW92ZWQgbW9kYWwgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZU1vZGFsKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGk6IG51bWJlciA9IHRoaXMubW9kYWxTdGFjay5maW5kSW5kZXgoKG86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gby5pZCA9PT0gaWQ7XHJcbiAgICB9KTtcclxuICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgdGhpcy5tb2RhbFN0YWNrLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc29jaWF0ZSBkYXRhIHRvIGFuIGlkZW50aWZpZWQgbW9kYWwuIElmIHRoZSBtb2RhbCBpc24ndCBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gc29tZSBkYXRhLCBpdCBjcmVhdGVzIGEgbmV3XHJcbiAgICogZW50cnkgaW4gdGhlIGBtb2RhbERhdGFgIGFycmF5IHdpdGggaXRzIGBpZGAgYW5kIHRoZSBnaXZlbiBgZGF0YWAuIElmIHRoZSBtb2RhbCBhbHJlYWR5IGhhcyBkYXRhLCBpdCByZXdyaXRlc1xyXG4gICAqIHRoZW0gd2l0aCB0aGUgbmV3IG9uZXMuIEZpbmFsbHkgaWYgbm8gbW9kYWwgZm91bmQgaXQgcmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBjb25zb2xlIGFuZCBmYWxzZSB2YWx1ZVxyXG4gICAqIGFzIG1ldGhvZCBvdXRwdXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB5b3Ugd2FudCB0byBhc3NvY2lhdGUgdG8gdGhlIG1vZGFsLlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllci5cclxuICAgKiBAcGFyYW0gZm9yY2UgSWYgdHJ1ZSwgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBzdG9yZWQgZGF0YSBpZiB0aGVyZSB3YXMuXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kYWwgZXhpc3RzIGFuZCB0aGUgcHJvY2VzcyBoYXMgYmVlbiB0cmllZCwgZWl0aGVyIGZhbHNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNb2RhbERhdGEoZGF0YTogYW55LCBpZDogc3RyaW5nLCBmb3JjZT86IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgISF0aGlzLm1vZGFsU3RhY2suZmluZCgobzogTW9kYWxJbnN0YW5jZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvLmlkID09PSBpZDtcclxuICAgICAgfSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdldE1vZGFsKGlkKS5zZXREYXRhKGRhdGEsIGZvcmNlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBtb2RhbCBkYXRhIGJ5IGl0cyBpZGVudGlmaWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBtb2RhbCBpZGVudGlmaWVyIHVzZWQgYXQgY3JlYXRpb24gdGltZS5cclxuICAgKiBAcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBtb2RhbCBkYXRhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRNb2RhbERhdGEoaWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb2RhbChpZCkuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIGRhdGEgYXR0YWNoZWQgdG8gYSBnaXZlbiBtb2RhbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICogQHJldHVybnMgdGhlIHJlbW92ZWQgZGF0YSBvciBmYWxzZSBpZiBtb2RhbCBkb2Vzbid0IGV4aXN0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZXNldE1vZGFsRGF0YShpZDogc3RyaW5nKTogYW55IHwgYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgICEhdGhpcy5tb2RhbFN0YWNrLmZpbmQoKG86IE1vZGFsSW5zdGFuY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gby5pZCA9PT0gaWQ7XHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgcmVtb3ZlZDogYW55ID0gdGhpcy5nZXRNb2RhbChpZCkuZ2V0RGF0YSgpO1xyXG4gICAgICB0aGlzLmdldE1vZGFsKGlkKS5yZW1vdmVEYXRhKCk7XHJcbiAgICAgIHJldHVybiByZW1vdmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgdGhlIGxhdGVzdCBvcGVuZWQgbW9kYWwgaWYgaXQgaGFzIGJlZW4gZGVjbGFyZWQgYXMgZXNjYXBhYmxlXHJcbiAgICogVXNpbmcgYSBkZWJvdW5jZSBzeXN0ZW0gYmVjYXVzZSBvbmUgb3IgbW9yZSBtb2RhbHMgY291bGQgYmUgbGlzdGVuaW5nXHJcbiAgICogZXNjYXBlIGtleSBwcmVzcyBldmVudC5cclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2VMYXRlc3RNb2RhbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlcik7XHJcbiAgICB0aGlzLmRlYm91bmNlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgdG1wOiBNb2RhbEluc3RhbmNlIHwgdW5kZWZpbmVkO1xyXG4gICAgICBtZS5nZXRPcGVuZWRNb2RhbHMoKS5mb3JFYWNoKChtOiBNb2RhbEluc3RhbmNlKSA9PiB7XHJcbiAgICAgICAgaWYgKG0ubW9kYWwubGF5ZXJQb3NpdGlvbiA+ICghIXRtcCA/IHRtcC5tb2RhbC5sYXllclBvc2l0aW9uIDogMCAmJiBtLm1vZGFsLmVzY2FwYWJsZSkpIHtcclxuICAgICAgICAgIHRtcCA9IG07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuICEhdG1wID8gdG1wLm1vZGFsLmNsb3NlKCkgOiBmYWxzZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
NtkSmartModalService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef },
{ type: Injector },
{ type: NtkSmartModalStackService },
{ type: ApplicationRef },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnRrLXNtYXJ0LW1vZGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiRDovU291cmNlS2FyYXZpL0dpdEh1Yi9ucG0tbnRrLWNtcy1hbmd1bGFyL3Byb2plY3RzL25neC1udGstc21hcnQtbW9kdWxlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9udGstc21hcnQtbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixjQUFjLEVBQ2QsUUFBUSxFQUVSLE1BQU0sRUFDTixXQUFXLEVBQ1gsSUFBSSxFQUNKLFdBQVcsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBS3RGLE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsWUFDVSx5QkFBbUQsRUFDbkQsT0FBdUIsRUFDdkIsU0FBbUIsRUFDbkIsV0FBc0MsRUFDdEMsY0FBOEIsRUFDWixTQUFjLEVBQ1gsV0FBZ0I7UUFOckMsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUNuRCxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDWixjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ1gsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUE4Wi9DOzs7V0FHRztRQUNLLHlCQUFvQixHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1lBQ3RELElBQUksS0FBSyxDQUFDLEdBQUcs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LEVBQUUsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBQ2hDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCLENBQUksT0FBbUI7UUFDOUMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNwQjtRQUVELElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtZQUNsQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBVyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQTJCRDs7T0FFRztJQUNILElBQVksU0FBUztRQUNuQixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7WUF2Y0YsVUFBVTs7O1lBbkJULHdCQUF3QjtZQUN4QixjQUFjO1lBQ2QsUUFBUTtZQVdELHlCQUF5QjtZQVpoQyxjQUFjOzRDQTRCWCxNQUFNLFNBQUMsUUFBUTs0Q0FDZixNQUFNLFNBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSW5qZWN0YWJsZSxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgQXBwbGljYXRpb25SZWYsXHJcbiAgSW5qZWN0b3IsXHJcbiAgRW1iZWRkZWRWaWV3UmVmLFxyXG4gIEluamVjdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBUeXBlLFxyXG4gIFBMQVRGT1JNX0lEXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5cclxuaW1wb3J0IHsgTW9kYWxJbnN0YW5jZSB9IGZyb20gJy4vbW9kYWwtaW5zdGFuY2UnO1xyXG5pbXBvcnQgeyBOdGtTbWFydE1vZGFsU3RhY2tTZXJ2aWNlIH0gZnJvbSAnLi9udGstc21hcnQtbW9kYWwtc3RhY2suc2VydmljZSc7XHJcbmltcG9ydCB7IE50a1NtYXJ0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuL250ay1zbWFydC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJTnRrU21hcnRNb2RhbE9wdGlvbnMsIE50a1NtYXJ0TW9kYWxDb25maWcgfSBmcm9tICcuL250ay1zbWFydC1tb2RhbC5jb25maWcnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ29udGVudDxUPiA9IHN0cmluZyB8IFRlbXBsYXRlUmVmPFQ+IHwgVHlwZTxUPjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE50a1NtYXJ0TW9kYWxTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxhc3RFbGVtZW50Rm9jdXNlZDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgcHJpdmF0ZSBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgX21vZGFsU3RhY2s6IE50a1NtYXJ0TW9kYWxTdGFja1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXHJcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIF9wbGF0Zm9ybUlkOiBhbnlcclxuICApIHtcclxuICAgIHRoaXMuX2FkZEV2ZW50cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IG1vZGFsIGluc3RhbmNlLiBUaGlzIHN0ZXAgaXMgZXNzZW50aWFsIGFuZCBhbGxvd3MgdG8gcmV0cmlldmUgYW55IG1vZGFsIGF0IGFueSB0aW1lLlxyXG4gICAqIEl0IHN0b3JlcyBhbiBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbW9kYWwgaWRlbnRpZmllciBhbmQgdGhlIG1vZGFsIGl0c2VsZiBkaXJlY3RseSBpbiB0aGUgYG1vZGFsU3RhY2tgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIG1vZGFsSW5zdGFuY2UgVGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBtb2RhbCBpZGVudGlmaWVyIGFuZCB0aGUgbW9kYWwgaXRzZWxmLlxyXG4gICAqIEBwYXJhbSBmb3JjZSBPcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBmb3JjZXMgdGhlIG92ZXJyaWRpbmcgb2YgbW9kYWwgaW5zdGFuY2UgaWYgaXQgYWxyZWFkeSBleGlzdHMuXHJcbiAgICogQHJldHVybnMgbm90aGluZyBzcGVjaWFsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhZGRNb2RhbChtb2RhbEluc3RhbmNlOiBNb2RhbEluc3RhbmNlLCBmb3JjZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX21vZGFsU3RhY2suYWRkTW9kYWwobW9kYWxJbnN0YW5jZSwgZm9yY2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBtb2RhbCBpbnN0YW5jZSBieSBpdHMgaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIGdldE1vZGFsKGlkOiBzdHJpbmcpOiBOdGtTbWFydE1vZGFsQ29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RhbFN0YWNrLmdldE1vZGFsKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsaWFzIG9mIGBnZXRNb2RhbGAgdG8gcmV0cmlldmUgYSBtb2RhbCBpbnN0YW5jZSBieSBpdHMgaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIGdldChpZDogc3RyaW5nKTogTnRrU21hcnRNb2RhbENvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb2RhbChpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZ2l2ZW4gbW9kYWxcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICogQHBhcmFtIGZvcmNlIFRlbGwgdGhlIG1vZGFsIHRvIG9wZW4gdG9wIG9mIGFsbCBvdGhlciBvcGVuZWQgbW9kYWxzXHJcbiAgICovXHJcbiAgcHVibGljIG9wZW4oaWQ6IHN0cmluZywgZm9yY2UgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29wZW5Nb2RhbCh0aGlzLmdldChpZCksIGZvcmNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGEgZ2l2ZW4gbW9kYWxcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIGNsb3NlKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9jbG9zZU1vZGFsKHRoaXMuZ2V0KGlkKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhbGwgb3BlbmVkIG1vZGFsc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0T3BlbmVkTW9kYWxzKCkuZm9yRWFjaCgoaW5zdGFuY2U6IE1vZGFsSW5zdGFuY2UpID0+IHtcclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbChpbnN0YW5jZS5tb2RhbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSBnaXZlbiBtb2RhbFxyXG4gICAqIElmIHRoZSByZXRyaWV2ZWQgbW9kYWwgaXMgb3BlbmVkIGl0IGNsb3NlcyBpdCwgZWxzZSBpdCBvcGVucyBpdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllciB1c2VkIGF0IGNyZWF0aW9uIHRpbWUuXHJcbiAgICogQHBhcmFtIGZvcmNlIFRlbGwgdGhlIG1vZGFsIHRvIG9wZW4gdG9wIG9mIGFsbCBvdGhlciBvcGVuZWQgbW9kYWxzXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZShpZDogc3RyaW5nLCBmb3JjZSA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG9nZ2xlTW9kYWwodGhpcy5nZXQoaWQpLCBmb3JjZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIGNyZWF0ZWQgbW9kYWxzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgdGhhdCBjb250YWlucyBhbGwgbW9kYWwgaW5zdGFuY2VzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRNb2RhbFN0YWNrKCk6IE1vZGFsSW5zdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5nZXRNb2RhbFN0YWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhbGwgdGhlIG9wZW5lZCBtb2RhbHMuIEl0IGxvb2tzIGZvciBhbGwgbW9kYWwgaW5zdGFuY2VzIHdpdGggdGhlaXIgYHZpc2libGVgIHByb3BlcnR5IHNldCB0byBgdHJ1ZWAuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgb3BlbmVkIG1vZGFscy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0T3BlbmVkTW9kYWxzKCk6IE1vZGFsSW5zdGFuY2VbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5nZXRPcGVuZWRNb2RhbHMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRoZSBvcGVuZWQgbW9kYWwgd2l0aCBoaWdoZXN0IHotaW5kZXguXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgb3BlbmVkIG1vZGFsIHdpdGggaGlnaGVzdCB6LWluZGV4LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRUb3BPcGVuZWRNb2RhbCgpOiBOdGtTbWFydE1vZGFsQ29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9tb2RhbFN0YWNrLmdldFRvcE9wZW5lZE1vZGFsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGhpZ2hlciBgei1pbmRleGAgdmFsdWUgYmV0d2VlbiBhbGwgdGhlIG1vZGFsIGluc3RhbmNlcy4gSXQgaXRlcmF0ZXMgb3ZlciB0aGUgYE1vZGFsU3RhY2tgIGFycmF5IGFuZFxyXG4gICAqIGNhbGN1bGF0ZXMgYSBoaWdoZXIgdmFsdWUgKGl0IHRha2VzIHRoZSBoaWdoZXN0IGluZGV4IHZhbHVlIGJldHdlZW4gYWxsIHRoZSBtb2RhbCBpbnN0YW5jZXMgYW5kIGFkZHMgMSkuXHJcbiAgICogVXNlIGl0IHRvIG1ha2UgYSBtb2RhbCBhcHBlYXIgZm9yZWdyb3VuZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIGEgaGlnaGVyIGluZGV4IGZyb20gYWxsIHRoZSBleGlzdGluZyBtb2RhbCBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgcHVibGljIGdldEhpZ2hlckluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5nZXRIaWdoZXJJbmRleCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgZ2l2ZXMgdGhlIG51bWJlciBvZiBtb2RhbCBpbnN0YW5jZXMuIEl0J3MgaGVscGZ1bCB0byBrbm93IGlmIHRoZSBtb2RhbCBzdGFjayBpcyBlbXB0eSBvciBub3QuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIG1vZGFsIGluc3RhbmNlcy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TW9kYWxTdGFja0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kYWxTdGFjay5nZXRNb2RhbFN0YWNrQ291bnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIG1vZGFsIGluc3RhbmNlIGZyb20gdGhlIG1vZGFsIHN0YWNrLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBtb2RhbCBpZGVudGlmaWVyLlxyXG4gICAqIEByZXR1cm5zIHRoZSByZW1vdmVkIG1vZGFsIGluc3RhbmNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVNb2RhbChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tb2RhbFN0YWNrLnJlbW92ZU1vZGFsKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc29jaWF0ZSBkYXRhIHRvIGFuIGlkZW50aWZpZWQgbW9kYWwuIElmIHRoZSBtb2RhbCBpc24ndCBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gc29tZSBkYXRhLCBpdCBjcmVhdGVzIGEgbmV3XHJcbiAgICogZW50cnkgaW4gdGhlIGBtb2RhbERhdGFgIGFycmF5IHdpdGggaXRzIGBpZGAgYW5kIHRoZSBnaXZlbiBgZGF0YWAuIElmIHRoZSBtb2RhbCBhbHJlYWR5IGhhcyBkYXRhLCBpdCByZXdyaXRlc1xyXG4gICAqIHRoZW0gd2l0aCB0aGUgbmV3IG9uZXMuIEZpbmFsbHkgaWYgbm8gbW9kYWwgZm91bmQgaXQgcmV0dXJucyBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBjb25zb2xlIGFuZCBmYWxzZSB2YWx1ZVxyXG4gICAqIGFzIG1ldGhvZCBvdXRwdXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB5b3Ugd2FudCB0byBhc3NvY2lhdGUgdG8gdGhlIG1vZGFsLlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgbW9kYWwgaWRlbnRpZmllci5cclxuICAgKiBAcGFyYW0gZm9yY2UgSWYgdHJ1ZSwgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBzdG9yZWQgZGF0YSBpZiB0aGVyZSB3YXMuXHJcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kYWwgZXhpc3RzIGFuZCB0aGUgcHJvY2VzcyBoYXMgYmVlbiB0cmllZCwgZWl0aGVyIGZhbHNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNb2RhbERhdGEoZGF0YTogYW55LCBpZDogc3RyaW5nLCBmb3JjZT86IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCBpO1xyXG4gICAgaWYgKGkgPSB0aGlzLmdldChpZCkpIHtcclxuICAgICAgaS5zZXREYXRhKGRhdGEsIGZvcmNlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBtb2RhbCBkYXRhIGJ5IGl0cyBpZGVudGlmaWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSBtb2RhbCBpZGVudGlmaWVyIHVzZWQgYXQgY3JlYXRpb24gdGltZS5cclxuICAgKiBAcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBtb2RhbCBkYXRhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRNb2RhbERhdGEoaWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgaTtcclxuICAgIGlmIChpID0gdGhpcy5nZXQoaWQpKSB7XHJcbiAgICAgIHJldHVybiBpLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHRoZSBkYXRhIGF0dGFjaGVkIHRvIGEgZ2l2ZW4gbW9kYWwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqIEByZXR1cm5zIHRoZSByZW1vdmVkIGRhdGEgb3IgZmFsc2UgaWYgbW9kYWwgZG9lc24ndCBleGlzdC5cclxuICAgKi9cclxuICBwdWJsaWMgcmVzZXRNb2RhbERhdGEoaWQ6IHN0cmluZyk6IGFueSB8IGJvb2xlYW4ge1xyXG4gICAgaWYgKCEhdGhpcy5fbW9kYWxTdGFjay5nZXRNb2RhbFN0YWNrKCkuZmluZCgobzogTW9kYWxJbnN0YW5jZSkgPT4gby5pZCA9PT0gaWQpKSB7XHJcbiAgICAgIGNvbnN0IHJlbW92ZWQ6IGFueSA9IHRoaXMuZ2V0TW9kYWwoaWQpLmdldERhdGEoKTtcclxuICAgICAgdGhpcy5nZXRNb2RhbChpZCkucmVtb3ZlRGF0YSgpO1xyXG4gICAgICByZXR1cm4gcmVtb3ZlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIHRoZSBsYXRlc3Qgb3BlbmVkIG1vZGFsIGlmIGl0IGhhcyBiZWVuIGRlY2xhcmVkIGFzIGVzY2FwYWJsZVxyXG4gICAqIFVzaW5nIGEgZGVib3VuY2Ugc3lzdGVtIGJlY2F1c2Ugb25lIG9yIG1vcmUgbW9kYWxzIGNvdWxkIGJlIGxpc3RlbmluZ1xyXG4gICAqIGVzY2FwZSBrZXkgcHJlc3MgZXZlbnQuXHJcbiAgICovXHJcbiAgcHVibGljIGNsb3NlTGF0ZXN0TW9kYWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldFRvcE9wZW5lZE1vZGFsKCkuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBkeW5hbWljIE50a1NtYXJ0TW9kYWxDb21wb25lbnRcclxuICAgKiBAcGFyYW0gaWQgVGhlIG1vZGFsIGlkZW50aWZpZXIgdXNlZCBhdCBjcmVhdGlvbiB0aW1lLlxyXG4gICAqIEBwYXJhbSBjb250ZW50IFRoZSBtb2RhbCBjb250ZW50ICggc3RyaW5nLCB0ZW1wbGF0ZVJlZiBvciBDb21wb25lbnQgKVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjcmVhdGU8VD4oaWQ6IHN0cmluZywgY29udGVudDogQ29udGVudDxUPiwgb3B0aW9uczogSU50a1NtYXJ0TW9kYWxPcHRpb25zID0ge30pIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldE1vZGFsKGlkKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShOdGtTbWFydE1vZGFsQ29tcG9uZW50KTtcclxuICAgICAgY29uc3QgbmdDb250ZW50ID0gdGhpcy5fcmVzb2x2ZU5nQ29udGVudChjb250ZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKHRoaXMuX2luamVjdG9yLCBuZ0NvbnRlbnQpO1xyXG5cclxuICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUeXBlKSB7XHJcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmNvbnRlbnRDb21wb25lbnQgPSBjb250ZW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuaWRlbnRpZmllciA9IGlkO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY3JlYXRlRnJvbSA9ICdzZXJ2aWNlJztcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jbG9zYWJsZSA9PT0gJ2Jvb2xlYW4nKSB7IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jbG9zYWJsZSA9IG9wdGlvbnMuY2xvc2FibGU7IH1cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmVzY2FwYWJsZSA9PT0gJ2Jvb2xlYW4nKSB7IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5lc2NhcGFibGUgPSBvcHRpb25zLmVzY2FwYWJsZTsgfVxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZGlzbWlzc2FibGUgPT09ICdib29sZWFuJykgeyBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGlzbWlzc2FibGUgPSBvcHRpb25zLmRpc21pc3NhYmxlOyB9XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jdXN0b21DbGFzcyA9PT0gJ3N0cmluZycpIHsgY29tcG9uZW50UmVmLmluc3RhbmNlLmN1c3RvbUNsYXNzID0gb3B0aW9ucy5jdXN0b21DbGFzczsgfVxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYmFja2Ryb3AgPT09ICdib29sZWFuJykgeyBjb21wb25lbnRSZWYuaW5zdGFuY2UuYmFja2Ryb3AgPSBvcHRpb25zLmJhY2tkcm9wOyB9XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mb3JjZSA9PT0gJ2Jvb2xlYW4nKSB7IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5mb3JjZSA9IG9wdGlvbnMuZm9yY2U7IH1cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmhpZGVEZWxheSA9PT0gJ251bWJlcicpIHsgY29tcG9uZW50UmVmLmluc3RhbmNlLmhpZGVEZWxheSA9IG9wdGlvbnMuaGlkZURlbGF5OyB9XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvc3RhcnQgPT09ICdib29sZWFuJykgeyBjb21wb25lbnRSZWYuaW5zdGFuY2UuYXV0b3N0YXJ0ID0gb3B0aW9ucy5hdXRvc3RhcnQ7IH1cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRhcmdldCA9PT0gJ3N0cmluZycpIHsgY29tcG9uZW50UmVmLmluc3RhbmNlLnRhcmdldCA9IG9wdGlvbnMudGFyZ2V0OyB9XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hcmlhTGFiZWwgPT09ICdzdHJpbmcnKSB7IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5hcmlhTGFiZWwgPSBvcHRpb25zLmFyaWFMYWJlbDsgfVxyXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXJpYUxhYmVsbGVkQnkgPT09ICdzdHJpbmcnKSB7IGNvbXBvbmVudFJlZi5pbnN0YW5jZS5hcmlhTGFiZWxsZWRCeSA9IG9wdGlvbnMuYXJpYUxhYmVsbGVkQnk7IH1cclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFyaWFEZXNjcmliZWRCeSA9PT0gJ3N0cmluZycpIHsgY29tcG9uZW50UmVmLmluc3RhbmNlLmFyaWFEZXNjcmliZWRCeSA9IG9wdGlvbnMuYXJpYURlc2NyaWJlZEJ5OyB9XHJcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZWZvY3VzID09PSAnYm9vbGVhbicpIHsgY29tcG9uZW50UmVmLmluc3RhbmNlLnJlZm9jdXMgPSBvcHRpb25zLnJlZm9jdXM7IH1cclxuXHJcbiAgICAgIHRoaXMuX2FwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XHJcblxyXG4gICAgICBjb25zdCBkb21FbGVtID0gKGNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEV2ZW50cygpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKE50a1NtYXJ0TW9kYWxDb25maWcucHJlZml4RXZlbnQgKyAnY3JlYXRlJywgKChlOiBDdXN0b21FdmVudCkgPT4ge1xyXG4gICAgICB0aGlzLl9pbml0TW9kYWwoZS5kZXRhaWwuaW5zdGFuY2UpO1xyXG4gICAgfSkgYXMgRXZlbnRMaXN0ZW5lcik7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTnRrU21hcnRNb2RhbENvbmZpZy5wcmVmaXhFdmVudCArICdkZWxldGUnLCAoKGU6IEN1c3RvbUV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuX2RlbGV0ZU1vZGFsKGUuZGV0YWlsLmluc3RhbmNlKTtcclxuICAgIH0pIGFzIEV2ZW50TGlzdGVuZXIpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKE50a1NtYXJ0TW9kYWxDb25maWcucHJlZml4RXZlbnQgKyAnb3BlbicsICgoZTogQ3VzdG9tRXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5fb3Blbk1vZGFsKGUuZGV0YWlsLmluc3RhbmNlLm1vZGFsLCBlLmRldGFpbC50b3ApO1xyXG4gICAgfSkgYXMgRXZlbnRMaXN0ZW5lcik7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTnRrU21hcnRNb2RhbENvbmZpZy5wcmVmaXhFdmVudCArICd0b2dnbGUnLCAoKGU6IEN1c3RvbUV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZU1vZGFsKGUuZGV0YWlsLmluc3RhbmNlLm1vZGFsLCBlLmRldGFpbC50b3ApO1xyXG4gICAgfSkgYXMgRXZlbnRMaXN0ZW5lcik7XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoTnRrU21hcnRNb2RhbENvbmZpZy5wcmVmaXhFdmVudCArICdjbG9zZScsICgoZTogQ3VzdG9tRXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbChlLmRldGFpbC5pbnN0YW5jZS5tb2RhbCk7XHJcbiAgICB9KSBhcyBFdmVudExpc3RlbmVyKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihOdGtTbWFydE1vZGFsQ29uZmlnLnByZWZpeEV2ZW50ICsgJ2Rpc21pc3MnLCAoKGU6IEN1c3RvbUV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuX2Rpc21pc3NNb2RhbChlLmRldGFpbC5pbnN0YW5jZS5tb2RhbCk7XHJcbiAgICB9KSBhcyBFdmVudExpc3RlbmVyKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLl9lc2NhcGVLZXlib2FyZEV2ZW50KTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRNb2RhbChtb2RhbEluc3RhbmNlOiBNb2RhbEluc3RhbmNlKSB7XHJcbiAgICBtb2RhbEluc3RhbmNlLm1vZGFsLmxheWVyUG9zaXRpb24gKz0gdGhpcy5nZXRNb2RhbFN0YWNrQ291bnQoKTtcclxuICAgIHRoaXMuYWRkTW9kYWwobW9kYWxJbnN0YW5jZSwgbW9kYWxJbnN0YW5jZS5tb2RhbC5mb3JjZSk7XHJcblxyXG4gICAgaWYgKG1vZGFsSW5zdGFuY2UubW9kYWwuYXV0b3N0YXJ0KSB7XHJcbiAgICAgIHRoaXMub3Blbihtb2RhbEluc3RhbmNlLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29wZW5Nb2RhbChtb2RhbDogTnRrU21hcnRNb2RhbENvbXBvbmVudCwgdG9wPzogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG1vZGFsLnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGFzdEVsZW1lbnRGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAobW9kYWwuZXNjYXBhYmxlKSB7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2VzY2FwZUtleWJvYXJkRXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtb2RhbC5iYWNrZHJvcCkge1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX3RyYXBGb2N1c01vZGFsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodG9wKSB7XHJcbiAgICAgIG1vZGFsLmxheWVyUG9zaXRpb24gPSB0aGlzLmdldEhpZ2hlckluZGV4KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kYWwuYWRkQm9keUNsYXNzKCk7XHJcbiAgICBtb2RhbC5vdmVybGF5VmlzaWJsZSA9IHRydWU7XHJcbiAgICBtb2RhbC52aXNpYmxlID0gdHJ1ZTtcclxuICAgIG1vZGFsLm9uT3Blbi5lbWl0KG1vZGFsKTtcclxuICAgIG1vZGFsLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBtb2RhbC5vcGVuZWRDbGFzcyA9IHRydWU7XHJcblxyXG4gICAgICBpZiAobW9kYWwudGFyZ2V0KSB7XHJcbiAgICAgICAgbW9kYWwudGFyZ2V0UGxhY2VtZW50KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG1vZGFsLm5zbURpYWxvZy5maXJzdC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcclxuICAgICAgbW9kYWwubnNtRGlhbG9nLmZpcnN0Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJJbmRleCcsICctMScpO1xyXG4gICAgICBtb2RhbC5uc21EaWFsb2cuZmlyc3QubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCAndHJ1ZScpO1xyXG4gICAgICBtb2RhbC5uc21EaWFsb2cuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG5cclxuICAgICAgbW9kYWwubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIG1vZGFsLm9uT3BlbkZpbmlzaGVkLmVtaXQobW9kYWwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2dnbGVNb2RhbChtb2RhbDogTnRrU21hcnRNb2RhbENvbXBvbmVudCwgdG9wPzogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG1vZGFsLnZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlTW9kYWwobW9kYWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX29wZW5Nb2RhbChtb2RhbCwgdG9wKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwobW9kYWw6IE50a1NtYXJ0TW9kYWxDb21wb25lbnQpOiBib29sZWFuIHtcclxuICAgIGlmICghbW9kYWwub3BlbmVkQ2xhc3MpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZGFsLm9wZW5lZENsYXNzID0gZmFsc2U7XHJcbiAgICBtb2RhbC5vbkNsb3NlLmVtaXQobW9kYWwpO1xyXG4gICAgbW9kYWwub25BbnlDbG9zZUV2ZW50LmVtaXQobW9kYWwpO1xyXG5cclxuICAgIGlmICh0aGlzLmdldE9wZW5lZE1vZGFscygpLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbW9kYWwucmVtb3ZlQm9keUNsYXNzKCk7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMuX2VzY2FwZUtleWJvYXJkRXZlbnQpO1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuX3RyYXBGb2N1c01vZGFsKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbW9kYWwudmlzaWJsZUNoYW5nZS5lbWl0KG1vZGFsLnZpc2libGUpO1xyXG4gICAgICBtb2RhbC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIG1vZGFsLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIG1vZGFsLm5zbURpYWxvZy5maXJzdC5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiSW5kZXgnKTtcclxuICAgICAgbW9kYWwubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIG1vZGFsLm9uQ2xvc2VGaW5pc2hlZC5lbWl0KG1vZGFsKTtcclxuICAgICAgbW9kYWwub25BbnlDbG9zZUV2ZW50RmluaXNoZWQuZW1pdChtb2RhbCk7XHJcbiAgICAgIGlmIChtb2RhbC5yZWZvY3VzKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0RWxlbWVudEZvY3VzZWQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgbW9kYWwuaGlkZURlbGF5KTtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc21pc3NNb2RhbChtb2RhbDogTnRrU21hcnRNb2RhbENvbXBvbmVudCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFtb2RhbC5vcGVuZWRDbGFzcykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kYWwub3BlbmVkQ2xhc3MgPSBmYWxzZTtcclxuICAgIG1vZGFsLm9uRGlzbWlzcy5lbWl0KG1vZGFsKTtcclxuICAgIG1vZGFsLm9uQW55Q2xvc2VFdmVudC5lbWl0KG1vZGFsKTtcclxuXHJcbiAgICBpZiAodGhpcy5nZXRPcGVuZWRNb2RhbHMoKS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIG1vZGFsLnJlbW92ZUJvZHlDbGFzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBtb2RhbC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIG1vZGFsLnZpc2libGVDaGFuZ2UuZW1pdChtb2RhbC52aXNpYmxlKTtcclxuICAgICAgbW9kYWwub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgbW9kYWwubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIG1vZGFsLm9uRGlzbWlzc0ZpbmlzaGVkLmVtaXQobW9kYWwpO1xyXG4gICAgICBtb2RhbC5vbkFueUNsb3NlRXZlbnRGaW5pc2hlZC5lbWl0KG1vZGFsKTtcclxuICAgIH0sIG1vZGFsLmhpZGVEZWxheSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWxldGVNb2RhbChtb2RhbEluc3RhbmNlOiBNb2RhbEluc3RhbmNlKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1vZGFsKG1vZGFsSW5zdGFuY2UuaWQpO1xyXG5cclxuICAgIGlmICghdGhpcy5nZXRNb2RhbFN0YWNrKCkubGVuZ3RoKSB7XHJcbiAgICAgIG1vZGFsSW5zdGFuY2UubW9kYWwucmVtb3ZlQm9keUNsYXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGNvbnRlbnQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlc1xyXG4gICAqIEBwYXJhbSBjb250ZW50IFRoZSBtb2RhbCBjb250ZW50ICggc3RyaW5nLCB0ZW1wbGF0ZVJlZiBvciBDb21wb25lbnQgKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3Jlc29sdmVOZ0NvbnRlbnQ8VD4oY29udGVudDogQ29udGVudDxUPik6IGFueVtdW10gfCBUZXh0W11bXSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb250ZW50KTtcclxuICAgICAgcmV0dXJuIFtbZWxlbWVudF1dO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcclxuICAgICAgY29uc3Qgdmlld1JlZiA9IGNvbnRlbnQuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwgYXMgYW55KTtcclxuICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xyXG4gICAgICByZXR1cm4gW3ZpZXdSZWYucm9vdE5vZGVzXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSB0aGUgbGF0ZXN0IG9wZW5lZCBtb2RhbCBpZiBlc2NhcGUga2V5IGV2ZW50IGlzIGVtaXR0ZWRcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIEtleWJvYXJkIEV2ZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZXNjYXBlS2V5Ym9hcmRFdmVudCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBtb2RhbCA9IHRoaXMuZ2V0VG9wT3BlbmVkTW9kYWwoKTtcclxuXHJcbiAgICAgICAgaWYgKCFtb2RhbC5lc2NhcGFibGUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1vZGFsLm9uRXNjYXBlLmVtaXQobW9kYWwpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VMYXRlc3RNb2RhbCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIGN1cnJlbnQgcGxhdGZvcm0gYnJvd3NlclxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IGlzQnJvd3NlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybUlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoaWxlIG1vZGFsIGlzIG9wZW4sIHRoZSBmb2N1cyBzdGF5IG9uIGl0XHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBLZXlib2FyIGRFdmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RyYXBGb2N1c01vZGFsID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5nZXRUb3BPcGVuZWRNb2RhbCgpO1xyXG5cclxuICAgICAgICBpZiAoIW1vZGFsLm5zbURpYWxvZy5maXJzdC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICBtb2RhbC5uc21EaWFsb2cuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==

@@ -5,2 +5,3 @@ /**

export * from './public-api';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW50ay1zbWFydC1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiRDovU291cmNlS2FyYXZpL0dpdEh1Yi9ucG0tbnRrLWNtcy1hbmd1bGFyL3Byb2plY3RzL25neC1udGstc21hcnQtbW9kdWxlL3NyYy8iLCJzb3VyY2VzIjpbIm5neC1udGstc21hcnQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
export { NtkSmartModalStackService as ɵa } from './lib/modal/ntk-smart-modal-stack.service';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW50ay1zbWFydC1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiRDovU291cmNlS2FyYXZpL0dpdEh1Yi9ucG0tbnRrLWNtcy1hbmd1bGFyL3Byb2plY3RzL25neC1udGstc21hcnQtbW9kdWxlL3NyYy8iLCJzb3VyY2VzIjpbIm5neC1udGstc21hcnQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUM7QUFFN0IsT0FBTyxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge050a1NtYXJ0TW9kYWxTdGFja1NlcnZpY2UgYXMgybVhfSBmcm9tICcuL2xpYi9tb2RhbC9udGstc21hcnQtbW9kYWwtc3RhY2suc2VydmljZSc7Il19

@@ -1,7 +0,7 @@

import { Injectable, EventEmitter, Component, Renderer2, ChangeDetectorRef, Input, Output, ViewChild, HostListener, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Injectable, EventEmitter, Component, Renderer2, ChangeDetectorRef, ComponentFactoryResolver, Inject, PLATFORM_ID, Input, Output, ViewChildren, ViewContainerRef, HostListener, Type, TemplateRef, ApplicationRef, Injector, NgModule, ɵɵdefineInjectable } from '@angular/core';
import { isPlatformBrowser, DOCUMENT, CommonModule } from '@angular/common';
class NtkSmartModalService {
class NtkSmartModalStackService {
constructor() {
this.modalStack = [];
this._modalStack = [];
}

@@ -18,14 +18,12 @@ /**

if (force) {
const i = this.modalStack.findIndex((o) => {
return o.id === modalInstance.id;
});
const i = this._modalStack.findIndex((o) => o.id === modalInstance.id);
if (i > -1) {
this.modalStack[i].modal = modalInstance.modal;
this._modalStack[i].modal = modalInstance.modal;
}
else {
this.modalStack.push(modalInstance);
this._modalStack.push(modalInstance);
}
return;
}
this.modalStack.push(modalInstance);
this._modalStack.push(modalInstance);
}

@@ -38,73 +36,11 @@ /**

getModal(id) {
if (!this.modalStack || this.modalStack.length === 0) {
return null;
const i = this._modalStack.find((o) => o.id === id);
if (i !== undefined) {
return i.modal;
}
const ret = this.modalStack.filter((o) => {
return o.id === id;
})[0];
if (!ret) {
return null;
}
return ret.modal;
}
/**
* Alias of `getModal` to retrieve a modal instance by its identifier.
*
* @param id The modal identifier used at creation time.
*/
get(id) {
return this.getModal(id);
}
/**
* Open a given modal
*
* @param id The modal identifier used at creation time.
* @param force Tell the modal to open top of all other opened modals
*/
open(id, force = false) {
const instance = this.modalStack.find((o) => {
return o.id === id;
});
if (!!instance) {
instance.modal.open(force);
}
else {
throw new Error('Modal not found');
throw new Error(`Cannot find modal with identifier ${id}`);
}
}
/**
* Close a given modal
*
* @param id The modal identifier used at creation time.
*/
close(id) {
const instance = this.modalStack.find((o) => {
return o.id === id;
});
if (!!instance) {
instance.modal.close();
}
else {
throw new Error('Modal not found');
}
}
/**
* Toggles a given modal
* If the retrieved modal is opened it closes it, else it opens it.
*
* @param id The modal identifier used at creation time.
* @param force Tell the modal to open top of all other opened modals
*/
toggle(id, force = false) {
const instance = this.modalStack.find((o) => {
return o.id === id;
});
if (!!instance) {
instance.modal.toggle(force);
}
else {
throw new Error('Modal not found');
}
}
/**
* Retrieve all the created modals.

@@ -115,3 +51,3 @@ *

getModalStack() {
return this.modalStack;
return this._modalStack;
}

@@ -124,11 +60,18 @@ /**

getOpenedModals() {
const modals = [];
this.modalStack.forEach((o) => {
if (o.modal.visible) {
modals.push(o);
}
});
return modals;
return this._modalStack.filter((o) => o.modal.visible);
}
/**
* Retrieve the opened modal with highest z-index.
*
* @returns the opened modal with highest z-index.
*/
getTopOpenedModal() {
if (!this.getOpenedModals().length) {
throw new Error('No modal is opened');
}
return this.getOpenedModals()
.map((o) => o.modal)
.reduce((highest, item) => item.layerPosition > highest.layerPosition ? item : highest, this.getOpenedModals()[0].modal);
}
/**
* Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and

@@ -141,8 +84,3 @@ * calculates a higher value (it takes the highest index value between all the modal instances and adds 1).

getHigherIndex() {
const index = [1041];
const modals = this.getModalStack();
modals.forEach((o) => {
index.push(o.modal.layerPosition);
});
return Math.max(...index) + 1;
return Math.max(...this._modalStack.map((o) => o.modal.layerPosition), 1041) + 1;
}

@@ -155,3 +93,3 @@ /**

getModalStackCount() {
return this.modalStack.length;
return this._modalStack.length;
}

@@ -165,86 +103,25 @@ /**

removeModal(id) {
const i = this.modalStack.findIndex((o) => {
return o.id === id;
});
const i = this._modalStack.findIndex((o) => o.id === id);
if (i > -1) {
this.modalStack.splice(i, 1);
this._modalStack.splice(i, 1);
}
}
/**
* Associate data to an identified modal. If the modal isn't already associated to some data, it creates a new
* entry in the `modalData` array with its `id` and the given `data`. If the modal already has data, it rewrites
* them with the new ones. Finally if no modal found it returns an error message in the console and false value
* as method output.
*
* @param data The data you want to associate to the modal.
* @param id The modal identifier.
* @param force If true, overrides the previous stored data if there was.
* @returns true if the given modal exists and the process has been tried, either false.
*/
setModalData(data, id, force) {
if (!!this.modalStack.find((o) => {
return o.id === id;
})) {
this.getModal(id).setData(data, force);
return true;
}
else {
return false;
}
}
/**
* Retrieve modal data by its identifier.
*
* @param id The modal identifier used at creation time.
* @returns the associated modal data.
*/
getModalData(id) {
return this.getModal(id).getData();
}
/**
* Reset the data attached to a given modal.
*
* @param id The modal identifier used at creation time.
* @returns the removed data or false if modal doesn't exist.
*/
resetModalData(id) {
if (!!this.modalStack.find((o) => {
return o.id === id;
})) {
const removed = this.getModal(id).getData();
this.getModal(id).removeData();
return removed;
}
else {
return false;
}
}
/**
* Close the latest opened modal if it has been declared as escapable
* Using a debounce system because one or more modals could be listening
* escape key press event.
*/
closeLatestModal() {
const me = this;
clearTimeout(this.debouncer);
this.debouncer = setTimeout(() => {
let tmp;
me.getOpenedModals().forEach((m) => {
if (m.modal.layerPosition > (!!tmp ? tmp.modal.layerPosition : 0 && m.modal.escapable)) {
tmp = m;
}
});
return !!tmp ? tmp.modal.close() : false;
}, 100);
}
}
NtkSmartModalService.decorators = [
NtkSmartModalStackService.decorators = [
{ type: Injectable }
];
NtkSmartModalStackService.ctorParameters = () => [];
const NtkSmartModalConfig = {
bodyClassOpen: 'dialog-open',
prefixEvent: 'ntk-smart-modal.'
};
class NtkSmartModalComponent {
constructor(privateRenderer, privateChangeDetectorRef, privateNtkSmartModalService) {
this.privateRenderer = privateRenderer;
this.privateChangeDetectorRef = privateChangeDetectorRef;
this.privateNtkSmartModalService = privateNtkSmartModalService;
constructor(_renderer, _changeDetectorRef, componentFactoryResolver, _document, _platformId) {
this._renderer = _renderer;
this._changeDetectorRef = _changeDetectorRef;
this.componentFactoryResolver = componentFactoryResolver;
this._document = _document;
this._platformId = _platformId;
this.closable = true;

@@ -260,2 +137,7 @@ this.escapable = true;

this.autostart = false;
this.target = '';
this.ariaLabel = null;
this.ariaLabelledBy = null;
this.ariaDescribedBy = null;
this.refocus = true;
this.visibleChange = new EventEmitter();

@@ -269,2 +151,3 @@ this.onClose = new EventEmitter();

this.onOpen = new EventEmitter();
this.onOpenFinished = new EventEmitter();
this.onEscape = new EventEmitter();

@@ -276,96 +159,70 @@ this.onDataAdded = new EventEmitter();

this.openedClass = false;
this.escapeKeyboardEvent = (event) => {
if (event.keyCode === 27) {
this.onEscape.emit(this);
this.privateNtkSmartModalService.closeLatestModal();
}
};
this.createFrom = 'html';
}
ngOnInit() {
if (!!this.identifier && this.identifier.length) {
this.layerPosition += this.privateNtkSmartModalService.getModalStackCount();
this.privateNtkSmartModalService.addModal({ id: this.identifier, modal: this }, this.force);
if (this.autostart) {
this.privateNtkSmartModalService.open(this.identifier);
}
if (!this.identifier || !this.identifier.length) {
throw new Error('identifier field isn’t set. Please set one before calling <ngx-smart-modal> in a template.');
}
else {
throw new Error('identifier field isn’t set. Please set one before calling <ntk-smart-modal> in a template.');
this._sendEvent('create');
}
ngAfterViewInit() {
if (this.contentComponent) {
const factory = this.componentFactoryResolver.resolveComponentFactory(this.contentComponent);
this.createDynamicContent(this.dynamicContentContainer, factory);
this.dynamicContentContainer.changes.subscribe((contentViewContainers) => {
this.createDynamicContent(contentViewContainers, factory);
});
}
}
ngOnDestroy() {
this.privateNtkSmartModalService.removeModal(this.identifier);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
if (!this.privateNtkSmartModalService.getModalStack.length) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
this._sendEvent('delete');
}
/**
* Open the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
open(top) {
if (top) {
this.layerPosition = this.privateNtkSmartModalService.getHigherIndex();
}
this.privateRenderer.addClass(document.body, 'dialog-open');
this.overlayVisible = true;
this.visible = true;
setTimeout(() => {
this.openedClass = true;
if (this.target) {
this.targetPlacement();
}
this.privateChangeDetectorRef.markForCheck();
});
this.onOpen.emit(this);
if (this.escapable) {
window.addEventListener('keyup', this.escapeKeyboardEvent);
}
this._sendEvent('open', { top: top });
return this;
}
/**
* Close the modal instance
*
* @returns the modal component
*/
close() {
const me = this;
this.openedClass = false;
this.onClose.emit(this);
this.onAnyCloseEvent.emit(this);
if (this.privateNtkSmartModalService.getOpenedModals().length < 2) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
setTimeout(() => {
me.visibleChange.emit(me.visible);
me.visible = false;
me.overlayVisible = false;
me.privateChangeDetectorRef.markForCheck();
me.onCloseFinished.emit(me);
me.onAnyCloseEventFinished.emit(me);
}, this.hideDelay);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
this._sendEvent('close');
return this;
}
/**
* Dismiss the modal instance
*
* @param e the event sent by the browser
* @returns the modal component
*/
dismiss(e) {
const me = this;
if (!this.dismissable) {
return;
if (!this.dismissable || !e.target.classList.contains('overlay')) {
return this;
}
if (e.target.classList.contains('overlay')) {
this.openedClass = false;
this.onDismiss.emit(this);
this.onAnyCloseEvent.emit(this);
if (this.privateNtkSmartModalService.getOpenedModals().length < 2) {
this.privateRenderer.removeClass(document.body, 'dialog-open');
}
setTimeout(() => {
me.visible = false;
me.visibleChange.emit(me.visible);
me.overlayVisible = false;
me.privateChangeDetectorRef.markForCheck();
me.onDismissFinished.emit(me);
me.onAnyCloseEventFinished.emit(me);
}, this.hideDelay);
window.removeEventListener('keyup', this.escapeKeyboardEvent);
}
this._sendEvent('dismiss');
return this;
}
/**
* Toggle visibility of the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
toggle(top) {
if (this.visible) {
this.close();
}
else {
this.open(top);
}
this._sendEvent('toggle', { top: top });
return this;
}
/**
* Add a custom class to the modal instance
*
* @param className the class to add
* @returns the modal component
*/
addCustomClass(className) {

@@ -378,3 +235,10 @@ if (!this.customClass.length) {

}
return this;
}
/**
* Remove a custom class to the modal instance
*
* @param className the class to remove
* @returns the modal component
*/
removeCustomClass(className) {

@@ -387,39 +251,96 @@ if (className) {

}
return this;
}
/**
* Returns the visibility state of the modal instance
*/
isVisible() {
return this.visible;
}
/**
* Checks if data is attached to the modal instance
*/
hasData() {
return this.privateData !== undefined;
return this._data !== undefined;
}
/**
* Attach data to the modal instance
*
* @param data the data to attach
* @param force override potentially attached data
* @returns the modal component
*/
setData(data, force) {
if (!this.hasData() || (this.hasData() && force)) {
this.privateData = data;
this.onDataAdded.emit(this.privateData);
this.privateChangeDetectorRef.markForCheck();
this._data = data;
this.onDataAdded.emit(this._data);
this.markForCheck();
}
return this;
}
/**
* Retrieve the data attached to the modal instance
*/
getData() {
return this.privateData;
return this._data;
}
/**
* Remove the data attached to the modal instance
*
* @returns the modal component
*/
removeData() {
this.privateData = undefined;
this._data = undefined;
this.onDataRemoved.emit(true);
this.privateChangeDetectorRef.markForCheck();
this.markForCheck();
return this;
}
/**
* Add body class modal opened
*
* @returns the modal component
*/
addBodyClass() {
this._renderer.addClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);
return this;
}
/**
* Add body class modal opened
*
* @returns the modal component
*/
removeBodyClass() {
this._renderer.removeClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);
return this;
}
markForCheck() {
try {
this._changeDetectorRef.detectChanges();
}
catch (e) {
}
this._changeDetectorRef.markForCheck();
}
/**
* Listens for window resize event and recalculates modal instance position if it is element-relative
*/
targetPlacement() {
if (!this.nsmDialog || !this.nsmContent || !this.nsmOverlay || !this.target) {
return;
if (!this.isBrowser || !this.nsmDialog.length || !this.nsmContent.length || !this.nsmOverlay.length || !this.target) {
return false;
}
const targetElementRect = document.querySelector(this.target).getBoundingClientRect();
const bodyRect = this.nsmOverlay.nativeElement.getBoundingClientRect();
const nsmContentRect = this.nsmContent.nativeElement.getBoundingClientRect();
const nsmDialogRect = this.nsmDialog.nativeElement.getBoundingClientRect();
const marginLeft = parseInt(getComputedStyle(this.nsmContent.nativeElement).marginLeft, 10);
const marginTop = parseInt(getComputedStyle(this.nsmContent.nativeElement).marginTop, 10);
let offsetTop = targetElementRect.top - nsmDialogRect.top - (nsmContentRect.height - targetElementRect.height) / 2;
let offsetLeft = targetElementRect.left - nsmDialogRect.left - (nsmContentRect.width - targetElementRect.width) / 2;
if (offsetLeft + nsmDialogRect.left + nsmContentRect.width + marginLeft * 2 > bodyRect.width) {
offsetLeft = bodyRect.width - (nsmDialogRect.left + nsmContentRect.width) - marginLeft * 2;
const targetElement = this._document.querySelector(this.target);
if (!targetElement) {
return false;
}
const targetElementRect = targetElement.getBoundingClientRect();
const bodyRect = this.nsmOverlay.first.nativeElement.getBoundingClientRect();
const nsmContentRect = this.nsmContent.first.nativeElement.getBoundingClientRect();
const nsmDialogRect = this.nsmDialog.first.nativeElement.getBoundingClientRect();
const marginLeft = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginLeft, 10);
const marginTop = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginTop, 10);
let offsetTop = targetElementRect.top - nsmDialogRect.top - ((nsmContentRect.height - targetElementRect.height) / 2);
let offsetLeft = targetElementRect.left - nsmDialogRect.left - ((nsmContentRect.width - targetElementRect.width) / 2);
if (offsetLeft + nsmDialogRect.left + nsmContentRect.width + (marginLeft * 2) > bodyRect.width) {
offsetLeft = bodyRect.width - (nsmDialogRect.left + nsmContentRect.width) - (marginLeft * 2);
}
else if (offsetLeft + nsmDialogRect.left < 0) {

@@ -431,8 +352,32 @@ offsetLeft = -nsmDialogRect.left;

}
if (offsetTop < 0) {
offsetTop = 0;
this._renderer.setStyle(this.nsmContent.first.nativeElement, 'top', (offsetTop < 0 ? 0 : offsetTop) + 'px');
this._renderer.setStyle(this.nsmContent.first.nativeElement, 'left', offsetLeft + 'px');
}
_sendEvent(name, extraData) {
if (!this.isBrowser) {
return false;
}
this.privateRenderer.setStyle(this.nsmContent.nativeElement, 'top', offsetTop + 'px');
this.privateRenderer.setStyle(this.nsmContent.nativeElement, 'left', offsetLeft + 'px');
const data = {
extraData: extraData,
instance: { id: this.identifier, modal: this }
};
const event = new CustomEvent(NtkSmartModalConfig.prefixEvent + name, { detail: data });
return window.dispatchEvent(event);
}
/**
* Is current platform browser
*/
get isBrowser() {
return isPlatformBrowser(this._platformId);
}
/**
* Creates content inside provided ViewContainerRef
*/
createDynamicContent(changes, factory) {
changes.forEach((viewContainerRef) => {
viewContainerRef.clear();
viewContainerRef.createComponent(factory);
this.markForCheck();
});
}
}

@@ -443,22 +388,32 @@ NtkSmartModalComponent.decorators = [

template: `
<div
*ngIf="overlayVisible"
[style.z-index]="visible ? layerPosition - 1 : -1"
[ngClass]="{ transparent: !backdrop, overlay: true, 'nsm-overlay-open': openedClass }"
(click)="dismiss($event)"
#nsmOverlay
>
<div
[style.z-index]="visible ? layerPosition : -1"
[ngClass]="['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open' : 'nsm-dialog-close']"
#nsmDialog
>
<div *ngIf="overlayVisible"
[style.z-index]="visible ? layerPosition-1 : -1"
[ngClass]="{'transparent':!backdrop, 'overlay':true, 'nsm-overlay-open':openedClass}"
(click)="dismiss($event)" #nsmOverlay>
<div [style.z-index]="visible ? layerPosition : -1"
[ngClass]="['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open': 'nsm-dialog-close']" #nsmDialog
[attr.aria-hidden]="openedClass ? false : true"
[attr.aria-label]="ariaLabel"
[attr.aria-labelledby]="ariaLabelledBy"
[attr.aria-describedby]="ariaDescribedBy">
<div class="nsm-content" #nsmContent>
<div class="nsm-body">
<ng-template #dynamicContent></ng-template>
<ng-content></ng-content>
</div>
<button type="button" *ngIf="closable" (click)="close()" aria-label="Close" class="nsm-dialog-btn-close">
<img
src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDMsNi4wNThjLTguMDc3LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDksMEw2LjA1OCw0NzYuNjkzYy04LjA3Nyw4LjA3Ny04LjA3NywyMS4xNzIsMCwyOS4yNDkgICAgQzEwLjA5Niw1MDkuOTgyLDE1LjM5LDUxMiwyMC42ODMsNTEyYzUuMjkzLDAsMTAuNTg2LTIuMDE5LDE0LjYyNS02LjA1OUw1MDUuOTQzLDM1LjMwNiAgICBDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDIsNDc2LjY5NEwzNS4zMDYsNi4wNTljLTguMDc2LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDgsMGMtOC4wNzcsOC4wNzYtOC4wNzcsMjEuMTcxLDAsMjkuMjQ4bDQ3MC42MzYsNDcwLjYzNiAgICBjNC4wMzgsNC4wMzksOS4zMzIsNi4wNTgsMTQuNjI1LDYuMDU4YzUuMjkzLDAsMTAuNTg3LTIuMDE5LDE0LjYyNC02LjA1N0M1MTQuMDE4LDQ5Ny44NjYsNTE0LjAxOCw0ODQuNzcxLDUwNS45NDIsNDc2LjY5NHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K"
/>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512"
xml:space="preserve" width="16px" height="16px" role="img" aria-labelledby="closeIconTitle closeIconDesc">
<title id="closeIconTitle">Close Icon</title>
<desc id="closeIconDesc">A light-gray close icon used to close the modal</desc>
<g>
<path d="M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249 C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306 C514.019,27.23,514.019,14.135,505.943,6.058z"
fill="currentColor"/>
</g>
<g>
<path d="M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636 c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z"
fill="currentColor"/>
</g>
</svg>
</button>

@@ -474,3 +429,5 @@ </div>

{ type: ChangeDetectorRef },
{ type: NtkSmartModalService }
{ type: ComponentFactoryResolver },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];

@@ -489,2 +446,6 @@ NtkSmartModalComponent.propDecorators = {

target: [{ type: Input }],
ariaLabel: [{ type: Input }],
ariaLabelledBy: [{ type: Input }],
ariaDescribedBy: [{ type: Input }],
refocus: [{ type: Input }],
visibleChange: [{ type: Output }],

@@ -498,11 +459,461 @@ onClose: [{ type: Output }],

onOpen: [{ type: Output }],
onOpenFinished: [{ type: Output }],
onEscape: [{ type: Output }],
onDataAdded: [{ type: Output }],
onDataRemoved: [{ type: Output }],
nsmContent: [{ type: ViewChild, args: ['nsmContent',] }],
nsmDialog: [{ type: ViewChild, args: ['nsmDialog',] }],
nsmOverlay: [{ type: ViewChild, args: ['nsmOverlay',] }],
nsmContent: [{ type: ViewChildren, args: ['nsmContent',] }],
nsmDialog: [{ type: ViewChildren, args: ['nsmDialog',] }],
nsmOverlay: [{ type: ViewChildren, args: ['nsmOverlay',] }],
dynamicContentContainer: [{ type: ViewChildren, args: ['dynamicContent', { read: ViewContainerRef },] }],
targetPlacement: [{ type: HostListener, args: ['window:resize',] }]
};
class NtkSmartModalService {
constructor(_componentFactoryResolver, _appRef, _injector, _modalStack, applicationRef, _document, _platformId) {
this._componentFactoryResolver = _componentFactoryResolver;
this._appRef = _appRef;
this._injector = _injector;
this._modalStack = _modalStack;
this.applicationRef = applicationRef;
this._document = _document;
this._platformId = _platformId;
/**
* Close the latest opened modal if escape key event is emitted
* @param event The Keyboard Event
*/
this._escapeKeyboardEvent = (event) => {
if (event.key === 'Escape') {
try {
const modal = this.getTopOpenedModal();
if (!modal.escapable) {
return false;
}
modal.onEscape.emit(modal);
this.closeLatestModal();
return true;
}
catch (e) {
return false;
}
}
return false;
};
/**
* While modal is open, the focus stay on it
* @param event The Keyboar dEvent
*/
this._trapFocusModal = (event) => {
if (event.key === 'Tab') {
try {
const modal = this.getTopOpenedModal();
if (!modal.nsmDialog.first.nativeElement.contains(document.activeElement)) {
event.preventDefault();
event.stopPropagation();
modal.nsmDialog.first.nativeElement.focus();
}
return true;
}
catch (e) {
return false;
}
}
return false;
};
this._addEvents();
}
/**
* Add a new modal instance. This step is essential and allows to retrieve any modal at any time.
* It stores an object that contains the given modal identifier and the modal itself directly in the `modalStack`.
*
* @param modalInstance The object that contains the given modal identifier and the modal itself.
* @param force Optional parameter that forces the overriding of modal instance if it already exists.
* @returns nothing special.
*/
addModal(modalInstance, force) {
this._modalStack.addModal(modalInstance, force);
}
/**
* Retrieve a modal instance by its identifier.
*
* @param id The modal identifier used at creation time.
*/
getModal(id) {
return this._modalStack.getModal(id);
}
/**
* Alias of `getModal` to retrieve a modal instance by its identifier.
*
* @param id The modal identifier used at creation time.
*/
get(id) {
return this.getModal(id);
}
/**
* Open a given modal
*
* @param id The modal identifier used at creation time.
* @param force Tell the modal to open top of all other opened modals
*/
open(id, force = false) {
return this._openModal(this.get(id), force);
}
/**
* Close a given modal
*
* @param id The modal identifier used at creation time.
*/
close(id) {
return this._closeModal(this.get(id));
}
/**
* Close all opened modals
*/
closeAll() {
this.getOpenedModals().forEach((instance) => {
this._closeModal(instance.modal);
});
}
/**
* Toggles a given modal
* If the retrieved modal is opened it closes it, else it opens it.
*
* @param id The modal identifier used at creation time.
* @param force Tell the modal to open top of all other opened modals
*/
toggle(id, force = false) {
return this._toggleModal(this.get(id), force);
}
/**
* Retrieve all the created modals.
*
* @returns an array that contains all modal instances.
*/
getModalStack() {
return this._modalStack.getModalStack();
}
/**
* Retrieve all the opened modals. It looks for all modal instances with their `visible` property set to `true`.
*
* @returns an array that contains all the opened modals.
*/
getOpenedModals() {
return this._modalStack.getOpenedModals();
}
/**
* Retrieve the opened modal with highest z-index.
*
* @returns the opened modal with highest z-index.
*/
getTopOpenedModal() {
return this._modalStack.getTopOpenedModal();
}
/**
* Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and
* calculates a higher value (it takes the highest index value between all the modal instances and adds 1).
* Use it to make a modal appear foreground.
*
* @returns a higher index from all the existing modal instances.
*/
getHigherIndex() {
return this._modalStack.getHigherIndex();
}
/**
* It gives the number of modal instances. It's helpful to know if the modal stack is empty or not.
*
* @returns the number of modal instances.
*/
getModalStackCount() {
return this._modalStack.getModalStackCount();
}
/**
* Remove a modal instance from the modal stack.
*
* @param id The modal identifier.
* @returns the removed modal instance.
*/
removeModal(id) {
this._modalStack.removeModal(id);
}
/**
* Associate data to an identified modal. If the modal isn't already associated to some data, it creates a new
* entry in the `modalData` array with its `id` and the given `data`. If the modal already has data, it rewrites
* them with the new ones. Finally if no modal found it returns an error message in the console and false value
* as method output.
*
* @param data The data you want to associate to the modal.
* @param id The modal identifier.
* @param force If true, overrides the previous stored data if there was.
* @returns true if the given modal exists and the process has been tried, either false.
*/
setModalData(data, id, force) {
let i;
if (i = this.get(id)) {
i.setData(data, force);
return true;
}
else {
return false;
}
}
/**
* Retrieve modal data by its identifier.
*
* @param id The modal identifier used at creation time.
* @returns the associated modal data.
*/
getModalData(id) {
let i;
if (i = this.get(id)) {
return i.getData();
}
return null;
}
/**
* Reset the data attached to a given modal.
*
* @param id The modal identifier used at creation time.
* @returns the removed data or false if modal doesn't exist.
*/
resetModalData(id) {
if (!!this._modalStack.getModalStack().find((o) => o.id === id)) {
const removed = this.getModal(id).getData();
this.getModal(id).removeData();
return removed;
}
else {
return false;
}
}
/**
* Close the latest opened modal if it has been declared as escapable
* Using a debounce system because one or more modals could be listening
* escape key press event.
*/
closeLatestModal() {
this.getTopOpenedModal().close();
}
/**
* Create dynamic NtkSmartModalComponent
* @param id The modal identifier used at creation time.
* @param content The modal content ( string, templateRef or Component )
*/
create(id, content, options = {}) {
try {
return this.getModal(id);
}
catch (e) {
const componentFactory = this._componentFactoryResolver.resolveComponentFactory(NtkSmartModalComponent);
const ngContent = this._resolveNgContent(content);
const componentRef = componentFactory.create(this._injector, ngContent);
if (content instanceof Type) {
componentRef.instance.contentComponent = content;
}
componentRef.instance.identifier = id;
componentRef.instance.createFrom = 'service';
if (typeof options.closable === 'boolean') {
componentRef.instance.closable = options.closable;
}
if (typeof options.escapable === 'boolean') {
componentRef.instance.escapable = options.escapable;
}
if (typeof options.dismissable === 'boolean') {
componentRef.instance.dismissable = options.dismissable;
}
if (typeof options.customClass === 'string') {
componentRef.instance.customClass = options.customClass;
}
if (typeof options.backdrop === 'boolean') {
componentRef.instance.backdrop = options.backdrop;
}
if (typeof options.force === 'boolean') {
componentRef.instance.force = options.force;
}
if (typeof options.hideDelay === 'number') {
componentRef.instance.hideDelay = options.hideDelay;
}
if (typeof options.autostart === 'boolean') {
componentRef.instance.autostart = options.autostart;
}
if (typeof options.target === 'string') {
componentRef.instance.target = options.target;
}
if (typeof options.ariaLabel === 'string') {
componentRef.instance.ariaLabel = options.ariaLabel;
}
if (typeof options.ariaLabelledBy === 'string') {
componentRef.instance.ariaLabelledBy = options.ariaLabelledBy;
}
if (typeof options.ariaDescribedBy === 'string') {
componentRef.instance.ariaDescribedBy = options.ariaDescribedBy;
}
if (typeof options.refocus === 'boolean') {
componentRef.instance.refocus = options.refocus;
}
this._appRef.attachView(componentRef.hostView);
const domElem = componentRef.hostView.rootNodes[0];
this._document.body.appendChild(domElem);
return componentRef.instance;
}
}
_addEvents() {
if (!this.isBrowser) {
return false;
}
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'create', ((e) => {
this._initModal(e.detail.instance);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'delete', ((e) => {
this._deleteModal(e.detail.instance);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'open', ((e) => {
this._openModal(e.detail.instance.modal, e.detail.top);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'toggle', ((e) => {
this._toggleModal(e.detail.instance.modal, e.detail.top);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'close', ((e) => {
this._closeModal(e.detail.instance.modal);
}));
window.addEventListener(NtkSmartModalConfig.prefixEvent + 'dismiss', ((e) => {
this._dismissModal(e.detail.instance.modal);
}));
window.addEventListener('keyup', this._escapeKeyboardEvent);
return true;
}
_initModal(modalInstance) {
modalInstance.modal.layerPosition += this.getModalStackCount();
this.addModal(modalInstance, modalInstance.modal.force);
if (modalInstance.modal.autostart) {
this.open(modalInstance.id);
}
}
_openModal(modal, top) {
if (modal.visible) {
return false;
}
this.lastElementFocused = document.activeElement;
if (modal.escapable) {
window.addEventListener('keyup', this._escapeKeyboardEvent);
}
if (modal.backdrop) {
window.addEventListener('keydown', this._trapFocusModal);
}
if (top) {
modal.layerPosition = this.getHigherIndex();
}
modal.addBodyClass();
modal.overlayVisible = true;
modal.visible = true;
modal.onOpen.emit(modal);
modal.markForCheck();
setTimeout(() => {
modal.openedClass = true;
if (modal.target) {
modal.targetPlacement();
}
modal.nsmDialog.first.nativeElement.setAttribute('role', 'dialog');
modal.nsmDialog.first.nativeElement.setAttribute('tabIndex', '-1');
modal.nsmDialog.first.nativeElement.setAttribute('aria-modal', 'true');
modal.nsmDialog.first.nativeElement.focus();
modal.markForCheck();
modal.onOpenFinished.emit(modal);
});
return true;
}
_toggleModal(modal, top) {
if (modal.visible) {
return this._closeModal(modal);
}
else {
return this._openModal(modal, top);
}
}
_closeModal(modal) {
if (!modal.openedClass) {
return false;
}
modal.openedClass = false;
modal.onClose.emit(modal);
modal.onAnyCloseEvent.emit(modal);
if (this.getOpenedModals().length < 2) {
modal.removeBodyClass();
window.removeEventListener('keyup', this._escapeKeyboardEvent);
window.removeEventListener('keydown', this._trapFocusModal);
}
setTimeout(() => {
modal.visibleChange.emit(modal.visible);
modal.visible = false;
modal.overlayVisible = false;
modal.nsmDialog.first.nativeElement.removeAttribute('tabIndex');
modal.markForCheck();
modal.onCloseFinished.emit(modal);
modal.onAnyCloseEventFinished.emit(modal);
if (modal.refocus) {
this.lastElementFocused.focus();
}
}, modal.hideDelay);
return true;
}
_dismissModal(modal) {
if (!modal.openedClass) {
return false;
}
modal.openedClass = false;
modal.onDismiss.emit(modal);
modal.onAnyCloseEvent.emit(modal);
if (this.getOpenedModals().length < 2) {
modal.removeBodyClass();
}
setTimeout(() => {
modal.visible = false;
modal.visibleChange.emit(modal.visible);
modal.overlayVisible = false;
modal.markForCheck();
modal.onDismissFinished.emit(modal);
modal.onAnyCloseEventFinished.emit(modal);
}, modal.hideDelay);
return true;
}
_deleteModal(modalInstance) {
this.removeModal(modalInstance.id);
if (!this.getModalStack().length) {
modalInstance.modal.removeBodyClass();
}
}
/**
* Resolve content according to the types
* @param content The modal content ( string, templateRef or Component )
*/
_resolveNgContent(content) {
if (typeof content === 'string') {
const element = this._document.createTextNode(content);
return [[element]];
}
if (content instanceof TemplateRef) {
const viewRef = content.createEmbeddedView(null);
this.applicationRef.attachView(viewRef);
return [viewRef.rootNodes];
}
return [];
}
/**
* Is current platform browser
*/
get isBrowser() {
return isPlatformBrowser(this._platformId);
}
}
NtkSmartModalService.decorators = [
{ type: Injectable }
];
NtkSmartModalService.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef },
{ type: Injector },
{ type: NtkSmartModalStackService },
{ type: ApplicationRef },
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
];
class NtkSmartModalModule {

@@ -515,3 +926,6 @@ /**

ngModule: NtkSmartModalModule,
providers: [NtkSmartModalService],
providers: [
NtkSmartModalService,
NtkSmartModalStackService
],
};

@@ -525,3 +939,6 @@ }

ngModule: NtkSmartModalModule,
providers: [NtkSmartModalService],
providers: [
NtkSmartModalService,
NtkSmartModalStackService
],
};

@@ -757,4 +1174,7 @@ }

}
NtkSmartLoaderService.ɵprov = ɵɵdefineInjectable({ factory: function NtkSmartLoaderService_Factory() { return new NtkSmartLoaderService(); }, token: NtkSmartLoaderService, providedIn: "root" });
NtkSmartLoaderService.decorators = [
{ type: Injectable }
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];

@@ -934,3 +1354,3 @@

export { NtkSmartLoaderComponent, NtkSmartLoaderModule, NtkSmartLoaderService, NtkSmartModalComponent, NtkSmartModalModule, NtkSmartModalService };
export { NtkSmartLoaderComponent, NtkSmartLoaderModule, NtkSmartLoaderService, NtkSmartModalComponent, NtkSmartModalModule, NtkSmartModalService, NtkSmartModalStackService as ɵa };
//# sourceMappingURL=ngx-ntk-smart-module.js.map

@@ -1,7 +0,8 @@

import { OnInit, OnDestroy, Renderer2, EventEmitter, ChangeDetectorRef } from '@angular/core';
import { NtkSmartModalService } from './ntk-smart-modal.service';
export declare class NtkSmartModalComponent implements OnInit, OnDestroy {
private privateRenderer;
private privateChangeDetectorRef;
private privateNtkSmartModalService;
import { AfterViewInit, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, OnDestroy, OnInit, QueryList, Renderer2, Type, ViewContainerRef } from '@angular/core';
export declare class NtkSmartModalComponent implements OnInit, OnDestroy, AfterViewInit {
private _renderer;
private _changeDetectorRef;
private componentFactoryResolver;
private _document;
private _platformId;
closable: boolean;

@@ -17,3 +18,7 @@ escapable: boolean;

autostart: boolean;
target: any;
target: string;
ariaLabel: string | null;
ariaLabelledBy: string | null;
ariaDescribedBy: string | null;
refocus: boolean;
visibleChange: EventEmitter<boolean>;

@@ -27,28 +32,113 @@ onClose: EventEmitter<any>;

onOpen: EventEmitter<any>;
onOpenFinished: EventEmitter<any>;
onEscape: EventEmitter<any>;
onDataAdded: EventEmitter<any>;
onDataRemoved: EventEmitter<any>;
contentComponent: Type<Component>;
layerPosition: number;
overlayVisible: boolean;
openedClass: boolean;
private privateData;
createFrom: string;
private _data;
private nsmContent;
private nsmDialog;
nsmDialog: QueryList<ElementRef>;
private nsmOverlay;
constructor(privateRenderer: Renderer2, privateChangeDetectorRef: ChangeDetectorRef, privateNtkSmartModalService: NtkSmartModalService);
dynamicContentContainer: QueryList<ViewContainerRef>;
constructor(_renderer: Renderer2, _changeDetectorRef: ChangeDetectorRef, componentFactoryResolver: ComponentFactoryResolver, _document: any, _platformId: any);
ngOnInit(): void;
ngAfterViewInit(): void;
ngOnDestroy(): void;
open(top?: boolean): void;
close(): void;
dismiss(e: any): void;
toggle(top?: boolean): void;
addCustomClass(className: string): void;
removeCustomClass(className?: string): void;
/**
* Open the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
open(top?: boolean): NtkSmartModalComponent;
/**
* Close the modal instance
*
* @returns the modal component
*/
close(): NtkSmartModalComponent;
/**
* Dismiss the modal instance
*
* @param e the event sent by the browser
* @returns the modal component
*/
dismiss(e: any): NtkSmartModalComponent;
/**
* Toggle visibility of the modal instance
*
* @param top open the modal top of all other
* @returns the modal component
*/
toggle(top?: boolean): NtkSmartModalComponent;
/**
* Add a custom class to the modal instance
*
* @param className the class to add
* @returns the modal component
*/
addCustomClass(className: string): NtkSmartModalComponent;
/**
* Remove a custom class to the modal instance
*
* @param className the class to remove
* @returns the modal component
*/
removeCustomClass(className?: string): NtkSmartModalComponent;
/**
* Returns the visibility state of the modal instance
*/
isVisible(): boolean;
/**
* Checks if data is attached to the modal instance
*/
hasData(): boolean;
setData(data: any, force?: boolean): any;
/**
* Attach data to the modal instance
*
* @param data the data to attach
* @param force override potentially attached data
* @returns the modal component
*/
setData(data: any, force?: boolean): NtkSmartModalComponent;
/**
* Retrieve the data attached to the modal instance
*/
getData(): any;
removeData(): void;
escapeKeyboardEvent: (event: KeyboardEvent) => void;
targetPlacement(): void;
/**
* Remove the data attached to the modal instance
*
* @returns the modal component
*/
removeData(): NtkSmartModalComponent;
/**
* Add body class modal opened
*
* @returns the modal component
*/
addBodyClass(): NtkSmartModalComponent;
/**
* Add body class modal opened
*
* @returns the modal component
*/
removeBodyClass(): NtkSmartModalComponent;
markForCheck(): void;
/**
* Listens for window resize event and recalculates modal instance position if it is element-relative
*/
targetPlacement(): boolean | void;
private _sendEvent;
/**
* Is current platform browser
*/
private get isBrowser();
/**
* Creates content inside provided ViewContainerRef
*/
private createDynamicContent;
}

@@ -0,6 +1,17 @@

import { ComponentFactoryResolver, ApplicationRef, Injector, TemplateRef, Type } from '@angular/core';
import { ModalInstance } from './modal-instance';
import { NtkSmartModalStackService } from './ntk-smart-modal-stack.service';
import { NtkSmartModalComponent } from './ntk-smart-modal.component';
import { ModalInstance } from './modal-instance';
import { INtkSmartModalOptions } from './ntk-smart-modal.config';
export declare type Content<T> = string | TemplateRef<T> | Type<T>;
export declare class NtkSmartModalService {
modalStack: ModalInstance[];
private debouncer;
private _componentFactoryResolver;
private _appRef;
private _injector;
private _modalStack;
private applicationRef;
private _document;
private _platformId;
private lastElementFocused;
constructor(_componentFactoryResolver: ComponentFactoryResolver, _appRef: ApplicationRef, _injector: Injector, _modalStack: NtkSmartModalStackService, applicationRef: ApplicationRef, _document: any, _platformId: any);
/**

@@ -20,3 +31,3 @@ * Add a new modal instance. This step is essential and allows to retrieve any modal at any time.

*/
getModal(id: string): NtkSmartModalComponent | null;
getModal(id: string): NtkSmartModalComponent;
/**

@@ -34,3 +45,3 @@ * Alias of `getModal` to retrieve a modal instance by its identifier.

*/
open(id: string, force?: boolean): void;
open(id: string, force?: boolean): boolean;
/**

@@ -41,4 +52,8 @@ * Close a given modal

*/
close(id: string): void;
close(id: string): boolean;
/**
* Close all opened modals
*/
closeAll(): void;
/**
* Toggles a given modal

@@ -50,3 +65,3 @@ * If the retrieved modal is opened it closes it, else it opens it.

*/
toggle(id: string, force?: boolean): any;
toggle(id: string, force?: boolean): boolean;
/**

@@ -65,2 +80,8 @@ * Retrieve all the created modals.

/**
* Retrieve the opened modal with highest z-index.
*
* @returns the opened modal with highest z-index.
*/
getTopOpenedModal(): NtkSmartModalComponent;
/**
* Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and

@@ -118,2 +139,34 @@ * calculates a higher value (it takes the highest index value between all the modal instances and adds 1).

closeLatestModal(): void;
/**
* Create dynamic NtkSmartModalComponent
* @param id The modal identifier used at creation time.
* @param content The modal content ( string, templateRef or Component )
*/
create<T>(id: string, content: Content<T>, options?: INtkSmartModalOptions): NtkSmartModalComponent;
private _addEvents;
private _initModal;
private _openModal;
private _toggleModal;
private _closeModal;
private _dismissModal;
private _deleteModal;
/**
* Resolve content according to the types
* @param content The modal content ( string, templateRef or Component )
*/
private _resolveNgContent;
/**
* Close the latest opened modal if escape key event is emitted
* @param event The Keyboard Event
*/
private _escapeKeyboardEvent;
/**
* Is current platform browser
*/
private get isBrowser();
/**
* While modal is open, the focus stay on it
* @param event The Keyboar dEvent
*/
private _trapFocusModal;
}

@@ -5,1 +5,2 @@ /**

export * from './public-api';
export { NtkSmartModalStackService as ɵa } from './lib/modal/ntk-smart-modal-stack.service';

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"NtkSmartModalService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1}}],"members":{"addModal":[{"__symbolic":"method"}],"getModal":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"getModalStack":[{"__symbolic":"method"}],"getOpenedModals":[{"__symbolic":"method"}],"getHigherIndex":[{"__symbolic":"method"}],"getModalStackCount":[{"__symbolic":"method"}],"removeModal":[{"__symbolic":"method"}],"setModalData":[{"__symbolic":"method"}],"getModalData":[{"__symbolic":"method"}],"resetModalData":[{"__symbolic":"method"}],"closeLatestModal":[{"__symbolic":"method"}]}},"NtkSmartModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"ntk-smart-modal","template":"\n <div\n *ngIf=\"overlayVisible\"\n [style.z-index]=\"visible ? layerPosition - 1 : -1\"\n [ngClass]=\"{ transparent: !backdrop, overlay: true, 'nsm-overlay-open': openedClass }\"\n (click)=\"dismiss($event)\"\n #nsmOverlay\n >\n <div\n [style.z-index]=\"visible ? layerPosition : -1\"\n [ngClass]=\"['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open' : 'nsm-dialog-close']\"\n #nsmDialog\n >\n <div class=\"nsm-content\" #nsmContent>\n <div class=\"nsm-body\">\n <ng-content></ng-content>\n </div>\n <button type=\"button\" *ngIf=\"closable\" (click)=\"close()\" aria-label=\"Close\" class=\"nsm-dialog-btn-close\">\n <img\n src=\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDMsNi4wNThjLTguMDc3LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDksMEw2LjA1OCw0NzYuNjkzYy04LjA3Nyw4LjA3Ny04LjA3NywyMS4xNzIsMCwyOS4yNDkgICAgQzEwLjA5Niw1MDkuOTgyLDE1LjM5LDUxMiwyMC42ODMsNTEyYzUuMjkzLDAsMTAuNTg2LTIuMDE5LDE0LjYyNS02LjA1OUw1MDUuOTQzLDM1LjMwNiAgICBDNTE0LjAxOSwyNy4yMyw1MTQuMDE5LDE0LjEzNSw1MDUuOTQzLDYuMDU4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTUwNS45NDIsNDc2LjY5NEwzNS4zMDYsNi4wNTljLTguMDc2LTguMDc3LTIxLjE3Mi04LjA3Ny0yOS4yNDgsMGMtOC4wNzcsOC4wNzYtOC4wNzcsMjEuMTcxLDAsMjkuMjQ4bDQ3MC42MzYsNDcwLjYzNiAgICBjNC4wMzgsNC4wMzksOS4zMzIsNi4wNTgsMTQuNjI1LDYuMDU4YzUuMjkzLDAsMTAuNTg3LTIuMDE5LDE0LjYyNC02LjA1N0M1MTQuMDE4LDQ5Ny44NjYsNTE0LjAxOCw0ODQuNzcxLDUwNS45NDIsNDc2LjY5NHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\"\n />\n </button>\n </div>\n </div>\n </div>\n "}]}],"members":{"closable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"escapable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"dismissable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":48,"character":3}}]}],"identifier":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"customClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"visible":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"backdrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"force":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"hideDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"autostart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"target":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"visibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":58,"character":3}}]}],"onClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":59,"character":3}}]}],"onCloseFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":60,"character":3}}]}],"onDismiss":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":61,"character":3}}]}],"onDismissFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":62,"character":3}}]}],"onAnyCloseEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":63,"character":3}}]}],"onAnyCloseEventFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":64,"character":3}}]}],"onOpen":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":65,"character":3}}]}],"onEscape":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":66,"character":3}}]}],"onDataAdded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":67,"character":3}}]}],"onDataRemoved":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":68,"character":3}}]}],"nsmContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":76,"character":3},"arguments":["nsmContent"]}]}],"nsmDialog":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":77,"character":3},"arguments":["nsmDialog"]}]}],"nsmOverlay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":78,"character":3},"arguments":["nsmOverlay"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":81,"character":29},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":82,"character":38},{"__symbolic":"reference","name":"NtkSmartModalService"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"addCustomClass":[{"__symbolic":"method"}],"removeCustomClass":[{"__symbolic":"method"}],"isVisible":[{"__symbolic":"method"}],"hasData":[{"__symbolic":"method"}],"setData":[{"__symbolic":"method"}],"getData":[{"__symbolic":"method"}],"removeData":[{"__symbolic":"method"}],"targetPlacement":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":242,"character":3},"arguments":["window:resize"]}]}]}},"NtkSmartModalModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NtkSmartModalComponent"}],"exports":[{"__symbolic":"reference","name":"NtkSmartModalComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":12}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartModalModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartModalService"}]}},"forChild":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartModalModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartModalService"}]}}}},"NtkSmartLoaderService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1}}],"members":{"addLoader":[{"__symbolic":"method"}],"removeLoader":[{"__symbolic":"method"}],"getLoaderStack":[{"__symbolic":"method"}],"getLoaderStackCount":[{"__symbolic":"method"}],"getOpenedLoaders":[{"__symbolic":"method"}],"getActiveLoaders":[{"__symbolic":"method"}],"getHigherIndex":[{"__symbolic":"method"}],"start":[{"__symbolic":"method"}],"startAll":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}],"stopAll":[{"__symbolic":"method"}],"isLoading":[{"__symbolic":"method"}],"executeAction":[{"__symbolic":"method"}],"_getLoader":[{"__symbolic":"method"}],"_addAction":[{"__symbolic":"method"}],"_removeAction":[{"__symbolic":"method"}]}},"NtkSmartLoaderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"ntk-smart-loader","template":"\n <div class=\"loader-container {{customClass}}\" [ngClass]=\"{'active': loading}\"\n [style.z-index]=\"layerPosition - 1\" *ngIf=\"visible\">\n <ng-content></ng-content>\n </div>\n "}]}],"members":{"identifier":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"customClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"force":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"delayIn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"delayOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":3}}]}],"autostart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"onStart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":30,"character":3}}]}],"onStop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":3}}]}],"onVisibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NtkSmartLoaderService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":45,"character":94}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"start":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}],"addCustomClass":[{"__symbolic":"method"}],"removeCustomClass":[{"__symbolic":"method"}]}},"NtkSmartLoaderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NtkSmartLoaderComponent"}],"exports":[{"__symbolic":"reference","name":"NtkSmartLoaderComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":9,"character":12}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartLoaderModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartLoaderService"}]}},"forChild":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartLoaderModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartLoaderService"}]}}}}},"origins":{"NtkSmartModalService":"./lib/modal/ntk-smart-modal.service","NtkSmartModalComponent":"./lib/modal/ntk-smart-modal.component","NtkSmartModalModule":"./lib/modal/ntk-smart-modal.module","NtkSmartLoaderService":"./lib/loader/ntk-smart-loader.service","NtkSmartLoaderComponent":"./lib/loader/ntk-smart-loader.component","NtkSmartLoaderModule":"./lib/loader/ntk-smart-loader.module"},"importAs":"ngx-ntk-smart-module"}
{"__symbolic":"module","version":4,"metadata":{"NtkSmartModalService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":21,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":31,"character":12}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":32,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":32,"character":12}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":26,"character":39},{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":27,"character":21},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":28,"character":23},{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@angular/core","name":"ApplicationRef","line":27,"character":21},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}],"addModal":[{"__symbolic":"method"}],"getModal":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"closeAll":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"getModalStack":[{"__symbolic":"method"}],"getOpenedModals":[{"__symbolic":"method"}],"getTopOpenedModal":[{"__symbolic":"method"}],"getHigherIndex":[{"__symbolic":"method"}],"getModalStackCount":[{"__symbolic":"method"}],"removeModal":[{"__symbolic":"method"}],"setModalData":[{"__symbolic":"method"}],"getModalData":[{"__symbolic":"method"}],"resetModalData":[{"__symbolic":"method"}],"closeLatestModal":[{"__symbolic":"method"}],"create":[{"__symbolic":"method"}],"_addEvents":[{"__symbolic":"method"}],"_initModal":[{"__symbolic":"method"}],"_openModal":[{"__symbolic":"method"}],"_toggleModal":[{"__symbolic":"method"}],"_closeModal":[{"__symbolic":"method"}],"_dismissModal":[{"__symbolic":"method"}],"_deleteModal":[{"__symbolic":"method"}],"_resolveNgContent":[{"__symbolic":"method"}]}},"NtkSmartModalComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":25,"character":1},"arguments":[{"selector":"ntk-smart-modal","template":"\n <div *ngIf=\"overlayVisible\"\n [style.z-index]=\"visible ? layerPosition-1 : -1\"\n [ngClass]=\"{'transparent':!backdrop, 'overlay':true, 'nsm-overlay-open':openedClass}\"\n (click)=\"dismiss($event)\" #nsmOverlay>\n <div [style.z-index]=\"visible ? layerPosition : -1\"\n [ngClass]=\"['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open': 'nsm-dialog-close']\" #nsmDialog\n [attr.aria-hidden]=\"openedClass ? false : true\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"ariaDescribedBy\">\n <div class=\"nsm-content\" #nsmContent>\n <div class=\"nsm-body\">\n <ng-template #dynamicContent></ng-template>\n <ng-content></ng-content>\n\n </div>\n <button type=\"button\" *ngIf=\"closable\" (click)=\"close()\" aria-label=\"Close\" class=\"nsm-dialog-btn-close\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\"\n xml:space=\"preserve\" width=\"16px\" height=\"16px\" role=\"img\" aria-labelledby=\"closeIconTitle closeIconDesc\">\n <title id=\"closeIconTitle\">Close Icon</title>\n <desc id=\"closeIconDesc\">A light-gray close icon used to close the modal</desc>\n <g>\n <path d=\"M505.943,6.058c-8.077-8.077-21.172-8.077-29.249,0L6.058,476.693c-8.077,8.077-8.077,21.172,0,29.249 C10.096,509.982,15.39,512,20.683,512c5.293,0,10.586-2.019,14.625-6.059L505.943,35.306 C514.019,27.23,514.019,14.135,505.943,6.058z\"\n fill=\"currentColor\"/>\n </g>\n <g>\n <path d=\"M505.942,476.694L35.306,6.059c-8.076-8.077-21.172-8.077-29.248,0c-8.077,8.076-8.077,21.171,0,29.248l470.636,470.636 c4.038,4.039,9.332,6.058,14.625,6.058c5.293,0,10.587-2.019,14.624-6.057C514.018,497.866,514.018,484.771,505.942,476.694z\"\n fill=\"currentColor\"/>\n </g>\n </svg>\n </button>\n </div>\n </div>\n </div>\n "}]}],"members":{"closable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":65,"character":3}}]}],"escapable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3}}]}],"dismissable":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":67,"character":3}}]}],"identifier":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3}}]}],"customClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":69,"character":3}}]}],"visible":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"backdrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":71,"character":3}}]}],"force":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":72,"character":3}}]}],"hideDelay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"autostart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":74,"character":3}}]}],"target":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"ariaLabel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"ariaLabelledBy":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"ariaDescribedBy":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}}]}],"refocus":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"visibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":81,"character":3}}]}],"onClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":82,"character":3}}]}],"onCloseFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":83,"character":3}}]}],"onDismiss":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":84,"character":3}}]}],"onDismissFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":3}}]}],"onAnyCloseEvent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":86,"character":3}}]}],"onAnyCloseEventFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":3}}]}],"onOpen":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":88,"character":3}}]}],"onOpenFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":89,"character":3}}]}],"onEscape":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":90,"character":3}}]}],"onDataAdded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":91,"character":3}}]}],"onDataRemoved":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":92,"character":3}}]}],"nsmContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":103,"character":3},"arguments":["nsmContent"]}]}],"nsmDialog":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":104,"character":3},"arguments":["nsmDialog"]}]}],"nsmOverlay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":105,"character":3},"arguments":["nsmOverlay"]}]}],"dynamicContentContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChildren","line":106,"character":3},"arguments":["dynamicContent",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":106,"character":42}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":112,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":112,"character":12}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":113,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":113,"character":12}]}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":109,"character":23},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":110,"character":32},{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":111,"character":38},{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"dismiss":[{"__symbolic":"method"}],"toggle":[{"__symbolic":"method"}],"addCustomClass":[{"__symbolic":"method"}],"removeCustomClass":[{"__symbolic":"method"}],"isVisible":[{"__symbolic":"method"}],"hasData":[{"__symbolic":"method"}],"setData":[{"__symbolic":"method"}],"getData":[{"__symbolic":"method"}],"removeData":[{"__symbolic":"method"}],"addBodyClass":[{"__symbolic":"method"}],"removeBodyClass":[{"__symbolic":"method"}],"markForCheck":[{"__symbolic":"method"}],"targetPlacement":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":306,"character":3},"arguments":["window:resize"]}]}],"_sendEvent":[{"__symbolic":"method"}],"createDynamicContent":[{"__symbolic":"method"}]}},"NtkSmartModalModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NtkSmartModalComponent"}],"exports":[{"__symbolic":"reference","name":"NtkSmartModalComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":9,"character":12}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartModalModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartModalService"},{"__symbolic":"reference","name":"ɵa"}]}},"forChild":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartModalModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartModalService"},{"__symbolic":"reference","name":"ɵa"}]}}}},"NtkSmartLoaderService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"addLoader":[{"__symbolic":"method"}],"removeLoader":[{"__symbolic":"method"}],"getLoaderStack":[{"__symbolic":"method"}],"getLoaderStackCount":[{"__symbolic":"method"}],"getOpenedLoaders":[{"__symbolic":"method"}],"getActiveLoaders":[{"__symbolic":"method"}],"getHigherIndex":[{"__symbolic":"method"}],"start":[{"__symbolic":"method"}],"startAll":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}],"stopAll":[{"__symbolic":"method"}],"isLoading":[{"__symbolic":"method"}],"executeAction":[{"__symbolic":"method"}],"_getLoader":[{"__symbolic":"method"}],"_addAction":[{"__symbolic":"method"}],"_removeAction":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"NtkSmartLoaderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"ntk-smart-loader","template":"\n <div class=\"loader-container {{customClass}}\" [ngClass]=\"{'active': loading}\"\n [style.z-index]=\"layerPosition - 1\" *ngIf=\"visible\">\n <ng-content></ng-content>\n </div>\n "}]}],"members":{"identifier":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"customClass":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"force":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"delayIn":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"delayOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":3}}]}],"autostart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"onStart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":30,"character":3}}]}],"onStop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":3}}]}],"onVisibleChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"NtkSmartLoaderService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":45,"character":94}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"start":[{"__symbolic":"method"}],"stop":[{"__symbolic":"method"}],"addCustomClass":[{"__symbolic":"method"}],"removeCustomClass":[{"__symbolic":"method"}]}},"NtkSmartLoaderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":6,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"NtkSmartLoaderComponent"}],"exports":[{"__symbolic":"reference","name":"NtkSmartLoaderComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":9,"character":12}]}]}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartLoaderModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartLoaderService"}]}},"forChild":{"__symbolic":"function","parameters":[],"value":{"ngModule":{"__symbolic":"reference","name":"NtkSmartLoaderModule"},"providers":[{"__symbolic":"reference","name":"NtkSmartLoaderService"}]}}}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"addModal":[{"__symbolic":"method"}],"getModal":[{"__symbolic":"method"}],"getModalStack":[{"__symbolic":"method"}],"getOpenedModals":[{"__symbolic":"method"}],"getTopOpenedModal":[{"__symbolic":"method"}],"getHigherIndex":[{"__symbolic":"method"}],"getModalStackCount":[{"__symbolic":"method"}],"removeModal":[{"__symbolic":"method"}]}}},"origins":{"NtkSmartModalService":"./lib/modal/ntk-smart-modal.service","NtkSmartModalComponent":"./lib/modal/ntk-smart-modal.component","NtkSmartModalModule":"./lib/modal/ntk-smart-modal.module","NtkSmartLoaderService":"./lib/loader/ntk-smart-loader.service","NtkSmartLoaderComponent":"./lib/loader/ntk-smart-loader.component","NtkSmartLoaderModule":"./lib/loader/ntk-smart-loader.module","ɵa":"./lib/modal/ntk-smart-modal-stack.service"},"importAs":"ngx-ntk-smart-module"}
{
"name": "ngx-ntk-smart-module",
"version": "1.0.3",
"version": "1.1.2",
"description": "Ntk Cms Modal ",

@@ -5,0 +5,0 @@ "author": "Alireza-Karavi",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc