@nova-ui/bits
Version:
SolarWinds Nova Framework
475 lines • 75.7 kB
JavaScript
// © 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