UNPKG

ngx-light-modal

Version:

Lightweight and dependency-free Angular modal package using standalone components. Supports stacking, backdrops, dynamic injection, and custom content components.

1 lines 20.5 kB
{"version":3,"file":"ngx-light-modal.mjs","sources":["../../../projects/ngx-modal/src/lib/close-state.ts","../../../projects/ngx-modal/src/lib/modal-ref.ts","../../../projects/ngx-modal/src/lib/modal.service.ts","../../../projects/ngx-modal/src/lib/modal-container/modal-container.component.ts","../../../projects/ngx-modal/src/lib/modal-container/modal-container.component.html","../../../projects/ngx-modal/src/public-api.ts","../../../projects/ngx-modal/src/ngx-light-modal.ts"],"sourcesContent":["export enum CloseState {\r\n EXITED = 'EXITED',\r\n BACKDROP_DISMISS = 'BACKDROP_DISMISS',\r\n CLOSE_BUTTON = 'CLOSE_BUTTON',\r\n ESCAPE = 'ESCAPE',\r\n SUBMITTED = 'SUBMITTED',\r\n CANCELLED = 'CANCELLED',\r\n}\r\n\r\nexport interface CloseResult<T = any> {\r\n state: CloseState;\r\n data?: T;\r\n}\r\n","import { ComponentRef } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { CloseResult, CloseState } from './close-state';\r\n\r\nexport class ModalRef<T = any> {\r\n private _afterClosed = new Subject<CloseResult<T>>();\r\n private _beforeClosed = new Subject<void>();\r\n private _afterOpened = new Subject<void>();\r\n\r\n afterClosed$ = this._afterClosed.asObservable();\r\n beforeClosed$ = this._beforeClosed.asObservable();\r\n afterOpened$ = this._afterOpened.asObservable();\r\n\r\n contentRef?: ComponentRef<any>;\r\n\r\n constructor(public componentInstance: any, public readonly id: number) {}\r\n\r\n onSubmitted(): Observable<CloseResult<T>> {\r\n return this.getStateObservable(CloseState.SUBMITTED);\r\n }\r\n\r\n onEscaped(): Observable<CloseResult<T>> {\r\n return this.getStateObservable(CloseState.ESCAPE);\r\n }\r\n\r\n onBackdropDismiss(): Observable<CloseResult<T>> {\r\n return this.getStateObservable(CloseState.BACKDROP_DISMISS);\r\n }\r\n\r\n onStateClose(state: CloseState): Observable<CloseResult<T>> {\r\n return this.getStateObservable(state);\r\n }\r\n onCancelled(): Observable<CloseResult<T>> {\r\n return this.getStateObservable(CloseState.CANCELLED);\r\n }\r\n onUserDismissed(): Observable<CloseResult<T>> {\r\n return this.afterClosed$.pipe(\r\n filter((result) => [CloseState.BACKDROP_DISMISS, CloseState.ESCAPE, CloseState.CLOSE_BUTTON].includes(result.state))\r\n );\r\n }\r\n close(result?: any, state: CloseState = CloseState.EXITED): void {\r\n this._beforeClosed.next();\r\n this._beforeClosed.complete();\r\n this._afterClosed.next({ state, data: result });\r\n this._afterClosed.complete();\r\n }\r\n\r\n notifyAfterOpened(): void {\r\n if (this._afterOpened.closed) return;\r\n\r\n this._afterOpened.next();\r\n this._afterOpened.complete();\r\n }\r\n private getStateObservable(state: CloseState): Observable<CloseResult<T>> {\r\n return this.afterClosed$.pipe(filter((result) => result.state === state));\r\n }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n Injector,\r\n inputBinding,\r\n Type,\r\n} from '@angular/core';\r\nimport { filter, Observable, Subject } from 'rxjs';\r\nimport { CloseResult, CloseState } from './close-state';\r\nimport { ModalConfig } from './modal-config';\r\nimport { ModalContainerComponent } from './modal-container/modal-container.component';\r\nimport { ModalRef } from './modal-ref';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ModalService {\r\n private modalStack: Array<{\r\n containerRef: ComponentRef<ModalContainerComponent>;\r\n modalRef: ModalRef;\r\n }> = [];\r\n private contentComponentRegistry = new WeakMap<any, ModalRef>();\r\n\r\n constructor(private injector: Injector, private appRef: ApplicationRef, private environmentInjector: EnvironmentInjector) {}\r\n\r\n open<T>(component: Type<T>, data?: Partial<T>, config: ModalConfig = {}): ModalRef<T> {\r\n const zIndex = 1000 + (this.modalStack.length + 1) * 100;\r\n\r\n const bindings = [\r\n inputBinding('showBackdrop', () => config.showBackdrop ?? true),\r\n inputBinding('dismissOnBackdropClick', () => config.dismissOnBackdropClick ?? true),\r\n inputBinding('showCloseButton', () => config.showCloseButton ?? true),\r\n inputBinding('escapeKeyClose', () => config.escapeKeyClose ?? true),\r\n inputBinding('modalClass', () => config.modalClass || ''),\r\n inputBinding('backdropClass', () => config.backdropClass || ''),\r\n inputBinding('zIndex', () => zIndex),\r\n ];\r\n\r\n const modalContainerRef = createComponent(ModalContainerComponent, {\r\n environmentInjector: this.environmentInjector,\r\n elementInjector: this.injector,\r\n bindings,\r\n });\r\n\r\n const contentRef = modalContainerRef.instance.createComponent(component);\r\n\r\n if (contentRef.instance && data) {\r\n Object.assign(contentRef.instance, data);\r\n }\r\n\r\n const modalRef = new ModalRef<T>(contentRef.instance, this.generateModalId());\r\n this.modalStack.push({ containerRef: modalContainerRef, modalRef });\r\n this.contentComponentRegistry.set(contentRef.instance, modalRef);\r\n\r\n // Configure modal container\r\n Object.assign(modalContainerRef.instance, {\r\n modalRef: modalRef,\r\n });\r\n\r\n document.body.appendChild(modalContainerRef.location.nativeElement);\r\n this.appRef.attachView(modalContainerRef.hostView);\r\n\r\n modalContainerRef.instance.focus();\r\n\r\n modalRef.afterClosed$.subscribe((result) => {\r\n this.cleanupModal(modalRef.id);\r\n this.closeSource.next(result);\r\n });\r\n\r\n Promise.resolve().then(() => modalRef.notifyAfterOpened());\r\n\r\n return modalRef;\r\n }\r\n\r\n private generateModalId(): number {\r\n return Date.now() + Math.floor(Math.random() * 1000);\r\n }\r\n\r\n getModalRef(contentComponent: unknown): ModalRef | undefined {\r\n return this.contentComponentRegistry.get(contentComponent as any);\r\n }\r\n\r\n private cleanupModal(modalId: number): void {\r\n const index = this.modalStack.findIndex((m) => m.modalRef.id === modalId);\r\n if (index === -1) return;\r\n\r\n const [modal] = this.modalStack.splice(index, 1);\r\n this.contentComponentRegistry.delete(modal.modalRef.componentInstance);\r\n\r\n // Destroy content component\r\n if (modal.modalRef.contentRef) {\r\n modal.modalRef.contentRef.destroy();\r\n }\r\n\r\n // Destroy container\r\n this.appRef.detachView(modal.containerRef.hostView);\r\n modal.containerRef.destroy();\r\n\r\n // Update z-index and top status for remaining modals\r\n this.modalStack.forEach((m) => {\r\n m.containerRef.changeDetectorRef.detectChanges();\r\n });\r\n\r\n // Focus new top modal\r\n if (this.modalStack.length > 0) {\r\n const topModal = this.modalStack[this.modalStack.length - 1];\r\n topModal.containerRef.instance.focus();\r\n }\r\n }\r\n\r\n getTopModal(): ModalRef | undefined {\r\n return this.modalStack[this.modalStack.length - 1]?.modalRef;\r\n }\r\n isTopModal(modalRef: ModalRef): boolean {\r\n const top = this.getTopModal();\r\n console.log(modalRef);\r\n\r\n return top?.id === modalRef.id;\r\n }\r\n\r\n private closeSource = new Subject<CloseResult>();\r\n\r\n // Listen to all closes\r\n onClose$(): Observable<CloseResult> {\r\n return this.closeSource.asObservable();\r\n }\r\n\r\n // Listen to specific states\r\n onStateClose$(state: CloseState): Observable<CloseResult> {\r\n return this.closeSource.pipe(filter((result) => result.state === state));\r\n }\r\n\r\n // Helper methods for common states\r\n onSubmitted$(): Observable<CloseResult> {\r\n return this.onStateClose$(CloseState.SUBMITTED);\r\n }\r\n\r\n onDismissed$(): Observable<CloseResult> {\r\n return this.onStateClose$(CloseState.BACKDROP_DISMISS);\r\n }\r\n\r\n onEscaped$(): Observable<CloseResult> {\r\n return this.onStateClose$(CloseState.ESCAPE);\r\n }\r\n\r\n notifyClose(result: CloseResult): void {\r\n this.closeSource.next(result);\r\n }\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, ComponentRef, ElementRef, HostListener, inject, input, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\nimport { CloseState } from '../close-state';\r\nimport { ModalRef } from '../modal-ref';\r\nimport { ModalService } from '../modal.service';\r\n\r\n@Component({\r\n selector: 'app-modal-container',\r\n templateUrl: './modal-container.component.html',\r\n styleUrl: './modal-container.component.scss',\r\n imports: [NgClass],\r\n standalone: true,\r\n})\r\nexport class ModalContainerComponent {\r\n @ViewChild('modalContent', { read: ViewContainerRef, static: true }) modalContent!: ViewContainerRef;\r\n @ViewChild('modal', { static: true }) modal!: ElementRef;\r\n\r\n modalRef!: ModalRef;\r\n contentComponent!: ComponentRef<any>;\r\n modalService = inject(ModalService);\r\n\r\n showBackdrop = input.required<boolean>();\r\n dismissOnBackdropClick = input.required<boolean>();\r\n showCloseButton = input.required<boolean>();\r\n escapeKeyClose = input.required<boolean>();\r\n modalClass = input.required<string>();\r\n backdropClass = input.required<string>();\r\n zIndex = input.required<number>();\r\n\r\n focus(): void {\r\n this.modal.nativeElement.focus();\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n handleEscape(event: KeyboardEvent) {\r\n if (this.escapeKeyClose() && this.modalService.isTopModal(this.modalRef)) {\r\n this.close(CloseState.ESCAPE);\r\n }\r\n }\r\n\r\n createComponent<T>(component: Type<T>): ComponentRef<any> {\r\n this.modalContent.clear();\r\n return this.modalContent.createComponent(component);\r\n }\r\n\r\n onBackdropClick(event: MouseEvent) {\r\n if (this.dismissOnBackdropClick() && event.target === this.modal.nativeElement) {\r\n this.close(CloseState.BACKDROP_DISMISS);\r\n }\r\n }\r\n closeWithButton() {\r\n this.close(CloseState.CLOSE_BUTTON);\r\n }\r\n\r\n close(state: CloseState): void {\r\n this.modalRef?.close(undefined, state);\r\n }\r\n}\r\n"," <div\r\n #modal\r\n [ngClass]=\"{ 'ngx-backdrop-active': showBackdrop() }\"\r\n [class]=\"'ngx-modal-backdrop ' + backdropClass()\"\r\n (click)=\"onBackdropClick($event)\"\r\n tabindex=\"-1\"\r\n [style.zIndex]=\"zIndex()\"\r\n >\r\n <div class=\"ngx-modal-content\" [ngClass]=\"modalClass()\" [style.zIndex]=\"zIndex() + 1\">\r\n @if (showCloseButton()) {\r\n <button class=\"ngx-close-button\" (click)=\"closeWithButton()\">&times;</button>\r\n }\r\n\r\n <ng-container #modalContent></ng-container>\r\n </div>\r\n </div>\r\n","/*\r\n * Public API Surface of ngx-modal\r\n */\r\n\r\nexport * from './lib/close-state';\r\nexport * from './lib/modal-config';\r\nexport * from './lib/modal-container/modal-container.component';\r\nexport * from './lib/modal-ref';\r\nexport * from './lib/modal.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter"],"mappings":"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"}