primeng
Version:
PrimeNG is a premium UI library for Angular featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBlock,
1 lines • 78.9 kB
Source Map (JSON)
{"version":3,"file":"primeng-dialog.mjs","sources":["../../src/dialog/style/dialogstyle.ts","../../src/dialog/dialog.ts","../../src/dialog/primeng-dialog.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { style } from '@primeuix/styles/dialog';\nimport { BaseStyle } from 'primeng/base';\n\n/* Position */\nconst inlineStyles = {\n mask: ({ instance }) => {\n const position = instance.position();\n const modal = instance.modal();\n const maskStyle = instance.maskStyle();\n\n return {\n position: 'fixed',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n display: 'flex',\n justifyContent: position === 'left' || position === 'topleft' || position === 'bottomleft' ? 'flex-start' : position === 'right' || position === 'topright' || position === 'bottomright' ? 'flex-end' : 'center',\n alignItems: position === 'top' || position === 'topleft' || position === 'topright' ? 'flex-start' : position === 'bottom' || position === 'bottomleft' || position === 'bottomright' ? 'flex-end' : 'center',\n pointerEvents: modal ? 'auto' : 'none',\n ...maskStyle\n };\n },\n root: ({ instance }) => {\n const style = instance.style();\n\n return {\n display: 'flex',\n flexDirection: 'column',\n pointerEvents: 'auto',\n ...style\n };\n }\n};\n\nconst classes = {\n mask: ({ instance }) => {\n const positions = ['left', 'right', 'top', 'topleft', 'topright', 'bottom', 'bottomleft', 'bottomright'];\n const position = instance.position();\n const pos = positions.find((item) => item === position);\n\n return ['p-dialog-mask', { 'p-overlay-mask': instance.modal() }, pos ? `p-dialog-${pos}` : ''];\n },\n root: ({ instance }) => [\n 'p-dialog p-component',\n {\n 'p-dialog-maximized': instance.maximizable() && instance.maximized()\n }\n ],\n header: 'p-dialog-header',\n title: 'p-dialog-title',\n resizeHandle: 'p-resizable-handle',\n headerActions: 'p-dialog-header-actions',\n pcMaximizeButton: 'p-dialog-maximize-button',\n pcCloseButton: 'p-dialog-close-button',\n content: () => ['p-dialog-content'],\n footer: 'p-dialog-footer'\n};\n\n@Injectable()\nexport class DialogStyle extends BaseStyle {\n name = 'dialog';\n\n style = style;\n\n classes = classes;\n\n inlineStyles = inlineStyles;\n}\n\n/**\n *\n * Dialog is a container to display content in an overlay window.\n *\n * [Live Demo](https://www.primeng.org/dialog)\n *\n * @module dialogstyle\n *\n */\nexport enum DialogClasses {\n /**\n * Class name of the mask element\n */\n mask = 'p-dialog-mask',\n /**\n * Class name of the root element\n */\n root = 'p-dialog',\n /**\n * Class name of the header element\n */\n header = 'p-dialog-header',\n /**\n * Class name of the title element\n */\n title = 'p-dialog-title',\n /**\n * Class name of the header actions element\n */\n headerActions = 'p-dialog-header-actions',\n /**\n * Class name of the maximize button element\n */\n pcMaximizeButton = 'p-dialog-maximize-button',\n /**\n * Class name of the close button element\n */\n pcCloseButton = 'p-dialog-close-button',\n /**\n * Class name of the content element\n */\n content = 'p-dialog-content',\n /**\n * Class name of the footer element\n */\n footer = 'p-dialog-footer'\n}\n\nexport interface DialogStyle extends BaseStyle {}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n input,\n model,\n NgModule,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n ViewRef\n} from '@angular/core';\nimport { MotionEvent, MotionOptions } from '@primeuix/motion';\nimport { addStyle, appendChild, getOuterHeight, getOuterWidth, getViewport, hasClass, removeClass, setAttribute, uuid } from '@primeuix/utils';\nimport { SharedModule, TranslationKeys } from 'primeng/api';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind } from 'primeng/bind';\nimport { ButtonDirective } from 'primeng/button';\nimport type { ButtonDirectiveOptions } from 'primeng/types/button';\nimport { blockBodyScroll, DomHandler, unblockBodyScroll } from 'primeng/dom';\nimport { FocusTrap } from 'primeng/focustrap';\nimport { OverlayService } from 'primeng/api';\nimport { Times as TimesIcon } from '@primeicons/angular/times';\nimport { WindowMaximize as WindowMaximizeIcon } from '@primeicons/angular/window-maximize';\nimport { WindowMinimize as WindowMinimizeIcon } from '@primeicons/angular/window-minimize';\nimport { MotionModule } from 'primeng/motion';\nimport type { AppendTo, CSSProperties } from 'primeng/types/shared';\nimport { Nullable, VoidListener } from 'primeng/ts-helpers';\nimport { DialogHeaderTemplateContext, DialogPassThrough, DialogPosition } from 'primeng/types/dialog';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { DialogStyle } from './style/dialogstyle';\n\nconst DIALOG_INSTANCE = new InjectionToken<Dialog>('DIALOG_INSTANCE');\n\n/**\n * Dialog is a container to display content in an overlay window.\n * @group Components\n */\n@Component({\n selector: 'p-dialog',\n standalone: true,\n imports: [NgTemplateOutlet, ButtonDirective, FocusTrap, TimesIcon, WindowMaximizeIcon, WindowMinimizeIcon, SharedModule, Bind, MotionModule],\n template: `\n @if (renderMask()) {\n <div\n [class]=\"cn(cx('mask'), maskStyleClass())\"\n [style]=\"sx('mask')\"\n [pBind]=\"ptm('mask')\"\n [pMotion]=\"maskVisible\"\n [pMotionAppear]=\"true\"\n [pMotionEnterActiveClass]=\"maskEnterActiveClass()\"\n [pMotionLeaveActiveClass]=\"maskLeaveActiveClass()\"\n [pMotionOptions]=\"computedMaskMotionOptions()\"\n (pMotionOnAfterLeave)=\"onMaskAfterLeave()\"\n [attr.data-p-scrollblocker-active]=\"scrollBlockerActive()\"\n [attr.data-p]=\"dataP()\"\n >\n @if (renderDialog()) {\n <div\n #container\n [class]=\"cn(cx('root'), styleClass())\"\n [style]=\"sx('root')\"\n [pBind]=\"ptm('root')\"\n pFocusTrap\n [pFocusTrapDisabled]=\"focusTrapDisabled()\"\n [pMotion]=\"visible()\"\n [pMotionAppear]=\"true\"\n [pMotionName]=\"'p-dialog'\"\n [pMotionOptions]=\"computedMotionOptions()\"\n (pMotionOnBeforeEnter)=\"onBeforeEnter($event)\"\n (pMotionOnAfterEnter)=\"onAfterEnter($event)\"\n (pMotionOnBeforeLeave)=\"onBeforeLeave($event)\"\n (pMotionOnAfterLeave)=\"onAfterLeave($event)\"\n [attr.role]=\"role()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-modal]=\"true\"\n [attr.data-p]=\"dataP()\"\n >\n @if (headlessTemplate()) {\n <ng-container *ngTemplateOutlet=\"headlessTemplate()\"></ng-container>\n } @else {\n @if (resizable()) {\n <div [class]=\"cx('resizeHandle')\" [pBind]=\"ptm('resizeHandle')\" [style.z-index]=\"90\" (mousedown)=\"initResize($event)\"></div>\n }\n @if (showHeader()) {\n <div #titlebar [class]=\"cx('header')\" [pBind]=\"ptm('header')\" (mousedown)=\"initDrag($event)\">\n @if (!headerTemplate()) {\n <span [id]=\"ariaLabelledBy()\" [class]=\"cx('title')\" [pBind]=\"ptm('title')\">{{ header() }}</span>\n }\n <ng-container *ngTemplateOutlet=\"headerTemplate(); context: headerTemplateContext()\"></ng-container>\n <div [class]=\"cx('headerActions')\" [pBind]=\"ptm('headerActions')\">\n @if (maximizable()) {\n <button\n type=\"button\"\n iconOnly\n [pButton]=\"maximizeButtonProps()\"\n [class]=\"cx('pcMaximizeButton')\"\n [tabindex]=\"maximizeButtonTabindex()\"\n [attr.aria-label]=\"maximizeButtonAriaLabel()\"\n [attr.data-pc-group-section]=\"'headericon'\"\n [pButtonPT]=\"ptm('pcMaximizeButton')\"\n [pButtonUnstyled]=\"unstyled()\"\n (click)=\"maximize()\"\n (keydown.enter)=\"maximize()\"\n >\n @if (showToggleIcon()) {\n <span [class]=\"toggleIcon()\"></span>\n }\n @if (showDefaultMaximizeIcon()) {\n @if (showMaximizeSvg()) {\n <svg data-p-icon=\"window-maximize\" />\n }\n @if (showMinimizeSvg()) {\n <svg data-p-icon=\"window-minimize\" />\n }\n }\n @if (showMaximizeIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"maximizeIconTemplate()\"></ng-container>\n }\n @if (showMinimizeIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"minimizeIconTemplate()\"></ng-container>\n }\n </button>\n }\n @if (closable()) {\n <button\n type=\"button\"\n iconOnly\n [pButton]=\"closeButtonProps()\"\n [class]=\"cx('pcCloseButton')\"\n [tabindex]=\"closeTabindex()\"\n [attr.aria-label]=\"closeAriaLabel()\"\n [attr.data-pc-group-section]=\"'headericon'\"\n [pButtonPT]=\"ptm('pcCloseButton')\"\n [pButtonUnstyled]=\"unstyled()\"\n (click)=\"close($event)\"\n (keydown.enter)=\"close($event)\"\n >\n @if (showDefaultCloseIcon) {\n @if (closeIcon()) {\n <span [class]=\"closeIcon()\"></span>\n } @else {\n <svg data-p-icon=\"times\" />\n }\n }\n @if (closeIconTemplate()) {\n <ng-container *ngTemplateOutlet=\"closeIconTemplate()\"></ng-container>\n }\n </button>\n }\n </div>\n </div>\n }\n <div #content [class]=\"cn(cx('content'), contentStyleClass())\" [style]=\"contentStyle()\" [pBind]=\"ptm('content')\">\n <ng-content></ng-content>\n @if (contentTemplate()) {\n <ng-container *ngTemplateOutlet=\"contentTemplate()\"></ng-container>\n }\n </div>\n @if (footerTemplate()) {\n <div #footer [class]=\"cx('footer')\" [pBind]=\"ptm('footer')\">\n <ng-content select=\"p-footer\"></ng-content>\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </div>\n }\n }\n </div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [DialogStyle, { provide: DIALOG_INSTANCE, useExisting: Dialog }, { provide: PARENT_INSTANCE, useExisting: Dialog }],\n hostDirectives: [Bind]\n})\nexport class Dialog extends BaseComponent<DialogPassThrough> {\n componentName = 'Dialog';\n\n hostName = input<string>('');\n\n $pcDialog: Dialog | undefined = inject(DIALOG_INSTANCE, { optional: true, skipSelf: true }) ?? undefined;\n\n bindDirectiveInstance = inject(Bind, { self: true });\n\n onAfterViewChecked(): void {\n this.bindDirectiveInstance.setAttrs(this.ptm('host'));\n }\n\n /**\n * Title text of the dialog.\n * @group Props\n */\n header = input<string>();\n /**\n * Enables dragging to change the position using header.\n * @group Props\n */\n draggable = input(true, { transform: booleanAttribute });\n /**\n * Enables resizing of the content.\n * @group Props\n */\n resizable = input(true, { transform: booleanAttribute });\n /**\n * Style of the content section.\n * @group Props\n */\n contentStyle = input<CSSProperties>();\n /**\n * Style class of the content.\n * @group Props\n */\n contentStyleClass = input<string>();\n /**\n * Defines if background should be blocked when dialog is displayed.\n * @group Props\n */\n modal = input(false, { transform: booleanAttribute });\n /**\n * Specifies if pressing escape key should hide the dialog.\n * @group Props\n */\n closeOnEscape = input(true, { transform: booleanAttribute });\n /**\n * Specifies if clicking the modal background should hide the dialog.\n * @group Props\n */\n dismissableMask = input(false, { transform: booleanAttribute });\n /**\n * When enabled dialog is displayed in RTL direction.\n * @group Props\n */\n rtl = input(false, { transform: booleanAttribute });\n /**\n * Adds a close icon to the header to hide the dialog.\n * @group Props\n */\n closable = input(true, { transform: booleanAttribute });\n /**\n * Object literal to define widths per screen size.\n * @group Props\n */\n breakpoints = input<Record<string, string>>();\n /**\n * Style class of the component.\n * @group Props\n */\n styleClass = input<string>();\n /**\n * Style class of the mask.\n * @group Props\n */\n maskStyleClass = input<string>();\n /**\n * Style of the mask.\n * @group Props\n */\n maskStyle = input<CSSProperties>();\n /**\n * Whether to show the header or not.\n * @group Props\n */\n showHeader = input(true, { transform: booleanAttribute });\n /**\n * Whether background scroll should be blocked when dialog is visible.\n * @group Props\n */\n blockScroll = input(false, { transform: booleanAttribute });\n /**\n * Whether to automatically manage layering.\n * @group Props\n */\n autoZIndex = input(true, { transform: booleanAttribute });\n /**\n * Base zIndex value to use in layering.\n * @group Props\n */\n baseZIndex = input(0, { transform: numberAttribute });\n /**\n * Minimum value for the left coordinate of dialog in dragging.\n * @group Props\n */\n minX = input(0, { transform: numberAttribute });\n /**\n * Minimum value for the top coordinate of dialog in dragging.\n * @group Props\n */\n minY = input(0, { transform: numberAttribute });\n /**\n * When enabled, first focusable element receives focus on show.\n * @group Props\n */\n focusOnShow = input(true, { transform: booleanAttribute });\n /**\n * Whether the dialog can be displayed full screen.\n * @group Props\n */\n maximizable = input(false, { transform: booleanAttribute });\n /**\n * Keeps dialog in the viewport.\n * @group Props\n */\n keepInViewport = input(true, { transform: booleanAttribute });\n /**\n * When enabled, can only focus on elements inside the dialog.\n * @group Props\n */\n focusTrap = input(true, { transform: booleanAttribute });\n /**\n * The motion options for the mask.\n * @group Props\n */\n maskMotionOptions = input<MotionOptions | undefined>(undefined);\n\n computedMaskMotionOptions = computed<MotionOptions>(() => {\n return {\n ...this.ptm('maskMotion'),\n ...this.maskMotionOptions()\n };\n });\n\n maskEnterActiveClass = computed(() => (this.modal() ? 'p-overlay-mask-enter-active' : ''));\n\n maskLeaveActiveClass = computed(() => (this.modal() ? 'p-overlay-mask-leave-active' : ''));\n /**\n * The motion options.\n * @group Props\n */\n motionOptions = input<MotionOptions | undefined>(undefined);\n\n computedMotionOptions = computed<MotionOptions>(() => {\n return {\n ...this.ptm('motion'),\n ...this.motionOptions()\n };\n });\n /**\n * Name of the close icon.\n * @group Props\n */\n closeIcon = input<string>();\n /**\n * Defines a string that labels the close button for accessibility.\n * @group Props\n */\n closeAriaLabel = input<string>();\n /**\n * Index of the close button in tabbing order.\n * @group Props\n */\n closeTabindex = input<string>('0');\n /**\n * Name of the minimize icon.\n * @group Props\n */\n minimizeIcon = input<string>();\n /**\n * Name of the maximize icon.\n * @group Props\n */\n maximizeIcon = input<string>();\n /**\n * Configuration object forwarded to the underlying button.\n * @group Props\n */\n closeButtonProps = input<ButtonDirectiveOptions>({\n severity: 'secondary',\n variant: 'text',\n rounded: true\n });\n /**\n * Configuration object forwarded to the underlying button.\n * @group Props\n */\n maximizeButtonProps = input<ButtonDirectiveOptions>({\n severity: 'secondary',\n variant: 'text',\n rounded: true\n });\n /**\n * Specifies the visibility of the dialog.\n * @group Props\n */\n visible = model<boolean>(false);\n /**\n * Inline style of the component.\n * @group Props\n */\n style = input<CSSProperties>();\n /**\n * Position of the dialog, options are \"center\", \"top\", \"bottom\", \"left\", \"right\", \"topleft\", \"topright\", \"bottomleft\" or \"bottomright\".\n * @group Props\n */\n position = input<DialogPosition>();\n /**\n * Role attribute of html element.\n * @group Emits\n */\n role = input<string>('dialog');\n /**\n * Target element to attach the overlay, valid values are \"body\" or a local ng-template variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]=\"mydiv\" for a div element having #mydiv as variable name).\n * @defaultValue 'self'\n * @group Props\n */\n appendTo = input<AppendTo>(undefined);\n /**\n * Callback to invoke when dialog is shown.\n * @group Emits\n */\n onShow = output<any>();\n /**\n * Callback to invoke when dialog is hidden.\n * @group Emits\n */\n onHide = output<any>();\n /**\n * Callback to invoke when dialog resizing is initiated.\n * @param {MouseEvent} event - Mouse event.\n * @group Emits\n */\n onResizeInit = output<MouseEvent>();\n /**\n * Callback to invoke when dialog resizing is completed.\n * @param {MouseEvent} event - Mouse event.\n * @group Emits\n */\n onResizeEnd = output<MouseEvent>();\n /**\n * Callback to invoke when dialog dragging is initiated.\n * @param {MouseEvent} event - Mouse event.\n * @group Emits\n */\n onDragStart = output<MouseEvent>();\n /**\n * Callback to invoke when dialog dragging is completed.\n * @param {DragEvent} event - Drag event.\n * @group Emits\n */\n onDragEnd = output<DragEvent>();\n /**\n * Callback to invoke when dialog maximized or unmaximized.\n * @group Emits\n */\n onMaximize = output<{ maximized: boolean | undefined }>();\n\n headerViewChild = viewChild<ElementRef>('titlebar');\n\n contentViewChild = viewChild<ElementRef>('content');\n\n footerViewChild = viewChild<ElementRef>('footer');\n\n /**\n * Custom header template.\n * @group Templates\n */\n headerTemplate = contentChild<TemplateRef<void>>('header', { descendants: false });\n\n /**\n * Custom content template.\n * @group Templates\n */\n contentTemplate = contentChild<TemplateRef<void>>('content', { descendants: false });\n\n /**\n * Custom footer template.\n * @group Templates\n */\n footerTemplate = contentChild<TemplateRef<void>>('footer', { descendants: false });\n\n /**\n * Custom close icon template.\n * @group Templates\n */\n closeIconTemplate = contentChild<TemplateRef<void>>('closeicon', { descendants: false });\n\n /**\n * Custom maximize icon template.\n * @group Templates\n */\n maximizeIconTemplate = contentChild<TemplateRef<void>>('maximizeicon', { descendants: false });\n\n /**\n * Custom minimize icon template.\n * @group Templates\n */\n minimizeIconTemplate = contentChild<TemplateRef<void>>('minimizeicon', { descendants: false });\n\n /**\n * Custom headless template.\n * @group Templates\n */\n headlessTemplate = contentChild<TemplateRef<void>>('headless', { descendants: false });\n\n $appendTo = computed(() => this.appendTo() || this.config.overlayAppendTo());\n\n renderMask = signal<boolean>(false);\n\n renderDialog = signal<boolean>(false);\n\n maskVisible: boolean | undefined;\n\n container = signal<Nullable<HTMLElement>>(null);\n\n wrapper: Nullable<HTMLElement>;\n\n dragging: boolean | undefined;\n\n ariaId = uuid('pn_id_') + '_header';\n\n ariaLabelledBy = computed(() => (this.header() !== null ? this.ariaId : null));\n\n headerTemplateContext = computed<DialogHeaderTemplateContext>(() => ({ ariaLabelledBy: this.ariaLabelledBy() }));\n\n documentDragListener: VoidListener;\n\n documentDragEndListener: VoidListener;\n\n resizing: boolean | undefined;\n\n documentResizeListener: VoidListener;\n\n documentResizeEndListener: VoidListener;\n\n documentEscapeListener: VoidListener;\n\n maskClickListener: VoidListener;\n\n lastPageX: number | undefined;\n\n lastPageY: number | undefined;\n\n preventVisibleChangePropagation: boolean | undefined;\n\n maximized = signal(false);\n\n preMaximizeContentHeight: number | undefined;\n\n preMaximizeContainerWidth: number | undefined;\n\n preMaximizeContainerHeight: number | undefined;\n\n preMaximizePageX: number | undefined;\n\n preMaximizePageY: number | undefined;\n\n id: string = uuid('pn_id_');\n\n _style: Record<string, string> = {};\n\n originalStyle: Record<string, string> | undefined;\n\n styleElement: HTMLStyleElement | null = null;\n\n _componentStyle = inject(DialogStyle);\n\n overlayService = inject(OverlayService);\n\n private zIndexForLayering?: number;\n\n get maximizeLabel(): string {\n return this.translate(TranslationKeys.ARIA, 'maximizeLabel');\n }\n\n get minimizeLabel(): string {\n return this.translate(TranslationKeys.ARIA, 'minimizeLabel');\n }\n\n maximizeButtonAriaLabel = computed(() => (this.maximized() ? this.minimizeLabel : this.maximizeLabel));\n\n maximizeButtonTabindex = computed(() => (this.maximizable() ? '0' : '-1'));\n\n toggleIcon = computed(() => (this.maximized() ? this.minimizeIcon() : this.maximizeIcon()));\n\n showToggleIcon = computed(() => !!this.maximizeIcon() && !this.maximizeIconTemplate() && !this.minimizeIconTemplate());\n\n showDefaultMaximizeIcon = computed(() => !this.maximizeIcon());\n\n showMaximizeSvg = computed(() => !this.maximized() && !this.maximizeIconTemplate());\n\n showMinimizeSvg = computed(() => this.maximized() && !this.minimizeIconTemplate());\n\n showMaximizeIconTemplate = computed(() => !this.maximized() && !!this.maximizeIconTemplate());\n\n showMinimizeIconTemplate = computed(() => this.maximized() && !!this.minimizeIconTemplate());\n\n showDefaultCloseIcon = computed(() => !this.closeIconTemplate());\n\n scrollBlockerActive = computed(() => this.modal() || this.blockScroll());\n\n focusTrapDisabled = computed(() => this.focusTrap() === false);\n\n constructor() {\n super();\n effect(() => {\n const isVisible = this.visible();\n untracked(() => {\n if (isVisible && !this.maskVisible) {\n this.maskVisible = true;\n this.renderMask.set(true);\n this.renderDialog.set(true);\n }\n });\n });\n }\n\n onInit() {\n if (this.breakpoints()) {\n this.createStyle();\n }\n }\n\n _focus(focusParentElement?: HTMLElement): boolean {\n if (focusParentElement) {\n let _focusableElements = DomHandler.getFocusableElements(focusParentElement);\n if (_focusableElements && _focusableElements.length > 0) {\n _focusableElements[0].focus();\n return true;\n }\n }\n\n return false;\n }\n\n focus(focusParentElement?: HTMLElement) {\n const element = focusParentElement ?? this.contentViewChild()?.nativeElement;\n let focused = this._focus(element);\n\n if (!focused) {\n focused = this._focus(this.footerViewChild()?.nativeElement);\n if (!focused) {\n focused = this._focus(this.headerViewChild()?.nativeElement);\n if (!focused) {\n this._focus(this.contentViewChild()?.nativeElement);\n }\n }\n }\n }\n\n close(event: Event) {\n this.visible.set(false);\n event.preventDefault();\n }\n\n enableModality() {\n this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event: MouseEvent) => {\n if (this.wrapper && this.wrapper.isSameNode(event.target as Node)) {\n if (this.closable() && this.dismissableMask()) {\n this.close(event);\n } else if (this.focusTrap()) {\n // keep focus within the dialog so the trap is not defeated by a mask click\n event.preventDefault();\n }\n }\n });\n\n if (this.modal()) {\n blockBodyScroll();\n }\n }\n\n disableModality() {\n if (this.wrapper) {\n this.unbindMaskClickListener();\n\n // for nested dialogs w/modal\n const scrollBlockers = document.querySelectorAll('[data-p-scrollblocker-active=\"true\"]');\n\n if (this.modal() && scrollBlockers && scrollBlockers.length == 1) {\n unblockBodyScroll();\n }\n\n if (!(this.cd as ViewRef).destroyed) {\n this.cd.detectChanges();\n }\n }\n }\n\n maximize() {\n this.maximized.update((v) => !v);\n\n if (!this.modal() && !this.blockScroll()) {\n if (this.maximized()) {\n blockBodyScroll();\n } else {\n unblockBodyScroll();\n }\n }\n\n this.onMaximize.emit({ maximized: this.maximized() });\n }\n\n unbindMaskClickListener() {\n if (this.maskClickListener) {\n this.maskClickListener();\n this.maskClickListener = null;\n }\n }\n\n moveOnTop() {\n if (this.autoZIndex()) {\n ZIndexUtils.set('modal', this.container(), this.baseZIndex() + this.config.zIndex.modal);\n (this.wrapper as HTMLElement).style.zIndex = String(parseInt((this.container() as HTMLDivElement).style.zIndex, 10) - 1);\n } else {\n this.zIndexForLayering = ZIndexUtils.generateZIndex('modal', (this.baseZIndex() ?? 0) + this.config.zIndex.modal);\n }\n }\n\n createStyle() {\n if (isPlatformBrowser(this.platformId)) {\n if (!this.styleElement && !this.$unstyled()) {\n const styleElement = this.renderer.createElement('style') as HTMLStyleElement;\n setAttribute(styleElement, 'nonce', this.config?.csp()?.nonce);\n this.renderer.appendChild(this.document.head, styleElement);\n let innerHTML = '';\n for (let breakpoint in this.breakpoints()) {\n innerHTML += `\n @media screen and (max-width: ${breakpoint}) {\n .p-dialog[${this.id}]:not(.p-dialog-maximized) {\n width: ${this.breakpoints()![breakpoint]} !important;\n }\n }\n `;\n }\n\n this.renderer.setProperty(styleElement, 'innerHTML', innerHTML);\n setAttribute(styleElement, 'nonce', this.config?.csp()?.nonce);\n this.styleElement = styleElement;\n }\n }\n }\n\n initDrag(event: MouseEvent) {\n const target = event.target as HTMLElement;\n const closestDiv = target.closest('div');\n\n if (closestDiv?.getAttribute('data-pc-section') === 'headeractions') {\n return;\n }\n\n if (this.draggable()) {\n this.dragging = true;\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n\n (this.container() as HTMLDivElement).style.margin = '0';\n this.document.body.setAttribute('data-p-unselectable-text', 'true');\n !this.$unstyled() && addStyle(this.document.body, { 'user-select': 'none' });\n\n this.onDragStart.emit(event);\n }\n }\n\n onDrag(event: MouseEvent) {\n if (this.dragging && this.container()) {\n const containerWidth = getOuterWidth(this.container() as HTMLDivElement);\n const containerHeight = getOuterHeight(this.container() as HTMLDivElement);\n const deltaX = event.pageX - (this.lastPageX as number);\n const deltaY = event.pageY - (this.lastPageY as number);\n const offset = this.container()!.getBoundingClientRect();\n\n const containerComputedStyle = getComputedStyle(this.container() as HTMLDivElement);\n\n const leftMargin = parseFloat(containerComputedStyle.marginLeft);\n const topMargin = parseFloat(containerComputedStyle.marginTop);\n\n const leftPos = offset.left + deltaX - leftMargin;\n const topPos = offset.top + deltaY - topMargin;\n const viewport = getViewport();\n\n this.container()!.style.position = 'fixed';\n\n if (this.keepInViewport()) {\n if (leftPos >= this.minX() && leftPos + containerWidth < viewport.width) {\n this._style.left = `${leftPos}px`;\n this.lastPageX = event.pageX;\n this.container()!.style.left = `${leftPos}px`;\n }\n\n if (topPos >= this.minY() && topPos + containerHeight < viewport.height) {\n this._style.top = `${topPos}px`;\n this.lastPageY = event.pageY;\n this.container()!.style.top = `${topPos}px`;\n }\n } else {\n this.lastPageX = event.pageX;\n this.container()!.style.left = `${leftPos}px`;\n this.lastPageY = event.pageY;\n this.container()!.style.top = `${topPos}px`;\n }\n\n this.overlayService.emitParentDrag(this.container()!);\n }\n }\n\n endDrag(event: DragEvent) {\n if (this.dragging) {\n this.dragging = false;\n this.document.body.removeAttribute('data-p-unselectable-text');\n !this.$unstyled() && (this.document.body.style['user-select'] = '');\n this.cd.detectChanges();\n this.onDragEnd.emit(event);\n }\n }\n\n resetPosition() {\n (this.container() as HTMLDivElement).style.position = '';\n (this.container() as HTMLDivElement).style.left = '';\n (this.container() as HTMLDivElement).style.top = '';\n (this.container() as HTMLDivElement).style.margin = '';\n }\n\n //backward compatibility\n center() {\n this.resetPosition();\n }\n\n initResize(event: MouseEvent) {\n if (this.resizable()) {\n this.resizing = true;\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n\n this.document.body.setAttribute('data-p-unselectable-text', 'true');\n !this.$unstyled() && addStyle(this.document.body, { 'user-select': 'none' });\n this.onResizeInit.emit(event);\n }\n }\n\n onResize(event: MouseEvent) {\n if (this.resizing) {\n let deltaX = event.pageX - (this.lastPageX as number);\n let deltaY = event.pageY - (this.lastPageY as number);\n let containerWidth = getOuterWidth(this.container() as HTMLDivElement);\n let containerHeight = getOuterHeight(this.container() as HTMLDivElement);\n let contentHeight = getOuterHeight(this.contentViewChild()?.nativeElement);\n let newWidth = containerWidth + deltaX;\n let newHeight = containerHeight + deltaY;\n let minWidth = (this.container() as HTMLDivElement).style.minWidth;\n let minHeight = (this.container() as HTMLDivElement).style.minHeight;\n let offset = (this.container() as HTMLDivElement).getBoundingClientRect();\n let viewport = getViewport();\n let hasBeenDragged = !parseInt((this.container() as HTMLDivElement).style.top) || !parseInt((this.container() as HTMLDivElement).style.left);\n\n if (hasBeenDragged) {\n newWidth += deltaX;\n newHeight += deltaY;\n }\n\n if ((!minWidth || newWidth > parseInt(minWidth)) && offset.left + newWidth < viewport.width) {\n this._style.width = newWidth + 'px';\n (this.container() as HTMLDivElement).style.width = this._style.width;\n }\n\n if ((!minHeight || newHeight > parseInt(minHeight)) && offset.top + newHeight < viewport.height) {\n this.contentViewChild()!.nativeElement.style.height = contentHeight + newHeight - containerHeight + 'px';\n\n if (this._style.height) {\n this._style.height = newHeight + 'px';\n (this.container() as HTMLDivElement).style.height = this._style.height;\n }\n }\n\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n }\n }\n\n resizeEnd(event: MouseEvent) {\n if (this.resizing) {\n this.resizing = false;\n this.document.body.removeAttribute('data-p-unselectable-text');\n !this.$unstyled() && (this.document.body.style['user-select'] = '');\n this.onResizeEnd.emit(event);\n }\n }\n\n bindGlobalListeners() {\n if (this.draggable()) {\n this.bindDocumentDragListener();\n this.bindDocumentDragEndListener();\n }\n\n if (this.resizable()) {\n this.bindDocumentResizeListeners();\n }\n\n if (this.closeOnEscape() && this.closable()) {\n this.bindDocumentEscapeListener();\n }\n }\n\n unbindGlobalListeners() {\n this.unbindDocumentDragListener();\n this.unbindDocumentDragEndListener();\n this.unbindDocumentResizeListeners();\n this.unbindDocumentEscapeListener();\n }\n\n bindDocumentDragListener() {\n if (!this.documentDragListener) {\n this.documentDragListener = this.renderer.listen(this.document.defaultView, 'mousemove', this.onDrag.bind(this));\n }\n }\n\n unbindDocumentDragListener() {\n if (this.documentDragListener) {\n this.documentDragListener();\n this.documentDragListener = null;\n }\n }\n\n bindDocumentDragEndListener() {\n if (!this.documentDragEndListener) {\n this.documentDragEndListener = this.renderer.listen(this.document.defaultView, 'mouseup', this.endDrag.bind(this));\n }\n }\n\n unbindDocumentDragEndListener() {\n if (this.documentDragEndListener) {\n this.documentDragEndListener();\n this.documentDragEndListener = null;\n }\n }\n\n bindDocumentResizeListeners() {\n if (!this.documentResizeListener && !this.documentResizeEndListener) {\n this.documentResizeListener = this.renderer.listen(this.document.defaultView, 'mousemove', this.onResize.bind(this));\n this.documentResizeEndListener = this.renderer.listen(this.document.defaultView, 'mouseup', this.resizeEnd.bind(this));\n }\n }\n\n unbindDocumentResizeListeners() {\n if (this.documentResizeListener && this.documentResizeEndListener) {\n this.documentResizeListener();\n this.documentResizeEndListener();\n this.documentResizeListener = null;\n this.documentResizeEndListener = null;\n }\n }\n\n bindDocumentEscapeListener() {\n const documentTarget = this.el ? this.el.nativeElement.ownerDocument : this.document;\n\n this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event: KeyboardEvent) => {\n if (event.key == 'Escape') {\n const container = this.container();\n if (!container) {\n return;\n }\n const currentZIndex = ZIndexUtils.getCurrent();\n if (parseInt(container.style.zIndex) == currentZIndex || this.zIndexForLayering == currentZIndex) {\n this.close(event);\n }\n }\n });\n }\n\n unbindDocumentEscapeListener() {\n if (this.documentEscapeListener) {\n this.documentEscapeListener();\n this.documentEscapeListener = null;\n }\n }\n\n appendContainer() {\n if (this.$appendTo() !== 'self') {\n appendChild(this.document.body, this.wrapper as HTMLElement);\n }\n }\n\n restoreAppend() {\n if (this.container() && this.$appendTo() !== 'self') {\n this.renderer.appendChild(this.el.nativeElement, this.wrapper);\n }\n }\n\n onBeforeEnter(event: MotionEvent) {\n this.container.set(event.element as HTMLDivElement);\n this.wrapper = this.container()?.parentElement;\n this.$attrSelector && this.container()?.setAttribute(this.$attrSelector, '');\n this.appendContainer();\n this.moveOnTop();\n this.bindGlobalListeners();\n this.container()?.setAttribute(this.id, '');\n\n if (this.modal()) {\n this.enableModality();\n }\n }\n\n onAfterEnter() {\n if (this.focusOnShow()) {\n this.focus();\n }\n\n this.onShow.emit({});\n }\n\n onBeforeLeave() {\n if (this.modal()) {\n this.maskVisible = false;\n }\n }\n\n onAfterLeave() {\n this.onContainerDestroy();\n this.renderDialog.set(false);\n\n if (this.modal()) {\n this.renderMask.set(false);\n } else {\n this.maskVisible = false;\n }\n\n this.onHide.emit({});\n }\n\n onMaskAfterLeave() {\n if (!this.renderDialog()) {\n this.renderMask.set(false);\n }\n }\n\n onContainerDestroy() {\n this.unbindGlobalListeners();\n this.dragging = false;\n\n if (this.maximized()) {\n removeClass(this.document.body, 'p-overflow-hidden');\n this.document.body.style.removeProperty('--px-scrollbar-width');\n this.maximized.set(false);\n }\n\n if (this.modal()) {\n this.disableModality();\n }\n\n const remainingScrollBlockers = this.document.querySelectorAll('[data-p-scrollblocker-active=\"true\"]');\n if (remainingScrollBlockers.length <= 1 && hasClass(this.document.body, 'p-overflow-hidden')) {\n removeClass(this.document.body, 'p-overflow-hidden');\n }\n\n if (this.container() && this.autoZIndex()) {\n ZIndexUtils.clear(this.container());\n }\n if (this.zIndexForLayering) {\n ZIndexUtils.revertZIndex(this.zIndexForLayering);\n }\n\n this.container.set(null);\n this.wrapper = null;\n\n this._style = this.originalStyle ? { ...this.originalStyle } : {};\n }\n\n destroyStyle() {\n if (this.styleElement) {\n this.renderer.removeChild(this.document.head, this.styleElement);\n this.styleElement = null;\n }\n }\n\n onDestroy() {\n if (this.container()) {\n this.restoreAppend();\n this.onContainerDestroy();\n }\n\n this.destroyStyle();\n }\n\n dataP = computed(() =>\n this.cn({\n maximized: this.maximized(),\n modal: this.modal()\n })\n );\n}\n\n@NgModule({\n imports: [Dialog, SharedModule],\n exports: [Dialog, SharedModule]\n})\nexport class DialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["TimesIcon","WindowMaximizeIcon","WindowMinimizeIcon"],"mappings":"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