ngx-ntk-smart-module
Version:
Ntk Cms Modal
1 lines • 86 kB
Source Map (JSON)
{"version":3,"file":"ngx-ntk-smart-module.mjs","sources":["../../../projects/ngx-ntk-smart-module/src/lib/modal/ntk-smart-modal.config.ts","../../../projects/ngx-ntk-smart-module/src/lib/modal/ntk-smart-modal.component.ts","../../../projects/ngx-ntk-smart-module/src/lib/modal/ntk-smart-modal-stack.service.ts","../../../projects/ngx-ntk-smart-module/src/lib/modal/ntk-smart-modal.service.ts","../../../projects/ngx-ntk-smart-module/src/lib/modal/ntk-smart-modal.module.ts","../../../projects/ngx-ntk-smart-module/src/lib/loader/ntk-smart-loader.service.ts","../../../projects/ngx-ntk-smart-module/src/lib/loader/loader-instance.ts","../../../projects/ngx-ntk-smart-module/src/lib/loader/ntk-smart-loader.component.ts","../../../projects/ngx-ntk-smart-module/src/lib/loader/ntk-smart-loader.module.ts","../../../projects/ngx-ntk-smart-module/src/public-api.ts","../../../projects/ngx-ntk-smart-module/src/ngx-ntk-smart-module.ts"],"sourcesContent":["export const NtkSmartModalConfig = {\r\n bodyClassOpen: 'dialog-open',\r\n prefixEvent: 'ntk-smart-modal.'\r\n};\r\n\r\nexport interface INtkSmartModalOptions {\r\n closable?: boolean;\r\n escapable?: boolean;\r\n dismissable?: boolean;\r\n customClass?: string;\r\n backdrop?: boolean;\r\n force?: boolean;\r\n hideDelay?: number;\r\n autostart?: boolean;\r\n target?: string;\r\n ariaLabel?: string;\r\n ariaLabelledBy?: string;\r\n ariaDescribedBy?: string;\r\n refocus?: boolean;\r\n}\r\n","import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactory,\r\n ComponentFactoryResolver,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n PLATFORM_ID,\r\n QueryList,\r\n Renderer2,\r\n Type,\r\n ViewChildren,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { NtkSmartModalConfig } from './ntk-smart-modal.config';\r\n\r\n\r\n@Component({\r\n selector: 'ntk-smart-modal',\r\n standalone:false,\r\n template: `\r\n <div *ngIf=\"overlayVisible\"\r\n [style.z-index]=\"visible ? layerPosition-1 : -1\"\r\n [ngClass]=\"{'transparent':!backdrop, 'overlay':true, 'nsm-overlay-open':openedClass}\"\r\n (click)=\"dismiss($event)\" #nsmOverlay>\r\n <div [style.z-index]=\"visible ? layerPosition : -1\"\r\n [ngClass]=\"['nsm-dialog', customClass, openedClass ? 'nsm-dialog-open': 'nsm-dialog-close']\" #nsmDialog\r\n [attr.aria-hidden]=\"openedClass ? false : true\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\">\r\n <div class=\"nsm-content\" #nsmContent>\r\n <div class=\"nsm-body\">\r\n <ng-template #dynamicContent></ng-template>\r\n <ng-content></ng-content>\r\n\r\n </div>\r\n <button type=\"button\" *ngIf=\"closable\" (click)=\"close()\" aria-label=\"Close\" class=\"nsm-dialog-btn-close\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" id=\"Layer_1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 512 512\"\r\n xml:space=\"preserve\" width=\"16px\" height=\"16px\" role=\"img\" aria-labelledby=\"closeIconTitle closeIconDesc\">\r\n <title id=\"closeIconTitle\">Close Icon</title>\r\n <desc id=\"closeIconDesc\">A light-gray close icon used to close the modal</desc>\r\n <g>\r\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\"\r\n fill=\"currentColor\"/>\r\n </g>\r\n <g>\r\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\"\r\n fill=\"currentColor\"/>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n})\r\nexport class NtkSmartModalComponent implements OnInit, OnDestroy, AfterViewInit {\r\n @Input() public closable: boolean = true;\r\n @Input() public escapable: boolean = true;\r\n @Input() public dismissable: boolean = true;\r\n @Input() public identifier: string = '';\r\n @Input() public customClass: string = 'nsm-dialog-animation-fade';\r\n @Input() public visible: boolean = false;\r\n @Input() public backdrop: boolean = true;\r\n @Input() public force: boolean = true;\r\n @Input() public hideDelay: number = 500;\r\n @Input() public autostart: boolean = false;\r\n @Input() public target: string = '';\r\n @Input() public ariaLabel: string | null = null;\r\n @Input() public ariaLabelledBy: string | null = null;\r\n @Input() public ariaDescribedBy: string | null = null;\r\n @Input() public refocus: boolean = true;\r\n\r\n @Output() public visibleChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n @Output() public onClose: EventEmitter<any> = new EventEmitter();\r\n @Output() public onCloseFinished: EventEmitter<any> = new EventEmitter();\r\n @Output() public onDismiss: EventEmitter<any> = new EventEmitter();\r\n @Output() public onDismissFinished: EventEmitter<any> = new EventEmitter();\r\n @Output() public onAnyCloseEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() public onAnyCloseEventFinished: EventEmitter<any> = new EventEmitter();\r\n @Output() public onOpen: EventEmitter<any> = new EventEmitter();\r\n @Output() public onOpenFinished: EventEmitter<any> = new EventEmitter();\r\n @Output() public onEscape: EventEmitter<any> = new EventEmitter();\r\n @Output() public onDataAdded: EventEmitter<any> = new EventEmitter();\r\n @Output() public onDataRemoved: EventEmitter<any> = new EventEmitter();\r\n\r\n public contentComponent: Type<Component>;\r\n public layerPosition: number = 1041;\r\n public overlayVisible: boolean = false;\r\n public openedClass: boolean = false;\r\n\r\n public createFrom = 'html';\r\n\r\n private _data: any;\r\n\r\n @ViewChildren('nsmContent') private nsmContent: QueryList<ElementRef>;\r\n @ViewChildren('nsmDialog') public nsmDialog: QueryList<ElementRef>;\r\n @ViewChildren('nsmOverlay') private nsmOverlay: QueryList<ElementRef>;\r\n @ViewChildren('dynamicContent', { read: ViewContainerRef }) dynamicContentContainer: QueryList<ViewContainerRef>;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _changeDetectorRef: ChangeDetectorRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n @Inject(DOCUMENT) private _document: any,\r\n @Inject(PLATFORM_ID) private _platformId: any,\r\n ) { }\r\n\r\n public ngOnInit(): void {\r\n if (!this.identifier || !this.identifier.length) {\r\n throw new Error('identifier field isn’t set. Please set one before calling <ngx-smart-modal> in a template.');\r\n }\r\n\r\n this._sendEvent('create');\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n if (this.contentComponent) {\r\n const factory = this.componentFactoryResolver.resolveComponentFactory(this.contentComponent);\r\n this.createDynamicContent(this.dynamicContentContainer, factory);\r\n this.dynamicContentContainer.changes.subscribe((contentViewContainers: QueryList<ViewContainerRef>) => {\r\n this.createDynamicContent(contentViewContainers, factory);\r\n });\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._sendEvent('delete');\r\n }\r\n\r\n /**\r\n * Open the modal instance\r\n *\r\n * @param top open the modal top of all other\r\n * @returns the modal component\r\n */\r\n public open(top?: boolean): NtkSmartModalComponent {\r\n this._sendEvent('open', { top: top });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Close the modal instance\r\n *\r\n * @returns the modal component\r\n */\r\n public close(): NtkSmartModalComponent {\r\n this._sendEvent('close');\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Dismiss the modal instance\r\n *\r\n * @param e the event sent by the browser\r\n * @returns the modal component\r\n */\r\n public dismiss(e: any): NtkSmartModalComponent {\r\n if (!this.dismissable || !e.target.classList.contains('overlay')) {\r\n return this;\r\n }\r\n\r\n this._sendEvent('dismiss');\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Toggle visibility of the modal instance\r\n *\r\n * @param top open the modal top of all other\r\n * @returns the modal component\r\n */\r\n public toggle(top?: boolean): NtkSmartModalComponent {\r\n this._sendEvent('toggle', { top: top });\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a custom class to the modal instance\r\n *\r\n * @param className the class to add\r\n * @returns the modal component\r\n */\r\n public addCustomClass(className: string): NtkSmartModalComponent {\r\n if (!this.customClass.length) {\r\n this.customClass = className;\r\n } else {\r\n this.customClass += ' ' + className;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Remove a custom class to the modal instance\r\n *\r\n * @param className the class to remove\r\n * @returns the modal component\r\n */\r\n public removeCustomClass(className?: string): NtkSmartModalComponent {\r\n if (className) {\r\n this.customClass = this.customClass.replace(className, '').trim();\r\n } else {\r\n this.customClass = '';\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns the visibility state of the modal instance\r\n */\r\n public isVisible(): boolean {\r\n return this.visible;\r\n }\r\n\r\n /**\r\n * Checks if data is attached to the modal instance\r\n */\r\n public hasData(): boolean {\r\n return this._data !== undefined;\r\n }\r\n\r\n /**\r\n * Attach data to the modal instance\r\n *\r\n * @param data the data to attach\r\n * @param force override potentially attached data\r\n * @returns the modal component\r\n */\r\n public setData(data: any, force?: boolean): NtkSmartModalComponent {\r\n if (!this.hasData() || (this.hasData() && force)) {\r\n this._data = data;\r\n this.onDataAdded.emit(this._data);\r\n this.markForCheck();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Retrieve the data attached to the modal instance\r\n */\r\n public getData(): any {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Remove the data attached to the modal instance\r\n *\r\n * @returns the modal component\r\n */\r\n public removeData(): NtkSmartModalComponent {\r\n this._data = undefined;\r\n this.onDataRemoved.emit(true);\r\n this.markForCheck();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add body class modal opened\r\n *\r\n * @returns the modal component\r\n */\r\n public addBodyClass(): NtkSmartModalComponent {\r\n this._renderer.addClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Add body class modal opened\r\n *\r\n * @returns the modal component\r\n */\r\n public removeBodyClass(): NtkSmartModalComponent {\r\n this._renderer.removeClass(this._document.body, NtkSmartModalConfig.bodyClassOpen);\r\n\r\n return this;\r\n }\r\n\r\n public markForCheck() {\r\n try {\r\n this._changeDetectorRef.detectChanges();\r\n } catch (e) {\r\n }\r\n\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n /**\r\n * Listens for window resize event and recalculates modal instance position if it is element-relative\r\n */\r\n @HostListener('window:resize')\r\n public targetPlacement(): boolean | void {\r\n if (!this.isBrowser || !this.nsmDialog.length || !this.nsmContent.length || !this.nsmOverlay.length || !this.target) {\r\n return false;\r\n }\r\n const targetElement = this._document.querySelector(this.target);\r\n\r\n if (!targetElement) {\r\n return false;\r\n }\r\n\r\n const targetElementRect = targetElement.getBoundingClientRect();\r\n const bodyRect = this.nsmOverlay.first.nativeElement.getBoundingClientRect();\r\n\r\n const nsmContentRect = this.nsmContent.first.nativeElement.getBoundingClientRect();\r\n const nsmDialogRect = this.nsmDialog.first.nativeElement.getBoundingClientRect();\r\n\r\n const marginLeft = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginLeft as any, 10);\r\n const marginTop = parseInt(getComputedStyle(this.nsmContent.first.nativeElement).marginTop as any, 10);\r\n\r\n let offsetTop = targetElementRect.top - nsmDialogRect.top - ((nsmContentRect.height - targetElementRect.height) / 2);\r\n let offsetLeft = targetElementRect.left - nsmDialogRect.left - ((nsmContentRect.width - targetElementRect.width) / 2);\r\n\r\n if (offsetLeft + nsmDialogRect.left + nsmContentRect.width + (marginLeft * 2) > bodyRect.width) {\r\n offsetLeft = bodyRect.width - (nsmDialogRect.left + nsmContentRect.width) - (marginLeft * 2);\r\n } else if (offsetLeft + nsmDialogRect.left < 0) {\r\n offsetLeft = -nsmDialogRect.left;\r\n }\r\n\r\n if (offsetTop + nsmDialogRect.top + nsmContentRect.height + marginTop > bodyRect.height) {\r\n offsetTop = bodyRect.height - (nsmDialogRect.top + nsmContentRect.height) - marginTop;\r\n }\r\n\r\n this._renderer.setStyle(this.nsmContent.first.nativeElement, 'top', (offsetTop < 0 ? 0 : offsetTop) + 'px');\r\n this._renderer.setStyle(this.nsmContent.first.nativeElement, 'left', offsetLeft + 'px');\r\n }\r\n\r\n private _sendEvent(name: string, extraData?: any): boolean {\r\n if (!this.isBrowser) {\r\n return false;\r\n }\r\n\r\n const data = {\r\n extraData: extraData,\r\n instance: { id: this.identifier, modal: this }\r\n };\r\n\r\n const event = new CustomEvent(NtkSmartModalConfig.prefixEvent + name, { detail: data });\r\n\r\n return window.dispatchEvent(event);\r\n }\r\n\r\n /**\r\n * Is current platform browser\r\n */\r\n private get isBrowser(): boolean {\r\n return isPlatformBrowser(this._platformId);\r\n }\r\n\r\n /**\r\n * Creates content inside provided ViewContainerRef\r\n */\r\n private createDynamicContent(changes: QueryList<ViewContainerRef>, factory: ComponentFactory<Component>): void {\r\n changes.forEach((viewContainerRef: ViewContainerRef) => {\r\n viewContainerRef.clear();\r\n viewContainerRef.createComponent(factory);\r\n this.markForCheck();\r\n });\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\n\r\n\r\nimport { ModalInstance } from './modal-instance';\r\nimport { NtkSmartModalComponent } from './ntk-smart-modal.component';\r\n\r\n@Injectable()\r\nexport class NtkSmartModalStackService {\r\n private modalStack: ModalInstance[];\r\n\r\n constructor() {\r\n this.modalStack = [];\r\n }\r\n\r\n /**\r\n * Add a new modal instance. This step is essential and allows to retrieve any modal at any time.\r\n * It stores an object that contains the given modal identifier and the modal itself directly in the `modalStack`.\r\n *\r\n * @param modalInstance The object that contains the given modal identifier and the modal itself.\r\n * @param force Optional parameter that forces the overriding of modal instance if it already exists.\r\n * @returns nothing special.\r\n */\r\n public addModal(modalInstance: ModalInstance, force?: boolean): void {\r\n if (force) {\r\n const i: number = this.modalStack.findIndex((o: ModalInstance) => o.id === modalInstance.id);\r\n if (i > -1) {\r\n this.modalStack[i].modal = modalInstance.modal;\r\n } else {\r\n this.modalStack.push(modalInstance);\r\n }\r\n return;\r\n }\r\n this.modalStack.push(modalInstance);\r\n }\r\n\r\n /**\r\n * Retrieve a modal instance by its identifier.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n */\r\n public getModal(id: string): NtkSmartModalComponent {\r\n const i = this.modalStack.find((o: ModalInstance) => o.id === id);\r\n\r\n if (i !== undefined) {\r\n return i.modal;\r\n } else {\r\n throw new Error(`Cannot find modal with identifier ${id}`);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve all the created modals.\r\n *\r\n * @returns an array that contains all modal instances.\r\n */\r\n public getModalStack(): ModalInstance[] {\r\n return this.modalStack;\r\n }\r\n\r\n /**\r\n * Retrieve all the opened modals. It looks for all modal instances with their `visible` property set to `true`.\r\n *\r\n * @returns an array that contains all the opened modals.\r\n */\r\n public getOpenedModals(): ModalInstance[] {\r\n return this.modalStack.filter((o: ModalInstance) => o.modal.visible);\r\n }\r\n\r\n /**\r\n * Retrieve the opened modal with highest z-index.\r\n *\r\n * @returns the opened modal with highest z-index.\r\n */\r\n public getTopOpenedModal(): NtkSmartModalComponent {\r\n if (!this.getOpenedModals().length) {\r\n throw new Error('No modal is opened');\r\n }\r\n\r\n return this.getOpenedModals()\r\n .map((o: ModalInstance) => o.modal)\r\n .reduce((highest, item) => item.layerPosition > highest.layerPosition ? item : highest, this.getOpenedModals()[0].modal);\r\n }\r\n\r\n /**\r\n * Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and\r\n * calculates a higher value (it takes the highest index value between all the modal instances and adds 1).\r\n * Use it to make a modal appear foreground.\r\n *\r\n * @returns a higher index from all the existing modal instances.\r\n */\r\n public getHigherIndex(): number {\r\n return Math.max(...this.modalStack.map((o) => o.modal.layerPosition), 1041) + 1;\r\n }\r\n\r\n /**\r\n * It gives the number of modal instances. It's helpful to know if the modal stack is empty or not.\r\n *\r\n * @returns the number of modal instances.\r\n */\r\n public getModalStackCount(): number {\r\n return this.modalStack.length;\r\n }\r\n\r\n /**\r\n * Remove a modal instance from the modal stack.\r\n *\r\n * @param id The modal identifier.\r\n * @returns the removed modal instance.\r\n */\r\n public removeModal(id: string): void {\r\n const i: number = this.modalStack.findIndex((o: any) => o.id === id);\r\n if (i > -1) {\r\n this.modalStack.splice(i, 1);\r\n }\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ComponentFactoryResolver,\r\n EmbeddedViewRef,\r\n Inject,\r\n Injectable,\r\n Injector,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n Type\r\n} from '@angular/core';\r\n\r\n\r\nimport { ModalInstance } from './modal-instance';\r\nimport { NtkSmartModalStackService } from './ntk-smart-modal-stack.service';\r\nimport { NtkSmartModalComponent } from './ntk-smart-modal.component';\r\nimport { INtkSmartModalOptions, NtkSmartModalConfig } from './ntk-smart-modal.config';\r\n\r\nexport type Content<T> = string | TemplateRef<T> | Type<T>;\r\n\r\n@Injectable()\r\nexport class NtkSmartModalService {\r\n private lastElementFocused: any;\r\n\r\n constructor(\r\n private _componentFactoryResolver: ComponentFactoryResolver,\r\n private _appRef: ApplicationRef,\r\n private _injector: Injector,\r\n private _modalStack: NtkSmartModalStackService,\r\n private applicationRef: ApplicationRef,\r\n @Inject(DOCUMENT) private _document: any,\r\n @Inject(PLATFORM_ID) private _platformId: any\r\n ) {\r\n this._addEvents();\r\n }\r\n\r\n /**\r\n * Add a new modal instance. This step is essential and allows to retrieve any modal at any time.\r\n * It stores an object that contains the given modal identifier and the modal itself directly in the `modalStack`.\r\n *\r\n * @param modalInstance The object that contains the given modal identifier and the modal itself.\r\n * @param force Optional parameter that forces the overriding of modal instance if it already exists.\r\n * @returns nothing special.\r\n */\r\n public addModal(modalInstance: ModalInstance, force?: boolean): void {\r\n this._modalStack.addModal(modalInstance, force);\r\n }\r\n\r\n /**\r\n * Retrieve a modal instance by its identifier.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n */\r\n public getModal(id: string): NtkSmartModalComponent {\r\n return this._modalStack.getModal(id);\r\n }\r\n\r\n /**\r\n * Alias of `getModal` to retrieve a modal instance by its identifier.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n */\r\n public get(id: string): NtkSmartModalComponent {\r\n return this.getModal(id);\r\n }\r\n\r\n /**\r\n * Open a given modal\r\n *\r\n * @param id The modal identifier used at creation time.\r\n * @param force Tell the modal to open top of all other opened modals\r\n */\r\n public open(id: string, force = false): boolean {\r\n return this._openModal(this.get(id), force);\r\n }\r\n\r\n /**\r\n * Close a given modal\r\n *\r\n * @param id The modal identifier used at creation time.\r\n */\r\n public close(id: string): boolean {\r\n return this._closeModal(this.get(id));\r\n }\r\n\r\n /**\r\n * Close all opened modals\r\n */\r\n public closeAll(): void {\r\n this.getOpenedModals().forEach((instance: ModalInstance) => {\r\n this._closeModal(instance.modal);\r\n });\r\n }\r\n\r\n /**\r\n * Toggles a given modal\r\n * If the retrieved modal is opened it closes it, else it opens it.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n * @param force Tell the modal to open top of all other opened modals\r\n */\r\n public toggle(id: string, force = false): boolean {\r\n return this._toggleModal(this.get(id), force);\r\n }\r\n\r\n /**\r\n * Retrieve all the created modals.\r\n *\r\n * @returns an array that contains all modal instances.\r\n */\r\n public getModalStack(): ModalInstance[] {\r\n return this._modalStack.getModalStack();\r\n }\r\n\r\n /**\r\n * Retrieve all the opened modals. It looks for all modal instances with their `visible` property set to `true`.\r\n *\r\n * @returns an array that contains all the opened modals.\r\n */\r\n public getOpenedModals(): ModalInstance[] {\r\n return this._modalStack.getOpenedModals();\r\n }\r\n\r\n /**\r\n * Retrieve the opened modal with highest z-index.\r\n *\r\n * @returns the opened modal with highest z-index.\r\n */\r\n public getTopOpenedModal(): NtkSmartModalComponent {\r\n return this._modalStack.getTopOpenedModal();\r\n }\r\n\r\n /**\r\n * Get the higher `z-index` value between all the modal instances. It iterates over the `ModalStack` array and\r\n * calculates a higher value (it takes the highest index value between all the modal instances and adds 1).\r\n * Use it to make a modal appear foreground.\r\n *\r\n * @returns a higher index from all the existing modal instances.\r\n */\r\n public getHigherIndex(): number {\r\n return this._modalStack.getHigherIndex();\r\n }\r\n\r\n /**\r\n * It gives the number of modal instances. It's helpful to know if the modal stack is empty or not.\r\n *\r\n * @returns the number of modal instances.\r\n */\r\n public getModalStackCount(): number {\r\n return this._modalStack.getModalStackCount();\r\n }\r\n\r\n /**\r\n * Remove a modal instance from the modal stack.\r\n *\r\n * @param id The modal identifier.\r\n * @returns the removed modal instance.\r\n */\r\n public removeModal(id: string): void {\r\n this._modalStack.removeModal(id);\r\n }\r\n\r\n /**\r\n * Associate data to an identified modal. If the modal isn't already associated to some data, it creates a new\r\n * entry in the `modalData` array with its `id` and the given `data`. If the modal already has data, it rewrites\r\n * them with the new ones. Finally if no modal found it returns an error message in the console and false value\r\n * as method output.\r\n *\r\n * @param data The data you want to associate to the modal.\r\n * @param id The modal identifier.\r\n * @param force If true, overrides the previous stored data if there was.\r\n * @returns true if the given modal exists and the process has been tried, either false.\r\n */\r\n public setModalData(data: any, id: string, force?: boolean): boolean {\r\n let i;\r\n if (i = this.get(id)) {\r\n i.setData(data, force);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve modal data by its identifier.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n * @returns the associated modal data.\r\n */\r\n public getModalData(id: string): any {\r\n let i;\r\n if (i = this.get(id)) {\r\n return i.getData();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Reset the data attached to a given modal.\r\n *\r\n * @param id The modal identifier used at creation time.\r\n * @returns the removed data or false if modal doesn't exist.\r\n */\r\n public resetModalData(id: string): any | boolean {\r\n if (!!this._modalStack.getModalStack().find((o: ModalInstance) => o.id === id)) {\r\n const removed: any = this.getModal(id).getData();\r\n this.getModal(id).removeData();\r\n return removed;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Close the latest opened modal if it has been declared as escapable\r\n * Using a debounce system because one or more modals could be listening\r\n * escape key press event.\r\n */\r\n public closeLatestModal(): void {\r\n this.getTopOpenedModal().close();\r\n }\r\n\r\n /**\r\n * Create dynamic NtkSmartModalComponent\r\n * @param id The modal identifier used at creation time.\r\n * @param content The modal content ( string, templateRef or Component )\r\n */\r\n public create<T>(id: string, content: Content<T>, options: INtkSmartModalOptions = {}) {\r\n try {\r\n return this.getModal(id);\r\n } catch (e) {\r\n const componentFactory = this._componentFactoryResolver.resolveComponentFactory(NtkSmartModalComponent);\r\n const ngContent = this._resolveNgContent(content);\r\n\r\n const componentRef = componentFactory.create(this._injector, ngContent);\r\n\r\n if (content instanceof Type) {\r\n componentRef.instance.contentComponent = content;\r\n }\r\n\r\n componentRef.instance.identifier = id;\r\n componentRef.instance.createFrom = 'service';\r\n\r\n if (typeof options.closable === 'boolean') { componentRef.instance.closable = options.closable; }\r\n if (typeof options.escapable === 'boolean') { componentRef.instance.escapable = options.escapable; }\r\n if (typeof options.dismissable === 'boolean') { componentRef.instance.dismissable = options.dismissable; }\r\n if (typeof options.customClass === 'string') { componentRef.instance.customClass = options.customClass; }\r\n if (typeof options.backdrop === 'boolean') { componentRef.instance.backdrop = options.backdrop; }\r\n if (typeof options.force === 'boolean') { componentRef.instance.force = options.force; }\r\n if (typeof options.hideDelay === 'number') { componentRef.instance.hideDelay = options.hideDelay; }\r\n if (typeof options.autostart === 'boolean') { componentRef.instance.autostart = options.autostart; }\r\n if (typeof options.target === 'string') { componentRef.instance.target = options.target; }\r\n if (typeof options.ariaLabel === 'string') { componentRef.instance.ariaLabel = options.ariaLabel; }\r\n if (typeof options.ariaLabelledBy === 'string') { componentRef.instance.ariaLabelledBy = options.ariaLabelledBy; }\r\n if (typeof options.ariaDescribedBy === 'string') { componentRef.instance.ariaDescribedBy = options.ariaDescribedBy; }\r\n if (typeof options.refocus === 'boolean') { componentRef.instance.refocus = options.refocus; }\r\n\r\n this._appRef.attachView(componentRef.hostView);\r\n\r\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\r\n this._document.body.appendChild(domElem);\r\n\r\n return componentRef.instance;\r\n }\r\n }\r\n\r\n private _addEvents(): boolean {\r\n if (!this.isBrowser) {\r\n return false;\r\n }\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'create', ((e: CustomEvent) => {\r\n this._initModal(e.detail.instance);\r\n }) as EventListener);\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'delete', ((e: CustomEvent) => {\r\n this._deleteModal(e.detail.instance);\r\n }) as EventListener);\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'open', ((e: CustomEvent) => {\r\n this._openModal(e.detail.instance.modal, e.detail.top);\r\n }) as EventListener);\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'toggle', ((e: CustomEvent) => {\r\n this._toggleModal(e.detail.instance.modal, e.detail.top);\r\n }) as EventListener);\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'close', ((e: CustomEvent) => {\r\n this._closeModal(e.detail.instance.modal);\r\n }) as EventListener);\r\n\r\n window.addEventListener(NtkSmartModalConfig.prefixEvent + 'dismiss', ((e: CustomEvent) => {\r\n this._dismissModal(e.detail.instance.modal);\r\n }) as EventListener);\r\n\r\n window.addEventListener('keyup', this._escapeKeyboardEvent);\r\n\r\n return true;\r\n }\r\n\r\n private _initModal(modalInstance: ModalInstance) {\r\n modalInstance.modal.layerPosition += this.getModalStackCount();\r\n this.addModal(modalInstance, modalInstance.modal.force);\r\n\r\n if (modalInstance.modal.autostart) {\r\n this.open(modalInstance.id);\r\n }\r\n }\r\n\r\n private _openModal(modal: NtkSmartModalComponent, top?: boolean): boolean {\r\n if (modal.visible) {\r\n return false;\r\n }\r\n\r\n this.lastElementFocused = document.activeElement;\r\n\r\n if (modal.escapable) {\r\n window.addEventListener('keyup', this._escapeKeyboardEvent);\r\n }\r\n\r\n if (modal.backdrop) {\r\n window.addEventListener('keydown', this._trapFocusModal);\r\n }\r\n\r\n if (top) {\r\n modal.layerPosition = this.getHigherIndex();\r\n }\r\n\r\n modal.addBodyClass();\r\n modal.overlayVisible = true;\r\n modal.visible = true;\r\n modal.onOpen.emit(modal);\r\n modal.markForCheck();\r\n\r\n setTimeout(() => {\r\n modal.openedClass = true;\r\n\r\n if (modal.target) {\r\n modal.targetPlacement();\r\n }\r\n\r\n modal.nsmDialog.first.nativeElement.setAttribute('role', 'dialog');\r\n modal.nsmDialog.first.nativeElement.setAttribute('tabIndex', '-1');\r\n modal.nsmDialog.first.nativeElement.setAttribute('aria-modal', 'true');\r\n modal.nsmDialog.first.nativeElement.focus();\r\n\r\n modal.markForCheck();\r\n modal.onOpenFinished.emit(modal);\r\n });\r\n\r\n return true;\r\n }\r\n\r\n private _toggleModal(modal: NtkSmartModalComponent, top?: boolean): boolean {\r\n if (modal.visible) {\r\n return this._closeModal(modal);\r\n } else {\r\n return this._openModal(modal, top);\r\n }\r\n }\r\n\r\n private _closeModal(modal: NtkSmartModalComponent): boolean {\r\n if (!modal.openedClass) {\r\n return false;\r\n }\r\n\r\n modal.openedClass = false;\r\n modal.onClose.emit(modal);\r\n modal.onAnyCloseEvent.emit(modal);\r\n\r\n if (this.getOpenedModals().length < 2) {\r\n modal.removeBodyClass();\r\n window.removeEventListener('keyup', this._escapeKeyboardEvent);\r\n window.removeEventListener('keydown', this._trapFocusModal);\r\n }\r\n\r\n setTimeout(() => {\r\n modal.visibleChange.emit(modal.visible);\r\n modal.visible = false;\r\n modal.overlayVisible = false;\r\n modal.nsmDialog.first.nativeElement.removeAttribute('tabIndex');\r\n modal.markForCheck();\r\n modal.onCloseFinished.emit(modal);\r\n modal.onAnyCloseEventFinished.emit(modal);\r\n if (modal.refocus) {\r\n this.lastElementFocused.focus();\r\n }\r\n }, modal.hideDelay);\r\n\r\n return true;\r\n }\r\n\r\n private _dismissModal(modal: NtkSmartModalComponent): boolean {\r\n if (!modal.openedClass) {\r\n return false;\r\n }\r\n\r\n modal.openedClass = false;\r\n modal.onDismiss.emit(modal);\r\n modal.onAnyCloseEvent.emit(modal);\r\n\r\n if (this.getOpenedModals().length < 2) {\r\n modal.removeBodyClass();\r\n }\r\n\r\n setTimeout(() => {\r\n modal.visible = false;\r\n modal.visibleChange.emit(modal.visible);\r\n modal.overlayVisible = false;\r\n modal.markForCheck();\r\n modal.onDismissFinished.emit(modal);\r\n modal.onAnyCloseEventFinished.emit(modal);\r\n }, modal.hideDelay);\r\n\r\n return true;\r\n }\r\n\r\n private _deleteModal(modalInstance: ModalInstance) {\r\n this.removeModal(modalInstance.id);\r\n\r\n if (!this.getModalStack().length) {\r\n modalInstance.modal.removeBodyClass();\r\n }\r\n }\r\n\r\n /**\r\n * Resolve content according to the types\r\n * @param content The modal content ( string, templateRef or Component )\r\n */\r\n private _resolveNgContent<T>(content: Content<T>): any[][] | Text[][] {\r\n if (typeof content === 'string') {\r\n const element = this._document.createTextNode(content);\r\n return [[element]];\r\n }\r\n\r\n if (content instanceof TemplateRef) {\r\n const viewRef = content.createEmbeddedView(null as any);\r\n this.applicationRef.attachView(viewRef);\r\n return [viewRef.rootNodes];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * Close the latest opened modal if escape key event is emitted\r\n * @param event The Keyboard Event\r\n */\r\n private _escapeKeyboardEvent = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n try {\r\n const modal = this.getTopOpenedModal();\r\n\r\n if (!modal.escapable) {\r\n return false;\r\n }\r\n\r\n modal.onEscape.emit(modal);\r\n this.closeLatestModal();\r\n\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Is current platform browser\r\n */\r\n private get isBrowser(): boolean {\r\n return isPlatformBrowser(this._platformId);\r\n }\r\n\r\n /**\r\n * While modal is open, the focus stay on it\r\n * @param event The Keyboar dEvent\r\n */\r\n private _trapFocusModal = (event: KeyboardEvent) => {\r\n if (event.key === 'Tab') {\r\n try {\r\n const modal = this.getTopOpenedModal();\r\n\r\n if (!modal.nsmDialog.first.nativeElement.contains(document.activeElement)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n modal.nsmDialog.first.nativeElement.focus();\r\n }\r\n\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NtkSmartModalStackService } from './ntk-smart-modal-stack.service';\r\nimport { NtkSmartModalComponent } from './ntk-smart-modal.component';\r\nimport { NtkSmartModalService } from './ntk-smart-modal.service';\r\n\r\n@NgModule({\r\n declarations: [NtkSmartModalComponent],\r\n exports: [NtkSmartModalComponent],\r\n imports: [CommonModule],\r\n})\r\nexport class NtkSmartModalModule {\r\n /**\r\n * Use in AppModule: new instance of NtkSmartModal.\r\n */\r\n public static forRoot(): ModuleWithProviders<NtkSmartModalModule> {\r\n return {\r\n ngModule: NtkSmartModalModule,\r\n providers: [\r\n NtkSmartModalService,\r\n NtkSmartModalStackService\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Use in features modules with lazy loading: new instance of NtkSmartModal.\r\n */\r\n public static forChild(): ModuleWithProviders<NtkSmartModalModule> {\r\n return {\r\n ngModule: NtkSmartModalModule,\r\n providers: [\r\n NtkSmartModalService,\r\n NtkSmartModalStackService\r\n ],\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { LoaderInstance } from './loader-instance';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class NtkSmartLoaderService {\r\n private privateloaderStack: LoaderInstance[] = [];\r\n private privateActions: Array<{ identifier: string, action: string }> = [];\r\n\r\n /**\r\n * Add a new loader instance. This step is essential and allows to retrieve any loader at any time.\r\n * It stores an object that contains the given loader identifier and the loader itself directly in the `loaderStack`.\r\n *\r\n * @param loaderInstance The object that contains the given loader identifier and the loader itself.\r\n * @param force Optional parameter that forces the overriding of loader instance if it already exists.\r\n * @returns Returns nothing special.\r\n */\r\n public addLoader(loaderInstance: LoaderInstance, force?: boolean): void {\r\n if (force) {\r\n const i: number = this.privateloaderStack.findIndex((o: LoaderInstance) => {\r\n return o.id === loaderInstance.id;\r\n });\r\n if (i > -1) {\r\n this.privateloaderStack[i].component = loaderInstance.component;\r\n } else {\r\n this.privateloaderStack.push(loaderInstance);\r\n }\r\n return;\r\n }\r\n let loader;\r\n // tslint:disable-next-line: no-conditional-assignment\r\n if (loader = this._getLoader(loaderInstance.id)) {\r\n throw (new Error('Loader with ' + loaderInstance.id + ' identifier already exist'));\r\n } else {\r\n this.privateloaderStack.push(loaderInstance);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a loader instance from the loader stack.\r\n *\r\n * @param id The loader identifier.\r\n */\r\n public removeLoader(id: string): void {\r\n this.privateloaderStack = this.privateloaderStack.filter((loader) => loader.id !== id);\r\n\r\n this._removeAction(id, '*');\r\n }\r\n\r\n /**\r\n * Retrieve all the created loaders.\r\n *\r\n * @returns Returns an array that contains all loader instances.\r\n */\r\n public getLoaderStack(): LoaderInstance[] {\r\n return this.privateloaderStack;\r\n }\r\n\r\n /**\r\n * It gives the number of loader instances. It's helpful to know if the loader stack is empty or not.\r\n *\r\n * @returns Returns the number of loader instances.\r\n */\r\n public getLoaderStackCount(): number {\r\n return this.privateloaderStack.length;\r\n }\r\n\r\n /**\r\n * Retrieve all the opened loaders. It looks for all loader instances with their `visible` property set to `true`.\r\n *\r\n * @returns Returns an array that contains all the opened loaders.\r\n */\r\n public getOpenedLoaders(): LoaderInstance[] {\r\n return this.privateloaderStack.filter((loader) => loader.component.visible);\r\n }\r\n\r\n /**\r\n * Retrieve all the active loaders. It looks for all loader instances with their `loading` property set to `true`.\r\n *\r\n * @returns Returns an array that contains all the active loaders.\r\n */\r\n public getActiveLoaders(): LoaderInstance[] {\r\n return this.privateloaderStack.filter((loader) => loader.component.loading);\r\n }\r\n\r\n /**\r\n * Get the higher `z-index` value between all the loader instances. It iterates over the `LoaderStack` array and\r\n * calculates a higher value (it takes the highest index value between all the loader instances and adds 1).\r\n * Use it to make a loader appear foreground.\r\n *\r\n * @returns Returns a higher index from all the existing loader instances.\r\n */\r\n public getHigherIndex(): number {\r\n const index: number[] = this.getOpenedLoaders().map((loader) => loader.component.layerPosition);\r\n\r\n return Math.max(...index) + 1;\r\n }\r\n\r\n /**\r\n * Enable loading state to one or several loaders.\r\n *\r\n * @param id The loader identifier.\r\n */\r\n public start(id: string | string[]): void {\r\n let loader;\r\n\r\n if (Array.isArray(id)) {\r\n id.forEach((i: string) => {\r\n this.start(i);\r\n });\r\n } else if (loader = this._getLoader(id)) {\r\n loader.component.start();\r\n this._removeAction(id, 'start');\r\n } else {\r\n this._addAction(id, 'start');\r\n }\r\n }\r\n\r\n /**\r\n * Enable loading state to all loaders.\r\n */\r\n public startAll(): void {\r\n this.privateloaderStack.forEach((loader) => this.start(loader.id));\r\n }\r\n\r\n /**\r\n * Disable loading state to one or several loaders.\r\n *\r\n * @param id The loader identifier.\r\n */\r\n public stop(id: string | string[]): void {\r\n let loader;\r\n\r\n if (Array.isArray(id)) {\r\n id.forEach((i: string) => {\r\n this.stop(i);\r\n });\r\n } else if (loader = this._getLoader(id)) {\r\n loader.component.stop();\r\n this._removeAction(id, 'stop');\r\n } else {\r\n this._addAction(id, 'stop');\r\n }\r\n }\r\n\r\n /**\r\n * Disable loading state to all loaders.\r\n */\r\n public stopAll(): void {\r\n this.privateloaderStack.forEach((loader) => this.stop(loader.id));\r\n }\r\n\r\n public isLoading(id: string | string[]): boolean {\r\n let loader;\r\n if (Array.isArray(id)) {\r\n const tmp: any = [];\r\n\r\n id.forEach((i: string) => {\r\n this.privateloaderStack.forEach((load) => {\r\n if (load.id === i) {\r\n tmp.push(load.component.loading);\r\n }\r\n });\r\n });\r\n return tmp.indexOf(false) === -1;\r\n } else if (loader = this._getLoader(id)) {\r\n return loader.component.loading;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Execute an action on loaders\r\n *\r\n * @param id The loader identifier.\r\n * @param action Name of the action.\r\n */\r\n public executeAction(id: string, action: string): void {\r\n // First check if the action exists in privateActions\r\n if (this.privateActions.find((act) => act.identifier === id && act.action === action)) {\r\n switch (action) {\r\n case 'start':\r\n this.start(id);\r\n break;\r\n case 'stop':\r\n this.stop(id);\r\n break;\r\n }\r\n } else {\r\n // If no action exists, execute it directly if the loader exists\r\n let loader;\r\n if (loader = this._getLoader(id)) {\r\n switch (action) {\r\n case 'start':\r\n loader.component.start();\r\n break;\r\n case 'stop':\r\n loader.component.stop();\r\n break;\r\n }\r\n } else {\r\n // If loader doesn't exist, add the action to be executed later\r\n this._addAction(id, action);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve a loader instance by its identifier.\r\n * If there's several loaders with same identifier, the first is returned.\r\n *\r\n * @param id The loader identifier used at creation time.\r\n */\r\n private _getLoader(id: string): LoaderInstance | null {\r\n return this.privateloaderStack.find((load) => load.id === id) || null;\r\n }\r\n\r\n /**\r\n * Adds an action on one or more loaders\r\n *\r\n * @param id The loader identifier.\r\n * @param action Name of the action.\r\n */\r\n private _addAction(id: string | string[], action: string): void {\r\n if (Array.isArray(id)) {\r\n id.forEach((i: string) => {\r\n this._addAction(i, action);\r\n });\r\n } else {\r\n this.privateActions.push({ identifier: id, action: action });\r\n }\r\n }\r\n\r\n /**\r\n * Remove an action on one or more loaders\r\n *\r\n * @param id The loader identifier.\r\n * @param action Name of the action.\r\n */\r\n private _removeAction(id: string | string[], action: string): void {\r\n if (Array.isArray(id)) {\r\n id.forEach((i: string) => {\r\n this._removeAction(i, action);\r\n });\r\n } else {\r\n this.privateActions = this.privateActions.filter((act) => act.identifier !== id || (act.action !== action && action !== '*'));\r\n }\r\n }\r\n}\r\n","import { NtkSmartLoaderComponent } from './ntk-smart-loader.component';\r\n\r\nexport class LoaderInstance {\r\n public id: string;\r\n public component: NtkSmartLoaderComponent;\r\n\r\n constructor(component: NtkSmartLoaderComponent) {\r\n this.id = component.identifier;\r\n this.component = component;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\n\r\nimport { LoaderInstance } from './loader-instance';\r\nimport { NtkSmartLoaderService } from './ntk-smart-loader.service';\r\n\r\n@Component({\r\n selector: 'ntk-smart-loader',\r\n standalone: false,\r\n template: `\r\n <div\r\n class=\"loader-container {{ customClass }}\"\r\n [ngClass]=\"{ active: loading }\"\r\n [style.z-index]=\"layerPosition - 1\"\r\n *ngIf=\"visible\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class NtkSmartLoaderComponent implements OnInit, OnDestroy {\r\n @Input() public identifier = '';\r\n @Input() public customClass = '';\r\n @Input() public force = false;\r\n @Input() public delayIn = 0;\r\n @Input() public delayOut = 0;\r\n @Input() public autostart = false;\r\n @Output() public onStart = new EventEmitter<NtkSmartLoaderComponent>();\r\n @Output() public onStop = new EventEmitter<NtkSmartLoaderComponent>();\r\n @Output() public onVisibleChange =\r\n new EventEmitter<NtkSmartLoaderComponent>();\r\n\r\n public loading = false;\r\n public visible = false;\r\n public layerPosition = 999;\r\n\r\n private privateDebouncer: any;\r\n private privateIsProcessing = false;\r\n\r\n private privateLoaderBodyClass = 'loader-open';\r\n private privateEnterClass = 'enter';\r\n private privateLeaveClass = 'leave';\r\n\r\n constructor(\r\n public ntkSmartLoaderService: NtkSmartLoaderService,\r\n private changeDetectorRef: ChangeDetectorRef\r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n try {\r\n console.log(\r\n 'SmartLoader Component initialized with identifier:',\r\n this.identifier\r\n );\r\n const loader = new LoaderInstance(this);\r\n\r\n this.ntkSmartLoaderService.addLoader(loader, this.force);\r\n console.log(\r\n 'Loader added to service. Stack count:',\r\n this.ntkSmartLoaderService.getLoaderStackCount()\r\n );\r\n\r\n this.layerPosition += this.ntkSmartLoaderService.getLoaderStackCount();\r\n this.addCustomClass(\r\n this.identifier.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\r\n );\r\n\r\n if (this.autostart) {\r\n console.log('Autostart enabled, starting loader');\r\n this.ntkSmartLoaderService.start(this.identifier);\r\n }\r\n // Don't auto-start if autostart is false - let user control it manually\r\n } catch (error) {\r\n console.error('Error in smart loader initialization:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.ntkSmartLoaderService.removeLoader(this.identifier);\r\n }\r\n\r\n public start(top?: boolean): void {\r\n console.log('SmartLoader start called for identifier:', this.identifier);\r\n this.privateIsProcessing = true;\r\n\r\n clearInterval(this.privateDebouncer);\r\n\r\n this.visible = true;\r\n console.log('Loader visible set to true');\r\n\r\n setTimeout(() => {\r\n this.addCustomClass(this.privateEnterClass);\r\n });\r\n\r\n this.privateDebouncer = setTimeout(() => {\r\n if (top) {\r\n this.layerPosition = this.ntkSmartLoaderService.getHigherIndex();\r\n }\r\n\r\n if (!document.body.classList.contains(this.privateLoaderBodyClass)) {\r\n document.body.classList.add(this.privateLoaderBodyClass);\r\n }\r\n\r\n this.loading = true;\r\n console.log('Loader loading set to true');\r\n\r\n this.onStart.emit(this);\r\n this.onVisibleChange.emit(this);\r\n\r\n this.removeCustomClass(this.privateEnterClass);\r\n this.privateIsProcessing = false;\r\n }, this.delayIn);\r\n }\r\n\r\n public stop(): void {\r\n if (this.privateIsProcessing) {\r\n this.visible = false;\r\n this.loading = false;\r\n }\r\n\r\n clearInterval(this.privateDebouncer);\r\n\r\n this.addCustomClass(this.privateLeaveClass);\r\n this.loading = false;\r\n this.privateDebouncer = setTimeout(() => {\r\n if (document.body.classList.contains(this.privateLoaderBodyClass)) {\r\n document.body.classList.remove(this.privateLoaderBodyClass);\r\n }\r\n\r\n this.visible = false;\r\n\r\n this.onStop.emit(this);\r\n this.onVisibleChange.emit(this);\r\n\r\n this.removeCustomClass(this.privateLeaveClass);\r\n setTimeout(() => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }, this.delayOut);\r\n }\r\n\r\n public addCustomClass(className: string): void {\r\n if (!this.customClass.length) {\r\n this.customClass = className;\r\n } else {\r\n if (this.customClass.indexOf(className) === -1) {\r\n this.customClass += ' ' + className;\r\n }\r\n }\r\n }\r\n\r\n public removeCustomClass(className?: string): void {\r\n if (className) {\r\n this.customClass = this.customClass.replace(className, '').trim();\r\n } else {\r\n this.customClass = '';\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\n\r\nimport { NtkSmartLoaderComponent } from './ntk-smart-loader.component';\r\nimport { NtkSmartLoaderService } from './ntk-smart-loader.service';\r\n\r\n@NgModule({\r\n declarations: [NtkSmartLoaderComponent],\r\n exports: [NtkSmartLoaderComponent],\r\n imports: [CommonModule],\r\n})\r\nexport class NtkSmartLoaderModule {\r\n /**\r\n * Use in AppModule: new instance of NtkSmartLoader.\r\n */\r\n public static forRoot(): ModuleWithProviders<NtkSmartLoaderModule> {\r\n return {\r\n ngModule: NtkSmartLoaderModule,\r\n providers: [NtkSmartLoaderService],\r\n };\r\n }\r\n\r\n /**\r\n * Use in features modules with lazy loading: new instance of NtkSmartLoader.\r\n */\r\n public static forChild(): ModuleWithProviders<NtkSmartLoaderModule> {\r\n return {\r\n ngModule: NtkSmartLoaderModule,\r\n providers: [NtkSmartLoaderService],\r\n };\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ntk-cms-module\r\n */\r\n\r\nexport { NtkSmartModalService } from './lib/modal/ntk-smart-modal.service';\r\nexport { NtkSmartModalComponent } from './lib/modal/ntk-smart-modal.component';\r\nexport { NtkSmartModalModule } from './lib/modal/ntk-smart-modal.module';\r\nexport { NtkSmartModalStackService } from './lib/modal/ntk-smart-modal-stack.service';\r\n\r\nexport { NtkSmartLoaderService } from './lib/loader/ntk-smart-loader.service';\r\nexport { NtkSmartLoaderComponent } from './lib/loader/ntk-smart-loader.component';\r\nexport { NtkSmartLoaderModule } from './lib/loader/ntk-smart-loader.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NtkSmartModalStackService","i1.NtkSmartLoaderService","i2"],"mappings":"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"}