primeng
Version:
PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB
1 lines • 56.6 kB
Source Map (JSON)
{"version":3,"file":"primeng-dynamicdialog.mjs","sources":["../../src/dynamicdialog/dynamicdialogcontent.ts","../../src/dynamicdialog/style/dynamicdialogstyle.ts","../../src/dynamicdialog/dynamicdialog-config.ts","../../src/dynamicdialog/dynamicdialog-ref.ts","../../src/dynamicdialog/dynamicdialog.ts","../../src/dynamicdialog/dynamicdialog-injector.ts","../../src/dynamicdialog/dialogservice.ts","../../src/dynamicdialog/primeng-dynamicdialog.ts"],"sourcesContent":["import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[pDynamicDialogContent]',\n standalone: true\n})\nexport class DynamicDialogContent {\n constructor(public viewContainerRef: ViewContainerRef) {}\n}\n","import { Injectable } from '@angular/core';\nimport { DialogStyle } from 'primeng/dialog';\n\n@Injectable()\nexport class DynamicDialogStyle extends DialogStyle {\n name = 'dialog';\n}\n\n/**\n *\n * DynamicDialog is a container to display content in an overlay window.\n *\n * [Live Demo](https://www.primeng.org/dynamicdialog)\n *\n * @module dynamicdialogstyle\n *\n */\nexport enum DynamicDialogClasses {\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 DynamicDialogStyle {}\n","import { Type } from '@angular/core';\nimport type { DialogPassThrough } from 'primeng/types/dialog';\n\n/**\n * Dialogs can be created dynamically with any component as the content using a DialogService.\n * @group Components\n */\nexport class DynamicDialogConfig<DataType = any, InputValuesType extends Record<string, any> = {}> {\n /**\n * An object to pass to the component loaded inside the Dialog.\n * @group Props\n */\n data?: DataType;\n /**\n * An object to pass to the component loaded inside the Dialog.\n * @group Props\n */\n inputValues?: InputValuesType;\n /**\n * Header text of the dialog.\n * @group Props\n */\n header?: string;\n /**\n * Identifies the element (or elements) that labels the element it is applied to.\n * @group Props\n */\n ariaLabelledBy?: string;\n /**\n * Footer text of the dialog.\n * @group Props\n */\n footer?: string;\n /**\n * Width of the dialog.\n * @group Props\n */\n width?: string;\n /**\n * Height of the dialog.\n * @group Props\n */\n height?: string;\n /**\n * Specifies if pressing escape key should hide the dialog.\n * @group Props\n */\n closeOnEscape?: boolean = false;\n /**\n * Specifies if autofocus should happen on show.\n * @group Props\n */\n focusOnShow?: boolean = true;\n /**\n * When enabled, can only focus on elements inside the dialog.\n * @group Props\n */\n focusTrap?: boolean = true;\n /**\n * Base zIndex value to use in layering.\n * @group Props\n */\n baseZIndex?: number;\n /**\n * Whether to re-enforce layering through applying zIndex.\n * @group Props\n */\n autoZIndex?: boolean = false;\n /**\n * Specifies if clicking the modal background should hide the dialog.\n * @group Props\n */\n dismissableMask?: boolean = false;\n /**\n * Inline style of the component.\n * @group Props\n */\n rtl?: boolean = false;\n /**\n * Inline style of the component.\n * @group Props\n */\n style?: { [klass: string]: any } | null | undefined;\n /**\n * Inline style of the content.\n * @group Props\n */\n contentStyle?: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the component.\n * @group Props\n */\n styleClass?: string;\n /**\n * Transition options of the animation.\n * @group Props\n */\n transitionOptions?: string;\n /**\n * Adds a close icon to the header to hide the dialog.\n * @group Props\n */\n closable?: boolean = false;\n /**\n * Whether to show the header or not.\n * @group Props\n */\n showHeader?: boolean = false;\n /**\n * Defines if background should be blocked when dialog is displayed.\n * @group Props\n */\n modal?: boolean = false;\n /**\n * Style class of the mask.\n * @group Props\n */\n maskStyleClass?: string;\n /**\n * Enables resizing of the content.\n * @group Props\n */\n resizable?: boolean = false;\n /**\n * Enables dragging to change the position using header.\n * @group Props\n */\n draggable?: boolean = false;\n /**\n * Keeps dialog in the viewport.\n * @group Props\n */\n keepInViewport?: boolean = false;\n /**\n * Minimum value for the left coordinate of dialog in dragging.\n * @group Props\n */\n minX?: number;\n /**\n * Minimum value for the top coordinate of dialog in dragging.\n * @group Props\n */\n minY?: number;\n /**\n * Whether the dialog can be displayed full screen.\n * @group Props\n */\n maximizable?: boolean = false;\n /**\n * Name of the maximize icon.\n * @group Props\n */\n maximizeIcon?: string;\n /**\n * Name of the minimize icon.\n * @group Props\n */\n minimizeIcon?: string;\n /**\n * Position of the dialog, options are \"center\", \"top\", \"bottom\", \"left\", \"right\", \"topleft\", \"topright\", \"bottomleft\" or \"bottomright\".\n * @group Props\n */\n position?: string;\n /**\n * Defines a string that labels the close button for accessibility.\n * @group Props\n */\n closeAriaLabel?: string;\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 * @group Props\n */\n appendTo?: any;\n /**\n * A boolean to determine if it can be duplicate.\n * @group Props\n */\n duplicate?: boolean = false;\n /**\n * Object literal to define widths per screen size.\n * @group Props\n */\n breakpoints?: any;\n /**\n * Dialog templates.\n * @group Props\n */\n templates?: DynamicDialogTemplates;\n /**\n * Used to pass attributes to DOM elements inside the Dialog component.\n * @group Props\n */\n pt?: DialogPassThrough;\n /**\n * Indicates whether the component should be rendered without styles.\n * @group Props\n */\n unstyled?: boolean;\n}\n\n/**\n * Defines valid templates in Dynamic Dialog.\n * Templates are Angular components that will be rendered using ngComponentOutlet.\n * @group Templates\n */\nexport interface DynamicDialogTemplates {\n /**\n * Component to render as the header.\n */\n header?: Type<any>;\n /**\n * Component to render as the content.\n */\n content?: Type<any>;\n /**\n * Component to render as the footer.\n */\n footer?: Type<any>;\n /**\n * Component to render as the minimize icon.\n */\n minimizeicon?: Type<any>;\n /**\n * Component to render as the maximize icon.\n */\n maximizeicon?: Type<any>;\n /**\n * Component to render as the close icon.\n */\n closeicon?: Type<any>;\n}\n","import { Observable, Subject } from 'rxjs';\n/**\n * Dynamic Dialog instance.\n * @group Components\n */\nexport class DynamicDialogRef<ComponentType = any> {\n constructor() {}\n\n /**\n * Closes dialog.\n * @group Method\n */\n close(result?: any) {\n this._onClose.next(result);\n\n setTimeout(() => {\n this._onClose.complete();\n }, 1000);\n }\n /**\n * Destroys the dialog instance.\n * @group Method\n */\n destroy() {\n this._onDestroy.next(null);\n }\n /**\n * Callback to invoke on drag start.\n * @param {MouseEvent} event - Mouse event.\n * @group Method\n */\n dragStart(event: MouseEvent) {\n this._onDragStart.next(event);\n }\n /**\n * Callback to invoke on drag end.\n * @param {MouseEvent} event - Mouse event.\n * @group Method\n */\n dragEnd(event: MouseEvent) {\n this._onDragEnd.next(event);\n }\n /**\n * Callback to invoke on resize start.\n * @param {MouseEvent} event - Mouse event.\n * @group Method\n */\n resizeInit(event: MouseEvent) {\n this._onResizeInit.next(event);\n }\n /**\n * Callback to invoke on resize start.\n * @param {MouseEvent} event - Mouse event.\n * @group Method\n */\n resizeEnd(event: MouseEvent) {\n this._onResizeEnd.next(event);\n }\n /**\n * Callback to invoke on dialog is maximized.\n * @param {*} value - Size value.\n * @group Method\n */\n maximize(value: any) {\n this._onMaximize.next(value);\n }\n\n private readonly _onClose = new Subject<any>();\n /**\n * Event triggered on dialog is closed.\n * @group Events\n */\n onClose: Observable<any> = this._onClose.asObservable();\n\n private readonly _onDestroy = new Subject<any>();\n /**\n * Event triggered on dialog instance is destroyed.\n * @group Events\n */\n onDestroy: Observable<any> = this._onDestroy.asObservable();\n\n private readonly _onDragStart = new Subject<any>();\n /**\n * Event triggered on drag start.\n * @param {MouseEvent} event - Mouse event.\n * @group Events\n */\n onDragStart: Observable<any> = this._onDragStart.asObservable();\n\n private readonly _onDragEnd = new Subject<any>();\n /**\n * Event triggered on drag end.\n * @param {MouseEvent} event - Mouse event.\n * @group Events\n */\n onDragEnd: Observable<any> = this._onDragEnd.asObservable();\n\n private readonly _onResizeInit = new Subject<any>();\n /**\n * Event triggered on resize start.\n * @param {MouseEvent} event - Mouse event.\n * @group Events\n */\n onResizeInit: Observable<any> = this._onResizeInit.asObservable();\n\n private readonly _onResizeEnd = new Subject<any>();\n /**\n * Event triggered on resize end.\n * @param {MouseEvent} event - Mouse event.\n * @group Events\n */\n onResizeEnd: Observable<any> = this._onResizeEnd.asObservable();\n\n private readonly _onMaximize = new Subject<any>();\n /**\n * Event triggered on dialog is maximized.\n * @param {*} value - Size value.\n * @group Events\n */\n onMaximize: Observable<any> = this._onMaximize.asObservable();\n\n /**\n * Event triggered on child component load.\n * @param {*} value - Chi.\n * @group Events\n */\n readonly onChildComponentLoaded = new Subject<ComponentType>();\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ComponentRef, inject, InjectionToken, NgModule, Type, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { uuid } from '@primeuix/utils';\nimport { SharedModule, TranslationKeys } from 'primeng/api';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind, BindModule } from 'primeng/bind';\nimport { Dialog, DialogPassThrough } from 'primeng/dialog';\nimport { Nullable } from 'primeng/ts-helpers';\nimport { DynamicDialogConfig } from './dynamicdialog-config';\nimport { DynamicDialogRef } from './dynamicdialog-ref';\nimport { DynamicDialogContent } from './dynamicdialogcontent';\nimport { DynamicDialogStyle } from './style/dynamicdialogstyle';\n\nconst DYNAMIC_DIALOG_INSTANCE = new InjectionToken<DynamicDialog>('DYNAMIC_DIALOG_INSTANCE');\n\n@Component({\n selector: 'p-dynamicDialog, p-dynamicdialog, p-dynamic-dialog',\n standalone: true,\n imports: [CommonModule, SharedModule, DynamicDialogContent, Dialog, BindModule],\n template: `\n <p-dialog\n [(visible)]=\"visible\"\n [header]=\"ddconfig?.header\"\n [draggable]=\"ddconfig?.draggable !== false\"\n [resizable]=\"ddconfig?.resizable !== false\"\n [contentStyle]=\"ddconfig?.contentStyle\"\n [modal]=\"ddconfig?.modal !== false\"\n [closeOnEscape]=\"ddconfig?.closeOnEscape !== false\"\n [dismissableMask]=\"ddconfig?.dismissableMask\"\n [rtl]=\"ddconfig?.rtl\"\n [closable]=\"closable\"\n [breakpoints]=\"breakpoints\"\n [styleClass]=\"ddconfig?.styleClass\"\n [maskStyleClass]=\"ddconfig?.maskStyleClass\"\n [showHeader]=\"ddconfig?.showHeader !== false\"\n [autoZIndex]=\"ddconfig?.autoZIndex !== false\"\n [baseZIndex]=\"ddconfig?.baseZIndex || 0\"\n [minX]=\"minX\"\n [minY]=\"minY\"\n [focusOnShow]=\"ddconfig?.focusOnShow !== false\"\n [maximizable]=\"maximizable\"\n [keepInViewport]=\"keepInViewport\"\n [focusTrap]=\"ddconfig?.focusTrap !== false\"\n [transitionOptions]=\"ddconfig?.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'\"\n [closeAriaLabel]=\"ddconfig?.closeAriaLabel || defaultCloseAriaLabel\"\n [minimizeIcon]=\"minimizeIcon\"\n [maximizeIcon]=\"maximizeIcon\"\n [closeButtonProps]=\"{ severity: 'secondary', variant: 'text', rounded: true }\"\n [maximizeButtonProps]=\"{ severity: 'secondary', variant: 'text', rounded: true }\"\n [style]=\"dialogStyle\"\n [position]=\"position\"\n (onHide)=\"onDialogHide($event)\"\n (onMaximize)=\"onDialogMaximize($event)\"\n (onResizeInit)=\"onDialogResizeInit($event)\"\n (onResizeEnd)=\"onDialogResizeEnd($event)\"\n (onDragEnd)=\"onDialogDragEnd($event)\"\n (visibleChange)=\"onVisibleChange($event)\"\n [pt]=\"ddconfig.pt\"\n appendTo=\"self\"\n hostName=\"DynamicDialog\"\n [unstyled]=\"isUnstyled\"\n >\n <ng-template #header *ngIf=\"headerTemplate\">\n <ng-container *ngComponentOutlet=\"headerTemplate\"></ng-container>\n </ng-template>\n <ng-template #content *ngIf=\"contentTemplate\">\n <ng-container *ngComponentOutlet=\"contentTemplate\"></ng-container>\n </ng-template>\n <ng-template #footer *ngIf=\"footerTemplate\">\n <ng-container *ngComponentOutlet=\"footerTemplate\"></ng-container>\n </ng-template>\n <ng-template #closeicon *ngIf=\"closeIconTemplate\">\n <ng-container *ngComponentOutlet=\"closeIconTemplate\"></ng-container>\n </ng-template>\n <ng-template #maximizeicon *ngIf=\"maximizeIconTemplate\">\n <ng-container *ngComponentOutlet=\"maximizeIconTemplate\"></ng-container>\n </ng-template>\n <ng-template #minimizeicon *ngIf=\"minimizeIconTemplate\">\n <ng-container *ngComponentOutlet=\"minimizeIconTemplate\"></ng-container>\n </ng-template>\n\n <ng-template pDynamicDialogContent *ngIf=\"!contentTemplate\"></ng-template>\n <div *ngIf=\"ddconfig.footer && !footerTemplate\">{{ ddconfig.footer }}</div>\n </p-dialog>\n `,\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n providers: [DynamicDialogStyle, { provide: DYNAMIC_DIALOG_INSTANCE, useExisting: DynamicDialog }, { provide: PARENT_INSTANCE, useExisting: DynamicDialog }],\n hostDirectives: [Bind]\n})\nexport class DynamicDialog extends BaseComponent<DialogPassThrough> {\n _componentStyle = inject(DynamicDialogStyle);\n\n $pcDynamicDialog: DynamicDialog | undefined = inject(DYNAMIC_DIALOG_INSTANCE, { optional: true, skipSelf: true }) ?? undefined;\n\n bindDirectiveInstance = inject(Bind, { self: true });\n\n onAfterViewChecked(): void {\n this.bindDirectiveInstance.setAttrs(this.ptms(['host', 'root']));\n }\n\n visible: boolean = true;\n\n componentRef: Nullable<ComponentRef<any>>;\n\n id: string = uuid('pn_id_');\n\n @ViewChild(DynamicDialogContent) insertionPoint: Nullable<DynamicDialogContent>;\n\n @ViewChild(Dialog) dialog: Nullable<Dialog>;\n\n childComponentType: Nullable<Type<any>>;\n\n inputValues: Record<string, any>;\n\n get minX(): number {\n return this.ddconfig.minX ? this.ddconfig.minX : 0;\n }\n\n get minY(): number {\n return this.ddconfig.minY ? this.ddconfig.minY : 0;\n }\n\n get keepInViewport(): boolean {\n return this.ddconfig.keepInViewport!;\n }\n\n get maximizable(): boolean {\n return this.ddconfig.maximizable!;\n }\n\n get maximizeIcon(): string {\n return this.ddconfig.maximizeIcon!;\n }\n\n get minimizeIcon(): string {\n return this.ddconfig.minimizeIcon!;\n }\n\n get closable() {\n return this.ddconfig.closable!;\n }\n\n get position(): string {\n return this.ddconfig.position!;\n }\n\n get defaultCloseAriaLabel(): string {\n return this.config.getTranslation(TranslationKeys.ARIA)['close'];\n }\n\n get breakpoints() {\n return this.ddconfig.breakpoints;\n }\n\n get footerTemplate() {\n return this.ddconfig?.templates?.footer;\n }\n\n get headerTemplate() {\n return this.ddconfig?.templates?.header;\n }\n\n get contentTemplate() {\n return this.ddconfig?.templates?.content;\n }\n\n get minimizeIconTemplate(): any {\n return this.ddconfig?.templates?.minimizeicon;\n }\n\n get maximizeIconTemplate(): any {\n return this.ddconfig?.templates?.maximizeicon;\n }\n\n get closeIconTemplate() {\n return this.ddconfig?.templates?.closeicon;\n }\n\n get dialogStyle() {\n return {\n ...(this.ddconfig?.style || {}),\n ...(this.ddconfig?.width && { width: this.ddconfig.width }),\n ...(this.ddconfig?.height && { height: this.ddconfig.height })\n };\n }\n\n get header() {\n return this.ddconfig.header;\n }\n\n get data() {\n return this.ddconfig.data;\n }\n\n get dialogId() {\n return this.$attrSelector;\n }\n\n get isUnstyled() {\n return this.ddconfig.unstyled || this.$unstyled();\n }\n\n maximized: boolean | undefined;\n\n dragging: boolean | undefined;\n\n resizing: boolean | undefined;\n\n ariaLabelledBy: string | undefined | null;\n\n _style: any = {};\n\n styleElement: any;\n\n lastPageX: number | undefined;\n\n lastPageY: number | undefined;\n\n contentViewChild: any;\n\n footerViewChild: any;\n\n headerViewChild: any;\n\n maskViewChild: any;\n\n maskClickListener: any;\n\n documentDragListener: any;\n\n documentDragEndListener: any;\n\n documentResizeListener: any;\n\n documentResizeEndListener: any;\n\n documentEscapeListener: any;\n\n constructor(\n public ddconfig: DynamicDialogConfig,\n private dialogRef: DynamicDialogRef\n ) {\n super();\n }\n\n onVisibleChange(visible: boolean) {\n if (!visible) {\n this.dialogRef.close();\n }\n }\n\n onAfterViewInit() {\n this.loadChildComponent(this.childComponentType!);\n this.ariaLabelledBy = this.getAriaLabelledBy();\n this.cd.detectChanges();\n }\n\n getAriaLabelledBy() {\n const { header, showHeader } = this.ddconfig;\n\n if (header === null || showHeader === false) {\n return null;\n }\n return uuid('pn_id_') + '_header';\n }\n\n loadChildComponent(componentType: Type<any>) {\n let viewContainerRef = this.insertionPoint?.viewContainerRef;\n viewContainerRef?.clear();\n\n this.componentRef = viewContainerRef?.createComponent(componentType);\n\n if (this.inputValues && this.componentRef) {\n Object.entries(this.inputValues).forEach(([key, value]) => {\n this.componentRef!.setInput(key, value);\n });\n }\n\n this.dialogRef.onChildComponentLoaded.next(this.componentRef!.instance);\n }\n\n onDialogHide(event: any) {\n this.dialogRef.destroy();\n }\n\n onDialogMaximize(event: any) {\n this.maximized = event.maximized;\n this.dialogRef.maximize(event);\n }\n\n onDialogResizeInit(event: MouseEvent) {\n this.resizing = true;\n this.dialogRef.resizeInit(event);\n }\n\n onDialogResizeEnd(event: MouseEvent) {\n this.resizing = false;\n this.dialogRef.resizeEnd(event);\n }\n\n onDialogDragEnd(event: DragEvent) {\n this.dragging = false;\n this.dialogRef.dragEnd(event);\n }\n\n close() {\n this.visible = false;\n this.cd.markForCheck();\n }\n\n hide() {\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n\n get _parent() {\n const domElements = Array.from(this.document.getElementsByClassName('p-dialog'));\n if (domElements.length > 1) {\n return domElements.pop();\n }\n }\n\n get parentContent() {\n const domElements = Array.from(this.document.getElementsByClassName('p-dialog'));\n if (domElements.length > 0) {\n const contentElements = domElements[domElements.length - 1].querySelector('.p-dialog-content');\n if (contentElements) return Array.isArray(contentElements) ? contentElements[0] : contentElements;\n }\n }\n\n container: any;\n\n wrapper: any;\n\n unbindGlobalListeners() {\n this.unbindDocumentEscapeListener();\n this.unbindDocumentResizeListeners();\n this.unbindDocumentDragListener();\n this.unbindDocumentDragEndListener();\n }\n\n onAnimationStart(event: any) {\n if (event.toState === 'visible') {\n // If parent dialog exists, unbind its listeners first\n if (this._parent) {\n this.unbindGlobalListeners();\n }\n if (this.ddconfig.modal) {\n this.enableModality();\n }\n }\n }\n\n onAnimationEnd(event: any) {\n if (event.toState === 'void') {\n this.onContainerDestroy();\n this.dialogRef.destroy();\n }\n }\n\n onContainerDestroy() {\n this.unbindGlobalListeners();\n if (this.ddconfig.modal) {\n this.disableModality();\n }\n this.container = null;\n }\n\n bindDocumentDragListener() {\n if (!this.documentDragListener) {\n this.documentDragListener = this.renderer.listen(this.document.defaultView, 'mousemove', (event) => {\n this.onDrag(event);\n });\n }\n }\n\n bindDocumentDragEndListener() {\n if (!this.documentDragEndListener) {\n this.documentDragEndListener = this.renderer.listen(this.document.defaultView, 'mouseup', (event) => {\n this.endDrag(event);\n });\n }\n }\n\n unbindDocumentDragEndListener() {\n if (this.documentDragEndListener) {\n this.documentDragEndListener();\n this.documentDragEndListener = null;\n }\n }\n\n unbindDocumentDragListener() {\n if (this.documentDragListener) {\n this.documentDragListener();\n this.documentDragListener = null;\n }\n }\n\n initDrag(event: MouseEvent) {\n // Don't initialize drag when clicking on header icons\n if (event.target instanceof HTMLElement) {\n const target = event.target;\n if (target.closest('.p-dialog-header-icon') || target.closest('.p-dialog-header-icons')) {\n return;\n }\n }\n\n this.dragging = true;\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n this.dialogRef.dragStart(event);\n this.bindDocumentDragListener();\n this.bindDocumentDragEndListener();\n // Handled by Dialog component\n }\n\n onDrag(event: MouseEvent) {\n if (this.dragging) {\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n\n if (this.ddconfig.keepInViewport && this.container) {\n this.container.style.position = 'fixed';\n }\n }\n }\n\n endDrag(event: MouseEvent) {\n if (this.dragging) {\n this.dragging = false;\n this.dialogRef.dragEnd(event as any);\n this.cd.detectChanges();\n }\n }\n\n resetPosition() {\n if (this.container) {\n this.container.style.position = '';\n this.container.style.left = '';\n this.container.style.top = '';\n this.container.style.margin = '';\n }\n }\n\n bindDocumentResizeListeners() {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this.document.defaultView, 'mousemove', (event) => {\n this.onResize(event);\n });\n }\n if (!this.documentResizeEndListener) {\n this.documentResizeEndListener = this.renderer.listen(this.document.defaultView, 'mouseup', (event) => {\n this.resizeEnd(event);\n });\n }\n }\n\n unbindDocumentResizeListeners() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n if (this.documentResizeEndListener) {\n this.documentResizeEndListener();\n this.documentResizeEndListener = null;\n }\n }\n\n initResize(event: MouseEvent) {\n this.resizing = true;\n this.lastPageX = event.pageX;\n this.lastPageY = event.pageY;\n this.dialogRef.resizeInit(event);\n }\n\n onResize(event: MouseEvent) {\n if (this.resizing) {\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.dialogRef.resizeEnd(event);\n }\n }\n\n maximize() {\n this.maximized = !this.maximized;\n this.dialogRef.maximize({ maximized: this.maximized });\n }\n\n enableModality() {\n if (this.ddconfig.dismissableMask && this.wrapper) {\n this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event: any) => {\n if (this.wrapper && this.wrapper.isSameNode(event.target)) {\n this.hide();\n }\n });\n }\n }\n\n disableModality() {\n this.unbindMaskClickListener();\n this.cd.detectChanges();\n }\n\n unbindMaskClickListener() {\n if (this.maskClickListener) {\n this.maskClickListener();\n this.maskClickListener = null;\n }\n }\n\n bindDocumentEscapeListener() {\n if (this.ddconfig.closeOnEscape) {\n this.documentEscapeListener = this.renderer.listen(this.document, 'keydown', (event: KeyboardEvent) => {\n if (event.key === 'Escape' && this.container) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentEscapeListener() {\n if (this.documentEscapeListener) {\n this.documentEscapeListener();\n this.documentEscapeListener = null;\n }\n }\n\n createStyle() {\n if (!this.styleElement && this.breakpoints) {\n this.styleElement = this.renderer.createElement('style');\n this.styleElement.type = 'text/css';\n this.renderer.appendChild(this.document.head, this.styleElement);\n\n let innerHTML = '';\n for (let breakpoint in this.breakpoints) {\n innerHTML += `\n @media screen and (max-width: ${breakpoint}) {\n .p-dialog[${this.dialogId}] {\n width: ${this.breakpoints[breakpoint]} !important;\n }\n }\n `;\n }\n this.renderer.setProperty(this.styleElement, 'innerHTML', innerHTML);\n }\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.componentRef && typeof this.componentRef.destroy === 'function') {\n this.componentRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.onContainerDestroy();\n if (this.componentRef && typeof this.componentRef.destroy === 'function') {\n this.componentRef.destroy();\n }\n this.destroyStyle();\n }\n}\n\n@NgModule({\n imports: [DynamicDialog, SharedModule],\n exports: [DynamicDialog, SharedModule]\n})\nexport class DynamicDialogModule {}\n","import { InjectOptions, Injector, ProviderToken } from '@angular/core';\n\nexport class DynamicDialogInjector implements Injector {\n constructor(\n private _parentInjector: Injector,\n private _additionalTokens: WeakMap<any, any>\n ) {}\n\n get<T>(token: ProviderToken<T>, notFoundValue?: T, options?: InjectOptions): T {\n const value = this._additionalTokens.get(token);\n\n if (value) return value;\n\n return this._parentInjector.get<any>(token, notFoundValue);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ApplicationRef, ComponentRef, EmbeddedViewRef, Inject, Injectable, Injector, Type, createComponent } from '@angular/core';\nimport { appendChild } from '@primeuix/utils';\nimport { DynamicDialog } from './dynamicdialog';\nimport { DynamicDialogConfig } from './dynamicdialog-config';\nimport { DynamicDialogInjector } from './dynamicdialog-injector';\nimport { DynamicDialogRef } from './dynamicdialog-ref';\n\n/**\n * Dynamic Dialog component methods.\n * @group Service\n */\n@Injectable()\nexport class DialogService {\n dialogComponentRefMap: Map<DynamicDialogRef<any>, ComponentRef<DynamicDialog>> = new Map();\n\n constructor(\n private appRef: ApplicationRef,\n private injector: Injector,\n @Inject(DOCUMENT) private document: Document\n ) {}\n /**\n * Displays the dialog using the dynamic dialog object options.\n * @param {*} componentType - Dynamic component for content template.\n * @param {DynamicDialogConfig} config - DynamicDialog object.\n * @returns {DynamicDialogRef} DynamicDialog instance.\n * @group Method\n */\n public open<T, DataType = any, InputValuesType extends Record<string, any> = {}>(componentType: Type<T>, config: DynamicDialogConfig<DataType, InputValuesType>): DynamicDialogRef<T> | null {\n if (!this.duplicationPermission(componentType, config)) {\n return null;\n }\n\n const dialogRef = this.appendDialogComponentToBody<T>(config, componentType);\n\n const componentRefInstance = this.dialogComponentRefMap.get(dialogRef);\n if (componentRefInstance) {\n componentRefInstance.instance.childComponentType = componentType;\n componentRefInstance.instance.inputValues = config.inputValues || {};\n }\n\n return dialogRef;\n }\n /**\n * Returns the dynamic dialog component instance.\n * @param {DynamicDialogRef} ref - DynamicDialog instance.\n * @group Method\n */\n public getInstance(ref: DynamicDialogRef<any>) {\n return this.dialogComponentRefMap.get(ref)?.instance;\n }\n\n private appendDialogComponentToBody<T>(config: DynamicDialogConfig, componentType: Type<T>): DynamicDialogRef<T> {\n const map = new WeakMap();\n map.set(DynamicDialogConfig, config);\n\n const dialogRef = new DynamicDialogRef<T>();\n map.set(DynamicDialogRef, dialogRef);\n\n const sub = dialogRef.onClose.subscribe(() => {\n this.dialogComponentRefMap.get(dialogRef)?.instance.close();\n });\n\n const destroySub = dialogRef.onDestroy.subscribe(() => {\n this.removeDialogComponentFromBody(dialogRef);\n destroySub.unsubscribe();\n sub.unsubscribe();\n });\n\n const componentRef = createComponent(DynamicDialog, {\n environmentInjector: this.appRef.injector,\n elementInjector: new DynamicDialogInjector(this.injector, map)\n });\n\n this.appRef.attachView(componentRef.hostView);\n\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n if (!config.appendTo || config.appendTo === 'body') {\n this.document.body.appendChild(domElem);\n } else {\n appendChild(config.appendTo, domElem);\n }\n\n this.dialogComponentRefMap.set(dialogRef, componentRef);\n\n return dialogRef;\n }\n\n private removeDialogComponentFromBody(dialogRef: DynamicDialogRef<any>) {\n if (!dialogRef || !this.dialogComponentRefMap.has(dialogRef)) {\n return;\n }\n\n const dialogComponentRef = this.dialogComponentRefMap.get(dialogRef);\n if (dialogComponentRef) {\n this.appRef.detachView(dialogComponentRef.hostView);\n dialogComponentRef.destroy();\n dialogComponentRef.changeDetectorRef.detectChanges();\n }\n this.dialogComponentRefMap.delete(dialogRef);\n }\n\n private duplicationPermission(componentType: Type<any>, config: DynamicDialogConfig): boolean {\n if (config.duplicate) {\n return true;\n }\n let permission = true;\n for (const [key, value] of this.dialogComponentRefMap) {\n if (value.instance.childComponentType === componentType) {\n permission = false;\n break;\n }\n }\n return permission;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DynamicDialogConfig","i2.DynamicDialogRef"],"mappings":";;;;;;;;;;;;MAMa,oBAAoB,CAAA;AACV,IAAA,gBAAA;AAAnB,IAAA,WAAA,CAAmB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;uGAD/C,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACDK,MAAO,kBAAmB,SAAQ,WAAW,CAAA;IAC/C,IAAI,GAAG,QAAQ;uGADN,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAlB,kBAAkB,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;AAKD;;;;;;;;AAQG;IACS;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC5B;;AAEG;AACH,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,eAAsB;AACtB;;AAEG;AACH,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,UAAiB;AACjB;;AAEG;AACH,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B;AAC1B;;AAEG;AACH,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,gBAAwB;AACxB;;AAEG;AACH,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,yBAAyC;AACzC;;AAEG;AACH,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,0BAA6C;AAC7C;;AAEG;AACH,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,uBAAuC;AACvC;;AAEG;AACH,IAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,kBAA4B;AAC5B;;AAEG;AACH,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,iBAA0B;AAC9B,CAAC,EArCW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;ACdhC;;;AAGG;MACU,mBAAmB,CAAA;AAC5B;;;AAGG;AACH,IAAA,IAAI;AACJ;;;AAGG;AACH,IAAA,WAAW;AACX;;;AAGG;AACH,IAAA,MAAM;AACN;;;AAGG;AACH,IAAA,cAAc;AACd;;;AAGG;AACH,IAAA,MAAM;AACN;;;AAGG;AACH,IAAA,KAAK;AACL;;;AAGG;AACH,IAAA,MAAM;AACN;;;AAGG;IACH,aAAa,GAAa,KAAK;AAC/B;;;AAGG;IACH,WAAW,GAAa,IAAI;AAC5B;;;AAGG;IACH,SAAS,GAAa,IAAI;AAC1B;;;AAGG;AACH,IAAA,UAAU;AACV;;;AAGG;IACH,UAAU,GAAa,KAAK;AAC5B;;;AAGG;IACH,eAAe,GAAa,KAAK;AACjC;;;AAGG;IACH,GAAG,GAAa,KAAK;AACrB;;;AAGG;AACH,IAAA,KAAK;AACL;;;AAGG;AACH,IAAA,YAAY;AACZ;;;AAGG;AACH,IAAA,UAAU;AACV;;;AAGG;AACH,IAAA,iBAAiB;AACjB;;;AAGG;IACH,QAAQ,GAAa,KAAK;AAC1B;;;AAGG;IACH,UAAU,GAAa,KAAK;AAC5B;;;AAGG;IACH,KAAK,GAAa,KAAK;AACvB;;;AAGG;AACH,IAAA,cAAc;AACd;;;AAGG;IACH,SAAS,GAAa,KAAK;AAC3B;;;AAGG;IACH,SAAS,GAAa,KAAK;AAC3B;;;AAGG;IACH,cAAc,GAAa,KAAK;AAChC;;;AAGG;AACH,IAAA,IAAI;AACJ;;;AAGG;AACH,IAAA,IAAI;AACJ;;;AAGG;IACH,WAAW,GAAa,KAAK;AAC7B;;;AAGG;AACH,IAAA,YAAY;AACZ;;;AAGG;AACH,IAAA,YAAY;AACZ;;;AAGG;AACH,IAAA,QAAQ;AACR;;;AAGG;AACH,IAAA,cAAc;AACd;;;AAGG;AACH,IAAA,QAAQ;AACR;;;AAGG;IACH,SAAS,GAAa,KAAK;AAC3B;;;AAGG;AACH,IAAA,WAAW;AACX;;;AAGG;AACH,IAAA,SAAS;AACT;;;AAGG;AACH,IAAA,EAAE;AACF;;;AAGG;AACH,IAAA,QAAQ;AACX;;ACrMD;;;AAGG;MACU,gBAAgB,CAAA;AACzB,IAAA,WAAA,GAAA,EAAe;AAEf;;;AAGG;AACH,IAAA,KAAK,CAAC,MAAY,EAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAE1B,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC5B,CAAC,EAAE,IAAI,CAAC;IACZ;AACA;;;AAGG;IACH,OAAO,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AACA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AACA;;;;AAIG;AACH,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AACA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AACA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AACA;;;;AAIG;AACH,IAAA,QAAQ,CAAC,KAAU,EAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEiB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAO;AAC9C;;;AAGG;AACH,IAAA,OAAO,GAAoB,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAEtC,IAAA,UAAU,GAAG,IAAI,OAAO,EAAO;AAChD;;;AAGG;AACH,IAAA,SAAS,GAAoB,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAE1C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAO;AAClD;;;;AAIG;AACH,IAAA,WAAW,GAAoB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAE9C,IAAA,UAAU,GAAG,IAAI,OAAO,EAAO;AAChD;;;;AAIG;AACH,IAAA,SAAS,GAAoB,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AAE1C,IAAA,aAAa,GAAG,IAAI,OAAO,EAAO;AACnD;;;;AAIG;AACH,IAAA,YAAY,GAAoB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAEhD,IAAA,YAAY,GAAG,IAAI,OAAO,EAAO;AAClD;;;;AAIG;AACH,IAAA,WAAW,GAAoB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAE9C,IAAA,WAAW,GAAG,IAAI,OAAO,EAAO;AACjD;;;;AAIG;AACH,IAAA,UAAU,GAAoB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAE7D;;;;AAIG;AACM,IAAA,sBAAsB,GAAG,IAAI,OAAO,EAAiB;AACjE;;AClHD,MAAM,uBAAuB,GAAG,IAAI,cAAc,CAAgB,yBAAyB,CAAC;AA6EtF,MAAO,aAAc,SAAQ,aAAgC,CAAA;AAsJpD,IAAA,QAAA;AACC,IAAA,SAAA;AAtJZ,IAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE5C,IAAA,gBAAgB,GAA8B,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS;IAE9H,qBAAqB,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEpD,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE;IAEA,OAAO,GAAY,IAAI;AAEvB,IAAA,YAAY;AAEZ,IAAA,EAAE,GAAW,IAAI,CAAC,QAAQ,CAAC;AAEM,IAAA,cAAc;AAE5B,IAAA,MAAM;AAEzB,IAAA,kBAAkB;AAElB,IAAA,WAAW;AAEX,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IACtD;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;IACtD;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAe;IACxC;AAEA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAY;IACrC;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAa;IACtC;AAEA,IAAA,IAAI,YAAY,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAa;IACtC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAS;IAClC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAS;IAClC;AAEA,IAAA,IAAI,qBAAqB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IACpE;AAEA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW;IACpC;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;IAC3C;AAEA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM;IAC3C;AAEA,IAAA,IAAI,eAAe,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO;IAC5C;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY;IACjD;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY;IACjD;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS;IAC9C;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;AAC/B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC3D,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;SAChE;IACL;AAEA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC7B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,aAAa;IAC7B;AAEA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;IACrD;AAEA,IAAA,SAAS;AAET,IAAA,QAAQ;AAER,IAAA,QAAQ;AAER,IAAA,cAAc;IAEd,MAAM,GAAQ,EAAE;AAEhB,IAAA,YAAY;AAEZ,IAAA,SAAS;AAET,IAAA,SAAS;AAET,IAAA,gBAAgB;AAEhB,IAAA,eAAe;AAEf,IAAA,eAAe;AAEf,IAAA,aAAa;AAEb,IAAA,iBAAiB;AAEjB,IAAA,oBAAoB;AAEpB,IAAA,uBAAuB;AAEvB,IAAA,sBAAsB;AAEtB,IAAA,yBAAyB;AAEzB,IAAA,sBAAsB;IAEtB,WAAA,CACW,QAA6B,EAC5B,SAA2B,EAAA;AAEnC,QAAA,KAAK,EAAE;QAHA,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;IAGrB;AAEA,IAAA,eAAe,CAAC,OAAgB,EAAA;QAC5B,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QAC1B;IACJ;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,kBAAmB,CAAC;AACjD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;IAC3B;IAEA,iBAAiB,GAAA;QACb,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ;QAE5C,IAAI,MAAM,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,EAAE;AACzC,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;IACrC;AAEA,IAAA,kBAAkB,CAAC,aAAwB,EAAA;AACvC,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,gBAAgB;QAC5D,gBAAgB,EAAE,KAAK,EAAE;QAEzB,IAAI,CAAC,YAAY,GAAG,gBAAgB,EAAE,eAAe,CAAC,aAAa,CAAC;QAEpE,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;AACvC,YAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;gBACtD,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3C,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC;IAC3E;AAEA,IAAA,YAAY,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,iBAAiB,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,eAAe,CAAC,KAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;IACjC;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;IAC1B;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QAC1B;IACJ;AAEA,IAAA,IAAI,OAAO,GAAA;AACP,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAChF,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,OAAO,WAAW,CAAC,GAAG,EAAE;QAC5B;IACJ;AAEA,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAChF,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC;AAC9F,YAAA,IAAI,eAAe;AAAE,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe;QACrG;IACJ;AAEA,IAAA,SAAS;AAET,IAAA,OAAO;IAEP,qBAAqB,GAAA;QACjB,IAAI,CAAC,4BAA4B,EAAE;QACnC,IAAI,CAAC,6BAA6B,EAAE;QACpC,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,6BAA6B,EAAE;IACxC;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;;AAE7B,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,qBAAqB,EAAE;YAChC;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACrB,IAAI,CAAC,cAAc,EAAE;YACzB;QACJ;IACJ;AAEA,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;YAC1B,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC5B;IACJ;IAEA,kBAAkB,GAAA;QACd,IAAI,CAAC,qBAAqB,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE;QAC1B;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;IACzB;IAEA,wBAAwB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,KAAK,KAAI;AAC/F,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACtB,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,2BAA2B,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAK,KAAI;AAChG,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACvB,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,6BAA6B,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAC9B,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI;QACvC;IACJ;IAEA,0BAA0B,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QACpC;IACJ;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,YAAA,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE;gBACrF;YACJ;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,wBAAwB,EAAE;QAC/B,IAAI,CAAC,2BAA2B,EAAE;;IAEtC;AAEA,IAAA,MAAM,CAAC,KAAiB,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;YAE5B,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;YAC3C;QACJ;IACJ;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAY,CAAC;AACpC,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;QAC3B;IACJ;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;YAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE;YAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;QACpC;IACJ;IAEA,2BAA2B,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,KAAK,KAAI;AACjG,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxB,YAAA,CAAC,CAAC;QACN;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACjC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,KAAK,KAAI;AAClG,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,6BAA6B,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QACtC;AACA,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,yBAAyB,EAAE;AAChC,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACzC;IACJ;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK;QAChC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QACnC;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1D;IAEA,cAAc,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAU,KAAI;AACpF,gBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;oBACvD,IAAI,CAAC,IAAI,EAAE;gBACf;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,eAAe,GAAA;QACX,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;IAC3B;IAEA,uBAAuB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE;AACxB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QACjC;IACJ;IAEA,0BAA0B,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC7B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,KAAoB,KAAI;gBAClG,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;oBAC1C,IAAI,CAAC,IAAI,EAAE;gBACf;AACJ,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,4BAA4B,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,sBAAsB,EAAE;AAC7B,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;QACtC;IACJ;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACxD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,UAAU;AACnC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC;YAEhE,IAAI,SAAS,GAAG,EAAE;AAClB,YAAA,KAAK,IAAI,