UNPKG

ngx-modal-ease

Version:

ngx-modal-ease is a versatile Angular library providing a lightweight, simple, and performant modal. This library supports data communication between components, opening of multiple modals, custom animations, and a range of customisable options.

1 lines 19.4 kB
{"version":3,"file":"ngx-modal-ease.mjs","sources":["../../../projects/ngx-modal-ease/src/lib/modal/modal.component.ts","../../../projects/ngx-modal-ease/src/lib/modal/modal.component.html","../../../projects/ngx-modal-ease/src/lib/modal/modal.service.ts","../../../projects/ngx-modal-ease/src/public-api.ts","../../../projects/ngx-modal-ease/src/ngx-modal-ease.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n ViewChild,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalService } from './modal.service';\r\nimport { Options } from './modal-options';\r\nimport { PromiseModal } from './internal-interfaces';\r\n\r\n@Component({\r\n selector: 'app-modal',\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.css'],\r\n imports: [CommonModule],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class ModalComponent implements OnInit, AfterViewInit {\r\n @ViewChild('modal') modal!: ElementRef<HTMLDivElement>;\r\n @ViewChild('overlay') overlay!: ElementRef<HTMLDivElement>;\r\n options!: Options | undefined;\r\n modalLeaveAnimation = '';\r\n overlayLeaveAnimation = '';\r\n overlayClosed = false;\r\n modalClosed = false;\r\n layerLevel = 0;\r\n\r\n constructor(\r\n private modalService: ModalService,\r\n private element: ElementRef<HTMLElement>\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.options = this.modalService.options;\r\n this.modalService.modalInstances.push(this);\r\n this.modalService.layerLevel += 1;\r\n this.layerLevel = this.modalService.layerLevel;\r\n\r\n if (this.options?.actions?.escape === false) return;\r\n\r\n document.addEventListener('keydown', this.handleEscape);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.addOptionsAndAnimations();\r\n }\r\n\r\n /**\r\n * Multiple modals might register multiple event listener, hence the 'layerLevel' variable and two times the condition check for the escape option.\r\n * Arrow function to respect the this instance.\r\n */\r\n handleEscape = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n if (this.options?.actions?.escape === false) return;\r\n\r\n if (this.layerLevel === this.modalService.layerLevel) {\r\n this.modalService.closedOnClickOrEscape = true;\r\n this.modalService.close();\r\n }\r\n }\r\n };\r\n\r\n onClose() {\r\n if (this.options?.actions?.click === false) return;\r\n this.modalService.closedOnClickOrEscape = true;\r\n this.modalService.close();\r\n }\r\n\r\n /**\r\n * Add options and animations\r\n * Apply user style and animations, listen to animation ends. Apply z-indexes on overlay and modal, with 1000 as incremental value.\r\n */\r\n addOptionsAndAnimations() {\r\n this.modal.nativeElement.style.width = this.options?.size?.width || '';\r\n this.modal.nativeElement.style.maxWidth =\r\n this.options?.size?.maxWidth || '';\r\n this.modal.nativeElement.style.height = this.options?.size?.height || '';\r\n this.modal.nativeElement.style.maxHeight =\r\n this.options?.size?.maxHeight || '';\r\n this.modal.nativeElement.style.padding =\r\n this.options?.size?.padding || '0.5rem';\r\n\r\n const overlayZIndex = 1000 * this.modalService.modalInstances.length;\r\n this.overlay.nativeElement.style.zIndex = `${overlayZIndex}`;\r\n this.modal.nativeElement.style.zIndex = `${overlayZIndex + 1000}`;\r\n\r\n this.modalLeaveAnimation = this.options?.modal?.leave || '';\r\n this.overlayLeaveAnimation = this.options?.overlay?.leave || '';\r\n this.modal.nativeElement.style.animation = this.options?.modal?.enter || '';\r\n this.modal.nativeElement.style.top = this.options?.modal?.top || '50%';\r\n this.modal.nativeElement.style.left = this.options?.modal?.left || '50%';\r\n\r\n this.overlay.nativeElement.style.animation =\r\n this.options?.overlay?.enter || '';\r\n this.overlay.nativeElement.style.backgroundColor =\r\n this.options?.overlay?.backgroundColor || '';\r\n }\r\n\r\n removeElementIfNotAnimated(element: HTMLDivElement, animation: string) {\r\n if (!animation) {\r\n element.remove();\r\n\r\n if (element.classList.contains('ngx-modal')) {\r\n this.modalClosed = true;\r\n } else {\r\n this.overlayClosed = true;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clean the DOM\r\n * Apply the leaving animations and clean the DOM. Three different use cases.\r\n * Last In First Out\r\n */\r\n close(contentCp: PromiseModal) {\r\n this.modalService.layerLevel -= 1;\r\n\r\n this.modal.nativeElement.style.animation = this.modalLeaveAnimation;\r\n this.overlay.nativeElement.style.animation = this.overlayLeaveAnimation;\r\n document.removeEventListener('keydown', this.handleEscape);\r\n\r\n // First: no animations on both elements\r\n if (!this.modalLeaveAnimation && !this.overlayLeaveAnimation) {\r\n this.element.nativeElement.remove();\r\n contentCp.contentCpRef.destroy();\r\n return;\r\n }\r\n\r\n // Second: 1/2 animated, remove directly element if not animated\r\n this.removeElementIfNotAnimated(\r\n this.modal.nativeElement,\r\n this.modalLeaveAnimation\r\n );\r\n this.removeElementIfNotAnimated(\r\n this.overlay?.nativeElement,\r\n this.overlayLeaveAnimation\r\n );\r\n\r\n // Third: Both animated with differents animation time, remove modal component as soon as last one ends\r\n this.modal.nativeElement.addEventListener('animationend', () => {\r\n this.modal.nativeElement.remove();\r\n this.modalClosed = true;\r\n this.removeModalComponent(contentCp);\r\n });\r\n this.overlay.nativeElement.addEventListener('animationend', () => {\r\n this.overlay.nativeElement.remove();\r\n this.overlayClosed = true;\r\n this.removeModalComponent(contentCp);\r\n });\r\n }\r\n\r\n /**\r\n * Remove modal when both animations come to an end.\r\n */\r\n removeModalComponent(contentCp: PromiseModal) {\r\n if (this.modalClosed && this.overlayClosed) {\r\n this.element.nativeElement.remove();\r\n contentCp.contentCpRef.destroy();\r\n }\r\n }\r\n}\r\n","<div class=\"modal-container\">\n <section class=\"ngx-modal\" #modal>\n <ng-content></ng-content>\n </section>\n\n <div class=\"ngx-overlay\" #overlay (click)=\"onClose()\"></div>\n</div>\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n EnvironmentInjector,\r\n Inject,\r\n Injectable,\r\n PLATFORM_ID,\r\n Type,\r\n createComponent,\r\n} from '@angular/core';\r\nimport { ModalComponent } from './modal.component';\r\nimport { ModalResponse, Options } from './modal-options';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { PromiseModal } from './internal-interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ModalService {\r\n private newModalComponent!: ComponentRef<ModalComponent>;\r\n private newComponent!: ComponentRef<any>;\r\n /**\r\n * Internal use only.\r\n */\r\n options!: Options | undefined;\r\n /**\r\n * Internal use only.\r\n */\r\n modalInstances: ModalComponent[] = [];\r\n /**\r\n * Internal use only.\r\n */\r\n layerLevel = 0;\r\n /**\r\n * Internal use only.\r\n */\r\n closedOnClickOrEscape = false;\r\n private isBrowser = true;\r\n private promiseContainer: PromiseModal[] = [];\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector,\r\n @Inject(PLATFORM_ID) platformId: Object\r\n ) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n }\r\n\r\n /**\r\n * Opens a custom component within a modal.\r\n * @param componentToCreate The custom component to display within the modal.\r\n * @param options Additional options for configuring the modal appearance and animations.\r\n * @returns A Promise that will emit custom data on closing the modal.\r\n * ```\r\n * this.modalService.open(ModalContentComponent, {\r\n * modal: {\r\n * enter: 'enter-scale-down 0.1s ease-out',\r\n * leave: 'fade-out 0.5s',\r\n * },\r\n * overlay: {\r\n * leave: 'fade-out 0.3s',\r\n * },\r\n * data: {\r\n * type: 'Angular modal library',\r\n * },\r\n * })\r\n * .then((dataFromComponent) => {\r\n * ...\r\n * });\r\n * ```\r\n */\r\n open<C>(componentToCreate: Type<C>, options?: Options) {\r\n this.options = options;\r\n this.openComponent(componentToCreate, options);\r\n\r\n return new Promise<ModalResponse>((resolve) => {\r\n if (!this.isBrowser) return;\r\n this.promiseContainer.push({ resolve, contentCpRef: this.newComponent });\r\n });\r\n }\r\n\r\n private openComponent<C>(componentToCreate: Type<C>, options?: Options) {\r\n if (!this.isBrowser) return;\r\n\r\n this.newComponent = createComponent(componentToCreate, {\r\n environmentInjector: this.injector,\r\n elementInjector: options?.injector,\r\n });\r\n\r\n this.newModalComponent = createComponent(ModalComponent, {\r\n environmentInjector: this.injector,\r\n projectableNodes: [[this.newComponent.location.nativeElement]],\r\n });\r\n\r\n this.instantiateProps(options?.data);\r\n\r\n document.body.appendChild(this.newModalComponent.location.nativeElement);\r\n this.appRef.attachView(this.newComponent.hostView);\r\n this.appRef.attachView(this.newModalComponent.hostView);\r\n }\r\n\r\n private instantiateProps(data: Options['data'] = {}) {\r\n for (const key of Object.keys(data)) {\r\n this.newComponent.instance[key] = data[key];\r\n }\r\n }\r\n\r\n /**\r\n * Close the current modal.\r\n * @param data The optional data to emit on closing the modal (communication from modal to caller).\r\n */\r\n close(data?: unknown) {\r\n if (this.promiseContainer.length === 0) return;\r\n\r\n const modalPromise = this.promiseContainer.pop() as PromiseModal;\r\n this.modalInstances.pop()?.close(modalPromise);\r\n\r\n const response = {\r\n closedOnClickOrEscape: this.closedOnClickOrEscape,\r\n data,\r\n };\r\n\r\n this.closedOnClickOrEscape = false;\r\n return modalPromise.resolve(response);\r\n }\r\n\r\n /**\r\n * Close all modal instances.\r\n * Respective animations will be applied.\r\n */\r\n closeAll() {\r\n for (let i = this.modalInstances.length - 1; i > -1; i--) {\r\n this.close();\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ngx-modal-ease\r\n */\r\n\r\nexport * from './lib/modal/modal.service';\r\nexport * from './lib/modal/modal-options';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModalService"],"mappings":"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"}