{"version":3,"file":"usitsdasdesign-dds-ng-modal.mjs","sources":["../../src/app/dds/modal/constants.ts","../../src/app/dds/modal/modal-ref.class.ts","../../src/app/dds/modal/typings.ts","../../src/app/dds/modal/modal.service.ts","../../src/app/dds/modal/modal.module.ts","../../src/app/dds/modal/usitsdasdesign-dds-ng-modal.ts"],"sourcesContent":["export const CLOSED_DELAY = 300;\nexport const FOCUSED_ELEMENT_COUNT = 0;\nexport const FOCUSED_ELEMENT = 'button';\nexport const TABBABLE_ELEMENTS = 'a, button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])';\n","import { EventEmitter } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport class ModalRef<T = any> {\n  // Event emitter that emits when the modal is closed.\n  private readonly onClosed$ = new EventEmitter<any>();\n\n  // The instance of the modal component.\n  public componentInstance: T;\n\n  constructor() { }\n\n  // Returns an observable that emits when the modal is closed.\n  public onClosed(): Observable<any> {\n    return this.onClosed$;\n  }\n\n  // Emits the close event with optional data and completes the observable.\n  public emitCloseEvent(data?: any): void {\n    this.onClosed$.next(data);\n    this.onClosed$.complete();\n  }\n}\n","import { ComponentRef } from '@angular/core';\nimport { ModalRef } from './modal-ref.class';\n\nexport enum ModalClass {\n  modal = 'dds-modal',\n  modalOpen = 'dds-modal-open',\n  modalInit = 'dds-modal-init',\n  modalDialog = 'dds-modal-dialog',\n}\n\nexport interface IModal {\n  component: ComponentRef<any>;\n  modalRef: ModalRef;\n}\n","\nimport {\n  ApplicationRef,\n  Component,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n  EventEmitter,\n  Inject,\n  Injectable,\n  Injector,\n  NgZone,\n  OnDestroy,\n  Renderer2,\n  RendererFactory2,\n  Type,\n  DOCUMENT\n} from '@angular/core';\nimport { DialogListService } from '@usitsdasdesign/dds-ng/core/popup';\nimport { AdditionalClass, KeyCodes } from '@usitsdasdesign/dds-ng/shared';\nimport { CLOSED_DELAY, FOCUSED_ELEMENT_COUNT, TABBABLE_ELEMENTS } from './constants';\nimport { ModalRef } from './modal-ref.class';\nimport { IModal, ModalClass } from './typings';\n\n// @dynamic\n@Injectable({\n  providedIn: 'root'\n})\nexport class ModalService implements OnDestroy {\n  // Event emitter that emits when a modal is closed\n  public onClosed = new EventEmitter<ComponentRef<Component>>();\n\n  // List to keep track of open modals\n  private modalsList: IModal[] = [];\n\n  // Renderer for manipulating DOM elements\n  private render: Renderer2;\n\n  // Counter for the number of focused elements\n  private focusedElementCount = FOCUSED_ELEMENT_COUNT;\n\n  // Flag to enable or disable closing modal with ESC key\n  private enableEscForClosing: boolean;\n\n  constructor(\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private appRef: ApplicationRef,\n    private injector: Injector,\n    private ngZone: NgZone,\n    private rendererFactory: RendererFactory2,\n    private dialogListService: DialogListService,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n    this.render = rendererFactory.createRenderer(null, null);\n  }\n\n  public ngOnDestroy(): void {\n    this.closeAll();\n  }\n\n  // Opens a modal with the specified component and inputs\n  public open<T>(component: Type<T>, inputs?: { [key: string]: any }, enableEscForClosing = true): ModalRef {\n    const modalRef = new ModalRef();\n    const componentRef = this.componentFactoryResolver.resolveComponentFactory<T>(component).create(this.injector);\n    const domElem: HTMLElement = (componentRef.hostView as EmbeddedViewRef<HTMLElement>).rootNodes[0];\n    this.enableEscForClosing = enableEscForClosing;\n\n    this.appRef.attachView(componentRef.hostView);\n    this.render.appendChild(this.document.body, domElem);\n    this.render.addClass(domElem, ModalClass.modalInit);\n    this.render.addClass(domElem, ModalClass.modalOpen);\n\n    this.render.setAttribute(domElem, 'role', 'dialog');\n    this.render.setAttribute(domElem, 'aria-modal', 'true');\n    if (inputs?.ariaLabelId) this.render.setAttribute(domElem, 'aria-labelledby', inputs?.ariaLabelId);\n\n    domElem.tabIndex = 0;\n    domElem.focus();\n\n    if (inputs) {\n      Object.keys(inputs).forEach((key) => {\n        componentRef.instance[key] = inputs[key];\n      });\n    }\n\n    this.modalsList.push({ component: componentRef, modalRef });\n    this.dialogListService.dialogList.push({ component: componentRef, modalRef });\n    modalRef.componentInstance = componentRef.instance;\n\n    this.incrementElementCount();\n\n    return modalRef;\n  }\n\n  // Closes the most recently opened modal\n  public close(data?: any): void {\n    const modal = this.modalsList.pop();\n    this.dialogListService.dialogList.pop();\n    modal.modalRef.emitCloseEvent(data);\n    this.remove(modal.component);\n  }\n\n  // Closes all open modals\n  public closeAll(): void {\n    this.modalsList.forEach((modal) => {\n      modal.modalRef.emitCloseEvent();\n      this.remove(modal.component);\n    });\n  }\n\n  // Gets all focusable elements within the specified element\n  private getKeyboardFocusableElements(element: HTMLElement): HTMLElement[] {\n    const tabbableElements = Array.from(element.querySelectorAll<HTMLElement>(TABBABLE_ELEMENTS));\n    return [...tabbableElements].filter((el) => !el.hasAttribute('disabled'));\n  }\n\n  // Removes the specified component from the DOM and destroys it\n  private remove(componentRef: ComponentRef<unknown>): void {\n    const domElem = (componentRef.hostView as EmbeddedViewRef<HTMLElement>).rootNodes[0];\n    domElem.classList.remove(ModalClass.modalOpen);\n    setTimeout(() => {\n      this.render.removeChild(this.document.body, domElem);\n      this.appRef.detachView(componentRef.hostView);\n      componentRef.destroy();\n    }, CLOSED_DELAY);\n    this.modalsList = this.modalsList.filter((item) => item.component !== componentRef);\n    this.decrementElementCount();\n    this.onClosed.emit(componentRef);\n  }\n\n  // Increments the count of focused elements and adds event listeners if necessary\n  private incrementElementCount(): void {\n    if (++this.focusedElementCount === 1) {\n      this.ngZone.runOutsideAngular(() => {\n        const doc = this.document || document;\n\n        doc.addEventListener('keyup', this.documentKeyUpListener);\n        doc.addEventListener('keydown', this.keyboardModalTrap);\n      });\n    }\n  }\n\n  // Decrements the count of focused elements and removes event listeners if necessary\n  private decrementElementCount(): void {\n    if (!--this.focusedElementCount) {\n      const doc = this.document || document;\n\n      doc.removeEventListener('keyup', this.documentKeyUpListener);\n      doc.removeEventListener('keydown', this.keyboardModalTrap);\n    }\n  }\n\n  // Listener for keyup events to handle closing the modal with the ESC key\n  private documentKeyUpListener = (e: KeyboardEvent) => {\n    const modal = this.modalsList.at(-1)?.component?.location?.nativeElement;\n    const lastDialog = this.dialogListService.dialogList.at(-1)?.component?.location?.nativeElement;\n    const isCurrentModal = modal === lastDialog;\n\n    if (e.keyCode === KeyCodes.ESC && this.enableEscForClosing && isCurrentModal) {\n      e.stopPropagation();\n      this.close();\n    }\n  };\n\n  // Listener for keydown events to trap focus within the modal\n  private keyboardModalTrap = (e: KeyboardEvent) => {\n    const lastComponent = this.modalsList.at(-1)?.component?.location?.nativeElement;\n    const tabbableList = this.getKeyboardFocusableElements(lastComponent);\n    const firstTabbableElement = tabbableList[0];\n    const lastTabbableElement = tabbableList.at(-1);\n\n    if (e.keyCode === KeyCodes.TAB || (e.keyCode === KeyCodes.TAB && e.shiftKey)) {\n      this.render.removeClass(lastTabbableElement, AdditionalClass.keyboardFocus);\n      this.render.removeClass(firstTabbableElement, AdditionalClass.keyboardFocus);\n    }\n\n    if (e.keyCode === KeyCodes.TAB && !e.shiftKey && lastTabbableElement === this.document.activeElement) {\n      e.preventDefault();\n\n      this.render.addClass(firstTabbableElement, AdditionalClass.keyboardFocus);\n      firstTabbableElement.focus();\n    }\n\n    if (e.keyCode === KeyCodes.TAB && e.shiftKey && firstTabbableElement === this.document.activeElement) {\n      e.preventDefault();\n\n      this.render.addClass(lastTabbableElement, AdditionalClass.keyboardFocus);\n      lastTabbableElement.focus();\n    }\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModalService } from './modal.service';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [ModalService],\n})\nexport class ModalModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}