UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

475 lines 75.7 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { Overlay, } from "@angular/cdk/overlay"; import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChild, ElementRef, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation, } from "@angular/core"; import _includes from "lodash/includes"; import _isNil from "lodash/isNil"; import _isUndefined from "lodash/isUndefined"; import { BehaviorSubject, EMPTY, merge, Subject, } from "rxjs"; import { PopoverModalComponent, } from "./popover-modal.component"; import { PopoverPositionService } from "./popover-position.service"; import { CLOSE_POPOVER_EVENT, DOCUMENT_CLICK_EVENT, } from "../../constants/event.constants"; import { popoverConstants } from "../../constants/popover.constants"; import { EventBusService } from "../../services/event-bus.service"; import { UtilService } from "../../services/util.service"; import { OverlayComponent } from "../overlay/overlay-component/overlay.component"; import { OverlayUtilitiesService } from "../overlay/overlay-utilities.service"; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/overlay"; import * as i2 from "../../services/event-bus.service"; import * as i3 from "./popover-position.service"; import * as i4 from "../overlay/overlay-component/overlay.component"; // <example-url>./../examples/index.html#/popover</example-url> export class PopoverComponent { static getHostView(componentInstance) { return componentInstance.hostView .rootNodes[0]; } onClick(event) { if (this.isTriggerPresent("click") && this.popover) { this.hidePopover(); } else { this.onTrigger("click"); } this.eventBusService.getStream(DOCUMENT_CLICK_EVENT).next(event); event.stopPropagation(); } onMouseEnter() { this.onTrigger("mouseenter"); this.mouseEnterResolver(); } onMouseLeave() { this.onTrigger("mouseleave"); this.mouseLeaveResolver(); } onFocusIn() { this.onTrigger("focus"); } onFocusOut() { if (!this.closePopover) { if (this.isTriggerPresent("focus") && !this.preventClosing) { this.hidePopover(); } } } constructor(host, componentFactoryResolver, viewContainerRef, overlay, cdRef, eventBusService, popoverPositionService) { this.host = host; this.componentFactoryResolver = componentFactoryResolver; this.viewContainerRef = viewContainerRef; this.overlay = overlay; this.cdRef = cdRef; this.eventBusService = eventBusService; this.popoverPositionService = popoverPositionService; /** * Should popover be disabled, which prevents it from showing */ this.disabled = false; /** * Events that trigger the popover: 'click' | 'mouseenter' | 'mouseleave' | 'focus' | 'openPopoverSubject' */ this.trigger = "mouseenter"; /** * Placement of the popover: 'left' | 'right' | 'top' | 'bottom' */ this.placement = "right"; /** * Enable modal mode (dark background) */ this.modal = false; /** * Specify whether the popover body has any padding. * Setting this to false will remove all padding from the popover body. */ this.hasPadding = true; /** * Prevent closing popover when clicking itself. */ this.preventClosing = false; /** * Specifies whether the default width and height constraints are in effect for the popover */ this.unlimited = false; /** * Specifies the timeout in ms after which the tooltip is displayed */ this.delay = 0; /** * Sets whether the overlay can grow after the initial open via flexible width/height. */ this.withGrowAfterOpen = false; /** * Emits an event upon display of the popover */ this.shown = new EventEmitter(); /** * Emits an event upon disappearance of the popover */ this.hidden = new EventEmitter(); this.overlayConfig = { width: "auto" }; this.popoverOpenedProgrammatically = false; this.hidingAnimationInProgress = false; this.positionStrategySubscriptions = []; this.overlayUtilitiesService = new OverlayUtilitiesService(); } ngOnInit() { if (this.container) { this.containerElementRef = new ElementRef(this.container); } if (this.modal) { this.overlayConfig = { ...this.overlayConfig, backdropClass: "modal-backdrop", hasBackdrop: true, }; } if (!this.overlayConfig?.positionStrategy) { this.setPositionStrategy(this.placement); } if (this.openPopover && this.isTriggerPresent("openPopoverSubject")) { this.openPopoverSubscription = this.openPopover.subscribe(() => { this.popoverOpenedProgrammatically = true; this.showPopover(); }); } this.overlayConfig = { ...this.overlayConfig, panelClass: "nui-popover-overlay", }; } ngOnChanges(changes) { if (changes.placement) { this.setPositionStrategy(changes.placement.currentValue); } } ngOnDestroy() { if (this.mouseEnterTimeout) { clearTimeout(this.mouseEnterTimeout); this.mouseEnterTimeout = undefined; } if (this.popover) { this.cleanUp(); } if (this.closePopoverSubscription) { this.closePopoverSubscription.unsubscribe(); } if (this.openPopoverSubscription) { this.openPopoverSubscription.unsubscribe(); } this.clearPositionStrategySubscriptions(); } onBackdropClick() { if (this.modal) { this.popoverModalEventSubject.next("backdrop-click"); } } showPopover() { if (this.disabled) { return; } if (!_isNil(this.popover)) { this.cleanUp(); } this.hidingAnimationInProgress = false; const factory = this.componentFactoryResolver.resolveComponentFactory(PopoverModalComponent); this.popover = this.modalContainer.createComponent(factory); this.initializePopover(); this.setPositionStrategy(this.placement); this.overlayComponent.show(); this.initializeResizeObserver(); this.shown.emit(); // Needs for proper initialization of content inside overlay this.cdRef.detectChanges(); } /** * Updates the position of the popup based on its overlay's current position strategy. * This method is currently used in Charts by the ChartPopoverComponent. */ updatePosition() { this.overlayComponent?.getOverlayRef()?.updatePosition(); } /** * Resets the size of the popover. */ resetSize() { // This is set to undefined so that angular cdk will set the height and width automatically this.overlayComponent?.getOverlayRef()?.updateSize({ height: undefined, width: undefined, }); } onTrigger(triggerType) { if (this.isTriggerPresent(triggerType)) { if (this.delay > 0 && triggerType === "mouseenter" && this.isTriggerPresent("mouseenter")) { if (this.mouseEnterTimeout) { clearTimeout(this.mouseEnterTimeout); } this.mouseEnterTimeout = setTimeout(() => { this.activatePopover(); }, this.delay); } else { this.activatePopover(); } } } activatePopover() { this.eventBusService.getStream(CLOSE_POPOVER_EVENT).next(); this.showPopover(); } initializePopover() { this.popoverModalSubscriptions = []; const closePopoverSubscription = merge((!this.preventClosing ? this.eventBusService.getStream(CLOSE_POPOVER_EVENT) : EMPTY), this.closePopover || EMPTY).subscribe(() => { this.hidePopover(); }); if (!this.popover) { throw new Error("PopoverModalComponent is undefined"); } this.popover.instance.context = this.getContext(); this.popover.instance.template = this.template; this.popover.instance.hostElement = this.viewContainerRef.element.nativeElement; this.popover.instance.unlimited = this.unlimited; this.popover.instance.placement = this.placement; this.popoverDisplaySubject = new BehaviorSubject(true); this.popoverBeforeHiddenSubject = new Subject(); this.popoverAfterHiddenSubject = new Subject(); this.popoverModalEventSubject = new Subject(); this.popover.instance.popoverBeforeHiddenSubject = this.popoverBeforeHiddenSubject; this.popover.instance.popoverAfterHiddenSubject = this.popoverAfterHiddenSubject; this.popover.instance.popoverModalEventSubject = this.popoverModalEventSubject; const popoverBeforeHiddenSubscription = this.popoverBeforeHiddenSubject.subscribe(() => { this.hidingAnimationInProgress = true; }); const popoverAfterHiddenSubscription = this.popoverAfterHiddenSubject.subscribe(() => { if (this.hidingAnimationInProgress) { this.cleanUp(); this.hidingAnimationInProgress = false; } }); if (this.isTriggerPresent("click") && !this.preventClosing) { const documentClickSubscription = this.eventBusService .getStream(DOCUMENT_CLICK_EVENT) .subscribe((event) => { const popoverModalNativeElement = this.popover?.instance.elRef.nativeElement; const eventPath = UtilService.getEventPath(event); const clickInsidePopover = _includes(eventPath, popoverModalNativeElement); if (!clickInsidePopover) { this.popoverOpenedProgrammatically ? (this.popoverOpenedProgrammatically = false) : this.hidePopover(); } }); this.popoverModalSubscriptions.push(documentClickSubscription); } const popoverModalEventSubscription = this.popoverModalEventSubject.subscribe((reason) => { switch (reason) { case "backdrop-click": case "outside-click": if (!this.preventClosing) { this.hidePopover(); } break; case "mouse-leave": this.mouseLeaveResolver(); break; case "mouse-enter": this.mouseEnterResolver(); break; } }); this.popoverModalSubscriptions.push(popoverModalEventSubscription, popoverBeforeHiddenSubscription, popoverAfterHiddenSubscription, closePopoverSubscription); this.popover.instance.displayChange = this.popoverDisplaySubject; this.popover.instance.backdrop = this.modal; this.popover.instance.hasPadding = _isUndefined(this.hasPadding) ? true : this.hasPadding; } cleanUp() { this.resizeObserver?.disconnect(); this.popoverModalSubscriptions.forEach((sub) => { if (sub) { sub.unsubscribe(); } }); this.popover?.destroy(); this.overlayComponent.hide(); this.hidden.emit(); this.popover = undefined; } hidePopover() { if (!this.disabled) { this.popoverDisplaySubject.next(false); } } getContext() { return { placement: this.placement, arrowMarginTop: this.arrowMarginTop, popoverPosition: this.position, icon: this.getIcon(), title: this.popoverTitle, }; } mouseEnterResolver() { if (this.mouseLeaveTimeout) { clearTimeout(this.mouseLeaveTimeout); this.mouseLeaveTimeout = undefined; } } mouseLeaveResolver() { // if a cursor leaves both popover trigger and popover body - user has popoverConstants.mouseLeaveDelay ms // to return cursor to these elements. In case of using hover trigger it helps to ensure that popover won't close // when user moves their's cursor from popover trigger to popover body if (this.isTriggerPresent("mouseenter")) { this.mouseLeaveTimeout = setTimeout(() => { if (this.popover) { this.hidePopover(); this.mouseLeaveTimeout = undefined; } }, popoverConstants.mouseLeaveDelay); if (this.mouseEnterTimeout) { clearTimeout(this.mouseEnterTimeout); this.mouseEnterTimeout = undefined; } } } isTriggerPresent(valueToCompare) { return this.trigger.split(" ").indexOf(valueToCompare) !== -1; } getIcon() { return this.icon; } setPositionStrategy(position) { const positionStrategy = this.overlay .position() .flexibleConnectedTo(this.host.nativeElement) .withPush(false) .withViewportMargin(0) .withGrowAfterOpen(this.withGrowAfterOpen) .withPositions(this.getPopoverConnectedPosition(position)); const subscription = positionStrategy.positionChanges.subscribe((connectedPosition) => { const overlayRefElement = this.overlayComponent.getOverlayRef().overlayElement; const elRefHeight = this.host.nativeElement.getBoundingClientRect().height; const panelClass = connectedPosition.connectionPair.panelClass; if (!panelClass) { return; } this.popoverPositionService.setPopoverOffset(panelClass, elRefHeight, overlayRefElement); }); this.positionStrategySubscriptions.push(subscription); this.overlayConfig = { ...this.overlayConfig, positionStrategy }; } getPopoverConnectedPosition(position) { this.popoverPositionService = new PopoverPositionService(); if (this.popoverOverlayPosition) { return this.popoverPositionService.getConnectedPositions(this.popoverOverlayPosition); } return this.popoverPositionService.possiblePositionsForPlacement(position); } clearPositionStrategySubscriptions() { for (const sub of this.positionStrategySubscriptions) { sub.unsubscribe(); } } initializeResizeObserver() { this.resizeObserver = this.overlayUtilitiesService .setPopupComponent(this.overlayComponent) .getResizeObserver(); this.resizeObserver.observe(this.overlayComponent.getOverlayRef().overlayElement); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.ElementRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i2.EventBusService }, { token: i3.PopoverPositionService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PopoverComponent, selector: "nui-popover", inputs: { closePopover: "closePopover", openPopover: "openPopover", disabled: "disabled", trigger: "trigger", template: "template", placement: "placement", popoverTitle: "popoverTitle", icon: "icon", modal: "modal", container: "container", hasPadding: "hasPadding", preventClosing: "preventClosing", unlimited: "unlimited", delay: "delay", withGrowAfterOpen: "withGrowAfterOpen", popoverOverlayPosition: "popoverOverlayPosition" }, outputs: { shown: "shown", hidden: "hidden" }, host: { listeners: { "click": "onClick($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focusin": "onFocusIn()", "focusout": "onFocusOut()" }, classAttribute: "nui-popover" }, providers: [PopoverPositionService], queries: [{ propertyName: "myTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "renderContainer", first: true, predicate: ["renderContainer"], descendants: true }, { propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "overlayComponent", first: true, predicate: OverlayComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n<nui-overlay\n [customContainer]=\"containerElementRef\"\n [toggleReference]=\"host.nativeElement\"\n [overlayConfig]=\"overlayConfig\"\n (clickOutside)=\"onBackdropClick()\"\n>\n <ng-template #modalContainer></ng-template>\n</nui-overlay>\n", styles: [".nui .nui-popover-container{padding:0;font-size:11px;border:none;background-color:var(--nui-color-bg-content_popover,#fff);background-clip:padding-box;border-radius:0;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.66666667;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal}.nui .nui-popover-container:not(.unlimited){min-width:200px;max-width:350px;max-height:60vh}.nui .nui-popover-container-animation{-webkit-backface-visibility:hidden;backface-visibility:hidden}.nui .nui-popover-container__backdrop{position:absolute;inset:0;position:fixed;background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5));z-index:1059;cursor:default}.nui .nui-popover-container__backdrop.ng-enter,.nui .nui-popover-container__backdrop.ng-leave{transition:all ease-in-out .2s}.nui .nui-popover-container__backdrop.ng-enter,.nui .nui-popover-container__backdrop.ng-leave.ng-leave-active{opacity:0}.nui .nui-popover-container__backdrop.ng-leave,.nui .nui-popover-container__backdrop.ng-enter.ng-enter-active{opacity:.5}.nui .nui-popover-container__backdrop.modal-backdrop{position:fixed;inset:0;z-index:1040;background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5))}.nui .nui-popover-container__backdrop.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.nui .nui-popover-container__backdrop.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.nui .nui-popover-container__frame{background-color:var(--nui-color-bg-content_popover,#fff)}.nui .nui-popover-container__frame.ng-enter,.nui .nui-popover-container__frame.ng-leave{transition:all ease-in-out .2s}.nui .nui-popover-container__frame.ng-enter,.nui .nui-popover-container__frame.ng-leave.ng-leave-active{opacity:0}.nui .nui-popover-container__frame.ng-leave,.nui .nui-popover-container__frame.ng-enter.ng-enter-active{opacity:1}.nui .nui-popover-container__header--with-border{border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--nui-color-line-default, #d9d9d9)}.nui .nui-popover-container__title{font-size:13px;font-weight:600;padding:10px;overflow:hidden;text-overflow:ellipsis;background-color:var(--nui-color-bg-content_popover,#fff);color:var(--nui-color-text-default,#111);white-space:nowrap}.nui .nui-popover-container__title--with-icon{padding-left:0}.nui .nui-popover-container__icon{float:left;margin:12px 5px 10px 10px}.nui .nui-popover-container__icon .nui-icon{margin:0}.nui .nui-popover-container__content{padding:10px;display:block;background-color:var(--nui-color-bg-content_popover,#fff)}.nui .nui-popover-container__content.noPadding{padding:0}.nui .nui-popover-container--shadow{box-shadow:0 3px 9px #11111180;box-shadow:0 3px 9px var(--nui-color-overlay-dark, rgba(17, 17, 17, .5))}.nui .nui-popover-container--hidden{visibility:hidden}.nui-popover-container-animation{box-shadow:0 0 5px 0 var(--nui-shadow-color, rgba(17, 17, 17, .3))}.overlay-left-bottom .nui-popover-container-animation .nui-overlay-arrow,.overlay-left-top .nui-popover-container-animation .nui-overlay-arrow{right:-6px}.overlay-right-bottom .nui-popover-container-animation .nui-overlay-arrow,.overlay-right-top .nui-popover-container-animation .nui-overlay-arrow{left:-6px}.overlay-left-top .nui-popover-container-animation .nui-overlay-arrow,.overlay-right-top .nui-popover-container-animation .nui-overlay-arrow{bottom:6px}.overlay-top-left .nui-popover-container-animation .nui-overlay-arrow,.overlay-top-right .nui-popover-container-animation .nui-overlay-arrow{bottom:-6px}.overlay-bottom-left .nui-popover-container-animation .nui-overlay-arrow,.overlay-bottom-right .nui-popover-container-animation .nui-overlay-arrow{top:-6px}.nui nui-popover-modal{display:flex;position:relative}.nui .nui-popover{display:inline-flex}.nui .modal-backdrop{background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5))}.nui .nui-popover-overlay{transform:none!important}.nui .nui-popover-overlay .nui-overlay{overflow:initial}\n"], dependencies: [{ kind: "component", type: i4.OverlayComponent, selector: "nui-overlay", inputs: ["overlayConfig", "toggleReference", "viewportMargin", "customContainer", "roleAttr"], outputs: ["clickOutside"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopoverComponent, decorators: [{ type: Component, args: [{ selector: "nui-popover", host: { class: "nui-popover" }, encapsulation: ViewEncapsulation.None, providers: [PopoverPositionService], template: "<ng-content></ng-content>\n<nui-overlay\n [customContainer]=\"containerElementRef\"\n [toggleReference]=\"host.nativeElement\"\n [overlayConfig]=\"overlayConfig\"\n (clickOutside)=\"onBackdropClick()\"\n>\n <ng-template #modalContainer></ng-template>\n</nui-overlay>\n", styles: [".nui .nui-popover-container{padding:0;font-size:11px;border:none;background-color:var(--nui-color-bg-content_popover,#fff);background-clip:padding-box;border-radius:0;font-family:Open Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.66666667;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal}.nui .nui-popover-container:not(.unlimited){min-width:200px;max-width:350px;max-height:60vh}.nui .nui-popover-container-animation{-webkit-backface-visibility:hidden;backface-visibility:hidden}.nui .nui-popover-container__backdrop{position:absolute;inset:0;position:fixed;background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5));z-index:1059;cursor:default}.nui .nui-popover-container__backdrop.ng-enter,.nui .nui-popover-container__backdrop.ng-leave{transition:all ease-in-out .2s}.nui .nui-popover-container__backdrop.ng-enter,.nui .nui-popover-container__backdrop.ng-leave.ng-leave-active{opacity:0}.nui .nui-popover-container__backdrop.ng-leave,.nui .nui-popover-container__backdrop.ng-enter.ng-enter-active{opacity:.5}.nui .nui-popover-container__backdrop.modal-backdrop{position:fixed;inset:0;z-index:1040;background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5))}.nui .nui-popover-container__backdrop.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.nui .nui-popover-container__backdrop.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.nui .nui-popover-container__frame{background-color:var(--nui-color-bg-content_popover,#fff)}.nui .nui-popover-container__frame.ng-enter,.nui .nui-popover-container__frame.ng-leave{transition:all ease-in-out .2s}.nui .nui-popover-container__frame.ng-enter,.nui .nui-popover-container__frame.ng-leave.ng-leave-active{opacity:0}.nui .nui-popover-container__frame.ng-leave,.nui .nui-popover-container__frame.ng-enter.ng-enter-active{opacity:1}.nui .nui-popover-container__header--with-border{border-bottom:1px solid #d9d9d9;border-bottom:1px solid var(--nui-color-line-default, #d9d9d9)}.nui .nui-popover-container__title{font-size:13px;font-weight:600;padding:10px;overflow:hidden;text-overflow:ellipsis;background-color:var(--nui-color-bg-content_popover,#fff);color:var(--nui-color-text-default,#111);white-space:nowrap}.nui .nui-popover-container__title--with-icon{padding-left:0}.nui .nui-popover-container__icon{float:left;margin:12px 5px 10px 10px}.nui .nui-popover-container__icon .nui-icon{margin:0}.nui .nui-popover-container__content{padding:10px;display:block;background-color:var(--nui-color-bg-content_popover,#fff)}.nui .nui-popover-container__content.noPadding{padding:0}.nui .nui-popover-container--shadow{box-shadow:0 3px 9px #11111180;box-shadow:0 3px 9px var(--nui-color-overlay-dark, rgba(17, 17, 17, .5))}.nui .nui-popover-container--hidden{visibility:hidden}.nui-popover-container-animation{box-shadow:0 0 5px 0 var(--nui-shadow-color, rgba(17, 17, 17, .3))}.overlay-left-bottom .nui-popover-container-animation .nui-overlay-arrow,.overlay-left-top .nui-popover-container-animation .nui-overlay-arrow{right:-6px}.overlay-right-bottom .nui-popover-container-animation .nui-overlay-arrow,.overlay-right-top .nui-popover-container-animation .nui-overlay-arrow{left:-6px}.overlay-left-top .nui-popover-container-animation .nui-overlay-arrow,.overlay-right-top .nui-popover-container-animation .nui-overlay-arrow{bottom:6px}.overlay-top-left .nui-popover-container-animation .nui-overlay-arrow,.overlay-top-right .nui-popover-container-animation .nui-overlay-arrow{bottom:-6px}.overlay-bottom-left .nui-popover-container-animation .nui-overlay-arrow,.overlay-bottom-right .nui-popover-container-animation .nui-overlay-arrow{top:-6px}.nui nui-popover-modal{display:flex;position:relative}.nui .nui-popover{display:inline-flex}.nui .modal-backdrop{background-color:var(--nui-color-overlay-modal,rgba(17, 17, 17, .5))}.nui .nui-popover-overlay{transform:none!important}.nui .nui-popover-overlay .nui-overlay{overflow:initial}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i2.EventBusService }, { type: i3.PopoverPositionService }], propDecorators: { closePopover: [{ type: Input }], openPopover: [{ type: Input }], disabled: [{ type: Input }], trigger: [{ type: Input }], template: [{ type: Input }], placement: [{ type: Input }], popoverTitle: [{ type: Input }], icon: [{ type: Input }], modal: [{ type: Input }], container: [{ type: Input }], hasPadding: [{ type: Input }], preventClosing: [{ type: Input }], unlimited: [{ type: Input }], delay: [{ type: Input }], withGrowAfterOpen: [{ type: Input }], popoverOverlayPosition: [{ type: Input }], shown: [{ type: Output }], hidden: [{ type: Output }], myTemplate: [{ type: ContentChild, args: [TemplateRef] }], renderContainer: [{ type: ViewChild, args: ["renderContainer"] }], modalContainer: [{ type: ViewChild, args: ["modalContainer", { read: ViewContainerRef }] }], overlayComponent: [{ type: ViewChild, args: [OverlayComponent] }], onClick: [{ type: HostListener, args: ["click", ["$event"]] }], onMouseEnter: [{ type: HostListener, args: ["mouseenter"] }], onMouseLeave: [{ type: HostListener, args: ["mouseleave"] }], onFocusIn: [{ type: HostListener, args: ["focusin"] }], onFocusOut: [{ type: HostListener, args: ["focusout"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUdILE9BQU8sR0FFVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUV4QixZQUFZLEVBQ1osVUFBVSxFQUVWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULGdCQUFnQixFQUNoQixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFDO0FBQ2xDLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFDSCxlQUFlLEVBQ2YsS0FBSyxFQUNMLEtBQUssRUFFTCxPQUFPLEdBRVYsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0gscUJBQXFCLEdBRXhCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJB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QUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS0ksS0FBSztzQkFBZCxNQUFNO2dCQUlHLE1BQU07c0JBQWYsTUFBTTtnQkFFb0IsVUFBVTtzQkFBcEMsWUFBWTt1QkFBQyxXQUFXO2dCQUVLLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUc1QixjQUFjO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRzFCLGdCQUFnQjtzQkFBNUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBOEJwQixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVkxQixZQUFZO3NCQURsQixZQUFZO3VCQUFDLFlBQVk7Z0JBT25CLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsWUFBWTtnQkFPbkIsU0FBUztzQkFEZixZQUFZO3VCQUFDLFNBQVM7Z0JBTWhCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIMKpIDIwMjIgU29sYXJXaW5kcyBXb3JsZHdpZGUsIExMQy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vICBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vclxuLy8gIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vICBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyAgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyAgVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge1xuICAgIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSxcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICBPdmVybGF5LFxuICAgIE92ZXJsYXlDb25maWcsXG59IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCBfaW5jbHVkZXMgZnJvbSBcImxvZGFzaC9pbmNsdWRlc1wiO1xuaW1wb3J0IF9pc05pbCBmcm9tIFwibG9kYXNoL2lzTmlsXCI7XG5pbXBvcnQgX2lzVW5kZWZpbmVkIGZyb20gXCJsb2Rhc2gvaXNVbmRlZmluZWRcIjtcbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIEVNUFRZLFxuICAgIG1lcmdlLFxuICAgIE9ic2VydmFibGUsXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpcHRpb24sXG59IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7XG4gICAgUG9wb3Zlck1vZGFsQ29tcG9uZW50LFxuICAgIFBvcG92ZXJNb2RhbEV2ZW50cyxcbn0gZnJvbSBcIi4vcG9wb3Zlci1tb2RhbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IElQb3BvdmVyTW9kYWxDb250ZXh0IH0gZnJvbSBcIi4vcG9wb3Zlci1tb2RhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQb3BvdmVyUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4vcG9wb3Zlci1wb3NpdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIFBvcG92ZXJPdmVybGF5UG9zaXRpb24sXG4gICAgUG9wb3ZlclBsYWNlbWVudCxcbiAgICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSBcIi4vcHVibGljLWFwaVwiO1xuaW1wb3J0IHtcbiAgICBDTE9TRV9QT1BPVkVSX0VWRU5ULFxuICAgIERPQ1VNRU5UX0NMSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2V2ZW50LmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgcG9wb3ZlckNvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvcG9wb3Zlci5jb25zdGFudHNcIjtcbmltcG9ydCB7IEV2ZW50QnVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9ldmVudC1idXMuc2VydmljZVwiO1xuaW1wb3J0IHsgVXRpbFNlcnZpY