{"version":3,"file":"tableau-ui-angular-dialog.mjs","sources":["../../../projects/component-library/dialog/src/dialog.ref.ts","../../../projects/component-library/dialog/src/data.ref.ts","../../../projects/component-library/dialog/src/confirmation-dialog.component.ts","../../../projects/component-library/dialog/src/stack-options.ts","../../../projects/component-library/dialog/src/dialog.service.ts","../../../projects/component-library/dialog/src/tableau-ui-dialog.module.ts","../../../projects/component-library/dialog/src/tableau-ui-angular-dialog.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport type { Observable } from 'rxjs';\nimport { Subject } from 'rxjs';\nimport type { IDialogPositionAndSizeArgs } from './dialog.args';\n\nexport const TAB_DIALOG_REF = new InjectionToken<DialogRef>('TAB_DIALOG_REF');\n\nexport function injectDialogRef<T>(): DialogRef<T> {\n  return inject(TAB_DIALOG_REF) as DialogRef<T>;\n}\n\nexport interface IDialogRef {\n  closed$: Observable<unknown | undefined>;\n  close: () => void;\n}\nexport class DialogRef<T = unknown> implements IDialogRef {\n  private readonly _closed$ = new Subject<T | undefined>();\n  readonly closed$: Observable<T | undefined> = this._closed$.asObservable();\n\n  private _result: T | undefined = undefined;\n  close(result?: T): void {\n    this._closed$.next(result ?? this._result);\n    this._closed$.complete();\n  }\n\n  /**\n   * Sets the result of the dialog without closing it.\n   * This is useful for cases where you want to update the result\n   * but keep the dialog open, such as in a form submission.\n   * If the close() function is called with a non-undefined result, it will overwrite this value\n   * @param result The result to set.\n   */\n  setResultWithoutClosing(result?: T): void {\n    this._result = result;\n  }\n}\nexport class DialogRefInternal<T> extends DialogRef<T> {\n  dialogElement: HTMLElement = undefined!;\n\n  reposition: (modArgs: (originalArgs: IDialogPositionAndSizeArgs) => void) => void = undefined!;\n}\n","import { inject, InjectionToken } from '@angular/core';\n\nexport const TAB_DATA_REF = new InjectionToken<unknown>('TAB_DIALOG_DATA_REF');\n\nexport function injectDialogData<T>(): T {\n  return inject(TAB_DATA_REF) as T;\n}\n","import type { AfterContentInit, AfterViewInit, TemplateRef } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, inject, viewChild } from '@angular/core';\nimport { injectDialogRef } from './dialog.ref';\nimport { injectDialogData, TAB_DATA_REF } from './data.ref';\nimport type { ButtonComponent } from 'tableau-ui-angular/button';\n@Component({\n  selector: 'tab-confirmation-dialog',\n  standalone: false,\n  template: `\n    <div class=\"dialog-content\">\n      @if (data.contentTemplate) {\n        <div>\n          <ng-container *ngTemplateOutlet=\"data.contentTemplate\" />\n        </div>\n      } @else {\n        <div>{{ data.content }}</div>\n      }\n    </div>\n    <div class=\"dialog-actions\">\n      <button #cancel tabindex=\"0\" (click)=\"dialogRef.close(false)\">\n        {{ data.cancelBtnText ?? 'Cancel' }}\n      </button>\n      <button #accept tabindex=\"0\" [color]=\"data.color\" (click)=\"dialogRef.close(true)\">\n        {{ data.acceptBtnText ?? 'OK' }}\n      </button>\n    </div>\n  `,\n  styles: `\n    .dialog-content {\n      padding: 12px 18px;\n    }\n    .dialog-actions {\n      display: flex;\n      justify-content: flex-end;\n      gap: 1em;\n      padding: 12px;\n      padding-top: 0;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConfirmationDialogComponent implements AfterViewInit, AfterContentInit {\n  protected data = inject<IConfirmationDialogData>(TAB_DATA_REF);\n\n  protected readonly data2 = injectDialogData<IConfirmationDialogData>();\n\n  protected dialogRef = injectDialogRef<boolean>();\n\n  private readonly $accept = viewChild.required<ButtonComponent>('accept');\n  private readonly $cancel = viewChild.required<ButtonComponent>('cancel');\n\n  ngAfterContentInit() {\n    if (this.data.autofocus === 'accept') {\n      this.$accept().$nativeElement.nativeElement.focus();\n    } else if (this.data.autofocus === 'cancel') {\n      this.$cancel().$nativeElement.nativeElement.focus();\n    }\n  }\n  ngAfterViewInit() {\n    if (this.data.autofocus === 'accept') {\n      this.$accept().$nativeElement.nativeElement.focus();\n    } else if (this.data.autofocus === 'cancel') {\n      this.$cancel().$nativeElement.nativeElement.focus();\n    }\n  }\n}\n\nexport class IConfirmationDialogData<T = unknown> {\n  content: string | undefined;\n  contentTemplate: TemplateRef<T> | undefined;\n  contentTemplateContext: T | undefined;\n  color: 'error' | 'primary' | 'secondary' = 'secondary';\n  acceptBtnText: string | undefined;\n  cancelBtnText: string | undefined;\n  autofocus: 'accept' | 'cancel' | undefined;\n}\n","/**\n * The dialog will be placed in the global stacking context, placed at the end of the document body.\n * This is useful for dialogs that need to be displayed above all other content, such as modals or overlays.\n */\nexport class GlobalStackOptions {\n  constructor(\n    /**\n     * The reference element thats' DOMRect is passed to the left() and height() function of the dialog args.\n     * Optional.\n     */\n    public readonly referenceElement?: HTMLElement,\n  ) {}\n}\n\n/**\n * The dialog will be placed in the local stacking context, inserted after the specified element.\n * This is useful for dialogs that need to be displayed relative to a specific element, such as tooltips or popovers.\n * The dialog will be placed after the `insertAfterElement` in the DOM.\n * The dialog content will be tabbable right after the `insertAfterElement`.\n */\nexport class LocalStackOptions {\n  constructor(\n    /**\n     * The element after which the dialog will be inserted in the DOM.\n     * If 'referenceElement' is not provided, this will be the reference element that's DOMRect is passed to the left() and height() function of the dialog args.\n     */\n    public readonly insertAfterElement: HTMLElement,\n    /**\n     * The reference element that's DOMRect is passed to the left() and height() function of the dialog args.\n     * If not provided, the `insertAfterElement` will be used as the reference element.\n     */\n    public readonly referenceElement?: HTMLElement,\n  ) {}\n}\n\nexport type StackOptions = GlobalStackOptions | LocalStackOptions;\n","import type { ComponentRef, EmbeddedViewRef, TemplateRef, Type, ViewRef } from '@angular/core';\nimport { ApplicationRef, createComponent, EnvironmentInjector, inject, Injectable, Injector } from '@angular/core';\nimport type { DialogRef, IDialogRef } from './dialog.ref';\nimport { TAB_DIALOG_REF, DialogRefInternal } from './dialog.ref';\nimport type { IConfirmationDialogArgs, IDialogArgs, IDialogPositionAndSizeArgs, IModalArgs } from './dialog.args';\nimport { fromEvent, map, Subscription } from 'rxjs';\nimport type { FocusableElement } from 'tabbable';\nimport { tabbable } from 'tabbable';\nimport type { IConfirmationDialogData } from './confirmation-dialog.component';\nimport { ConfirmationDialogComponent } from './confirmation-dialog.component';\nimport { TAB_DATA_REF } from './data.ref';\nimport { IconComponent } from 'tableau-ui-angular/icon';\nimport type { StackOptions } from './stack-options';\nimport { GlobalStackOptions, LocalStackOptions } from './stack-options';\n\n// Styles for the dialog container are in _dialog.service.scss in the styles folder\n@Injectable({\n  providedIn: 'root', // This service is a singleton and should be provided in the root injector\n})\nexport class DialogService {\n  injector = inject(Injector);\n  appRef = inject(ApplicationRef);\n  environmentInjector = inject(EnvironmentInjector);\n\n  openModal<TComponent, TData, TResult>(component: Type<TComponent>, data: TData, args?: IModalArgs): DialogRef<TResult> {\n    return this._openModal<TData, TResult>((injector: Injector) => this.createView(component, injector), data, args);\n  }\n\n  openTemplateModal<TContext, TResult>(contentTemplate: TemplateRef<TContext>, contentTemplateContext: TContext, args?: IModalArgs): DialogRef<TResult> {\n    return this._openModal<TContext, TResult>((injector: Injector) => contentTemplate.createEmbeddedView(contentTemplateContext, injector), contentTemplateContext, args);\n  }\n\n  _openModal<TData, TResult>(getViewRef: (injector: Injector) => ViewRef, data: TData, args?: IModalArgs): DialogRef<TResult> {\n    const a = {\n      width: args?.width ?? '300px',\n      height: args?.height ?? 'fit-content',\n      maxWidth: args?.maxWidth ?? 'calc(100vw - 100px)',\n      maxHeight: args?.maxHeight ?? 'calc(80vh - 50px)',\n      closeOnBackdropClick: args?.closeOnBackdropClick ?? true,\n      closeOnEscape: args?.closeOnEscape ?? true,\n      backdropCss: {\n        backgroundColor: 'var(--twc-modal-color-backdrop)',\n      },\n      containerCss: {\n        backgroundColor: 'var(--twc-color-base)',\n        borderColor: 'var(--twc-color-border-light)',\n        borderStyle: 'solid',\n        borderWidth: '1px',\n        borderRadius: '1px',\n        boxShadow: '0 2px 10px var(--twc-modal-color-box-shadow)',\n        cursor: 'default',\n        display: 'flex',\n        flexDirection: 'column',\n      },\n\n      left(actualWidth) {\n        return `calc(50vw - ${actualWidth / 2}px)`;\n      },\n      top(actualHeight) {\n        return `calc(50vh - ${actualHeight / 2}px)`;\n      },\n      header: args?.header,\n      trapFocus: true,\n    } as IDialogArgs;\n\n    const ref = this._openDialog<TData, TResult>(getViewRef, data, a);\n    return ref;\n  }\n\n  async openConfirmationMessageDialog(\n    title: string,\n    message: string,\n    color: 'error' | 'primary' | 'secondary',\n    acceptBtnText: string | undefined,\n    cancelBtnText: string | undefined,\n    autofocus: 'accept' | 'cancel' | undefined,\n    args?: IConfirmationDialogArgs,\n  ): Promise<boolean> {\n    const modalArgs = {\n      ...(args ?? {}),\n      header: { title, allowClose: true },\n    } as IModalArgs;\n    return new Promise(resolve => {\n      const data: IConfirmationDialogData = {\n        content: message,\n        color,\n        autofocus,\n        acceptBtnText,\n        cancelBtnText,\n        contentTemplate: undefined,\n        contentTemplateContext: undefined,\n      };\n      const dialogRef = this.openModal<ConfirmationDialogComponent, IConfirmationDialogData, boolean>(ConfirmationDialogComponent, data, modalArgs);\n      dialogRef.closed$.subscribe(result => {\n        resolve(result ?? false);\n      });\n    });\n  }\n\n  async openConfirmationTemplateDialog<TContext>(\n    title: string,\n    template: TemplateRef<TContext>,\n    templateContext: TContext,\n    color: 'error' | 'primary' | 'secondary',\n    acceptBtnText: string | undefined,\n    cancelBtnText: string | undefined,\n    autofocus: 'accept' | 'cancel' | undefined,\n    args?: IConfirmationDialogArgs,\n  ): Promise<boolean> {\n    const modalArgs = {\n      ...(args ?? {}),\n      header: { title, allowClose: true },\n    } as IModalArgs;\n    return new Promise(resolve => {\n      const data: IConfirmationDialogData = {\n        content: undefined,\n        color,\n        autofocus,\n        acceptBtnText,\n        cancelBtnText,\n        contentTemplate: template,\n        contentTemplateContext: templateContext,\n      };\n\n      const dialogRef = this.openModal<ConfirmationDialogComponent, IConfirmationDialogData, boolean>(ConfirmationDialogComponent, data, modalArgs);\n      dialogRef.closed$.subscribe(result => {\n        resolve(result ?? false);\n      });\n    });\n  }\n\n  readonly startZIndex = 100;\n  readonly zIndexStep = 10;\n  private readonly zIndex = this.startZIndex;\n\n  dialogStack: {\n    dialogRef: IDialogRef;\n    zIndex: number;\n    args: IDialogArgs;\n  }[] = [];\n\n  openTemplateDialog<TContext, TResult>(contentTemplate: TemplateRef<TContext>, args: IDialogArgs, contentTemplateContext: TContext, stackOptions: StackOptions = new GlobalStackOptions()) {\n    return this._openDialog<TContext, TResult>((injector: Injector) => contentTemplate.createEmbeddedView(contentTemplateContext, injector), contentTemplateContext, args, stackOptions);\n  }\n\n  openDialog<TComponent, TData, TResult>(component: Type<TComponent>, data: TData, args: IDialogArgs = {}, stackOptions: StackOptions = new GlobalStackOptions()): DialogRef<TResult> {\n    return this._openDialog<TData, TResult>((injector: Injector) => this.createView(component, injector), data, args, stackOptions);\n  }\n  private _openDialog<TData, TResult>(getViewRef: (injector: Injector) => ViewRef, data: TData, args: IDialogArgs = {}, stackOptions: StackOptions = new GlobalStackOptions()): DialogRef<TResult> {\n    let trappedFocus:\n      | {\n          elements: {\n            element: FocusableElement;\n            originalTabIndex: number;\n          }[];\n          focusedElement: HTMLElement | null;\n        }\n      | undefined = undefined;\n    // Before creating the dialog, trap focus\n    // This means that we get all elements which are tabbable and set the tabindex to -1 for the duration of the popup\n    if (args.trapFocus === true) {\n      trappedFocus = this.trapFocus();\n    }\n    const dialogRef = new DialogRefInternal<TResult>();\n    // calculate new zIndex\n    let { zIndex } = this;\n    if (this.dialogStack.length > 0) {\n      zIndex = this.dialogStack[this.dialogStack.length - 1].zIndex + this.zIndexStep;\n    }\n    // push this dialog to the new stack\n    this.dialogStack.push({ dialogRef, zIndex, args });\n\n    // Set the backdrop\n    const backdrop = this.createBackdrop(args, dialogRef, zIndex - 1, stackOptions);\n    this.setEscapeHandler();\n\n    // Create an injector that provides the DialogRef\n    const injector = Injector.create({\n      providers: [\n        { provide: TAB_DIALOG_REF, useValue: dialogRef },\n        { provide: TAB_DATA_REF, useValue: data },\n      ],\n      parent: this.injector,\n    });\n\n    // Create the component view\n    const componentView = getViewRef(injector);\n    // Attach component to the application\n    this.appRef.attachView(componentView);\n\n    // Create a container for the dialog\n    const dialogElement = this.createDialogElement(componentView, args, injector, dialogRef, zIndex);\n    dialogRef.dialogElement = dialogElement;\n\n    // always insert element after the backdrop\n    if (backdrop) {\n      backdrop?.insertAdjacentElement('afterend', dialogElement);\n    } else if (stackOptions instanceof LocalStackOptions) {\n      stackOptions.insertAfterElement.insertAdjacentElement('afterend', dialogElement);\n    } else {\n      document.body.appendChild(dialogElement);\n    }\n\n    // Handle container position and window resize event\n    dialogRef.reposition = (getArgs: (originalArgs: IDialogPositionAndSizeArgs) => void) => {\n      getArgs(args);\n      DialogService.calculateAndSetPosition(dialogElement, args, stackOptions);\n    };\n    const resizeSubscription = DialogService.manageDialogPosition(dialogElement, args, stackOptions);\n\n    // Handle dialog close\n    dialogRef.closed$.subscribe(() => {\n      if (resizeSubscription) {\n        resizeSubscription.unsubscribe();\n      }\n      this.appRef.detachView(componentView);\n      componentView.destroy();\n      dialogElement.remove();\n\n      const dialogIndex = this.dialogStack.findIndex(d => d.zIndex === zIndex);\n      this.dialogStack.splice(dialogIndex, 1);\n      // clear backdrop\n      backdrop?.remove();\n      // set escape handler\n      this.setEscapeHandler();\n      // restore focus to the elements that were trapped\n      if (trappedFocus) {\n        this.restoreFocus(trappedFocus);\n      }\n    });\n\n    return dialogRef;\n  }\n\n  private createBackdrop(args: IDialogArgs, dialogRef: IDialogRef, dialogZIndex: number, stackOptions: StackOptions): HTMLDivElement | undefined {\n    if (args.skipCreatingBackdrop === true) {\n      return undefined;\n    }\n    const backdrop = document.createElement('div');\n    backdrop.classList.add('dialog-backdrop');\n    backdrop.style.zIndex = (dialogZIndex - 1).toString();\n    if (args.backdropCss) {\n      Object.keys(args.backdropCss).forEach(key => {\n        (backdrop.style as unknown as Record<string, string>)[key] = args.backdropCss![key];\n      });\n    }\n    if (stackOptions instanceof LocalStackOptions) {\n      stackOptions.insertAfterElement.insertAdjacentElement('afterend', backdrop);\n    } else {\n      document.body.appendChild(backdrop);\n    }\n    if (args.closeOnBackdropClick === true) {\n      backdrop.onclick = () => {\n        dialogRef.close();\n      };\n    }\n    return backdrop;\n  }\n\n  escapeSubscription: Subscription | null = null;\n  private setEscapeHandler() {\n    if (this.escapeSubscription) {\n      this.escapeSubscription.unsubscribe();\n      this.escapeSubscription = null;\n    }\n    if (this.dialogStack.length <= 0) {\n      return;\n    }\n    // get the dialog to set the escape for\n    const { dialogRef, args } = this.dialogStack[this.dialogStack.length - 1];\n    if (args.closeOnEscape === true) {\n      this.escapeSubscription = fromEvent(document, 'keydown')\n        .pipe(map(e => e as KeyboardEvent))\n        .subscribe((e: KeyboardEvent) => {\n          if (e.key === 'Escape') {\n            if (this.escapeSubscription) {\n              this.escapeSubscription.unsubscribe();\n              this.escapeSubscription = null;\n            }\n            dialogRef.close();\n            e.preventDefault();\n          }\n        });\n    }\n  }\n\n  private createView<TComponent>(component: Type<TComponent>, injector: Injector): ViewRef {\n    const componentRef: ComponentRef<TComponent> = createComponent(component, {\n      environmentInjector: this.environmentInjector,\n      elementInjector: injector,\n    });\n    return componentRef.hostView;\n  }\n\n  private createDialogElement(viewRef: ViewRef, args: IDialogArgs, injector: Injector, dialogRef: IDialogRef, zIndex: number): HTMLElement {\n    const embeddedViewRef = viewRef as EmbeddedViewRef<unknown>;\n\n    const dialogElement = document.createElement('div');\n    dialogElement.classList.add('dialog-container');\n    dialogElement.style.zIndex = zIndex.toString();\n    for (const rootNode of embeddedViewRef.rootNodes) {\n      dialogElement.appendChild(rootNode as Node);\n    }\n\n    if (args.containerCss) {\n      Object.keys(args.containerCss).forEach(key => {\n        (dialogElement.style as unknown as Record<string, string>)[key] = args.containerCss![key];\n      });\n    }\n    if (args.header) {\n      const headerElement = document.createElement('div');\n      headerElement.classList.add('dialog-header');\n      const titleElement = document.createElement('div');\n      titleElement.classList.add('dialog-title');\n      titleElement.innerHTML = args.header.title;\n      headerElement.appendChild(titleElement);\n      if (args.header.allowClose) {\n        const iconRef: ComponentRef<IconComponent> = createComponent(IconComponent, {\n          environmentInjector: this.environmentInjector,\n          elementInjector: injector,\n        });\n        const iconElement = (iconRef.hostView as EmbeddedViewRef<unknown>).rootNodes[0] as HTMLElement;\n        iconElement.textContent = 'close';\n        iconElement.setAttribute('tabindex', '0');\n        iconElement.addEventListener('click', () => {\n          dialogRef.close();\n        });\n        iconElement.addEventListener('keydown', (e: KeyboardEvent) => {\n          if (e.key === 'Enter' || e.key === ' ') {\n            dialogRef.close();\n            e.preventDefault();\n          }\n        });\n        this.appRef.attachView(iconRef.hostView);\n        headerElement.appendChild(iconElement);\n      }\n      dialogElement.insertBefore(headerElement, dialogElement.firstChild);\n    }\n    return dialogElement;\n  }\n\n  private static manageDialogPosition(dialogElement: HTMLElement, args: IDialogPositionAndSizeArgs, stackOptions: StackOptions): Subscription | null {\n    // Temporarily position the dialog offscreen to get its dimensions\n    dialogElement.style.top = '-9999px';\n    dialogElement.style.left = '-9999px';\n\n    setTimeout(() => {\n      DialogService.calculateAndSetPosition(dialogElement, args, stackOptions);\n    }, 10);\n\n    let resizeSubscription: Subscription | null = null;\n\n    // Handle window resize event\n    resizeSubscription = fromEvent(window, 'resize').subscribe(() => {\n      DialogService.calculateAndSetPosition(dialogElement, args, stackOptions);\n    });\n\n    // Monitor changes to the size of the dialog\n    const resizeObserver = new ResizeObserver(() => {\n      DialogService.calculateAndSetPosition(dialogElement, args, stackOptions);\n    });\n\n    // Start observing the dialog element\n    resizeObserver.observe(dialogElement);\n\n    // Monitor changes to the size of the insertAfterElement\n    const insertAfterResizeObserver = new ResizeObserver(() => {\n      DialogService.calculateAndSetPosition(dialogElement, args, stackOptions);\n    });\n    // Start observing the referenceElement if it exists\n    const referenceElement = this.getReferenceElement(stackOptions);\n    if (referenceElement) {\n      insertAfterResizeObserver.observe(referenceElement);\n    }\n    // Return a subscription-like object that also disconnects the observer\n    return new Subscription(() => {\n      resizeObserver.disconnect();\n      resizeSubscription?.unsubscribe();\n      insertAfterResizeObserver.disconnect();\n    });\n  }\n  private static getReferenceElement(stackOptions: StackOptions): HTMLElement | undefined {\n    if (stackOptions instanceof LocalStackOptions) {\n      return stackOptions.referenceElement ?? stackOptions.insertAfterElement;\n    } else if (stackOptions instanceof GlobalStackOptions) {\n      return stackOptions.referenceElement;\n    }\n    return undefined;\n  }\n  private static calculateAndSetPosition(dialogElement: HTMLElement, args: IDialogPositionAndSizeArgs, stackOptions: StackOptions) {\n    const referenceElement = this.getReferenceElement(stackOptions);\n    const referenceElementRect = referenceElement?.getBoundingClientRect();\n    const getWidthHeight = (name: string, defaultValue: string, value: string | ((referenceElementRect: DOMRect) => string | undefined) | undefined) => {\n      if (value === undefined) {\n        return defaultValue;\n      } else if (typeof value === 'function') {\n        if (!referenceElementRect) {\n          throw new Error(`When using a function for ${name}, insertAfterElement must be provided.`);\n        }\n        return value(referenceElementRect) ?? defaultValue;\n      } else {\n        return value;\n      }\n    };\n\n    dialogElement.style.minWidth = getWidthHeight('minWidth', 'auto', args.minWidth);\n    dialogElement.style.minHeight = getWidthHeight('minHeight', '0', args.minHeight);\n    dialogElement.style.width = getWidthHeight('width', 'fit-content', args.width);\n    dialogElement.style.height = getWidthHeight('height', 'fit-content', args.height);\n    dialogElement.style.maxWidth = getWidthHeight('maxWidth', 'none', args.maxWidth);\n    dialogElement.style.maxHeight = getWidthHeight('maxHeight', 'none', args.maxHeight);\n\n    dialogElement.style.overflowX = 'hidden';\n    dialogElement.style.overflowY = 'hidden';\n    const actualWidth = dialogElement.offsetWidth;\n    const actualHeight = dialogElement.offsetHeight;\n\n    const getTopLeft = (name: string, value: string | ((actualWidth: number, actualHeight: number, referenceElementRect?: DOMRect) => string | undefined) | undefined) => {\n      if (value === undefined) {\n        return 'auto';\n      } else if (typeof value === 'function') {\n        return value(actualWidth, actualHeight, referenceElementRect) ?? 'auto';\n      } else {\n        return value;\n      }\n    };\n    dialogElement.style.top = getTopLeft('top', args.top);\n    dialogElement.style.left = getTopLeft('left', args.left);\n\n    // if dialog is higher than the available page height, set it to scroll\n    if (actualHeight + dialogElement.offsetTop > window.innerHeight) {\n      dialogElement.style.height = `calc(100vh - ${dialogElement.offsetTop}px)`;\n      dialogElement.style.overflowY = 'auto';\n    }\n    // if dialog is wider than the available page width, set it to scroll\n    if (actualWidth + dialogElement.offsetLeft > window.innerWidth) {\n      dialogElement.style.width = `calc(100vw - ${dialogElement.offsetLeft}px)`;\n      dialogElement.style.overflowX = 'auto';\n    }\n  }\n\n  private trapFocus(): {\n    elements: {\n      element: FocusableElement;\n      originalTabIndex: number;\n    }[];\n    focusedElement: HTMLElement | null;\n  } {\n    const tabbableElements = tabbable(document.body);\n    const elementsTable = tabbableElements.map(e => ({\n      element: e,\n      originalTabIndex: e.tabIndex,\n    }));\n    elementsTable.forEach(e => (e.element.tabIndex = -1));\n    const focusedElement = document.activeElement as HTMLElement | null;\n    if (focusedElement) {\n      focusedElement.blur();\n    }\n    return {\n      elements: elementsTable,\n      focusedElement: focusedElement,\n    };\n  }\n  private restoreFocus(obj: {\n    elements: {\n      element: FocusableElement;\n      originalTabIndex: number;\n    }[];\n    focusedElement: HTMLElement | null;\n  }) {\n    obj.elements.forEach(e => (e.element.tabIndex = e.originalTabIndex));\n    if (obj.focusedElement) {\n      obj.focusedElement.focus();\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ConfirmationDialogComponent } from './confirmation-dialog.component';\nimport { TableauUiButtonModule } from 'tableau-ui-angular/button';\nimport { DialogService } from './dialog.service';\n@NgModule({\n  imports: [CommonModule, TableauUiButtonModule],\n  declarations: [ConfirmationDialogComponent],\n  providers: [DialogService],\n})\nexport class TableauUiDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}