{"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  ComponentRef,\r\n} from '@angular/core';\r\n\r\nimport { ModalService } from './modal.service';\r\nimport { Options } from './modal-options';\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: [],\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  private 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  private 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  private removeElementIfNotAnimated(\r\n    element: HTMLDivElement,\r\n    animation: string,\r\n  ) {\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(userComponent: ComponentRef<any>) {\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      userComponent.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(userComponent);\r\n    });\r\n    this.overlay.nativeElement.addEventListener('animationend', () => {\r\n      this.overlay.nativeElement.remove();\r\n      this.overlayClosed = true;\r\n      this.removeModalComponent(userComponent);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Remove modal when both animations come to an end.\r\n   */\r\n  private removeModalComponent(userComponent: ComponentRef<any>) {\r\n    if (this.modalClosed && this.overlayClosed) {\r\n      this.element.nativeElement.remove();\r\n      userComponent.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 libraryComponent!: ComponentRef<ModalComponent>;\r\n  private userComponent!: 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({\r\n        resolve,\r\n        userComponent: this.userComponent,\r\n        libraryComponent: this.libraryComponent,\r\n      });\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.userComponent = createComponent(componentToCreate, {\r\n      environmentInjector: this.injector,\r\n      elementInjector: options?.injector,\r\n    });\r\n\r\n    this.libraryComponent = createComponent(ModalComponent, {\r\n      environmentInjector: this.injector,\r\n      projectableNodes: [[this.userComponent.location.nativeElement]],\r\n    });\r\n\r\n    this.instantiateProps(options?.data);\r\n\r\n    this.appRef.attachView(this.userComponent.hostView);\r\n    this.appRef.attachView(this.libraryComponent.hostView);\r\n    document.body.appendChild(this.libraryComponent.location.nativeElement);\r\n  }\r\n\r\n  /**\r\n   * Set user provided data into the component instance.\r\n   */\r\n  private instantiateProps(data: Options['data'] = {}) {\r\n    for (const key of Object.keys(data)) {\r\n      this.userComponent.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 { userComponent, libraryComponent, resolve } =\r\n      this.promiseContainer.pop()!;\r\n    this.modalInstances.pop()?.close(userComponent);\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    this.appRef.detachView(userComponent.hostView);\r\n    this.appRef.detachView(libraryComponent.hostView);\r\n\r\n    return 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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"}