@fundamental-ngx/core 0.63.0-rc.30 → 0.63.0-rc.31
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 { input, booleanAttribute, Directive, EventEmitter, output, signal, viewChild, inject, ElementRef, Injector, ChangeDetectorRef, computed, afterNextRender, HostListener, Output, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChild,
|
|
2
|
+
import { input, booleanAttribute, Directive, EventEmitter, output, signal, viewChild, inject, ElementRef, Injector, ChangeDetectorRef, DestroyRef, computed, afterNextRender, HostListener, Output, ChangeDetectionStrategy, ViewEncapsulation, Component, contentChild, ContentChildren, contentChildren, Renderer2, effect, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -37,6 +37,8 @@ let uniqueId = 0;
|
|
|
37
37
|
let uniqueTextId = 0;
|
|
38
38
|
let uniqueSubtitleId = 0;
|
|
39
39
|
class UserMenuListItemComponent {
|
|
40
|
+
/** @hidden Event name for child menu item state changes */
|
|
41
|
+
static { this.STATE_CHANGE_EVENT = 'fdMenuItemStateChange'; }
|
|
40
42
|
constructor() {
|
|
41
43
|
/** Event emitter for isOpenChange event that controls the submenu popover body */
|
|
42
44
|
this.isOpenChange = new EventEmitter();
|
|
@@ -88,6 +90,8 @@ class UserMenuListItemComponent {
|
|
|
88
90
|
this._injector = inject(Injector);
|
|
89
91
|
/** @hidden */
|
|
90
92
|
this._changeDetectionRef = inject(ChangeDetectorRef);
|
|
93
|
+
/** @hidden */
|
|
94
|
+
this._destroyRef = inject(DestroyRef);
|
|
91
95
|
/** @hidden RTL service for direction detection */
|
|
92
96
|
this._rtlService = inject(RtlService, {
|
|
93
97
|
optional: true
|
|
@@ -98,8 +102,19 @@ class UserMenuListItemComponent {
|
|
|
98
102
|
this._keyboardTriggered = false;
|
|
99
103
|
/** @hidden Timer for delayed close on mouseleave */
|
|
100
104
|
this._hoverCloseTimer = null;
|
|
105
|
+
/** @hidden Track number of open child submenus */
|
|
106
|
+
this._openChildCount = 0;
|
|
107
|
+
/** @hidden Flag indicating mouse has left the popover and close is pending */
|
|
108
|
+
this._pendingClose = false;
|
|
109
|
+
/** @hidden Cleanup function for child state listener */
|
|
110
|
+
this._childStateListenerCleanup = null;
|
|
101
111
|
/** @hidden Grace period in ms before closing submenu on mouseleave */
|
|
102
112
|
this._hoverCloseDelay = 150;
|
|
113
|
+
this._destroyRef.onDestroy(() => {
|
|
114
|
+
this._childStateListenerCleanup?.();
|
|
115
|
+
this._childStateListenerCleanup = null;
|
|
116
|
+
this._cancelHoverCloseTimer();
|
|
117
|
+
});
|
|
103
118
|
}
|
|
104
119
|
/** @hidden */
|
|
105
120
|
focusHandler() {
|
|
@@ -169,9 +184,26 @@ class UserMenuListItemComponent {
|
|
|
169
184
|
/** @hidden Cancel close when mouse enters the submenu popover body */
|
|
170
185
|
onSubmenuMouseEnter() {
|
|
171
186
|
this._cancelHoverCloseTimer();
|
|
187
|
+
this._pendingClose = false;
|
|
172
188
|
}
|
|
173
189
|
/** @hidden Schedule close when mouse leaves the submenu popover body */
|
|
174
|
-
onSubmenuMouseLeave() {
|
|
190
|
+
onSubmenuMouseLeave(event) {
|
|
191
|
+
if (!this.hasSubmenu() || this.mobile()) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
const relatedTarget = event.relatedTarget;
|
|
195
|
+
// Navigate: popover() -> popoverBody signal -> PopoverBodyComponent -> ElementRef -> nativeElement
|
|
196
|
+
const thisItemsPopoverBody = this.popover()?.popoverBody?.()?._elementRef?.nativeElement;
|
|
197
|
+
// Don't close if mouse is still in this item's popover
|
|
198
|
+
if (thisItemsPopoverBody && relatedTarget && thisItemsPopoverBody.contains(relatedTarget)) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Mark that we want to close, but wait if children are open
|
|
202
|
+
this._pendingClose = true;
|
|
203
|
+
// If any child submenu is open, wait for it to close
|
|
204
|
+
if (this._openChildCount > 0) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
175
207
|
this._scheduleHoverClose();
|
|
176
208
|
}
|
|
177
209
|
/** Handles submenu selection in mobile mode */
|
|
@@ -203,6 +235,19 @@ class UserMenuListItemComponent {
|
|
|
203
235
|
this._keyboardTriggered = false;
|
|
204
236
|
this.isOpen.set(isOpen);
|
|
205
237
|
this.isOpenChange.emit(isOpen);
|
|
238
|
+
// Notify parent item (if any) about child state change
|
|
239
|
+
this._notifyParentOfStateChange(isOpen);
|
|
240
|
+
// Setup listener for child state changes if opening
|
|
241
|
+
if (isOpen) {
|
|
242
|
+
this._setupChildStateListener(popoverBodyEl?._elementRef.nativeElement);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Reset state when closing
|
|
246
|
+
this._openChildCount = 0;
|
|
247
|
+
this._pendingClose = false;
|
|
248
|
+
this._childStateListenerCleanup?.();
|
|
249
|
+
this._childStateListenerCleanup = null;
|
|
250
|
+
}
|
|
206
251
|
afterNextRender(() => {
|
|
207
252
|
this.isOpen() ? linkElement.classList.add('is-selected') : linkElement.classList.remove('is-selected');
|
|
208
253
|
if (keyboardTriggered && firstTabbableElement && this.isOpen()) {
|
|
@@ -214,6 +259,45 @@ class UserMenuListItemComponent {
|
|
|
214
259
|
}
|
|
215
260
|
this._changeDetectionRef.detectChanges();
|
|
216
261
|
}
|
|
262
|
+
/** @hidden Notify parent menu item of this item's state change */
|
|
263
|
+
_notifyParentOfStateChange(isOpen) {
|
|
264
|
+
// Dispatch custom event that bubbles up to parent popover bodies
|
|
265
|
+
const event = new CustomEvent(UserMenuListItemComponent.STATE_CHANGE_EVENT, {
|
|
266
|
+
detail: { isOpen },
|
|
267
|
+
bubbles: true
|
|
268
|
+
});
|
|
269
|
+
this._elementRef.nativeElement.dispatchEvent(event);
|
|
270
|
+
}
|
|
271
|
+
/** @hidden Setup listener for child menu item state changes */
|
|
272
|
+
_setupChildStateListener(popoverBody) {
|
|
273
|
+
if (!popoverBody) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Clean up previous listener if any
|
|
277
|
+
this._childStateListenerCleanup?.();
|
|
278
|
+
// Listen for state changes from child menu items
|
|
279
|
+
const handleChildStateChange = (event) => {
|
|
280
|
+
const customEvent = event;
|
|
281
|
+
// Stop propagation to prevent parent popover bodies from double-counting
|
|
282
|
+
// this event. Each level re-emits its own state change via _notifyParentOfStateChange.
|
|
283
|
+
event.stopPropagation();
|
|
284
|
+
if (customEvent.detail.isOpen) {
|
|
285
|
+
this._openChildCount++;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
this._openChildCount = Math.max(0, this._openChildCount - 1);
|
|
289
|
+
// If no more children are open and we have a pending close, execute it
|
|
290
|
+
if (this._openChildCount === 0 && this._pendingClose) {
|
|
291
|
+
this._scheduleHoverClose();
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
popoverBody.addEventListener(UserMenuListItemComponent.STATE_CHANGE_EVENT, handleChildStateChange);
|
|
296
|
+
// Store cleanup function (destroyed via constructor-registered onDestroy)
|
|
297
|
+
this._childStateListenerCleanup = () => {
|
|
298
|
+
popoverBody.removeEventListener(UserMenuListItemComponent.STATE_CHANGE_EVENT, handleChildStateChange);
|
|
299
|
+
};
|
|
300
|
+
}
|
|
217
301
|
/** @hidden Schedule a delayed close of the submenu popover */
|
|
218
302
|
_scheduleHoverClose() {
|
|
219
303
|
this._cancelHoverCloseTimer();
|
|
@@ -222,6 +306,7 @@ class UserMenuListItemComponent {
|
|
|
222
306
|
if (popoverInstance && this.isOpen()) {
|
|
223
307
|
popoverInstance.close();
|
|
224
308
|
}
|
|
309
|
+
this._pendingClose = false;
|
|
225
310
|
}, this._hoverCloseDelay);
|
|
226
311
|
}
|
|
227
312
|
/** @hidden Cancel any pending hover close timer */
|
|
@@ -232,7 +317,7 @@ class UserMenuListItemComponent {
|
|
|
232
317
|
}
|
|
233
318
|
}
|
|
234
319
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: UserMenuListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: UserMenuListItemComponent, isStandalone: true, selector: "[fd-user-menu-list-item]", inputs: { uniqueId: { classPropertyName: "uniqueId", publicName: "uniqueId", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconAfter: { classPropertyName: "iconAfter", publicName: "iconAfter", isSignal: true, isRequired: false, transformFunction: null }, iconAfterActive: { classPropertyName: "iconAfterActive", publicName: "iconAfterActive", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, textId: { classPropertyName: "textId", publicName: "textId", isSignal: true, isRequired: false, transformFunction: null }, truncateText: { classPropertyName: "truncateText", publicName: "truncateText", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, subtitleId: { classPropertyName: "subtitleId", publicName: "subtitleId", isSignal: true, isRequired: false, transformFunction: null }, truncateSubtitle: { classPropertyName: "truncateSubtitle", publicName: "truncateSubtitle", isSignal: true, isRequired: false, transformFunction: null }, hasSubmenu: { classPropertyName: "hasSubmenu", publicName: "hasSubmenu", isSignal: true, isRequired: false, transformFunction: null }, submenu: { classPropertyName: "submenu", publicName: "submenu", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: "isOpenChange", showSubmenu: "showSubmenu", updateTitle: "updateTitle", keyDown: "keyDown" }, host: { attributes: { "role": "none" }, listeners: { "mouseenter": "onHostMouseEnter()", "mouseleave": "onHostMouseLeave()", "focusin": "focusHandler()", "keydown": "onKeyDown($event)" }, properties: { "attr.id": "uniqueId()", "attr.aria-labelledby": "textId()" }, classAttribute: "fd-menu__item" }, viewQueries: [{ propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave()\"\n >\n <ng-container
|
|
320
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: UserMenuListItemComponent, isStandalone: true, selector: "[fd-user-menu-list-item]", inputs: { uniqueId: { classPropertyName: "uniqueId", publicName: "uniqueId", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconAfter: { classPropertyName: "iconAfter", publicName: "iconAfter", isSignal: true, isRequired: false, transformFunction: null }, iconAfterActive: { classPropertyName: "iconAfterActive", publicName: "iconAfterActive", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, textId: { classPropertyName: "textId", publicName: "textId", isSignal: true, isRequired: false, transformFunction: null }, truncateText: { classPropertyName: "truncateText", publicName: "truncateText", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, subtitleId: { classPropertyName: "subtitleId", publicName: "subtitleId", isSignal: true, isRequired: false, transformFunction: null }, truncateSubtitle: { classPropertyName: "truncateSubtitle", publicName: "truncateSubtitle", isSignal: true, isRequired: false, transformFunction: null }, hasSubmenu: { classPropertyName: "hasSubmenu", publicName: "hasSubmenu", isSignal: true, isRequired: false, transformFunction: null }, submenu: { classPropertyName: "submenu", publicName: "submenu", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpenChange: "isOpenChange", showSubmenu: "showSubmenu", updateTitle: "updateTitle", keyDown: "keyDown" }, host: { attributes: { "role": "none" }, listeners: { "mouseenter": "onHostMouseEnter()", "mouseleave": "onHostMouseLeave()", "focusin": "focusHandler()", "keydown": "onKeyDown($event)" }, properties: { "attr.id": "uniqueId()", "attr.aria-labelledby": "textId()" }, classAttribute: "fd-menu__item" }, viewQueries: [{ propertyName: "popover", first: true, predicate: PopoverComponent, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"submenu()\"></ng-container>\n </fd-popover-body>\n </fd-popover>\n }\n} @else {\n <button role=\"menuitem\" class=\"fd-menu__link\" [class.is-selected]=\"selected()\" [tabIndex]=\"_tabIndex$()\">\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n </button>\n}\n", dependencies: [{ kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"], outputs: ["onClose"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
236
321
|
}
|
|
237
322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: UserMenuListItemComponent, decorators: [{
|
|
238
323
|
type: Component,
|
|
@@ -243,8 +328,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImpor
|
|
|
243
328
|
'[attr.aria-labelledby]': 'textId()',
|
|
244
329
|
'(mouseenter)': 'onHostMouseEnter()',
|
|
245
330
|
'(mouseleave)': 'onHostMouseLeave()'
|
|
246
|
-
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PopoverBodyComponent, PopoverComponent, PopoverControlComponent, CommonModule], template: "@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave()\"\n >\n <ng-container
|
|
247
|
-
}], propDecorators: { isOpenChange: [{
|
|
331
|
+
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [PopoverBodyComponent, PopoverComponent, PopoverControlComponent, CommonModule], template: "@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"submenu()\"></ng-container>\n </fd-popover-body>\n </fd-popover>\n }\n} @else {\n <button role=\"menuitem\" class=\"fd-menu__link\" [class.is-selected]=\"selected()\" [tabIndex]=\"_tabIndex$()\">\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n </button>\n}\n" }]
|
|
332
|
+
}], ctorParameters: () => [], propDecorators: { isOpenChange: [{
|
|
248
333
|
type: Output
|
|
249
334
|
}], showSubmenu: [{
|
|
250
335
|
type: Output
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-user-menu.mjs","sources":["../../../../libs/core/user-menu/directives/user-menu-user-name.directive.ts","../../../../libs/core/user-menu/components/user-menu-list-item.component.ts","../../../../libs/core/user-menu/components/user-menu-list-item.component.html","../../../../libs/core/user-menu/components/user-menu-body.component.ts","../../../../libs/core/user-menu/components/user-menu-body.component.html","../../../../libs/core/user-menu/components/user-menu-content-container.component.ts","../../../../libs/core/user-menu/components/user-menu-control.component.ts","../../../../libs/core/user-menu/components/user-menu-footer.component.ts","../../../../libs/core/user-menu/components/user-menu-header-content-area.component.ts","../../../../libs/core/user-menu/components/user-menu-list.component.ts","../../../../libs/core/user-menu/components/user-menu-sublist.component.ts","../../../../libs/core/user-menu/directives/user-menu-control-element.directive.ts","../../../../libs/core/user-menu/user-menu.component.ts","../../../../libs/core/user-menu/user-menu.component.html","../../../../libs/core/user-menu/directives/user-menu-header-container.directive.ts","../../../../libs/core/user-menu/directives/user-menu-header.directive.ts","../../../../libs/core/user-menu/directives/user-menu-subline.directive.ts","../../../../libs/core/user-menu/user-menu.module.ts","../../../../libs/core/user-menu/fundamental-ngx-core-user-menu.ts"],"sourcesContent":["import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-user-name]',\n host: {\n class: 'fd-user-menu__user-name',\n '[class.fd-user-menu__user-name--truncate]': 'truncate()'\n }\n})\nexport class UserMenuUserNameDirective {\n /** Whether the text should truncate with ellipsis. */\n truncate = input(false, { transform: booleanAttribute });\n}\n","import { ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Injector,\n input,\n Output,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KeyboardSupportItemInterface, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { Subject } from 'rxjs';\n\nlet uniqueId = 0;\nlet uniqueTextId = 0;\nlet uniqueSubtitleId = 0;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-list-item]',\n templateUrl: './user-menu-list-item.component.html',\n host: {\n class: 'fd-menu__item',\n role: 'none',\n '[attr.id]': 'uniqueId()',\n '[attr.aria-labelledby]': 'textId()',\n '(mouseenter)': 'onHostMouseEnter()',\n '(mouseleave)': 'onHostMouseLeave()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [PopoverBodyComponent, PopoverComponent, PopoverControlComponent, CommonModule]\n})\nexport class UserMenuListItemComponent implements KeyboardSupportItemInterface {\n /** Event emitter for isOpenChange event that controls the submenu popover body */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitter for showSubmenu event */\n @Output() showSubmenu: EventEmitter<TemplateRef<any> | null> = new EventEmitter();\n\n /** Event emitter for updateTitle event */\n @Output() updateTitle: EventEmitter<string | null> = new EventEmitter();\n\n /** Event emitter for keyDown event */\n readonly keyDown = output<KeyboardEvent>();\n\n /** Unique id for the menu list item. Default is provided. */\n uniqueId = input(`fd-menu-list-item-${++uniqueId}`);\n\n /** Icon name for the menu list item (optional) */\n icon = input<string>();\n\n /** Icon name for the menu list item (optional) */\n iconAfter = input<string>();\n\n /** Whether the icon after is in active state */\n iconAfterActive = input(false, { transform: booleanAttribute });\n\n /** Required text for the menu list item */\n text = input.required<string>();\n\n /** Unique id for the title. Default is provided. */\n textId = input(`fd-menu-list-item-title-${++uniqueTextId}`);\n\n /** Whether the text should be truncated */\n truncateText = input(false, { transform: booleanAttribute });\n\n /** Subtitle text for the menu list item */\n subtitle = input<string | undefined>();\n\n /** Unique id for the subtitle. Default is provided. */\n subtitleId = input(`fd-menu-list-item-subtitle-${++uniqueSubtitleId}`);\n\n /** Whether the subtitle should be truncated */\n truncateSubtitle = input(false, { transform: booleanAttribute });\n\n /** Whether the item has a submenu */\n hasSubmenu = input(false, { transform: booleanAttribute });\n\n /** Template ref for user menu list item submenu */\n submenu = input<TemplateRef<any> | null>(null);\n\n /** Whether the item is selected */\n selected = input(false, { transform: booleanAttribute });\n\n /** Whether the item's submenu is open */\n isOpen = signal(false);\n\n /** Whether the item is in mobile mode */\n mobile = signal(false);\n\n /** Reference to the popover */\n popover = viewChild(PopoverComponent);\n\n /** @hidden */\n readonly focused = new Subject<UserMenuListItemComponent>();\n\n /** Item's tabindex */\n readonly _tabIndex$ = signal<number | null>(null);\n\n /** @hidden */\n readonly _elementRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private _changeDetectionRef = inject(ChangeDetectorRef);\n\n /** @hidden RTL service for direction detection */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden Computed signal to track RTL state */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden Track whether popover open/close was triggered by keyboard */\n private _keyboardTriggered = false;\n\n /** @hidden Timer for delayed close on mouseleave */\n private _hoverCloseTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** @hidden Grace period in ms before closing submenu on mouseleave */\n private readonly _hoverCloseDelay = 150;\n\n /** @hidden */\n @HostListener('focusin')\n focusHandler(): void {\n this.focused.next(this);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n\n const popoverInstance = this.popover();\n if (!popoverInstance) {\n return;\n }\n\n const isRtl = this._isRtl();\n\n // In RTL mode, LEFT arrow opens submenu and RIGHT arrow closes it\n // In LTR mode, RIGHT arrow opens submenu and LEFT arrow closes it\n const openKey = isRtl ? LEFT_ARROW : RIGHT_ARROW;\n const closeKey = isRtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (KeyUtil.isKeyCode(event, openKey) && !this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n popoverInstance.open();\n } else if (KeyUtil.isKeyCode(event, closeKey) && this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n popoverInstance.close();\n }\n }\n\n /** @hidden Handle keyboard in popover body */\n onPopoverBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = this._isRtl();\n const closeKey = isRtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (KeyUtil.isKeyCode(event, closeKey) && this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n const popoverInstance = this.popover();\n if (popoverInstance) {\n popoverInstance.close();\n }\n }\n\n // Escape is handled by the popover internally, but we need to set the flag\n // so that focus returns to the trigger item\n if (KeyUtil.isKeyCode(event, ESCAPE) && this.isOpen()) {\n this._keyboardTriggered = true;\n }\n }\n\n /** @hidden Open submenu on host mouseenter (non-mobile only) */\n onHostMouseEnter(): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n this._cancelHoverCloseTimer();\n const popoverInstance = this.popover();\n if (popoverInstance && !this.isOpen()) {\n popoverInstance.open();\n }\n }\n\n /** @hidden Schedule submenu close on host mouseleave */\n onHostMouseLeave(): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n this._scheduleHoverClose();\n }\n\n /** @hidden Cancel close when mouse enters the submenu popover body */\n onSubmenuMouseEnter(): void {\n this._cancelHoverCloseTimer();\n }\n\n /** @hidden Schedule close when mouse leaves the submenu popover body */\n onSubmenuMouseLeave(): void {\n this._scheduleHoverClose();\n }\n\n /** Handles submenu selection in mobile mode */\n onShowDetailsView(): void {\n if (this.submenu() && this.mobile()) {\n this.showSubmenu.emit(this.submenu());\n this.updateTitle.emit(this.text());\n }\n }\n\n /** @hidden Support for KeyboardSupportItemInterface */\n click(): void {\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n linkElement.click();\n }\n\n /** @hidden */\n focus(): void {\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n linkElement.focus();\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean, popover: PopoverComponent): void {\n const popoverBodyEl = (popover as any).popoverBody?.();\n const firstTabbableElement: HTMLButtonElement =\n popoverBodyEl?._elementRef.nativeElement.querySelector('.fd-menu__link');\n\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n\n if (this.isOpen() === isOpen) {\n return;\n }\n\n const keyboardTriggered = this._keyboardTriggered;\n this._keyboardTriggered = false;\n\n this.isOpen.set(isOpen);\n\n this.isOpenChange.emit(isOpen);\n\n afterNextRender(\n () => {\n this.isOpen() ? linkElement.classList.add('is-selected') : linkElement.classList.remove('is-selected');\n if (keyboardTriggered && firstTabbableElement && this.isOpen()) {\n firstTabbableElement.focus();\n }\n },\n { injector: this._injector }\n );\n\n if (!this.isOpen() && keyboardTriggered) {\n linkElement.focus();\n }\n\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden Schedule a delayed close of the submenu popover */\n private _scheduleHoverClose(): void {\n this._cancelHoverCloseTimer();\n this._hoverCloseTimer = setTimeout(() => {\n const popoverInstance = this.popover();\n if (popoverInstance && this.isOpen()) {\n popoverInstance.close();\n }\n }, this._hoverCloseDelay);\n }\n\n /** @hidden Cancel any pending hover close timer */\n private _cancelHoverCloseTimer(): void {\n if (this._hoverCloseTimer !== null) {\n clearTimeout(this._hoverCloseTimer);\n this._hoverCloseTimer = null;\n }\n }\n}\n","@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave()\"\n >\n <ng-container *ngTemplateOutlet=\"submenu()\"></ng-container>\n </fd-popover-body>\n </fd-popover>\n }\n} @else {\n <button role=\"menuitem\" class=\"fd-menu__link\" [class.is-selected]=\"selected()\" [tabIndex]=\"_tabIndex$()\">\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n </button>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostListener,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, RtlService } from '@fundamental-ngx/cdk/utils';\nimport {\n BarComponent,\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subject, startWith } from 'rxjs';\nimport { UserMenuUserNameDirective } from '../directives/user-menu-user-name.directive';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n selector: 'fd-user-menu-body',\n templateUrl: './user-menu-body.component.html',\n host: {\n class: 'fd-user-menu__body'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n BarComponent,\n CommonModule,\n TitleComponent,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent,\n BarElementDirective,\n InitialFocusDirective,\n FdTranslatePipe\n ],\n providers: [contentDensityObserverProviders()]\n})\nexport class UserMenuBodyComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: true })\n readonly _listItems: QueryList<UserMenuListItemComponent>;\n\n /**\n * Template ref of the submenu\n */\n submenu = signal<TemplateRef<any> | null>(null);\n\n /**\n * The text of the selected item\n * Needed in mobile mode to update the title in the header\n */\n selectedItemTitle = signal<string | null>(null);\n\n /**\n * Signal indicating whether the user name element is currently visible\n * within the user menu. This updates automatically as the element\n * enters or leaves the viewport.\n *\n * Used by the template to conditionally render the sticky header.\n */\n readonly isUserNameVisible = signal(true);\n\n /**\n * Signal storing the HTML content of the user name element.\n * When the original element scrolls out of view, this content\n * is displayed in the sticky header.\n */\n readonly userNameContent = signal('');\n\n /**\n * Template ref to the header of the user menu body.\n * Needed in mobile mode\n */\n readonly bodyHeader = viewChild<TemplateRef<any>>('bodyHeader');\n\n /**\n * Handle the navigation icon (arrow) of the Back button in RTL mode\n */\n protected readonly navigationArrow = computed(() =>\n this._rtlService?.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n protected readonly userNameEl = contentChild(UserMenuUserNameDirective, { read: ElementRef });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _refresh$ = new Subject<void>();\n\n /** @hidden Track the list item that opened the details view for focus restoration */\n private _triggerItem: UserMenuListItemComponent | null = null;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listItems.changes\n .pipe(startWith(this._listItems), takeUntilDestroyed(this._destroyRef))\n .subscribe((listItems) => {\n listItems.forEach((item: UserMenuListItemComponent) => {\n item.showSubmenu\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((submenuTpl: TemplateRef<any> | null) => {\n this._triggerItem = item;\n this.selectItem(submenuTpl);\n });\n item.updateTitle.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((title: string | null) => {\n this.updateTitle(title);\n });\n });\n });\n\n const el = this.userNameEl()?.nativeElement;\n\n if (!el) {\n return;\n }\n\n // logic for showing/hiding the popover header with user name on scroll\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n this.isUserNameVisible.set(entries[0].isIntersecting);\n },\n { root: null, threshold: 0 }\n );\n\n intersectionObserver.observe(el);\n\n // Initialize\n this.userNameContent.set(el.innerHTML.trim());\n\n // Watch for changes in projected content\n const mutationObserver = new MutationObserver(() => {\n this.userNameContent.set(el.innerHTML.trim());\n });\n\n mutationObserver.observe(el, {\n childList: true,\n characterData: true,\n subtree: true\n });\n\n this._destroyRef.onDestroy(() => {\n intersectionObserver.disconnect();\n mutationObserver.disconnect();\n });\n }\n\n /**\n * Selects the item and sets the submenu template ref\n */\n selectItem(submenuTpl: TemplateRef<any> | null): void {\n this.submenu.set(submenuTpl);\n }\n\n /**\n * Updates the title of the selected item\n */\n updateTitle(title: string | null): void {\n this.selectedItemTitle.set(title);\n }\n\n /**\n * Clears the submenu template ref and the selected item title\n * Closes the submenu and returns to the main view\n */\n clearSubmenu(): void {\n const itemToFocus = this._triggerItem;\n this.submenu.set(null);\n this.selectedItemTitle.set(null);\n this._triggerItem = null;\n\n if (itemToFocus) {\n // Delay focus to allow the main view to render first\n requestAnimationFrame(() => {\n itemToFocus.focus();\n });\n }\n }\n\n /**\n * Closes the dialog in mobile mode\n */\n closeDialog(dialogRef): void {\n dialogRef.dismiss('Close');\n this.clearSubmenu();\n }\n}\n","@if (!submenu()) {\n <ng-content select=\"[fd-user-menu-header]\"></ng-content>\n <ng-content select=\"[fd-user-menu-content-container]\"></ng-content>\n} @else {\n <div class=\"fd-user-menu__details-view\">\n <ng-container *ngTemplateOutlet=\"submenu()\"></ng-container>\n </div>\n}\n\n<ng-template #bodyHeader let-dialogRef=\"dialogRef\">\n <div fd-bar style=\"position: fixed; top: 0; left: 0; right: 0; z-index: 10\">\n @if (submenu()) {\n <div fd-bar-left>\n <fd-bar-element>\n <fd-button-bar\n fdkInitialFocus\n [ariaLabel]=\"('coreUserMenu.previousButton' | fdTranslate)()\"\n [glyph]=\"navigationArrow()\"\n (click)=\"clearSubmenu()\"\n >\n </fd-button-bar>\n </fd-bar-element>\n <fd-bar-element>\n <h5 fd-title>{{ selectedItemTitle() }}</h5>\n </fd-bar-element>\n </div>\n }\n <div fd-bar-right>\n @if (!submenu()) {\n <fd-bar-element\n [fullWidth]=\"true\"\n class=\"fd-user-menu__scroll-header-element\"\n [class.hidden]=\"isUserNameVisible()\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <div\n [innerHTML]=\"userNameContent()\"\n class=\"fd-user-menu__user-name fd-user-menu__user-name--truncate\"\n style=\"text-align: center; margin-inline-start: 2.75rem\"\n ></div>\n </fd-bar-element>\n }\n\n <fd-bar-element>\n <fd-button-bar\n [ariaLabel]=\"('coreUserMenu.closeButton' | fdTranslate)()\"\n glyph=\"decline\"\n (click)=\"closeDialog(dialogRef)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-content-container]',\n template: `<ng-content />`,\n host: {\n class: 'fd-user-menu__content-container'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuContentContainerComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n\n@Component({\n selector: 'fd-user-menu-control',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabindex: '0'\n },\n imports: []\n})\nexport class UserMenuControlComponent {\n /** Event emitted event when control element is clicked */\n @Output()\n clicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n constructor(private el: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n @HostListener('click')\n onClick(): void {\n this.clicked.emit();\n }\n\n /** @hidden */\n focus(): void {\n this.el.nativeElement.focus();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-user-menu-footer',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-user-menu__footer'\n },\n imports: []\n})\nexport class UserMenuFooterComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-header-content-area]',\n template: `<ng-content />`,\n host: {\n class: 'fd-user-menu__header-content-area'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuHeaderContentAreaComponent {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n HostListener,\n inject,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardSupportService } from '@fundamental-ngx/cdk/utils';\nimport { merge, startWith, Subject, takeUntil } from 'rxjs';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n selector: 'fd-user-menu-list',\n template: `\n <nav class=\"fd-menu fd-menu--icons fd-user-menu__menu\">\n <ul class=\"fd-menu__list fd-user-menu__menu-list\" role=\"menu\">\n <ng-content />\n </ul>\n </nav>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuListComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: false })\n readonly _listItems: QueryList<UserMenuListItemComponent>;\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _keyboardSupportService = inject(KeyboardSupportService);\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (this._keyboardSupportService.keyManager) {\n this._keyboardSupportService.onKeyDown(event);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyboardSupportService.setKeyboardService(this._listItems, false, false);\n\n this._listItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._setupInteractionListeners();\n });\n }\n\n /** @hidden */\n private _setupInteractionListeners(): void {\n this._refresh$.next();\n this._refresh$.complete();\n this._refresh$ = new Subject<void>();\n\n merge(...this._listItems.toArray().map((i) => i.focused))\n .pipe(takeUntil(this._refresh$), takeUntilDestroyed(this._destroyRef))\n .subscribe((focusedItem) => {\n this._listItems.forEach((item) => {\n item._tabIndex$.set(-1);\n });\n focusedItem._tabIndex$.set(0);\n this._keyboardSupportService.keyManager.setActiveItem(focusedItem);\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n HostListener,\n QueryList,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardSupportService } from '@fundamental-ngx/cdk/utils';\nimport { Subject, merge, startWith, takeUntil } from 'rxjs';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-sublist]',\n template: `<ul class=\"fd-menu__list fd-user-menu__menu-list\" role=\"menu\">\n <ng-content />\n </ul> `,\n host: {\n class: 'fd-menu fd-user-menu__menu',\n '[class.fd-menu--icons]': 'hasIcons()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [KeyboardSupportService],\n styles: [\n `\n [fd-user-menu-sublist] {\n margin-block-start: 0 !important;\n }\n `\n ]\n})\nexport class UserMenuSublistComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: true })\n _listItems: QueryList<UserMenuListItemComponent>;\n\n /** Whether the sublist menu items have icons */\n hasIcons = input(false, { transform: booleanAttribute });\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _keyboardSupportService = inject(KeyboardSupportService<UserMenuListItemComponent>);\n\n /** @hidden */\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (this._keyboardSupportService.keyManager) {\n this._keyboardSupportService.onKeyDown(event);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyboardSupportService.setKeyboardService(this._listItems, false, false);\n\n this._listItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._setupInteractionListeners();\n });\n }\n\n /** @hidden */\n private _setupInteractionListeners(): void {\n this._refresh$.next();\n this._refresh$.complete();\n this._refresh$ = new Subject<void>();\n\n merge(...this._listItems.toArray().map((i) => i.focused))\n .pipe(takeUntil(this._refresh$), takeUntilDestroyed(this._destroyRef))\n .subscribe((focusedItem) => {\n this._listItems.forEach((item) => {\n item._tabIndex$.set(-1);\n });\n focusedItem._tabIndex$.set(0);\n this._keyboardSupportService.keyManager.setActiveItem(focusedItem);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-control-element]'\n})\nexport class UserMenuControlElementDirective {}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n Renderer2,\n signal,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { KeyboardSupportService, RtlService, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef,\n DialogService\n} from '@fundamental-ngx/core/dialog';\n\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\n\nimport { BarComponent, BarElementDirective, BarMiddleDirective } from '@fundamental-ngx/core/bar';\n\nimport { UserMenuBodyComponent } from './components/user-menu-body.component';\nimport { UserMenuControlComponent } from './components/user-menu-control.component';\nimport { UserMenuListItemComponent } from './components/user-menu-list-item.component';\nimport { UserMenuControlElementDirective } from './directives/user-menu-control-element.directive';\nimport { UserMenuUserNameDirective } from './directives/user-menu-user-name.directive';\n\n@Component({\n selector: 'fd-user-menu',\n templateUrl: './user-menu.component.html',\n styleUrl: './user-menu.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-user-menu'\n },\n imports: [\n CommonModule,\n BarComponent,\n BarMiddleDirective,\n BarElementDirective,\n PopoverComponent,\n PopoverBodyComponent,\n PopoverControlComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n TemplateDirective\n ],\n providers: [KeyboardSupportService, contentDensityObserverProviders()]\n})\nexport class UserMenuComponent implements AfterViewInit {\n /** Event thrown, when the user menu is opened or closed */\n isOpenChange = output<boolean>();\n\n /** Whether the user menu is in mobile mode */\n mobile = input(false, { transform: booleanAttribute });\n\n /** Whether the user menu is open */\n readonly isOpen = signal(false);\n\n /**\n * Signal indicating whether the user name element is currently visible\n * within the user menu. This updates automatically as the element\n * enters or leaves the viewport.\n *\n * Used by the template to conditionally render the sticky header.\n */\n readonly isUserNameVisible = signal(true);\n\n /**\n * Signal storing the HTML content of the user name element.\n * When the original element scrolls out of view, this content\n * is displayed in the sticky header.\n */\n readonly userNameContent = signal('');\n\n /** @hidden */\n protected readonly userMenuControl = contentChild(UserMenuControlComponent);\n\n /** @hidden */\n protected readonly userNameEl = contentChild(UserMenuUserNameDirective, { read: ElementRef });\n\n /** @hidden */\n protected readonly userMenuControlElement = contentChild(UserMenuControlElementDirective, {\n descendants: true,\n read: ElementRef\n });\n\n /** @hidden */\n protected readonly userMenuBody = contentChild(UserMenuBodyComponent, { descendants: true });\n\n /** @hidden */\n protected readonly navigationArrow = computed(() =>\n this._rtlService.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n private readonly _listItems = contentChildren(UserMenuListItemComponent, { descendants: true });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService);\n\n /** @hidden */\n private readonly _dialogService = inject(DialogService);\n\n /** @hidden */\n private readonly _changeDetectionRef = inject(ChangeDetectorRef);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private _dialogRef: DialogRef | undefined;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor() {\n effect(() => {\n const isMobile = this.mobile();\n this._listItems()?.forEach((item) => item.mobile.set(isMobile));\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n const isMobile = this.mobile();\n this._listItems()?.forEach((item) => item.mobile.set(isMobile));\n\n const el = this.userNameEl()?.nativeElement;\n\n if (!el) {\n return;\n }\n\n // logic for showing/hiding the popover header with user name on scroll\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n this.isUserNameVisible.set(entries[0].isIntersecting);\n },\n { root: null, threshold: 0, rootMargin: '-20px 0px 0px 0px' }\n );\n\n intersectionObserver.observe(el);\n\n // Initialize\n this.userNameContent.set(el.innerHTML.trim());\n\n // Watch for changes in projected content\n const mutationObserver = new MutationObserver(() => {\n this.userNameContent.set(el.innerHTML.trim());\n });\n\n mutationObserver.observe(el, {\n childList: true,\n characterData: true,\n subtree: true\n });\n\n this._destroyRef.onDestroy(() => {\n intersectionObserver.disconnect();\n mutationObserver.disconnect();\n });\n }\n\n /** Method that opens the user menu */\n open(): void {\n this.isOpenChangeHandle(true);\n }\n\n /** Method that closes the user menu */\n close(): void {\n this.isOpenChangeHandle(false);\n\n if (this._listItems().length > 0) {\n this._listItems().forEach((item) => {\n item.isOpen.set(false);\n item._elementRef?.nativeElement.querySelector('.fd-menu__link')?.classList.remove('is-active');\n });\n\n this._listItems()[0]?._tabIndex$.set(0);\n }\n\n this._clearSubmenu();\n this._dialogRef?.close();\n }\n\n /** Method that opens the user menu in dialog (for mobile mode) */\n openDialog(dialogTemplate: TemplateRef<any>): void {\n this._dialogRef = this._dialogService.open(dialogTemplate, {\n mobile: true,\n verticalPadding: false,\n horizontalPadding: false,\n ariaLabelledBy: 'fd-user-menu-header',\n ariaDescribedBy: 'fd-user-menu-body',\n contentDensity: ContentDensityMode.COZY\n });\n\n const refSub = this._dialogRef.afterClosed.subscribe({\n next: () => {\n this.userMenuControl()?.focus();\n refSub.unsubscribe();\n },\n error: (type) => {\n if (type === 'escape') {\n this._clearSubmenu();\n refSub.unsubscribe();\n }\n }\n });\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n if (this.isOpen() === isOpen) {\n return;\n }\n\n this.isOpen.set(isOpen);\n this.isOpenChange.emit(isOpen);\n\n if (!isOpen && !this.mobile()) {\n this.userMenuControl()?.focus();\n }\n\n const userMenuControlEl = this.userMenuControlElement()?.nativeElement;\n\n this.userMenuControlElement()?.nativeElement &&\n (isOpen\n ? this._renderer.addClass(userMenuControlEl, 'is-active')\n : this._renderer.removeClass(userMenuControlEl, 'is-active'));\n\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden */\n private _clearSubmenu(): void {\n const userMenuBody = this.userMenuBody();\n if (userMenuBody) {\n userMenuBody.clearSubmenu();\n }\n }\n}\n","@if (!mobile()) {\n <fd-popover\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [focusAutoCapture]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [focusTrapped]=\"true\"\n [disableScrollbar]=\"true\"\n [noArrow]=\"false\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </fd-popover-control>\n <fd-popover-body fd-user-menu-popover-control>\n <div class=\"fd-user-menu__popover-wrapper\">\n <div\n fd-popover-body-header\n class=\"fd-user-menu__scroll-header\"\n [class.hidden]=\"isUserNameVisible()\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"header\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n\n <div fd-popover-body-footer>\n <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\n </div>\n </div>\n </fd-popover-body>\n </fd-popover>\n} @else {\n <span (click)=\"openDialog(dialogTemplate)\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </span>\n\n <ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (userMenuBody()?.bodyHeader()) {\n <ng-template fdkTemplate=\"header\">\n <ng-container\n *ngTemplateOutlet=\"userMenuBody()?.bodyHeader() ?? null; context: { dialogRef: dialog }\"\n >\n </ng-container>\n </ng-template>\n }\n </fd-dialog-header>\n <fd-dialog-body style=\"padding: 0\">\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n </fd-dialog-body>\n <fd-dialog-footer>\n <ng-template fdkTemplate=\"customFooter\">\n <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n </ng-template>\n}\n\n<ng-template #control>\n <ng-content select=\"fd-user-menu-control\" />\n</ng-template>\n\n<ng-template #header>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\">\n <div fd-bar-middle>\n <fd-bar-element>\n <div\n class=\"fd-user-menu__user-name fd-user-menu__user-name--truncate\"\n [innerHTML]=\"userNameContent()\"\n ></div>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #body>\n <ng-content select=\"fd-user-menu-body\" />\n</ng-template>\n\n<ng-template #footer>\n <ng-content select=\"fd-user-menu-footer\" />\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-header-container]',\n host: {\n class: 'fd-user-menu__header-container'\n }\n})\nexport class UserMenuHeaderContainerDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-header]',\n host: {\n class: 'fd-user-menu__header'\n }\n})\nexport class UserMenuHeaderDirective {}\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-subline]',\n host: {\n class: 'fd-user-menu__subline',\n '[class.fd-user-menu__subline--truncate]': 'truncate()'\n }\n})\nexport class UserMenuSublineDirective {\n /** Whether the text should truncate with ellipsis. */\n truncate = input(false, { transform: booleanAttribute });\n}\n","import { NgModule } from '@angular/core';\n\n// Components\nimport { UserMenuBodyComponent } from './components/user-menu-body.component';\nimport { UserMenuContentContainerComponent } from './components/user-menu-content-container.component';\nimport { UserMenuControlComponent } from './components/user-menu-control.component';\nimport { UserMenuFooterComponent } from './components/user-menu-footer.component';\nimport { UserMenuHeaderContentAreaComponent } from './components/user-menu-header-content-area.component';\nimport { UserMenuListItemComponent } from './components/user-menu-list-item.component';\nimport { UserMenuListComponent } from './components/user-menu-list.component';\nimport { UserMenuSublistComponent } from './components/user-menu-sublist.component';\nimport { UserMenuComponent } from './user-menu.component';\n\n// Directives\nimport { UserMenuControlElementDirective } from './directives/user-menu-control-element.directive';\nimport { UserMenuHeaderContainerDirective } from './directives/user-menu-header-container.directive';\nimport { UserMenuHeaderDirective } from './directives/user-menu-header.directive';\nimport { UserMenuSublineDirective } from './directives/user-menu-subline.directive';\nimport { UserMenuUserNameDirective } from './directives/user-menu-user-name.directive';\n\nconst components = [\n UserMenuComponent,\n UserMenuControlComponent,\n UserMenuBodyComponent,\n UserMenuFooterComponent,\n UserMenuListComponent,\n UserMenuSublistComponent,\n UserMenuListItemComponent,\n UserMenuContentContainerComponent,\n UserMenuHeaderContentAreaComponent,\n UserMenuHeaderDirective,\n UserMenuHeaderContainerDirective,\n UserMenuUserNameDirective,\n UserMenuSublineDirective,\n UserMenuControlElementDirective\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class UserMenuModule {}\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-user-menu.mjs","sources":["../../../../libs/core/user-menu/directives/user-menu-user-name.directive.ts","../../../../libs/core/user-menu/components/user-menu-list-item.component.ts","../../../../libs/core/user-menu/components/user-menu-list-item.component.html","../../../../libs/core/user-menu/components/user-menu-body.component.ts","../../../../libs/core/user-menu/components/user-menu-body.component.html","../../../../libs/core/user-menu/components/user-menu-content-container.component.ts","../../../../libs/core/user-menu/components/user-menu-control.component.ts","../../../../libs/core/user-menu/components/user-menu-footer.component.ts","../../../../libs/core/user-menu/components/user-menu-header-content-area.component.ts","../../../../libs/core/user-menu/components/user-menu-list.component.ts","../../../../libs/core/user-menu/components/user-menu-sublist.component.ts","../../../../libs/core/user-menu/directives/user-menu-control-element.directive.ts","../../../../libs/core/user-menu/user-menu.component.ts","../../../../libs/core/user-menu/user-menu.component.html","../../../../libs/core/user-menu/directives/user-menu-header-container.directive.ts","../../../../libs/core/user-menu/directives/user-menu-header.directive.ts","../../../../libs/core/user-menu/directives/user-menu-subline.directive.ts","../../../../libs/core/user-menu/user-menu.module.ts","../../../../libs/core/user-menu/fundamental-ngx-core-user-menu.ts"],"sourcesContent":["import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-user-name]',\n host: {\n class: 'fd-user-menu__user-name',\n '[class.fd-user-menu__user-name--truncate]': 'truncate()'\n }\n})\nexport class UserMenuUserNameDirective {\n /** Whether the text should truncate with ellipsis. */\n truncate = input(false, { transform: booleanAttribute });\n}\n","import { ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Injector,\n input,\n Output,\n output,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { KeyboardSupportItemInterface, KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { Subject } from 'rxjs';\n\nlet uniqueId = 0;\nlet uniqueTextId = 0;\nlet uniqueSubtitleId = 0;\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-list-item]',\n templateUrl: './user-menu-list-item.component.html',\n host: {\n class: 'fd-menu__item',\n role: 'none',\n '[attr.id]': 'uniqueId()',\n '[attr.aria-labelledby]': 'textId()',\n '(mouseenter)': 'onHostMouseEnter()',\n '(mouseleave)': 'onHostMouseLeave()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [PopoverBodyComponent, PopoverComponent, PopoverControlComponent, CommonModule]\n})\nexport class UserMenuListItemComponent implements KeyboardSupportItemInterface {\n /** @hidden Event name for child menu item state changes */\n private static readonly STATE_CHANGE_EVENT = 'fdMenuItemStateChange';\n /** Event emitter for isOpenChange event that controls the submenu popover body */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitter for showSubmenu event */\n @Output() showSubmenu: EventEmitter<TemplateRef<any> | null> = new EventEmitter();\n\n /** Event emitter for updateTitle event */\n @Output() updateTitle: EventEmitter<string | null> = new EventEmitter();\n\n /** Event emitter for keyDown event */\n readonly keyDown = output<KeyboardEvent>();\n\n /** Unique id for the menu list item. Default is provided. */\n uniqueId = input(`fd-menu-list-item-${++uniqueId}`);\n\n /** Icon name for the menu list item (optional) */\n icon = input<string>();\n\n /** Icon name for the menu list item (optional) */\n iconAfter = input<string>();\n\n /** Whether the icon after is in active state */\n iconAfterActive = input(false, { transform: booleanAttribute });\n\n /** Required text for the menu list item */\n text = input.required<string>();\n\n /** Unique id for the title. Default is provided. */\n textId = input(`fd-menu-list-item-title-${++uniqueTextId}`);\n\n /** Whether the text should be truncated */\n truncateText = input(false, { transform: booleanAttribute });\n\n /** Subtitle text for the menu list item */\n subtitle = input<string | undefined>();\n\n /** Unique id for the subtitle. Default is provided. */\n subtitleId = input(`fd-menu-list-item-subtitle-${++uniqueSubtitleId}`);\n\n /** Whether the subtitle should be truncated */\n truncateSubtitle = input(false, { transform: booleanAttribute });\n\n /** Whether the item has a submenu */\n hasSubmenu = input(false, { transform: booleanAttribute });\n\n /** Template ref for user menu list item submenu */\n submenu = input<TemplateRef<any> | null>(null);\n\n /** Whether the item is selected */\n selected = input(false, { transform: booleanAttribute });\n\n /** Whether the item's submenu is open */\n isOpen = signal(false);\n\n /** Whether the item is in mobile mode */\n mobile = signal(false);\n\n /** Reference to the popover */\n popover = viewChild(PopoverComponent);\n\n /** @hidden */\n readonly focused = new Subject<UserMenuListItemComponent>();\n\n /** Item's tabindex */\n readonly _tabIndex$ = signal<number | null>(null);\n\n /** @hidden */\n readonly _elementRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private _changeDetectionRef = inject(ChangeDetectorRef);\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden RTL service for direction detection */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden Computed signal to track RTL state */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden Track whether popover open/close was triggered by keyboard */\n private _keyboardTriggered = false;\n\n /** @hidden Timer for delayed close on mouseleave */\n private _hoverCloseTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** @hidden Track number of open child submenus */\n private _openChildCount = 0;\n\n /** @hidden Flag indicating mouse has left the popover and close is pending */\n private _pendingClose = false;\n\n /** @hidden Cleanup function for child state listener */\n private _childStateListenerCleanup: (() => void) | null = null;\n\n /** @hidden Grace period in ms before closing submenu on mouseleave */\n private readonly _hoverCloseDelay = 150;\n\n constructor() {\n this._destroyRef.onDestroy(() => {\n this._childStateListenerCleanup?.();\n this._childStateListenerCleanup = null;\n this._cancelHoverCloseTimer();\n });\n }\n\n /** @hidden */\n @HostListener('focusin')\n focusHandler(): void {\n this.focused.next(this);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n\n const popoverInstance = this.popover();\n if (!popoverInstance) {\n return;\n }\n\n const isRtl = this._isRtl();\n\n // In RTL mode, LEFT arrow opens submenu and RIGHT arrow closes it\n // In LTR mode, RIGHT arrow opens submenu and LEFT arrow closes it\n const openKey = isRtl ? LEFT_ARROW : RIGHT_ARROW;\n const closeKey = isRtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (KeyUtil.isKeyCode(event, openKey) && !this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n popoverInstance.open();\n } else if (KeyUtil.isKeyCode(event, closeKey) && this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n popoverInstance.close();\n }\n }\n\n /** @hidden Handle keyboard in popover body */\n onPopoverBodyKeyDown(event: KeyboardEvent): void {\n const isRtl = this._isRtl();\n const closeKey = isRtl ? RIGHT_ARROW : LEFT_ARROW;\n\n if (KeyUtil.isKeyCode(event, closeKey) && this.isOpen()) {\n event.preventDefault();\n this._keyboardTriggered = true;\n const popoverInstance = this.popover();\n if (popoverInstance) {\n popoverInstance.close();\n }\n }\n\n // Escape is handled by the popover internally, but we need to set the flag\n // so that focus returns to the trigger item\n if (KeyUtil.isKeyCode(event, ESCAPE) && this.isOpen()) {\n this._keyboardTriggered = true;\n }\n }\n\n /** @hidden Open submenu on host mouseenter (non-mobile only) */\n onHostMouseEnter(): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n this._cancelHoverCloseTimer();\n const popoverInstance = this.popover();\n if (popoverInstance && !this.isOpen()) {\n popoverInstance.open();\n }\n }\n\n /** @hidden Schedule submenu close on host mouseleave */\n onHostMouseLeave(): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n this._scheduleHoverClose();\n }\n\n /** @hidden Cancel close when mouse enters the submenu popover body */\n onSubmenuMouseEnter(): void {\n this._cancelHoverCloseTimer();\n this._pendingClose = false;\n }\n\n /** @hidden Schedule close when mouse leaves the submenu popover body */\n onSubmenuMouseLeave(event: MouseEvent): void {\n if (!this.hasSubmenu() || this.mobile()) {\n return;\n }\n\n const relatedTarget = event.relatedTarget as HTMLElement;\n // Navigate: popover() -> popoverBody signal -> PopoverBodyComponent -> ElementRef -> nativeElement\n const thisItemsPopoverBody = this.popover()?.popoverBody?.()?._elementRef?.nativeElement;\n\n // Don't close if mouse is still in this item's popover\n if (thisItemsPopoverBody && relatedTarget && thisItemsPopoverBody.contains(relatedTarget)) {\n return;\n }\n\n // Mark that we want to close, but wait if children are open\n this._pendingClose = true;\n\n // If any child submenu is open, wait for it to close\n if (this._openChildCount > 0) {\n return;\n }\n\n this._scheduleHoverClose();\n }\n\n /** Handles submenu selection in mobile mode */\n onShowDetailsView(): void {\n if (this.submenu() && this.mobile()) {\n this.showSubmenu.emit(this.submenu());\n this.updateTitle.emit(this.text());\n }\n }\n\n /** @hidden Support for KeyboardSupportItemInterface */\n click(): void {\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n linkElement.click();\n }\n\n /** @hidden */\n focus(): void {\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n linkElement.focus();\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean, popover: PopoverComponent): void {\n const popoverBodyEl = (popover as any).popoverBody?.();\n const firstTabbableElement: HTMLButtonElement =\n popoverBodyEl?._elementRef.nativeElement.querySelector('.fd-menu__link');\n\n const linkElement: HTMLButtonElement = this._elementRef.nativeElement.querySelector('.fd-menu__link');\n\n if (this.isOpen() === isOpen) {\n return;\n }\n\n const keyboardTriggered = this._keyboardTriggered;\n this._keyboardTriggered = false;\n\n this.isOpen.set(isOpen);\n\n this.isOpenChange.emit(isOpen);\n\n // Notify parent item (if any) about child state change\n this._notifyParentOfStateChange(isOpen);\n\n // Setup listener for child state changes if opening\n if (isOpen) {\n this._setupChildStateListener(popoverBodyEl?._elementRef.nativeElement);\n } else {\n // Reset state when closing\n this._openChildCount = 0;\n this._pendingClose = false;\n this._childStateListenerCleanup?.();\n this._childStateListenerCleanup = null;\n }\n\n afterNextRender(\n () => {\n this.isOpen() ? linkElement.classList.add('is-selected') : linkElement.classList.remove('is-selected');\n if (keyboardTriggered && firstTabbableElement && this.isOpen()) {\n firstTabbableElement.focus();\n }\n },\n { injector: this._injector }\n );\n\n if (!this.isOpen() && keyboardTriggered) {\n linkElement.focus();\n }\n\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden Notify parent menu item of this item's state change */\n private _notifyParentOfStateChange(isOpen: boolean): void {\n // Dispatch custom event that bubbles up to parent popover bodies\n const event = new CustomEvent(UserMenuListItemComponent.STATE_CHANGE_EVENT, {\n detail: { isOpen },\n bubbles: true\n });\n this._elementRef.nativeElement.dispatchEvent(event);\n }\n\n /** @hidden Setup listener for child menu item state changes */\n private _setupChildStateListener(popoverBody: HTMLElement): void {\n if (!popoverBody) {\n return;\n }\n\n // Clean up previous listener if any\n this._childStateListenerCleanup?.();\n\n // Listen for state changes from child menu items\n const handleChildStateChange = (event: Event): void => {\n const customEvent = event as CustomEvent<{ isOpen: boolean }>;\n // Stop propagation to prevent parent popover bodies from double-counting\n // this event. Each level re-emits its own state change via _notifyParentOfStateChange.\n event.stopPropagation();\n\n if (customEvent.detail.isOpen) {\n this._openChildCount++;\n } else {\n this._openChildCount = Math.max(0, this._openChildCount - 1);\n\n // If no more children are open and we have a pending close, execute it\n if (this._openChildCount === 0 && this._pendingClose) {\n this._scheduleHoverClose();\n }\n }\n };\n\n popoverBody.addEventListener(UserMenuListItemComponent.STATE_CHANGE_EVENT, handleChildStateChange);\n\n // Store cleanup function (destroyed via constructor-registered onDestroy)\n this._childStateListenerCleanup = () => {\n popoverBody.removeEventListener(UserMenuListItemComponent.STATE_CHANGE_EVENT, handleChildStateChange);\n };\n }\n\n /** @hidden Schedule a delayed close of the submenu popover */\n private _scheduleHoverClose(): void {\n this._cancelHoverCloseTimer();\n this._hoverCloseTimer = setTimeout(() => {\n const popoverInstance = this.popover();\n if (popoverInstance && this.isOpen()) {\n popoverInstance.close();\n }\n this._pendingClose = false;\n }, this._hoverCloseDelay);\n }\n\n /** @hidden Cancel any pending hover close timer */\n private _cancelHoverCloseTimer(): void {\n if (this._hoverCloseTimer !== null) {\n clearTimeout(this._hoverCloseTimer);\n this._hoverCloseTimer = null;\n }\n }\n}\n","@if (hasSubmenu()) {\n @if (mobile()) {\n <button\n role=\"menuitem\"\n class=\"fd-menu__link\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n (click)=\"onShowDetailsView()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n } @else {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n style=\"width: 100%\"\n placement=\"left-start\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"false\"\n [restoreFocusOnClose]=\"true\"\n [closeOnOutsideClick]=\"false\"\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event, popover)\"\n >\n <fd-popover-control>\n <button\n role=\"menuitem\"\n class=\"fd-menu__link fd-menu__link--popover\"\n [class.is-selected]=\"selected()\"\n [tabIndex]=\"_tabIndex$()\"\n >\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span\n class=\"fd-menu__title\"\n [class.fd-menu__title--truncate]=\"truncateText()\"\n [id]=\"textId()\"\n >{{ text() }}</span\n >\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n <span class=\"fd-menu__addon-after fd-menu__addon-after--submenu\"></span>\n </button>\n </fd-popover-control>\n <fd-popover-body\n (keydown)=\"onPopoverBodyKeyDown($event)\"\n (mouseenter)=\"onSubmenuMouseEnter()\"\n (mouseleave)=\"onSubmenuMouseLeave($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"submenu()\"></ng-container>\n </fd-popover-body>\n </fd-popover>\n }\n} @else {\n <button role=\"menuitem\" class=\"fd-menu__link\" [class.is-selected]=\"selected()\" [tabIndex]=\"_tabIndex$()\">\n @if (icon()) {\n <span class=\"fd-menu__addon-before\">\n <i [class]=\"'sap-icon--' + icon()\" role=\"presentation\"></i>\n </span>\n }\n\n <div class=\"fd-menu__content\">\n <span class=\"fd-menu__title\" [class.fd-menu__title--truncate]=\"truncateText()\" [id]=\"textId()\">{{\n text()\n }}</span>\n @if (subtitle()) {\n <span\n class=\"fd-menu__subtitle\"\n [class.fd-menu__subtitle--truncate]=\"truncateSubtitle()\"\n [id]=\"subtitleId()\"\n >{{ subtitle() }}</span\n >\n }\n </div>\n\n @if (iconAfter()) {\n <span class=\"fd-menu__addon-after\" [class.fd-menu__addon-after--active]=\"iconAfterActive()\">\n <i [class]=\"'sap-icon--' + iconAfter()\" role=\"presentation\"></i>\n </span>\n }\n </button>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n HostListener,\n QueryList,\n TemplateRef,\n ViewEncapsulation,\n computed,\n contentChild,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, RtlService } from '@fundamental-ngx/cdk/utils';\nimport {\n BarComponent,\n BarElementDirective,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent\n} from '@fundamental-ngx/core/bar';\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Subject, startWith } from 'rxjs';\nimport { UserMenuUserNameDirective } from '../directives/user-menu-user-name.directive';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n selector: 'fd-user-menu-body',\n templateUrl: './user-menu-body.component.html',\n host: {\n class: 'fd-user-menu__body'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n BarComponent,\n CommonModule,\n TitleComponent,\n BarLeftDirective,\n BarRightDirective,\n ButtonBarComponent,\n BarElementDirective,\n InitialFocusDirective,\n FdTranslatePipe\n ],\n providers: [contentDensityObserverProviders()]\n})\nexport class UserMenuBodyComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: true })\n readonly _listItems: QueryList<UserMenuListItemComponent>;\n\n /**\n * Template ref of the submenu\n */\n submenu = signal<TemplateRef<any> | null>(null);\n\n /**\n * The text of the selected item\n * Needed in mobile mode to update the title in the header\n */\n selectedItemTitle = signal<string | null>(null);\n\n /**\n * Signal indicating whether the user name element is currently visible\n * within the user menu. This updates automatically as the element\n * enters or leaves the viewport.\n *\n * Used by the template to conditionally render the sticky header.\n */\n readonly isUserNameVisible = signal(true);\n\n /**\n * Signal storing the HTML content of the user name element.\n * When the original element scrolls out of view, this content\n * is displayed in the sticky header.\n */\n readonly userNameContent = signal('');\n\n /**\n * Template ref to the header of the user menu body.\n * Needed in mobile mode\n */\n readonly bodyHeader = viewChild<TemplateRef<any>>('bodyHeader');\n\n /**\n * Handle the navigation icon (arrow) of the Back button in RTL mode\n */\n protected readonly navigationArrow = computed(() =>\n this._rtlService?.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n protected readonly userNameEl = contentChild(UserMenuUserNameDirective, { read: ElementRef });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _refresh$ = new Subject<void>();\n\n /** @hidden Track the list item that opened the details view for focus restoration */\n private _triggerItem: UserMenuListItemComponent | null = null;\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._listItems.changes\n .pipe(startWith(this._listItems), takeUntilDestroyed(this._destroyRef))\n .subscribe((listItems) => {\n listItems.forEach((item: UserMenuListItemComponent) => {\n item.showSubmenu\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((submenuTpl: TemplateRef<any> | null) => {\n this._triggerItem = item;\n this.selectItem(submenuTpl);\n });\n item.updateTitle.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((title: string | null) => {\n this.updateTitle(title);\n });\n });\n });\n\n const el = this.userNameEl()?.nativeElement;\n\n if (!el) {\n return;\n }\n\n // logic for showing/hiding the popover header with user name on scroll\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n this.isUserNameVisible.set(entries[0].isIntersecting);\n },\n { root: null, threshold: 0 }\n );\n\n intersectionObserver.observe(el);\n\n // Initialize\n this.userNameContent.set(el.innerHTML.trim());\n\n // Watch for changes in projected content\n const mutationObserver = new MutationObserver(() => {\n this.userNameContent.set(el.innerHTML.trim());\n });\n\n mutationObserver.observe(el, {\n childList: true,\n characterData: true,\n subtree: true\n });\n\n this._destroyRef.onDestroy(() => {\n intersectionObserver.disconnect();\n mutationObserver.disconnect();\n });\n }\n\n /**\n * Selects the item and sets the submenu template ref\n */\n selectItem(submenuTpl: TemplateRef<any> | null): void {\n this.submenu.set(submenuTpl);\n }\n\n /**\n * Updates the title of the selected item\n */\n updateTitle(title: string | null): void {\n this.selectedItemTitle.set(title);\n }\n\n /**\n * Clears the submenu template ref and the selected item title\n * Closes the submenu and returns to the main view\n */\n clearSubmenu(): void {\n const itemToFocus = this._triggerItem;\n this.submenu.set(null);\n this.selectedItemTitle.set(null);\n this._triggerItem = null;\n\n if (itemToFocus) {\n // Delay focus to allow the main view to render first\n requestAnimationFrame(() => {\n itemToFocus.focus();\n });\n }\n }\n\n /**\n * Closes the dialog in mobile mode\n */\n closeDialog(dialogRef): void {\n dialogRef.dismiss('Close');\n this.clearSubmenu();\n }\n}\n","@if (!submenu()) {\n <ng-content select=\"[fd-user-menu-header]\"></ng-content>\n <ng-content select=\"[fd-user-menu-content-container]\"></ng-content>\n} @else {\n <div class=\"fd-user-menu__details-view\">\n <ng-container *ngTemplateOutlet=\"submenu()\"></ng-container>\n </div>\n}\n\n<ng-template #bodyHeader let-dialogRef=\"dialogRef\">\n <div fd-bar style=\"position: fixed; top: 0; left: 0; right: 0; z-index: 10\">\n @if (submenu()) {\n <div fd-bar-left>\n <fd-bar-element>\n <fd-button-bar\n fdkInitialFocus\n [ariaLabel]=\"('coreUserMenu.previousButton' | fdTranslate)()\"\n [glyph]=\"navigationArrow()\"\n (click)=\"clearSubmenu()\"\n >\n </fd-button-bar>\n </fd-bar-element>\n <fd-bar-element>\n <h5 fd-title>{{ selectedItemTitle() }}</h5>\n </fd-bar-element>\n </div>\n }\n <div fd-bar-right>\n @if (!submenu()) {\n <fd-bar-element\n [fullWidth]=\"true\"\n class=\"fd-user-menu__scroll-header-element\"\n [class.hidden]=\"isUserNameVisible()\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <div\n [innerHTML]=\"userNameContent()\"\n class=\"fd-user-menu__user-name fd-user-menu__user-name--truncate\"\n style=\"text-align: center; margin-inline-start: 2.75rem\"\n ></div>\n </fd-bar-element>\n }\n\n <fd-bar-element>\n <fd-button-bar\n [ariaLabel]=\"('coreUserMenu.closeButton' | fdTranslate)()\"\n glyph=\"decline\"\n (click)=\"closeDialog(dialogRef)\"\n >\n </fd-button-bar>\n </fd-bar-element>\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-content-container]',\n template: `<ng-content />`,\n host: {\n class: 'fd-user-menu__content-container'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuContentContainerComponent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Output,\n ViewEncapsulation\n} from '@angular/core';\n\n@Component({\n selector: 'fd-user-menu-control',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n tabindex: '0'\n },\n imports: []\n})\nexport class UserMenuControlComponent {\n /** Event emitted event when control element is clicked */\n @Output()\n clicked: EventEmitter<void> = new EventEmitter<void>();\n\n /** @hidden */\n constructor(private el: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n @HostListener('click')\n onClick(): void {\n this.clicked.emit();\n }\n\n /** @hidden */\n focus(): void {\n this.el.nativeElement.focus();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'fd-user-menu-footer',\n template: `<ng-content />`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-user-menu__footer'\n },\n imports: []\n})\nexport class UserMenuFooterComponent {}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-header-content-area]',\n template: `<ng-content />`,\n host: {\n class: 'fd-user-menu__header-content-area'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuHeaderContentAreaComponent {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n HostListener,\n inject,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardSupportService } from '@fundamental-ngx/cdk/utils';\nimport { merge, startWith, Subject, takeUntil } from 'rxjs';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n selector: 'fd-user-menu-list',\n template: `\n <nav class=\"fd-menu fd-menu--icons fd-user-menu__menu\">\n <ul class=\"fd-menu__list fd-user-menu__menu-list\" role=\"menu\">\n <ng-content />\n </ul>\n </nav>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserMenuListComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: false })\n readonly _listItems: QueryList<UserMenuListItemComponent>;\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _keyboardSupportService = inject(KeyboardSupportService);\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (this._keyboardSupportService.keyManager) {\n this._keyboardSupportService.onKeyDown(event);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyboardSupportService.setKeyboardService(this._listItems, false, false);\n\n this._listItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._setupInteractionListeners();\n });\n }\n\n /** @hidden */\n private _setupInteractionListeners(): void {\n this._refresh$.next();\n this._refresh$.complete();\n this._refresh$ = new Subject<void>();\n\n merge(...this._listItems.toArray().map((i) => i.focused))\n .pipe(takeUntil(this._refresh$), takeUntilDestroyed(this._destroyRef))\n .subscribe((focusedItem) => {\n this._listItems.forEach((item) => {\n item._tabIndex$.set(-1);\n });\n focusedItem._tabIndex$.set(0);\n this._keyboardSupportService.keyManager.setActiveItem(focusedItem);\n });\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n DestroyRef,\n HostListener,\n QueryList,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardSupportService } from '@fundamental-ngx/cdk/utils';\nimport { Subject, merge, startWith, takeUntil } from 'rxjs';\nimport { UserMenuListItemComponent } from './user-menu-list-item.component';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[fd-user-menu-sublist]',\n template: `<ul class=\"fd-menu__list fd-user-menu__menu-list\" role=\"menu\">\n <ng-content />\n </ul> `,\n host: {\n class: 'fd-menu fd-user-menu__menu',\n '[class.fd-menu--icons]': 'hasIcons()'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [KeyboardSupportService],\n styles: [\n `\n [fd-user-menu-sublist] {\n margin-block-start: 0 !important;\n }\n `\n ]\n})\nexport class UserMenuSublistComponent implements AfterViewInit {\n /** @hidden */\n @ContentChildren(UserMenuListItemComponent, { descendants: true })\n _listItems: QueryList<UserMenuListItemComponent>;\n\n /** Whether the sublist menu items have icons */\n hasIcons = input(false, { transform: booleanAttribute });\n\n /** @hidden */\n private _refresh$ = new Subject<void>();\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _keyboardSupportService = inject(KeyboardSupportService<UserMenuListItemComponent>);\n\n /** @hidden */\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n keyDownHandler(event: KeyboardEvent): void {\n if (this._keyboardSupportService.keyManager) {\n this._keyboardSupportService.onKeyDown(event);\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyboardSupportService.setKeyboardService(this._listItems, false, false);\n\n this._listItems.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._setupInteractionListeners();\n });\n }\n\n /** @hidden */\n private _setupInteractionListeners(): void {\n this._refresh$.next();\n this._refresh$.complete();\n this._refresh$ = new Subject<void>();\n\n merge(...this._listItems.toArray().map((i) => i.focused))\n .pipe(takeUntil(this._refresh$), takeUntilDestroyed(this._destroyRef))\n .subscribe((focusedItem) => {\n this._listItems.forEach((item) => {\n item._tabIndex$.set(-1);\n });\n focusedItem._tabIndex$.set(0);\n this._keyboardSupportService.keyManager.setActiveItem(focusedItem);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-control-element]'\n})\nexport class UserMenuControlElementDirective {}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n Renderer2,\n signal,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { KeyboardSupportService, RtlService, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityMode, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n DialogRef,\n DialogService\n} from '@fundamental-ngx/core/dialog';\n\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\n\nimport { BarComponent, BarElementDirective, BarMiddleDirective } from '@fundamental-ngx/core/bar';\n\nimport { UserMenuBodyComponent } from './components/user-menu-body.component';\nimport { UserMenuControlComponent } from './components/user-menu-control.component';\nimport { UserMenuListItemComponent } from './components/user-menu-list-item.component';\nimport { UserMenuControlElementDirective } from './directives/user-menu-control-element.directive';\nimport { UserMenuUserNameDirective } from './directives/user-menu-user-name.directive';\n\n@Component({\n selector: 'fd-user-menu',\n templateUrl: './user-menu.component.html',\n styleUrl: './user-menu.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-user-menu'\n },\n imports: [\n CommonModule,\n BarComponent,\n BarMiddleDirective,\n BarElementDirective,\n PopoverComponent,\n PopoverBodyComponent,\n PopoverControlComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n DialogHeaderComponent,\n TemplateDirective\n ],\n providers: [KeyboardSupportService, contentDensityObserverProviders()]\n})\nexport class UserMenuComponent implements AfterViewInit {\n /** Event thrown, when the user menu is opened or closed */\n isOpenChange = output<boolean>();\n\n /** Whether the user menu is in mobile mode */\n mobile = input(false, { transform: booleanAttribute });\n\n /** Whether the user menu is open */\n readonly isOpen = signal(false);\n\n /**\n * Signal indicating whether the user name element is currently visible\n * within the user menu. This updates automatically as the element\n * enters or leaves the viewport.\n *\n * Used by the template to conditionally render the sticky header.\n */\n readonly isUserNameVisible = signal(true);\n\n /**\n * Signal storing the HTML content of the user name element.\n * When the original element scrolls out of view, this content\n * is displayed in the sticky header.\n */\n readonly userNameContent = signal('');\n\n /** @hidden */\n protected readonly userMenuControl = contentChild(UserMenuControlComponent);\n\n /** @hidden */\n protected readonly userNameEl = contentChild(UserMenuUserNameDirective, { read: ElementRef });\n\n /** @hidden */\n protected readonly userMenuControlElement = contentChild(UserMenuControlElementDirective, {\n descendants: true,\n read: ElementRef\n });\n\n /** @hidden */\n protected readonly userMenuBody = contentChild(UserMenuBodyComponent, { descendants: true });\n\n /** @hidden */\n protected readonly navigationArrow = computed(() =>\n this._rtlService.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n private readonly _listItems = contentChildren(UserMenuListItemComponent, { descendants: true });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService);\n\n /** @hidden */\n private readonly _dialogService = inject(DialogService);\n\n /** @hidden */\n private readonly _changeDetectionRef = inject(ChangeDetectorRef);\n\n /** @hidden */\n private readonly _renderer = inject(Renderer2);\n\n /** @hidden */\n private _dialogRef: DialogRef | undefined;\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n constructor() {\n effect(() => {\n const isMobile = this.mobile();\n this._listItems()?.forEach((item) => item.mobile.set(isMobile));\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n const isMobile = this.mobile();\n this._listItems()?.forEach((item) => item.mobile.set(isMobile));\n\n const el = this.userNameEl()?.nativeElement;\n\n if (!el) {\n return;\n }\n\n // logic for showing/hiding the popover header with user name on scroll\n const intersectionObserver = new IntersectionObserver(\n (entries) => {\n this.isUserNameVisible.set(entries[0].isIntersecting);\n },\n { root: null, threshold: 0, rootMargin: '-20px 0px 0px 0px' }\n );\n\n intersectionObserver.observe(el);\n\n // Initialize\n this.userNameContent.set(el.innerHTML.trim());\n\n // Watch for changes in projected content\n const mutationObserver = new MutationObserver(() => {\n this.userNameContent.set(el.innerHTML.trim());\n });\n\n mutationObserver.observe(el, {\n childList: true,\n characterData: true,\n subtree: true\n });\n\n this._destroyRef.onDestroy(() => {\n intersectionObserver.disconnect();\n mutationObserver.disconnect();\n });\n }\n\n /** Method that opens the user menu */\n open(): void {\n this.isOpenChangeHandle(true);\n }\n\n /** Method that closes the user menu */\n close(): void {\n this.isOpenChangeHandle(false);\n\n if (this._listItems().length > 0) {\n this._listItems().forEach((item) => {\n item.isOpen.set(false);\n item._elementRef?.nativeElement.querySelector('.fd-menu__link')?.classList.remove('is-active');\n });\n\n this._listItems()[0]?._tabIndex$.set(0);\n }\n\n this._clearSubmenu();\n this._dialogRef?.close();\n }\n\n /** Method that opens the user menu in dialog (for mobile mode) */\n openDialog(dialogTemplate: TemplateRef<any>): void {\n this._dialogRef = this._dialogService.open(dialogTemplate, {\n mobile: true,\n verticalPadding: false,\n horizontalPadding: false,\n ariaLabelledBy: 'fd-user-menu-header',\n ariaDescribedBy: 'fd-user-menu-body',\n contentDensity: ContentDensityMode.COZY\n });\n\n const refSub = this._dialogRef.afterClosed.subscribe({\n next: () => {\n this.userMenuControl()?.focus();\n refSub.unsubscribe();\n },\n error: (type) => {\n if (type === 'escape') {\n this._clearSubmenu();\n refSub.unsubscribe();\n }\n }\n });\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n if (this.isOpen() === isOpen) {\n return;\n }\n\n this.isOpen.set(isOpen);\n this.isOpenChange.emit(isOpen);\n\n if (!isOpen && !this.mobile()) {\n this.userMenuControl()?.focus();\n }\n\n const userMenuControlEl = this.userMenuControlElement()?.nativeElement;\n\n this.userMenuControlElement()?.nativeElement &&\n (isOpen\n ? this._renderer.addClass(userMenuControlEl, 'is-active')\n : this._renderer.removeClass(userMenuControlEl, 'is-active'));\n\n this._changeDetectionRef.detectChanges();\n }\n\n /** @hidden */\n private _clearSubmenu(): void {\n const userMenuBody = this.userMenuBody();\n if (userMenuBody) {\n userMenuBody.clearSubmenu();\n }\n }\n}\n","@if (!mobile()) {\n <fd-popover\n [isOpen]=\"isOpen()\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [focusAutoCapture]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [focusTrapped]=\"true\"\n [disableScrollbar]=\"true\"\n [noArrow]=\"false\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </fd-popover-control>\n <fd-popover-body fd-user-menu-popover-control>\n <div class=\"fd-user-menu__popover-wrapper\">\n <div\n fd-popover-body-header\n class=\"fd-user-menu__scroll-header\"\n [class.hidden]=\"isUserNameVisible()\"\n role=\"presentation\"\n aria-hidden=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"header\"></ng-container>\n </div>\n\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n\n <div fd-popover-body-footer>\n <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\n </div>\n </div>\n </fd-popover-body>\n </fd-popover>\n} @else {\n <span (click)=\"openDialog(dialogTemplate)\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </span>\n\n <ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (userMenuBody()?.bodyHeader()) {\n <ng-template fdkTemplate=\"header\">\n <ng-container\n *ngTemplateOutlet=\"userMenuBody()?.bodyHeader() ?? null; context: { dialogRef: dialog }\"\n >\n </ng-container>\n </ng-template>\n }\n </fd-dialog-header>\n <fd-dialog-body style=\"padding: 0\">\n <ng-container *ngTemplateOutlet=\"body\"></ng-container>\n </fd-dialog-body>\n <fd-dialog-footer>\n <ng-template fdkTemplate=\"customFooter\">\n <ng-container *ngTemplateOutlet=\"footer\"></ng-container>\n </ng-template>\n </fd-dialog-footer>\n </fd-dialog>\n </ng-template>\n}\n\n<ng-template #control>\n <ng-content select=\"fd-user-menu-control\" />\n</ng-template>\n\n<ng-template #header>\n <div fd-popover-body-header>\n <div fd-bar barDesign=\"header\">\n <div fd-bar-middle>\n <fd-bar-element>\n <div\n class=\"fd-user-menu__user-name fd-user-menu__user-name--truncate\"\n [innerHTML]=\"userNameContent()\"\n ></div>\n </fd-bar-element>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #body>\n <ng-content select=\"fd-user-menu-body\" />\n</ng-template>\n\n<ng-template #footer>\n <ng-content select=\"fd-user-menu-footer\" />\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-header-container]',\n host: {\n class: 'fd-user-menu__header-container'\n }\n})\nexport class UserMenuHeaderContainerDirective {}\n","import { Directive } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-header]',\n host: {\n class: 'fd-user-menu__header'\n }\n})\nexport class UserMenuHeaderDirective {}\n","import { booleanAttribute, Directive, input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fd-user-menu-subline]',\n host: {\n class: 'fd-user-menu__subline',\n '[class.fd-user-menu__subline--truncate]': 'truncate()'\n }\n})\nexport class UserMenuSublineDirective {\n /** Whether the text should truncate with ellipsis. */\n truncate = input(false, { transform: booleanAttribute });\n}\n","import { NgModule } from '@angular/core';\n\n// Components\nimport { UserMenuBodyComponent } from './components/user-menu-body.component';\nimport { UserMenuContentContainerComponent } from './components/user-menu-content-container.component';\nimport { UserMenuControlComponent } from './components/user-menu-control.component';\nimport { UserMenuFooterComponent } from './components/user-menu-footer.component';\nimport { UserMenuHeaderContentAreaComponent } from './components/user-menu-header-content-area.component';\nimport { UserMenuListItemComponent } from './components/user-menu-list-item.component';\nimport { UserMenuListComponent } from './components/user-menu-list.component';\nimport { UserMenuSublistComponent } from './components/user-menu-sublist.component';\nimport { UserMenuComponent } from './user-menu.component';\n\n// Directives\nimport { UserMenuControlElementDirective } from './directives/user-menu-control-element.directive';\nimport { UserMenuHeaderContainerDirective } from './directives/user-menu-header-container.directive';\nimport { UserMenuHeaderDirective } from './directives/user-menu-header.directive';\nimport { UserMenuSublineDirective } from './directives/user-menu-subline.directive';\nimport { UserMenuUserNameDirective } from './directives/user-menu-user-name.directive';\n\nconst components = [\n UserMenuComponent,\n UserMenuControlComponent,\n UserMenuBodyComponent,\n UserMenuFooterComponent,\n UserMenuListComponent,\n UserMenuSublistComponent,\n UserMenuListItemComponent,\n UserMenuContentContainerComponent,\n UserMenuHeaderContentAreaComponent,\n UserMenuHeaderDirective,\n UserMenuHeaderContainerDirective,\n UserMenuUserNameDirective,\n UserMenuSublineDirective,\n UserMenuControlElementDirective\n];\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class UserMenuModule {}\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.63.0-rc.
|
|
3
|
+
"version": "0.63.0-rc.31",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"migrations": "./schematics/migrations.json"
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"@angular/forms": "^21.0.0",
|
|
23
23
|
"@angular/platform-browser": "^21.0.0",
|
|
24
24
|
"@angular/router": "^21.0.0",
|
|
25
|
-
"@fundamental-ngx/cdk": "0.63.0-rc.
|
|
26
|
-
"@fundamental-ngx/i18n": "0.63.0-rc.
|
|
25
|
+
"@fundamental-ngx/cdk": "0.63.0-rc.31",
|
|
26
|
+
"@fundamental-ngx/i18n": "0.63.0-rc.31",
|
|
27
27
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
28
28
|
"fundamental-styles": "0.41.7",
|
|
29
29
|
"rxjs": "^7.8.0"
|
|
@@ -5,6 +5,8 @@ import { PopoverComponent } from '@fundamental-ngx/core/popover';
|
|
|
5
5
|
import { Subject } from 'rxjs';
|
|
6
6
|
|
|
7
7
|
declare class UserMenuListItemComponent implements KeyboardSupportItemInterface {
|
|
8
|
+
/** @hidden Event name for child menu item state changes */
|
|
9
|
+
private static readonly STATE_CHANGE_EVENT;
|
|
8
10
|
/** Event emitter for isOpenChange event that controls the submenu popover body */
|
|
9
11
|
readonly isOpenChange: EventEmitter<boolean>;
|
|
10
12
|
/** Event emitter for showSubmenu event */
|
|
@@ -55,6 +57,8 @@ declare class UserMenuListItemComponent implements KeyboardSupportItemInterface
|
|
|
55
57
|
private readonly _injector;
|
|
56
58
|
/** @hidden */
|
|
57
59
|
private _changeDetectionRef;
|
|
60
|
+
/** @hidden */
|
|
61
|
+
private readonly _destroyRef;
|
|
58
62
|
/** @hidden RTL service for direction detection */
|
|
59
63
|
private readonly _rtlService;
|
|
60
64
|
/** @hidden Computed signal to track RTL state */
|
|
@@ -63,8 +67,15 @@ declare class UserMenuListItemComponent implements KeyboardSupportItemInterface
|
|
|
63
67
|
private _keyboardTriggered;
|
|
64
68
|
/** @hidden Timer for delayed close on mouseleave */
|
|
65
69
|
private _hoverCloseTimer;
|
|
70
|
+
/** @hidden Track number of open child submenus */
|
|
71
|
+
private _openChildCount;
|
|
72
|
+
/** @hidden Flag indicating mouse has left the popover and close is pending */
|
|
73
|
+
private _pendingClose;
|
|
74
|
+
/** @hidden Cleanup function for child state listener */
|
|
75
|
+
private _childStateListenerCleanup;
|
|
66
76
|
/** @hidden Grace period in ms before closing submenu on mouseleave */
|
|
67
77
|
private readonly _hoverCloseDelay;
|
|
78
|
+
constructor();
|
|
68
79
|
/** @hidden */
|
|
69
80
|
focusHandler(): void;
|
|
70
81
|
/** @hidden */
|
|
@@ -78,7 +89,7 @@ declare class UserMenuListItemComponent implements KeyboardSupportItemInterface
|
|
|
78
89
|
/** @hidden Cancel close when mouse enters the submenu popover body */
|
|
79
90
|
onSubmenuMouseEnter(): void;
|
|
80
91
|
/** @hidden Schedule close when mouse leaves the submenu popover body */
|
|
81
|
-
onSubmenuMouseLeave(): void;
|
|
92
|
+
onSubmenuMouseLeave(event: MouseEvent): void;
|
|
82
93
|
/** Handles submenu selection in mobile mode */
|
|
83
94
|
onShowDetailsView(): void;
|
|
84
95
|
/** @hidden Support for KeyboardSupportItemInterface */
|
|
@@ -87,6 +98,10 @@ declare class UserMenuListItemComponent implements KeyboardSupportItemInterface
|
|
|
87
98
|
focus(): void;
|
|
88
99
|
/** @hidden */
|
|
89
100
|
isOpenChangeHandle(isOpen: boolean, popover: PopoverComponent): void;
|
|
101
|
+
/** @hidden Notify parent menu item of this item's state change */
|
|
102
|
+
private _notifyParentOfStateChange;
|
|
103
|
+
/** @hidden Setup listener for child menu item state changes */
|
|
104
|
+
private _setupChildStateListener;
|
|
90
105
|
/** @hidden Schedule a delayed close of the submenu popover */
|
|
91
106
|
private _scheduleHoverClose;
|
|
92
107
|
/** @hidden Cancel any pending hover close timer */
|