@fundamental-ngx/core 0.64.1-rc.8 → 0.64.1
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.
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +16 -4
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +87 -10
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time-picker.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-user-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
- package/package.json +3 -3
- package/schematics/package.json +1 -1
- package/types/fundamental-ngx-core-popover.d.ts +9 -1
- package/types/fundamental-ngx-core-product-switch.d.ts +34 -3
|
@@ -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/utils/focus-utils.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 { UserMenuListItemComponent } from '../components/user-menu-list-item.component';\n\n/**\n * Resets roving tabindex to the first list item.\n *\n * In a roving tabindex pattern, only one item has tabindex=\"0\" at a time,\n * allowing arrow keys to navigate within the list. This function resets\n * the pattern so the first item becomes tabbable again.\n *\n * Typically called when focus leaves the menu to ensure that when users\n * Tab back in, focus starts at the first item rather than the last-focused item.\n */\nexport function resetListFocus(items: readonly UserMenuListItemComponent[]): void {\n if (!items || items.length === 0) {\n return;\n }\n\n // Reset tabindex: first item gets 0, rest get -1\n items[0]._tabIndex$.set(0);\n for (let i = 1; i < items.length; i++) {\n items[i]._tabIndex$.set(-1);\n }\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\n /** @hidden Event name for sibling close coordination */\n private static readonly SIBLING_CLOSE_EVENT = 'fdMenuItemCloseSubmenu';\n\n /** @hidden Event name for force closing nested submenus */\n private static readonly FORCE_CLOSE_EVENT = 'fdMenuItemForceClose';\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 Cleanup function for sibling close listener */\n private _siblingCloseListenerCleanup: (() => void) | null = null;\n\n /** @hidden Grace period in ms before closing submenu on mouseleave */\n private readonly _hoverCloseDelay = 150;\n\n constructor() {\n afterNextRender(() => this._setupEventListeners(), { injector: this._injector });\n\n this._destroyRef.onDestroy(() => {\n this._childStateListenerCleanup?.();\n this._childStateListenerCleanup = null;\n this._siblingCloseListenerCleanup?.();\n this._siblingCloseListenerCleanup = 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.mobile()) {\n return;\n }\n\n this._cancelHoverCloseTimer();\n\n // Focus this item to maintain keyboard navigation state\n this.focus();\n\n // Close sibling submenus at the same nesting level\n this._closeSiblingSubmenus();\n\n // Open this item's submenu if it has one\n if (this.hasSubmenu()) {\n const popoverInstance = this.popover();\n if (popoverInstance && !this.isOpen()) {\n popoverInstance.open();\n }\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 // When closing, also close all nested child submenus\n this._closeAllNestedSubmenus(popoverBodyEl?._elementRef.nativeElement);\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 /**\n * Closes sibling menu items' submenus at the same nesting level.\n * Uses custom DOM events to coordinate between siblings.\n * Only dispatches if there are siblings that actually have submenus.\n * @hidden\n */\n private _closeSiblingSubmenus(): void {\n const thisElement = this._elementRef.nativeElement as HTMLElement;\n const parentElement = thisElement.parentElement;\n\n if (!parentElement) {\n return;\n }\n\n // Check if any siblings have submenus before dispatching the event\n // This prevents unnecessary closes when navigating within a submenu that has no submenu siblings\n const siblings = Array.from(parentElement.children);\n const hasSubmenuSiblings = siblings.some((sibling) => {\n if (sibling === thisElement) {\n return false;\n }\n // Check if this sibling has a popover (indicating a submenu)\n return sibling.querySelector('fd-popover') !== null;\n });\n\n if (!hasSubmenuSiblings) {\n // No siblings with submenus, no need to dispatch close event\n return;\n }\n\n // Dispatch an event that siblings will listen for\n const event = new CustomEvent(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, {\n detail: { sourceElement: thisElement },\n bubbles: false // Don't bubble, only direct siblings should hear it\n });\n parentElement.dispatchEvent(event);\n }\n\n /**\n * Recursively closes all nested child submenus within a popover body.\n * Called when a submenu is closing to ensure all descendants are also closed.\n * @hidden\n */\n private _closeAllNestedSubmenus(popoverBodyEl: HTMLElement): void {\n if (!popoverBodyEl) {\n return;\n }\n\n // Find all menu items with popovers inside this popover body\n const childItems = popoverBodyEl.querySelectorAll('[fd-user-menu-list-item]');\n\n childItems.forEach((itemEl: Element) => {\n const popover = itemEl.querySelector('fd-popover');\n if (popover) {\n // Find the popover body of this child item\n const childPopoverBody = popover.querySelector('fd-popover-body');\n if (childPopoverBody) {\n // Recursively close any nested submenus first\n this._closeAllNestedSubmenus(childPopoverBody as HTMLElement);\n }\n\n // Close this child item's popover by dispatching a close event\n const closeEvent = new CustomEvent(UserMenuListItemComponent.FORCE_CLOSE_EVENT, {\n bubbles: false\n });\n itemEl.dispatchEvent(closeEvent);\n }\n });\n }\n\n /**\n * Helper method to close the popover if it's open.\n * Reduces code duplication across event handlers.\n * @hidden\n */\n private _closePopover(): void {\n const popoverInstance = this.popover();\n if (popoverInstance && this.isOpen()) {\n popoverInstance.close();\n }\n }\n\n /**\n * Set up event listeners for coordinating submenu behavior.\n * Called after next render when DOM is ready.\n * @hidden\n */\n private _setupEventListeners(): void {\n const thisElement = this._elementRef.nativeElement as HTMLElement;\n const parentElement = thisElement.parentElement;\n\n if (!parentElement) {\n return;\n }\n\n // Listen for sibling close events from the parent\n const handleSiblingClose = (event: Event): void => {\n const customEvent = event as CustomEvent<{ sourceElement: HTMLElement }>;\n const sourceElement = customEvent.detail.sourceElement;\n\n // Ignore events from ourselves or non-siblings\n if (sourceElement === thisElement || sourceElement.parentElement !== parentElement) {\n return;\n }\n\n // Ignore if in different popover contexts\n const thisPopoverBody = thisElement.closest('fd-popover-body');\n const sourcePopoverBody = sourceElement.closest('fd-popover-body');\n if (thisPopoverBody !== sourcePopoverBody) {\n return;\n }\n\n this._closePopover();\n };\n\n // Listen for force close events (used when recursively closing nested submenus)\n const handleForceClose = (): void => {\n this._closePopover();\n };\n\n parentElement.addEventListener(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, handleSiblingClose);\n thisElement.addEventListener(UserMenuListItemComponent.FORCE_CLOSE_EVENT, handleForceClose);\n\n this._siblingCloseListenerCleanup = () => {\n parentElement.removeEventListener(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, handleSiblingClose);\n thisElement.removeEventListener(UserMenuListItemComponent.FORCE_CLOSE_EVENT, handleForceClose);\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 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 { resetListFocus } from '../utils/focus-utils';\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 '(click)': 'onClick($event)',\n '(focusout)': 'onFocusOut($event)'\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 onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /**\n * Reset roving tabindex when focus leaves the menu entirely,\n * so Tab re-entry starts at the first item instead of the last-focused item.\n *\n * First checks relatedTarget synchronously for quick exits, then uses\n * setTimeout(0) to defer the check until after the current event loop tick,\n * handling cases where focus transitions through multiple items before leaving\n * (relatedTarget can be temporarily null during rapid moves, but activeElement\n * will be correctly set after the current event completes).\n * @hidden\n */\n onFocusOut(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Synchronous check: if relatedTarget is known and inside menu, don't reset\n if (relatedTarget && currentTarget.contains(relatedTarget)) {\n return;\n }\n\n // Deferred check: ensure focus has fully settled before resetting\n // This handles rapid transitions where relatedTarget might be null temporarily\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement;\n if (!activeElement || !currentTarget.contains(activeElement)) {\n this._resetListFocus();\n }\n }, 0);\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 /** @hidden */\n private _resetListFocus(): void {\n if (!this._listItems || this._listItems.length === 0) {\n return;\n }\n\n resetListFocus(this._listItems.toArray());\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 { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Output, ViewEncapsulation } 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 '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)'\n },\n imports: []\n})\nexport class UserMenuControlComponent {\n /** Event emitted 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 onClick(): void {\n this.clicked.emit();\n }\n\n /**\n * Handles keyboard activation (Enter or Space).\n * Prevents default to avoid scrolling on Space.\n * Emits clicked event for mobile mode; in popover mode, the event\n * bubbles to the popover component which handles the toggle.\n * @hidden\n */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit();\n }\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 Injector,\n input,\n output,\n Renderer2,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, switchMap } from 'rxjs';\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';\nimport { resetListFocus } from './utils/focus-utils';\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 dialogTemplate = viewChild<TemplateRef<any>>('dialogTemplate');\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 /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\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 this._setupMobileControlSubscription();\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 if (this.mobile()) {\n this._closeAllSubmenus();\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 // Focus first list item when dialog loads\n // Use requestAnimationFrame for consistent timing with popover mode\n toObservable(this._dialogRef.isLoaded, { injector: this._injector })\n .pipe(\n filter((loaded) => loaded),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n requestAnimationFrame(() => {\n const firstListItem = this._listItems()[0];\n if (firstListItem) {\n firstListItem.focus();\n }\n });\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 // Close all nested submenus when the menu closes\n this._closeAllSubmenus();\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 // Focus first list item when popover opens\n // Use requestAnimationFrame to allow popover rendering to complete\n if (isOpen && !this.mobile()) {\n requestAnimationFrame(() => {\n const firstListItem = this._listItems()[0];\n if (firstListItem) {\n firstListItem.focus();\n }\n });\n }\n }\n\n /**\n * Set up subscription to user menu control clicks for mobile mode.\n * Switches to control's clicked observable when control becomes available.\n * @hidden\n */\n private _setupMobileControlSubscription(): void {\n toObservable(this.userMenuControl, { injector: this._injector })\n .pipe(\n filter((control) => !!control && this.mobile()),\n switchMap((control) => control!.clicked),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n const template = this.dialogTemplate();\n if (template) {\n this.openDialog(template);\n }\n });\n }\n\n /** @hidden */\n private _clearSubmenu(): void {\n const userMenuBody = this.userMenuBody();\n if (userMenuBody) {\n userMenuBody.clearSubmenu();\n }\n }\n\n /**\n * Closes all nested submenus by explicitly calling popover.close() on each item.\n * This ensures that when the main menu closes (e.g., via click outside),\n * all nested submenu popovers are also closed.\n * Iterates in reverse order to close deeply nested submenus before their parents.\n * @hidden\n */\n private _closeAllSubmenus(): void {\n // Close in reverse order to ensure deeply nested items close first\n const items = this._listItems();\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n const popoverInstance = item.popover();\n if (popoverInstance && item.isOpen()) {\n popoverInstance.close();\n }\n item.isOpen.set(false);\n item._elementRef?.nativeElement.querySelector('.fd-menu__link')?.classList.remove('is-active');\n }\n this._resetListFocus();\n }\n\n /**\n * Resets roving tabindex to the first list item.\n *\n * Roving tabindex preserves focus within the list (important for submenus),\n * but when tabbing back into the menu from outside, focus should start at\n * the first item, not the last-focused item. Called when focus leaves the menu.\n *\n * @hidden\n */\n private _resetListFocus(): void {\n const items = this._listItems();\n if (!items || items.length === 0) {\n return;\n }\n resetListFocus(items);\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 <ng-container *ngTemplateOutlet=\"control\"></ng-container>\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/utils/focus-utils.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 { UserMenuListItemComponent } from '../components/user-menu-list-item.component';\n\n/**\n * Resets roving tabindex to the first list item.\n *\n * In a roving tabindex pattern, only one item has tabindex=\"0\" at a time,\n * allowing arrow keys to navigate within the list. This function resets\n * the pattern so the first item becomes tabbable again.\n *\n * Typically called when focus leaves the menu to ensure that when users\n * Tab back in, focus starts at the first item rather than the last-focused item.\n */\nexport function resetListFocus(items: readonly UserMenuListItemComponent[]): void {\n if (!items || items.length === 0) {\n return;\n }\n\n // Reset tabindex: first item gets 0, rest get -1\n items[0]._tabIndex$.set(0);\n for (let i = 1; i < items.length; i++) {\n items[i]._tabIndex$.set(-1);\n }\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\n /** @hidden Event name for sibling close coordination */\n private static readonly SIBLING_CLOSE_EVENT = 'fdMenuItemCloseSubmenu';\n\n /** @hidden Event name for force closing nested submenus */\n private static readonly FORCE_CLOSE_EVENT = 'fdMenuItemForceClose';\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 Cleanup function for sibling close listener */\n private _siblingCloseListenerCleanup: (() => void) | null = null;\n\n /** @hidden Grace period in ms before closing submenu on mouseleave */\n private readonly _hoverCloseDelay = 150;\n\n constructor() {\n afterNextRender(() => this._setupEventListeners(), { injector: this._injector });\n\n this._destroyRef.onDestroy(() => {\n this._childStateListenerCleanup?.();\n this._childStateListenerCleanup = null;\n this._siblingCloseListenerCleanup?.();\n this._siblingCloseListenerCleanup = 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.mobile()) {\n return;\n }\n\n this._cancelHoverCloseTimer();\n\n // Focus this item to maintain keyboard navigation state\n this.focus();\n\n // Close sibling submenus at the same nesting level\n this._closeSiblingSubmenus();\n\n // Open this item's submenu if it has one\n if (this.hasSubmenu()) {\n const popoverInstance = this.popover();\n if (popoverInstance && !this.isOpen()) {\n popoverInstance.open();\n }\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 // When closing, also close all nested child submenus\n this._closeAllNestedSubmenus(popoverBodyEl?._elementRef.nativeElement);\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 /**\n * Closes sibling menu items' submenus at the same nesting level.\n * Uses custom DOM events to coordinate between siblings.\n * Only dispatches if there are siblings that actually have submenus.\n * @hidden\n */\n private _closeSiblingSubmenus(): void {\n const thisElement = this._elementRef.nativeElement as HTMLElement;\n const parentElement = thisElement.parentElement;\n\n if (!parentElement) {\n return;\n }\n\n // Check if any siblings have submenus before dispatching the event\n // This prevents unnecessary closes when navigating within a submenu that has no submenu siblings\n const siblings = Array.from(parentElement.children);\n const hasSubmenuSiblings = siblings.some((sibling) => {\n if (sibling === thisElement) {\n return false;\n }\n // Check if this sibling has a popover (indicating a submenu)\n return sibling.querySelector('fd-popover') !== null;\n });\n\n if (!hasSubmenuSiblings) {\n // No siblings with submenus, no need to dispatch close event\n return;\n }\n\n // Dispatch an event that siblings will listen for\n const event = new CustomEvent(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, {\n detail: { sourceElement: thisElement },\n bubbles: false // Don't bubble, only direct siblings should hear it\n });\n parentElement.dispatchEvent(event);\n }\n\n /**\n * Recursively closes all nested child submenus within a popover body.\n * Called when a submenu is closing to ensure all descendants are also closed.\n * @hidden\n */\n private _closeAllNestedSubmenus(popoverBodyEl: HTMLElement): void {\n if (!popoverBodyEl) {\n return;\n }\n\n // Find all menu items with popovers inside this popover body\n const childItems = popoverBodyEl.querySelectorAll('[fd-user-menu-list-item]');\n\n childItems.forEach((itemEl: Element) => {\n const popover = itemEl.querySelector('fd-popover');\n if (popover) {\n // Find the popover body of this child item\n const childPopoverBody = popover.querySelector('fd-popover-body');\n if (childPopoverBody) {\n // Recursively close any nested submenus first\n this._closeAllNestedSubmenus(childPopoverBody as HTMLElement);\n }\n\n // Close this child item's popover by dispatching a close event\n const closeEvent = new CustomEvent(UserMenuListItemComponent.FORCE_CLOSE_EVENT, {\n bubbles: false\n });\n itemEl.dispatchEvent(closeEvent);\n }\n });\n }\n\n /**\n * Helper method to close the popover if it's open.\n * Reduces code duplication across event handlers.\n * @hidden\n */\n private _closePopover(): void {\n const popoverInstance = this.popover();\n if (popoverInstance && this.isOpen()) {\n popoverInstance.close();\n }\n }\n\n /**\n * Set up event listeners for coordinating submenu behavior.\n * Called after next render when DOM is ready.\n * @hidden\n */\n private _setupEventListeners(): void {\n const thisElement = this._elementRef.nativeElement as HTMLElement;\n const parentElement = thisElement.parentElement;\n\n if (!parentElement) {\n return;\n }\n\n // Listen for sibling close events from the parent\n const handleSiblingClose = (event: Event): void => {\n const customEvent = event as CustomEvent<{ sourceElement: HTMLElement }>;\n const sourceElement = customEvent.detail.sourceElement;\n\n // Ignore events from ourselves or non-siblings\n if (sourceElement === thisElement || sourceElement.parentElement !== parentElement) {\n return;\n }\n\n // Ignore if in different popover contexts\n const thisPopoverBody = thisElement.closest('fd-popover-body');\n const sourcePopoverBody = sourceElement.closest('fd-popover-body');\n if (thisPopoverBody !== sourcePopoverBody) {\n return;\n }\n\n this._closePopover();\n };\n\n // Listen for force close events (used when recursively closing nested submenus)\n const handleForceClose = (): void => {\n this._closePopover();\n };\n\n parentElement.addEventListener(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, handleSiblingClose);\n thisElement.addEventListener(UserMenuListItemComponent.FORCE_CLOSE_EVENT, handleForceClose);\n\n this._siblingCloseListenerCleanup = () => {\n parentElement.removeEventListener(UserMenuListItemComponent.SIBLING_CLOSE_EVENT, handleSiblingClose);\n thisElement.removeEventListener(UserMenuListItemComponent.FORCE_CLOSE_EVENT, handleForceClose);\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 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 { resetListFocus } from '../utils/focus-utils';\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 '(click)': 'onClick($event)',\n '(focusout)': 'onFocusOut($event)'\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 onClick(event: MouseEvent): void {\n event.stopPropagation();\n }\n\n /**\n * Reset roving tabindex when focus leaves the menu entirely,\n * so Tab re-entry starts at the first item instead of the last-focused item.\n *\n * First checks relatedTarget synchronously for quick exits, then uses\n * setTimeout(0) to defer the check until after the current event loop tick,\n * handling cases where focus transitions through multiple items before leaving\n * (relatedTarget can be temporarily null during rapid moves, but activeElement\n * will be correctly set after the current event completes).\n * @hidden\n */\n onFocusOut(event: FocusEvent): void {\n const relatedTarget = event.relatedTarget as HTMLElement;\n const currentTarget = event.currentTarget as HTMLElement;\n\n // Synchronous check: if relatedTarget is known and inside menu, don't reset\n if (relatedTarget && currentTarget.contains(relatedTarget)) {\n return;\n }\n\n // Deferred check: ensure focus has fully settled before resetting\n // This handles rapid transitions where relatedTarget might be null temporarily\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement;\n if (!activeElement || !currentTarget.contains(activeElement)) {\n this._resetListFocus();\n }\n }, 0);\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 /** @hidden */\n private _resetListFocus(): void {\n if (!this._listItems || this._listItems.length === 0) {\n return;\n }\n\n resetListFocus(this._listItems.toArray());\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 { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Output, ViewEncapsulation } 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 '(click)': 'onClick()',\n '(keydown)': 'onKeydown($event)'\n },\n imports: []\n})\nexport class UserMenuControlComponent {\n /** Event emitted 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 onClick(): void {\n this.clicked.emit();\n }\n\n /**\n * Handles keyboard activation (Enter or Space).\n * Prevents default to avoid scrolling on Space.\n * Emits clicked event for mobile mode; in popover mode, the event\n * bubbles to the popover component which handles the toggle.\n * @hidden\n */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit();\n }\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 Injector,\n input,\n output,\n Renderer2,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, switchMap } from 'rxjs';\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';\nimport { resetListFocus } from './utils/focus-utils';\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 dialogTemplate = viewChild<TemplateRef<any>>('dialogTemplate');\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 /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _injector = inject(Injector);\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 this._setupMobileControlSubscription();\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 if (this.mobile()) {\n this._closeAllSubmenus();\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 // Focus first list item when dialog loads\n // Use requestAnimationFrame for consistent timing with popover mode\n toObservable(this._dialogRef.isLoaded, { injector: this._injector })\n .pipe(\n filter((loaded) => loaded),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n requestAnimationFrame(() => {\n const firstListItem = this._listItems()[0];\n if (firstListItem) {\n firstListItem.focus();\n }\n });\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 // Close all nested submenus when the menu closes\n this._closeAllSubmenus();\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 // Focus first list item when popover opens\n // Use requestAnimationFrame to allow popover rendering to complete\n if (isOpen && !this.mobile()) {\n requestAnimationFrame(() => {\n const firstListItem = this._listItems()[0];\n if (firstListItem) {\n firstListItem.focus();\n }\n });\n }\n }\n\n /**\n * Set up subscription to user menu control clicks for mobile mode.\n * Switches to control's clicked observable when control becomes available.\n * @hidden\n */\n private _setupMobileControlSubscription(): void {\n toObservable(this.userMenuControl, { injector: this._injector })\n .pipe(\n filter((control) => !!control && this.mobile()),\n switchMap((control) => control!.clicked),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n const template = this.dialogTemplate();\n if (template) {\n this.openDialog(template);\n }\n });\n }\n\n /** @hidden */\n private _clearSubmenu(): void {\n const userMenuBody = this.userMenuBody();\n if (userMenuBody) {\n userMenuBody.clearSubmenu();\n }\n }\n\n /**\n * Closes all nested submenus by explicitly calling popover.close() on each item.\n * This ensures that when the main menu closes (e.g., via click outside),\n * all nested submenu popovers are also closed.\n * Iterates in reverse order to close deeply nested submenus before their parents.\n * @hidden\n */\n private _closeAllSubmenus(): void {\n // Close in reverse order to ensure deeply nested items close first\n const items = this._listItems();\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n const popoverInstance = item.popover();\n if (popoverInstance && item.isOpen()) {\n popoverInstance.close();\n }\n item.isOpen.set(false);\n item._elementRef?.nativeElement.querySelector('.fd-menu__link')?.classList.remove('is-active');\n }\n this._resetListFocus();\n }\n\n /**\n * Resets roving tabindex to the first list item.\n *\n * Roving tabindex preserves focus within the list (important for submenus),\n * but when tabbing back into the menu from outside, focus should start at\n * the first item, not the last-focused item. Called when focus leaves the menu.\n *\n * @hidden\n */\n private _resetListFocus(): void {\n const items = this._listItems();\n if (!items || items.length === 0) {\n return;\n }\n resetListFocus(items);\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 <ng-container *ngTemplateOutlet=\"control\"></ng-container>\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.64.1
|
|
3
|
+
"version": "0.64.1",
|
|
4
4
|
"schematics": "./schematics/collection.json",
|
|
5
5
|
"ng-update": {
|
|
6
6
|
"packageGroupName": "@fundamental-ngx/core",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@angular/forms": "^22.0.0",
|
|
38
38
|
"@angular/platform-browser": "^22.0.0",
|
|
39
39
|
"@angular/router": "^22.0.0",
|
|
40
|
-
"@fundamental-ngx/cdk": "0.64.1
|
|
41
|
-
"@fundamental-ngx/i18n": "0.64.1
|
|
40
|
+
"@fundamental-ngx/cdk": "0.64.1",
|
|
41
|
+
"@fundamental-ngx/i18n": "0.64.1",
|
|
42
42
|
"@sap-theming/theming-base-content": "^11.36.0",
|
|
43
43
|
"fundamental-styles": "0.41.8",
|
|
44
44
|
"rxjs": "^7.8.0"
|