UNPKG

ngx-float-ui

Version:

ngx-float-ui is an Angular wrapper for Floating UI

1 lines 58.8 kB
{"version":3,"file":"ngx-float-ui.mjs","sources":["../../../projects/ngx-float-ui/src/lib/models/ngx-float-ui-placements.model.ts","../../../projects/ngx-float-ui/src/lib/models/ngx-float-ui-triggers.model.ts","../../../projects/ngx-float-ui/src/lib/components/ngx-float-ui-content/ngx-float-ui-content.component.ts","../../../projects/ngx-float-ui/src/lib/components/ngx-float-ui-content/ngx-float-ui-content.component.html","../../../projects/ngx-float-ui/src/lib/models/ngx-float-ui-defaults.model.ts","../../../projects/ngx-float-ui/src/lib/models/ngx-float-ui-utils.class.ts","../../../projects/ngx-float-ui/src/lib/directives/ngx-float-ui/ngx-float-ui.directive.ts","../../../projects/ngx-float-ui/src/lib/directives/ngx-float-ui/ngx-float-ui-loose.directive.ts","../../../projects/ngx-float-ui/src/lib/providers/provide-ngx-float-ui-options.provider.ts","../../../projects/ngx-float-ui/src/lib/ngx-float-ui.module.ts","../../../projects/ngx-float-ui/src/public-api.ts","../../../projects/ngx-float-ui/src/ngx-float-ui.ts"],"sourcesContent":["\nexport enum NgxFloatUiPlacements {\n AUTO = \"auto\",\n AUTOSTART = \"auto-start\",\n AUTOEND = \"auto-end\",\n TOP = \"top\",\n BOTTOM = \"bottom\",\n LEFT = \"left\",\n RIGHT = \"right\",\n TOPSTART = \"top-start\",\n BOTTOMSTART = \"bottom-start\",\n LEFTSTART = \"left-start\",\n RIGHTSTART = \"right-start\",\n TOPEND = \"top-end\",\n BOTTOMEND = \"bottom-end\",\n LEFTEND = \"left-end\",\n RIGHTEND = \"right-end\"\n}\n","export enum NgxFloatUiTriggers {\n click = \"click\",\n hover = \"hover\",\n mousedown = \"mousedown\",\n none = \"none\"\n}\n","import { NgClass, NgStyle } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n OnDestroy,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from \"@angular/core\";\n//\nimport {\n Alignment,\n arrow,\n autoPlacement,\n autoUpdate,\n computePosition,\n ComputePositionConfig,\n flip,\n limitShift,\n offset,\n Placement,\n shift,\n} from \"@floating-ui/dom\";\nimport {fromEvent, Subject, takeUntil} from \"rxjs\";\n//\nimport {NgxFloatUiOptions} from \"../../models/ngx-float-ui-options.model\";\nimport {NgxFloatUiPlacements} from \"../../models/ngx-float-ui-placements.model\";\nimport {NgxFloatUiTriggers} from \"../../models/ngx-float-ui-triggers.model\";\n\n@Component({\n selector: \"float-ui-content\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: \"./ngx-float-ui-content.component.html\",\n styleUrls: [\"./ngx-float-ui-content.component.scss\"],\n exportAs: \"ngxFloatUiContent\",\n standalone: true,\n imports: [NgStyle, NgClass]\n})\nexport class NgxFloatUiContentComponent implements OnDestroy {\n\n static nextId: number = 0;\n\n protected get _dynamicArrowSides() {\n return {\n top: \"left\",\n right: \"top\",\n bottom: \"left\",\n left: \"top\"\n };\n }\n\n protected get _sideAxis() {\n return {\n left: \"x\",\n top: \"y\",\n right: \"x\",\n bottom: \"y\"\n };\n }\n\n protected get _staticArrowSides() {\n return {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n };\n }\n\n ariaHidden: string;\n arrowColor: string | null = null;\n displayType: string;\n floatUiOptions: NgxFloatUiOptions = {\n disableAnimation: false,\n disableDefaultStyling: false,\n boundariesElement: \"\",\n trigger: NgxFloatUiTriggers.hover,\n positionFixed: false,\n appendToBody: false,\n popperModifiers: []\n } as NgxFloatUiOptions;\n floatUiSwitch: () => void;\n @ViewChild(\"floatUiViewRef\", {static: !0}) floatUiViewRef: ElementRef;\n id: string = `ngx_float_ui_${++NgxFloatUiContentComponent.nextId}`;\n isMouseOver: boolean = !1;\n onHidden = new EventEmitter();\n onUpdate: () => any;\n opacity: number;\n referenceObject: HTMLElement;\n state: boolean;\n text: string;\n\n protected _destroy$: Subject<void> = new Subject<void>();\n protected _resizeCtrl$: Subject<void> = new Subject<void>();\n protected _styleId = `${this.id}_style`;\n\n constructor(public elRef: ElementRef,\n protected _viewRef: ViewContainerRef,\n protected _changeDetectorRef: ChangeDetectorRef) {\n this._toggleVisibility(!1);\n }\n\n clean() {\n this.toggleVisibility(false);\n if (!this.floatUiSwitch) {\n return;\n }\n this.floatUiSwitch();\n }\n\n extractAppliedClassListExpr(classList: string | string[] = []): object {\n const klassList = Array.isArray(classList) ? classList : typeof classList === typeof \"\" ? classList.replace(/ /, \"\").split(\",\") : [];\n\n return klassList.reduce((acc, klass) => {\n acc[klass] = !0;\n\n return acc;\n }, {});\n }\n\n hide(): void {\n if (this.floatUiSwitch) {\n this.floatUiSwitch();\n }\n this.toggleVisibility(!1);\n this.onHidden.emit();\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this.clean();\n if (this.floatUiOptions.appendTo && this.elRef && this.elRef.nativeElement && this.elRef.nativeElement.parentNode) {\n this._viewRef.detach();\n this.elRef.nativeElement.parentNode.removeChild(this.elRef.nativeElement);\n }\n }\n\n onDocumentResize() {\n this.update();\n }\n\n @HostListener(\"mouseover\")\n onMouseOver() {\n this.isMouseOver = true;\n }\n\n show(): void {\n if (!this.referenceObject) {\n return;\n }\n this._resizeCtrl$.next();\n this._determineArrowColor();\n this.floatUiSwitch = autoUpdate(\n this.referenceObject,\n this.floatUiViewRef.nativeElement,\n () => {\n this._computePosition();\n }\n );\n fromEvent(document, \"resize\")\n .pipe(\n takeUntil(this._resizeCtrl$),\n takeUntil(this._destroy$)\n )\n .subscribe({\n next: () => this.onDocumentResize()\n });\n }\n\n @HostListener(\"mouseleave\")\n showOnLeave() {\n this.isMouseOver = false;\n if (this.floatUiOptions.trigger !== NgxFloatUiTriggers.hover && !this.floatUiOptions.hideOnMouseLeave) {\n return;\n }\n this.hide();\n }\n\n // Toggle visibility and detect changes - Run only after ngOnInit!\n toggleVisibility(state: boolean): void {\n this._toggleVisibility(state);\n // tslint:disable-next-line:no-string-literal\n if (!this._changeDetectorRef[\"destroyed\"]) {\n this._changeDetectorRef.detectChanges();\n }\n }\n\n update(): void {\n this._computePosition();\n }\n\n protected _computePosition(): void {\n const appendToParent = this.floatUiOptions.appendTo && document.querySelector(this.floatUiOptions.appendTo);\n if (appendToParent) {\n const parent = this.elRef.nativeElement.parentNode;\n if (parent !== appendToParent) {\n parent && parent.removeChild(this.elRef.nativeElement);\n appendToParent.appendChild(this.elRef.nativeElement);\n }\n }\n\n const arrowElement = this.elRef.nativeElement.querySelector(\".float-ui-arrow\");\n const arrowLen = arrowElement.offsetWidth;\n // Get half the arrow box's hypotenuse length\n const floatingOffset = Math.sqrt(2 * arrowLen ** 2) / 2;\n const parsedAutoAlignment: Alignment | undefined = (this.floatUiOptions.placement?.replace(\"auto-\", \"\") || void 0) as Alignment | undefined;\n // Since \"auto\" doesn't really exist in floating-ui we pass undefined to have auto\n const parsedPlacement = !this.floatUiOptions.placement || this.floatUiOptions.placement.indexOf(NgxFloatUiPlacements.AUTO) === 0\n ? void 0\n : (this.floatUiOptions.placement as Placement);\n const popperOptions: Partial<ComputePositionConfig> = {\n placement: parsedPlacement,\n strategy: this.floatUiOptions.positionFixed ? \"fixed\" : \"absolute\",\n middleware: [\n offset(floatingOffset),\n ...(this.floatUiOptions.preventOverflow\n ? [flip()]\n : []\n ),\n shift({limiter: limitShift()}),\n arrow({\n element: arrowElement,\n padding: 4\n })\n ]\n };\n // Since preventOverflow uses \"flip\" and \"flip\" can't be used with \"autoPlacement\" we get here only if both conditions are falsy\n if (!this.floatUiOptions.preventOverflow && !popperOptions.placement) {\n const boundariesElement = this.floatUiOptions.boundariesElement\n ? document.querySelector(this.floatUiOptions.boundariesElement)\n : this.referenceObject.parentElement;\n popperOptions.middleware.push(\n autoPlacement({\n crossAxis: !0,\n alignment: parsedAutoAlignment,\n autoAlignment: this.floatUiOptions.placement === NgxFloatUiPlacements.AUTO,\n boundary: boundariesElement\n })\n );\n }\n computePosition(this.referenceObject, this.floatUiViewRef.nativeElement, {\n ...popperOptions\n })\n .then(({middlewareData, x, y, placement}) => {\n const side = placement.split(\"-\")[0];\n this.floatUiViewRef.nativeElement.setAttribute(\"data-float-ui-placement\", side);\n if (middlewareData.arrow) {\n const staticArrowSide = this._staticArrowSides[side];\n const dynamicArrowSide = this._dynamicArrowSides[side];\n const dynamicSideAxis = this._sideAxis[dynamicArrowSide];\n Object.assign(arrowElement.style, {\n top: \"\",\n bottom: \"\",\n left: \"\",\n right: \"\",\n [dynamicArrowSide]: middlewareData.arrow[dynamicSideAxis] != null ? `${middlewareData.arrow[dynamicSideAxis]}px` : \"\",\n [staticArrowSide]: `${-arrowLen / 2}px`\n });\n }\n Object.assign(this.floatUiViewRef.nativeElement.style, {\n left: `${x}px`,\n top: `${y}px`\n });\n this.toggleVisibility(!0);\n this.onUpdate?.();\n });\n }\n\n protected _createArrowSelector(): string {\n return `div#${this.id}.float-ui-container > .float-ui-arrow.ngxp__force-arrow`;\n }\n\n protected _determineArrowColor() {\n if (!this.floatUiOptions.styles || this.arrowColor) {\n\n return !1;\n }\n const ruleValue = this.floatUiOptions.styles[\"background-color\"] || this.floatUiOptions.styles.backgroundColor;\n if (this.arrowColor === ruleValue) {\n return !1;\n }\n this.arrowColor = ruleValue;\n let $style = document.querySelector(`#${this._styleId}`) as HTMLStyleElement;\n const styleContent = this.arrowColor ?\n `${this._createArrowSelector()}:before { background-color: ${this.arrowColor}; }` : \"\";\n if (!$style) {\n $style = document.createElement(\"style\") as HTMLStyleElement;\n $style.id = this._styleId;\n $style.setAttribute(\"type\", \"text/css\");\n document.head.appendChild($style);\n }\n // tslint:disable-next-line:no-string-literal\n if ($style[\"styleSheet\"]) {\n // tslint:disable-next-line:no-string-literal\n $style[\"styleSheet\"].cssText = styleContent;\n // This is required for IE8 and below.\n }\n else {\n $style.innerHTML = styleContent;\n }\n }\n\n protected _toggleVisibility(state): void {\n this.displayType = [\"none\", \"block\"][+state];\n this.opacity = +state;\n this.ariaHidden = `${!state}`;\n this.state = state;\n }\n}\n","<div #floatUiViewRef\n\t [attr.id]=\"id\"\n\t [class.float-ui-container]=\"!floatUiOptions.disableDefaultStyling\"\n\t [class.float-ui-animation]=\"!floatUiOptions.disableAnimation\"\n\t [class.float-ui-fixed]=\"floatUiOptions.positionFixed\"\n\t [style.display]=\"displayType\"\n\t [style.opacity]=\"opacity\"\n\t [ngStyle]=\"floatUiOptions.styles\"\n\t [ngClass]=\"extractAppliedClassListExpr(floatUiOptions.applyClass)\"\n\t attr.aria-hidden=\"{{ariaHidden}}\"\n\t [attr.aria-describedby]=\"floatUiOptions.ariaDescribe || null\"\n\t attr.role=\"{{floatUiOptions.ariaRole}}\">\n\t@if (text) {\n\t\t<div\n\t\t\t\tclass=\"ngxp__inner\"\n\t\t\t\t[innerHTML]=\"text\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t}\n\t@else {\n\t\t<div\n\t\t\t\tclass=\"ngxp__inner\">\n\t\t\t<ng-content></ng-content>\n\t\t</div>\n\t}\n\t<div class=\"float-ui-arrow\"\n\t\t [class.ngxp__force-arrow]=\"arrowColor\"\n\t\t [ngClass]=\"extractAppliedClassListExpr(floatUiOptions.applyArrowClass)\"></div>\n\n</div>\n","import {InjectionToken} from \"@angular/core\";\n//\nimport {NgxFloatUiOptions} from \"./ngx-float-ui-options.model\";\n\nexport const NGX_FLOAT_UI_DEFAULTS = new InjectionToken<NgxFloatUiOptions>(\"NGX_FLOAT_UI_DEFAULTS\");\n","/**\n * @private\n */\nexport class NgxFloatUiUtils {\n\n /** Coerces a data-bound value (typically a string) to a boolean. */\n static coerceBooleanProperty(value: any): boolean {\n return value != null && `${value}` !== \"false\";\n }\n}\n","import {\n ChangeDetectorRef,\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewContainerRef\n} from \"@angular/core\";\nimport {fromEvent, Subject, takeUntil, timer} from \"rxjs\";\n//\nimport {NgxFloatUiContentComponent} from \"../../components/ngx-float-ui-content/ngx-float-ui-content.component\";\nimport {NGX_FLOAT_UI_DEFAULTS} from \"../../models/ngx-float-ui-defaults.model\";\nimport {NgxFloatUiOptions} from \"../../models/ngx-float-ui-options.model\";\nimport {NgxFloatUiPlacements} from \"../../models/ngx-float-ui-placements.model\";\nimport {NgxFloatUiTriggers} from \"../../models/ngx-float-ui-triggers.model\";\nimport {NgxFloatUiUtils} from \"../../models/ngx-float-ui-utils.class\";\n\n@Directive({\n selector: \"[floatUi]\",\n exportAs: \"floatUi\"\n})\nexport class NgxFloatUiDirective implements OnInit, OnDestroy {\n\n static nextId: number = 0;\n\n static baseOptions: NgxFloatUiOptions = {\n showDelay: 0,\n hideOnClickOutside: true,\n hideOnMouseLeave: false,\n hideOnScroll: false,\n appendTo: undefined,\n ariaRole: \"popper\",\n ariaDescribe: \"\",\n styles: {},\n trigger: NgxFloatUiTriggers.click\n };\n\n @Input()\n set applyClass(newValue: string) {\n if (newValue === this._applyClass) {\n return;\n }\n this._applyClass = newValue;\n this._checkExisting(\"applyClass\", newValue);\n }\n\n get applyClass(): string {\n return this._applyClass;\n }\n\n @Input()\n set arrowClass(newValue: string) {\n if (newValue === this._arrowClass) {\n return;\n }\n this._arrowClass = newValue;\n if (this._content) {\n this._content.floatUiOptions.applyArrowClass = newValue;\n if (!this._shown) {\n return;\n }\n this._content.update();\n }\n }\n\n get arrowClass(): string {\n return this._arrowClass;\n }\n\n @Input()\n set disabled(newValue: boolean) {\n if (newValue === this._disabled) {\n return;\n }\n this._disabled = !!newValue;\n if (this._shown) {\n this.hide();\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Input()\n set floatUi(newValue: string | NgxFloatUiContentComponent) {\n if (newValue === this._floatUi) {\n\n return;\n }\n this._floatUi = newValue;\n if (this._content) {\n if (typeof newValue === \"string\") {\n this._content.text = newValue;\n }\n else {\n this._content = newValue;\n }\n }\n }\n\n get floatUi(): string | NgxFloatUiContentComponent {\n return this._floatUi;\n }\n\n @Input()\n set hideOnClickOutside(newValue: boolean | string) {\n this._hideOnClickOutside = NgxFloatUiUtils.coerceBooleanProperty(newValue);\n }\n\n get hideOnClickOutside(): boolean {\n return this._hideOnClickOutside;\n }\n\n @Input()\n set placement(newValue: NgxFloatUiPlacements) {\n this._placement = newValue;\n this._checkExisting(\"placement\", newValue);\n }\n\n get placement(): NgxFloatUiPlacements {\n return this._placement;\n }\n\n @Input()\n set preventOverflow(newValue: boolean | string) {\n this._preventOverflow = NgxFloatUiUtils.coerceBooleanProperty(newValue);\n this._checkExisting(\"preventOverflow\", this._preventOverflow);\n }\n\n get preventOverflow(): boolean {\n return this._preventOverflow;\n }\n\n @Input()\n set showOnStart(newValue: boolean) {\n this._showOnStart = NgxFloatUiUtils.coerceBooleanProperty(newValue);\n }\n\n get showOnStart(): boolean {\n return this._showOnStart;\n }\n\n @Input()\n appendTo: string;\n\n @Input()\n ariaDescribe: string | void;\n\n @Input()\n ariaRole: string | void;\n\n @Input()\n boundariesElement: string;\n\n @Input()\n disableAnimation: boolean;\n\n @Input()\n disableStyle: boolean;\n\n @Input()\n hideOnMouseLeave: boolean | void;\n\n @Input()\n hideOnScroll: boolean | void;\n\n @Input()\n hideTimeout: number = 0;\n\n @Output()\n onHidden: EventEmitter<NgxFloatUiDirective> = new EventEmitter<NgxFloatUiDirective>();\n\n @Output()\n onShown: EventEmitter<NgxFloatUiDirective> = new EventEmitter<NgxFloatUiDirective>();\n\n @Output()\n onUpdate: EventEmitter<void> = new EventEmitter<void>();\n\n @Input()\n positionFixed: boolean;\n\n @Input()\n showDelay: number | undefined;\n\n @Input()\n showTrigger: NgxFloatUiTriggers | undefined;\n\n @Input()\n styles: object;\n\n @Input()\n targetElement: HTMLElement;\n\n @Input()\n timeoutAfterShow: number = 0;\n\n protected _applyClass: string;\n protected _arrowClass: string;\n protected _content: NgxFloatUiContentComponent;\n protected _contentClass = NgxFloatUiContentComponent;\n protected _contentRef: ComponentRef<NgxFloatUiContentComponent>;\n protected _destroy$: Subject<void> = new Subject<void>();\n protected _disabled: boolean;\n protected _floatUi: string | NgxFloatUiContentComponent;\n protected _globalEventListenersCtrl$: Subject<void> = new Subject<void>();\n protected _hideOnClickOutside: boolean = !0;\n // @internal\n protected _id: string = `ngx_float_ui_directive_${++NgxFloatUiDirective.nextId}`;\n protected _placement: NgxFloatUiPlacements;\n protected _preventOverflow: boolean;\n protected _scheduledHideTimeoutCtrl$: Subject<void> = new Subject<void>();\n protected _scheduledShowTimeoutCtrl$: Subject<void> = new Subject<void>();\n protected _shown: boolean = !1;\n protected _showOnStart: boolean = !1;\n\n constructor(protected _changeDetectorRef: ChangeDetectorRef,\n protected _elementRef: ElementRef,\n protected _vcr: ViewContainerRef,\n @Inject(NGX_FLOAT_UI_DEFAULTS) protected _popperDefaults: NgxFloatUiOptions = {}) {\n NgxFloatUiDirective.baseOptions = {...NgxFloatUiDirective.baseOptions, ...this._popperDefaults};\n }\n\n static assignDefined(target: any, ...sources: any[]) {\n for (const source of sources) {\n for (const key of Object.keys(source)) {\n const val = source[key];\n if (val !== undefined) {\n target[key] = val;\n }\n }\n }\n\n return target;\n }\n\n applyTriggerListeners() {\n switch (this.showTrigger) {\n case NgxFloatUiTriggers.click:\n this._addListener(\"click\", this.toggle.bind(this));\n break;\n case NgxFloatUiTriggers.mousedown:\n this._addListener(\"mousedown\", this.toggle.bind(this));\n break;\n case NgxFloatUiTriggers.hover:\n this._addListener(\"mouseenter\", this.scheduledShow.bind(this, this.showDelay));\n [\"touchend\", \"touchcancel\", \"mouseleave\"].forEach((eventName) => {\n this._addListener(eventName, this.scheduledHide.bind(this, null, this.hideTimeout));\n });\n break;\n }\n if (this.showTrigger !== NgxFloatUiTriggers.hover && this.hideOnMouseLeave) {\n [\"touchend\", \"touchcancel\", \"mouseleave\"].forEach((eventName) => {\n this._addListener(eventName, this.scheduledHide.bind(this, null, this.hideTimeout));\n });\n }\n }\n\n getRefElement() {\n return this.targetElement || this._elementRef.nativeElement;\n }\n\n hide() {\n if (this.disabled) {\n return;\n }\n if (!this._shown) {\n this._scheduledShowTimeoutCtrl$.next();\n\n return;\n }\n\n this._shown = false;\n if (this._contentRef) {\n this._contentRef.instance.hide();\n }\n else {\n this._content.hide();\n }\n this.onHidden.emit(this);\n this._globalEventListenersCtrl$.next();\n }\n\n hideOnClickOutsideHandler($event: MouseEvent): void {\n if (this.disabled || !this.hideOnClickOutside || $event.target === this._content.elRef.nativeElement ||\n this._content.elRef.nativeElement.contains($event.target)) {\n return;\n }\n this.scheduledHide($event, this.hideTimeout);\n }\n\n hideOnScrollHandler($event: MouseEvent): void {\n if (this.disabled || !this.hideOnScroll) {\n return;\n }\n this.scheduledHide($event, this.hideTimeout);\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n this._content && this._content.clean();\n }\n\n ngOnInit() {\n if (typeof this.floatUi === \"string\") {\n this._content = this._constructContent();\n this._content.text = this.floatUi;\n }\n else if (typeof this.floatUi === typeof void 0) {\n this._content = this._constructContent();\n this._content.text = \"\";\n }\n else {\n this._content = this.floatUi;\n }\n const popperRef = this._content;\n popperRef.referenceObject = this.getRefElement();\n this._setContentProperties(popperRef);\n this._setDefaults();\n this.applyTriggerListeners();\n if (this.showOnStart) {\n this.scheduledShow();\n }\n }\n\n scheduledHide($event: any = null, delay: number = this.hideTimeout) {\n if (this.disabled) {\n return;\n }\n this._scheduledHideTimeoutCtrl$.next();\n timer(delay)\n .pipe(takeUntil(this._scheduledHideTimeoutCtrl$), takeUntil(this._destroy$))\n .subscribe({\n next: () => {\n // TODO: check\n const toElement = $event ? $event.toElement : null;\n const popperContentView = this._content.floatUiViewRef ? this._content.floatUiViewRef.nativeElement : false;\n if (!popperContentView ||\n popperContentView === toElement ||\n popperContentView.contains(toElement) ||\n (this.floatUi && (this.floatUi as NgxFloatUiContentComponent).isMouseOver)) {\n\n return;\n }\n this.hide();\n this._applyChanges();\n }\n });\n }\n\n scheduledShow(delay: number = this.showDelay) {\n if (this.disabled) {\n return;\n }\n this._scheduledHideTimeoutCtrl$.next();\n timer(delay)\n .pipe(takeUntil(this._scheduledShowTimeoutCtrl$), takeUntil(this._destroy$))\n .subscribe({\n next: () => {\n this.show();\n this._applyChanges();\n }\n });\n }\n\n show() {\n if (this._shown) {\n this._scheduledHideTimeoutCtrl$.next();\n\n return;\n }\n\n this._shown = true;\n const popperRef = this._content;\n const element = this.getRefElement();\n if (popperRef.referenceObject !== element) {\n popperRef.referenceObject = element;\n }\n this._setContentProperties(popperRef);\n popperRef.show();\n this.onShown.emit(this);\n if (this.timeoutAfterShow > 0) {\n this.scheduledHide(null, this.timeoutAfterShow);\n }\n fromEvent(document, \"click\")\n .pipe(takeUntil(this._globalEventListenersCtrl$), takeUntil(this._destroy$))\n .subscribe({\n next: (e: MouseEvent) => {\n return this.hideOnClickOutsideHandler(e);\n }\n });\n fromEvent(this._getScrollParent(this.getRefElement()), \"scroll\")\n .pipe(takeUntil(this._globalEventListenersCtrl$), takeUntil(this._destroy$))\n .subscribe({\n next: (e: MouseEvent) => {\n this.hideOnScrollHandler(e);\n }\n });\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this._shown ? this.scheduledHide(null, this.hideTimeout) : this.scheduledShow();\n }\n\n protected _addListener(eventName: string, cb: () => void): void {\n fromEvent(this._elementRef.nativeElement, eventName)\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: cb\n });\n }\n\n protected _applyChanges() {\n this._changeDetectorRef.markForCheck();\n this._changeDetectorRef.detectChanges();\n }\n\n protected _checkExisting(key: string, newValue: string | number | boolean | NgxFloatUiPlacements): void {\n if (this._content) {\n this._content.floatUiOptions[key] = newValue;\n if (!this._shown) {\n return;\n }\n this._content.update();\n }\n }\n\n protected _constructContent(): NgxFloatUiContentComponent {\n this._contentRef = this._vcr.createComponent(this._contentClass);\n\n return this._contentRef.instance as NgxFloatUiContentComponent;\n }\n\n protected _getScrollParent(node) {\n const isElement = node instanceof HTMLElement;\n const overflowY = isElement && window.getComputedStyle(node).overflowY;\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\n\n if (!node) {\n return null;\n }\n else if (isScrollable && node.scrollHeight > node.clientHeight) {\n return node;\n }\n\n return this._getScrollParent(node.parentNode) || document;\n }\n\n protected _onPopperUpdate() {\n this.onUpdate.emit();\n }\n\n protected _setContentProperties(popperRef: NgxFloatUiContentComponent) {\n popperRef.floatUiOptions = NgxFloatUiDirective.assignDefined(popperRef.floatUiOptions, NgxFloatUiDirective.baseOptions, {\n showDelay: this.showDelay,\n disableAnimation: this.disableAnimation,\n disableDefaultStyling: this.disableStyle,\n placement: this.placement,\n boundariesElement: this.boundariesElement,\n trigger: this.showTrigger,\n positionFixed: this.positionFixed,\n ariaDescribe: this.ariaDescribe,\n ariaRole: this.ariaRole,\n applyClass: this.applyClass,\n applyArrowClass: this.arrowClass,\n hideOnMouseLeave: this.hideOnMouseLeave,\n styles: this.styles,\n appendTo: this.appendTo,\n preventOverflow: this.preventOverflow\n });\n popperRef.onUpdate = this._onPopperUpdate.bind(this);\n popperRef.onHidden\n .pipe(takeUntil(this._destroy$))\n .subscribe(this.hide.bind(this));\n }\n\n protected _setDefaults() {\n [\"showDelay\", \"hideOnScroll\", \"hideOnMouseLeave\", \"hideOnClickOutside\", \"ariaRole\", \"ariaDescribe\"].forEach((key) => {\n this[key] = this[key] === void 0 ? NgxFloatUiDirective.baseOptions[key] : this[key];\n });\n this.showTrigger = this.showTrigger || NgxFloatUiDirective.baseOptions.trigger;\n this.styles = this.styles === void 0 ? {...NgxFloatUiDirective.baseOptions.styles} : this.styles;\n }\n\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n Inject,\n Input,\n ViewContainerRef\n} from \"@angular/core\";\n//\nimport {NgxFloatUiOptions} from \"../../models/ngx-float-ui-options.model\";\nimport {NgxFloatUiPlacements} from \"../../models/ngx-float-ui-placements.model\";\nimport {NGX_FLOAT_UI_DEFAULTS} from \"../../models/ngx-float-ui-defaults.model\";\nimport {NgxFloatUiDirective} from \"./ngx-float-ui.directive\";\nimport {NgxFloatUiContentComponent} from \"../../components/ngx-float-ui-content/ngx-float-ui-content.component\";\nimport {NgxFloatUiTriggers} from \"../../models/ngx-float-ui-triggers.model\";\n\n@Directive({\n selector: \"[floatUiLoose]\",\n exportAs: \"floatUiLoose\",\n standalone: true\n})\nexport class NgxFloatUiLooseDirective extends NgxFloatUiDirective {\n\n @Input()\n set floatUiLoose(newValue: string | NgxFloatUiContentComponent) {\n this.floatUi = newValue;\n }\n\n @Input()\n set loosePlacement(newValue: `${NgxFloatUiPlacements}`) {\n this.placement = newValue as NgxFloatUiPlacements;\n }\n\n @Input()\n set looseTrigger(newValue: `${NgxFloatUiTriggers}`) {\n this.showTrigger = newValue as NgxFloatUiTriggers;\n }\n\n constructor(changeDetectorRef: ChangeDetectorRef,\n elementRef: ElementRef,\n vcr: ViewContainerRef,\n @Inject(NGX_FLOAT_UI_DEFAULTS) popperDefaults: NgxFloatUiOptions = {}) {\n super(changeDetectorRef, elementRef, vcr, popperDefaults);\n }\n\n}\n","import {Provider} from \"@angular/core\";\n//\nimport {NgxFloatUiOptions} from \"../models/ngx-float-ui-options.model\";\nimport {NGX_FLOAT_UI_DEFAULTS} from \"../models/ngx-float-ui-defaults.model\";\n\nexport function provideNgxFloatUiOptions(config: NgxFloatUiOptions = {}): Provider[] {\n return [\n {provide: NGX_FLOAT_UI_DEFAULTS, useValue: config},\n ];\n}\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\n//\nimport {NgxFloatUiDirective} from \"./directives/ngx-float-ui/ngx-float-ui.directive\";\nimport {NgxFloatUiLooseDirective} from \"./directives/ngx-float-ui/ngx-float-ui-loose.directive\";\nimport {NgxFloatUiContentComponent} from \"./components/ngx-float-ui-content/ngx-float-ui-content.component\";\nimport {NgxFloatUiOptions} from \"./models/ngx-float-ui-options.model\";\nimport {provideNgxFloatUiOptions} from \"./providers/provide-ngx-float-ui-options.provider\";\n\n\n@NgModule({\n imports: [\n CommonModule,\n NgxFloatUiContentComponent,\n NgxFloatUiDirective,\n NgxFloatUiLooseDirective\n ],\n exports: [\n NgxFloatUiContentComponent,\n NgxFloatUiDirective,\n NgxFloatUiLooseDirective\n ],\n providers: [\n provideNgxFloatUiOptions()\n ]\n})\nexport class NgxFloatUiModule {\n\n public static forRoot(popperBaseOptions?: NgxFloatUiOptions): ModuleWithProviders<NgxFloatUiModule> {\n return {\n ngModule: NgxFloatUiModule,\n providers: [\n provideNgxFloatUiOptions(popperBaseOptions)\n ]\n };\n }\n}\n","/*\n * Public API Surface of ngx-float-ui\n */\n\n// Components\nexport * from \"./lib/components/ngx-float-ui-content/ngx-float-ui-content.component\";\n// Directives\nexport * from \"./lib/directives/ngx-float-ui/ngx-float-ui.directive\";\nexport * from \"./lib/directives/ngx-float-ui/ngx-float-ui-loose.directive\";\n// Models\nexport * from \"./lib/models/ngx-float-ui-options.model\";\nexport * from \"./lib/models/ngx-float-ui-placements.model\";\nexport * from \"./lib/models/ngx-float-ui-triggers.model\";\n// Providers\nexport * from \"./lib/providers/provide-ngx-float-ui-options.provider\";\n// Module\nexport * from \"./lib/ngx-float-ui.module\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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