@fundamental-ngx/core 0.66.1-rc.0 → 0.66.1-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, Directive, inject, TemplateRef, HostBinding, input, viewChild, linkedSignal, output, ElementRef, Renderer2, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component, DestroyRef, InjectionToken, effect, ViewChild, NgModule, EventEmitter, Injector, computed, isSignal, Injectable, Input, model, booleanAttribute, ViewContainerRef, contentChild } from '@angular/core';
|
|
2
|
+
import { signal, Directive, inject, TemplateRef, HostBinding, input, viewChild, linkedSignal, output, ElementRef, Renderer2, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component, DestroyRef, InjectionToken, effect, ViewChild, NgModule, EventEmitter, Injector, NgZone, computed, isSignal, Injectable, Input, model, booleanAttribute, ViewContainerRef, contentChild } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/cdk/a11y';
|
|
4
4
|
import { CdkTrapFocus, A11yModule } from '@angular/cdk/a11y';
|
|
5
5
|
import { ESCAPE, DOWN_ARROW } from '@angular/cdk/keycodes';
|
|
@@ -724,8 +724,16 @@ class PopoverService {
|
|
|
724
724
|
this._viewportRuler = inject(ViewportRuler);
|
|
725
725
|
/** @hidden */
|
|
726
726
|
this._injector = inject(Injector);
|
|
727
|
-
/** @hidden Watches
|
|
727
|
+
/** @hidden Watches document.body while open for mutations that may affect the overlay's position. */
|
|
728
728
|
this._ancestorMutationObserver = null;
|
|
729
|
+
/** @hidden Pending layout measurement frame, cancelled when its open session ends. */
|
|
730
|
+
this._layoutShiftAnimationFrame = null;
|
|
731
|
+
/** @hidden Session identity used to reject callbacks retained after close, deactivate or reopen. */
|
|
732
|
+
this._layoutShiftObserverSession = 0;
|
|
733
|
+
/** @hidden Geometry captured after positioning, used to suppress updates for unchanged layout. */
|
|
734
|
+
this._layoutShiftGeometry = null;
|
|
735
|
+
/** @hidden */
|
|
736
|
+
this._ngZone = inject(NgZone);
|
|
729
737
|
/** @hidden Flag to prevent infinite loop when programmatically opening/closing */
|
|
730
738
|
this._programmaticChange = false;
|
|
731
739
|
/** @hidden Computed signal for body-related config to track dependencies */
|
|
@@ -779,8 +787,7 @@ class PopoverService {
|
|
|
779
787
|
this._clearHoverCloseTimer();
|
|
780
788
|
this._removeOverlayHoverListeners();
|
|
781
789
|
this._removeTriggerListeners();
|
|
782
|
-
this.
|
|
783
|
-
this._ancestorMutationObserver = null;
|
|
790
|
+
this._stopLayoutShiftObserver();
|
|
784
791
|
if (this._overlayRef) {
|
|
785
792
|
this._overlayRef.detach();
|
|
786
793
|
this._overlayRef.dispose();
|
|
@@ -823,8 +830,7 @@ class PopoverService {
|
|
|
823
830
|
close(focusActiveElement = true) {
|
|
824
831
|
// Disposal emits a detachment; don't close again and override the focus decision.
|
|
825
832
|
this._stopCloseListening$.next();
|
|
826
|
-
this.
|
|
827
|
-
this._ancestorMutationObserver = null;
|
|
833
|
+
this._stopLayoutShiftObserver();
|
|
828
834
|
this._clearHoverCloseTimer();
|
|
829
835
|
this._removeOverlayHoverListeners();
|
|
830
836
|
if (this._overlayRef) {
|
|
@@ -839,7 +845,6 @@ class PopoverService {
|
|
|
839
845
|
if ((!this._overlayRef || !this._overlayRef.hasAttached()) && !this.disabled() && this._triggerElement) {
|
|
840
846
|
const position = this._getPositionStrategy();
|
|
841
847
|
this._overlayRef = this._overlay.create(this._getOverlayConfig(position));
|
|
842
|
-
this._startLayoutShiftObserver();
|
|
843
848
|
if (this._placementContainerValue) {
|
|
844
849
|
const placementElement = this._placementContainerValue instanceof ElementRef
|
|
845
850
|
? this._placementContainerValue.nativeElement
|
|
@@ -864,6 +869,7 @@ class PopoverService {
|
|
|
864
869
|
this._onLoad.next(this._getPopoverBody()._elementRef);
|
|
865
870
|
// Update position - this will trigger the positionChanges observable
|
|
866
871
|
this._overlayRef.updatePosition();
|
|
872
|
+
this._startLayoutShiftObserver();
|
|
867
873
|
}
|
|
868
874
|
}
|
|
869
875
|
/** method updating template or text inside rendered PopoverBody */
|
|
@@ -909,10 +915,12 @@ class PopoverService {
|
|
|
909
915
|
const refPosition = this._getPositionStrategy(positions);
|
|
910
916
|
this._listenForPositionChange(refPosition.positionChanges);
|
|
911
917
|
this._overlayRef.updatePositionStrategy(refPosition);
|
|
918
|
+
this._resetLayoutShiftGeometry();
|
|
912
919
|
}
|
|
913
920
|
/** Method called to refresh position of opened popover */
|
|
914
921
|
refreshPosition() {
|
|
915
922
|
this._overlayRef?.updatePosition();
|
|
923
|
+
this._resetLayoutShiftGeometry();
|
|
916
924
|
}
|
|
917
925
|
/** Temporary sets the ignoring of the event triggers. */
|
|
918
926
|
setIgnoreTriggers(ignore) {
|
|
@@ -1032,6 +1040,7 @@ class PopoverService {
|
|
|
1032
1040
|
* to enable it back in the future by initialise()
|
|
1033
1041
|
*/
|
|
1034
1042
|
deactivate() {
|
|
1043
|
+
this._stopLayoutShiftObserver();
|
|
1035
1044
|
// Close the popover if it's open
|
|
1036
1045
|
if (this.isOpen()) {
|
|
1037
1046
|
this.close();
|
|
@@ -1361,48 +1370,141 @@ class PopoverService {
|
|
|
1361
1370
|
}
|
|
1362
1371
|
/**
|
|
1363
1372
|
* @hidden
|
|
1364
|
-
* Starts a MutationObserver on document.body
|
|
1365
|
-
*
|
|
1373
|
+
* Starts a MutationObserver on document.body for DOM changes that may invalidate the
|
|
1374
|
+
* overlay position — including mutations in elements outside the trigger's
|
|
1366
1375
|
* nearest scroll container (e.g. a collapsible header above a table pushing the trigger down).
|
|
1367
1376
|
*
|
|
1368
1377
|
* Observed mutation types:
|
|
1369
1378
|
* - `childList`: elements added/removed from the DOM (Angular `@if`, ngIf, toast dismissed).
|
|
1370
1379
|
* - `attributes` with `attributeFilter: ['style', 'class']`: visibility toggled via CSS.
|
|
1371
1380
|
*
|
|
1372
|
-
*
|
|
1373
|
-
*
|
|
1381
|
+
* Starts after attachment and initial positioning to capture the initial geometry baseline.
|
|
1382
|
+
* The observer and its requestAnimationFrame pipeline are registered outside Angular so
|
|
1383
|
+
* their work does not schedule zone-driven change detection. Own-host mutations are ignored;
|
|
1384
|
+
* other mutations are coalesced into at most one geometry measurement per frame.
|
|
1385
|
+
*
|
|
1386
|
+
* Calls updatePosition() only when the captured origin, overlay size, viewport or fill-mode
|
|
1387
|
+
* trigger size changes, then captures the resulting geometry as the next baseline. This
|
|
1388
|
+
* lets unchanged-layout mutation feedback settle while preserving later genuine shifts.
|
|
1389
|
+
* There is no fixed update limit: a layout that keeps changing remains eligible for one
|
|
1390
|
+
* reposition per frame. Session and overlay identity checks reject stale callbacks.
|
|
1374
1391
|
*/
|
|
1375
1392
|
_startLayoutShiftObserver() {
|
|
1376
|
-
const
|
|
1377
|
-
if (!
|
|
1393
|
+
const overlayRef = this._overlayRef;
|
|
1394
|
+
if (!this._triggerElement || !overlayRef?.hasAttached()) {
|
|
1378
1395
|
return;
|
|
1379
1396
|
}
|
|
1380
|
-
|
|
1381
|
-
const
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
this.
|
|
1397
|
+
this._stopLayoutShiftObserver();
|
|
1398
|
+
const session = ++this._layoutShiftObserverSession;
|
|
1399
|
+
this._layoutShiftGeometry = this._getLayoutShiftGeometry(overlayRef);
|
|
1400
|
+
this._ngZone.runOutsideAngular(() => {
|
|
1401
|
+
const scheduleUpdate = (records) => {
|
|
1402
|
+
// Skip self-caused mutations: updatePosition() writes `style` on hostElement
|
|
1403
|
+
// (the CDK position bounding-box) and its descendants. Using hostElement as the
|
|
1404
|
+
// scope boundary covers both the default case (.cdk-overlay-container) and the
|
|
1405
|
+
// placementContainer case where the host is moved outside that container.
|
|
1406
|
+
if (records.every((record) => overlayRef.hostElement.contains(record.target))) {
|
|
1407
|
+
return;
|
|
1408
|
+
}
|
|
1409
|
+
if (this._layoutShiftAnimationFrame !== null) {
|
|
1410
|
+
return;
|
|
1411
|
+
}
|
|
1412
|
+
this._layoutShiftAnimationFrame = window.requestAnimationFrame(() => {
|
|
1413
|
+
if (session !== this._layoutShiftObserverSession || this._overlayRef !== overlayRef) {
|
|
1414
|
+
return;
|
|
1415
|
+
}
|
|
1416
|
+
this._layoutShiftAnimationFrame = null;
|
|
1417
|
+
if (!overlayRef.hasAttached()) {
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1420
|
+
const geometry = this._getLayoutShiftGeometry(overlayRef);
|
|
1421
|
+
if (this._sameLayoutShiftGeometry(this._layoutShiftGeometry, geometry)) {
|
|
1422
|
+
return;
|
|
1423
|
+
}
|
|
1424
|
+
overlayRef.updatePosition();
|
|
1425
|
+
this._layoutShiftGeometry = this._getLayoutShiftGeometry(overlayRef);
|
|
1426
|
+
});
|
|
1427
|
+
};
|
|
1428
|
+
this._ancestorMutationObserver = new MutationObserver(scheduleUpdate);
|
|
1429
|
+
this._ancestorMutationObserver.observe(document.body, {
|
|
1430
|
+
subtree: true,
|
|
1431
|
+
childList: true,
|
|
1432
|
+
attributes: true,
|
|
1433
|
+
attributeFilter: ['style', 'class']
|
|
1396
1434
|
});
|
|
1397
|
-
};
|
|
1398
|
-
this._ancestorMutationObserver = new MutationObserver(scheduleUpdate);
|
|
1399
|
-
this._ancestorMutationObserver.observe(document.body, {
|
|
1400
|
-
subtree: true,
|
|
1401
|
-
childList: true,
|
|
1402
|
-
attributes: true,
|
|
1403
|
-
attributeFilter: ['style', 'class']
|
|
1404
1435
|
});
|
|
1405
1436
|
}
|
|
1437
|
+
/**
|
|
1438
|
+
* @hidden
|
|
1439
|
+
* Ends the current observer session, disconnects observation and cancels its pending frame.
|
|
1440
|
+
* Invalidates session identity before clearing geometry so a retained callback cannot
|
|
1441
|
+
* reposition a replacement overlay or clear its pending frame.
|
|
1442
|
+
*/
|
|
1443
|
+
_stopLayoutShiftObserver() {
|
|
1444
|
+
this._layoutShiftObserverSession++;
|
|
1445
|
+
this._ancestorMutationObserver?.disconnect();
|
|
1446
|
+
this._ancestorMutationObserver = null;
|
|
1447
|
+
if (this._layoutShiftAnimationFrame !== null) {
|
|
1448
|
+
window.cancelAnimationFrame(this._layoutShiftAnimationFrame);
|
|
1449
|
+
this._layoutShiftAnimationFrame = null;
|
|
1450
|
+
}
|
|
1451
|
+
this._layoutShiftGeometry = null;
|
|
1452
|
+
}
|
|
1453
|
+
/**
|
|
1454
|
+
* @hidden
|
|
1455
|
+
* Captures the attached overlay's geometry after refreshPosition() or applyNewPosition().
|
|
1456
|
+
* Subsequent mutations are compared against that updated baseline, avoiding a redundant
|
|
1457
|
+
* observer-driven reposition for layout already handled by the explicit operation.
|
|
1458
|
+
*/
|
|
1459
|
+
_resetLayoutShiftGeometry() {
|
|
1460
|
+
if (this._overlayRef?.hasAttached()) {
|
|
1461
|
+
this._layoutShiftGeometry = this._getLayoutShiftGeometry(this._overlayRef);
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
/**
|
|
1465
|
+
* @hidden
|
|
1466
|
+
* Captures the effective origin (appendTo or trigger), overlay size and viewport geometry.
|
|
1467
|
+
* Includes the trigger's size in fill mode, where it can differ from the positioning origin.
|
|
1468
|
+
* Overlay x/y are positioning outputs and are excluded to avoid treating position writes
|
|
1469
|
+
* as new layout inputs. The snapshot does not track placement-container geometry.
|
|
1470
|
+
*/
|
|
1471
|
+
_getLayoutShiftGeometry(overlayRef) {
|
|
1472
|
+
const origin = this.appendTo() ?? this._triggerHtmlElement;
|
|
1473
|
+
const originElement = origin instanceof ElementRef ? origin.nativeElement : origin;
|
|
1474
|
+
const originRect = originElement.getBoundingClientRect();
|
|
1475
|
+
const overlayRect = overlayRef.overlayElement.getBoundingClientRect();
|
|
1476
|
+
const viewportRect = this._viewportRuler.getViewportRect();
|
|
1477
|
+
const triggerRect = this.fillControlMode() ? this._triggerHtmlElement.getBoundingClientRect() : null;
|
|
1478
|
+
return {
|
|
1479
|
+
originX: originRect.x,
|
|
1480
|
+
originY: originRect.y,
|
|
1481
|
+
originWidth: originRect.width,
|
|
1482
|
+
originHeight: originRect.height,
|
|
1483
|
+
overlayWidth: overlayRect.width,
|
|
1484
|
+
overlayHeight: overlayRect.height,
|
|
1485
|
+
viewportTop: viewportRect.top,
|
|
1486
|
+
viewportLeft: viewportRect.left,
|
|
1487
|
+
viewportWidth: viewportRect.width,
|
|
1488
|
+
viewportHeight: viewportRect.height,
|
|
1489
|
+
triggerWidth: triggerRect?.width ?? null,
|
|
1490
|
+
triggerHeight: triggerRect?.height ?? null
|
|
1491
|
+
};
|
|
1492
|
+
}
|
|
1493
|
+
/** @hidden Compares captured geometry; a missing previous snapshot requires positioning. */
|
|
1494
|
+
_sameLayoutShiftGeometry(previous, current) {
|
|
1495
|
+
return (previous?.originX === current.originX &&
|
|
1496
|
+
previous.originY === current.originY &&
|
|
1497
|
+
previous.originWidth === current.originWidth &&
|
|
1498
|
+
previous.originHeight === current.originHeight &&
|
|
1499
|
+
previous.overlayWidth === current.overlayWidth &&
|
|
1500
|
+
previous.overlayHeight === current.overlayHeight &&
|
|
1501
|
+
previous.viewportTop === current.viewportTop &&
|
|
1502
|
+
previous.viewportLeft === current.viewportLeft &&
|
|
1503
|
+
previous.viewportWidth === current.viewportWidth &&
|
|
1504
|
+
previous.viewportHeight === current.viewportHeight &&
|
|
1505
|
+
previous.triggerWidth === current.triggerWidth &&
|
|
1506
|
+
previous.triggerHeight === current.triggerHeight);
|
|
1507
|
+
}
|
|
1406
1508
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: PopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1407
1509
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: PopoverService }); }
|
|
1408
1510
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-popover.mjs","sources":["../../../../libs/core/popover/base/base-popover.class.ts","../../../../libs/core/popover/popover-body.directive.ts","../../../../libs/core/popover/popover-body/popover-body-directives/popover-body-footer.directive.ts","../../../../libs/core/popover/popover-body/popover-body-directives/popover-body-header.directive.ts","../../../../libs/core/popover/popover-body/popover-body.component.ts","../../../../libs/core/popover/popover-body/popover-body.component.html","../../../../libs/core/popover/popover-container/popover-container.directive.ts","../../../../libs/core/popover/popover-control/popover-control.component.ts","../../../../libs/core/popover/popover.interface.ts","../../../../libs/core/popover/popover-mobile/popover-mobile.component.ts","../../../../libs/core/popover/popover-mobile/popover-mobile.component.html","../../../../libs/core/popover/popover-mobile/popover-mobile.module.ts","../../../../libs/core/popover/popover-service/popover.service.ts","../../../../libs/core/popover/popover-trigger.directive.ts","../../../../libs/core/popover/tokens.ts","../../../../libs/core/popover/popover.component.ts","../../../../libs/core/popover/popover.component.html","../../../../libs/core/popover/popover.module.ts","../../../../libs/core/popover/utils/build-popover-config.ts","../../../../libs/core/popover/fundamental-ngx-core-popover.ts"],"sourcesContent":["import { ConnectedPosition, ScrollStrategy } from '@angular/cdk/overlay';\nimport { Directive, ElementRef, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { TriggerConfig } from './popover-config.interface';\n\n// Re-export for backward compatibility\nexport { TriggerConfig };\n\n/**\n * @deprecated Use the {@link PopoverConfig} interface instead of extending this class.\n * This class will be removed in a future major version.\n *\n * Migration guide:\n * - For components: Use regular `input()` signal properties and pass configuration to PopoverService\n * - For services: Use the PopoverConfig interface to define configuration objects\n * - See {@link PopoverComponent} and {@link MenuComponent} for modern implementation examples\n *\n * Configuration object for popover settings.\n * This is used by PopoverService and was extended by PopoverComponent and MenuComponent.\n *\n * **For Components:** Use signal inputs with the `input()` function to declare these properties.\n * Use `model()` for `isOpen` so Angular provides template-level `(isOpenChange)` automatically.\n * If programmatic subscriptions are needed for backwards compatibility, expose a dedicated stream\n * (for example `Subject<boolean>`) and emit on real state transitions.\n *\n * **For Services:** Use regular signal instances to store these values.\n */\n@Directive({\n host: {\n '[class.fd-popover-custom--disabled]': 'disabled()'\n }\n})\nexport class BasePopoverClass {\n /** Whether to close the popover on router navigation start. */\n closeOnNavigation = signal(true);\n\n /** Whether the popover is disabled. */\n disabled = signal(false);\n\n /** Maximum width of popover body in px, prevents from overextending body by `fillControlMode` */\n maxWidth = signal<Nullable<number>>(null);\n\n /** Whether the popover should have an arrow. */\n noArrow = signal(true);\n\n /** Whether the popover container needs an extra class for styling. */\n additionalBodyClass = signal<string | null>(null);\n\n /** Classes that should be applied to fd-popover-body component directly. */\n additionalBodyComponentClasses = signal<string | null>(null);\n\n /** Whether the popover container needs an extra class for styling. */\n additionalTriggerClass = signal<string | null>(null);\n\n /** Whether the popover should close when the escape key is pressed. */\n closeOnEscapeKey = signal(true);\n\n /** Whether to wrap content with fd-scrollbar directive. */\n disableScrollbar = signal(false);\n\n /**\n * The placement of the popover.\n * It can be one of:\n * top, top-start, top-end, bottom, bottom-start, bottom-end,\n * right, right-start, right-end, left, left-start, left-end.\n */\n placement = signal<Placement | null>(null);\n\n /**\n * The trigger events that will open/close the popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp) or a config object for the corresponding event.\n * Using the config object allows to specify whether an event should apply both for open and close actions or only some of them.\n *\n * If array of triggers consists only of one event, it will be treated at a toggle event (open and close)\n * If array of trigger consists of more than one event, each odd event will be treated as an open event for the popover,\n * and each even event will be treated as closing event for the popover.\n *\n * Consider the following value for `triggers`:\n * ```\n * [\n * 'click' // basically it's an alias for \"{ trigger: 'click', openAction: true, closeAction: true }\"\n * ]\n * ```\n * ```\n * [\n * 'mouseenter' // Shortcut for \"{ trigger: 'mouseenter', openAction: true, closeAction: false }\", and will only open the popover.\n * 'mouseleave' // Shortcut for \"{ trigger: 'mouseleave', openAction: false, closeAction: true }\" and will only close the popover.\n * ]\n * ```\n * ```\n * [\n * { trigger: 'mouseenter', openAction: true, closeAction: true }, // \"mouseenter\" will toggle the popover.\n * { trigger: 'mouseleave', openAction: true, closeAction: true } // \"mouseleave\" will toggle the popover.\n * ]\n * ```\n *\n * @default ['click']\n */\n triggers = signal<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover is open. Can be used through two-way binding. */\n isOpen = signal(false);\n\n /** Whether the popover should close when a click is made outside its boundaries. */\n closeOnOutsideClick = signal(true);\n\n /** Wether to apply a background overlay */\n applyOverlay = signal(false);\n\n /** Whether the popover should be focusTrapped. */\n focusTrapped = signal(false);\n\n /**\n * Whether the popover should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n focusAutoCapture = signal(false);\n\n /**\n * Whether to move the focus after popover is closed to the last focused element before popover was opened.\n */\n restoreFocusOnClose = signal(true);\n\n /**\n * Scroll strategy, there are 4 accepted\n * - CloseScrollStrategy\n * - NoopScrollStrategy\n * - BlockScrollStrategy\n * - RepositionScrollStrategy ( default )\n */\n scrollStrategy = signal<ScrollStrategy | null>(null);\n\n /**\n * List of positions options for overlay defined by angular CDK.\n * Positions will be taken in order, same like on array. If first position provided doesn't fit to window,\n * another will be used\n * More information can be found in https://material.angular.io/cdk/overlay/api\n */\n cdkPositions = signal<ConnectedPosition[] | null>(null);\n\n /**\n * Preset options for the popover body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n fillControlMode = signal<Nullable<PopoverFillMode>>(null);\n\n /** The element to which the overlay is attached. By default it is body */\n appendTo = signal<Nullable<ElementRef | Element>>(null);\n\n /** Placement of the popover element. */\n placementContainer = signal<Nullable<ElementRef | Element>>(null);\n\n /** Whether position shouldn't change, when popover approach the corner of page */\n fixedPosition = signal(false);\n\n /** Whether the popover body is resizable. */\n resizable = signal(false);\n\n /** @hidden Aria role for the popover body. */\n protected _bodyRole: string | null = 'dialog';\n\n /** @hidden ID for the popover body. */\n protected readonly _bodyId = signal<string | null>(null);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBody]',\n standalone: true\n})\nexport class PopoverBodyDirective {\n /**\n * The template to be used as the popover's body.\n **/\n readonly templateRef = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBodyFooter], [fd-popover-body-footer]',\n standalone: true\n})\nexport class PopoverBodyFooterDirective {\n /** @hidden */\n @HostBinding('class.fd-popover__body-footer')\n fdPopoverBodyFooterClass = true;\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBodyHeader], [fd-popover-body-header]',\n standalone: true\n})\nexport class PopoverBodyHeaderDirective {\n /** @hidden */\n @HostBinding('class.fd-popover__body-header')\n fdPopoverBodyHeaderClass = true;\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n Renderer2,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { A11yModule, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { CdkScrollable, ConnectionPositionPair } from '@angular/cdk/overlay';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KeyUtil, Nullable, ResizeDirective, ResizeHandleDirective } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\n\n/**\n * A component used to enforce a certain layout for the popover.\n * ```html\n * <fd-popover>\n * <fd-popover-control>Control Element</fd-popover-control>\n * <fd-popover-body>Popover Body</fd-popover-body>\n * </fd-popover>\n * ```\n */\n@Component({\n selector: 'fd-popover-body',\n templateUrl: './popover-body.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './popover-body.component.scss',\n providers: [contentDensityObserverProviders({ alwaysAddModifiers: true })],\n imports: [A11yModule, CdkScrollable, ScrollbarDirective, NgTemplateOutlet, ResizeHandleDirective, ResizeDirective],\n standalone: true,\n host: {\n '(keydown)': 'bodyKeyupHandler($event)'\n }\n})\nexport class PopoverBodyComponent {\n /** Minimum width of the popover body element. */\n readonly minWidth = input<Nullable<string>>();\n\n /** Maximum width of the popover body element. */\n readonly maxWidth = input<Nullable<string>>();\n\n /** Minimum height of the popover body element. */\n readonly minHeight = input<Nullable<string>>();\n\n /** Maximum height of the popover body element. */\n readonly maxHeight = input<Nullable<string>>();\n\n /** aria-modal value for the popover body. Set to false for non-modal dialogs (e.g. product switch). */\n readonly ariaModal = input<boolean | null>(null);\n\n /** @hidden */\n readonly _cdkTrapFocus = viewChild(CdkTrapFocus);\n\n /** @hidden */\n readonly _scrollbar = viewChild(ScrollbarDirective);\n\n /** @hidden Whether to wrap content with fd-scrollbar directive. */\n readonly _disableScrollbar = signal(false);\n\n /** @hidden Whether the popover should have an arrow. */\n readonly _noArrow = signal(true);\n\n /** @hidden Whether the popover container needs an extra class for styling. */\n readonly _additionalBodyClass = signal<Nullable<string>>(null);\n\n /** @hidden Whether the popover should be focusTrapped. */\n readonly _focusTrapped = signal(false);\n\n /**\n * @hidden\n * Whether the popover should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n readonly _focusAutoCapture = signal(false);\n\n /** @hidden Property bind to popover's body. */\n readonly _popoverBodyWidth = signal<number | undefined>(undefined);\n\n /** @hidden Property bind to popover's body. */\n readonly _popoverBodyMinWidth = signal<number | undefined>(undefined);\n\n /** @hidden Property bind to popover's body. */\n readonly _maxWidth = signal<Nullable<number>>(null);\n\n /** @hidden Property bind to popover's body. */\n readonly _closeOnEscapeKey = signal(false);\n\n /** @hidden Aria role for the popover body. */\n readonly _bodyRole = signal<Nullable<string>>('dialog');\n\n /** @hidden Aria label for the popover body. */\n readonly _bodyAriaLabel = signal<Nullable<string>>(null);\n\n /** @hidden ID of the element that labels the popover body. */\n readonly _bodyAriaLabelledBy = signal<string | null>(null);\n\n /** @hidden ID for the popover body. */\n readonly _bodyId = signal<string | null>(null);\n\n /** @hidden aria-modal value for the popover body. */\n readonly _bodyAriaModal = linkedSignal(() => this.ariaModal());\n\n /** @hidden Classes added to arrow element. */\n readonly _arrowClasses = signal('');\n\n /** @hidden text rendered inside popover's body. */\n readonly text = signal<Nullable<string>>(null);\n\n /** @hidden template rendered inside popover's body. */\n readonly _templateToDisplay = signal<TemplateRef<any> | undefined>(undefined);\n\n /** @hidden Whether the popover body is resizable. */\n readonly _resizable = signal(false);\n\n /** @hidden */\n readonly _resizeHandleLocation = signal<'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'>('bottom-right');\n\n /** Event emitted when popover body requests to be closed (e.g., Escape key press) */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose = output<void>();\n\n /** @hidden */\n readonly _elementRef = inject(ElementRef);\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private _bodyComponentClasses: string | null = null;\n\n /** @hidden */\n constructor() {\n afterNextRender(() => {\n const scrollbar = this._scrollbar();\n if (scrollbar) {\n scrollbar._inPopover = true;\n }\n });\n }\n\n /** Handler escape keydown */\n bodyKeyupHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, ESCAPE) && this._closeOnEscapeKey()) {\n // In case if popover belongs to the element inside dialog\n event.stopPropagation();\n this.onClose.emit();\n }\n }\n\n /** @hidden */\n _setBodyComponentClasses(classes: string | null): void {\n this._bodyComponentClasses?.split(' ').forEach((klass) => {\n this._renderer.removeClass(this._elementRef.nativeElement, klass);\n });\n this._bodyComponentClasses = classes;\n if (!this._bodyComponentClasses) {\n return;\n }\n this._bodyComponentClasses.split(' ').forEach((klass) => {\n this._renderer.addClass(this._elementRef.nativeElement, klass);\n });\n }\n\n /** @hidden */\n _setArrowStyles(position: ConnectionPositionPair, rtl: 'rtl' | 'ltr'): void {\n this._resizeHandleLocation.set(\n `${position.overlayY === 'top' ? 'bottom' : 'top'}-${position.overlayX === 'start' ? 'right' : 'left'}`\n );\n if (this._noArrow()) {\n this._arrowClasses.set('');\n return;\n }\n\n let arrowClasses: string[] = [];\n\n if (\n position.overlayY !== position.originY &&\n position.originY !== 'center' &&\n position.overlayY !== 'center' &&\n position.overlayX === position.originX\n ) {\n arrowClasses = [\n `fd-popover__body--${position.overlayY === 'top' ? 'below' : 'above'}`,\n `fd-popover__body--${position.overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--arrow-${position.overlayY}`,\n `fd-popover__body--arrow-x-${position.originX}`\n ];\n } else if (\n position.overlayX !== position.originX &&\n position.overlayX !== 'center' &&\n position.originX !== 'center' &&\n position.originY === position.overlayY\n ) {\n let overlayX = position.overlayX;\n if (rtl === 'rtl') {\n overlayX = position.overlayX === 'end' ? 'start' : 'end';\n }\n arrowClasses = [\n `fd-popover__body--${overlayX === 'start' ? 'after' : 'before'}`,\n `fd-popover__body--${overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--${position.overlayY === 'center' ? 'middle' : position.overlayY}`,\n `fd-popover__body--arrow-${overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--arrow-y-${position.originY} `\n ];\n } else {\n arrowClasses = ['fd-popover__body--no-arrow'];\n }\n\n this._arrowClasses.set(arrowClasses.join(' '));\n }\n\n /** @hidden */\n _focusFirstTabbableElement(forced = false): void {\n if (forced || this._focusAutoCapture()) {\n requestAnimationFrame(() => {\n this._cdkTrapFocus()?.focusTrap.focusFirstTabbableElement();\n });\n }\n }\n}\n","<div\n class=\"fd-popover__body fd-popover__body--static\"\n [class.fd-popover__body--no-arrow]=\"_noArrow()\"\n [class.fd-popover__body--resizable]=\"_resizable()\"\n [class]=\"_arrowClasses() + ' ' + (_additionalBodyClass() || '')\"\n [cdkTrapFocus]=\"_focusTrapped()\"\n [style.min-width]=\"_popoverBodyMinWidth() ? null : minWidth()\"\n [style.max-width]=\"_maxWidth() ? null : maxWidth()\"\n [style.min-height]=\"minHeight()\"\n [style.max-height]=\"maxHeight()\"\n [style.max-width.px]=\"_maxWidth()\"\n [style.min-width.px]=\"_popoverBodyMinWidth()\"\n [style.width.px]=\"_popoverBodyWidth()\"\n [attr.role]=\"_bodyRole()\"\n [attr.aria-label]=\"_bodyAriaLabel()\"\n [attr.aria-labelledby]=\"_bodyAriaLabelledBy()\"\n [attr.aria-modal]=\"_bodyAriaModal()\"\n [attr.id]=\"_bodyId()\"\n fdkResize\n [fdkResizeDisabled]=\"!_resizable()\"\n [fdkResizeClass]=\"'fd-popover__body--disable-transitions'\"\n [fdkResizeHandleLocation]=\"_resizeHandleLocation()\"\n>\n @if (!_disableScrollbar()) {\n <div fd-scrollbar class=\"fd-popover__wrapper\">\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n }\n @if (_resizable()) {\n <span fdkResizeHandle class=\"fd-popover__resize-handle\" role=\"presentation\" aria-hidden=\"true\"></span>\n }\n</div>\n<ng-template #renderer>\n <ng-content select=\"[fd-popover-body-header]\"></ng-content>\n <ng-content select=\"[fd-popover-body-subheader]\"></ng-content>\n <ng-content></ng-content>\n {{ text() }}\n @if (_templateToDisplay()) {\n <ng-template [ngTemplateOutlet]=\"_templateToDisplay()!\"></ng-template>\n }\n <ng-content select=\"[fd-popover-body-footer]\"></ng-content>\n</ng-template>\n","import { DestroyRef, Directive, ElementRef, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\n\n@Directive({\n selector: '[fdPopoverContainer]',\n standalone: true\n})\nexport class PopoverContainerDirective implements OnInit {\n /** Subject which emits when popover position refresh is required. */\n refreshPosition$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(private _elmRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n ngOnInit(): void {\n resizeObservable(this._elmRef.nativeElement)\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this.refreshPosition$.next();\n });\n }\n}\n","import { AfterContentChecked, ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation } from '@angular/core';\n\n/**\n * A component used to enforce a certain layout for the popover.\n * ```html\n * <fd-popover>\n * <fd-popover-control>Control Element</fd-popover-control>\n * <fd-popover-body>Popover Body</fd-popover-body>\n * </fd-popover>\n * ```\n */\n@Component({\n selector: 'fd-popover-control, [fdPopoverControl]',\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PopoverControlComponent implements AfterContentChecked {\n /** @hidden */\n _tabbable = false;\n\n /** @hidden */\n constructor(public elRef: ElementRef) {}\n\n /** @hidden */\n ngAfterContentChecked(): void {\n if (this._tabbable) {\n this.makeTabbable();\n }\n }\n\n /** @hidden */\n makeTabbable(): void {\n const elemChild = this.elRef.nativeElement.children[0];\n if (elemChild && elemChild.getAttribute('tabindex') !== '-1') {\n elemChild.tabIndex = '0';\n }\n }\n}\n","import { InjectionToken, ModelSignal } from '@angular/core';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\nimport { Subject } from 'rxjs';\n\nexport const POPOVER_COMPONENT = new InjectionToken<PopoverInterface>('PopoverInterface');\n\n/**\n * Popover Interface to have typing and avoid circular dependency between\n * PopoverComponent <==> PopoverMobileComponent\n */\nexport interface PopoverInterface extends MobileMode {\n dialogConfig: DialogConfig;\n isOpen: ModelSignal<boolean>;\n isOpenChange: Subject<boolean>;\n\n close(): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { PopoverChildContent } from '../popover-child-content.interface';\nimport { POPOVER_COMPONENT, PopoverInterface } from '../popover.interface';\n\nlet mobilePopoverUniqueId = 0;\n\n@Component({\n selector: 'fd-popover-mobile',\n templateUrl: './popover-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n TemplateDirective,\n TitleComponent,\n NgTemplateOutlet,\n DialogComponent,\n DialogBodyComponent,\n DialogHeaderComponent,\n DialogFooterComponent,\n DialogCloseButtonComponent\n ]\n})\nexport class PopoverMobileComponent extends MobileModeBase<PopoverInterface> implements OnInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate')\n _dialogTemplate: TemplateRef<any>;\n\n /** @hidden Cannot use _ prefix due to mobile class build constraints. */\n childContent?: PopoverChildContent = undefined;\n\n /** Current popover title */\n title: string;\n /** Dialog body content */\n viewBody: TemplateRef<any> | null;\n\n /** Dialog footer content */\n viewFooter: TemplateRef<any> | null;\n\n /** @hidden */\n readonly id = 'fd-popover-mobile-' + mobilePopoverUniqueId++;\n\n /** @hidden */\n get titleId(): string {\n return this.id + '-title';\n }\n\n /** @hidden */\n constructor() {\n super(inject<PopoverInterface>(POPOVER_COMPONENT), MobileModeControl.POPOVER);\n\n // effect() automatically tracks _component.isOpen signal and cleans up on destroy\n effect(() => {\n if (this._component.isOpen()) {\n this._openDialog();\n } else {\n this.dialogRef?.hide(true);\n }\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.title = this.mobileConfig.title || '';\n this.viewBody = this.childContent?.popoverBodyContentTemplate ?? null;\n this.viewFooter = this.childContent?.popoverFooterContentTemplate ?? null;\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.dialogRef?.close();\n }\n\n /** Closes the dialog and popover. */\n close(): void {\n this.dialogRef.close();\n this._component.close();\n }\n\n /** @hidden Opens the dialog. */\n private _openDialog(): void {\n this.dialogRef = this._dialogService.open(this._dialogTemplate, {\n verticalPadding: true,\n horizontalPadding: true,\n ...this.dialogConfig,\n mobile: true,\n focusTrapped: true,\n escKeyCloseable: false,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n responsivePadding: true,\n ariaLabelledBy: this.titleId\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" data-mobile-popover>\n <fd-dialog-header>\n <h1 fd-title [id]=\"titleId\">{{ title }}</h1>\n @if (this.mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"close()\"></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"viewBody\"></ng-template>\n </fd-dialog-body>\n @if (viewFooter) {\n <fd-dialog-footer>\n <ng-template [ngTemplateOutlet]=\"viewFooter\"></ng-template>\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { PopoverMobileComponent } from './popover-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [DialogModule, ButtonComponent, PopoverMobileComponent],\n exports: [PopoverMobileComponent],\n providers: [DynamicComponentService]\n})\nexport class PopoverMobileModule {}\n","import {\n ConnectedOverlayPositionChange,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n ViewportRuler\n} from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injectable,\n Injector,\n Renderer2,\n Signal,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n isSignal,\n signal\n} from '@angular/core';\nimport { Observable, Subject, merge } from 'rxjs';\nimport { distinctUntilChanged, filter, map, startWith, takeUntil } from 'rxjs/operators';\n\nimport { Nullable, RtlService, destroyObservable, isOdd } from '@fundamental-ngx/cdk/utils';\nimport { GetDefaultPosition, Placement, PopoverFillMode, PopoverPosition } from '@fundamental-ngx/core/shared';\n\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { PopoverConfig, TriggerConfig } from '../base/popover-config.interface';\nimport { PopoverBodyComponent } from '../popover-body/popover-body.component';\nimport { PopoverContainerDirective } from '../popover-container/popover-container.directive';\n\nconst MAX_BODY_SIZE = 99999999;\n\nexport interface PopoverTemplate {\n container: ViewContainerRef;\n popoverBody: PopoverBodyComponent;\n template: TemplateRef<any>;\n}\n\n@Injectable()\nexport class PopoverService {\n /** Whether to close the popover on router navigation start. */\n readonly closeOnNavigation = signal(true);\n\n /** Whether the popover is disabled. */\n readonly disabled = signal(false);\n\n /** Maximum width of popover body in px */\n readonly maxWidth = signal<Nullable<number>>(null);\n\n /** Whether the popover should have an arrow. */\n readonly noArrow = signal(true);\n\n /** Whether the popover container needs an extra class for styling. */\n readonly additionalBodyClass = signal<string | null>(null);\n\n /** Classes that should be applied to fd-popover-body component directly. */\n readonly additionalBodyComponentClasses = signal<string | null>(null);\n\n /** Whether the popover container needs an extra class for styling. */\n readonly additionalTriggerClass = signal<string | null>(null);\n\n /** Whether the popover should close when the escape key is pressed. */\n readonly closeOnEscapeKey = signal(true);\n\n /** Whether to wrap content with fd-scrollbar directive. */\n readonly disableScrollbar = signal(false);\n\n /** The placement of the popover. */\n readonly placement = signal<Placement | null>(null);\n\n /** The trigger events that will open/close the popover. */\n readonly triggers = signal<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover is open. */\n readonly isOpen = signal(false);\n\n /** Whether the popover should close when a click is made outside its boundaries. */\n readonly closeOnOutsideClick = signal(true);\n\n /** Whether to apply a background overlay */\n readonly applyOverlay = signal(false);\n\n /** Whether the popover should be focusTrapped. */\n readonly focusTrapped = signal(false);\n\n /** Whether to automatically move focus into the trapped region. */\n readonly focusAutoCapture = signal(false);\n\n /** Whether to move focus back after popover is closed. */\n readonly restoreFocusOnClose = signal(true);\n\n /** Scroll strategy */\n readonly scrollStrategy = signal<ScrollStrategy | null>(null);\n\n /** List of positions options for overlay. */\n readonly cdkPositions = signal<ConnectedPosition[] | null>(null);\n\n /** Preset options for the popover body width. */\n readonly fillControlMode = signal<Nullable<PopoverFillMode>>(null);\n\n /** The element to which the overlay is attached. */\n readonly appendTo = signal<Nullable<ElementRef | Element>>(null);\n\n /** Placement of the popover element. */\n readonly placementContainer = signal<Nullable<ElementRef | Element>>(null);\n\n /** Whether position shouldn't change when popover approach the corner of page */\n readonly fixedPosition = signal(false);\n\n /** Whether the popover body is resizable. */\n readonly resizable = signal(false);\n\n /** Emits when popover open state changes */\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** String content displayed inside popover body */\n stringContent: Nullable<string>;\n\n /** Template content displayed inside popover body */\n templateContent: Nullable<TemplateRef<any>>;\n\n /** @hidden */\n _onLoad = new Subject<ElementRef>();\n\n /** @hidden */\n _mobile = false;\n\n /** @hidden Aria role for the popover body. */\n protected _bodyRole: string | null = 'dialog';\n\n /** @hidden Aria label for the popover body. */\n protected _bodyAriaLabel: string | null = null;\n\n /** @hidden ID of the element that labels the popover body. */\n protected _bodyAriaLabelledBy: string | null = null;\n\n /** @hidden aria-modal value for the popover body. */\n protected _bodyAriaModal: boolean | null = null;\n\n /** @hidden ID for the popover body. */\n protected readonly _bodyId = signal<string | null>(null);\n\n /** @hidden */\n private _eventRef: (() => void)[] = [];\n\n /** @hidden */\n private _overlayRef: OverlayRef;\n\n /** @hidden */\n private _refresh$: Observable<boolean | void>;\n\n /** @hidden */\n private _stopCloseListening$ = new Subject<void>();\n\n /** @hidden */\n private readonly _placementRefresh$ = new Subject<void>();\n\n /** @hidden */\n private _popoverBody: PopoverBodyComponent;\n\n /** @hidden */\n private _triggerElement: ElementRef<HTMLElement> | HTMLElement;\n\n /** @hidden */\n private _lastActiveElement: HTMLElement;\n\n /** @hidden */\n private _templateData: Nullable<PopoverTemplate>;\n\n /** @hidden */\n private _placementContainerValue: Nullable<ElementRef | Element>;\n\n /** @hidden */\n private _ignoreTriggers = false;\n\n /** @hidden Timer for delayed hover close, allows mouse to travel from trigger to overlay body. */\n private _hoverCloseTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** @hidden Listeners for mouseenter/mouseleave on the overlay element. */\n private _overlayHoverListeners: (() => void)[] = [];\n\n /** @hidden */\n private _modalBodyClass = 'fd-overlay-active';\n\n /** @hidden */\n private _modalTriggerClass = 'fd-popover__modal';\n\n /** @hidden */\n private _isModal = false;\n\n /** An RxJS Subject that will kill the data stream upon component's destruction (for unsubscribing) */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _popoverContainer = inject(PopoverContainerDirective, { optional: true });\n\n /** @hidden */\n private readonly _overlay = inject(Overlay);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _viewportRuler = inject(ViewportRuler);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden Watches DOM mutations within the scroll container when the popover is open to reposition after layout shifts (e.g. display:none on siblings). */\n private _ancestorMutationObserver: MutationObserver | null = null;\n\n /** @hidden */\n private get _triggerHtmlElement(): HTMLElement {\n return this._triggerElement instanceof ElementRef ? this._triggerElement.nativeElement : this._triggerElement;\n }\n\n /** @hidden Flag to prevent infinite loop when programmatically opening/closing */\n private _programmaticChange = false;\n\n /** @hidden Computed signal for body-related config to track dependencies */\n private readonly _bodyConfig = computed(() => ({\n additionalBodyClass: this.additionalBodyClass(),\n focusTrapped: this.focusTrapped(),\n maxWidth: this.maxWidth(),\n noArrow: this.noArrow(),\n focusAutoCapture: this.focusAutoCapture(),\n disableScrollbar: this.disableScrollbar(),\n closeOnEscapeKey: this.closeOnEscapeKey(),\n additionalBodyComponentClasses: this.additionalBodyComponentClasses(),\n resizable: this.resizable()\n }));\n\n /** @hidden */\n constructor() {\n /** Merge observables - close or destroy */\n this._refresh$ = merge(this.isOpenChange, destroyObservable(this._destroyRef));\n\n // Emit isOpenChange when signal changes\n effect(() => {\n const openState = this.isOpen();\n this.isOpenChange.emit(openState);\n });\n\n // Automatically open/close popover when isOpen signal changes\n // This enables programmatic control via signal updates\n let previousOpen = this.isOpen();\n effect(() => {\n const currentOpen = this.isOpen();\n // Only act if state actually changed, we're initialized, and it's not from open/close methods\n if (currentOpen !== previousOpen && this._triggerElement && !this._programmaticChange) {\n if (currentOpen) {\n this.open();\n } else if (this._overlayRef?.hasAttached()) {\n // close(false) may already have disposed the overlay before this effect runs.\n this.close();\n }\n }\n previousOpen = currentOpen;\n });\n\n // Watch for changes to signals that affect the popover body and sync them\n // This ensures that when inputs change after the popover is open, the body component is updated\n effect(() => {\n // Read computed to track all body-related signal dependencies\n void this._bodyConfig();\n\n // Only sync if popover body exists and is open\n if (this._getPopoverBody() && this.isOpen()) {\n this._passVariablesToBody();\n }\n });\n\n this._destroyRef.onDestroy(() => {\n this._clearHoverCloseTimer();\n this._removeOverlayHoverListeners();\n this._removeTriggerListeners();\n this._ancestorMutationObserver?.disconnect();\n this._ancestorMutationObserver = null;\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef.dispose();\n }\n\n if (this._isModal) {\n this._removeOverlay(this._modalBodyClass, this._modalTriggerClass);\n }\n });\n }\n\n /**\n * Method initialising the popover service - should be called, after view is initialised, params:\n * - triggerElement - element, which is equivalent for cdkOverlayOrigin, or fd-popover-control,\n * by default to this element the popover body will lbe appended and events on this element will trigger\n * popover's toggle\n * - config - configuration object using PopoverConfig interface\n * - templateData - in case of having already PopoverBodyComponent, there is way to pass container, template containing\n * PopoverComponent and PopoverComponent instance\n */\n initialise(\n triggerElement: ElementRef | HTMLElement,\n config?: PopoverConfig,\n templateData?: PopoverTemplate | TemplateRef<void> | null\n ): void {\n if (templateData instanceof TemplateRef) {\n this.templateContent = templateData;\n } else {\n this._templateData = templateData;\n }\n this._triggerElement = triggerElement;\n\n if (config) {\n this.refreshConfiguration(config);\n }\n\n this._refreshTriggerListeners();\n\n if (this.isOpen()) {\n this.open();\n }\n\n // If wrapper container height changes outside, refresh popover position.\n this._popoverContainer?.refreshPosition$.pipe(takeUntil(this._refresh$)).subscribe(() => {\n this.refreshPosition();\n });\n }\n\n /** Closes the popover. */\n close(focusActiveElement = true): void {\n // Disposal emits a detachment; don't close again and override the focus decision.\n this._stopCloseListening$.next();\n this._ancestorMutationObserver?.disconnect();\n this._ancestorMutationObserver = null;\n\n this._clearHoverCloseTimer();\n this._removeOverlayHoverListeners();\n\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n\n this._safeSetIsOpen(false);\n\n this.checkModalBackground();\n this._focusLastActiveElementBeforeOpen(focusActiveElement);\n }\n\n /** Opens the popover. */\n open(): void {\n if ((!this._overlayRef || !this._overlayRef.hasAttached()) && !this.disabled() && this._triggerElement) {\n const position = this._getPositionStrategy();\n this._overlayRef = this._overlay.create(this._getOverlayConfig(position));\n this._startLayoutShiftObserver();\n\n if (this._placementContainerValue) {\n const placementElement =\n this._placementContainerValue instanceof ElementRef\n ? this._placementContainerValue.nativeElement\n : this._placementContainerValue;\n\n placementElement.append(this._overlayRef.hostElement);\n }\n\n if (this._templateData) {\n this._attachTemplate();\n } else {\n this._attachBodyComponent();\n }\n\n this._stopCloseListening$.next();\n this._listenForPositionChange(position.positionChanges);\n\n if (this.fillControlMode()) {\n this._listenOnResize();\n }\n\n this._safeSetIsOpen(true);\n\n this._setupOverlayHoverListeners();\n this._listenOnClose();\n this._focusFirstTabbableElement();\n this._onLoad.next(this._getPopoverBody()._elementRef);\n\n // Update position - this will trigger the positionChanges observable\n this._overlayRef.updatePosition();\n }\n }\n\n /** method updating template or text inside rendered PopoverBody */\n updateContent(\n stringContent: Nullable<string> | Nullable<TemplateRef<any>>,\n templateContent: Nullable<TemplateRef<any>>\n ): void {\n templateContent = !templateContent\n ? typeof stringContent === 'string'\n ? null\n : stringContent\n : templateContent;\n stringContent = typeof stringContent === 'string' ? stringContent : null;\n this.stringContent = stringContent;\n this.templateContent = templateContent;\n if (this._getPopoverBody()) {\n this._passVariablesToBody();\n }\n }\n\n /** Changes background theming when modal */\n /** @hidden */\n checkModalBackground(): void {\n const isClosingConditions = (!this.closeOnOutsideClick() || !this.closeOnEscapeKey()) && this.applyOverlay();\n if (isClosingConditions && this.isOpen()) {\n this._addModalOverlay(this._modalBodyClass, this._modalTriggerClass);\n } else if (isClosingConditions && !this.isOpen()) {\n this._removeOverlay(this._modalBodyClass, this._modalTriggerClass);\n }\n }\n\n /** Toggles the popover open state */\n toggle(openAction = true, closeAction = true, focusActiveElement?: boolean): void {\n if (this.isOpen()) {\n closeAction && this.close(focusActiveElement ?? true);\n } else {\n openAction && this.open();\n this.checkModalBackground();\n }\n }\n\n /**\n * Method called to change position of popover,\n * recommended to be used only when popover is opened, otherwise change position or cdkPlacement\n */\n applyNewPosition(positions: ConnectedPosition[]): void {\n const refPosition = this._getPositionStrategy(positions);\n this._listenForPositionChange(refPosition.positionChanges);\n this._overlayRef.updatePositionStrategy(refPosition);\n }\n\n /** Method called to refresh position of opened popover */\n refreshPosition(): void {\n this._overlayRef?.updatePosition();\n }\n\n /** Temporary sets the ignoring of the event triggers. */\n setIgnoreTriggers(ignore: boolean): void {\n this._ignoreTriggers = ignore;\n }\n\n /**\n * Method that sets configuration/options, it detects if there is something changed and overwrites them\n */\n refreshConfiguration(config: PopoverConfig): void {\n // Helper function to unwrap signal values\n const unwrap = <T>(val: T | Signal<T>): T => (isSignal(val) ? val() : val) as T;\n\n this._placementContainerValue = unwrap(config.placementContainer) ?? this._placementContainerValue;\n\n // Update signals if config values are provided\n if (config.closeOnNavigation !== undefined) {\n this.closeOnNavigation.set(unwrap(config.closeOnNavigation));\n }\n if (config.disabled !== undefined) {\n this.disabled.set(unwrap(config.disabled));\n }\n if (config.maxWidth !== undefined) {\n this.maxWidth.set(unwrap(config.maxWidth));\n }\n if (config.noArrow !== undefined) {\n this.noArrow.set(unwrap(config.noArrow));\n }\n if (config.additionalBodyClass !== undefined) {\n this.additionalBodyClass.set(unwrap(config.additionalBodyClass));\n }\n if (config.additionalBodyComponentClasses !== undefined) {\n this.additionalBodyComponentClasses.set(unwrap(config.additionalBodyComponentClasses));\n }\n if (config.additionalTriggerClass !== undefined) {\n this.additionalTriggerClass.set(unwrap(config.additionalTriggerClass));\n }\n if (config.closeOnEscapeKey !== undefined) {\n this.closeOnEscapeKey.set(unwrap(config.closeOnEscapeKey));\n }\n if (config.disableScrollbar !== undefined) {\n this.disableScrollbar.set(unwrap(config.disableScrollbar));\n }\n if (config.placement !== undefined) {\n this.placement.set(unwrap(config.placement));\n }\n if (config.closeOnOutsideClick !== undefined) {\n this.closeOnOutsideClick.set(unwrap(config.closeOnOutsideClick));\n }\n if (config.applyOverlay !== undefined) {\n this.applyOverlay.set(unwrap(config.applyOverlay));\n }\n if (config.focusTrapped !== undefined) {\n this.focusTrapped.set(unwrap(config.focusTrapped));\n }\n if (config.focusAutoCapture !== undefined) {\n this.focusAutoCapture.set(unwrap(config.focusAutoCapture));\n }\n if (config.restoreFocusOnClose !== undefined) {\n this.restoreFocusOnClose.set(unwrap(config.restoreFocusOnClose));\n }\n if (config.scrollStrategy !== undefined) {\n this.scrollStrategy.set(unwrap(config.scrollStrategy));\n }\n if (config.cdkPositions !== undefined) {\n this.cdkPositions.set(unwrap(config.cdkPositions));\n }\n if (config.fillControlMode !== undefined) {\n this.fillControlMode.set(unwrap(config.fillControlMode));\n }\n if (config.appendTo !== undefined) {\n this.appendTo.set(unwrap(config.appendTo));\n }\n if (config.placementContainer !== undefined) {\n this.placementContainer.set(unwrap(config.placementContainer));\n }\n if (config.fixedPosition !== undefined) {\n this.fixedPosition.set(unwrap(config.fixedPosition));\n }\n if (config.resizable !== undefined) {\n this.resizable.set(unwrap(config.resizable));\n }\n if (config.bodyRole !== undefined) {\n this._bodyRole = unwrap(config.bodyRole);\n this._getPopoverBody()?._bodyRole.set(this._bodyRole);\n }\n if (config.bodyAriaLabel !== undefined) {\n this._bodyAriaLabel = unwrap(config.bodyAriaLabel);\n this._getPopoverBody()?._bodyAriaLabel.set(this._bodyAriaLabel);\n }\n if (config.bodyAriaLabelledBy !== undefined) {\n this._bodyAriaLabelledBy = unwrap(config.bodyAriaLabelledBy);\n this._getPopoverBody()?._bodyAriaLabelledBy.set(this._bodyAriaLabelledBy);\n }\n if (config.bodyAriaModal !== undefined) {\n this._bodyAriaModal = unwrap(config.bodyAriaModal);\n this._getPopoverBody()?._bodyAriaModal.set(this._bodyAriaModal);\n }\n if (config.bodyId !== undefined) {\n this._bodyId.set(unwrap(config.bodyId));\n this._getPopoverBody()?._bodyId.set(this._bodyId());\n }\n\n if (config.isOpen !== undefined) {\n const isOpenValue = unwrap(config.isOpen);\n if (isOpenValue) {\n this.open();\n } else {\n this.close();\n }\n }\n\n if (config.triggers !== undefined) {\n this.triggers.set(unwrap(config.triggers));\n this._refreshTriggerListeners();\n }\n }\n\n /**\n * This method is intended to be called in order\n * to postpone the main functionality but be able\n * to enable it back in the future by initialise()\n */\n deactivate(): void {\n // Close the popover if it's open\n if (this.isOpen()) {\n this.close();\n }\n this._removeTriggerListeners();\n }\n\n /** Refresh listeners on trigger element events */\n _refreshTriggerListeners(): void {\n if (!this._triggerElement) {\n return;\n }\n\n this._removeTriggerListeners();\n if (this.triggers()?.length) {\n const hasHoverTrigger = this._hasHoverTriggers();\n\n this._normalizeTriggers().forEach((trigger) => {\n this._eventRef.push(\n this._renderer.listen(this._triggerHtmlElement, trigger.trigger, (event: Event) => {\n if (this._ignoreTriggers || this.disabled()) {\n return;\n }\n\n const closeAction = !!trigger.closeAction;\n const openAction = !!trigger.openAction;\n\n // For hover triggers, use delayed close to prevent flickering\n // when the mouse travels between the trigger and the popover body.\n if (hasHoverTrigger && trigger.trigger === 'mouseenter' && openAction) {\n this._clearHoverCloseTimer();\n if (!this.isOpen()) {\n this.toggle(openAction, closeAction);\n }\n } else if (hasHoverTrigger && trigger.trigger === 'mouseleave' && closeAction) {\n this._scheduleHoverClose();\n } else {\n // When closing due to focusout, don't restore focus — the browser\n // is already transferring focus to the next element.\n const isFocusOut = trigger.trigger === 'focusout';\n this.toggle(openAction, closeAction, isFocusOut ? false : undefined);\n }\n\n if (trigger.stopPropagation) {\n event.stopImmediatePropagation();\n }\n })\n );\n });\n }\n }\n\n /**\n * Updates trigger element and refreshes the listeners.\n * @param trigger Trigger element ref.\n */\n updateTriggerElement(trigger: ElementRef | HTMLElement): void {\n this._triggerElement = trigger;\n this._refreshTriggerListeners();\n }\n\n /**\n * @hidden\n * Safely sets isOpen signal, deferring if called during Angular's render cycle.\n * This prevents NG0600 errors when focus events fire during template evaluation.\n */\n private _safeSetIsOpen(value: boolean): void {\n this._programmaticChange = true;\n try {\n this.isOpen.set(value);\n this._programmaticChange = false;\n } catch (e: unknown) {\n this._programmaticChange = false;\n // NG0600: Writing to signals during render - defer to next macrotask\n if (e instanceof Error && e.message?.includes('NG0600')) {\n setTimeout(() => {\n this._programmaticChange = true;\n this.isOpen.set(value);\n this._programmaticChange = false;\n });\n } else {\n throw e;\n }\n }\n }\n\n /** @hidden Whether the current triggers include mouseenter or mouseleave. */\n private _hasHoverTriggers(): boolean {\n return this.triggers().some((t) => {\n const name = typeof t === 'string' ? t : t.trigger;\n return name === 'mouseenter' || name === 'mouseleave';\n });\n }\n\n /** @hidden Clears any pending delayed hover close. */\n private _clearHoverCloseTimer(): void {\n if (this._hoverCloseTimer !== null) {\n clearTimeout(this._hoverCloseTimer);\n this._hoverCloseTimer = null;\n }\n }\n\n /** @hidden Schedules a delayed close to allow mouse to travel from trigger to overlay body. */\n private _scheduleHoverClose(): void {\n this._clearHoverCloseTimer();\n this._hoverCloseTimer = setTimeout(() => {\n this._hoverCloseTimer = null;\n this.close();\n }, 50);\n }\n\n /** @hidden Adds mouseenter/mouseleave listeners on the overlay element when hover triggers are active. */\n private _setupOverlayHoverListeners(): void {\n this._removeOverlayHoverListeners();\n\n if (!this._hasHoverTriggers() || !this._overlayRef) {\n return;\n }\n\n const overlayElement = this._overlayRef.overlayElement;\n\n this._overlayHoverListeners.push(\n this._renderer.listen(overlayElement, 'mouseenter', () => {\n this._clearHoverCloseTimer();\n })\n );\n\n this._overlayHoverListeners.push(\n this._renderer.listen(overlayElement, 'mouseleave', () => {\n this._scheduleHoverClose();\n })\n );\n }\n\n /** @hidden Removes overlay hover listeners. */\n private _removeOverlayHoverListeners(): void {\n this._overlayHoverListeners.forEach((fn) => fn());\n this._overlayHoverListeners = [];\n }\n\n /** @hidden */\n private _normalizeTriggers(): TriggerConfig[] {\n return this.triggers().map((trigger, index) => {\n if (typeof trigger === 'object' && trigger.trigger) {\n return trigger;\n }\n\n const oddNumber = isOdd(index + 1);\n\n return {\n trigger,\n openAction: this.triggers().length === 1 || oddNumber,\n closeAction: this.triggers().length === 1 || !oddNumber,\n stopPropagation: false\n } as TriggerConfig;\n });\n }\n\n /** @hidden */\n private _getOverlayConfig(position: FlexibleConnectedPositionStrategy): OverlayConfig {\n const direction = this._getDirection();\n\n return new OverlayConfig({\n direction,\n disposeOnNavigation: this.closeOnNavigation(),\n positionStrategy: position,\n scrollStrategy: this.scrollStrategy() || this._overlay.scrollStrategies.reposition()\n });\n }\n\n /** @hidden */\n private _listenOnResize(): void {\n this._viewportRuler\n .change(15)\n .pipe(takeUntil(this._refresh$), startWith(1))\n .subscribe(() => this._applyWidthOverlay());\n }\n\n /** @hidden */\n private _getDirection(): 'rtl' | 'ltr' {\n return this._rtlService?.rtl() ? 'rtl' : 'ltr';\n }\n\n /** @hidden */\n private _getPositionStrategy(forcedPositions?: ConnectedPosition[]): FlexibleConnectedPositionStrategy {\n let resultPosition = forcedPositions ? forcedPositions : this._getPositions();\n\n if (!this.fixedPosition()) {\n resultPosition = resultPosition.concat(GetDefaultPosition(resultPosition));\n }\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this.appendTo() || this._triggerElement)\n .withPositions(resultPosition)\n .withPush(false)\n .withGrowAfterOpen(true);\n }\n\n /** remove listeners from trigger element events */\n private _removeTriggerListeners(): void {\n this._eventRef.forEach((event) => event());\n this._eventRef = [];\n }\n\n private _addModalOverlay(bodyClass: string, triggerClass: string): void {\n this._renderer.addClass(document.body, bodyClass);\n this._renderer.addClass((this._triggerElement as ElementRef).nativeElement, triggerClass);\n this._isModal = true;\n }\n\n private _removeOverlay(bodyClass: string, triggerClass: string): void {\n this._renderer.removeClass(document.body, bodyClass);\n this._renderer.removeClass((this._triggerElement as ElementRef).nativeElement, triggerClass);\n this._isModal = false;\n }\n\n /** Attach template containing popover body to overlay */\n private _attachTemplate(): void {\n if (this._templateData) {\n this._overlayRef.attach(new TemplatePortal(this._templateData.template, this._templateData.container));\n }\n // Pass variables AFTER attaching to ensure CDK directives are properly initialized\n this._passVariablesToBody();\n }\n\n /** Create PopoverBodyComponent and attach it into overlay */\n private _attachBodyComponent(): void {\n const overlay = this._overlayRef.attach(new ComponentPortal(PopoverBodyComponent, null, this._injector));\n this._popoverBody = overlay.instance;\n this._passVariablesToBody();\n }\n\n /** @hidden */\n private _listenForPositionChange(positionChange: Observable<ConnectedOverlayPositionChange>): void {\n this._placementRefresh$.next();\n positionChange\n .pipe(\n filter(() => !this.noArrow() && !!this._getPopoverBody()),\n distinctUntilChanged((previous, current) => previous.connectionPair === current.connectionPair),\n takeUntil(this._placementRefresh$),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => this._getPopoverBody()._setArrowStyles(event.connectionPair, this._getDirection()));\n }\n\n /** Subscribe to close events from CDK Overlay, to throw proper events, change values */\n private _listenOnClose(): void {\n const body = this._getPopoverBody();\n const closeEvents$ = merge(\n merge(this._overlayRef.detachments(), outputToObservable(body.onClose), this._escapeKeydowns$()).pipe(\n map(() => true)\n ),\n this._outsideClicks$().pipe(\n map(() => {\n const activeElement = document.activeElement;\n // A blank-space click can focus a scrollable ancestor instead of another control.\n return (\n !activeElement ||\n activeElement.contains(this._triggerHtmlElement) ||\n this._overlayRef.overlayElement.contains(activeElement)\n );\n })\n )\n );\n // Only use _stopCloseListening$ to stop listening, not _refresh$\n // _refresh$ can emit due to signal effects and would complete the subscription prematurely\n closeEvents$\n .pipe(takeUntil(this._stopCloseListening$), takeUntilDestroyed(this._destroyRef))\n .subscribe((restoreFocus) => this.close(restoreFocus));\n }\n\n /** Listener for click events */\n private _outsideClicks$(): Observable<MouseEvent> {\n return merge(this._overlayRef.backdropClick(), this._overlayRef._outsidePointerEvents).pipe(\n filter((event) => this._shouldClose(event))\n );\n }\n\n /** Listener for Escape keydown via CDK overlay's document-level keyboard dispatcher. */\n private _escapeKeydowns$(): Observable<KeyboardEvent> {\n return this._overlayRef\n .keydownEvents()\n .pipe(filter((event) => this.closeOnEscapeKey() && event.key === 'Escape'));\n }\n\n /** @hidden */\n private _shouldClose(event: MouseEvent): boolean {\n return (\n this.isOpen() &&\n this.closeOnOutsideClick() &&\n !this._triggerContainsTarget(event) &&\n !this._targetIsPopoverMobileDialog(event)\n );\n }\n\n /** @hidden */\n private _targetIsPopoverMobileDialog(event: MouseEvent): boolean {\n if (this._mobile) {\n let el = (event.target as HTMLElement).parentElement;\n while (el) {\n if (el.hasAttribute('data-mobile-popover')) {\n return true;\n } else {\n el = el.parentElement;\n }\n }\n }\n\n return false;\n }\n\n /** @hidden */\n private _getEventTarget(event: Event): EventTarget | null {\n return event.composedPath ? event.composedPath()[0] : event.target;\n }\n\n /** @hidden */\n private _triggerContainsTarget(event: Event): boolean {\n return this._triggerHtmlElement.contains(this._getEventTarget(event) as HTMLElement);\n }\n\n /** @hidden */\n private _getPositions(): ConnectedPosition[] {\n const positions = this.cdkPositions();\n if (positions) {\n return positions;\n }\n\n const currentPlacement = this.placement();\n if (currentPlacement) {\n return [PopoverPosition.getCdkPlacement(currentPlacement, this._getDirection())];\n }\n\n return [];\n }\n\n /** @hidden */\n private _applyWidthOverlay(): void {\n const maxWidthLimit = this.maxWidth() ?? MAX_BODY_SIZE;\n const width = Math.min(this._getTriggerWidth(), maxWidthLimit);\n const fillMode = this.fillControlMode();\n if (fillMode === 'at-least') {\n this._getPopoverBody()._popoverBodyMinWidth.set(width);\n } else if (fillMode === 'equal') {\n this._getPopoverBody()._popoverBodyWidth.set(width);\n }\n }\n\n /** @hidden */\n private _passVariablesToBody(): void {\n const body = this._getPopoverBody();\n body.text.set(this.stringContent);\n body._additionalBodyClass.set(this.additionalBodyClass());\n body._focusTrapped.set(this.focusTrapped());\n body._maxWidth.set(this.maxWidth());\n body._noArrow.set(this.noArrow());\n body._focusAutoCapture.set(this.focusAutoCapture());\n body._disableScrollbar.set(this.disableScrollbar());\n if (this.templateContent) {\n body._templateToDisplay.set(this.templateContent);\n }\n body._closeOnEscapeKey.set(this.closeOnEscapeKey());\n body._bodyRole.set(this._bodyRole);\n body._bodyAriaLabel.set(this._bodyAriaLabel);\n body._bodyAriaLabelledBy.set(this._bodyAriaLabelledBy);\n body._bodyId.set(this._bodyId());\n body._resizable.set(this.resizable());\n body._setBodyComponentClasses(this.additionalBodyComponentClasses());\n }\n\n /** @hidden */\n private _getTriggerWidth(): number {\n return this._triggerHtmlElement.offsetWidth;\n }\n\n /** @hidden */\n private _getPopoverBody(): PopoverBodyComponent {\n return this._templateData?.popoverBody || this._popoverBody;\n }\n\n /** @hidden */\n private _focusFirstTabbableElement(focusLastElement = true): void {\n if (focusLastElement && this.focusAutoCapture()) {\n this._lastActiveElement = <HTMLElement>document.activeElement;\n this._getPopoverBody()?._focusFirstTabbableElement();\n }\n }\n\n /** @hidden */\n private _focusLastActiveElementBeforeOpen(focusLastElement = true): void {\n if (focusLastElement && this.restoreFocusOnClose() && this.focusAutoCapture() && this._lastActiveElement) {\n this._lastActiveElement.focus();\n }\n }\n\n /**\n * @hidden\n * Starts a MutationObserver on document.body to detect any layout shift that could\n * invalidate the overlay position — including mutations in elements outside the trigger's\n * nearest scroll container (e.g. a collapsible header above a table pushing the trigger down).\n *\n * Observed mutation types:\n * - `childList`: elements added/removed from the DOM (Angular `@if`, ngIf, toast dismissed).\n * - `attributes` with `attributeFilter: ['style', 'class']`: visibility toggled via CSS.\n *\n * The callback is debounced through `requestAnimationFrame` so rapid batched mutations\n * only trigger a single `updatePosition()` call per frame.\n */\n private _startLayoutShiftObserver(): void {\n const trigger = this._triggerHtmlElement;\n if (!trigger) {\n return;\n }\n\n let animationFrame: number | null = null;\n const scheduleUpdate = (records: MutationRecord[]): void => {\n // Skip self-caused mutations: updatePosition() writes `style` on hostElement\n // (the CDK position bounding-box) and its descendants. Using hostElement as the\n // scope boundary covers both the default case (.cdk-overlay-container) and the\n // placementContainer case where the host is moved outside that container.\n const overlayHost = this._overlayRef?.hostElement;\n if (overlayHost && records.every((record) => overlayHost.contains(record.target as Node))) {\n return;\n }\n if (animationFrame !== null) {\n return;\n }\n animationFrame = window.requestAnimationFrame(() => {\n animationFrame = null;\n this._overlayRef?.updatePosition();\n });\n };\n\n this._ancestorMutationObserver = new MutationObserver(scheduleUpdate);\n this._ancestorMutationObserver.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['style', 'class']\n });\n }\n}\n","import { Directive, ElementRef, HostBinding, inject, Injector, Input, OnDestroy } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport { PopoverComponent } from './popover.component';\n\n@Directive({\n selector: '[fdPopoverTrigger], [fd-popover-trigger]',\n standalone: true\n})\nexport class PopoverTriggerDirective implements OnDestroy {\n /** Set reference to Popover Component */\n @Input('fdPopoverTrigger')\n set popover(popover: Nullable<PopoverComponent>) {\n if (popover) {\n popover.trigger.set(this._elementRef);\n this._listenOnExpanded(popover);\n }\n this._setAriaAttributes(popover);\n }\n\n /** @hidden */\n @HostBinding('attr.aria-haspopup')\n ariaHasPopup: Nullable<boolean>;\n\n /** @hidden */\n @HostBinding('attr.aria-controls')\n ariaControls: Nullable<string>;\n\n /** @hidden */\n @HostBinding('attr.aria-expanded')\n ariaExpanded: Nullable<boolean>;\n\n /** @hidden */\n private _isExpandedSubscription: Subscription;\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this._unsubscribeExpandedListener();\n }\n\n /** @hidden */\n private _listenOnExpanded(popover: PopoverComponent): void {\n this._unsubscribeExpandedListener();\n if (popover) {\n // Convert signal to observable for reactive updates\n const isOpen$ = toObservable(popover.isOpen, { injector: this._injector });\n this._isExpandedSubscription = isOpen$.subscribe((isOpen) => (this.ariaExpanded = isOpen));\n }\n }\n\n /** @hidden */\n private _setAriaAttributes(popover: Nullable<PopoverComponent>): void {\n this.ariaHasPopup = !!popover;\n this.ariaControls = popover ? popover.id() : null;\n }\n\n /** @hidden */\n private _unsubscribeExpandedListener(): void {\n if (this._isExpandedSubscription) {\n this._isExpandedSubscription.unsubscribe();\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_POPOVER_COMPONENT = new InjectionToken('FdPopoverComponent');\n","import {\n AfterContentInit,\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n OnDestroy,\n output,\n Renderer2,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\n\n/**\n * ARIA role values commonly used for popover bodies. Provides autocomplete for\n * the most frequent cases while allowing any valid ARIA role via the string escape hatch.\n */\nexport type PopoverBodyRole = 'dialog' | 'region' | 'menu' | 'listbox' | 'tooltip' | 'alertdialog';\n\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { PopoverConfig, TriggerConfig } from './base/popover-config.interface';\nimport { PopoverBodyDirective } from './popover-body.directive';\nimport { PopoverBodyComponent } from './popover-body/popover-body.component';\nimport { PopoverControlComponent } from './popover-control/popover-control.component';\nimport { PopoverMobileComponent } from './popover-mobile/popover-mobile.component';\nimport { PopoverService, PopoverTemplate } from './popover-service/popover.service';\nimport { POPOVER_COMPONENT } from './popover.interface';\nimport { FD_POPOVER_COMPONENT } from './tokens';\n\nexport const SELECT_CLASS_NAMES = {\n selectControl: 'fd-select__control'\n};\n\nlet cdkPopoverUniqueId = 0;\n\n/**\n * The popover is a wrapping component that accepts a *control* as well as a *body*.\n * The control is what will trigger the opening of the actual popover, which is called the body.\n * By default, popovers are triggered by click. This can be customized through the *triggers* input.\n */\n@Component({\n selector: 'fd-popover',\n templateUrl: './popover.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n providers: [\n PopoverService,\n {\n provide: FD_POPOVER_COMPONENT,\n useExisting: PopoverComponent\n },\n contentDensityObserverProviders()\n ],\n host: {\n class: 'fd-popover-custom',\n '[class.fd-popover-custom--mobile]': 'mobile()',\n '[class.fd-popover-custom--disabled]': 'disabled()',\n '[attr.id]': 'id()',\n '(keydown.escape)': '_onEscapeKey($event)',\n '(keydown.space)': '_onKeyDown($event)',\n '(keydown.enter)': '_onKeyDown($event)'\n },\n imports: [CdkOverlayOrigin, A11yModule]\n})\nexport class PopoverComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n /**\n * Configuration object for popover settings.\n * When provided, these settings will be merged with individual input properties.\n * Individual inputs take precedence over config object values.\n */\n readonly config = input<PopoverConfig>({});\n\n /** Tooltip for popover */\n readonly title = input<string>('');\n\n /** Reference to popover trigger element */\n readonly trigger = model<ElementRef | HTMLElement | null>(null);\n\n /** Id of the popover. If none is provided, one will be generated. */\n readonly id = input<string>(`fd-popover-${cdkPopoverUniqueId++}`);\n\n /** Whether the popover component should be displayed in mobile mode. */\n readonly mobile = input(false, { transform: booleanAttribute });\n\n /** Config for the popover in mobile mode */\n readonly mobileConfig = input<MobileModeConfig>({ hasCloseButton: true });\n\n /**\n * Whether the popover should prevent page scrolling when space key is pressed.\n **/\n readonly preventSpaceKeyScroll = input(true, { transform: booleanAttribute });\n\n /** Popover placement */\n readonly placement = input<Placement>('bottom-start');\n\n /** Maximum width of popover body in px, prevents from overextending body by `fillControlMode` */\n readonly maxWidth = input<number | null>(null);\n\n /**\n * Preset options for the popover body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n readonly fillControlMode = input<PopoverFillMode | null>(null);\n\n /** Whether clicking outside popover should close it */\n readonly closeOnOutsideClick = input(true, { transform: booleanAttribute });\n\n /** Whether escape key should close the popover */\n readonly closeOnEscapeKey = input(true, { transform: booleanAttribute });\n\n /** Whether the popover is disabled */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Popover trigger events configuration */\n readonly triggers = input<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover should trap focus */\n readonly focusTrapped = input(true, { transform: booleanAttribute });\n\n /** Whether focus should be automatically captured when popover opens */\n readonly focusAutoCapture = input(true, { transform: booleanAttribute });\n\n /**\n * Whether to move the focus after popover is closed to the last focused element before popover was opened.\n */\n readonly restoreFocusOnClose = input(true, { transform: booleanAttribute });\n\n /** Whether the arrow should be hidden */\n readonly noArrow = input(true, { transform: booleanAttribute });\n\n /** Whether scrollbar should be disabled */\n readonly disableScrollbar = input(false, { transform: booleanAttribute });\n\n /** The element to which the overlay is attached. By default it is body */\n readonly appendTo = input<ElementRef | Element | null>(null);\n\n /** Placement of the popover element */\n readonly placementContainer = input<ElementRef | Element | null>(null);\n\n /** Scroll strategy for the overlay */\n readonly scrollStrategy = input<any>(null);\n\n /** List of position options for CDK overlay */\n readonly cdkPositions = input<ConnectedPosition[] | null>(null);\n\n /** Whether to apply a background overlay */\n readonly applyOverlay = input(false, { transform: booleanAttribute });\n\n /** Additional CSS class for the popover body container */\n readonly additionalBodyClass = input<string | null>(null);\n\n /** Additional CSS class for the popover trigger element */\n readonly additionalTriggerClass = input<string | null>(null);\n\n /** Whether to close the popover on router navigation start */\n readonly closeOnNavigation = input(true, { transform: booleanAttribute });\n\n /** Whether position shouldn't change when popover approaches the corner of page */\n readonly fixedPosition = input(false, { transform: booleanAttribute });\n\n /** Whether the popover body is resizable */\n readonly resizable = input(false, { transform: booleanAttribute });\n\n /** ARIA label for the popover body */\n readonly bodyAriaLabel = input<string | null>(null);\n\n /**\n * ARIA role for the popover body. Default: 'dialog' (back-compat).\n *\n * When 'dialog', WCAG requires an accessible name — provide one via\n * [bodyAriaLabel] or [bodyAriaLabelledBy]. Without a name, axe-core\n * raises aria-dialog-name violations.\n *\n * Set to null when the popover is a non-modal disclosure widget and\n * the trigger's aria-haspopup already carries the relationship (no role\n * attribute is rendered). Other valid values: 'region', 'menu', 'listbox',\n * 'tooltip', 'alertdialog' — match the role to the popover's actual semantics.\n * Any valid ARIA role is accepted; the type provides autocomplete for common cases.\n *\n * @remarks When set via this input (including when unbound — defaults to 'dialog'),\n * the PopoverConfig object's `bodyRole` field is ignored. Config-only usage\n * is not supported for `bodyRole` because the input has a concrete default.\n * To override, bind the input explicitly: `[bodyRole]=\"'region'\"` or `[bodyRole]=\"null\"`.\n *\n * See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ for guidance.\n */\n readonly bodyRole = input<PopoverBodyRole | (string & {}) | null>('dialog');\n\n /**\n * ID of the element that labels the popover body. Alternative to\n * [bodyAriaLabel] when the label already exists in the DOM (e.g. the\n * trigger's text). Sets aria-labelledby on the popover body.\n */\n readonly bodyAriaLabelledBy = input<string | null>(null);\n\n /** Two-way binding for popover open state */\n readonly isOpen = model(false);\n\n /** Event emitted when the state of the isOpen property changes - for backwards compatibility with programmatic subscribers */\n readonly isOpenChange = new Subject<boolean>();\n\n /** Event emitted right before the popover is being opened. */\n readonly beforeOpen = output<void>();\n\n /** @hidden */\n readonly templateRef = viewChild('templateRef', { read: TemplateRef<any> });\n\n /** @hidden */\n readonly container = viewChild('container', { read: ViewContainerRef });\n\n /** @hidden */\n readonly triggerOrigin = viewChild(CdkOverlayOrigin);\n\n /** @hidden */\n readonly popoverBody = contentChild(PopoverBodyComponent);\n\n /** @hidden */\n readonly popoverBodyDirective = contentChild(PopoverBodyDirective);\n\n /** @hidden */\n readonly popoverControl = contentChild(PopoverControlComponent);\n\n /** @hidden - template for Dialog body content */\n readonly popoverBodyContentTemplate = contentChild<TemplateRef<any>>('popoverBodyContent');\n\n /** @hidden - template for Dialog footer content */\n readonly popoverFooterContentTemplate = contentChild<TemplateRef<any>>('popoverFooterContent');\n\n /** @hidden */\n get _triggerElement(): HTMLElement | null {\n const trigger = this.trigger();\n if (!trigger) {\n return null;\n }\n return trigger instanceof ElementRef ? trigger.nativeElement : trigger;\n }\n\n /** @hidden */\n private readonly _popoverService = inject(PopoverService);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _viewContainerRef = inject(ViewContainerRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private readonly _dynamicComponentService = inject(DynamicComponentService, { optional: true });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _clickEventListener: (() => void) | null = null;\n\n /** @hidden */\n private _mobileModeComponentRef: ComponentRef<PopoverMobileComponent> | null = null;\n\n /** @hidden Flag to prevent circular sync between component and service */\n private _syncingIsOpen = false;\n\n /** @hidden Computed signal that merges config with individual inputs */\n private readonly _effectiveConfig = computed(() => {\n const cfg = this.config();\n return {\n placement: this.placement() ?? cfg.placement ?? 'bottom-start',\n maxWidth: this.maxWidth() ?? cfg.maxWidth ?? null,\n fillControlMode: this.fillControlMode() ?? cfg.fillControlMode ?? null,\n closeOnOutsideClick: this.closeOnOutsideClick() ?? cfg.closeOnOutsideClick ?? true,\n closeOnEscapeKey: this.closeOnEscapeKey() ?? cfg.closeOnEscapeKey ?? true,\n disabled: this.disabled() ?? cfg.disabled ?? false,\n triggers: this.triggers() ?? cfg.triggers ?? ['click'],\n focusTrapped: this.focusTrapped() ?? cfg.focusTrapped ?? true,\n focusAutoCapture: this.focusAutoCapture() ?? cfg.focusAutoCapture ?? true,\n restoreFocusOnClose: this.restoreFocusOnClose() ?? cfg.restoreFocusOnClose ?? true,\n noArrow: this.noArrow() ?? cfg.noArrow ?? true,\n disableScrollbar: this.disableScrollbar() ?? cfg.disableScrollbar ?? false,\n appendTo: this.appendTo() ?? cfg.appendTo ?? null,\n placementContainer: this.placementContainer() ?? cfg.placementContainer ?? null,\n scrollStrategy: this.scrollStrategy() ?? cfg.scrollStrategy ?? null,\n cdkPositions: this.cdkPositions() ?? cfg.cdkPositions ?? null,\n applyOverlay: this.applyOverlay() ?? cfg.applyOverlay ?? false,\n additionalBodyClass: this.additionalBodyClass() ?? cfg.additionalBodyClass ?? null,\n additionalTriggerClass: this.additionalTriggerClass() ?? cfg.additionalTriggerClass ?? null,\n closeOnNavigation: this.closeOnNavigation() ?? cfg.closeOnNavigation ?? true,\n fixedPosition: this.fixedPosition() ?? cfg.fixedPosition ?? false,\n resizable: this.resizable() ?? cfg.resizable ?? false,\n bodyAriaLabel: this.bodyAriaLabel() ?? cfg.bodyAriaLabel ?? null,\n bodyRole: this.bodyRole(),\n bodyAriaLabelledBy: this.bodyAriaLabelledBy() ?? cfg.bodyAriaLabelledBy ?? null\n };\n });\n\n /** @hidden */\n constructor() {\n // Sync component → service and emit events\n let previousIsOpen = false;\n effect(() => {\n const currentIsOpen = this.isOpen();\n\n // Emit beforeOpen when transitioning from closed to open\n if (currentIsOpen && !previousIsOpen) {\n this.beforeOpen.emit();\n }\n\n // Emit isOpenChange when state changes\n if (currentIsOpen !== previousIsOpen) {\n this.isOpenChange.next(currentIsOpen);\n }\n\n // Sync to service only if not already syncing and not in mobile mode (prevents loop).\n // In mobile mode, the dialog handles open/close — the popover service should not be involved.\n if (!this._syncingIsOpen && !this.mobile()) {\n this._syncingIsOpen = true;\n this._popoverService.isOpen.set(currentIsOpen);\n this._syncingIsOpen = false;\n }\n previousIsOpen = currentIsOpen;\n });\n\n // Subscribe to service changes for bidirectional sync using afterNextRender\n // to ensure service is fully initialized\n afterNextRender(\n () => {\n // Service will emit when it closes/opens programmatically (escape key, close button, etc.)\n this._popoverService.isOpenChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((serviceIsOpen) => {\n // In mobile mode, the dialog handles open/close — ignore service changes.\n if (this.mobile()) {\n return;\n }\n // Only update if different and not already syncing (prevents loop)\n if (!this._syncingIsOpen && this.isOpen() !== serviceIsOpen) {\n this._syncingIsOpen = true;\n this.isOpen.set(serviceIsOpen);\n this._syncingIsOpen = false;\n }\n });\n },\n { injector: this._injector }\n );\n\n // Watch effective config changes and sync to service\n // Using computed signal eliminates the need to read all signals individually\n effect(() => {\n const effectiveConfig = this._effectiveConfig();\n const triggerValue = this.trigger();\n\n // Always sync these to service (for both trigger directive and control usage)\n this._popoverService.disabled.set(effectiveConfig.disabled);\n this._popoverService.refreshConfiguration({\n bodyAriaLabel: effectiveConfig.bodyAriaLabel,\n bodyRole: effectiveConfig.bodyRole,\n bodyAriaLabelledBy: effectiveConfig.bodyAriaLabelledBy\n });\n\n // In mobile mode, the dialog handles open/close — the popover service should not be involved.\n const triggerElement = triggerValue ?? this.triggerOrigin()?.elementRef.nativeElement;\n if (triggerElement && !this.mobile()) {\n this._syncToService(effectiveConfig, triggerElement);\n }\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setupView();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n const control = this.popoverControl();\n if (control && this.triggers().includes('click')) {\n control._tabbable = true;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._destroyMobileComponent();\n this._destroyEventListeners();\n }\n\n /** Toggles menu open/close state */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Opens the popover. */\n open(): void {\n // In mobile mode, just update the signal — the mobile component's effect handles the dialog.\n if (this.mobile()) {\n this.isOpen.set(true);\n } else {\n this._popoverService.open();\n }\n }\n\n /** Closes the popover. */\n close(focusActiveElement = true): void {\n // In mobile mode, just update the signal — the mobile component's effect handles the dialog.\n if (this.mobile()) {\n this.isOpen.set(false);\n } else {\n this._popoverService.close(focusActiveElement);\n }\n }\n\n /** Temporary sets the ignoring of the event triggers. */\n setIgnoreTriggers(ignore: boolean): void {\n this._popoverService.setIgnoreTriggers(ignore);\n }\n\n /**\n * Method called to change position of popover,\n * recommended to be used only when popover is opened, otherwise change position or cdkPlacement\n */\n applyNewPosition(positions: ConnectedPosition[]): void {\n this._popoverService.applyNewPosition(positions);\n }\n\n /** Method called to refresh position of opened popover */\n refreshPosition(): void {\n this._popoverService.refreshPosition();\n }\n\n /** Handler for alt + arrow down keydown */\n triggerKeyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, DOWN_ARROW) && event.altKey && !this.disabled()) {\n this.open();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /** Handler escape keydown */\n protected _onEscapeKey(event: Event): void {\n if (this.closeOnEscapeKey() && this.isOpen()) {\n // In case if popover belongs to the element inside dialog\n event.preventDefault();\n event.stopImmediatePropagation();\n this.popoverBody()?.onClose.emit();\n }\n }\n\n /** @hidden */\n protected _onKeyDown(event: Event): void {\n if (!this.preventSpaceKeyScroll()) {\n return;\n }\n const activeElement = document.activeElement;\n if (\n // popoverControl will be undefined when popover is used from \"fdPopoverTrigger\"\n this.popoverControl()?.elRef.nativeElement.children[0] === activeElement &&\n activeElement?.tagName !== 'INPUT' &&\n activeElement?.tagName !== 'TEXTAREA' &&\n !activeElement?.classList.contains(SELECT_CLASS_NAMES.selectControl)\n ) {\n // prevent page scrolling on Space keydown\n event.preventDefault();\n this.toggle();\n }\n }\n\n /** @hidden - Sync all input signals to the service */\n private _syncToService(\n effectiveConfig: ReturnType<typeof this._effectiveConfig>,\n triggerValue: ElementRef | HTMLElement\n ): void {\n this._popoverService.placement.set(effectiveConfig.placement);\n this._popoverService.maxWidth.set(effectiveConfig.maxWidth);\n this._popoverService.fillControlMode.set(effectiveConfig.fillControlMode);\n this._popoverService.closeOnOutsideClick.set(effectiveConfig.closeOnOutsideClick);\n this._popoverService.closeOnEscapeKey.set(effectiveConfig.closeOnEscapeKey);\n this._popoverService.disabled.set(effectiveConfig.disabled);\n this._popoverService.triggers.set(effectiveConfig.triggers);\n this._popoverService.focusTrapped.set(effectiveConfig.focusTrapped);\n this._popoverService.focusAutoCapture.set(effectiveConfig.focusAutoCapture);\n this._popoverService.restoreFocusOnClose.set(effectiveConfig.restoreFocusOnClose);\n this._popoverService.noArrow.set(effectiveConfig.noArrow);\n this._popoverService.disableScrollbar.set(effectiveConfig.disableScrollbar);\n this._popoverService.appendTo.set(effectiveConfig.appendTo);\n this._popoverService.placementContainer.set(effectiveConfig.placementContainer);\n this._popoverService.scrollStrategy.set(effectiveConfig.scrollStrategy);\n this._popoverService.cdkPositions.set(effectiveConfig.cdkPositions);\n this._popoverService.applyOverlay.set(effectiveConfig.applyOverlay);\n this._popoverService.additionalBodyClass.set(effectiveConfig.additionalBodyClass);\n this._popoverService.additionalTriggerClass.set(effectiveConfig.additionalTriggerClass);\n this._popoverService.closeOnNavigation.set(effectiveConfig.closeOnNavigation);\n this._popoverService.fixedPosition.set(effectiveConfig.fixedPosition);\n this._popoverService.resizable.set(effectiveConfig.resizable);\n this._popoverService.updateTriggerElement(triggerValue);\n }\n\n /** @hidden Select and instantiate popover view mode */\n private _setupView(): void {\n if (!this.mobile()) {\n this._popoverService._mobile = false;\n if (!this.popoverBody()) {\n this._popoverService.templateContent = this.templateRef() || null;\n }\n const triggerOriginRef = this.triggerOrigin();\n const triggerElement = this._triggerElement || (triggerOriginRef ? triggerOriginRef.elementRef : null);\n if (triggerElement) {\n this._popoverService.initialise(\n triggerElement,\n this._effectiveConfig() as PopoverConfig,\n this._getPopoverBodyContent()\n );\n }\n } else {\n this._setupMobileMode();\n }\n }\n\n /**\n * Depending on a used popover body type, returns a popover body content\n **/\n private _getPopoverBodyContent(): PopoverTemplate | TemplateRef<void> | null {\n const body = this.popoverBody();\n const templateRef = this.templateRef();\n const container = this.container();\n\n if (body && templateRef && container) {\n return {\n template: templateRef,\n container,\n popoverBody: body\n };\n }\n const bodyDirective = this.popoverBodyDirective();\n if (bodyDirective) {\n return bodyDirective.templateRef;\n }\n return null;\n }\n\n /** @hidden Open Popover in mobile mode */\n private async _setupMobileMode(): Promise<void> {\n if (!this._dynamicComponentService) {\n return;\n }\n\n const injector = Injector.create({\n providers: [{ provide: POPOVER_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._popoverService._mobile = true;\n\n this._mobileModeComponentRef = this._dynamicComponentService.createDynamicComponent(\n {\n popoverBodyContentTemplate: this.popoverBodyContentTemplate(),\n popoverFooterContentTemplate: this.popoverFooterContentTemplate()\n },\n PopoverMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n\n this._listenOnTriggerRefClicks();\n }\n\n /** @hidden - Listen on popover trigger ref clicks */\n private _listenOnTriggerRefClicks(): void {\n this._destroyEventListeners();\n\n const triggerElement = this.trigger();\n if (triggerElement && this.mobile()) {\n this._clickEventListener = this._renderer.listen(this._triggerElement, 'click', () => {\n if (!this.disabled()) {\n this.toggle();\n }\n });\n }\n }\n\n /**\n * @hidden\n * This is going to be removed in feature, on dialog and dynamic service component refactor\n */\n private _destroyEventListeners(): void {\n if (this._clickEventListener) {\n this._clickEventListener();\n this._clickEventListener = null;\n }\n }\n\n /** @hidden */\n private _destroyMobileComponent(): void {\n if (this._mobileModeComponentRef) {\n this._mobileModeComponentRef.destroy();\n }\n }\n}\n","@if (!trigger()) {\n <div\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass()\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n >\n <ng-content select=\"fd-popover-control, [fdPopoverControl]\"></ng-content>\n </div>\n}\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n <ng-content></ng-content>\n</ng-template>\n<ng-container #container></ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { PopoverBodyFooterDirective } from './popover-body/popover-body-directives/popover-body-footer.directive';\nimport { PopoverBodyHeaderDirective } from './popover-body/popover-body-directives/popover-body-header.directive';\nimport { PopoverBodyComponent } from './popover-body/popover-body.component';\nimport { PopoverControlComponent } from './popover-control/popover-control.component';\n\nimport { PopoverBodyDirective } from './popover-body.directive';\nimport { PopoverContainerDirective } from './popover-container/popover-container.directive';\nimport { PopoverTriggerDirective } from './popover-trigger.directive';\nimport { PopoverComponent } from './popover.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyHeaderDirective,\n PopoverBodyFooterDirective,\n PopoverComponent,\n PopoverTriggerDirective,\n PopoverContainerDirective,\n PopoverBodyDirective\n ],\n exports: [\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyHeaderDirective,\n PopoverBodyFooterDirective,\n PopoverComponent,\n PopoverTriggerDirective,\n PopoverContainerDirective,\n PopoverBodyDirective\n ]\n})\nexport class PopoverModule {}\n","import { computed, Signal } from '@angular/core';\nimport { PopoverConfig } from '../base/popover-config.interface';\n\n/**\n * Maps each PopoverConfig property to a signal accessor.\n * Components pass their input signals (or inline lambdas for fixed values).\n * All properties are optional — components only provide what they declare.\n */\nexport type PopoverConfigSignals = {\n [K in keyof PopoverConfig]?: () => PopoverConfig[K];\n};\n\n/**\n * Builds a computed PopoverConfig from individual signal accessors.\n * Reads all provided accessors reactively and assembles a config object.\n *\n * @example\n * ```typescript\n * readonly popoverConfig = buildPopoverConfig({\n * placement: () => this.placement() ?? 'bottom',\n * triggers: this.triggers,\n * disabled: this.disabled,\n * });\n * ```\n */\nexport function buildPopoverConfig(signals: PopoverConfigSignals): Signal<PopoverConfig> {\n return computed(() => {\n const config: PopoverConfig = {};\n for (const key of Object.keys(signals) as (keyof PopoverConfig)[]) {\n const accessor = signals[key];\n if (accessor) {\n (config as any)[key] = accessor();\n }\n }\n return config;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-popover.mjs","sources":["../../../../libs/core/popover/base/base-popover.class.ts","../../../../libs/core/popover/popover-body.directive.ts","../../../../libs/core/popover/popover-body/popover-body-directives/popover-body-footer.directive.ts","../../../../libs/core/popover/popover-body/popover-body-directives/popover-body-header.directive.ts","../../../../libs/core/popover/popover-body/popover-body.component.ts","../../../../libs/core/popover/popover-body/popover-body.component.html","../../../../libs/core/popover/popover-container/popover-container.directive.ts","../../../../libs/core/popover/popover-control/popover-control.component.ts","../../../../libs/core/popover/popover.interface.ts","../../../../libs/core/popover/popover-mobile/popover-mobile.component.ts","../../../../libs/core/popover/popover-mobile/popover-mobile.component.html","../../../../libs/core/popover/popover-mobile/popover-mobile.module.ts","../../../../libs/core/popover/popover-service/popover.service.ts","../../../../libs/core/popover/popover-trigger.directive.ts","../../../../libs/core/popover/tokens.ts","../../../../libs/core/popover/popover.component.ts","../../../../libs/core/popover/popover.component.html","../../../../libs/core/popover/popover.module.ts","../../../../libs/core/popover/utils/build-popover-config.ts","../../../../libs/core/popover/fundamental-ngx-core-popover.ts"],"sourcesContent":["import { ConnectedPosition, ScrollStrategy } from '@angular/cdk/overlay';\nimport { Directive, ElementRef, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { TriggerConfig } from './popover-config.interface';\n\n// Re-export for backward compatibility\nexport { TriggerConfig };\n\n/**\n * @deprecated Use the {@link PopoverConfig} interface instead of extending this class.\n * This class will be removed in a future major version.\n *\n * Migration guide:\n * - For components: Use regular `input()` signal properties and pass configuration to PopoverService\n * - For services: Use the PopoverConfig interface to define configuration objects\n * - See {@link PopoverComponent} and {@link MenuComponent} for modern implementation examples\n *\n * Configuration object for popover settings.\n * This is used by PopoverService and was extended by PopoverComponent and MenuComponent.\n *\n * **For Components:** Use signal inputs with the `input()` function to declare these properties.\n * Use `model()` for `isOpen` so Angular provides template-level `(isOpenChange)` automatically.\n * If programmatic subscriptions are needed for backwards compatibility, expose a dedicated stream\n * (for example `Subject<boolean>`) and emit on real state transitions.\n *\n * **For Services:** Use regular signal instances to store these values.\n */\n@Directive({\n host: {\n '[class.fd-popover-custom--disabled]': 'disabled()'\n }\n})\nexport class BasePopoverClass {\n /** Whether to close the popover on router navigation start. */\n closeOnNavigation = signal(true);\n\n /** Whether the popover is disabled. */\n disabled = signal(false);\n\n /** Maximum width of popover body in px, prevents from overextending body by `fillControlMode` */\n maxWidth = signal<Nullable<number>>(null);\n\n /** Whether the popover should have an arrow. */\n noArrow = signal(true);\n\n /** Whether the popover container needs an extra class for styling. */\n additionalBodyClass = signal<string | null>(null);\n\n /** Classes that should be applied to fd-popover-body component directly. */\n additionalBodyComponentClasses = signal<string | null>(null);\n\n /** Whether the popover container needs an extra class for styling. */\n additionalTriggerClass = signal<string | null>(null);\n\n /** Whether the popover should close when the escape key is pressed. */\n closeOnEscapeKey = signal(true);\n\n /** Whether to wrap content with fd-scrollbar directive. */\n disableScrollbar = signal(false);\n\n /**\n * The placement of the popover.\n * It can be one of:\n * top, top-start, top-end, bottom, bottom-start, bottom-end,\n * right, right-start, right-end, left, left-start, left-end.\n */\n placement = signal<Placement | null>(null);\n\n /**\n * The trigger events that will open/close the popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp) or a config object for the corresponding event.\n * Using the config object allows to specify whether an event should apply both for open and close actions or only some of them.\n *\n * If array of triggers consists only of one event, it will be treated at a toggle event (open and close)\n * If array of trigger consists of more than one event, each odd event will be treated as an open event for the popover,\n * and each even event will be treated as closing event for the popover.\n *\n * Consider the following value for `triggers`:\n * ```\n * [\n * 'click' // basically it's an alias for \"{ trigger: 'click', openAction: true, closeAction: true }\"\n * ]\n * ```\n * ```\n * [\n * 'mouseenter' // Shortcut for \"{ trigger: 'mouseenter', openAction: true, closeAction: false }\", and will only open the popover.\n * 'mouseleave' // Shortcut for \"{ trigger: 'mouseleave', openAction: false, closeAction: true }\" and will only close the popover.\n * ]\n * ```\n * ```\n * [\n * { trigger: 'mouseenter', openAction: true, closeAction: true }, // \"mouseenter\" will toggle the popover.\n * { trigger: 'mouseleave', openAction: true, closeAction: true } // \"mouseleave\" will toggle the popover.\n * ]\n * ```\n *\n * @default ['click']\n */\n triggers = signal<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover is open. Can be used through two-way binding. */\n isOpen = signal(false);\n\n /** Whether the popover should close when a click is made outside its boundaries. */\n closeOnOutsideClick = signal(true);\n\n /** Wether to apply a background overlay */\n applyOverlay = signal(false);\n\n /** Whether the popover should be focusTrapped. */\n focusTrapped = signal(false);\n\n /**\n * Whether the popover should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n focusAutoCapture = signal(false);\n\n /**\n * Whether to move the focus after popover is closed to the last focused element before popover was opened.\n */\n restoreFocusOnClose = signal(true);\n\n /**\n * Scroll strategy, there are 4 accepted\n * - CloseScrollStrategy\n * - NoopScrollStrategy\n * - BlockScrollStrategy\n * - RepositionScrollStrategy ( default )\n */\n scrollStrategy = signal<ScrollStrategy | null>(null);\n\n /**\n * List of positions options for overlay defined by angular CDK.\n * Positions will be taken in order, same like on array. If first position provided doesn't fit to window,\n * another will be used\n * More information can be found in https://material.angular.io/cdk/overlay/api\n */\n cdkPositions = signal<ConnectedPosition[] | null>(null);\n\n /**\n * Preset options for the popover body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n fillControlMode = signal<Nullable<PopoverFillMode>>(null);\n\n /** The element to which the overlay is attached. By default it is body */\n appendTo = signal<Nullable<ElementRef | Element>>(null);\n\n /** Placement of the popover element. */\n placementContainer = signal<Nullable<ElementRef | Element>>(null);\n\n /** Whether position shouldn't change, when popover approach the corner of page */\n fixedPosition = signal(false);\n\n /** Whether the popover body is resizable. */\n resizable = signal(false);\n\n /** @hidden Aria role for the popover body. */\n protected _bodyRole: string | null = 'dialog';\n\n /** @hidden ID for the popover body. */\n protected readonly _bodyId = signal<string | null>(null);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBody]',\n standalone: true\n})\nexport class PopoverBodyDirective {\n /**\n * The template to be used as the popover's body.\n **/\n readonly templateRef = inject<TemplateRef<void>>(TemplateRef);\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBodyFooter], [fd-popover-body-footer]',\n standalone: true\n})\nexport class PopoverBodyFooterDirective {\n /** @hidden */\n @HostBinding('class.fd-popover__body-footer')\n fdPopoverBodyFooterClass = true;\n}\n","import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[fdPopoverBodyHeader], [fd-popover-body-header]',\n standalone: true\n})\nexport class PopoverBodyHeaderDirective {\n /** @hidden */\n @HostBinding('class.fd-popover__body-header')\n fdPopoverBodyHeaderClass = true;\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n Renderer2,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { A11yModule, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { CdkScrollable, ConnectionPositionPair } from '@angular/cdk/overlay';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KeyUtil, Nullable, ResizeDirective, ResizeHandleDirective } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\n\n/**\n * A component used to enforce a certain layout for the popover.\n * ```html\n * <fd-popover>\n * <fd-popover-control>Control Element</fd-popover-control>\n * <fd-popover-body>Popover Body</fd-popover-body>\n * </fd-popover>\n * ```\n */\n@Component({\n selector: 'fd-popover-body',\n templateUrl: './popover-body.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './popover-body.component.scss',\n providers: [contentDensityObserverProviders({ alwaysAddModifiers: true })],\n imports: [A11yModule, CdkScrollable, ScrollbarDirective, NgTemplateOutlet, ResizeHandleDirective, ResizeDirective],\n standalone: true,\n host: {\n '(keydown)': 'bodyKeyupHandler($event)'\n }\n})\nexport class PopoverBodyComponent {\n /** Minimum width of the popover body element. */\n readonly minWidth = input<Nullable<string>>();\n\n /** Maximum width of the popover body element. */\n readonly maxWidth = input<Nullable<string>>();\n\n /** Minimum height of the popover body element. */\n readonly minHeight = input<Nullable<string>>();\n\n /** Maximum height of the popover body element. */\n readonly maxHeight = input<Nullable<string>>();\n\n /** aria-modal value for the popover body. Set to false for non-modal dialogs (e.g. product switch). */\n readonly ariaModal = input<boolean | null>(null);\n\n /** @hidden */\n readonly _cdkTrapFocus = viewChild(CdkTrapFocus);\n\n /** @hidden */\n readonly _scrollbar = viewChild(ScrollbarDirective);\n\n /** @hidden Whether to wrap content with fd-scrollbar directive. */\n readonly _disableScrollbar = signal(false);\n\n /** @hidden Whether the popover should have an arrow. */\n readonly _noArrow = signal(true);\n\n /** @hidden Whether the popover container needs an extra class for styling. */\n readonly _additionalBodyClass = signal<Nullable<string>>(null);\n\n /** @hidden Whether the popover should be focusTrapped. */\n readonly _focusTrapped = signal(false);\n\n /**\n * @hidden\n * Whether the popover should automatically move focus into the trapped region upon\n * initialization and return focus to the previous activeElement upon destruction.\n */\n readonly _focusAutoCapture = signal(false);\n\n /** @hidden Property bind to popover's body. */\n readonly _popoverBodyWidth = signal<number | undefined>(undefined);\n\n /** @hidden Property bind to popover's body. */\n readonly _popoverBodyMinWidth = signal<number | undefined>(undefined);\n\n /** @hidden Property bind to popover's body. */\n readonly _maxWidth = signal<Nullable<number>>(null);\n\n /** @hidden Property bind to popover's body. */\n readonly _closeOnEscapeKey = signal(false);\n\n /** @hidden Aria role for the popover body. */\n readonly _bodyRole = signal<Nullable<string>>('dialog');\n\n /** @hidden Aria label for the popover body. */\n readonly _bodyAriaLabel = signal<Nullable<string>>(null);\n\n /** @hidden ID of the element that labels the popover body. */\n readonly _bodyAriaLabelledBy = signal<string | null>(null);\n\n /** @hidden ID for the popover body. */\n readonly _bodyId = signal<string | null>(null);\n\n /** @hidden aria-modal value for the popover body. */\n readonly _bodyAriaModal = linkedSignal(() => this.ariaModal());\n\n /** @hidden Classes added to arrow element. */\n readonly _arrowClasses = signal('');\n\n /** @hidden text rendered inside popover's body. */\n readonly text = signal<Nullable<string>>(null);\n\n /** @hidden template rendered inside popover's body. */\n readonly _templateToDisplay = signal<TemplateRef<any> | undefined>(undefined);\n\n /** @hidden Whether the popover body is resizable. */\n readonly _resizable = signal(false);\n\n /** @hidden */\n readonly _resizeHandleLocation = signal<'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'>('bottom-right');\n\n /** Event emitted when popover body requests to be closed (e.g., Escape key press) */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onClose = output<void>();\n\n /** @hidden */\n readonly _elementRef = inject(ElementRef);\n\n /** @hidden */\n readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private _bodyComponentClasses: string | null = null;\n\n /** @hidden */\n constructor() {\n afterNextRender(() => {\n const scrollbar = this._scrollbar();\n if (scrollbar) {\n scrollbar._inPopover = true;\n }\n });\n }\n\n /** Handler escape keydown */\n bodyKeyupHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, ESCAPE) && this._closeOnEscapeKey()) {\n // In case if popover belongs to the element inside dialog\n event.stopPropagation();\n this.onClose.emit();\n }\n }\n\n /** @hidden */\n _setBodyComponentClasses(classes: string | null): void {\n this._bodyComponentClasses?.split(' ').forEach((klass) => {\n this._renderer.removeClass(this._elementRef.nativeElement, klass);\n });\n this._bodyComponentClasses = classes;\n if (!this._bodyComponentClasses) {\n return;\n }\n this._bodyComponentClasses.split(' ').forEach((klass) => {\n this._renderer.addClass(this._elementRef.nativeElement, klass);\n });\n }\n\n /** @hidden */\n _setArrowStyles(position: ConnectionPositionPair, rtl: 'rtl' | 'ltr'): void {\n this._resizeHandleLocation.set(\n `${position.overlayY === 'top' ? 'bottom' : 'top'}-${position.overlayX === 'start' ? 'right' : 'left'}`\n );\n if (this._noArrow()) {\n this._arrowClasses.set('');\n return;\n }\n\n let arrowClasses: string[] = [];\n\n if (\n position.overlayY !== position.originY &&\n position.originY !== 'center' &&\n position.overlayY !== 'center' &&\n position.overlayX === position.originX\n ) {\n arrowClasses = [\n `fd-popover__body--${position.overlayY === 'top' ? 'below' : 'above'}`,\n `fd-popover__body--${position.overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--arrow-${position.overlayY}`,\n `fd-popover__body--arrow-x-${position.originX}`\n ];\n } else if (\n position.overlayX !== position.originX &&\n position.overlayX !== 'center' &&\n position.originX !== 'center' &&\n position.originY === position.overlayY\n ) {\n let overlayX = position.overlayX;\n if (rtl === 'rtl') {\n overlayX = position.overlayX === 'end' ? 'start' : 'end';\n }\n arrowClasses = [\n `fd-popover__body--${overlayX === 'start' ? 'after' : 'before'}`,\n `fd-popover__body--${overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--${position.overlayY === 'center' ? 'middle' : position.overlayY}`,\n `fd-popover__body--arrow-${overlayX === 'start' ? 'left' : 'right'}`,\n `fd-popover__body--arrow-y-${position.originY} `\n ];\n } else {\n arrowClasses = ['fd-popover__body--no-arrow'];\n }\n\n this._arrowClasses.set(arrowClasses.join(' '));\n }\n\n /** @hidden */\n _focusFirstTabbableElement(forced = false): void {\n if (forced || this._focusAutoCapture()) {\n requestAnimationFrame(() => {\n this._cdkTrapFocus()?.focusTrap.focusFirstTabbableElement();\n });\n }\n }\n}\n","<div\n class=\"fd-popover__body fd-popover__body--static\"\n [class.fd-popover__body--no-arrow]=\"_noArrow()\"\n [class.fd-popover__body--resizable]=\"_resizable()\"\n [class]=\"_arrowClasses() + ' ' + (_additionalBodyClass() || '')\"\n [cdkTrapFocus]=\"_focusTrapped()\"\n [style.min-width]=\"_popoverBodyMinWidth() ? null : minWidth()\"\n [style.max-width]=\"_maxWidth() ? null : maxWidth()\"\n [style.min-height]=\"minHeight()\"\n [style.max-height]=\"maxHeight()\"\n [style.max-width.px]=\"_maxWidth()\"\n [style.min-width.px]=\"_popoverBodyMinWidth()\"\n [style.width.px]=\"_popoverBodyWidth()\"\n [attr.role]=\"_bodyRole()\"\n [attr.aria-label]=\"_bodyAriaLabel()\"\n [attr.aria-labelledby]=\"_bodyAriaLabelledBy()\"\n [attr.aria-modal]=\"_bodyAriaModal()\"\n [attr.id]=\"_bodyId()\"\n fdkResize\n [fdkResizeDisabled]=\"!_resizable()\"\n [fdkResizeClass]=\"'fd-popover__body--disable-transitions'\"\n [fdkResizeHandleLocation]=\"_resizeHandleLocation()\"\n>\n @if (!_disableScrollbar()) {\n <div fd-scrollbar class=\"fd-popover__wrapper\">\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"renderer\"></ng-template>\n }\n @if (_resizable()) {\n <span fdkResizeHandle class=\"fd-popover__resize-handle\" role=\"presentation\" aria-hidden=\"true\"></span>\n }\n</div>\n<ng-template #renderer>\n <ng-content select=\"[fd-popover-body-header]\"></ng-content>\n <ng-content select=\"[fd-popover-body-subheader]\"></ng-content>\n <ng-content></ng-content>\n {{ text() }}\n @if (_templateToDisplay()) {\n <ng-template [ngTemplateOutlet]=\"_templateToDisplay()!\"></ng-template>\n }\n <ng-content select=\"[fd-popover-body-footer]\"></ng-content>\n</ng-template>\n","import { DestroyRef, Directive, ElementRef, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { resizeObservable } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\n\n@Directive({\n selector: '[fdPopoverContainer]',\n standalone: true\n})\nexport class PopoverContainerDirective implements OnInit {\n /** Subject which emits when popover position refresh is required. */\n refreshPosition$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor(private _elmRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n ngOnInit(): void {\n resizeObservable(this._elmRef.nativeElement)\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n this.refreshPosition$.next();\n });\n }\n}\n","import { AfterContentChecked, ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation } from '@angular/core';\n\n/**\n * A component used to enforce a certain layout for the popover.\n * ```html\n * <fd-popover>\n * <fd-popover-control>Control Element</fd-popover-control>\n * <fd-popover-body>Popover Body</fd-popover-body>\n * </fd-popover>\n * ```\n */\n@Component({\n selector: 'fd-popover-control, [fdPopoverControl]',\n template: `<ng-content></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PopoverControlComponent implements AfterContentChecked {\n /** @hidden */\n _tabbable = false;\n\n /** @hidden */\n constructor(public elRef: ElementRef) {}\n\n /** @hidden */\n ngAfterContentChecked(): void {\n if (this._tabbable) {\n this.makeTabbable();\n }\n }\n\n /** @hidden */\n makeTabbable(): void {\n const elemChild = this.elRef.nativeElement.children[0];\n if (elemChild && elemChild.getAttribute('tabindex') !== '-1') {\n elemChild.tabIndex = '0';\n }\n }\n}\n","import { InjectionToken, ModelSignal } from '@angular/core';\nimport { DialogConfig } from '@fundamental-ngx/core/dialog';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\nimport { Subject } from 'rxjs';\n\nexport const POPOVER_COMPONENT = new InjectionToken<PopoverInterface>('PopoverInterface');\n\n/**\n * Popover Interface to have typing and avoid circular dependency between\n * PopoverComponent <==> PopoverMobileComponent\n */\nexport interface PopoverInterface extends MobileMode {\n dialogConfig: DialogConfig;\n isOpen: ModelSignal<boolean>;\n isOpenChange: Subject<boolean>;\n\n close(): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { PopoverChildContent } from '../popover-child-content.interface';\nimport { POPOVER_COMPONENT, PopoverInterface } from '../popover.interface';\n\nlet mobilePopoverUniqueId = 0;\n\n@Component({\n selector: 'fd-popover-mobile',\n templateUrl: './popover-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n TemplateDirective,\n TitleComponent,\n NgTemplateOutlet,\n DialogComponent,\n DialogBodyComponent,\n DialogHeaderComponent,\n DialogFooterComponent,\n DialogCloseButtonComponent\n ]\n})\nexport class PopoverMobileComponent extends MobileModeBase<PopoverInterface> implements OnInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate')\n _dialogTemplate: TemplateRef<any>;\n\n /** @hidden Cannot use _ prefix due to mobile class build constraints. */\n childContent?: PopoverChildContent = undefined;\n\n /** Current popover title */\n title: string;\n /** Dialog body content */\n viewBody: TemplateRef<any> | null;\n\n /** Dialog footer content */\n viewFooter: TemplateRef<any> | null;\n\n /** @hidden */\n readonly id = 'fd-popover-mobile-' + mobilePopoverUniqueId++;\n\n /** @hidden */\n get titleId(): string {\n return this.id + '-title';\n }\n\n /** @hidden */\n constructor() {\n super(inject<PopoverInterface>(POPOVER_COMPONENT), MobileModeControl.POPOVER);\n\n // effect() automatically tracks _component.isOpen signal and cleans up on destroy\n effect(() => {\n if (this._component.isOpen()) {\n this._openDialog();\n } else {\n this.dialogRef?.hide(true);\n }\n });\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.title = this.mobileConfig.title || '';\n this.viewBody = this.childContent?.popoverBodyContentTemplate ?? null;\n this.viewFooter = this.childContent?.popoverFooterContentTemplate ?? null;\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.dialogRef?.close();\n }\n\n /** Closes the dialog and popover. */\n close(): void {\n this.dialogRef.close();\n this._component.close();\n }\n\n /** @hidden Opens the dialog. */\n private _openDialog(): void {\n this.dialogRef = this._dialogService.open(this._dialogTemplate, {\n verticalPadding: true,\n horizontalPadding: true,\n ...this.dialogConfig,\n mobile: true,\n focusTrapped: true,\n escKeyCloseable: false,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n responsivePadding: true,\n ariaLabelledBy: this.titleId\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\" data-mobile-popover>\n <fd-dialog-header>\n <h1 fd-title [id]=\"titleId\">{{ title }}</h1>\n @if (this.mobileConfig.hasCloseButton) {\n <button fd-dialog-close-button [mobile]=\"true\" (click)=\"close()\"></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"viewBody\"></ng-template>\n </fd-dialog-body>\n @if (viewFooter) {\n <fd-dialog-footer>\n <ng-template [ngTemplateOutlet]=\"viewFooter\"></ng-template>\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { PopoverMobileComponent } from './popover-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [DialogModule, ButtonComponent, PopoverMobileComponent],\n exports: [PopoverMobileComponent],\n providers: [DynamicComponentService]\n})\nexport class PopoverMobileModule {}\n","import {\n ConnectedOverlayPositionChange,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategy,\n ViewportRuler\n} from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyRef,\n ElementRef,\n EventEmitter,\n Injectable,\n Injector,\n NgZone,\n Renderer2,\n Signal,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n isSignal,\n signal\n} from '@angular/core';\nimport { Observable, Subject, merge } from 'rxjs';\nimport { distinctUntilChanged, filter, map, startWith, takeUntil } from 'rxjs/operators';\n\nimport { Nullable, RtlService, destroyObservable, isOdd } from '@fundamental-ngx/cdk/utils';\nimport { GetDefaultPosition, Placement, PopoverFillMode, PopoverPosition } from '@fundamental-ngx/core/shared';\n\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { PopoverConfig, TriggerConfig } from '../base/popover-config.interface';\nimport { PopoverBodyComponent } from '../popover-body/popover-body.component';\nimport { PopoverContainerDirective } from '../popover-container/popover-container.directive';\n\nconst MAX_BODY_SIZE = 99999999;\n\ninterface LayoutShiftGeometry {\n originX: number;\n originY: number;\n originWidth: number;\n originHeight: number;\n overlayWidth: number;\n overlayHeight: number;\n viewportTop: number;\n viewportLeft: number;\n viewportWidth: number;\n viewportHeight: number;\n triggerWidth: number | null;\n triggerHeight: number | null;\n}\n\nexport interface PopoverTemplate {\n container: ViewContainerRef;\n popoverBody: PopoverBodyComponent;\n template: TemplateRef<any>;\n}\n\n@Injectable()\nexport class PopoverService {\n /** Whether to close the popover on router navigation start. */\n readonly closeOnNavigation = signal(true);\n\n /** Whether the popover is disabled. */\n readonly disabled = signal(false);\n\n /** Maximum width of popover body in px */\n readonly maxWidth = signal<Nullable<number>>(null);\n\n /** Whether the popover should have an arrow. */\n readonly noArrow = signal(true);\n\n /** Whether the popover container needs an extra class for styling. */\n readonly additionalBodyClass = signal<string | null>(null);\n\n /** Classes that should be applied to fd-popover-body component directly. */\n readonly additionalBodyComponentClasses = signal<string | null>(null);\n\n /** Whether the popover container needs an extra class for styling. */\n readonly additionalTriggerClass = signal<string | null>(null);\n\n /** Whether the popover should close when the escape key is pressed. */\n readonly closeOnEscapeKey = signal(true);\n\n /** Whether to wrap content with fd-scrollbar directive. */\n readonly disableScrollbar = signal(false);\n\n /** The placement of the popover. */\n readonly placement = signal<Placement | null>(null);\n\n /** The trigger events that will open/close the popover. */\n readonly triggers = signal<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover is open. */\n readonly isOpen = signal(false);\n\n /** Whether the popover should close when a click is made outside its boundaries. */\n readonly closeOnOutsideClick = signal(true);\n\n /** Whether to apply a background overlay */\n readonly applyOverlay = signal(false);\n\n /** Whether the popover should be focusTrapped. */\n readonly focusTrapped = signal(false);\n\n /** Whether to automatically move focus into the trapped region. */\n readonly focusAutoCapture = signal(false);\n\n /** Whether to move focus back after popover is closed. */\n readonly restoreFocusOnClose = signal(true);\n\n /** Scroll strategy */\n readonly scrollStrategy = signal<ScrollStrategy | null>(null);\n\n /** List of positions options for overlay. */\n readonly cdkPositions = signal<ConnectedPosition[] | null>(null);\n\n /** Preset options for the popover body width. */\n readonly fillControlMode = signal<Nullable<PopoverFillMode>>(null);\n\n /** The element to which the overlay is attached. */\n readonly appendTo = signal<Nullable<ElementRef | Element>>(null);\n\n /** Placement of the popover element. */\n readonly placementContainer = signal<Nullable<ElementRef | Element>>(null);\n\n /** Whether position shouldn't change when popover approach the corner of page */\n readonly fixedPosition = signal(false);\n\n /** Whether the popover body is resizable. */\n readonly resizable = signal(false);\n\n /** Emits when popover open state changes */\n readonly isOpenChange = new EventEmitter<boolean>();\n\n /** String content displayed inside popover body */\n stringContent: Nullable<string>;\n\n /** Template content displayed inside popover body */\n templateContent: Nullable<TemplateRef<any>>;\n\n /** @hidden */\n _onLoad = new Subject<ElementRef>();\n\n /** @hidden */\n _mobile = false;\n\n /** @hidden Aria role for the popover body. */\n protected _bodyRole: string | null = 'dialog';\n\n /** @hidden Aria label for the popover body. */\n protected _bodyAriaLabel: string | null = null;\n\n /** @hidden ID of the element that labels the popover body. */\n protected _bodyAriaLabelledBy: string | null = null;\n\n /** @hidden aria-modal value for the popover body. */\n protected _bodyAriaModal: boolean | null = null;\n\n /** @hidden ID for the popover body. */\n protected readonly _bodyId = signal<string | null>(null);\n\n /** @hidden */\n private _eventRef: (() => void)[] = [];\n\n /** @hidden */\n private _overlayRef: OverlayRef;\n\n /** @hidden */\n private _refresh$: Observable<boolean | void>;\n\n /** @hidden */\n private _stopCloseListening$ = new Subject<void>();\n\n /** @hidden */\n private readonly _placementRefresh$ = new Subject<void>();\n\n /** @hidden */\n private _popoverBody: PopoverBodyComponent;\n\n /** @hidden */\n private _triggerElement: ElementRef<HTMLElement> | HTMLElement;\n\n /** @hidden */\n private _lastActiveElement: HTMLElement;\n\n /** @hidden */\n private _templateData: Nullable<PopoverTemplate>;\n\n /** @hidden */\n private _placementContainerValue: Nullable<ElementRef | Element>;\n\n /** @hidden */\n private _ignoreTriggers = false;\n\n /** @hidden Timer for delayed hover close, allows mouse to travel from trigger to overlay body. */\n private _hoverCloseTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** @hidden Listeners for mouseenter/mouseleave on the overlay element. */\n private _overlayHoverListeners: (() => void)[] = [];\n\n /** @hidden */\n private _modalBodyClass = 'fd-overlay-active';\n\n /** @hidden */\n private _modalTriggerClass = 'fd-popover__modal';\n\n /** @hidden */\n private _isModal = false;\n\n /** An RxJS Subject that will kill the data stream upon component's destruction (for unsubscribing) */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _popoverContainer = inject(PopoverContainerDirective, { optional: true });\n\n /** @hidden */\n private readonly _overlay = inject(Overlay);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _viewportRuler = inject(ViewportRuler);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden Watches document.body while open for mutations that may affect the overlay's position. */\n private _ancestorMutationObserver: MutationObserver | null = null;\n\n /** @hidden Pending layout measurement frame, cancelled when its open session ends. */\n private _layoutShiftAnimationFrame: number | null = null;\n\n /** @hidden Session identity used to reject callbacks retained after close, deactivate or reopen. */\n private _layoutShiftObserverSession = 0;\n\n /** @hidden Geometry captured after positioning, used to suppress updates for unchanged layout. */\n private _layoutShiftGeometry: LayoutShiftGeometry | null = null;\n\n /** @hidden */\n private readonly _ngZone = inject(NgZone);\n\n /** @hidden */\n private get _triggerHtmlElement(): HTMLElement {\n return this._triggerElement instanceof ElementRef ? this._triggerElement.nativeElement : this._triggerElement;\n }\n\n /** @hidden Flag to prevent infinite loop when programmatically opening/closing */\n private _programmaticChange = false;\n\n /** @hidden Computed signal for body-related config to track dependencies */\n private readonly _bodyConfig = computed(() => ({\n additionalBodyClass: this.additionalBodyClass(),\n focusTrapped: this.focusTrapped(),\n maxWidth: this.maxWidth(),\n noArrow: this.noArrow(),\n focusAutoCapture: this.focusAutoCapture(),\n disableScrollbar: this.disableScrollbar(),\n closeOnEscapeKey: this.closeOnEscapeKey(),\n additionalBodyComponentClasses: this.additionalBodyComponentClasses(),\n resizable: this.resizable()\n }));\n\n /** @hidden */\n constructor() {\n /** Merge observables - close or destroy */\n this._refresh$ = merge(this.isOpenChange, destroyObservable(this._destroyRef));\n\n // Emit isOpenChange when signal changes\n effect(() => {\n const openState = this.isOpen();\n this.isOpenChange.emit(openState);\n });\n\n // Automatically open/close popover when isOpen signal changes\n // This enables programmatic control via signal updates\n let previousOpen = this.isOpen();\n effect(() => {\n const currentOpen = this.isOpen();\n // Only act if state actually changed, we're initialized, and it's not from open/close methods\n if (currentOpen !== previousOpen && this._triggerElement && !this._programmaticChange) {\n if (currentOpen) {\n this.open();\n } else if (this._overlayRef?.hasAttached()) {\n // close(false) may already have disposed the overlay before this effect runs.\n this.close();\n }\n }\n previousOpen = currentOpen;\n });\n\n // Watch for changes to signals that affect the popover body and sync them\n // This ensures that when inputs change after the popover is open, the body component is updated\n effect(() => {\n // Read computed to track all body-related signal dependencies\n void this._bodyConfig();\n\n // Only sync if popover body exists and is open\n if (this._getPopoverBody() && this.isOpen()) {\n this._passVariablesToBody();\n }\n });\n\n this._destroyRef.onDestroy(() => {\n this._clearHoverCloseTimer();\n this._removeOverlayHoverListeners();\n this._removeTriggerListeners();\n this._stopLayoutShiftObserver();\n if (this._overlayRef) {\n this._overlayRef.detach();\n this._overlayRef.dispose();\n }\n\n if (this._isModal) {\n this._removeOverlay(this._modalBodyClass, this._modalTriggerClass);\n }\n });\n }\n\n /**\n * Method initialising the popover service - should be called, after view is initialised, params:\n * - triggerElement - element, which is equivalent for cdkOverlayOrigin, or fd-popover-control,\n * by default to this element the popover body will lbe appended and events on this element will trigger\n * popover's toggle\n * - config - configuration object using PopoverConfig interface\n * - templateData - in case of having already PopoverBodyComponent, there is way to pass container, template containing\n * PopoverComponent and PopoverComponent instance\n */\n initialise(\n triggerElement: ElementRef | HTMLElement,\n config?: PopoverConfig,\n templateData?: PopoverTemplate | TemplateRef<void> | null\n ): void {\n if (templateData instanceof TemplateRef) {\n this.templateContent = templateData;\n } else {\n this._templateData = templateData;\n }\n this._triggerElement = triggerElement;\n\n if (config) {\n this.refreshConfiguration(config);\n }\n\n this._refreshTriggerListeners();\n\n if (this.isOpen()) {\n this.open();\n }\n\n // If wrapper container height changes outside, refresh popover position.\n this._popoverContainer?.refreshPosition$.pipe(takeUntil(this._refresh$)).subscribe(() => {\n this.refreshPosition();\n });\n }\n\n /** Closes the popover. */\n close(focusActiveElement = true): void {\n // Disposal emits a detachment; don't close again and override the focus decision.\n this._stopCloseListening$.next();\n this._stopLayoutShiftObserver();\n\n this._clearHoverCloseTimer();\n this._removeOverlayHoverListeners();\n\n if (this._overlayRef) {\n this._overlayRef.dispose();\n }\n\n this._safeSetIsOpen(false);\n\n this.checkModalBackground();\n this._focusLastActiveElementBeforeOpen(focusActiveElement);\n }\n\n /** Opens the popover. */\n open(): void {\n if ((!this._overlayRef || !this._overlayRef.hasAttached()) && !this.disabled() && this._triggerElement) {\n const position = this._getPositionStrategy();\n this._overlayRef = this._overlay.create(this._getOverlayConfig(position));\n\n if (this._placementContainerValue) {\n const placementElement =\n this._placementContainerValue instanceof ElementRef\n ? this._placementContainerValue.nativeElement\n : this._placementContainerValue;\n\n placementElement.append(this._overlayRef.hostElement);\n }\n\n if (this._templateData) {\n this._attachTemplate();\n } else {\n this._attachBodyComponent();\n }\n\n this._stopCloseListening$.next();\n this._listenForPositionChange(position.positionChanges);\n\n if (this.fillControlMode()) {\n this._listenOnResize();\n }\n\n this._safeSetIsOpen(true);\n\n this._setupOverlayHoverListeners();\n this._listenOnClose();\n this._focusFirstTabbableElement();\n this._onLoad.next(this._getPopoverBody()._elementRef);\n\n // Update position - this will trigger the positionChanges observable\n this._overlayRef.updatePosition();\n this._startLayoutShiftObserver();\n }\n }\n\n /** method updating template or text inside rendered PopoverBody */\n updateContent(\n stringContent: Nullable<string> | Nullable<TemplateRef<any>>,\n templateContent: Nullable<TemplateRef<any>>\n ): void {\n templateContent = !templateContent\n ? typeof stringContent === 'string'\n ? null\n : stringContent\n : templateContent;\n stringContent = typeof stringContent === 'string' ? stringContent : null;\n this.stringContent = stringContent;\n this.templateContent = templateContent;\n if (this._getPopoverBody()) {\n this._passVariablesToBody();\n }\n }\n\n /** Changes background theming when modal */\n /** @hidden */\n checkModalBackground(): void {\n const isClosingConditions = (!this.closeOnOutsideClick() || !this.closeOnEscapeKey()) && this.applyOverlay();\n if (isClosingConditions && this.isOpen()) {\n this._addModalOverlay(this._modalBodyClass, this._modalTriggerClass);\n } else if (isClosingConditions && !this.isOpen()) {\n this._removeOverlay(this._modalBodyClass, this._modalTriggerClass);\n }\n }\n\n /** Toggles the popover open state */\n toggle(openAction = true, closeAction = true, focusActiveElement?: boolean): void {\n if (this.isOpen()) {\n closeAction && this.close(focusActiveElement ?? true);\n } else {\n openAction && this.open();\n this.checkModalBackground();\n }\n }\n\n /**\n * Method called to change position of popover,\n * recommended to be used only when popover is opened, otherwise change position or cdkPlacement\n */\n applyNewPosition(positions: ConnectedPosition[]): void {\n const refPosition = this._getPositionStrategy(positions);\n this._listenForPositionChange(refPosition.positionChanges);\n this._overlayRef.updatePositionStrategy(refPosition);\n this._resetLayoutShiftGeometry();\n }\n\n /** Method called to refresh position of opened popover */\n refreshPosition(): void {\n this._overlayRef?.updatePosition();\n this._resetLayoutShiftGeometry();\n }\n\n /** Temporary sets the ignoring of the event triggers. */\n setIgnoreTriggers(ignore: boolean): void {\n this._ignoreTriggers = ignore;\n }\n\n /**\n * Method that sets configuration/options, it detects if there is something changed and overwrites them\n */\n refreshConfiguration(config: PopoverConfig): void {\n // Helper function to unwrap signal values\n const unwrap = <T>(val: T | Signal<T>): T => (isSignal(val) ? val() : val) as T;\n\n this._placementContainerValue = unwrap(config.placementContainer) ?? this._placementContainerValue;\n\n // Update signals if config values are provided\n if (config.closeOnNavigation !== undefined) {\n this.closeOnNavigation.set(unwrap(config.closeOnNavigation));\n }\n if (config.disabled !== undefined) {\n this.disabled.set(unwrap(config.disabled));\n }\n if (config.maxWidth !== undefined) {\n this.maxWidth.set(unwrap(config.maxWidth));\n }\n if (config.noArrow !== undefined) {\n this.noArrow.set(unwrap(config.noArrow));\n }\n if (config.additionalBodyClass !== undefined) {\n this.additionalBodyClass.set(unwrap(config.additionalBodyClass));\n }\n if (config.additionalBodyComponentClasses !== undefined) {\n this.additionalBodyComponentClasses.set(unwrap(config.additionalBodyComponentClasses));\n }\n if (config.additionalTriggerClass !== undefined) {\n this.additionalTriggerClass.set(unwrap(config.additionalTriggerClass));\n }\n if (config.closeOnEscapeKey !== undefined) {\n this.closeOnEscapeKey.set(unwrap(config.closeOnEscapeKey));\n }\n if (config.disableScrollbar !== undefined) {\n this.disableScrollbar.set(unwrap(config.disableScrollbar));\n }\n if (config.placement !== undefined) {\n this.placement.set(unwrap(config.placement));\n }\n if (config.closeOnOutsideClick !== undefined) {\n this.closeOnOutsideClick.set(unwrap(config.closeOnOutsideClick));\n }\n if (config.applyOverlay !== undefined) {\n this.applyOverlay.set(unwrap(config.applyOverlay));\n }\n if (config.focusTrapped !== undefined) {\n this.focusTrapped.set(unwrap(config.focusTrapped));\n }\n if (config.focusAutoCapture !== undefined) {\n this.focusAutoCapture.set(unwrap(config.focusAutoCapture));\n }\n if (config.restoreFocusOnClose !== undefined) {\n this.restoreFocusOnClose.set(unwrap(config.restoreFocusOnClose));\n }\n if (config.scrollStrategy !== undefined) {\n this.scrollStrategy.set(unwrap(config.scrollStrategy));\n }\n if (config.cdkPositions !== undefined) {\n this.cdkPositions.set(unwrap(config.cdkPositions));\n }\n if (config.fillControlMode !== undefined) {\n this.fillControlMode.set(unwrap(config.fillControlMode));\n }\n if (config.appendTo !== undefined) {\n this.appendTo.set(unwrap(config.appendTo));\n }\n if (config.placementContainer !== undefined) {\n this.placementContainer.set(unwrap(config.placementContainer));\n }\n if (config.fixedPosition !== undefined) {\n this.fixedPosition.set(unwrap(config.fixedPosition));\n }\n if (config.resizable !== undefined) {\n this.resizable.set(unwrap(config.resizable));\n }\n if (config.bodyRole !== undefined) {\n this._bodyRole = unwrap(config.bodyRole);\n this._getPopoverBody()?._bodyRole.set(this._bodyRole);\n }\n if (config.bodyAriaLabel !== undefined) {\n this._bodyAriaLabel = unwrap(config.bodyAriaLabel);\n this._getPopoverBody()?._bodyAriaLabel.set(this._bodyAriaLabel);\n }\n if (config.bodyAriaLabelledBy !== undefined) {\n this._bodyAriaLabelledBy = unwrap(config.bodyAriaLabelledBy);\n this._getPopoverBody()?._bodyAriaLabelledBy.set(this._bodyAriaLabelledBy);\n }\n if (config.bodyAriaModal !== undefined) {\n this._bodyAriaModal = unwrap(config.bodyAriaModal);\n this._getPopoverBody()?._bodyAriaModal.set(this._bodyAriaModal);\n }\n if (config.bodyId !== undefined) {\n this._bodyId.set(unwrap(config.bodyId));\n this._getPopoverBody()?._bodyId.set(this._bodyId());\n }\n\n if (config.isOpen !== undefined) {\n const isOpenValue = unwrap(config.isOpen);\n if (isOpenValue) {\n this.open();\n } else {\n this.close();\n }\n }\n\n if (config.triggers !== undefined) {\n this.triggers.set(unwrap(config.triggers));\n this._refreshTriggerListeners();\n }\n }\n\n /**\n * This method is intended to be called in order\n * to postpone the main functionality but be able\n * to enable it back in the future by initialise()\n */\n deactivate(): void {\n this._stopLayoutShiftObserver();\n\n // Close the popover if it's open\n if (this.isOpen()) {\n this.close();\n }\n this._removeTriggerListeners();\n }\n\n /** Refresh listeners on trigger element events */\n _refreshTriggerListeners(): void {\n if (!this._triggerElement) {\n return;\n }\n\n this._removeTriggerListeners();\n if (this.triggers()?.length) {\n const hasHoverTrigger = this._hasHoverTriggers();\n\n this._normalizeTriggers().forEach((trigger) => {\n this._eventRef.push(\n this._renderer.listen(this._triggerHtmlElement, trigger.trigger, (event: Event) => {\n if (this._ignoreTriggers || this.disabled()) {\n return;\n }\n\n const closeAction = !!trigger.closeAction;\n const openAction = !!trigger.openAction;\n\n // For hover triggers, use delayed close to prevent flickering\n // when the mouse travels between the trigger and the popover body.\n if (hasHoverTrigger && trigger.trigger === 'mouseenter' && openAction) {\n this._clearHoverCloseTimer();\n if (!this.isOpen()) {\n this.toggle(openAction, closeAction);\n }\n } else if (hasHoverTrigger && trigger.trigger === 'mouseleave' && closeAction) {\n this._scheduleHoverClose();\n } else {\n // When closing due to focusout, don't restore focus — the browser\n // is already transferring focus to the next element.\n const isFocusOut = trigger.trigger === 'focusout';\n this.toggle(openAction, closeAction, isFocusOut ? false : undefined);\n }\n\n if (trigger.stopPropagation) {\n event.stopImmediatePropagation();\n }\n })\n );\n });\n }\n }\n\n /**\n * Updates trigger element and refreshes the listeners.\n * @param trigger Trigger element ref.\n */\n updateTriggerElement(trigger: ElementRef | HTMLElement): void {\n this._triggerElement = trigger;\n this._refreshTriggerListeners();\n }\n\n /**\n * @hidden\n * Safely sets isOpen signal, deferring if called during Angular's render cycle.\n * This prevents NG0600 errors when focus events fire during template evaluation.\n */\n private _safeSetIsOpen(value: boolean): void {\n this._programmaticChange = true;\n try {\n this.isOpen.set(value);\n this._programmaticChange = false;\n } catch (e: unknown) {\n this._programmaticChange = false;\n // NG0600: Writing to signals during render - defer to next macrotask\n if (e instanceof Error && e.message?.includes('NG0600')) {\n setTimeout(() => {\n this._programmaticChange = true;\n this.isOpen.set(value);\n this._programmaticChange = false;\n });\n } else {\n throw e;\n }\n }\n }\n\n /** @hidden Whether the current triggers include mouseenter or mouseleave. */\n private _hasHoverTriggers(): boolean {\n return this.triggers().some((t) => {\n const name = typeof t === 'string' ? t : t.trigger;\n return name === 'mouseenter' || name === 'mouseleave';\n });\n }\n\n /** @hidden Clears any pending delayed hover close. */\n private _clearHoverCloseTimer(): void {\n if (this._hoverCloseTimer !== null) {\n clearTimeout(this._hoverCloseTimer);\n this._hoverCloseTimer = null;\n }\n }\n\n /** @hidden Schedules a delayed close to allow mouse to travel from trigger to overlay body. */\n private _scheduleHoverClose(): void {\n this._clearHoverCloseTimer();\n this._hoverCloseTimer = setTimeout(() => {\n this._hoverCloseTimer = null;\n this.close();\n }, 50);\n }\n\n /** @hidden Adds mouseenter/mouseleave listeners on the overlay element when hover triggers are active. */\n private _setupOverlayHoverListeners(): void {\n this._removeOverlayHoverListeners();\n\n if (!this._hasHoverTriggers() || !this._overlayRef) {\n return;\n }\n\n const overlayElement = this._overlayRef.overlayElement;\n\n this._overlayHoverListeners.push(\n this._renderer.listen(overlayElement, 'mouseenter', () => {\n this._clearHoverCloseTimer();\n })\n );\n\n this._overlayHoverListeners.push(\n this._renderer.listen(overlayElement, 'mouseleave', () => {\n this._scheduleHoverClose();\n })\n );\n }\n\n /** @hidden Removes overlay hover listeners. */\n private _removeOverlayHoverListeners(): void {\n this._overlayHoverListeners.forEach((fn) => fn());\n this._overlayHoverListeners = [];\n }\n\n /** @hidden */\n private _normalizeTriggers(): TriggerConfig[] {\n return this.triggers().map((trigger, index) => {\n if (typeof trigger === 'object' && trigger.trigger) {\n return trigger;\n }\n\n const oddNumber = isOdd(index + 1);\n\n return {\n trigger,\n openAction: this.triggers().length === 1 || oddNumber,\n closeAction: this.triggers().length === 1 || !oddNumber,\n stopPropagation: false\n } as TriggerConfig;\n });\n }\n\n /** @hidden */\n private _getOverlayConfig(position: FlexibleConnectedPositionStrategy): OverlayConfig {\n const direction = this._getDirection();\n\n return new OverlayConfig({\n direction,\n disposeOnNavigation: this.closeOnNavigation(),\n positionStrategy: position,\n scrollStrategy: this.scrollStrategy() || this._overlay.scrollStrategies.reposition()\n });\n }\n\n /** @hidden */\n private _listenOnResize(): void {\n this._viewportRuler\n .change(15)\n .pipe(takeUntil(this._refresh$), startWith(1))\n .subscribe(() => this._applyWidthOverlay());\n }\n\n /** @hidden */\n private _getDirection(): 'rtl' | 'ltr' {\n return this._rtlService?.rtl() ? 'rtl' : 'ltr';\n }\n\n /** @hidden */\n private _getPositionStrategy(forcedPositions?: ConnectedPosition[]): FlexibleConnectedPositionStrategy {\n let resultPosition = forcedPositions ? forcedPositions : this._getPositions();\n\n if (!this.fixedPosition()) {\n resultPosition = resultPosition.concat(GetDefaultPosition(resultPosition));\n }\n\n return this._overlay\n .position()\n .flexibleConnectedTo(this.appendTo() || this._triggerElement)\n .withPositions(resultPosition)\n .withPush(false)\n .withGrowAfterOpen(true);\n }\n\n /** remove listeners from trigger element events */\n private _removeTriggerListeners(): void {\n this._eventRef.forEach((event) => event());\n this._eventRef = [];\n }\n\n private _addModalOverlay(bodyClass: string, triggerClass: string): void {\n this._renderer.addClass(document.body, bodyClass);\n this._renderer.addClass((this._triggerElement as ElementRef).nativeElement, triggerClass);\n this._isModal = true;\n }\n\n private _removeOverlay(bodyClass: string, triggerClass: string): void {\n this._renderer.removeClass(document.body, bodyClass);\n this._renderer.removeClass((this._triggerElement as ElementRef).nativeElement, triggerClass);\n this._isModal = false;\n }\n\n /** Attach template containing popover body to overlay */\n private _attachTemplate(): void {\n if (this._templateData) {\n this._overlayRef.attach(new TemplatePortal(this._templateData.template, this._templateData.container));\n }\n // Pass variables AFTER attaching to ensure CDK directives are properly initialized\n this._passVariablesToBody();\n }\n\n /** Create PopoverBodyComponent and attach it into overlay */\n private _attachBodyComponent(): void {\n const overlay = this._overlayRef.attach(new ComponentPortal(PopoverBodyComponent, null, this._injector));\n this._popoverBody = overlay.instance;\n this._passVariablesToBody();\n }\n\n /** @hidden */\n private _listenForPositionChange(positionChange: Observable<ConnectedOverlayPositionChange>): void {\n this._placementRefresh$.next();\n positionChange\n .pipe(\n filter(() => !this.noArrow() && !!this._getPopoverBody()),\n distinctUntilChanged((previous, current) => previous.connectionPair === current.connectionPair),\n takeUntil(this._placementRefresh$),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe((event) => this._getPopoverBody()._setArrowStyles(event.connectionPair, this._getDirection()));\n }\n\n /** Subscribe to close events from CDK Overlay, to throw proper events, change values */\n private _listenOnClose(): void {\n const body = this._getPopoverBody();\n const closeEvents$ = merge(\n merge(this._overlayRef.detachments(), outputToObservable(body.onClose), this._escapeKeydowns$()).pipe(\n map(() => true)\n ),\n this._outsideClicks$().pipe(\n map(() => {\n const activeElement = document.activeElement;\n // A blank-space click can focus a scrollable ancestor instead of another control.\n return (\n !activeElement ||\n activeElement.contains(this._triggerHtmlElement) ||\n this._overlayRef.overlayElement.contains(activeElement)\n );\n })\n )\n );\n // Only use _stopCloseListening$ to stop listening, not _refresh$\n // _refresh$ can emit due to signal effects and would complete the subscription prematurely\n closeEvents$\n .pipe(takeUntil(this._stopCloseListening$), takeUntilDestroyed(this._destroyRef))\n .subscribe((restoreFocus) => this.close(restoreFocus));\n }\n\n /** Listener for click events */\n private _outsideClicks$(): Observable<MouseEvent> {\n return merge(this._overlayRef.backdropClick(), this._overlayRef._outsidePointerEvents).pipe(\n filter((event) => this._shouldClose(event))\n );\n }\n\n /** Listener for Escape keydown via CDK overlay's document-level keyboard dispatcher. */\n private _escapeKeydowns$(): Observable<KeyboardEvent> {\n return this._overlayRef\n .keydownEvents()\n .pipe(filter((event) => this.closeOnEscapeKey() && event.key === 'Escape'));\n }\n\n /** @hidden */\n private _shouldClose(event: MouseEvent): boolean {\n return (\n this.isOpen() &&\n this.closeOnOutsideClick() &&\n !this._triggerContainsTarget(event) &&\n !this._targetIsPopoverMobileDialog(event)\n );\n }\n\n /** @hidden */\n private _targetIsPopoverMobileDialog(event: MouseEvent): boolean {\n if (this._mobile) {\n let el = (event.target as HTMLElement).parentElement;\n while (el) {\n if (el.hasAttribute('data-mobile-popover')) {\n return true;\n } else {\n el = el.parentElement;\n }\n }\n }\n\n return false;\n }\n\n /** @hidden */\n private _getEventTarget(event: Event): EventTarget | null {\n return event.composedPath ? event.composedPath()[0] : event.target;\n }\n\n /** @hidden */\n private _triggerContainsTarget(event: Event): boolean {\n return this._triggerHtmlElement.contains(this._getEventTarget(event) as HTMLElement);\n }\n\n /** @hidden */\n private _getPositions(): ConnectedPosition[] {\n const positions = this.cdkPositions();\n if (positions) {\n return positions;\n }\n\n const currentPlacement = this.placement();\n if (currentPlacement) {\n return [PopoverPosition.getCdkPlacement(currentPlacement, this._getDirection())];\n }\n\n return [];\n }\n\n /** @hidden */\n private _applyWidthOverlay(): void {\n const maxWidthLimit = this.maxWidth() ?? MAX_BODY_SIZE;\n const width = Math.min(this._getTriggerWidth(), maxWidthLimit);\n const fillMode = this.fillControlMode();\n if (fillMode === 'at-least') {\n this._getPopoverBody()._popoverBodyMinWidth.set(width);\n } else if (fillMode === 'equal') {\n this._getPopoverBody()._popoverBodyWidth.set(width);\n }\n }\n\n /** @hidden */\n private _passVariablesToBody(): void {\n const body = this._getPopoverBody();\n body.text.set(this.stringContent);\n body._additionalBodyClass.set(this.additionalBodyClass());\n body._focusTrapped.set(this.focusTrapped());\n body._maxWidth.set(this.maxWidth());\n body._noArrow.set(this.noArrow());\n body._focusAutoCapture.set(this.focusAutoCapture());\n body._disableScrollbar.set(this.disableScrollbar());\n if (this.templateContent) {\n body._templateToDisplay.set(this.templateContent);\n }\n body._closeOnEscapeKey.set(this.closeOnEscapeKey());\n body._bodyRole.set(this._bodyRole);\n body._bodyAriaLabel.set(this._bodyAriaLabel);\n body._bodyAriaLabelledBy.set(this._bodyAriaLabelledBy);\n body._bodyId.set(this._bodyId());\n body._resizable.set(this.resizable());\n body._setBodyComponentClasses(this.additionalBodyComponentClasses());\n }\n\n /** @hidden */\n private _getTriggerWidth(): number {\n return this._triggerHtmlElement.offsetWidth;\n }\n\n /** @hidden */\n private _getPopoverBody(): PopoverBodyComponent {\n return this._templateData?.popoverBody || this._popoverBody;\n }\n\n /** @hidden */\n private _focusFirstTabbableElement(focusLastElement = true): void {\n if (focusLastElement && this.focusAutoCapture()) {\n this._lastActiveElement = <HTMLElement>document.activeElement;\n this._getPopoverBody()?._focusFirstTabbableElement();\n }\n }\n\n /** @hidden */\n private _focusLastActiveElementBeforeOpen(focusLastElement = true): void {\n if (focusLastElement && this.restoreFocusOnClose() && this.focusAutoCapture() && this._lastActiveElement) {\n this._lastActiveElement.focus();\n }\n }\n\n /**\n * @hidden\n * Starts a MutationObserver on document.body for DOM changes that may invalidate the\n * overlay position — including mutations in elements outside the trigger's\n * nearest scroll container (e.g. a collapsible header above a table pushing the trigger down).\n *\n * Observed mutation types:\n * - `childList`: elements added/removed from the DOM (Angular `@if`, ngIf, toast dismissed).\n * - `attributes` with `attributeFilter: ['style', 'class']`: visibility toggled via CSS.\n *\n * Starts after attachment and initial positioning to capture the initial geometry baseline.\n * The observer and its requestAnimationFrame pipeline are registered outside Angular so\n * their work does not schedule zone-driven change detection. Own-host mutations are ignored;\n * other mutations are coalesced into at most one geometry measurement per frame.\n *\n * Calls updatePosition() only when the captured origin, overlay size, viewport or fill-mode\n * trigger size changes, then captures the resulting geometry as the next baseline. This\n * lets unchanged-layout mutation feedback settle while preserving later genuine shifts.\n * There is no fixed update limit: a layout that keeps changing remains eligible for one\n * reposition per frame. Session and overlay identity checks reject stale callbacks.\n */\n private _startLayoutShiftObserver(): void {\n const overlayRef = this._overlayRef;\n if (!this._triggerElement || !overlayRef?.hasAttached()) {\n return;\n }\n\n this._stopLayoutShiftObserver();\n const session = ++this._layoutShiftObserverSession;\n this._layoutShiftGeometry = this._getLayoutShiftGeometry(overlayRef);\n\n this._ngZone.runOutsideAngular(() => {\n const scheduleUpdate = (records: MutationRecord[]): void => {\n // Skip self-caused mutations: updatePosition() writes `style` on hostElement\n // (the CDK position bounding-box) and its descendants. Using hostElement as the\n // scope boundary covers both the default case (.cdk-overlay-container) and the\n // placementContainer case where the host is moved outside that container.\n if (records.every((record) => overlayRef.hostElement.contains(record.target as Node))) {\n return;\n }\n if (this._layoutShiftAnimationFrame !== null) {\n return;\n }\n this._layoutShiftAnimationFrame = window.requestAnimationFrame(() => {\n if (session !== this._layoutShiftObserverSession || this._overlayRef !== overlayRef) {\n return;\n }\n\n this._layoutShiftAnimationFrame = null;\n if (!overlayRef.hasAttached()) {\n return;\n }\n\n const geometry = this._getLayoutShiftGeometry(overlayRef);\n if (this._sameLayoutShiftGeometry(this._layoutShiftGeometry, geometry)) {\n return;\n }\n\n overlayRef.updatePosition();\n this._layoutShiftGeometry = this._getLayoutShiftGeometry(overlayRef);\n });\n };\n\n this._ancestorMutationObserver = new MutationObserver(scheduleUpdate);\n this._ancestorMutationObserver.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['style', 'class']\n });\n });\n }\n\n /**\n * @hidden\n * Ends the current observer session, disconnects observation and cancels its pending frame.\n * Invalidates session identity before clearing geometry so a retained callback cannot\n * reposition a replacement overlay or clear its pending frame.\n */\n private _stopLayoutShiftObserver(): void {\n this._layoutShiftObserverSession++;\n this._ancestorMutationObserver?.disconnect();\n this._ancestorMutationObserver = null;\n if (this._layoutShiftAnimationFrame !== null) {\n window.cancelAnimationFrame(this._layoutShiftAnimationFrame);\n this._layoutShiftAnimationFrame = null;\n }\n this._layoutShiftGeometry = null;\n }\n\n /**\n * @hidden\n * Captures the attached overlay's geometry after refreshPosition() or applyNewPosition().\n * Subsequent mutations are compared against that updated baseline, avoiding a redundant\n * observer-driven reposition for layout already handled by the explicit operation.\n */\n private _resetLayoutShiftGeometry(): void {\n if (this._overlayRef?.hasAttached()) {\n this._layoutShiftGeometry = this._getLayoutShiftGeometry(this._overlayRef);\n }\n }\n\n /**\n * @hidden\n * Captures the effective origin (appendTo or trigger), overlay size and viewport geometry.\n * Includes the trigger's size in fill mode, where it can differ from the positioning origin.\n * Overlay x/y are positioning outputs and are excluded to avoid treating position writes\n * as new layout inputs. The snapshot does not track placement-container geometry.\n */\n private _getLayoutShiftGeometry(overlayRef: OverlayRef): LayoutShiftGeometry {\n const origin = this.appendTo() ?? this._triggerHtmlElement;\n const originElement = origin instanceof ElementRef ? origin.nativeElement : origin;\n const originRect = originElement.getBoundingClientRect();\n const overlayRect = overlayRef.overlayElement.getBoundingClientRect();\n const viewportRect = this._viewportRuler.getViewportRect();\n const triggerRect = this.fillControlMode() ? this._triggerHtmlElement.getBoundingClientRect() : null;\n\n return {\n originX: originRect.x,\n originY: originRect.y,\n originWidth: originRect.width,\n originHeight: originRect.height,\n overlayWidth: overlayRect.width,\n overlayHeight: overlayRect.height,\n viewportTop: viewportRect.top,\n viewportLeft: viewportRect.left,\n viewportWidth: viewportRect.width,\n viewportHeight: viewportRect.height,\n triggerWidth: triggerRect?.width ?? null,\n triggerHeight: triggerRect?.height ?? null\n };\n }\n\n /** @hidden Compares captured geometry; a missing previous snapshot requires positioning. */\n private _sameLayoutShiftGeometry(previous: LayoutShiftGeometry | null, current: LayoutShiftGeometry): boolean {\n return (\n previous?.originX === current.originX &&\n previous.originY === current.originY &&\n previous.originWidth === current.originWidth &&\n previous.originHeight === current.originHeight &&\n previous.overlayWidth === current.overlayWidth &&\n previous.overlayHeight === current.overlayHeight &&\n previous.viewportTop === current.viewportTop &&\n previous.viewportLeft === current.viewportLeft &&\n previous.viewportWidth === current.viewportWidth &&\n previous.viewportHeight === current.viewportHeight &&\n previous.triggerWidth === current.triggerWidth &&\n previous.triggerHeight === current.triggerHeight\n );\n }\n}\n","import { Directive, ElementRef, HostBinding, inject, Injector, Input, OnDestroy } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport { PopoverComponent } from './popover.component';\n\n@Directive({\n selector: '[fdPopoverTrigger], [fd-popover-trigger]',\n standalone: true\n})\nexport class PopoverTriggerDirective implements OnDestroy {\n /** Set reference to Popover Component */\n @Input('fdPopoverTrigger')\n set popover(popover: Nullable<PopoverComponent>) {\n if (popover) {\n popover.trigger.set(this._elementRef);\n this._listenOnExpanded(popover);\n }\n this._setAriaAttributes(popover);\n }\n\n /** @hidden */\n @HostBinding('attr.aria-haspopup')\n ariaHasPopup: Nullable<boolean>;\n\n /** @hidden */\n @HostBinding('attr.aria-controls')\n ariaControls: Nullable<string>;\n\n /** @hidden */\n @HostBinding('attr.aria-expanded')\n ariaExpanded: Nullable<boolean>;\n\n /** @hidden */\n private _isExpandedSubscription: Subscription;\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n constructor(private _elementRef: ElementRef) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this._unsubscribeExpandedListener();\n }\n\n /** @hidden */\n private _listenOnExpanded(popover: PopoverComponent): void {\n this._unsubscribeExpandedListener();\n if (popover) {\n // Convert signal to observable for reactive updates\n const isOpen$ = toObservable(popover.isOpen, { injector: this._injector });\n this._isExpandedSubscription = isOpen$.subscribe((isOpen) => (this.ariaExpanded = isOpen));\n }\n }\n\n /** @hidden */\n private _setAriaAttributes(popover: Nullable<PopoverComponent>): void {\n this.ariaHasPopup = !!popover;\n this.ariaControls = popover ? popover.id() : null;\n }\n\n /** @hidden */\n private _unsubscribeExpandedListener(): void {\n if (this._isExpandedSubscription) {\n this._isExpandedSubscription.unsubscribe();\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const FD_POPOVER_COMPONENT = new InjectionToken('FdPopoverComponent');\n","import {\n AfterContentInit,\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n OnDestroy,\n output,\n Renderer2,\n TemplateRef,\n viewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\n\n/**\n * ARIA role values commonly used for popover bodies. Provides autocomplete for\n * the most frequent cases while allowing any valid ARIA role via the string escape hatch.\n */\nexport type PopoverBodyRole = 'dialog' | 'region' | 'menu' | 'listbox' | 'tooltip' | 'alertdialog';\n\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { Placement, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { PopoverConfig, TriggerConfig } from './base/popover-config.interface';\nimport { PopoverBodyDirective } from './popover-body.directive';\nimport { PopoverBodyComponent } from './popover-body/popover-body.component';\nimport { PopoverControlComponent } from './popover-control/popover-control.component';\nimport { PopoverMobileComponent } from './popover-mobile/popover-mobile.component';\nimport { PopoverService, PopoverTemplate } from './popover-service/popover.service';\nimport { POPOVER_COMPONENT } from './popover.interface';\nimport { FD_POPOVER_COMPONENT } from './tokens';\n\nexport const SELECT_CLASS_NAMES = {\n selectControl: 'fd-select__control'\n};\n\nlet cdkPopoverUniqueId = 0;\n\n/**\n * The popover is a wrapping component that accepts a *control* as well as a *body*.\n * The control is what will trigger the opening of the actual popover, which is called the body.\n * By default, popovers are triggered by click. This can be customized through the *triggers* input.\n */\n@Component({\n selector: 'fd-popover',\n templateUrl: './popover.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n providers: [\n PopoverService,\n {\n provide: FD_POPOVER_COMPONENT,\n useExisting: PopoverComponent\n },\n contentDensityObserverProviders()\n ],\n host: {\n class: 'fd-popover-custom',\n '[class.fd-popover-custom--mobile]': 'mobile()',\n '[class.fd-popover-custom--disabled]': 'disabled()',\n '[attr.id]': 'id()',\n '(keydown.escape)': '_onEscapeKey($event)',\n '(keydown.space)': '_onKeyDown($event)',\n '(keydown.enter)': '_onKeyDown($event)'\n },\n imports: [CdkOverlayOrigin, A11yModule]\n})\nexport class PopoverComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n /**\n * Configuration object for popover settings.\n * When provided, these settings will be merged with individual input properties.\n * Individual inputs take precedence over config object values.\n */\n readonly config = input<PopoverConfig>({});\n\n /** Tooltip for popover */\n readonly title = input<string>('');\n\n /** Reference to popover trigger element */\n readonly trigger = model<ElementRef | HTMLElement | null>(null);\n\n /** Id of the popover. If none is provided, one will be generated. */\n readonly id = input<string>(`fd-popover-${cdkPopoverUniqueId++}`);\n\n /** Whether the popover component should be displayed in mobile mode. */\n readonly mobile = input(false, { transform: booleanAttribute });\n\n /** Config for the popover in mobile mode */\n readonly mobileConfig = input<MobileModeConfig>({ hasCloseButton: true });\n\n /**\n * Whether the popover should prevent page scrolling when space key is pressed.\n **/\n readonly preventSpaceKeyScroll = input(true, { transform: booleanAttribute });\n\n /** Popover placement */\n readonly placement = input<Placement>('bottom-start');\n\n /** Maximum width of popover body in px, prevents from overextending body by `fillControlMode` */\n readonly maxWidth = input<number | null>(null);\n\n /**\n * Preset options for the popover body width.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control.\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * Leave blank for no effect.\n */\n readonly fillControlMode = input<PopoverFillMode | null>(null);\n\n /** Whether clicking outside popover should close it */\n readonly closeOnOutsideClick = input(true, { transform: booleanAttribute });\n\n /** Whether escape key should close the popover */\n readonly closeOnEscapeKey = input(true, { transform: booleanAttribute });\n\n /** Whether the popover is disabled */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Popover trigger events configuration */\n readonly triggers = input<(string | TriggerConfig)[]>(['click']);\n\n /** Whether the popover should trap focus */\n readonly focusTrapped = input(true, { transform: booleanAttribute });\n\n /** Whether focus should be automatically captured when popover opens */\n readonly focusAutoCapture = input(true, { transform: booleanAttribute });\n\n /**\n * Whether to move the focus after popover is closed to the last focused element before popover was opened.\n */\n readonly restoreFocusOnClose = input(true, { transform: booleanAttribute });\n\n /** Whether the arrow should be hidden */\n readonly noArrow = input(true, { transform: booleanAttribute });\n\n /** Whether scrollbar should be disabled */\n readonly disableScrollbar = input(false, { transform: booleanAttribute });\n\n /** The element to which the overlay is attached. By default it is body */\n readonly appendTo = input<ElementRef | Element | null>(null);\n\n /** Placement of the popover element */\n readonly placementContainer = input<ElementRef | Element | null>(null);\n\n /** Scroll strategy for the overlay */\n readonly scrollStrategy = input<any>(null);\n\n /** List of position options for CDK overlay */\n readonly cdkPositions = input<ConnectedPosition[] | null>(null);\n\n /** Whether to apply a background overlay */\n readonly applyOverlay = input(false, { transform: booleanAttribute });\n\n /** Additional CSS class for the popover body container */\n readonly additionalBodyClass = input<string | null>(null);\n\n /** Additional CSS class for the popover trigger element */\n readonly additionalTriggerClass = input<string | null>(null);\n\n /** Whether to close the popover on router navigation start */\n readonly closeOnNavigation = input(true, { transform: booleanAttribute });\n\n /** Whether position shouldn't change when popover approaches the corner of page */\n readonly fixedPosition = input(false, { transform: booleanAttribute });\n\n /** Whether the popover body is resizable */\n readonly resizable = input(false, { transform: booleanAttribute });\n\n /** ARIA label for the popover body */\n readonly bodyAriaLabel = input<string | null>(null);\n\n /**\n * ARIA role for the popover body. Default: 'dialog' (back-compat).\n *\n * When 'dialog', WCAG requires an accessible name — provide one via\n * [bodyAriaLabel] or [bodyAriaLabelledBy]. Without a name, axe-core\n * raises aria-dialog-name violations.\n *\n * Set to null when the popover is a non-modal disclosure widget and\n * the trigger's aria-haspopup already carries the relationship (no role\n * attribute is rendered). Other valid values: 'region', 'menu', 'listbox',\n * 'tooltip', 'alertdialog' — match the role to the popover's actual semantics.\n * Any valid ARIA role is accepted; the type provides autocomplete for common cases.\n *\n * @remarks When set via this input (including when unbound — defaults to 'dialog'),\n * the PopoverConfig object's `bodyRole` field is ignored. Config-only usage\n * is not supported for `bodyRole` because the input has a concrete default.\n * To override, bind the input explicitly: `[bodyRole]=\"'region'\"` or `[bodyRole]=\"null\"`.\n *\n * See https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/ for guidance.\n */\n readonly bodyRole = input<PopoverBodyRole | (string & {}) | null>('dialog');\n\n /**\n * ID of the element that labels the popover body. Alternative to\n * [bodyAriaLabel] when the label already exists in the DOM (e.g. the\n * trigger's text). Sets aria-labelledby on the popover body.\n */\n readonly bodyAriaLabelledBy = input<string | null>(null);\n\n /** Two-way binding for popover open state */\n readonly isOpen = model(false);\n\n /** Event emitted when the state of the isOpen property changes - for backwards compatibility with programmatic subscribers */\n readonly isOpenChange = new Subject<boolean>();\n\n /** Event emitted right before the popover is being opened. */\n readonly beforeOpen = output<void>();\n\n /** @hidden */\n readonly templateRef = viewChild('templateRef', { read: TemplateRef<any> });\n\n /** @hidden */\n readonly container = viewChild('container', { read: ViewContainerRef });\n\n /** @hidden */\n readonly triggerOrigin = viewChild(CdkOverlayOrigin);\n\n /** @hidden */\n readonly popoverBody = contentChild(PopoverBodyComponent);\n\n /** @hidden */\n readonly popoverBodyDirective = contentChild(PopoverBodyDirective);\n\n /** @hidden */\n readonly popoverControl = contentChild(PopoverControlComponent);\n\n /** @hidden - template for Dialog body content */\n readonly popoverBodyContentTemplate = contentChild<TemplateRef<any>>('popoverBodyContent');\n\n /** @hidden - template for Dialog footer content */\n readonly popoverFooterContentTemplate = contentChild<TemplateRef<any>>('popoverFooterContent');\n\n /** @hidden */\n get _triggerElement(): HTMLElement | null {\n const trigger = this.trigger();\n if (!trigger) {\n return null;\n }\n return trigger instanceof ElementRef ? trigger.nativeElement : trigger;\n }\n\n /** @hidden */\n private readonly _popoverService = inject(PopoverService);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private readonly _viewContainerRef = inject(ViewContainerRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private readonly _dynamicComponentService = inject(DynamicComponentService, { optional: true });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private _clickEventListener: (() => void) | null = null;\n\n /** @hidden */\n private _mobileModeComponentRef: ComponentRef<PopoverMobileComponent> | null = null;\n\n /** @hidden Flag to prevent circular sync between component and service */\n private _syncingIsOpen = false;\n\n /** @hidden Computed signal that merges config with individual inputs */\n private readonly _effectiveConfig = computed(() => {\n const cfg = this.config();\n return {\n placement: this.placement() ?? cfg.placement ?? 'bottom-start',\n maxWidth: this.maxWidth() ?? cfg.maxWidth ?? null,\n fillControlMode: this.fillControlMode() ?? cfg.fillControlMode ?? null,\n closeOnOutsideClick: this.closeOnOutsideClick() ?? cfg.closeOnOutsideClick ?? true,\n closeOnEscapeKey: this.closeOnEscapeKey() ?? cfg.closeOnEscapeKey ?? true,\n disabled: this.disabled() ?? cfg.disabled ?? false,\n triggers: this.triggers() ?? cfg.triggers ?? ['click'],\n focusTrapped: this.focusTrapped() ?? cfg.focusTrapped ?? true,\n focusAutoCapture: this.focusAutoCapture() ?? cfg.focusAutoCapture ?? true,\n restoreFocusOnClose: this.restoreFocusOnClose() ?? cfg.restoreFocusOnClose ?? true,\n noArrow: this.noArrow() ?? cfg.noArrow ?? true,\n disableScrollbar: this.disableScrollbar() ?? cfg.disableScrollbar ?? false,\n appendTo: this.appendTo() ?? cfg.appendTo ?? null,\n placementContainer: this.placementContainer() ?? cfg.placementContainer ?? null,\n scrollStrategy: this.scrollStrategy() ?? cfg.scrollStrategy ?? null,\n cdkPositions: this.cdkPositions() ?? cfg.cdkPositions ?? null,\n applyOverlay: this.applyOverlay() ?? cfg.applyOverlay ?? false,\n additionalBodyClass: this.additionalBodyClass() ?? cfg.additionalBodyClass ?? null,\n additionalTriggerClass: this.additionalTriggerClass() ?? cfg.additionalTriggerClass ?? null,\n closeOnNavigation: this.closeOnNavigation() ?? cfg.closeOnNavigation ?? true,\n fixedPosition: this.fixedPosition() ?? cfg.fixedPosition ?? false,\n resizable: this.resizable() ?? cfg.resizable ?? false,\n bodyAriaLabel: this.bodyAriaLabel() ?? cfg.bodyAriaLabel ?? null,\n bodyRole: this.bodyRole(),\n bodyAriaLabelledBy: this.bodyAriaLabelledBy() ?? cfg.bodyAriaLabelledBy ?? null\n };\n });\n\n /** @hidden */\n constructor() {\n // Sync component → service and emit events\n let previousIsOpen = false;\n effect(() => {\n const currentIsOpen = this.isOpen();\n\n // Emit beforeOpen when transitioning from closed to open\n if (currentIsOpen && !previousIsOpen) {\n this.beforeOpen.emit();\n }\n\n // Emit isOpenChange when state changes\n if (currentIsOpen !== previousIsOpen) {\n this.isOpenChange.next(currentIsOpen);\n }\n\n // Sync to service only if not already syncing and not in mobile mode (prevents loop).\n // In mobile mode, the dialog handles open/close — the popover service should not be involved.\n if (!this._syncingIsOpen && !this.mobile()) {\n this._syncingIsOpen = true;\n this._popoverService.isOpen.set(currentIsOpen);\n this._syncingIsOpen = false;\n }\n previousIsOpen = currentIsOpen;\n });\n\n // Subscribe to service changes for bidirectional sync using afterNextRender\n // to ensure service is fully initialized\n afterNextRender(\n () => {\n // Service will emit when it closes/opens programmatically (escape key, close button, etc.)\n this._popoverService.isOpenChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((serviceIsOpen) => {\n // In mobile mode, the dialog handles open/close — ignore service changes.\n if (this.mobile()) {\n return;\n }\n // Only update if different and not already syncing (prevents loop)\n if (!this._syncingIsOpen && this.isOpen() !== serviceIsOpen) {\n this._syncingIsOpen = true;\n this.isOpen.set(serviceIsOpen);\n this._syncingIsOpen = false;\n }\n });\n },\n { injector: this._injector }\n );\n\n // Watch effective config changes and sync to service\n // Using computed signal eliminates the need to read all signals individually\n effect(() => {\n const effectiveConfig = this._effectiveConfig();\n const triggerValue = this.trigger();\n\n // Always sync these to service (for both trigger directive and control usage)\n this._popoverService.disabled.set(effectiveConfig.disabled);\n this._popoverService.refreshConfiguration({\n bodyAriaLabel: effectiveConfig.bodyAriaLabel,\n bodyRole: effectiveConfig.bodyRole,\n bodyAriaLabelledBy: effectiveConfig.bodyAriaLabelledBy\n });\n\n // In mobile mode, the dialog handles open/close — the popover service should not be involved.\n const triggerElement = triggerValue ?? this.triggerOrigin()?.elementRef.nativeElement;\n if (triggerElement && !this.mobile()) {\n this._syncToService(effectiveConfig, triggerElement);\n }\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setupView();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n const control = this.popoverControl();\n if (control && this.triggers().includes('click')) {\n control._tabbable = true;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._destroyMobileComponent();\n this._destroyEventListeners();\n }\n\n /** Toggles menu open/close state */\n toggle(): void {\n if (this.isOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Opens the popover. */\n open(): void {\n // In mobile mode, just update the signal — the mobile component's effect handles the dialog.\n if (this.mobile()) {\n this.isOpen.set(true);\n } else {\n this._popoverService.open();\n }\n }\n\n /** Closes the popover. */\n close(focusActiveElement = true): void {\n // In mobile mode, just update the signal — the mobile component's effect handles the dialog.\n if (this.mobile()) {\n this.isOpen.set(false);\n } else {\n this._popoverService.close(focusActiveElement);\n }\n }\n\n /** Temporary sets the ignoring of the event triggers. */\n setIgnoreTriggers(ignore: boolean): void {\n this._popoverService.setIgnoreTriggers(ignore);\n }\n\n /**\n * Method called to change position of popover,\n * recommended to be used only when popover is opened, otherwise change position or cdkPlacement\n */\n applyNewPosition(positions: ConnectedPosition[]): void {\n this._popoverService.applyNewPosition(positions);\n }\n\n /** Method called to refresh position of opened popover */\n refreshPosition(): void {\n this._popoverService.refreshPosition();\n }\n\n /** Handler for alt + arrow down keydown */\n triggerKeyDownHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, DOWN_ARROW) && event.altKey && !this.disabled()) {\n this.open();\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /** Handler escape keydown */\n protected _onEscapeKey(event: Event): void {\n if (this.closeOnEscapeKey() && this.isOpen()) {\n // In case if popover belongs to the element inside dialog\n event.preventDefault();\n event.stopImmediatePropagation();\n this.popoverBody()?.onClose.emit();\n }\n }\n\n /** @hidden */\n protected _onKeyDown(event: Event): void {\n if (!this.preventSpaceKeyScroll()) {\n return;\n }\n const activeElement = document.activeElement;\n if (\n // popoverControl will be undefined when popover is used from \"fdPopoverTrigger\"\n this.popoverControl()?.elRef.nativeElement.children[0] === activeElement &&\n activeElement?.tagName !== 'INPUT' &&\n activeElement?.tagName !== 'TEXTAREA' &&\n !activeElement?.classList.contains(SELECT_CLASS_NAMES.selectControl)\n ) {\n // prevent page scrolling on Space keydown\n event.preventDefault();\n this.toggle();\n }\n }\n\n /** @hidden - Sync all input signals to the service */\n private _syncToService(\n effectiveConfig: ReturnType<typeof this._effectiveConfig>,\n triggerValue: ElementRef | HTMLElement\n ): void {\n this._popoverService.placement.set(effectiveConfig.placement);\n this._popoverService.maxWidth.set(effectiveConfig.maxWidth);\n this._popoverService.fillControlMode.set(effectiveConfig.fillControlMode);\n this._popoverService.closeOnOutsideClick.set(effectiveConfig.closeOnOutsideClick);\n this._popoverService.closeOnEscapeKey.set(effectiveConfig.closeOnEscapeKey);\n this._popoverService.disabled.set(effectiveConfig.disabled);\n this._popoverService.triggers.set(effectiveConfig.triggers);\n this._popoverService.focusTrapped.set(effectiveConfig.focusTrapped);\n this._popoverService.focusAutoCapture.set(effectiveConfig.focusAutoCapture);\n this._popoverService.restoreFocusOnClose.set(effectiveConfig.restoreFocusOnClose);\n this._popoverService.noArrow.set(effectiveConfig.noArrow);\n this._popoverService.disableScrollbar.set(effectiveConfig.disableScrollbar);\n this._popoverService.appendTo.set(effectiveConfig.appendTo);\n this._popoverService.placementContainer.set(effectiveConfig.placementContainer);\n this._popoverService.scrollStrategy.set(effectiveConfig.scrollStrategy);\n this._popoverService.cdkPositions.set(effectiveConfig.cdkPositions);\n this._popoverService.applyOverlay.set(effectiveConfig.applyOverlay);\n this._popoverService.additionalBodyClass.set(effectiveConfig.additionalBodyClass);\n this._popoverService.additionalTriggerClass.set(effectiveConfig.additionalTriggerClass);\n this._popoverService.closeOnNavigation.set(effectiveConfig.closeOnNavigation);\n this._popoverService.fixedPosition.set(effectiveConfig.fixedPosition);\n this._popoverService.resizable.set(effectiveConfig.resizable);\n this._popoverService.updateTriggerElement(triggerValue);\n }\n\n /** @hidden Select and instantiate popover view mode */\n private _setupView(): void {\n if (!this.mobile()) {\n this._popoverService._mobile = false;\n if (!this.popoverBody()) {\n this._popoverService.templateContent = this.templateRef() || null;\n }\n const triggerOriginRef = this.triggerOrigin();\n const triggerElement = this._triggerElement || (triggerOriginRef ? triggerOriginRef.elementRef : null);\n if (triggerElement) {\n this._popoverService.initialise(\n triggerElement,\n this._effectiveConfig() as PopoverConfig,\n this._getPopoverBodyContent()\n );\n }\n } else {\n this._setupMobileMode();\n }\n }\n\n /**\n * Depending on a used popover body type, returns a popover body content\n **/\n private _getPopoverBodyContent(): PopoverTemplate | TemplateRef<void> | null {\n const body = this.popoverBody();\n const templateRef = this.templateRef();\n const container = this.container();\n\n if (body && templateRef && container) {\n return {\n template: templateRef,\n container,\n popoverBody: body\n };\n }\n const bodyDirective = this.popoverBodyDirective();\n if (bodyDirective) {\n return bodyDirective.templateRef;\n }\n return null;\n }\n\n /** @hidden Open Popover in mobile mode */\n private async _setupMobileMode(): Promise<void> {\n if (!this._dynamicComponentService) {\n return;\n }\n\n const injector = Injector.create({\n providers: [{ provide: POPOVER_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._popoverService._mobile = true;\n\n this._mobileModeComponentRef = this._dynamicComponentService.createDynamicComponent(\n {\n popoverBodyContentTemplate: this.popoverBodyContentTemplate(),\n popoverFooterContentTemplate: this.popoverFooterContentTemplate()\n },\n PopoverMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n\n this._listenOnTriggerRefClicks();\n }\n\n /** @hidden - Listen on popover trigger ref clicks */\n private _listenOnTriggerRefClicks(): void {\n this._destroyEventListeners();\n\n const triggerElement = this.trigger();\n if (triggerElement && this.mobile()) {\n this._clickEventListener = this._renderer.listen(this._triggerElement, 'click', () => {\n if (!this.disabled()) {\n this.toggle();\n }\n });\n }\n }\n\n /**\n * @hidden\n * This is going to be removed in feature, on dialog and dynamic service component refactor\n */\n private _destroyEventListeners(): void {\n if (this._clickEventListener) {\n this._clickEventListener();\n this._clickEventListener = null;\n }\n }\n\n /** @hidden */\n private _destroyMobileComponent(): void {\n if (this._mobileModeComponentRef) {\n this._mobileModeComponentRef.destroy();\n }\n }\n}\n","@if (!trigger()) {\n <div\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass()\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n >\n <ng-content select=\"fd-popover-control, [fdPopoverControl]\"></ng-content>\n </div>\n}\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n <ng-content></ng-content>\n</ng-template>\n<ng-container #container></ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { PopoverBodyFooterDirective } from './popover-body/popover-body-directives/popover-body-footer.directive';\nimport { PopoverBodyHeaderDirective } from './popover-body/popover-body-directives/popover-body-header.directive';\nimport { PopoverBodyComponent } from './popover-body/popover-body.component';\nimport { PopoverControlComponent } from './popover-control/popover-control.component';\n\nimport { PopoverBodyDirective } from './popover-body.directive';\nimport { PopoverContainerDirective } from './popover-container/popover-container.directive';\nimport { PopoverTriggerDirective } from './popover-trigger.directive';\nimport { PopoverComponent } from './popover.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyHeaderDirective,\n PopoverBodyFooterDirective,\n PopoverComponent,\n PopoverTriggerDirective,\n PopoverContainerDirective,\n PopoverBodyDirective\n ],\n exports: [\n PopoverControlComponent,\n PopoverBodyComponent,\n PopoverBodyHeaderDirective,\n PopoverBodyFooterDirective,\n PopoverComponent,\n PopoverTriggerDirective,\n PopoverContainerDirective,\n PopoverBodyDirective\n ]\n})\nexport class PopoverModule {}\n","import { computed, Signal } from '@angular/core';\nimport { PopoverConfig } from '../base/popover-config.interface';\n\n/**\n * Maps each PopoverConfig property to a signal accessor.\n * Components pass their input signals (or inline lambdas for fixed values).\n * All properties are optional — components only provide what they declare.\n */\nexport type PopoverConfigSignals = {\n [K in keyof PopoverConfig]?: () => PopoverConfig[K];\n};\n\n/**\n * Builds a computed PopoverConfig from individual signal accessors.\n * Reads all provided accessors reactively and assembles a config object.\n *\n * @example\n * ```typescript\n * readonly popoverConfig = buildPopoverConfig({\n * placement: () => this.placement() ?? 'bottom',\n * triggers: this.triggers,\n * disabled: this.disabled,\n * });\n * ```\n */\nexport function buildPopoverConfig(signals: PopoverConfigSignals): Signal<PopoverConfig> {\n return computed(() => {\n const config: PopoverConfig = {};\n for (const key of Object.keys(signals) as (keyof PopoverConfig)[]) {\n const accessor = signals[key];\n if (accessor) {\n (config as any)[key] = accessor();\n }\n }\n return config;\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-ngx/core",
|
|
3
|
-
"version": "0.66.1-rc.
|
|
3
|
+
"version": "0.66.1-rc.2",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"packageGroupName": "@fundamental-ngx/core",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@angular/forms": "^22.0.0",
|
|
38
38
|
"@angular/platform-browser": "^22.0.0",
|
|
39
39
|
"@angular/router": "^22.0.0",
|
|
40
|
-
"@fundamental-ngx/cdk": "0.66.1-rc.
|
|
41
|
-
"@fundamental-ngx/i18n": "0.66.1-rc.
|
|
40
|
+
"@fundamental-ngx/cdk": "0.66.1-rc.2",
|
|
41
|
+
"@fundamental-ngx/i18n": "0.66.1-rc.2",
|
|
42
42
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
43
43
|
"fundamental-styles": "0.42.0",
|
|
44
44
|
"rxjs": "^7.8.0"
|
package/schematics/package.json
CHANGED
|
@@ -800,8 +800,16 @@ declare class PopoverService {
|
|
|
800
800
|
private readonly _viewportRuler;
|
|
801
801
|
/** @hidden */
|
|
802
802
|
private readonly _injector;
|
|
803
|
-
/** @hidden Watches
|
|
803
|
+
/** @hidden Watches document.body while open for mutations that may affect the overlay's position. */
|
|
804
804
|
private _ancestorMutationObserver;
|
|
805
|
+
/** @hidden Pending layout measurement frame, cancelled when its open session ends. */
|
|
806
|
+
private _layoutShiftAnimationFrame;
|
|
807
|
+
/** @hidden Session identity used to reject callbacks retained after close, deactivate or reopen. */
|
|
808
|
+
private _layoutShiftObserverSession;
|
|
809
|
+
/** @hidden Geometry captured after positioning, used to suppress updates for unchanged layout. */
|
|
810
|
+
private _layoutShiftGeometry;
|
|
811
|
+
/** @hidden */
|
|
812
|
+
private readonly _ngZone;
|
|
805
813
|
/** @hidden */
|
|
806
814
|
private get _triggerHtmlElement();
|
|
807
815
|
/** @hidden Flag to prevent infinite loop when programmatically opening/closing */
|
|
@@ -923,18 +931,50 @@ declare class PopoverService {
|
|
|
923
931
|
private _focusLastActiveElementBeforeOpen;
|
|
924
932
|
/**
|
|
925
933
|
* @hidden
|
|
926
|
-
* Starts a MutationObserver on document.body
|
|
927
|
-
*
|
|
934
|
+
* Starts a MutationObserver on document.body for DOM changes that may invalidate the
|
|
935
|
+
* overlay position — including mutations in elements outside the trigger's
|
|
928
936
|
* nearest scroll container (e.g. a collapsible header above a table pushing the trigger down).
|
|
929
937
|
*
|
|
930
938
|
* Observed mutation types:
|
|
931
939
|
* - `childList`: elements added/removed from the DOM (Angular `@if`, ngIf, toast dismissed).
|
|
932
940
|
* - `attributes` with `attributeFilter: ['style', 'class']`: visibility toggled via CSS.
|
|
933
941
|
*
|
|
934
|
-
*
|
|
935
|
-
*
|
|
942
|
+
* Starts after attachment and initial positioning to capture the initial geometry baseline.
|
|
943
|
+
* The observer and its requestAnimationFrame pipeline are registered outside Angular so
|
|
944
|
+
* their work does not schedule zone-driven change detection. Own-host mutations are ignored;
|
|
945
|
+
* other mutations are coalesced into at most one geometry measurement per frame.
|
|
946
|
+
*
|
|
947
|
+
* Calls updatePosition() only when the captured origin, overlay size, viewport or fill-mode
|
|
948
|
+
* trigger size changes, then captures the resulting geometry as the next baseline. This
|
|
949
|
+
* lets unchanged-layout mutation feedback settle while preserving later genuine shifts.
|
|
950
|
+
* There is no fixed update limit: a layout that keeps changing remains eligible for one
|
|
951
|
+
* reposition per frame. Session and overlay identity checks reject stale callbacks.
|
|
936
952
|
*/
|
|
937
953
|
private _startLayoutShiftObserver;
|
|
954
|
+
/**
|
|
955
|
+
* @hidden
|
|
956
|
+
* Ends the current observer session, disconnects observation and cancels its pending frame.
|
|
957
|
+
* Invalidates session identity before clearing geometry so a retained callback cannot
|
|
958
|
+
* reposition a replacement overlay or clear its pending frame.
|
|
959
|
+
*/
|
|
960
|
+
private _stopLayoutShiftObserver;
|
|
961
|
+
/**
|
|
962
|
+
* @hidden
|
|
963
|
+
* Captures the attached overlay's geometry after refreshPosition() or applyNewPosition().
|
|
964
|
+
* Subsequent mutations are compared against that updated baseline, avoiding a redundant
|
|
965
|
+
* observer-driven reposition for layout already handled by the explicit operation.
|
|
966
|
+
*/
|
|
967
|
+
private _resetLayoutShiftGeometry;
|
|
968
|
+
/**
|
|
969
|
+
* @hidden
|
|
970
|
+
* Captures the effective origin (appendTo or trigger), overlay size and viewport geometry.
|
|
971
|
+
* Includes the trigger's size in fill mode, where it can differ from the positioning origin.
|
|
972
|
+
* Overlay x/y are positioning outputs and are excluded to avoid treating position writes
|
|
973
|
+
* as new layout inputs. The snapshot does not track placement-container geometry.
|
|
974
|
+
*/
|
|
975
|
+
private _getLayoutShiftGeometry;
|
|
976
|
+
/** @hidden Compares captured geometry; a missing previous snapshot requires positioning. */
|
|
977
|
+
private _sameLayoutShiftGeometry;
|
|
938
978
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverService, never>;
|
|
939
979
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
|
|
940
980
|
}
|