@fundamental-ngx/btp 0.62.2-rc.8 → 0.62.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-btp-navigation.mjs","sources":["../../../../libs/btp/navigation/models/navigation-content-container.class.ts","../../../../libs/btp/navigation/models/navigation.class.ts","../../../../libs/btp/navigation/models/navigation-list-item.class.ts","../../../../libs/btp/navigation/services/navigation.service.ts","../../../../libs/btp/navigation/components/navigation-list/navigation-list.component.ts","../../../../libs/btp/navigation/components/navigation-list/navigation-list.component.html","../../../../libs/btp/navigation/components/navigation-end/navigation-content-end.component.ts","../../../../libs/btp/navigation/directives/navigation-list-item-ref.directive.ts","../../../../libs/btp/navigation/models/navigation-item-link.class.ts","../../../../libs/btp/navigation/components/navigation-link/navigation-link.component.ts","../../../../libs/btp/navigation/components/navigation-link/navigation-link.component.html","../../../../libs/btp/navigation/components/navigation-item/navigation-list-item.component.ts","../../../../libs/btp/navigation/components/navigation-item/navigation-list-item.component.html","../../../../libs/btp/navigation/components/navigation-more-button/navigation-more-button.component.ts","../../../../libs/btp/navigation/components/navigation-more-button/navigation-more-button.component.html","../../../../libs/btp/navigation/components/navigation-start/navigation-content-start.component.ts","../../../../libs/btp/navigation/components/navigation-start/navigation-content-start.component.html","../../../../libs/btp/navigation/components/navigation/navigation.component.ts","../../../../libs/btp/navigation/components/navigation/navigation.component.html","../../../../libs/btp/navigation/models/navigation-data-source-item.model.ts","../../../../libs/btp/navigation/directives/navigation-list-data-source.directive.ts","../../../../libs/btp/navigation/index.ts","../../../../libs/btp/navigation/fundamental-ngx-btp-navigation.ts"],"sourcesContent":["import { DestroyRef, Signal, inject, signal } from '@angular/core';\nimport { FdbNavigationListItem } from './navigation-list-item.class';\n\nexport abstract class FdbNavigationContentContainer {\n /**\n * List containing child list items that needs to be rendered. Can be different than `allListItems$`.\n */\n abstract listItems$: Signal<FdbNavigationListItem[]>;\n /**\n * Container placement in Navigation component.\n */\n abstract placement: 'start' | 'end';\n /**\n * List containing all child navigation list items.\n */\n readonly allListItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** @hidden */\n protected readonly _destroyRef = inject(DestroyRef);\n\n /**\n * @hidden\n * List of registered navigation list items.\n * Used only with data-driven navigation component.\n */\n private readonly _registeredListItems: FdbNavigationListItem[] = [];\n\n /**\n * Registers navigation list item.\n */\n registerItem(item: FdbNavigationListItem): void {\n if (this._registeredListItems.indexOf(item) > -1) {\n return;\n }\n\n this._registeredListItems.push(item);\n\n this.allListItems$.set(this._registeredListItems);\n }\n\n /**\n * Unregisters navigation list item.\n */\n unregisterItem(item: FdbNavigationListItem): void {\n const foundIndex = this._registeredListItems.indexOf(item);\n if (foundIndex === -1) {\n return;\n }\n\n this._registeredListItems.splice(foundIndex, 1);\n\n this.allListItems$.set(this._registeredListItems);\n }\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\nimport { NavigationService } from '../services/navigation.service';\nimport { FdbNavigationListItem } from './navigation-list-item.class';\n\nexport abstract class FdbNavigation {\n abstract classList$: Signal<string[]>;\n abstract isSnapped$: Signal<boolean>;\n abstract showMoreButton$: WritableSignal<Nullable<FdbNavigationListItem>>;\n abstract _navigationItemRenderer: Signal<any>;\n abstract closeAllPopups: Subject<void>;\n abstract selectionMode: 'router' | 'click';\n abstract service: NavigationService;\n abstract setActiveItem(value: FdbNavigationListItem | null): void;\n abstract getActiveItem(): FdbNavigationListItem | null;\n abstract closePopups(): void;\n}\n","import { FocusOrigin, FocusableOption } from '@angular/cdk/a11y';\nimport { Signal, TemplateRef, computed, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { NavigationListItemMarkerDirective } from '../components/navigation-item/navigation-list-item.component';\nimport { NavigationListComponent } from '../components/navigation-list/navigation-list.component';\nimport { FdbNavigationContentContainer } from './navigation-content-container.class';\nimport { FdbNavigationItemLink } from './navigation-item-link.class';\nimport { FdbNavigation } from './navigation.class';\n\nexport const LIST_ITEM_CLASS = 'fd-navigation__list-item';\n\nexport abstract class FdbNavigationListItem implements FocusableOption {\n abstract type: 'item' | 'showMore';\n abstract separator: boolean;\n abstract spacer: boolean;\n abstract home: boolean;\n abstract isVisible$: Signal<boolean>;\n abstract skipNavigation: boolean;\n abstract placementContainer?: FdbNavigationContentContainer;\n abstract parentListItemComponent: FdbNavigationListItemCmp | null;\n abstract parentListItem: FdbNavigationListItem | null;\n abstract class$: Signal<string>;\n abstract selected$: Signal<boolean>;\n abstract id: Signal<string>;\n abstract focus(origin?: FocusOrigin | undefined): void;\n abstract toggleExpanded(): void;\n abstract keyboardExpanded(shouldExpand: boolean): void;\n abstract popoverLinkArrowDown(): void;\n abstract registerLink(link: FdbNavigationItemLink): void;\n abstract unregisterLink(link: FdbNavigationItemLink): void;\n abstract registerChildList(list: NavigationListComponent): void;\n abstract unregisterChildList(list: NavigationListComponent): void;\n abstract handleHorizontalNavigation(isExpand: boolean): void;\n abstract focusLink(closePopover?: boolean): void;\n abstract canItemBeSelected(): boolean;\n\n /** Marker directive that is attached to the rendered list item. */\n marker: Nullable<NavigationListItemMarkerDirective>;\n\n /** @hidden */\n readonly listItems$ = signal<Nullable<FdbNavigationListItem>[]>([]);\n\n /** Whether item has child items. */\n readonly hasChildren$ = computed(() => this.listItems$().length > 0);\n\n /** Whether popover is open. Applicable for snapped navigation state. */\n readonly popoverOpen$ = signal(false);\n\n /**\n * Link reference.\n */\n readonly link$ = signal<Nullable<FdbNavigationItemLink>>(null);\n\n /**\n * Item content renderer.\n */\n readonly renderer$ = signal<TemplateRef<any> | null>(null);\n\n /**\n * Whether the item should be hidden under \"More\" button.\n */\n readonly hidden$ = signal(false);\n\n /**\n * Whether the item is in overflow menu. Applicable only when the navigation is in snapped mode.\n */\n readonly isOverflow$ = computed(() => this.navigation.isSnapped$() && this.hidden$());\n\n /**\n * Item Hierarchy level in navigation tree.\n */\n readonly level$ = computed(() => (this.parentListItem?.level$() || 0) + 1);\n\n /**\n * Normalized level. Calculated based on location of the item, whether it is inside group or not.\n * Can be different than `level$`.\n */\n readonly normalizedLevel$ = computed(() => {\n if (!this.parentListItem) {\n return this.inGroup$() ? this.level$() : this.level$() + 1;\n }\n\n return this.parentListItem.normalizedLevel$() + 1;\n });\n\n /**\n * Whether the List item should be marked as selected.\n * Based on a `snapped` state will determine whether to highlight the link if it, or it's child links are active.\n */\n readonly isActiveAttr$ = computed(\n () =>\n this.selected$() ||\n this.link$()?.isActive$() ||\n (this.navigation.isSnapped$() && this.listItems$().some((item) => item?.isActiveAttr$()))\n );\n\n /**\n * Whether the item is inside group.\n */\n readonly inGroup$ = computed(() => (this.parentListItem ? this.parentListItem.inGroup$() : this.isGroup$()));\n\n /** @hidden */\n readonly expanded$ = signal<boolean>(false);\n\n /** @hidden */\n readonly isGroup$ = signal(false);\n\n /** @hidden */\n readonly disabled$ = signal(false);\n\n /** Navigation container reference. */\n readonly navigation = inject(FdbNavigation);\n}\n\nexport abstract class FdbNavigationListItemCmp extends FdbNavigationListItem {}\n","import { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FdbNavigationListItem } from '../models/navigation-list-item.class';\n\n@Injectable()\nexport class NavigationService {\n /** Currently active list item. */\n currentItem$ = new Subject<FdbNavigationListItem>();\n\n /** Currently selected item (for click-based selection mode). */\n selectedItem$ = signal<FdbNavigationListItem | null>(null);\n\n /** Subject to notify when an overflow item is selected and should be promoted. */\n overflowItemSelected$ = new Subject<FdbNavigationListItem>();\n\n /** Subject to notify when selection changes to clear manual selections */\n selectionChanged$ = new Subject<FdbNavigationListItem | null>();\n\n /**\n * Set the selected item.\n * @param item The item to select, or null to clear selection.\n */\n setSelectedItem(item: FdbNavigationListItem | null): void {\n this.selectedItem$.set(item);\n\n // Notify that selection has changed so other items can clear their manual selection\n this.selectionChanged$.next(item);\n\n // Handle smart overflow promotion logic\n if (item) {\n // Case 1: Child items promote their parent when the parent is in overflow\n if (item.parentListItem && item.parentListItem.isOverflow$()) {\n this.overflowItemSelected$.next(item.parentListItem);\n }\n // Case 2: Regular overflow items promote themselves\n else if (item.isOverflow$()) {\n this.overflowItemSelected$.next(item);\n }\n }\n }\n\n /**\n * Get the currently selected item.\n * @returns The currently selected item, or null if none is selected.\n */\n getSelectedItem(): FdbNavigationListItem | null {\n return this.selectedItem$();\n }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationService } from '../../services/navigation.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ul[fdb-navigation-list]',\n imports: [NgTemplateOutlet],\n templateUrl: './navigation-list.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-navigation__list',\n tabindex: '-1'\n }\n})\nexport class NavigationListComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('listItems')\n set _listItems(value: Nullable<FdbNavigationListItem>[]) {\n this._listItemsArray = value;\n this.listItems$.set(value);\n this._setupKeyManager();\n }\n\n get _listItems(): Nullable<FdbNavigationListItem>[] {\n return this._listItemsArray;\n }\n\n /** List Role. */\n @HostBinding('attr.role')\n get _role(): 'tree' | 'menubar' | 'group' | 'menu' {\n return this.computedRole();\n }\n\n @Input()\n role: 'tree' | 'menubar' | 'group' | 'menu' = 'tree';\n\n /**\n * aria-label for the navigation list.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('ariaLabel')\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('ariaRoleDescription')\n @HostBinding('attr.aria-roledescription')\n ariaRoleDescription: Nullable<string> = null;\n\n /** Whether the list is for parent items. */\n @HostBinding('class.fd-navigation__list--parent-items')\n @Input({ transform: booleanAttribute })\n parentItems = false;\n\n /** Whether the list is for child items. */\n @HostBinding('class.fd-navigation__list--child-items')\n @Input({ transform: booleanAttribute })\n childItems = false;\n\n /** Whether the list should not grow in height. */\n @HostBinding('class.fd-navigation__list--no-grow')\n @Input({ transform: booleanAttribute })\n noGrow = false;\n\n /** Whether the list should handle keyboard navigation. */\n @Input({ transform: booleanAttribute })\n withKeyboardNavigation = false;\n\n /** Reference to the More button component if this list is inside a More button popover. */\n @Input()\n moreButtonRef: any;\n\n /** Event emitted when user tries to navigate to the item before the list itself. */\n @Output()\n focusBefore = new EventEmitter<void>();\n\n /** Event emitted when user tries to navigate to the item after the list itself. */\n @Output()\n focusAfter = new EventEmitter<void>();\n\n /** Computed role based on navigation state and input role. */\n readonly computedRole = computed(() => {\n // Prioritize explicit role input\n if (this.role && this.role !== 'tree') {\n return this.role;\n }\n\n // Check if this is in an overflow menu context (More button popover)\n const navigation = this._navigation;\n if (navigation?.isSnapped$() && this.moreButtonRef) {\n // In overflow menu, lists should have role=\"menu\"\n return 'menu';\n }\n\n // If this is a child items list or parent items list, it should have role=\"group\"\n if (this.childItems || this.parentItems) {\n return 'group';\n }\n\n if (navigation?.isSnapped$()) {\n return 'menubar';\n }\n return this.role || 'tree';\n });\n\n /** Computed aria-label for group lists based on parent item's text content. */\n readonly computedAriaLabel = computed(() => {\n try {\n // Only provide aria-label for group role lists\n if (this.computedRole() === 'group' && this._listItem) {\n const parentLink = this._listItem.link$();\n if (parentLink?.elementRef?.nativeElement) {\n // Get text content directly from the navigation link element\n // The .fd-navigation__text span contains the projected content, but we can access\n // the text content directly from the link element itself\n const linkElement = parentLink.elementRef.nativeElement;\n const textContent = linkElement.textContent?.trim();\n if (textContent) {\n return textContent;\n }\n }\n }\n return this.ariaLabel;\n } catch {\n // Fallback to default ariaLabel if DOM is not ready or there's any error\n return this.ariaLabel;\n }\n });\n\n /** List items. */\n readonly listItems$ = signal<Nullable<FdbNavigationListItem>[]>([]);\n\n /** @hidden */\n private _listItemsArray: Nullable<FdbNavigationListItem>[] = [];\n\n /** @hidden */\n private _keyManager: Nullable<FocusKeyManager<FdbNavigationListItem>>;\n\n /** @hidden */\n private readonly _navigationService = inject(NavigationService, {\n optional: true\n });\n\n /**\n * @hidden\n * Parent navigation component.\n */\n private readonly _navigation = inject(FdbNavigation, {\n optional: true\n });\n\n /**\n * @hidden\n * Parent list item.\n */\n private readonly _listItem = inject(FdbNavigationListItem, {\n optional: true\n });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private get _activeItemIndex(): number {\n return this._keyManager?.activeItemIndex ?? -1;\n }\n\n /** @hidden */\n private _renderer = inject(Renderer2);\n\n /** @hidden */\n private _elementRef = inject(ElementRef);\n\n /** @hidden */\n private _ariaLabelEffect = effect(() => {\n // This effect runs whenever the signals change, but we need to ensure\n // it doesn't run during the initial change detection cycle\n setTimeout(() => {\n this._updateAriaLabel();\n }, 0);\n });\n\n /** @hidden */\n constructor() {\n this._listItem?.registerChildList(this);\n }\n\n /**\n * @hidden\n * Handler for keyboard navigation.\n */\n @HostListener('keydown', ['$event'])\n _keydownHandler(event: KeyboardEvent): void {\n if (!this.withKeyboardNavigation) {\n return;\n }\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n event.stopImmediatePropagation();\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW) && this._activeItemIndex <= 0) {\n this.focusBefore.emit();\n return;\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW) && this._activeItemIndex === this._listItemsArray.length - 1) {\n this.focusAfter.emit();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._keyManager?.onKeydown(event);\n return;\n }\n\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n // We need to cancel event bubbling since we may have parent list that will also try to focus it's parent list item.\n event.stopImmediatePropagation();\n\n // All navigation lists use the same swapped arrow logic:\n // RIGHT arrow = expand action, LEFT arrow = collapse/go back action\n const isExpandAction = KeyUtil.isKeyCode(event, this._rtlService?.rtl() ? LEFT_ARROW : RIGHT_ARROW);\n\n if (!isExpandAction) {\n if (this.moreButtonRef) {\n if (this._listItem) {\n this._listItem.focusLink(true);\n } else {\n this.moreButtonRef.popoverOpen$.set(false);\n this.moreButtonRef.focusLink();\n }\n } else {\n this._listItem?.focusLink(true);\n }\n }\n }\n\n /** @hidden */\n setActiveItemIndex(index: number): void {\n this._keyManager?.setActiveItem(index);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._navigationService?.currentItem$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((item) => {\n this._keyManager?.setActiveItem(item);\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('withKeyboardNavigation' in changes) {\n this._setupKeyManager();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._listItem?.unregisterChildList(this);\n this._keyManager?.destroy();\n }\n\n /**\n * Updates aria-label attribute manually to avoid expression changed errors\n */\n private _updateAriaLabel(): void {\n try {\n const ariaLabel = this.computedAriaLabel();\n if (ariaLabel !== null && ariaLabel !== undefined) {\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-label', ariaLabel);\n } else {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-label');\n }\n } catch {\n if (this.ariaLabel) {\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-label', this.ariaLabel);\n }\n }\n }\n\n /** @hidden */\n private _setupKeyManager(): void {\n this._keyManager?.destroy();\n\n if (!this.withKeyboardNavigation) {\n return;\n }\n\n this._keyManager = new FocusKeyManager(this._listItemsArray as FdbNavigationListItem[])\n .withVerticalOrientation()\n .skipPredicate((item) => item.skipNavigation);\n }\n}\n","@for (item of listItems$(); track item) {\n @if (item) {\n <li [class]=\"item.class$()\" role=\"none\">\n <ng-template [ngTemplateOutlet]=\"item.renderer$()\"></ng-template>\n </li>\n <!-- Add separator after home list item. -->\n @if (item.home) {\n <li class=\"fd-navigation__list-item fd-navigation__list-item--separator\" role=\"separator\"></li>\n }\n }\n}\n<!-- Keep this for \"More\" button -->\n<ng-content></ng-content>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n Input,\n QueryList,\n ViewEncapsulation,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk';\nimport { asyncScheduler, filter, observeOn, startWith } from 'rxjs';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\n@Component({\n selector: 'fdb-navigation-content-end',\n template: `<ul\n fdb-navigation-list\n [listItems]=\"allListItems$()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaRoleDescription]=\"ariaRoleDescription\"\n ></ul>`,\n imports: [NavigationListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-navigation__container fd-navigation__container--bottom'\n },\n providers: [\n {\n provide: FdbNavigationContentContainer,\n useExisting: NavigationContentEndComponent\n }\n ]\n})\nexport class NavigationContentEndComponent extends FdbNavigationContentContainer implements AfterContentInit {\n /** Whether the list items are content-projected. Used only with data-driven navigation. */\n @Input()\n contentProjected = true;\n\n /**\n * aria-label for the navigation list.\n */\n @Input()\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n @Input()\n ariaRoleDescription: Nullable<string> = null;\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: false })\n private readonly _listItems: QueryList<FdbNavigationListItem>;\n\n /** @hidden */\n readonly listItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** Whether the container is placed on the start position, or the end position of the navigation. */\n readonly placement: 'start' | 'end' = 'end';\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listItems.changes\n .pipe(\n startWith(null),\n observeOn(asyncScheduler),\n filter(() => this.contentProjected),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.allListItems$.set(this._listItems.toArray());\n this.listItems$.set(this._listItems.toArray());\n });\n }\n}\n","import { Directive, Injector, Input, OnDestroy, TemplateRef, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FdbNavigationContentContainer } from '../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../models/navigation-list-item.class';\n\n@Directive({\n selector: '[fdbNavigationListItem]',\n standalone: true,\n providers: [\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationListItemDirective\n }\n ],\n exportAs: 'fdbListItem'\n})\nexport class NavigationListItemDirective implements OnDestroy {\n /**\n * Injector used for rendering child list item component.\n * Allows list item component to inject parent list container and register itself as a child item.\n */\n readonly injector = Injector.create({ providers: [], parent: inject(Injector) });\n\n /** @hidden */\n readonly parentNavListItemDirective = inject(NavigationListItemDirective, {\n skipSelf: true,\n optional: true\n });\n\n /**\n * Set of child directives.\n * Used to build hierarchy tree.\n */\n readonly childDirectives = signal(new Set<NavigationListItemDirective>());\n\n /**\n * @hidden\n * Navigation list item component instance.\n */\n _item: Nullable<FdbNavigationListItem>;\n\n /** @hidden */\n private readonly _contentContainer = inject(FdbNavigationContentContainer, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n this.parentNavListItemDirective?.registerChildDirective(this);\n }\n\n /**\n * Registers child list item component for further usage.\n * @param item\n */\n registerItem(item: FdbNavigationListItem): void {\n this._item = item;\n this._contentContainer?.registerItem(this._item);\n }\n\n /**\n * Removes child list item.\n */\n unregisterItem(): void {\n this._item && this._contentContainer?.unregisterItem(this._item);\n this._item = null;\n }\n\n /**\n * Registers child directive.\n */\n registerChildDirective(directive: NavigationListItemDirective): void {\n this.childDirectives.update((list) => list.add(directive));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._item && this._contentContainer?.unregisterItem(this._item);\n this._item = null;\n this.childDirectives().clear();\n }\n}\n\n@Directive({\n selector: '[fdbNavigationListItemRef]',\n standalone: true\n})\nexport class NavigationListItemRefDirective<T = any> {\n /** Type alias. */\n @Input()\n fdbNavigationListItemRefAs: T;\n /** Template reference. */\n readonly templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n /** @hidden */\n static ngTemplateContextGuard<T>(dir: NavigationListItemRefDirective<T>, ctx: unknown): ctx is { $implicit: T } {\n return true;\n }\n}\n","import { ElementRef, Signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HasElementRef, Nullable } from '@fundamental-ngx/cdk/utils';\n\nexport abstract class FdbNavigationItemLink implements HasElementRef {\n abstract elementRef: ElementRef<HTMLLinkElement>;\n abstract inPopover: boolean;\n abstract isActive$: Signal<boolean | undefined>;\n abstract routerLink: Nullable<RouterLink>;\n}\n","import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n Renderer2,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { of, startWith } from 'rxjs';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\n\n@Directive({\n selector: '[fdbNavigationLinkRef]',\n standalone: true\n})\nexport class NavigationLinkRefDirective {\n /** Link template ref. */\n readonly templateRef = inject(TemplateRef);\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[fdb-navigation-link], button[fdb-navigation-link]',\n imports: [IconComponent],\n hostDirectives: [RouterLinkActive],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FdbNavigationItemLink,\n useExisting: NavigationLinkComponent\n }\n ],\n host: {\n class: 'fd-navigation__link',\n '[attr.role]': 'quickCreate ? \"button\" : \"link\"'\n },\n templateUrl: './navigation-link.component.html'\n})\nexport class NavigationLinkComponent extends FdbNavigationItemLink implements OnDestroy {\n /** @hidden */\n @Input()\n class: Nullable<string>;\n\n /** Link glyph */\n @Input()\n glyph: Nullable<string>;\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether the link is for the external resource. */\n @Input()\n external = false;\n\n /** Whether it's a quick create button. */\n @Input({ transform: booleanAttribute })\n quickCreate = false;\n\n /** Whether the link is inside popover. */\n get inPopover(): boolean {\n return !!this.elementRef.nativeElement.parentElement?.classList.contains('fd-navigation__item--title');\n }\n\n /** Element reference. */\n readonly elementRef = inject<ElementRef<HTMLLinkElement>>(ElementRef);\n\n /** @hidden */\n readonly isActive$: Signal<boolean | undefined>;\n\n /** @hidden */\n readonly _listItemComponent = inject(FdbNavigationListItem, {\n optional: true\n });\n\n /** Router link reference. Used to determine whether the list item should be rendered with external expansion button. */\n readonly routerLink = inject(RouterLink, {\n optional: true,\n self: true\n });\n\n /** @hidden */\n private readonly _routerLinkActive = inject(RouterLinkActive, {\n optional: true,\n self: true\n });\n\n /** @hidden */\n private readonly _rtl = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _navigation = inject(FdbNavigation);\n\n /** @hidden */\n private _renderer = inject(Renderer2);\n\n /** @hidden */\n private _tabIndexEffect = effect(() => {\n // Track all the signals that affect tabindex computation\n this._navigation.getActiveItem(); // Track active item changes\n const isParentPopoverOpen = this._listItemComponent?.popoverOpen$();\n const isGrandparentPopoverOpen = this._listItemComponent?.parentListItem?.popoverOpen$();\n\n const hasOpenPopover = isParentPopoverOpen || isGrandparentPopoverOpen;\n\n if (hasOpenPopover) {\n // For popover cases, update immediately to ensure tabindex is set before focus management\n this._updateTabIndex();\n } else {\n // For other cases, use setTimeout to avoid expression changed errors\n setTimeout(() => {\n this._updateTabIndex();\n }, 0);\n }\n });\n\n /** @hidden */\n constructor() {\n super();\n this._listItemComponent?.registerLink(this);\n this.isActive$ = toSignal(\n this._routerLinkActive?.isActiveChange.pipe(startWith(this._routerLinkActive.isActive)) || of(false)\n );\n }\n\n /** @hidden */\n @HostListener('click', ['$event'])\n protected _clickHandler(event: Event): void {\n // Check if this is a NavigationMoreButtonComponent (More button itself)\n if (\n this._listItemComponent &&\n 'type' in this._listItemComponent &&\n (this._listItemComponent as any).type === 'showMore'\n ) {\n return;\n }\n\n const disabled = this._listItemComponent?.disabled$?.() || false;\n\n if (disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (this.inPopover || !this._listItemComponent?.isVisible$() || this._listItemComponent?.isOverflow$()) {\n this._navigation.closePopups();\n }\n\n if (this.routerLink) {\n return;\n }\n\n // Handle selection directly if in click mode\n if (this._navigation.selectionMode === 'click' && this._listItemComponent) {\n const canSelect = this._canItemBeSelected();\n\n if (canSelect) {\n this._navigation.service.setSelectedItem(this._listItemComponent);\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n protected _keyDownHandler(event: Event): void {\n const keyboardEvent = event as KeyboardEvent;\n const isDisabled = this._listItemComponent?.disabled$?.() || false;\n if (isDisabled) {\n return;\n }\n\n // Handle Space and Enter for selection (same as click behavior)\n if (KeyUtil.isKeyCode(keyboardEvent, [SPACE, ENTER])) {\n // Check if this is a NavigationMoreButtonComponent (More button itself)\n if (\n this._listItemComponent &&\n 'type' in this._listItemComponent &&\n (this._listItemComponent as any).type === 'showMore'\n ) {\n return;\n }\n\n // Prevent default scrolling behavior for Space\n keyboardEvent.preventDefault();\n\n if (this.inPopover || !this._listItemComponent?.isVisible$() || this._listItemComponent?.isOverflow$()) {\n this._navigation.closePopups();\n }\n\n // Ignore if link has URL applied to it (let router handle it)\n if (this.routerLink) {\n return;\n }\n\n // Handle selection directly if in click mode\n if (this._navigation.selectionMode === 'click' && this._listItemComponent) {\n const canSelect = this._canItemBeSelected();\n\n if (canSelect) {\n this._navigation.service.setSelectedItem(this._listItemComponent);\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n return;\n }\n\n if (this.inPopover && KeyUtil.isKeyCode(keyboardEvent, DOWN_ARROW)) {\n this._listItemComponent?.popoverLinkArrowDown();\n return;\n }\n\n if (!KeyUtil.isKeyCode(keyboardEvent, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n // Skip keyboard expansion for More buttons - they handle their own keyboard events\n if ((this._listItemComponent as any).type === 'showMore') {\n return;\n }\n\n const expansionKey = this._rtl?.rtl() ? LEFT_ARROW : RIGHT_ARROW;\n\n this._listItemComponent?.keyboardExpanded(KeyUtil.isKeyCode(keyboardEvent, expansionKey));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._listItemComponent?.unregisterLink(this);\n }\n\n /** @hidden */\n private _updateTabIndex(): void {\n try {\n // Check if this link should have tabindex=0\n const isActiveItem = this._navigation.getActiveItem()?.link$() === this;\n\n // Check if any ancestor has an open popover\n const isParentPopoverOpen = this._listItemComponent?.popoverOpen$();\n const isGrandparentPopoverOpen = this._listItemComponent?.parentListItem?.popoverOpen$();\n\n // Check if the navigation is inside any popover body (not just navigation item popovers)\n const isInsidePopoverBody = this.elementRef.nativeElement.closest('.fd-popover__body');\n\n // When a popover is open, all links in the popover hierarchy should be focusable\n if (isParentPopoverOpen || isGrandparentPopoverOpen || isInsidePopoverBody) {\n // All links in popover context should be focusable (except disabled ones)\n const tabIndex = 0;\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', tabIndex.toString());\n } else {\n // Normal case: active item gets tabindex=0, others get -1\n const tabIndex = isActiveItem ? 0 : -1;\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', tabIndex.toString());\n }\n } catch {\n // Fallback to -1 if there's any issue during evaluation\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', '-1');\n }\n }\n\n /** @hidden */\n private _canItemBeSelected(): boolean {\n if (!this._listItemComponent) {\n return false;\n }\n\n // Group items (headers) cannot be selected\n if (this._listItemComponent.isGroup$()) {\n return false;\n }\n\n // Items with children that don't have a router link cannot be selected\n // (they should only expand/collapse)\n if (this._listItemComponent.hasChildren$() && !this.routerLink) {\n return false;\n }\n\n // Separator and spacer items cannot be selected\n if (this._listItemComponent.separator || this._listItemComponent.spacer) {\n return false;\n }\n\n // All other items (leaf items and items with both links and children) can be selected\n return true;\n }\n}\n","@if (glyph) {\n <fd-icon\n [glyph]=\"glyph\"\n [font]=\"glyphFont\"\n class=\"fd-navigation__icon\"\n [attr.role]=\"'presentation'\"\n [ariaHidden]=\"true\"\n ></fd-icon>\n}\n<span class=\"fd-navigation__text\">\n <ng-content></ng-content>\n</span>\n@if (external) {\n <span\n class=\"fd-navigation__external-link-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"external link indicator\"\n ></span>\n}\n<span\n class=\"fd-navigation__selection-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"selection indicator\"\n>\n</span>\n@if (_listItemComponent?.hasChildren$() && !inPopover && !routerLink) {\n <span\n class=\"fd-navigation__has-children-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"has children indicator, expanded\"\n >\n </span>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n ContentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n Input,\n input,\n OnDestroy,\n QueryList,\n signal,\n TemplateRef,\n ViewChild,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HasElementRef, KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { PopoverBodyComponent, PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { filter, startWith } from 'rxjs';\nimport { NavigationListItemDirective } from '../../directives/navigation-list-item-ref.directive';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport {\n FdbNavigationListItem,\n FdbNavigationListItemCmp,\n LIST_ITEM_CLASS\n} from '../../models/navigation-list-item.class';\nimport { NavigationService } from '../../services/navigation.service';\nimport { NavigationLinkRefDirective } from '../navigation-link/navigation-link.component';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\nlet navListItemUniqueId = 0;\n\n@Directive({\n selector: '[fdbNavigationListItemMarker]',\n standalone: true\n})\nexport class NavigationListItemMarkerDirective implements HasElementRef {\n /** Element reference. */\n readonly elementRef = inject(ElementRef);\n /** @hidden */\n constructor() {\n inject(NavigationListItemComponent).marker = this;\n }\n}\n\n@Component({\n selector: 'fdb-navigation-list-item',\n imports: [\n NgTemplateOutlet,\n NavigationListComponent,\n PopoverComponent,\n PopoverBodyComponent,\n NavigationListItemMarkerDirective,\n NgClass\n ],\n templateUrl: './navigation-list-item.component.html',\n styles: [],\n providers: [\n NavigationService,\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationListItemComponent\n },\n {\n provide: FdbNavigationListItemCmp,\n useExisting: NavigationListItemComponent\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NavigationListItemComponent extends FdbNavigationListItem implements AfterViewInit, OnDestroy {\n /** @hidden */\n @Input()\n set class(value: Nullable<string>) {\n this._class$.set(value);\n }\n\n get class(): Nullable<string> {\n return this._class$();\n }\n\n /** Whether the list item represents \"Home\" item. */\n @Input({ transform: booleanAttribute })\n set home(value: boolean) {\n this._home$.set(value);\n }\n\n get home(): boolean {\n return this._home$();\n }\n\n /** Whether the list item represents \"Quick create\" button. */\n @Input({ transform: booleanAttribute })\n set quickCreate(value: boolean) {\n this.quickCreate$.set(value);\n }\n\n get quickCreate(): boolean {\n return this.quickCreate$();\n }\n\n /** Whether the list item should be rendered as a separator */\n @Input({ transform: booleanAttribute })\n set separator(value: boolean) {\n this._separator$.set(value);\n }\n get separator(): boolean {\n return this._separator$();\n }\n\n /** Whether the list item should be rendered as a spacer */\n @Input({ transform: booleanAttribute })\n set spacer(value: boolean) {\n this._spacer$.set(value);\n }\n get spacer(): boolean {\n return this._spacer$();\n }\n\n /** Whether the list item should be rendered as a group. */\n @Input({ transform: booleanAttribute })\n set group(group: boolean) {\n this.isGroup$.set(group);\n }\n\n get group(): boolean {\n return this.isGroup$();\n }\n\n /** Whether the list item is expanded. */\n @Input({ transform: booleanAttribute })\n set expanded(expanded: boolean) {\n this.expanded$.set(expanded);\n }\n\n get expanded(): boolean {\n return this.expanded$();\n }\n\n /** Whether the item should be marked as selected. */\n @Input({ transform: booleanAttribute })\n set selected(selected: boolean) {\n this._manuallySelected$.set(selected);\n }\n\n get selected(): boolean {\n return this.selected$();\n }\n\n /** Whether the item is disabled. */\n @Input({ transform: booleanAttribute })\n set disabled(disabled: boolean) {\n this.disabled$.set(disabled);\n }\n\n get disabled(): boolean {\n return this.disabled$();\n }\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: false })\n listItems: QueryList<FdbNavigationListItem>;\n\n /** Link reference. */\n @ContentChild(FdbNavigationItemLink)\n set link(value: Nullable<FdbNavigationItemLink>) {\n this.link$.set(value);\n }\n\n /**\n * Link template reference.\n */\n @ContentChild(NavigationLinkRefDirective)\n linkRef: Nullable<NavigationLinkRefDirective>;\n\n /** Renderer template reference. */\n @ViewChild('renderer')\n set renderer(renderer: TemplateRef<any> | undefined) {\n afterNextRender(\n () => {\n this.renderer$.set(renderer || null);\n },\n { injector: this._injector }\n );\n }\n\n /** ID for the navigation list item. Default one is assigned if not provided. */\n id = input(`fdb-nav-list-item-${++navListItemUniqueId}`);\n\n /** Type of the list item. Whether its a standard item or a \"show more\" button container. */\n readonly type: 'item' | 'showMore' = 'item';\n\n /** List item placement container. */\n readonly placementContainer =\n inject(FdbNavigationContentContainer, {\n skipSelf: true,\n optional: true\n }) || undefined;\n\n /**\n * Whether the list item is visible in the main navigation list container.\n */\n readonly isVisible$ = computed(() => {\n if (this.isOverflow$()) {\n return false;\n }\n\n if (!this.parentListItem) {\n return this.isGroup$() ? !this.navigation.isSnapped$() : true;\n }\n\n if (this.navigation.isSnapped$()) {\n return this.normalizedLevel$() < 3;\n }\n\n return this.parentListItem.isVisible$() && this.parentListItem.expanded$();\n });\n\n /** Whether the item is disabled. Cached to avoid repeated signal calls. */\n readonly _isDisabledCached$ = computed(() => this.disabled$());\n\n /**\n * Whether the item is navigatable via the keyboard.\n */\n get skipNavigation(): boolean {\n return this.spacer || this.separator || this._isDisabledCached$();\n }\n\n /** aria-expanded attribute value. */\n readonly expandedAttr$ = computed(() =>\n this.navigation.isSnapped$() ? this.popoverOpen$() && !this.isOverflow$() : this.expanded$()\n );\n\n /** Role attribute value based on navigation state. */\n readonly roleAttr$ = computed(() => {\n if (this.navigation.isSnapped$()) {\n // In popover context (when parent list item exists), child items should be treeitem\n if (this.parentListItem && this.parentListItem.popoverOpen$()) {\n return 'treeitem';\n }\n // In overflow menu context (More button popover), items should be menuitem\n if (this.isOverflow$()) {\n return 'menuitem';\n }\n return 'menuitemradio';\n }\n return 'treeitem';\n });\n\n /** aria-checked attribute value for menuitemradio role. */\n readonly ariaCheckedAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.roleAttr$() === 'menuitemradio') {\n return this.isActiveAttr$();\n }\n return undefined;\n });\n\n /** aria-selected attribute value - kept in both expanded and snapped modes. */\n readonly ariaSelectedAttr$ = computed(() => this.isActiveAttr$());\n\n /** aria-level attribute value - only for treeitem role. */\n readonly ariaLevelAttr$ = computed(() => {\n if (!this.navigation.isSnapped$()) {\n return this.level$();\n }\n return undefined;\n });\n\n /** aria-owns attribute value for items with children. */\n readonly ariaOwnsAttr$ = computed(() => {\n if (this.hasChildren$()) {\n return `${this.id()}-list`;\n }\n return undefined;\n });\n\n /** ID attribute for child lists. */\n readonly childListIdAttr$ = computed(() => {\n if (this.hasChildren$()) {\n return `${this.id()}-list`;\n }\n return undefined;\n });\n\n /** aria-label attribute value for snapped mode menuitemradio. */\n readonly ariaLabelAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.roleAttr$() === 'menuitemradio') {\n const link = this.link$();\n if (link?.elementRef?.nativeElement) {\n const linkElement = link.elementRef.nativeElement;\n const textContent = linkElement.textContent?.trim();\n if (textContent) {\n return textContent;\n }\n }\n }\n return undefined;\n });\n\n /** Expander aria-label attribute value. */\n readonly expanderAriaLabelAttr$ = computed(() => this._expanderAriaLabel$());\n\n /** aria-haspopup attribute value for snapped mode items with children. */\n readonly ariaHasPopupAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$()) {\n // In overflow menu, items with submenus should have aria-haspopup=\"menu\"\n if (this.isOverflow$()) {\n return 'menu';\n }\n // Regular navigation items should have aria-haspopup=\"dialog\"\n return 'dialog';\n }\n return undefined;\n });\n\n /** aria-current attribute value for snapped mode items with children. */\n readonly ariaCurrentAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$()) {\n return 'page';\n }\n return undefined;\n });\n\n /** Wrapper role attribute for snapped mode popovers. */\n readonly wrapperRoleAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$() && !this.isOverflow$()) {\n return 'tree';\n }\n return undefined;\n });\n\n /** Wrapper aria-roledescription for snapped mode popovers. */\n readonly wrapperAriaRoleDescriptionAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$() && !this.isOverflow$()) {\n return this._snappedPopoverRoleDescription$();\n }\n return undefined;\n });\n\n /** Title item role for snapped mode - should be treeitem in popovers. */\n readonly titleItemRoleAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n return 'treeitem';\n }\n return this.roleAttr$();\n });\n\n /** Title item aria-selected for snapped mode - should not be selected if children are selected. */\n readonly titleItemAriaSelectedAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n // In popover, if any child is selected, the parent should not have aria-selected\n const hasSelectedChild = this.listItems$().some((item) => item?.isActiveAttr$());\n if (hasSelectedChild) {\n return false;\n }\n // Otherwise use the normal selected state\n return this.ariaSelectedAttr$();\n }\n return this.ariaSelectedAttr$();\n });\n readonly titleItemFocusable$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n // Check if the parent item has the with-expander class (two-click area)\n const parentItemElement = this.marker?.elementRef?.nativeElement;\n if (parentItemElement) {\n return parentItemElement.classList.contains('fd-navigation__item--with-expander');\n }\n return false; // Default to not focusable for one-click areas\n }\n return true;\n });\n\n /** CSS Class signal. */\n readonly class$ = computed(() =>\n [\n LIST_ITEM_CLASS,\n this._class$(),\n this._separator$() ? `${LIST_ITEM_CLASS}--separator` : '',\n this._spacer$() ? `${LIST_ITEM_CLASS}--spacer` : '',\n this._home$() ? `${LIST_ITEM_CLASS}--home` : ''\n ]\n .filter((k) => !!k)\n .join(' ')\n );\n\n /** Combined selected state - considers both manual selection and service selection. */\n readonly selected$ = computed(() => {\n // In router mode, only consider manual selection\n if (this.navigation.selectionMode === 'router') {\n return this._manuallySelected$();\n }\n\n // In click mode, check both manual selection and service selection\n // But manual selection should only be considered if no item is selected via service\n if (this.navigation.selectionMode === 'click') {\n const serviceSelected = this.navigation.service.selectedItem$() === this;\n const manuallySelected = this._manuallySelected$() && this.navigation.service.selectedItem$() === null;\n\n return serviceSelected || manuallySelected;\n }\n\n return false;\n });\n\n /** @hidden */\n readonly quickCreate$ = signal(false);\n\n /** @hidden */\n readonly _moreButtonRef$ = computed(() => this._parentNavigationList?.moreButtonRef || null);\n\n /** Optional parent list component. */\n readonly parentListItemComponent = inject(FdbNavigationListItemCmp, {\n optional: true,\n skipSelf: true\n });\n\n /** @hidden */\n get parentListItem(): FdbNavigationListItem | null {\n return (\n this._parentNavigationListItemDirective?.parentNavListItemDirective?._item || this.parentListItemComponent\n );\n }\n\n /**\n * @hidden\n * Popover position. Changes based on rtl value.\n */\n protected readonly popoverPlacement = computed<Placement>(() => (this._isRtl() ? 'left-start' : 'right-start'));\n\n /** @hidden Max-height for the overflow submenu, computed dynamically based on viewport position. */\n protected readonly overflowSubmenuMaxHeight = signal<string | null>(null);\n\n /** @hidden */\n private readonly _home$ = signal(false);\n\n /** Manual selection state signal (for router-based selection mode). */\n private readonly _manuallySelected$ = signal(false);\n\n /** @hidden */\n private readonly _class$ = signal<Nullable<string>>(null);\n\n /** @hidden */\n private readonly _separator$ = signal(false);\n\n /** @hidden */\n private readonly _spacer$ = signal(false);\n\n /** @hidden */\n private readonly _links: FdbNavigationItemLink[] = [];\n\n /** @hidden */\n private readonly _childLists: NavigationListComponent[] = [];\n\n /** @hidden */\n private _keyManager: Nullable<FocusKeyManager<FdbNavigationListItem>>;\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private _translationResolver = inject(TranslationResolver);\n\n /** Translation signal for snapped popover role description. */\n private readonly _snappedPopoverRoleDescription$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.snappedPopoverRoleDescription')\n );\n\n /** Translation signal for expander aria-label. */\n private readonly _expanderAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.expanderAriaLabel')\n );\n\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /**\n * @hidden\n * Directive that used during data-driven rendering.\n */\n private readonly _parentNavigationListItemDirective = inject(NavigationListItemDirective, { optional: true });\n\n /** @hidden */\n private readonly _parentNavigationService = inject(NavigationService, {\n skipSelf: true,\n optional: true\n });\n\n /** @hidden */\n private readonly _parentNavigationList = inject(NavigationListComponent, {\n skipSelf: true,\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _itemContainer = viewChild<ElementRef>('itemContainer');\n\n /** @hidden */\n private readonly _overflowSubmenuContainer = viewChild<ElementRef>('overflowSubmenuContainer');\n\n /** @hidden */\n constructor() {\n super();\n effect(() => {\n if (this.popoverOpen$()) {\n const listItems = this.listItems$().filter(Boolean) as FdbNavigationListItem[];\n this._keyManager = new FocusKeyManager(listItems)\n .withVerticalOrientation()\n .skipPredicate((item) => item.skipNavigation);\n } else {\n this._keyManager?.destroy();\n }\n });\n\n // We need to track child directives change and set list items based on that.\n effect(() => {\n if (!this._parentNavigationListItemDirective?.childDirectives()) {\n return;\n }\n\n const children = this._parentNavigationListItemDirective.childDirectives();\n const mappedItems = Array.from(children).map((child) => child._item);\n\n this.listItems$.set(mappedItems);\n });\n\n this._parentNavigationListItemDirective?.registerItem(this);\n\n this.navigation.closeAllPopups.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.popoverOpen$.set(false);\n });\n\n // Listen for selection changes to implement single-selection behavior\n this.navigation.service.selectionChanged$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((selectedItem) => {\n // If another item was selected and we're in click mode, clear our manual selection\n if (this.navigation.selectionMode === 'click' && selectedItem !== this && this._manuallySelected$()) {\n this._manuallySelected$.set(false);\n }\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._keyManager?.destroy();\n }\n\n /** @hidden */\n _focusBeforeList(): void {\n if (this.popoverOpen$()) {\n this._focusPopoverLink();\n }\n }\n\n /**\n * @hidden\n * When item is focused, we notify list container about it to update active index in FocusKeyManager.\n */\n _focusInHandler(): void {\n if (!this.parentListItem?.popoverOpen$() && !this.isOverflow$()) {\n this.navigation.setActiveItem(this);\n return;\n }\n this._parentNavigationService?.currentItem$.next(this);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.listItems.changes\n .pipe(\n filter(() => !this._parentNavigationListItemDirective),\n startWith(null),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.listItems$.set(this.listItems.toArray());\n });\n }\n\n /** @hidden */\n registerLink(link: FdbNavigationItemLink): void {\n if (this._links.indexOf(link) === -1) {\n this._links.push(link);\n }\n }\n\n /** @hidden */\n unregisterLink(link: FdbNavigationItemLink): void {\n this._links.splice(this._links.indexOf(link), 1);\n }\n\n /** @hidden */\n registerChildList(list: NavigationListComponent): void {\n if (this._childLists.includes(list)) {\n return;\n }\n this._childLists.push(list);\n }\n\n /** @hidden */\n unregisterChildList(list: NavigationListComponent): void {\n if (!this._childLists.includes(list)) {\n return;\n }\n this._childLists.splice(this._childLists.indexOf(list), 1);\n }\n\n /** @hidden */\n handleHorizontalNavigation(isExpand: boolean): void {\n console.log(isExpand);\n }\n\n /**\n * Callback method when Arrow down is pressed on the link in popover.\n */\n popoverLinkArrowDown(): void {\n this._keyManager?.setActiveItem(0);\n }\n\n /** @Hidden */\n _innerListKeydown(event: KeyboardEvent): void {\n if (!this.popoverOpen$()) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW) && this._keyManager?.activeItemIndex === 0) {\n this._focusPopoverLink();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW])) {\n this._keyManager?.onKeydown(event);\n return;\n }\n\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n const isGoBack = KeyUtil.isKeyCode(event, this._isRtl() ? LEFT_ARROW : RIGHT_ARROW);\n\n if (!isGoBack) {\n return;\n }\n\n this._snappedItemKeyboardExpandedHandler(false);\n }\n\n /** Toggles expanded state of the item. */\n toggleExpanded(): void {\n if (this.disabled$()) {\n return;\n }\n\n if (!this.hasChildren$()) {\n return;\n }\n\n // In snapped mode, toggle popover instead of expanded state\n if (this.navigation.isSnapped$()) {\n this.popoverOpen$.update((open) => !open);\n } else {\n this.expanded$.update((expanded) => !expanded);\n }\n }\n\n /** Handles item click for both selection and expansion based on item type and navigation mode. */\n handleItemClick(): void {\n if (this.disabled$()) {\n return;\n }\n\n // Let the navigation link handle expansion for items with links\n // Only handle expansion here for items without any links\n if (this.hasChildren$() && !this.link$()) {\n this.toggleExpanded();\n return;\n }\n\n // Handle selection in click mode for selectable items\n if (this.navigation.selectionMode === 'click' && this.canItemBeSelected()) {\n this.navigation.service.setSelectedItem(this);\n }\n }\n\n /** Handles keydown events for navigation item actions. */\n handleItemKeydown(event: KeyboardEvent): void {\n // For quick create items, execute the click action on Enter/Space\n if (this.quickCreate$() && KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n event.preventDefault();\n event.stopPropagation();\n\n // Trigger click on the link element if it exists\n const linkElement = this.link$()?.elementRef?.nativeElement;\n if (linkElement) {\n linkElement.click();\n }\n }\n }\n\n /** Callback method when user used keyboard arrows to expand/collapse list item. */\n keyboardExpanded(shouldExpand: boolean): void {\n if (this.isOverflow$()) {\n this._overflowItemKeyboardExpandedHandler(shouldExpand);\n } else if (this.navigation.isSnapped$()) {\n this._snappedItemKeyboardExpandedHandler(shouldExpand);\n } else {\n this._visibleItemKeyboardExpandedHandler(shouldExpand);\n }\n }\n\n /**\n * Focus method implementation.\n * Used by main navigation component FocusKeyManager.\n * @param origin\n */\n focus(): void {\n // If popover is open, focus will be automatically shifted to cloned link.\n if (this.popoverOpen$() && !this.isOverflow$()) {\n return;\n }\n this.focusLink();\n }\n\n /**\n * Focuses inner link element.\n * Optionally closes the popover.\n */\n focusLink(closePopover = false): void {\n this.link$()?.elementRef.nativeElement.focus();\n\n if (closePopover) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n _onPopoverOpen(isOpen: boolean, popover: PopoverComponent): void {\n // Set trigger if not already set\n const itemContainer = this._itemContainer();\n if (isOpen && !popover.trigger() && itemContainer) {\n popover.trigger.set(itemContainer);\n }\n\n this.popoverOpen$.set(isOpen);\n if (isOpen) {\n afterNextRender(\n () => {\n // Force update of tabindex for all child links before focusing\n this._ensureChildTabindexUpdated();\n setTimeout(() => {\n // Try to use the FocusKeyManager first\n if (this._keyManager) {\n this._keyManager.setActiveItem(0);\n return;\n }\n\n // Fallback: Use component data structures to find the first focusable link\n const firstFocusableLink = this._links.find(\n (link) => link.inPopover && link.elementRef?.nativeElement\n );\n\n if (firstFocusableLink) {\n firstFocusableLink.elementRef.nativeElement.focus();\n return;\n }\n\n // Alternative: Use listItems to find first item's link\n const firstListItem = this.listItems$().find((item) => item && !item.skipNavigation);\n if (firstListItem) {\n const link = firstListItem.link$();\n if (link?.elementRef?.nativeElement) {\n link.elementRef.nativeElement.focus();\n return;\n }\n }\n\n // Last resort: use the popover's built-in focus management\n try {\n const popoverBody = popover.popoverBody();\n popoverBody?._focusFirstTabbableElement(true);\n } catch (error) {\n console.error('Error focusing in popover:', error);\n\n const popoverBody = popover.popoverBody();\n const popoverBodyElement = popoverBody?._elementRef?.nativeElement;\n if (popoverBodyElement) {\n const firstFocusableElement = popoverBodyElement.querySelector(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n }\n }\n }, 0);\n },\n { injector: this._injector }\n );\n } else {\n // When popover closes, return focus to the parent link (for snapped state)\n if (this.navigation.isSnapped$()) {\n afterNextRender(\n () => {\n this.focusLink();\n },\n { injector: this._injector }\n );\n }\n }\n }\n\n /**\n * Determines if this item can be selected based on its type and structure.\n * @returns true if the item can be selected, false otherwise\n */\n canItemBeSelected(): boolean {\n // Group items (headers) cannot be selected\n if (this.isGroup$()) {\n return false;\n }\n\n // Quick create items cannot be selected (they execute actions instead)\n if (this.quickCreate$()) {\n return false;\n }\n\n // Items with children that don't have a router link cannot be selected\n // (they should only expand/collapse)\n if (this.hasChildren$() && !this.link$()?.routerLink) {\n return false;\n }\n\n // Separator and spacer items cannot be selected\n if (this.separator || this.spacer) {\n return false;\n }\n\n // All other items (leaf items and items with both links and children) can be selected\n return true;\n }\n\n /**\n * @hidden\n * Handles mouseenter on overflow items to dynamically adjust the submenu max-height.\n * Uses requestAnimationFrame to ensure the browser has laid out the submenu\n * (which transitions from display:none to display:block via CSS :hover)\n * before measuring its viewport position.\n */\n onOverflowItemMouseEnter(): void {\n if (!this.isOverflow$() || !this.hasChildren$()) {\n return;\n }\n\n const submenuEl = this._overflowSubmenuContainer()?.nativeElement;\n if (!submenuEl) {\n return;\n }\n\n // Wait for the browser to complete layout after CSS :hover makes the submenu visible\n requestAnimationFrame(() => {\n const rect = submenuEl.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const margin = 16; // 1rem safety margin from viewport edge\n const availableHeight = viewportHeight - rect.top - margin;\n\n if (availableHeight > 0) {\n this.overflowSubmenuMaxHeight.set(`${availableHeight}px`);\n }\n });\n }\n\n private _focusPopoverLink(): void {\n this._links.find((link) => link.inPopover)?.elementRef.nativeElement.focus();\n }\n\n /** @hidden */\n private _ensureChildTabindexUpdated(): void {\n // When popover is open, all links should be focusable\n this._links.forEach((link) => {\n if (link.elementRef?.nativeElement) {\n // Simple logic: if any popover is open in the hierarchy, all links are focusable\n const tabIndex = this.popoverOpen$() ? 0 : -1;\n link.elementRef.nativeElement.setAttribute('tabindex', tabIndex.toString());\n }\n });\n }\n\n /** @hidden */\n private _visibleItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (!this.hasChildren$()) {\n if (!shouldExpand) {\n this.parentListItem?.focus();\n }\n return;\n }\n\n if (!shouldExpand) {\n // If item already collapsed, shift focus to parent link\n if (!this.expanded$()) {\n this.parentListItem?.focus();\n return;\n }\n this.expanded$.set(false);\n } else {\n if (this.expanded$()) {\n this.listItems.first?.focus();\n return;\n }\n this.expanded$.set(true);\n }\n }\n\n /** @hidden */\n private _snappedItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (!this.hasChildren$()) {\n return;\n }\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n this.link$()?.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * @hidden\n * Method used to handle keyboard navigation for list item that is inside overflow container.\n */\n private _overflowItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (shouldExpand && this._childLists.length > 0) {\n const firstList = this._childLists[0];\n firstList.setActiveItemIndex(0);\n }\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n this.link?.elementRef.nativeElement.focus();\n }\n }\n}\n","<!-- General renderer. -->\n<ng-template #renderer>\n @if (!separator) {\n <div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup$()\"\n [class.fd-navigation__item--create]=\"quickCreate$()\"\n [class.fd-navigation__item--child]=\"normalizedLevel$() > 2\"\n [class.fd-navigation__item--overflow]=\"isOverflow$()\"\n [class.fd-navigation__item--with-expander]=\"!!link$()?.routerLink && hasChildren$()\"\n [class.fd-navigation__item--disabled]=\"disabled$()\"\n [attr.id]=\"id()\"\n [attr.role]=\"roleAttr$()\"\n [attr.aria-level]=\"ariaLevelAttr$()\"\n [attr.aria-label]=\"ariaLabelAttr$()\"\n [attr.aria-selected]=\"ariaSelectedAttr$()\"\n [attr.aria-checked]=\"ariaCheckedAttr$()\"\n [attr.aria-expanded]=\"expandedAttr$()\"\n [attr.aria-disabled]=\"disabled$()\"\n [attr.aria-owns]=\"ariaOwnsAttr$()\"\n [attr.aria-haspopup]=\"ariaHasPopupAttr$()\"\n [attr.aria-current]=\"ariaCurrentAttr$()\"\n [attr.normalized-level]=\"normalizedLevel$()\"\n (focusin)=\"_focusInHandler()\"\n (click)=\"handleItemClick()\"\n (keydown)=\"handleItemKeydown($event)\"\n (mouseenter)=\"onOverflowItemMouseEnter()\"\n fdbNavigationListItemMarker\n #itemContainer\n >\n @if (!navigation.isSnapped$() || !hasChildren$()) {\n <ng-template\n [ngTemplateOutlet]=\"linkRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: true }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"snappedNavigationItemRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: itemContainer }\"\n ></ng-template>\n }\n </div>\n @if (isOverflow$() && hasChildren$()) {\n <ng-template [ngTemplateOutlet]=\"overflowItemListRenderer\"></ng-template>\n }\n @if (!navigation.isSnapped$()) {\n <ng-template [ngTemplateOutlet]=\"listRenderer\"></ng-template>\n }\n }\n</ng-template>\n<!-- Snapped navigation list item renderer. Implicit context points to the popover trigger element. -->\n<ng-template #snappedNavigationItemRenderer let-itemContainer>\n <ng-template [ngTemplateOutlet]=\"linkRenderer\" [ngTemplateOutletContext]=\"{ $implicit: false }\"></ng-template>\n @if (!isOverflow$()) {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n additionalBodyClass=\"fd-navigation__list-container\"\n [isOpen]=\"popoverOpen$()\"\n (isOpenChange)=\"_onPopoverOpen($event, popover)\"\n [trigger]=\"itemContainer\"\n [focusAutoCapture]=\"true\"\n [restoreFocusOnClose]=\"false\"\n [focusTrapped]=\"true\"\n [placement]=\"popoverPlacement()\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-body [ngClass]=\"navigation.classList$()\">\n <ng-template\n [ngTemplateOutlet]=\"wrapperRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: true }\"\n ></ng-template>\n </fd-popover-body>\n </fd-popover>\n }\n</ng-template>\n<!-- Generic link renderer. -->\n<ng-template #linkRenderer let-showToggleButton>\n <ng-template [ngTemplateOutlet]=\"linkRef?.templateRef || null\"></ng-template>\n @if (!!link$()?.routerLink && hasChildren$()) {\n <span\n class=\"fd-navigation__has-children-indicator\"\n role=\"button\"\n [attr.aria-label]=\"expanderAriaLabelAttr$()\"\n (click)=\"toggleExpanded()\"\n ></span>\n }\n</ng-template>\n<!-- Generic list renderer. Used when navigation is not snapped. -->\n<ng-template #listRenderer>\n @if (isGroup$() && normalizedLevel$() === 1) {\n <ul\n fdb-navigation-list\n [listItems]=\"listItems$()\"\n parentItems\n [moreButtonRef]=\"_moreButtonRef$()\"\n [attr.id]=\"id() + '-list'\"\n ></ul>\n } @else if (hasChildren$()) {\n <div class=\"fd-navigation__list-container\">\n <ng-template\n [ngTemplateOutlet]=\"wrapperRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: false }\"\n ></ng-template>\n </div>\n }\n</ng-template>\n<!-- Template used for rendering sublist of items for the list item that is currently in overflow menu. -->\n<ng-template #overflowItemListRenderer>\n <div\n #overflowSubmenuContainer\n class=\"fd-navigation__list-container fd-navigation__list-container--submenu fd-menu__sublist\"\n [style.max-height]=\"overflowSubmenuMaxHeight()\"\n >\n <ng-template [ngTemplateOutlet]=\"wrapperRenderer\" [ngTemplateOutletContext]=\"{ $implicit: true }\"></ng-template>\n </div>\n</ng-template>\n<!-- Generic list renderer. Implicit context defines whether the inner list should handle keyboard navigation by its own. -->\n<ng-template #wrapperRenderer let-keyboardNavigation>\n <div\n class=\"fd-navigation__list-wrapper\"\n [attr.role]=\"wrapperRoleAttr$()\"\n [attr.aria-roledescription]=\"wrapperAriaRoleDescriptionAttr$()\"\n >\n @if (navigation.isSnapped$() && !isOverflow$()) {\n <!-- If opener link itself is active, project aria-checked attribute to link repeater too for snapped mode. -->\n <div\n class=\"fd-navigation__item fd-navigation__item--title fd-navigation__item--child\"\n [attr.role]=\"titleItemRoleAttr$()\"\n [attr.aria-selected]=\"titleItemAriaSelectedAttr$()\"\n [attr.tabindex]=\"titleItemFocusable$() ? 0 : -1\"\n >\n <ng-template\n [ngTemplateOutlet]=\"linkRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: false }\"\n ></ng-template>\n </div>\n }\n <ul\n fdb-navigation-list\n [listItems]=\"listItems$() || []\"\n [childItems]=\"true\"\n [role]=\"isOverflow$() ? 'menu' : 'group'\"\n (keydown)=\"(false)\"\n (focusBefore)=\"_focusBeforeList()\"\n [withKeyboardNavigation]=\"keyboardNavigation\"\n [moreButtonRef]=\"_moreButtonRef$()\"\n [attr.id]=\"childListIdAttr$()\"\n ></ul>\n </div>\n</ng-template>\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { PopoverBodyComponent, PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationLinkComponent } from '../navigation-link/navigation-link.component';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\nexport interface NavigationMoreButtonRefContext {\n $implicit: () => void;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'li[fdb-navigation-more-button]',\n imports: [NavigationLinkComponent, NavigationListComponent, PopoverComponent, PopoverBodyComponent, NgClass],\n providers: [\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationMoreButtonComponent\n }\n ],\n templateUrl: './navigation-more-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-navigation__list-item'\n }\n})\nexport class NavigationMoreButtonComponent implements AfterViewInit {\n /** @hidden */\n @Input()\n listItems: FdbNavigationListItem[] = [];\n\n /** @hidden */\n @ViewChild(FdbNavigationItemLink)\n private readonly _link: Nullable<FdbNavigationItemLink>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n private readonly _popover: Nullable<PopoverComponent>;\n\n /** @hidden */\n @ViewChild(NavigationListComponent)\n private readonly _navigationList: Nullable<NavigationListComponent>;\n\n /** @hidden */\n customMoreRenderer: Nullable<TemplateRef<any>>;\n\n /** Whether the show more is visible. */\n isVisible$ = signal(true);\n\n /** Whether popover is open. Applicable for snapped navigation state. */\n readonly popoverOpen$ = signal(false);\n\n /** ID for the more button. */\n readonly id = signal('fdb-navigation-more-button');\n\n /** @hidden */\n readonly type = 'showMore';\n\n /** @hidden */\n readonly placementContainer = undefined;\n\n /**\n * Whether the item is in overflow menu.\n */\n readonly isOverflow$ = signal(false);\n\n /** Whether item has child items. */\n readonly hasChildren$ = signal(false);\n\n /** @hidden */\n readonly _navigation = inject(FdbNavigation);\n\n /**\n * Link reference.\n */\n readonly link$ = signal<Nullable<FdbNavigationItemLink>>(null);\n\n /** More button aria-label attribute value. */\n readonly moreButtonAriaLabelAttr$ = computed(() => this._moreButtonAriaLabel$());\n\n /** Overflow menu aria-label attribute value. */\n readonly overflowMenuAriaLabelAttr$ = computed((): string => this._overflowMenuAriaLabel$() || '');\n\n /**\n * @hidden\n * Popover position. Changes based on rtl value.\n */\n protected readonly popoverPlacement = computed<Placement>(() => (this._isRtl() ? 'left-start' : 'right-start'));\n\n /** @hidden */\n private readonly _triggerElement = viewChild<ElementRef>('trigger');\n\n /** @hidden */\n private _popoverClicked = false;\n\n /** @hidden */\n private readonly elementRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private _translationResolver = inject(TranslationResolver);\n\n /** Translation signal for more button aria-label. */\n private readonly _moreButtonAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.moreButtonAriaLabel')\n );\n\n /** Translation signal for overflow menu aria-label. */\n private readonly _overflowMenuAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.overflowMenuAriaLabel')\n );\n\n /** @hidden */\n constructor() {\n this._navigation.closeAllPopups.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe(() => {\n this.popoverOpen$.set(false);\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n // Set popover trigger reference\n const triggerElement = this._triggerElement();\n if (this._popover?.trigger && triggerElement) {\n this._popover.trigger.set(triggerElement);\n }\n }\n\n /** @hidden */\n _onPopoverOpenChange(isOpen: boolean): void {\n this.popoverOpen$.set(isOpen);\n\n // When popover opens, focus the first item\n if (isOpen) {\n // Use a short timeout to ensure the DOM is updated\n setTimeout(() => {\n if (this._navigationList) {\n let firstValidIndex = 0;\n const items = this._navigationList._listItems || [];\n for (let i = 0; i < items.length; i++) {\n if (items[i] && items[i]?.link$()?.elementRef?.nativeElement) {\n firstValidIndex = i;\n break;\n }\n }\n\n this._navigationList.setActiveItemIndex(firstValidIndex);\n return;\n }\n\n // Fallback: Focus the first item using the listItems array\n if (this.listItems && this.listItems.length > 0) {\n const firstItem = this.listItems[0];\n const link = firstItem.link$();\n\n if (link?.elementRef?.nativeElement) {\n link.elementRef.nativeElement.focus();\n return;\n }\n }\n\n // Last resort fallback: if direct access fails, try to focus any focusable element in the popover\n const popoverBody = (this._popover as any)?.popoverBody();\n const popoverBodyElement = popoverBody?._elementRef?.nativeElement;\n if (popoverBodyElement) {\n const firstFocusableElement = popoverBodyElement.querySelector(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n }\n }, 150);\n }\n }\n\n /** @hidden */\n togglePopover(withClick = false): void {\n this._popoverClicked = withClick;\n this.popoverOpen$.update((value) => !value);\n }\n\n /** @hidden */\n registerLink(): void {}\n\n /** @hidden */\n unregisterLink(): void {}\n\n /** @hidden */\n registerChildList(): void {}\n\n /** @hidden */\n unregisterChildList(): void {}\n\n /** @hidden */\n focus(): void {\n this.focusLink();\n }\n\n /**\n * Focuses inner link element.\n * Optionally closes the popover.\n */\n focusLink(closePopover = false): void {\n this._link?.elementRef.nativeElement.focus();\n if (closePopover) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n toggleExpanded(): void {}\n\n /** @hidden */\n keyboardExpanded(shouldExpand: boolean): void {\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n } else if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n _keydownPopoverToggle(event: KeyboardEvent): void {\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n const isRtl = this._isRtl();\n\n if (KeyUtil.isKeyCode(event, isRtl ? LEFT_ARROW : RIGHT_ARROW)) {\n // Open popover only if not already open\n if (!this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n }\n }\n\n /** @hidden */\n canItemBeSelected(): boolean {\n return false; // More button cannot be selected\n }\n}\n","<div\n role=\"menuitem\"\n class=\"fd-navigation__item\"\n [attr.aria-expanded]=\"popoverOpen$()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-label]=\"moreButtonAriaLabelAttr$()\"\n aria-level=\"1\"\n (click)=\"togglePopover(true)\"\n (keydown)=\"_keydownPopoverToggle($event)\"\n #trigger\n>\n <a fdb-navigation-link glyph=\"overflow\">More Items</a>\n <fd-popover\n #popover\n [triggers]=\"[]\"\n [isOpen]=\"popoverOpen$()\"\n (isOpenChange)=\"_onPopoverOpenChange($event)\"\n [focusTrapped]=\"true\"\n additionalBodyClass=\"fd-navigation__list-container fd-navigation__list-container--menu\"\n [placement]=\"popoverPlacement()\"\n >\n <fd-popover-body [ngClass]=\"_navigation.classList$()\" role=\"menu\">\n <ul\n fdb-navigation-list\n withKeyboardNavigation\n [parentItems]=\"true\"\n [ariaLabel]=\"overflowMenuAriaLabelAttr$()\"\n class=\"fd-menu__list\"\n [listItems]=\"listItems\"\n [moreButtonRef]=\"this\"\n ></ul>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { PortalModule } from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Nullable, resizeObservable } from '@fundamental-ngx/cdk';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport {\n animationFrames,\n asyncScheduler,\n debounceTime,\n filter,\n merge,\n observeOn,\n startWith,\n switchMap,\n take\n} from 'rxjs';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\nimport { NavigationMoreButtonComponent } from '../navigation-more-button/navigation-more-button.component';\n\nconst FD_NAVIGATION_OVERFLOW_ITEM_CLASS = 'fd-navigation__container--hidden-overflow';\n\n@Component({\n selector: 'fdb-navigation-content-start',\n templateUrl: './navigation-content-start.component.html',\n imports: [PortalModule, NavigationListComponent, NavigationMoreButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-navigation__container fd-navigation__container--top',\n '[style.flex-grow]': '1'\n },\n providers: [\n {\n provide: FdbNavigationContentContainer,\n useExisting: NavigationContentStartComponent\n }\n ],\n hostDirectives: [ScrollbarDirective]\n})\nexport class NavigationContentStartComponent extends FdbNavigationContentContainer implements AfterContentInit {\n /** Whether the list items are content-projected. Used only with data-driven navigation. */\n @Input()\n contentProjected = true;\n\n /**\n * aria-label for the navigation list.\n */\n @Input()\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n @Input()\n ariaRoleDescription: Nullable<string> = null;\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: true })\n private readonly _listItems: QueryList<FdbNavigationListItem>;\n\n /** @hidden */\n @ViewChild('moreContainer', { read: ElementRef, static: false })\n private readonly _moreContainer: Nullable<ElementRef>;\n\n /** @hidden */\n @ViewChild(NavigationMoreButtonComponent, { static: false })\n private readonly _showMoreButton: Nullable<FdbNavigationListItem>;\n\n /** Whether the container is placed on the start position, or the end position of the navigation. */\n readonly placement: 'start' | 'end' = 'start';\n\n /** Navigation component reference. */\n readonly navigation = inject(FdbNavigation);\n\n /** Inner List items that should be rendered. */\n readonly listItems$ = computed(() => {\n const isSnapped = this.navigation.isSnapped$();\n const totalItems = this.allListItems$().filter((item) => item.normalizedLevel$() < 3);\n return totalItems.filter((item) => {\n const normalizedLevel = item.normalizedLevel$();\n const level = item.level$();\n return isSnapped ? normalizedLevel === 2 : level === 1;\n });\n });\n\n /** @hidden */\n readonly _showMoreButton$ = signal(false);\n\n /** @hidden */\n readonly visibleItems$ = signal<FdbNavigationListItem[]>(this.listItems$());\n\n /** @hidden */\n readonly hiddenItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** @hidden */\n private _calculationInProgress = false;\n\n /** @hidden */\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** @hidden */\n private readonly _isSnappedObservable = toObservable(this.navigation.isSnapped$).pipe(\n startWith(this.navigation.isSnapped$())\n );\n\n /** @hidden */\n private readonly _listItemsObservable = toObservable(this.listItems$);\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listItems.changes\n .pipe(\n startWith(null),\n observeOn(asyncScheduler),\n filter(() => this.contentProjected),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.allListItems$.set(this._listItems.toArray());\n });\n\n const resize = resizeObservable(this._elementRef.nativeElement).pipe(debounceTime(30));\n\n merge(this._isSnappedObservable, this._listItemsObservable, resize)\n .pipe(\n switchMap(() => animationFrames().pipe(take(1))),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this._calculateVisibleItems();\n });\n\n // Listen for overflow item selections to promote them to visible\n this.navigation.service.overflowItemSelected$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((selectedItem) => {\n this._promoteOverflowItem(selectedItem);\n });\n }\n\n /**\n * @hidden\n * Calculates available space to fit the items.\n * Determines whether to show the \"More\" button if available space is not enough to fit all list items.\n */\n private _calculateVisibleItems(): void {\n if (this._calculationInProgress) {\n return;\n }\n const items = [...this.listItems$()];\n items.forEach((item) => item.hidden$.set(false));\n this.visibleItems$.set([...items]);\n this._cdr.detectChanges();\n if (!this.navigation.isSnapped$()) {\n this._showMoreButton$.set(false);\n this._calculationInProgress = false;\n this.navigation.showMoreButton$.set(null);\n return;\n }\n\n this._elementRef.nativeElement.classList.add(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n\n let availableSpace = this._elementRef.nativeElement.clientHeight - this._elementRef.nativeElement.scrollHeight;\n\n if (availableSpace >= 0) {\n this._showMoreButton$.set(false);\n this._calculationInProgress = false;\n this.navigation.showMoreButton$.set(null);\n this._elementRef.nativeElement.classList.remove(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n this._cdr.detectChanges();\n return;\n }\n\n this._showMoreButton$.set(true);\n this._cdr.detectChanges();\n availableSpace = availableSpace - (this._moreContainer?.nativeElement.clientHeight || 0);\n\n const hiddenItems: FdbNavigationListItem[] = [];\n\n // We are going from the bottom to the top and checking whether the available space is enough to fit the items.\n while (availableSpace < 0 && items.length > 0) {\n const item = items.pop();\n if (!item) {\n continue;\n }\n // Since we are going from the bottom to the top, we need to add item to the list as the first item of the array.\n hiddenItems.unshift(item);\n const itemHeight = item?.marker?.elementRef?.nativeElement?.clientHeight || 0;\n availableSpace = availableSpace + itemHeight;\n item.hidden$.set(true);\n }\n\n this._elementRef.nativeElement.classList.remove(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n\n this.visibleItems$.set([...items]);\n this.hiddenItems$.set([...hiddenItems]);\n\n this._showMoreButton$.set(hiddenItems.length > 0);\n this._cdr.detectChanges();\n\n this.navigation.showMoreButton$.set(this._showMoreButton);\n\n this._calculationInProgress = false;\n }\n\n /**\n * @hidden\n * Promotes an overflow item to be the last visible item.\n * Moves the current last visible item to overflow while preserving overflow order.\n */\n private _promoteOverflowItem(selectedItem: FdbNavigationListItem): void {\n if (!this.navigation.isSnapped$() || !this._showMoreButton$()) {\n return;\n }\n\n const currentVisible = [...this.visibleItems$()];\n const currentHidden = [...this.hiddenItems$()];\n const allItems = [...this.listItems$()]; // Original order\n\n // Find the selected item in hidden items\n const hiddenIndex = currentHidden.findIndex((item) => item === selectedItem);\n\n // If not found by object reference, try text-based matching\n let fallbackIndex = -1;\n if (hiddenIndex === -1) {\n const selectedText = selectedItem.link$()?.elementRef?.nativeElement?.textContent?.trim();\n fallbackIndex = currentHidden.findIndex(\n (item) => item?.link$()?.elementRef?.nativeElement?.textContent?.trim() === selectedText\n );\n }\n\n const finalIndex = hiddenIndex !== -1 ? hiddenIndex : fallbackIndex;\n\n if (finalIndex === -1) {\n return; // Item not found in hidden items\n }\n\n // Remove the selected item from hidden items\n const [itemToPromote] = currentHidden.splice(finalIndex, 1);\n\n // Move the last visible item to overflow, but insert it in the correct position\n // to maintain the original order\n const lastVisibleItem = currentVisible.pop();\n\n if (lastVisibleItem) {\n lastVisibleItem.hidden$.set(true);\n\n // Find the correct position in the original order\n const lastVisibleIndex = allItems.findIndex((item) => item === lastVisibleItem);\n\n // Insert the item in the correct position in hidden items to maintain order\n let insertPosition = 0;\n for (let i = 0; i < currentHidden.length; i++) {\n const hiddenItemIndex = allItems.findIndex((item) => item === currentHidden[i]);\n if (hiddenItemIndex > lastVisibleIndex) {\n break;\n }\n insertPosition++;\n }\n\n currentHidden.splice(insertPosition, 0, lastVisibleItem);\n }\n\n // Add the promoted item as the last visible item\n currentVisible.push(itemToPromote);\n itemToPromote.hidden$.set(false);\n\n // Update the signals\n this.visibleItems$.set(currentVisible);\n this.hiddenItems$.set(currentHidden);\n\n // Update the \"More\" button visibility\n this._showMoreButton$.set(currentHidden.length > 0);\n this.navigation.showMoreButton$.set(currentHidden.length > 0 ? this._showMoreButton : null);\n\n // Trigger change detection to ensure navigation items are properly updated\n this._cdr.detectChanges();\n\n // Focus the More button after promotion to maintain standard accessibility pattern\n // (focus returns to trigger when popover closes)\n setTimeout(() => {\n if (this._showMoreButton) {\n this._showMoreButton.focus();\n }\n }, 50);\n }\n}\n","<ul\n fdb-navigation-list\n [listItems]=\"visibleItems$()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaRoleDescription]=\"ariaRoleDescription\"\n></ul>\n@if (_showMoreButton$()) {\n <ul noGrow fdb-navigation-list role=\"menubar\" #moreContainer>\n <li fdb-navigation-more-button [listItems]=\"hiddenItems$()\"></li>\n </ul>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n QueryList,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport { FdbViewMode } from '@fundamental-ngx/btp/shared';\nimport { CssClassBuilder, KeyUtil, Nullable, applyCssClass } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\nimport { NavigationListItemRefDirective } from '../../directives/navigation-list-item-ref.directive';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { FdbNavigationState, FdbNavigationType } from '../../models/navigation.types';\nimport { NavigationService } from '../../services/navigation.service';\n\n@Component({\n selector: 'fdb-navigation',\n templateUrl: './navigation.component.html',\n styleUrls: ['./navigation.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n NavigationService,\n {\n provide: FdbNavigation,\n useExisting: NavigationComponent\n }\n ],\n host: {\n role: 'navigation'\n }\n})\nexport class NavigationComponent\n extends FdbNavigation\n implements CssClassBuilder, OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n /** @hidden */\n @Input()\n class: string;\n\n /**\n * aria-label for the navigation.\n */\n @Input()\n @HostBinding('attr.aria-label')\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation.\n */\n @Input()\n @HostBinding('attr.aria-roledescription')\n ariaRoleDescription: Nullable<string> = null;\n\n /**\n * Navigation mode.\n */\n @Input()\n mode: FdbViewMode = '';\n\n /**\n * Whether the navigation is rendered as an overlay.\n */\n @Input({ transform: booleanAttribute })\n isOverlay = false;\n\n /**\n * Navigation state.\n */\n @Input()\n set state(value: FdbNavigationState) {\n this.state$.set(value);\n }\n get state(): FdbNavigationState {\n return this.state$();\n }\n\n /**\n * Navigation type.\n */\n @Input()\n type: FdbNavigationType = 'vertical';\n\n /**\n * Selection mode for navigation items.\n * - 'router': Selection is handled by router link activation (default)\n * - 'click': Selection is handled by click events\n */\n @Input()\n selectionMode: 'router' | 'click' = 'router';\n\n /** @hidden */\n @ContentChild(NavigationListItemRefDirective)\n set _navigationItemRef(value: Nullable<NavigationListItemRefDirective>) {\n this._navigationItemRenderer.set(value || null);\n }\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: true })\n private readonly _navigationItems: QueryList<FdbNavigationListItem>;\n\n /**\n * State signal.\n */\n readonly state$ = signal<FdbNavigationState>('expanded');\n\n /**\n * Whether the navigation is in snapped mode.\n */\n readonly isSnapped$ = computed(() => this.state$() === 'snapped');\n\n /**\n * Whether to show \"More\" button. Applicable for `snapped` state only.\n */\n readonly showMoreButton$ = signal<Nullable<FdbNavigationListItem>>(null);\n\n /**\n * Signal for navigation classList.\n * Used by popover-based submenus.\n */\n readonly classList$ = signal<string[]>([]);\n\n /** @hidden */\n readonly elementRef = inject(ElementRef);\n\n /** Navigation service for managing selection state. */\n readonly service = inject(NavigationService);\n\n /** @hidden */\n readonly _navigationItemRenderer = signal<NavigationListItemRefDirective | null>(null);\n\n /** Stream notifies to close all popups in child list items. */\n readonly closeAllPopups = new Subject<void>();\n\n /** @hidden */\n private readonly _viewInitiated$ = signal(false);\n\n /** @hidden */\n private _keyManager: FocusKeyManager<FdbNavigationListItem>;\n\n /** @hidden */\n constructor() {\n super();\n // When show more button is shown, reset items list with added \"More button\".\n effect(() => {\n if (this._viewInitiated$()) {\n this._resetItemsList(this.showMoreButton$());\n }\n });\n }\n\n /** @hidden */\n @applyCssClass\n buildComponentCssClass(): string[] {\n this.classList$.set(\n [\n this.class,\n 'fd-navigation',\n this.mode === '' ? 'fd-navigation--compact' : '',\n `fd-navigation--${this.state}`,\n this.isOverlay && this.state === 'expanded' ? 'is-overlay' : ''\n ].filter((k) => !!k)\n );\n return [...this.classList$(), `fd-navigation--${this.type}`];\n }\n\n /**\n * @hidden\n * Main keyboard navigation handler.\n */\n @HostListener('keydown', ['$event'])\n _keyDownHandler(event: KeyboardEvent): void {\n if (!KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW])) {\n return;\n }\n\n event.preventDefault();\n\n this._keyManager.onKeydown(event);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyManager = new FocusKeyManager(this._navigationItems)\n .withVerticalOrientation()\n .skipPredicate((item) => !item.isVisible$() || item.skipNavigation);\n this._keyManager.setActiveItem(0);\n this._viewInitiated$.set(true);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._keyManager?.destroy();\n }\n\n /**\n * Returns currently focused list item.\n */\n getActiveItem(): FdbNavigationListItem | null {\n return this._keyManager.activeItem;\n }\n\n /**\n * Sets focused item.\n */\n setActiveItem(item: FdbNavigationListItem): void {\n this._keyManager.setActiveItem(item);\n }\n\n /** Notifies child list items that all popups should be closed. */\n closePopups(): void {\n this.closeAllPopups.next();\n }\n\n /**\n * Get the currently selected item when in click selection mode.\n * @returns The currently selected item, or null if none is selected.\n */\n getSelectedItem(): FdbNavigationListItem | null {\n return this.service.getSelectedItem();\n }\n\n /**\n * Set the selected item when in click selection mode.\n * @param item The item to select, or null to clear selection.\n */\n setSelectedItem(item: FdbNavigationListItem | null): void {\n this.service.setSelectedItem(item);\n }\n\n /**\n * Clear the current selection when in click selection mode.\n */\n clearSelection(): void {\n this.service.setSelectedItem(null);\n }\n\n /**\n * Get a navigation item by its ID.\n * @param id The ID of the navigation item to find.\n * @returns The navigation item with the specified ID, or null if not found.\n */\n getNavigationItemById(id: string): FdbNavigationListItem | null {\n const items = this._navigationItems.toArray();\n return this._findItemById(items, id);\n }\n\n /**\n * Set the selected item by its ID when in click selection mode.\n * @param id The ID of the navigation item to select.\n * @returns True if the item was found and selected, false otherwise.\n */\n setSelectedItemById(id: string): boolean {\n const item = this.getNavigationItemById(id);\n if (item) {\n this.setSelectedItem(item);\n return true;\n }\n return false;\n }\n\n /**\n * Helper method to find an item by ID recursively through the navigation tree.\n * @param items Array of navigation items to search through.\n * @param id The ID to search for.\n * @returns The found item or null.\n */\n private _findItemById(items: FdbNavigationListItem[], id: string): FdbNavigationListItem | null {\n for (const item of items) {\n if (item.id() === id) {\n return item;\n }\n\n if (item.listItems$().length > 0) {\n const childItems = item.listItems$().filter((child): child is FdbNavigationListItem => child !== null);\n const found = this._findItemById(childItems, id);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Updates the list of items.\n * Optionally inserts \"More\" button if overflow menu should be rendered.\n * @param showMoreButton Whether to add \"More\" button.\n */\n private _resetItemsList(showMoreButton: Nullable<FdbNavigationListItem>): void {\n const items = [...this._navigationItems.toArray()];\n const showMoreButtonIndex = items.findIndex((item) => item.type === 'showMore');\n if (!showMoreButton) {\n if (showMoreButtonIndex === -1) {\n return;\n }\n\n items.splice(showMoreButtonIndex, 1);\n\n this._navigationItems.reset(items);\n } else {\n if (showMoreButtonIndex > -1) {\n return;\n }\n\n // Find last list item from the `Start` container.\n const insertionIndex = items.findIndex((item) => {\n const listItems = item.placementContainer?.listItems$();\n if (!listItems) {\n return;\n }\n\n return item.placementContainer?.placement === 'start' && listItems[listItems.length - 1] === item;\n });\n\n if (insertionIndex === -1) {\n return;\n }\n\n items.splice(insertionIndex, 0, showMoreButton);\n this._navigationItems.reset(items);\n }\n }\n}\n","<ng-content></ng-content>\n","import {\n AbstractDataProvider,\n BaseDataSource,\n DataProvider,\n DataSourceParser,\n isDataSource\n} from '@fundamental-ngx/cdk/data-source';\nimport { Observable, isObservable } from 'rxjs';\n\nexport type NavigationDataSourceItem<T extends Record<string, any> = Record<string, any>> = {\n placement: 'start' | 'end';\n children?: NavigationDataSourceItem<T>[];\n} & T;\n\nexport class FdbNavigationDataSource<T extends NavigationDataSourceItem> extends BaseDataSource<T> {\n /** @hidden */\n limitless = false;\n /** @hidden */\n constructor(public dataProvider: AbstractDataProvider<T>) {\n super(dataProvider);\n }\n}\n\nexport class ArrayNavigationDataSource<T extends NavigationDataSourceItem> extends FdbNavigationDataSource<T> {\n /** @hidden */\n constructor(data: T[]) {\n super(new DataProvider(data));\n }\n}\n\nexport class ObservableNavigationDataSDataSource<\n T extends NavigationDataSourceItem\n> extends FdbNavigationDataSource<T> {\n /** @hidden */\n constructor(data: Observable<T[]>) {\n super(new DataProvider(data));\n }\n}\n\n/**\n * Type of acceptable objects as a datasource for the Navigation component.\n */\nexport type FdbNavigationDataSAcceptableDataSource<T extends NavigationDataSourceItem> =\n | FdbNavigationDataSource<T>\n | Observable<T[]>\n | T[];\n\nexport class NavigationDataSourceParser<T extends NavigationDataSourceItem>\n implements DataSourceParser<T, FdbNavigationDataSource<T>>\n{\n /**\n * Transforms plain array or observable into DataSource class.\n * @param source\n */\n parse(source: FdbNavigationDataSAcceptableDataSource<T>): FdbNavigationDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as FdbNavigationDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayNavigationDataSource<T>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableNavigationDataSDataSource<T>(source);\n }\n\n return undefined;\n }\n}\n","import { Directive } from '@angular/core';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER } from '@fundamental-ngx/cdk/data-source';\nimport {\n FdbNavigationDataSource,\n NavigationDataSourceItem,\n NavigationDataSourceParser\n} from '../models/navigation-data-source-item.model';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdb-navigation[dataSource]',\n standalone: true,\n providers: [\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: NavigationDataSourceParser\n }\n ]\n})\nexport class NavigationListDataSourceDirective<T extends Record<string, any>> extends DataSourceDirective<\n NavigationDataSourceItem<T>,\n FdbNavigationDataSource<NavigationDataSourceItem<T>>\n> {}\n","import { NavigationContentEndComponent } from './components/navigation-end/navigation-content-end.component';\nimport { NavigationListItemComponent } from './components/navigation-item/navigation-list-item.component';\nimport {\n NavigationLinkComponent,\n NavigationLinkRefDirective\n} from './components/navigation-link/navigation-link.component';\nimport { NavigationContentStartComponent } from './components/navigation-start/navigation-content-start.component';\nimport { NavigationComponent } from './components/navigation/navigation.component';\nimport { NavigationListDataSourceDirective } from './directives/navigation-list-data-source.directive';\nimport { NavigationListItemRefDirective } from './directives/navigation-list-item-ref.directive';\n\nexport * from './components/navigation-end/navigation-content-end.component';\nexport * from './components/navigation-item/navigation-list-item.component';\nexport * from './components/navigation-link/navigation-link.component';\nexport * from './components/navigation-start/navigation-content-start.component';\nexport * from './components/navigation/navigation.component';\nexport * from './directives/navigation-list-data-source.directive';\nexport * from './directives/navigation-list-item-ref.directive';\nexport * from './models/navigation-content-container.class';\nexport * from './models/navigation-data-source-item.model';\nexport * from './models/navigation-list-item.class';\nexport * from './models/navigation.types';\n\nexport * from './components/navigation-list/navigation-list.component';\n\nexport * from './components/navigation-more-button/navigation-more-button.component';\n\nexport const FDB_NAVIGATION = [\n NavigationComponent,\n NavigationContentStartComponent,\n NavigationContentEndComponent,\n NavigationLinkComponent,\n NavigationLinkRefDirective,\n NavigationListItemComponent,\n NavigationListItemRefDirective,\n NavigationListDataSourceDirective\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RtlService","KeyUtil","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;MAGsB,6BAA6B,CAAA;AAAnD,IAAA,WAAA,GAAA;AASI;;AAEG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA0B,EAAE,yDAAC;;AAGzC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEnD;;;;AAIG;QACc,IAAA,CAAA,oBAAoB,GAA4B,EAAE;IA4BvE;AA1BI;;AAEG;AACH,IAAA,YAAY,CAAC,IAA2B,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;YAC9C;QACJ;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAEpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACrD;AAEA;;AAEG;AACH,IAAA,cAAc,CAAC,IAA2B,EAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;AAC1D,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YACnB;QACJ;QAEA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACrD;AACH;;MC/CqB,aAAa,CAAA;AAWlC;;ACRM,MAAM,eAAe,GAAG;MAET,qBAAqB,CAAA;AAA3C,IAAA,WAAA,GAAA;;AA6Ba,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAoC,EAAE,sDAAC;;AAG1D,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,wDAAC;;AAG3D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAErC;;AAEG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAkC,IAAI,iDAAC;AAE9D;;AAEG;AACM,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAA0B,IAAI,qDAAC;AAE1D;;AAEG;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AAEhC;;AAEG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,uDAAC;AAErF;;AAEG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,kDAAC;AAE1E;;;AAGG;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC9D;YAEA,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,GAAG,CAAC;AACrD,QAAA,CAAC,4DAAC;AAEF;;;AAGG;QACM,IAAA,CAAA,aAAa,GAAG,QAAQ,CAC7B,MACI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE;aACxB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAChG;AAED;;AAEG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGnG,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;;AAGlC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;;AAGxB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;IAC/C;AAAC;AAEK,MAAgB,wBAAyB,SAAQ,qBAAqB,CAAA;AAAG;;MC7GlE,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;;AAGI,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAyB;;AAGnD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA+B,IAAI,yDAAC;;AAG1D,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,OAAO,EAAyB;;AAG5D,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAgC;AAgClE,IAAA;AA9BG;;;AAGG;AACH,IAAA,eAAe,CAAC,IAAkC,EAAA;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;QAGjC,IAAI,IAAI,EAAE;;YAEN,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE;gBAC1D,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;YACxD;;AAEK,iBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACzB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC;QACJ;IACJ;AAEA;;;AAGG;IACH,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC/B;8GA1CS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;MCuCY,uBAAuB,CAAA;;;IAGhC,IACI,UAAU,CAAC,KAAwC,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE;IAC3B;AAEA,IAAA,IAAI,UAAU,GAAA;QACV,OAAO,IAAI,CAAC,eAAe;IAC/B;;AAGA,IAAA,IACI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;;AA2IA,IAAA,IAAY,gBAAgB,GAAA;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,eAAe,IAAI,CAAC,CAAC;IAClD;;AAkBA,IAAA,WAAA,GAAA;QA5JA,IAAA,CAAA,IAAI,GAA0C,MAAM;AAEpD;;AAEG;;QAGH,IAAA,CAAA,SAAS,GAAqB,IAAI;AAElC;;AAEG;;QAIH,IAAA,CAAA,mBAAmB,GAAqB,IAAI;;QAK5C,IAAA,CAAA,WAAW,GAAG,KAAK;;QAKnB,IAAA,CAAA,UAAU,GAAG,KAAK;;QAKlB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAId,IAAA,CAAA,sBAAsB,GAAG,KAAK;;AAQ9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;AAItC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;;AAG5B,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;;YAElC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBACnC,OAAO,IAAI,CAAC,IAAI;YACpB;;AAGA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;YACnC,IAAI,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;;AAEhD,gBAAA,OAAO,MAAM;YACjB;;YAGA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;AACrC,gBAAA,OAAO,OAAO;YAClB;AAEA,YAAA,IAAI,UAAU,EAAE,UAAU,EAAE,EAAE;AAC1B,gBAAA,OAAO,SAAS;YACpB;AACA,YAAA,OAAO,IAAI,CAAC,IAAI,IAAI,MAAM;AAC9B,QAAA,CAAC,wDAAC;;AAGO,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,IAAI;;gBAEA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;oBACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACzC,oBAAA,IAAI,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE;;;;AAIvC,wBAAA,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,aAAa;wBACvD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE;wBACnD,IAAI,WAAW,EAAE;AACb,4BAAA,OAAO,WAAW;wBACtB;oBACJ;gBACJ;gBACA,OAAO,IAAI,CAAC,SAAS;YACzB;AAAE,YAAA,MAAM;;gBAEJ,OAAO,IAAI,CAAC,SAAS;YACzB;AACJ,QAAA,CAAC,6DAAC;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAoC,EAAE,sDAAC;;QAG3D,IAAA,CAAA,eAAe,GAAsC,EAAE;;AAM9C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,EAAE;AAC5D,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEF;;;AAGG;AACc,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,aAAa,EAAE;AACjD,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEF;;;AAGG;AACc,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACvD,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE;AAC9C,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAQzC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;;AAG7B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,MAAK;;;YAGnC,UAAU,CAAC,MAAK;gBACZ,IAAI,CAAC,gBAAgB,EAAE;YAC3B,CAAC,EAAE,CAAC,CAAC;AACT,QAAA,CAAC,4DAAC;AAIE,QAAA,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC;IAC3C;AAEA;;;AAGG;AAEH,IAAA,eAAe,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC9B;QACJ;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;YAClD,KAAK,CAAC,wBAAwB,EAAE;QACpC;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACvB;QACJ;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACnG,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACtB;QACJ;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YACtD;QACJ;;QAGA,KAAK,CAAC,wBAAwB,EAAE;;;QAIhC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,WAAW,CAAC;QAEnG,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClC;qBAAO;oBACH,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,oBAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;gBAClC;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;YACnC;QACJ;IACJ;;AAGA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC;IAC1C;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAChG,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC;AACzC,QAAA,CAAC,CAAC;IACN;;AAGA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,wBAAwB,IAAI,OAAO,EAAE;YACrC,IAAI,CAAC,gBAAgB,EAAE;QAC3B;IACJ;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC/B;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACpB,QAAA,IAAI;AACA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;YAC1C,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,SAAS,CAAC;YACxF;iBAAO;AACH,gBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,CAAC;YAChF;QACJ;AAAE,QAAA,MAAM;AACJ,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC;YAC7F;QACJ;IACJ;;IAGQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAC9B;QACJ;QAEA,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,eAA0C;AACjF,aAAA,uBAAuB;aACvB,aAAa,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC;IACrD;8GA9RS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,WAAA,EAAA,YAAA,CAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAwCZ,gBAAgB,CAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAKhB,gBAAgB,CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAKhB,gBAAgB,CAAA,EAAA,sBAAA,EAAA,CAAA,wBAAA,EAAA,wBAAA,EAIhB,gBAAgB,CAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,yCAAA,EAAA,kBAAA,EAAA,wCAAA,EAAA,iBAAA,EAAA,oCAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjGxC,+eAaA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDqBc,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FASjB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,OAAA,EAC1B,CAAC,gBAAgB,CAAC,EAAA,aAAA,EAEZ,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE,qBAAqB;AAC5B,wBAAA,QAAQ,EAAE;AACb,qBAAA,EAAA,QAAA,EAAA,+eAAA,EAAA;;sBAKA,KAAK;uBAAC,WAAW;;sBAYjB,WAAW;uBAAC,WAAW;;sBAKvB;;sBAOA,KAAK;uBAAC,WAAW;;sBAOjB,KAAK;uBAAC,qBAAqB;;sBAC3B,WAAW;uBAAC,2BAA2B;;sBAIvC,WAAW;uBAAC,yCAAyC;;sBACrD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAIrC,WAAW;uBAAC,wCAAwC;;sBACpD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAIrC,WAAW;uBAAC,oCAAoC;;sBAChD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAIrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAIrC;;sBAIA;;sBAIA;;sBAuHA,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AE9LjC,MAAO,6BAA8B,SAAQ,6BAA6B,CAAA;AArBhF,IAAA,WAAA,GAAA;;;QAwBI,IAAA,CAAA,gBAAgB,GAAG,IAAI;AAEvB;;AAEG;QAEH,IAAA,CAAA,SAAS,GAAqB,IAAI;AAElC;;AAEG;QAEH,IAAA,CAAA,mBAAmB,GAAqB,IAAI;;AAOnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,EAAE,sDAAC;;QAGhD,IAAA,CAAA,SAAS,GAAoB,KAAK;AAgB9C,IAAA;;IAbG,kBAAkB,GAAA;QACd,IAAI,CAAC,UAAU,CAAC;aACX,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,EACf,SAAS,CAAC,cAAc,CAAC,EACzB,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,EACnC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACjD,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAClD,QAAA,CAAC,CAAC;IACV;8GAxCS,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,2DAAA,EAAA,EAAA,SAAA,EAP3B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAoBgB,qBAAqB,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArC5B,CAAA;;;;;AAKH,UAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACG,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAaxB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBArBzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKH,UAAA,CAAA;oBACP,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA;AACD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,6BAA6B;AACtC,4BAAA,WAAW,EAAA;AACd;AACJ;AACJ,iBAAA;;sBAGI;;sBAMA;;sBAMA;;sBAIA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;;;MCxCrD,2BAA2B,CAAA;;AA+BpC,IAAA,WAAA,GAAA;AA9BA;;;AAGG;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGvE,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAC,2BAA2B,EAAE;AACtE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAEF;;;AAGG;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,IAAI,GAAG,EAA+B,2DAAC;;AASxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,6BAA6B,EAAE;AACvE,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AAIE,QAAA,IAAI,CAAC,0BAA0B,EAAE,sBAAsB,CAAC,IAAI,CAAC;IACjE;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,IAA2B,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACpD;AAEA;;AAEG;IACH,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACrB;AAEA;;AAEG;AACH,IAAA,sBAAsB,CAAC,SAAsC,EAAA;AACzD,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9D;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE;IAClC;8GAhES,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EARzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAGQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAXvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAA;AACd;AACJ,qBAAA;AACD,oBAAA,QAAQ,EAAE;AACb,iBAAA;;MAwEY,8BAA8B,CAAA;AAJ3C,IAAA,WAAA,GAAA;;AASa,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAiB,WAAW,CAAC;AAM7D,IAAA;;AAHG,IAAA,OAAO,sBAAsB,CAAI,GAAsC,EAAE,GAAY,EAAA;AACjF,QAAA,OAAO,IAAI;IACf;8GAVS,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE;AACf,iBAAA;;sBAGI;;;MCrFiB,qBAAqB,CAAA;AAK1C;;MCqBY,0BAA0B,CAAA;AAJvC,IAAA,WAAA,GAAA;;AAMa,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC7C,IAAA;8GAHY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAyBK,MAAO,uBAAwB,SAAQ,qBAAqB,CAAA;;AAsB9D,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC1G;;AAyDA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QAvEX,IAAA,CAAA,SAAS,GAAa,2BAA2B;;QAIjD,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAIhB,IAAA,CAAA,WAAW,GAAG,KAAK;;AAQV,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA8B,UAAU,CAAC;;AAM5D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,EAAE;AACxD,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGO,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE;AACrC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,EAAE;AAC1D,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE;AACvC,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG5C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;;AAG7B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,MAAK;;AAElC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE;YACnE,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE;AAExF,YAAA,MAAM,cAAc,GAAG,mBAAmB,IAAI,wBAAwB;YAEtE,IAAI,cAAc,EAAE;;gBAEhB,IAAI,CAAC,eAAe,EAAE;YAC1B;iBAAO;;gBAEH,UAAU,CAAC,MAAK;oBACZ,IAAI,CAAC,eAAe,EAAE;gBAC1B,CAAC,EAAE,CAAC,CAAC;YACT;AACJ,QAAA,CAAC,2DAAC;AAKE,QAAA,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,IAAI,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CACrB,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CACvG;IACL;;AAIU,IAAA,aAAa,CAAC,KAAY,EAAA;;QAEhC,IACI,IAAI,CAAC,kBAAkB;YACvB,MAAM,IAAI,IAAI,CAAC,kBAAkB;AAChC,YAAA,IAAI,CAAC,kBAA0B,CAAC,IAAI,KAAK,UAAU,EACtD;YACE;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,IAAI,KAAK;QAEhE,IAAI,QAAQ,EAAE;YACV,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;YACvB;QACJ;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,EAAE;AACpG,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAClC;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACvE,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAE3C,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACrE;iBAAO;;AAEH,gBAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE;YAC7C;QACJ;aAAO;;AAEH,YAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE;QAC7C;IACJ;;AAIU,IAAA,eAAe,CAAC,KAAY,EAAA;QAClC,MAAM,aAAa,GAAG,KAAsB;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,IAAI,KAAK;QAClE,IAAI,UAAU,EAAE;YACZ;QACJ;;AAGA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;;YAElD,IACI,IAAI,CAAC,kBAAkB;gBACvB,MAAM,IAAI,IAAI,CAAC,kBAAkB;AAChC,gBAAA,IAAI,CAAC,kBAA0B,CAAC,IAAI,KAAK,UAAU,EACtD;gBACE;YACJ;;YAGA,aAAa,CAAC,cAAc,EAAE;AAE9B,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,EAAE;AACpG,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;YAClC;;AAGA,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB;YACJ;;AAGA,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACvE,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;gBAE3C,IAAI,SAAS,EAAE;oBACX,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBACrE;qBAAO;;AAEH,oBAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE;gBAC7C;YACJ;iBAAO;;AAEH,gBAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE;YAC7C;YACA;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,EAAE;YAC/C;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YAC9D;QACJ;;QAGA,IAAK,IAAI,CAAC,kBAA0B,CAAC,IAAI,KAAK,UAAU,EAAE;YACtD;QACJ;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,GAAG,WAAW;AAEhE,QAAA,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC7F;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,IAAI,CAAC;IACjD;;IAGQ,eAAe,GAAA;AACnB,QAAA,IAAI;;AAEA,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI;;YAGvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE;YACnE,MAAM,wBAAwB,GAAG,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE;;AAGxF,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC;;AAGtF,YAAA,IAAI,mBAAmB,IAAI,wBAAwB,IAAI,mBAAmB,EAAE;;gBAExE,MAAM,QAAQ,GAAG,CAAC;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/F;iBAAO;;AAEH,gBAAA,MAAM,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/F;QACJ;AAAE,QAAA,MAAM;;AAEJ,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC;QAChF;IACJ;;IAGQ,kBAAkB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE;AACpC,YAAA,OAAO,KAAK;QAChB;;;AAIA,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC5D,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AACrE,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,OAAO,IAAI;IACf;8GAlQS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAkBZ,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,uBAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,qCAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,SAAA,EA9BzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;SACJ,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CL,y7BAoCA,4CDEc,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAgBd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAnBnC,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qDAAqD,WACtD,CAAC,aAAa,CAAC,EAAA,cAAA,EACR,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACjB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,qBAAqB;AAC5B,wBAAA,aAAa,EAAE;AAClB,qBAAA,EAAA,QAAA,EAAA,y7BAAA,EAAA;;sBAKA;;sBAIA;;sBAIA;;sBAIA;;sBAIA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAwErC,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBA2ChC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AE7IvC,IAAI,mBAAmB,GAAG,CAAC;MAMd,iCAAiC,CAAA;;AAI1C,IAAA,WAAA,GAAA;;AAFS,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAGpC,QAAA,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,GAAG,IAAI;IACrD;8GANS,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAJ7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAoCK,MAAO,2BAA4B,SAAQ,qBAAqB,CAAA;;IAElE,IACI,KAAK,CAAC,KAAuB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE;IACzB;;IAGA,IACI,IAAI,CAAC,KAAc,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACxB;;IAGA,IACI,WAAW,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAChC;AAEA,IAAA,IAAI,WAAW,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B;;IAGA,IACI,SAAS,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;AACA,IAAA,IAAI,SAAS,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC7B;;IAGA,IACI,MAAM,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AACA,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IAC1B;;IAGA,IACI,KAAK,CAAC,KAAc,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IAC1B;;IAGA,IACI,QAAQ,CAAC,QAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IAC3B;;IAGA,IACI,QAAQ,CAAC,QAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IAC3B;;IAGA,IACI,QAAQ,CAAC,QAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChC;AAEA,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IAC3B;;IAOA,IACI,IAAI,CAAC,KAAsC,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;;IASA,IACI,QAAQ,CAAC,QAAsC,EAAA;QAC/C,eAAe,CACX,MAAK;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;QACxC,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC/B;IACL;AAqCA;;AAEG;AACH,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE;IACrE;;AA+LA,IAAA,IAAI,cAAc,GAAA;AACd,QAAA,QACI,IAAI,CAAC,kCAAkC,EAAE,0BAA0B,EAAE,KAAK,IAAI,IAAI,CAAC,uBAAuB;IAElH;;AAuFA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;;QAlUX,IAAA,CAAA,EAAE,GAAG,KAAK,CAAC,CAAA,kBAAA,EAAqB,EAAE,mBAAmB,CAAA,CAAE,8CAAC;;QAG/C,IAAA,CAAA,IAAI,GAAwB,MAAM;;AAGlC,QAAA,IAAA,CAAA,kBAAkB,GACvB,MAAM,CAAC,6BAA6B,EAAE;AAClC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;SACb,CAAC,IAAI,SAAS;AAEnB;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAChC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,gBAAA,OAAO,KAAK;YAChB;AAEA,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAI;YACjE;AAEA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;AAC9B,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC;YACtC;AAEA,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;AAC9E,QAAA,CAAC,sDAAC;;QAGO,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAUrD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,yDAC/F;;AAGQ,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC/B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;;gBAE9B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE;AAC3D,oBAAA,OAAO,UAAU;gBACrB;;AAEA,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,oBAAA,OAAO,UAAU;gBACrB;AACA,gBAAA,OAAO,eAAe;YAC1B;AACA,YAAA,OAAO,UAAU;AACrB,QAAA,CAAC,qDAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,eAAe,EAAE;AACtE,gBAAA,OAAO,IAAI,CAAC,aAAa,EAAE;YAC/B;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,4DAAC;;QAGO,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGxD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;YACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC,MAAM,EAAE;YACxB;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,0DAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,gBAAA,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO;YAC9B;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,yDAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,gBAAA,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO;YAC9B;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,4DAAC;;AAGO,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,eAAe,EAAE;AACtE,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AACzB,gBAAA,IAAI,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE;AACjC,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;oBACjD,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE;oBACnD,IAAI,WAAW,EAAE;AACb,wBAAA,OAAO,WAAW;oBACtB;gBACJ;YACJ;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,0DAAC;;QAGO,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGnE,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACvC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;;AAErD,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,oBAAA,OAAO,MAAM;gBACjB;;AAEA,gBAAA,OAAO,QAAQ;YACnB;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,6DAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrD,gBAAA,OAAO,MAAM;YACjB;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,4DAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC5E,gBAAA,OAAO,MAAM;YACjB;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,4DAAC;;AAGO,QAAA,IAAA,CAAA,+BAA+B,GAAG,QAAQ,CAAC,MAAK;AACrD,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC5E,gBAAA,OAAO,IAAI,CAAC,+BAA+B,EAAE;YACjD;AACA,YAAA,OAAO,SAAS;AACpB,QAAA,CAAC,2EAAC;;AAGO,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrD,gBAAA,OAAO,UAAU;YACrB;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,CAAC,8DAAC;;AAGO,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;AAChD,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;;AAErD,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,aAAa,EAAE,CAAC;gBAChF,IAAI,gBAAgB,EAAE;AAClB,oBAAA,OAAO,KAAK;gBAChB;;AAEA,gBAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;YACnC;AACA,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;AACnC,QAAA,CAAC,sEAAC;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AACzC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;;gBAErD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa;gBAChE,IAAI,iBAAiB,EAAE;oBACnB,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,oCAAoC,CAAC;gBACrF;gBACA,OAAO,KAAK,CAAC;YACjB;AACA,YAAA,OAAO,IAAI;AACf,QAAA,CAAC,+DAAC;;AAGO,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACvB;YACI,eAAe;YACf,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,EAAE,GAAG,CAAA,EAAG,eAAe,CAAA,WAAA,CAAa,GAAG,EAAE;AACzD,YAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAA,EAAG,eAAe,CAAA,QAAA,CAAU,GAAG,EAAE;AACnD,YAAA,IAAI,CAAC,MAAM,EAAE,GAAG,CAAA,EAAG,eAAe,CAAA,MAAA,CAAQ,GAAG;AAChD;aACI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACjB,aAAA,IAAI,CAAC,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACjB;;AAGQ,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;;YAE/B,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,EAAE;AAC5C,gBAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;YACpC;;;YAIA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,OAAO,EAAE;AAC3C,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,IAAI;AACxE,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,IAAI;gBAEtG,OAAO,eAAe,IAAI,gBAAgB;YAC9C;AAEA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,qDAAC;;AAGO,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,aAAa,IAAI,IAAI,2DAAC;;AAGnF,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,wBAAwB,EAAE;AAChE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;AASF;;;AAGG;QACgB,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAY,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,aAAa,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG5F,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAgB,IAAI,oEAAC;;AAGxD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;;AAGtB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,8DAAC;;AAGlC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAmB,IAAI,mDAAC;;AAGxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;;AAG3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;;QAGxB,IAAA,CAAA,MAAM,GAA4B,EAAE;;QAGpC,IAAA,CAAA,WAAW,GAA8B,EAAE;;AAM3C,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;;AAGjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;QAGzC,IAAA,CAAA,+BAA+B,GAAG,QAAQ,CAAC,MACxD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,6CAA6C,CAAC,2EACvG;;QAGgB,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,iCAAiC,CAAC,+DAC3F;QAEgB,IAAA,CAAA,WAAW,GAAG,MAAM,CAACA,YAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGpD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;AAE1E;;;AAGG;QACc,IAAA,CAAA,kCAAkC,GAAG,MAAM,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAG5F,QAAA,IAAA,CAAA,wBAAwB,GAAG,MAAM,CAAC,iBAAiB,EAAE;AAClE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,EAAE;AACrE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE;AACb,SAAA,CAAC;;AAGe,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;AAGhC,QAAA,IAAA,CAAA,cAAc,GAAG,SAAS,CAAa,eAAe,0DAAC;;AAGvD,QAAA,IAAA,CAAA,yBAAyB,GAAG,SAAS,CAAa,0BAA0B,qEAAC;QAK1F,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;gBACrB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAA4B;AAC9E,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,SAAS;AAC3C,qBAAA,uBAAuB;qBACvB,aAAa,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC;YACrD;iBAAO;AACH,gBAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;YAC/B;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,IAAI,CAAC,kCAAkC,EAAE,eAAe,EAAE,EAAE;gBAC7D;YACJ;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,kCAAkC,CAAC,eAAe,EAAE;YAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAEpE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;AACpC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kCAAkC,EAAE,YAAY,CAAC,IAAI,CAAC;AAE3D,QAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACrF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,YAAY,KAAI;;AAExB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,OAAO,IAAI,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;AACjG,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;IACV;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC/B;;IAGA,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACrB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;AAEA;;;AAGG;IACH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC7D,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;YACnC;QACJ;QACA,IAAI,CAAC,wBAAwB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,SAAS,CAAC;aACV,IAAI,CACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,EACtD,SAAS,CAAC,IAAI,CAAC,EACf,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC;IACV;;AAGA,IAAA,YAAY,CAAC,IAA2B,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;IACJ;;AAGA,IAAA,cAAc,CAAC,IAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD;;AAGA,IAAA,iBAAiB,CAAC,IAA6B,EAAA;QAC3C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACjC;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;;AAGA,IAAA,mBAAmB,CAAC,IAA6B,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAClC;QACJ;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D;;AAGA,IAAA,0BAA0B,CAAC,QAAiB,EAAA;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzB;AAEA;;AAEG;IACH,oBAAoB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;IACtC;;AAGA,IAAA,iBAAiB,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtB;QACJ;AAEA,QAAA,IAAIC,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,eAAe,KAAK,CAAC,EAAE;YAC/E,IAAI,CAAC,iBAAiB,EAAE;YACxB;QACJ;AAEA,QAAA,IAAIA,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAACA,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YACtD;QACJ;QAEA,MAAM,QAAQ,GAAGA,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,WAAW,CAAC;QAEnF,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;AAEA,QAAA,IAAI,CAAC,mCAAmC,CAAC,KAAK,CAAC;IACnD;;IAGA,cAAc,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtB;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;QAC7C;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC;QAClD;IACJ;;IAGA,eAAe,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAClB;QACJ;;;QAIA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE;YACrB;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YACvE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;QACjD;IACJ;;AAGA,IAAA,iBAAiB,CAAC,KAAoB,EAAA;;AAElC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAIA,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;YACjE,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;;YAGvB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa;YAC3D,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,KAAK,EAAE;YACvB;QACJ;IACJ;;AAGA,IAAA,gBAAgB,CAAC,YAAqB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,oCAAoC,CAAC,YAAY,CAAC;QAC3D;AAAO,aAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;QAC1D;aAAO;AACH,YAAA,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC;QAC1D;IACJ;AAEA;;;;AAIG;IACH,KAAK,GAAA;;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAC5C;QACJ;QACA,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA;;;AAGG;IACH,SAAS,CAAC,YAAY,GAAG,KAAK,EAAA;QAC1B,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QAE9C,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACJ;;IAGA,cAAc,CAAC,MAAe,EAAE,OAAyB,EAAA;;AAErD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;QAC3C,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,aAAa,EAAE;AAC/C,YAAA,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACtC;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,EAAE;YACR,eAAe,CACX,MAAK;;gBAED,IAAI,CAAC,2BAA2B,EAAE;gBAClC,UAAU,CAAC,MAAK;;AAEZ,oBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,wBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;wBACjC;oBACJ;;oBAGA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CACvC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,CAC7D;oBAED,IAAI,kBAAkB,EAAE;AACpB,wBAAA,kBAAkB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;wBACnD;oBACJ;;oBAGA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;oBACpF,IAAI,aAAa,EAAE;AACf,wBAAA,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE;AAClC,wBAAA,IAAI,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE;AACjC,4BAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;4BACrC;wBACJ;oBACJ;;AAGA,oBAAA,IAAI;AACA,wBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE;AACzC,wBAAA,WAAW,EAAE,0BAA0B,CAAC,IAAI,CAAC;oBACjD;oBAAE,OAAO,KAAK,EAAE;AACZ,wBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAElD,wBAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE;AACzC,wBAAA,MAAM,kBAAkB,GAAG,WAAW,EAAE,WAAW,EAAE,aAAa;wBAClE,IAAI,kBAAkB,EAAE;4BACpB,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,aAAa,CAC1D,4CAA4C,CAChC;4BAChB,IAAI,qBAAqB,EAAE;gCACvB,qBAAqB,CAAC,KAAK,EAAE;4BACjC;wBACJ;oBACJ;gBACJ,CAAC,EAAE,CAAC,CAAC;YACT,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC/B;QACL;aAAO;;AAEH,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;gBAC9B,eAAe,CACX,MAAK;oBACD,IAAI,CAAC,SAAS,EAAE;gBACpB,CAAC,EACD,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAC/B;YACL;QACJ;IACJ;AAEA;;;AAGG;IACH,iBAAiB,GAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACjB,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACrB,YAAA,OAAO,KAAK;QAChB;;;AAIA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE;AAClD,YAAA,OAAO,KAAK;QAChB;;QAGA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/B,YAAA,OAAO,KAAK;QAChB;;AAGA,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;AAMG;IACH,wBAAwB,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAC7C;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,EAAE,EAAE,aAAa;QACjE,IAAI,CAAC,SAAS,EAAE;YACZ;QACJ;;QAGA,qBAAqB,CAAC,MAAK;AACvB,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAC9C,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,YAAA,MAAM,MAAM,GAAG,EAAE,CAAC;YAClB,MAAM,eAAe,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM;AAE1D,YAAA,IAAI,eAAe,GAAG,CAAC,EAAE;gBACrB,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAA,EAAG,eAAe,CAAA,EAAA,CAAI,CAAC;YAC7D;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,iBAAiB,GAAA;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IAChF;;IAGQ,2BAA2B,GAAA;;QAE/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE;;AAEhC,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC/E;AACJ,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,mCAAmC,CAAC,YAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;YAChC;YACA;QACJ;QAEA,IAAI,CAAC,YAAY,EAAE;;AAEf,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACnB,gBAAA,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;gBAC5B;YACJ;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;aAAO;AACH,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE;gBAC7B;YACJ;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B;IACJ;;AAGQ,IAAA,mCAAmC,CAAC,YAAqB,EAAA;AAC7D,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YACtB;QACJ;QACA,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;QACA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QAClD;IACJ;AAEA;;;AAGG;AACK,IAAA,oCAAoC,CAAC,YAAqB,EAAA;QAC9D,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACrC,YAAA,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnC;QACA,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;QACA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QAC/C;IACJ;8GAj3BS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,6SAYhB,gBAAgB,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAUhB,gBAAgB,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAUhB,gBAAgB,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAShB,gBAAgB,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAShB,gBAAgB,8HAUhB,gBAAgB,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAUhB,gBAAgB,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAUhB,gBAAgB,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EA9FzB;YACP,iBAAiB;AACjB,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkGa,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAQrB,0BAA0B,+DAZvB,qBAAqB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,2BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjL1C,2jNAuJA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvFQ,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,iQACvB,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAff,iCAAiC,0EAiBtC,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAkBF,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBA1BvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B;wBACL,gBAAgB;wBAChB,uBAAuB;wBACvB,gBAAgB;wBAChB,oBAAoB;wBACpB,iCAAiC;wBACjC;qBACH,EAAA,SAAA,EAGU;wBACP,iBAAiB;AACjB,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAA;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,WAAW,EAAA;AACd;AACJ,qBAAA,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2jNAAA,EAAA;;sBAI9C;;sBAUA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBASrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBASrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAUrC,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;;sBAI7D,YAAY;uBAAC,qBAAqB;;sBAQlC,YAAY;uBAAC,0BAA0B;;sBAIvC,SAAS;uBAAC,UAAU;AAsUmC,aAAA,CAAA,EAAA,EAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,eAAe,mFAGJ,0BAA0B,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEzdpF,6BAA6B,CAAA;;AA+FtC,IAAA,WAAA,GAAA;;QA5FA,IAAA,CAAA,SAAS,GAA4B,EAAE;;AAkBvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,IAAI,sDAAC;;AAGhB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,8CAAC;;QAGzC,IAAA,CAAA,IAAI,GAAG,UAAU;;QAGjB,IAAA,CAAA,kBAAkB,GAAG,SAAS;AAEvC;;AAEG;AACM,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,KAAK,uDAAC;;AAG3B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;;AAG5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;AAE5C;;AAEG;AACM,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAkC,IAAI,iDAAC;;QAGrD,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGvE,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAc,IAAI,CAAC,uBAAuB,EAAE,IAAI,EAAE,sEAAC;AAElG;;;AAGG;QACgB,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAY,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,GAAG,aAAa,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG9F,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAa,SAAS,2DAAC;;QAG3D,IAAA,CAAA,eAAe,GAAG,KAAK;;AAGd,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;QAG/B,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAGpD,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,KAAK,kDAAC;;AAGzD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;;AAGjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;QAGzC,IAAA,CAAA,qBAAqB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,mCAAmC,CAAC,iEAC7F;;QAGgB,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAChD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,qCAAqC,CAAC,mEAC/F;AAIG,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACxF,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,QAAA,CAAC,CAAC;IACN;;IAGA,eAAe,GAAA;;AAEX,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,cAAc,EAAE;YAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7C;IACJ;;AAGA,IAAA,oBAAoB,CAAC,MAAe,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;;QAG7B,IAAI,MAAM,EAAE;;YAER,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,eAAe,GAAG,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,EAAE;AACnD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,wBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE;4BAC1D,eAAe,GAAG,CAAC;4BACnB;wBACJ;oBACJ;AAEA,oBAAA,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,eAAe,CAAC;oBACxD;gBACJ;;AAGA,gBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACnC,oBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE;AAE9B,oBAAA,IAAI,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE;AACjC,wBAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;wBACrC;oBACJ;gBACJ;;gBAGA,MAAM,WAAW,GAAI,IAAI,CAAC,QAAgB,EAAE,WAAW,EAAE;AACzD,gBAAA,MAAM,kBAAkB,GAAG,WAAW,EAAE,WAAW,EAAE,aAAa;gBAClE,IAAI,kBAAkB,EAAE;oBACpB,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,aAAa,CAC1D,4CAA4C,CAChC;oBAChB,IAAI,qBAAqB,EAAE;wBACvB,qBAAqB,CAAC,KAAK,EAAE;oBACjC;gBACJ;YACJ,CAAC,EAAE,GAAG,CAAC;QACX;IACJ;;IAGA,aAAa,CAAC,SAAS,GAAG,KAAK,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;IAC/C;;AAGA,IAAA,YAAY,KAAU;;AAGtB,IAAA,cAAc,KAAU;;AAGxB,IAAA,iBAAiB,KAAU;;AAG3B,IAAA,mBAAmB,KAAU;;IAG7B,KAAK,GAAA;QACD,IAAI,CAAC,SAAS,EAAE;IACpB;AAEA;;;AAGG;IACH,SAAS,CAAC,YAAY,GAAG,KAAK,EAAA;QAC1B,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QAC5C,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACJ;;AAGA,IAAA,cAAc,KAAU;;AAGxB,IAAA,gBAAgB,CAAC,YAAqB,EAAA;QAClC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;aAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AAC7C,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC;IACJ;;AAGA,IAAA,qBAAqB,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YACtD;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAE3B,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC,EAAE;;AAE5D,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACtB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B;QACJ;IACJ;;IAGA,iBAAiB,GAAA;QACb,OAAO,KAAK,CAAC;IACjB;8GA/NS,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EAb3B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAcU,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIrB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIhB,uBAAuB,gDC/DtC,qrCAkCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCc,uBAAuB,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,8IAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAclG,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAjBzC,SAAS;AAEI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,OAAA,EACjC,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,CAAC,EAAA,SAAA,EACjG;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,WAAW,EAAA;AACd;AACJ,qBAAA,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACF,wBAAA,KAAK,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,qrCAAA,EAAA;;sBAIA;;sBAIA,SAAS;uBAAC,qBAAqB;;sBAI/B,SAAS;uBAAC,gBAAgB;;sBAI1B,SAAS;uBAAC,uBAAuB;+DAkDuB,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE7EtE,MAAM,iCAAiC,GAAG,2CAA2C;AAoB/E,MAAO,+BAAgC,SAAQ,6BAA6B,CAAA;AAlBlF,IAAA,WAAA,GAAA;;;QAqBI,IAAA,CAAA,gBAAgB,GAAG,IAAI;AAEvB;;AAEG;QAEH,IAAA,CAAA,SAAS,GAAqB,IAAI;AAElC;;AAEG;QAEH,IAAA,CAAA,mBAAmB,GAAqB,IAAI;;QAenC,IAAA,CAAA,SAAS,GAAoB,OAAO;;AAGpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC;;AAGlC,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;YAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACrF,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AAC9B,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAC/C,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,gBAAA,OAAO,SAAS,GAAG,eAAe,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;AAC1D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,sDAAC;;AAGO,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,4DAAC;;QAGhC,IAAA,CAAA,aAAa,GAAG,MAAM,CAA0B,IAAI,CAAC,UAAU,EAAE,yDAAC;;AAGlE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAA0B,EAAE,wDAAC;;QAGnD,IAAA,CAAA,sBAAsB,GAAG,KAAK;;AAGrB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;;QAGzD,IAAA,CAAA,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CACjF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAC1C;;AAGgB,QAAA,IAAA,CAAA,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGpD,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAoLpD,IAAA;;IAjLG,kBAAkB,GAAA;QACd,IAAI,CAAC,UAAU,CAAC;aACX,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,EACf,SAAS,CAAC,cAAc,CAAC,EACzB,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,EACnC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;AAEN,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAEtF,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM;aAC7D,IAAI,CACD,SAAS,CAAC,MAAM,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAChD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAEvC,SAAS,CAAC,MAAK;YACZ,IAAI,CAAC,sBAAsB,EAAE;AACjC,QAAA,CAAC,CAAC;;AAGN,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,YAAY,KAAI;AACxB,YAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;AAC3C,QAAA,CAAC,CAAC;IACV;AAEA;;;;AAIG;IACK,sBAAsB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B;QACJ;QACA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACpC,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC;QACJ;QAEA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,iCAAiC,CAAC;AAE/E,QAAA,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY;AAE9G,QAAA,IAAI,cAAc,IAAI,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;YACnC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,iCAAiC,CAAC;AAClF,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACzB;QACJ;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACzB,QAAA,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,YAAY,IAAI,CAAC,CAAC;QAExF,MAAM,WAAW,GAA4B,EAAE;;QAG/C,OAAO,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,EAAE;gBACP;YACJ;;AAEA,YAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AACzB,YAAA,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,IAAI,CAAC;AAC7E,YAAA,cAAc,GAAG,cAAc,GAAG,UAAU;AAC5C,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1B;QAEA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,iCAAiC,CAAC;QAElF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;QAEvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QAEzB,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;AAEzD,QAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;IACvC;AAEA;;;;AAIG;AACK,IAAA,oBAAoB,CAAC,YAAmC,EAAA;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3D;QACJ;QAEA,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;;AAGxC,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,YAAY,CAAC;;AAG5E,QAAA,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE;YACzF,aAAa,GAAG,aAAa,CAAC,SAAS,CACnC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,YAAY,CAC3F;QACL;AAEA,QAAA,MAAM,UAAU,GAAG,WAAW,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,aAAa;AAEnE,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,OAAO;QACX;;AAGA,QAAA,MAAM,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;;;AAI3D,QAAA,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,EAAE;QAE5C,IAAI,eAAe,EAAE;AACjB,YAAA,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGjC,YAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,eAAe,CAAC;;YAG/E,IAAI,cAAc,GAAG,CAAC;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/E,gBAAA,IAAI,eAAe,GAAG,gBAAgB,EAAE;oBACpC;gBACJ;AACA,gBAAA,cAAc,EAAE;YACpB;YAEA,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC;QAC5D;;AAGA,QAAA,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;AAClC,QAAA,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGhC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC;;QAGpC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;AAG3F,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;;;QAIzB,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAChC;QACJ,CAAC,EAAE,EAAE,CAAC;IACV;8GAzPS,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,GAAA,EAAA,EAAA,cAAA,EAAA,wDAAA,EAAA,EAAA,SAAA,EAR7B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,6BAA6B;AACtC,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAqBgB,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAIF,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAInC,6BAA6B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClF5C,2VAWA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED8Bc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,6BAA6B,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAerE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAlB3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,WAE/B,CAAC,YAAY,EAAE,uBAAuB,EAAE,6BAA6B,CAAC,EAAA,eAAA,EAC9D,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACF,wBAAA,KAAK,EAAE,wDAAwD;AAC/D,wBAAA,mBAAmB,EAAE;qBACxB,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,6BAA6B;AACtC,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,cAAA,EACe,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAA,2VAAA,EAAA;;sBAInC;;sBAMA;;sBAMA;;sBAIA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAI5D,SAAS;uBAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;;sBAI9D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,6BAA6B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AEjCzD,MAAO,mBACT,SAAQ,aAAa,CAAA;AAiCrB;;AAEG;IACH,IACI,KAAK,CAAC,KAAyB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;AACA,IAAA,IAAI,KAAK,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACxB;;IAiBA,IACI,kBAAkB,CAAC,KAA+C,EAAA;QAClE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;IACnD;;AA8CA,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAtGX;;AAEG;QAGH,IAAA,CAAA,SAAS,GAAqB,IAAI;AAElC;;AAEG;QAGH,IAAA,CAAA,mBAAmB,GAAqB,IAAI;AAE5C;;AAEG;QAEH,IAAA,CAAA,IAAI,GAAgB,EAAE;AAEtB;;AAEG;QAEH,IAAA,CAAA,SAAS,GAAG,KAAK;AAajB;;AAEG;QAEH,IAAA,CAAA,IAAI,GAAsB,UAAU;AAEpC;;;;AAIG;QAEH,IAAA,CAAA,aAAa,GAAuB,QAAQ;AAY5C;;AAEG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAqB,UAAU,kDAAC;AAExD;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,SAAS,sDAAC;AAEjE;;AAEG;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAkC,IAAI,2DAAC;AAExE;;;AAGG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAW,EAAE,sDAAC;;AAGjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;AAG/B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGnC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAwC,IAAI,mEAAC;;AAG7E,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;;AAG5B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK,2DAAC;;QAS5C,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAChD;AACJ,QAAA,CAAC,CAAC;IACN;;IAIA,sBAAsB,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACf;AACI,YAAA,IAAI,CAAC,KAAK;YACV,eAAe;YACf,IAAI,CAAC,IAAI,KAAK,EAAE,GAAG,wBAAwB,GAAG,EAAE;YAChD,CAAA,eAAA,EAAkB,IAAI,CAAC,KAAK,CAAA,CAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,GAAG,YAAY,GAAG;AAChE,SAAA,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB;AACD,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;IAChE;AAEA;;;AAGG;AAEH,IAAA,eAAe,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,CAACD,SAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,EAAE;YACnD;QACJ;QAEA,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;IACrC;;IAGA,QAAQ,GAAA;QACJ,IAAI,CAAC,sBAAsB,EAAE;IACjC;;IAGA,WAAW,GAAA;QACP,IAAI,CAAC,sBAAsB,EAAE;IACjC;;IAGA,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB;AACvD,aAAA,uBAAuB;AACvB,aAAA,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC/B;AAEA;;AAEG;IACH,aAAa,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU;IACtC;AAEA;;AAEG;AACH,IAAA,aAAa,CAAC,IAA2B,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC;IACxC;;IAGA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;IAC9B;AAEA;;;AAGG;IACH,eAAe,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;IACzC;AAEA;;;AAGG;AACH,IAAA,eAAe,CAAC,IAAkC,EAAA;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;IACtC;AAEA;;AAEG;IACH,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC;IACtC;AAEA;;;;AAIG;AACH,IAAA,qBAAqB,CAAC,EAAU,EAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;QAC7C,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC;IACxC;AAEA;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,EAAU,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC3C,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;AAKG;IACK,aAAa,CAAC,KAA8B,EAAE,EAAU,EAAA;AAC5D,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;AAClB,gBAAA,OAAO,IAAI;YACf;YAEA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAqC,KAAK,KAAK,IAAI,CAAC;gBACtG,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC;gBAChD,IAAI,KAAK,EAAE;AACP,oBAAA,OAAO,KAAK;gBAChB;YACJ;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEA;;;;AAIG;AACK,IAAA,eAAe,CAAC,cAA+C,EAAA;QACnE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAClD,QAAA,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;QAC/E,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,IAAI,mBAAmB,KAAK,CAAC,CAAC,EAAE;gBAC5B;YACJ;AAEA,YAAA,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QACtC;aAAO;AACH,YAAA,IAAI,mBAAmB,GAAG,CAAC,CAAC,EAAE;gBAC1B;YACJ;;YAGA,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;gBACvD,IAAI,CAAC,SAAS,EAAE;oBACZ;gBACJ;AAEA,gBAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,SAAS,KAAK,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;AACrG,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;gBACvB;YACJ;YAEA,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,cAAc,CAAC;AAC/C,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;QACtC;IACJ;8GA5SS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EA+BR,gBAAgB,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,SAAA,EA1CzB;YACP,iBAAiB;AACjB,YAAA;AACI,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE;AAChB;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiEa,8BAA8B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAM3B,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnH1C,6BACA,EAAA,MAAA,EAAA,CAAA,4t7FAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;ADyKI,UAAA,CAAA;IADC,aAAa;;;;AAYb,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,IAAA,CAAA;2FApIQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAjB/B,SAAS;+BACI,gBAAgB,EAAA,aAAA,EAGX,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;wBACP,iBAAiB;AACjB,wBAAA;AACI,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAA;AACd;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE;AACT,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,4t7FAAA,CAAA,EAAA;;sBAOA;;sBAMA;;sBACA,WAAW;uBAAC,iBAAiB;;sBAM7B;;sBACA,WAAW;uBAAC,2BAA2B;;sBAMvC;;sBAMA,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;sBAMrC;;sBAWA;;sBAQA;;sBAIA,YAAY;uBAAC,8BAA8B;;sBAM3C,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;sBAwE5D,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AE7KjC,MAAO,uBAA4D,SAAQ,cAAiB,CAAA;;AAI9F,IAAA,WAAA,CAAmB,YAAqC,EAAA;QACpD,KAAK,CAAC,YAAY,CAAC;QADJ,IAAA,CAAA,YAAY,GAAZ,YAAY;;QAF/B,IAAA,CAAA,SAAS,GAAG,KAAK;IAIjB;AACH;AAEK,MAAO,yBAA8D,SAAQ,uBAA0B,CAAA;;AAEzG,IAAA,WAAA,CAAY,IAAS,EAAA;AACjB,QAAA,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC;AACH;AAEK,MAAO,mCAEX,SAAQ,uBAA0B,CAAA;;AAEhC,IAAA,WAAA,CAAY,IAAqB,EAAA;AAC7B,QAAA,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC;AACH;MAUY,0BAA0B,CAAA;AAGnC;;;AAGG;AACH,IAAA,KAAK,CAAC,MAAiD,EAAA;AACnD,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,MAAoC;QAC/C;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,yBAAyB,CAAI,MAAM,CAAC;QACnD;AAEA,QAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI,mCAAmC,CAAI,MAAM,CAAC;QAC7D;AAEA,QAAA,OAAO,SAAS;IACpB;AACH;;AClDK,MAAO,iCAAiE,SAAQ,mBAGrF,CAAA;8GAHY,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,SAAA,EAP/B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,QAAQ,EAAE;AACb;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEQ,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAX7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,0BAA0B;AACnC,4BAAA,QAAQ,EAAE;AACb;AACJ;AACJ,iBAAA;;;ACSM,MAAM,cAAc,GAAG;IAC1B,mBAAmB;IACnB,+BAA+B;IAC/B,6BAA6B;IAC7B,uBAAuB;IACvB,0BAA0B;IAC1B,2BAA2B;IAC3B,8BAA8B;IAC9B;;;ACnCJ;;AAEG;;;;"}
1
+ {"version":3,"file":"fundamental-ngx-btp-navigation.mjs","sources":["../../../../libs/btp/navigation/models/navigation-content-container.class.ts","../../../../libs/btp/navigation/models/navigation.class.ts","../../../../libs/btp/navigation/models/navigation-list-item.class.ts","../../../../libs/btp/navigation/services/navigation.service.ts","../../../../libs/btp/navigation/components/navigation-list/navigation-list.component.ts","../../../../libs/btp/navigation/components/navigation-list/navigation-list.component.html","../../../../libs/btp/navigation/components/navigation-end/navigation-content-end.component.ts","../../../../libs/btp/navigation/directives/navigation-list-item-ref.directive.ts","../../../../libs/btp/navigation/models/navigation-item-link.class.ts","../../../../libs/btp/navigation/components/navigation-link/navigation-link.component.ts","../../../../libs/btp/navigation/components/navigation-link/navigation-link.component.html","../../../../libs/btp/navigation/components/navigation-item/navigation-list-item.component.ts","../../../../libs/btp/navigation/components/navigation-item/navigation-list-item.component.html","../../../../libs/btp/navigation/components/navigation-more-button/navigation-more-button.component.ts","../../../../libs/btp/navigation/components/navigation-more-button/navigation-more-button.component.html","../../../../libs/btp/navigation/components/navigation-start/navigation-content-start.component.ts","../../../../libs/btp/navigation/components/navigation-start/navigation-content-start.component.html","../../../../libs/btp/navigation/components/navigation/navigation.component.ts","../../../../libs/btp/navigation/components/navigation/navigation.component.html","../../../../libs/btp/navigation/models/navigation-data-source-item.model.ts","../../../../libs/btp/navigation/directives/navigation-list-data-source.directive.ts","../../../../libs/btp/navigation/index.ts","../../../../libs/btp/navigation/fundamental-ngx-btp-navigation.ts"],"sourcesContent":["import { DestroyRef, Signal, inject, signal } from '@angular/core';\nimport { FdbNavigationListItem } from './navigation-list-item.class';\n\nexport abstract class FdbNavigationContentContainer {\n /**\n * List containing child list items that needs to be rendered. Can be different than `allListItems$`.\n */\n abstract listItems$: Signal<FdbNavigationListItem[]>;\n /**\n * Container placement in Navigation component.\n */\n abstract placement: 'start' | 'end';\n /**\n * List containing all child navigation list items.\n */\n readonly allListItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** @hidden */\n protected readonly _destroyRef = inject(DestroyRef);\n\n /**\n * @hidden\n * List of registered navigation list items.\n * Used only with data-driven navigation component.\n */\n private readonly _registeredListItems: FdbNavigationListItem[] = [];\n\n /**\n * Registers navigation list item.\n */\n registerItem(item: FdbNavigationListItem): void {\n if (this._registeredListItems.indexOf(item) > -1) {\n return;\n }\n\n this._registeredListItems.push(item);\n\n this.allListItems$.set(this._registeredListItems);\n }\n\n /**\n * Unregisters navigation list item.\n */\n unregisterItem(item: FdbNavigationListItem): void {\n const foundIndex = this._registeredListItems.indexOf(item);\n if (foundIndex === -1) {\n return;\n }\n\n this._registeredListItems.splice(foundIndex, 1);\n\n this.allListItems$.set(this._registeredListItems);\n }\n}\n","import { Signal, WritableSignal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\nimport { NavigationService } from '../services/navigation.service';\nimport { FdbNavigationListItem } from './navigation-list-item.class';\n\nexport abstract class FdbNavigation {\n abstract classList$: Signal<string[]>;\n abstract isSnapped$: Signal<boolean>;\n abstract showMoreButton$: WritableSignal<Nullable<FdbNavigationListItem>>;\n abstract _navigationItemRenderer: Signal<any>;\n abstract closeAllPopups: Subject<void>;\n abstract selectionMode: 'router' | 'click';\n abstract service: NavigationService;\n abstract setActiveItem(value: FdbNavigationListItem | null): void;\n abstract getActiveItem(): FdbNavigationListItem | null;\n abstract closePopups(): void;\n}\n","import { FocusOrigin, FocusableOption } from '@angular/cdk/a11y';\nimport { Signal, TemplateRef, computed, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { NavigationListItemMarkerDirective } from '../components/navigation-item/navigation-list-item.component';\nimport { NavigationListComponent } from '../components/navigation-list/navigation-list.component';\nimport { FdbNavigationContentContainer } from './navigation-content-container.class';\nimport { FdbNavigationItemLink } from './navigation-item-link.class';\nimport { FdbNavigation } from './navigation.class';\n\nexport const LIST_ITEM_CLASS = 'fd-navigation__list-item';\n\nexport abstract class FdbNavigationListItem implements FocusableOption {\n abstract type: 'item' | 'showMore';\n abstract separator: boolean;\n abstract spacer: boolean;\n abstract home: boolean;\n abstract isVisible$: Signal<boolean>;\n abstract skipNavigation: boolean;\n abstract placementContainer?: FdbNavigationContentContainer;\n abstract parentListItemComponent: FdbNavigationListItemCmp | null;\n abstract parentListItem: FdbNavigationListItem | null;\n abstract class$: Signal<string>;\n abstract selected$: Signal<boolean>;\n abstract id: Signal<string>;\n abstract focus(origin?: FocusOrigin | undefined): void;\n abstract toggleExpanded(): void;\n abstract keyboardExpanded(shouldExpand: boolean): void;\n abstract popoverLinkArrowDown(): void;\n abstract registerLink(link: FdbNavigationItemLink): void;\n abstract unregisterLink(link: FdbNavigationItemLink): void;\n abstract registerChildList(list: NavigationListComponent): void;\n abstract unregisterChildList(list: NavigationListComponent): void;\n abstract handleHorizontalNavigation(isExpand: boolean): void;\n abstract focusLink(closePopover?: boolean): void;\n abstract canItemBeSelected(): boolean;\n\n /** Marker directive that is attached to the rendered list item. */\n marker: Nullable<NavigationListItemMarkerDirective>;\n\n /** @hidden */\n readonly listItems$ = signal<Nullable<FdbNavigationListItem>[]>([]);\n\n /** Whether item has child items. */\n readonly hasChildren$ = computed(() => this.listItems$().length > 0);\n\n /** Whether popover is open. Applicable for snapped navigation state. */\n readonly popoverOpen$ = signal(false);\n\n /**\n * Link reference.\n */\n readonly link$ = signal<Nullable<FdbNavigationItemLink>>(null);\n\n /**\n * Item content renderer.\n */\n readonly renderer$ = signal<TemplateRef<any> | null>(null);\n\n /**\n * Whether the item should be hidden under \"More\" button.\n */\n readonly hidden$ = signal(false);\n\n /**\n * Whether the item is in overflow menu. Applicable only when the navigation is in snapped mode.\n */\n readonly isOverflow$ = computed(() => this.navigation.isSnapped$() && this.hidden$());\n\n /**\n * Item Hierarchy level in navigation tree.\n */\n readonly level$ = computed(() => (this.parentListItem?.level$() || 0) + 1);\n\n /**\n * Normalized level. Calculated based on location of the item, whether it is inside group or not.\n * Can be different than `level$`.\n */\n readonly normalizedLevel$ = computed(() => {\n if (!this.parentListItem) {\n return this.inGroup$() ? this.level$() : this.level$() + 1;\n }\n\n return this.parentListItem.normalizedLevel$() + 1;\n });\n\n /**\n * Whether the List item should be marked as selected.\n * Based on a `snapped` state will determine whether to highlight the link if it, or it's child links are active.\n */\n readonly isActiveAttr$ = computed(\n () =>\n this.selected$() ||\n this.link$()?.isActive$() ||\n (this.navigation.isSnapped$() && this.listItems$().some((item) => item?.isActiveAttr$()))\n );\n\n /**\n * Whether the item is inside group.\n */\n readonly inGroup$ = computed(() => (this.parentListItem ? this.parentListItem.inGroup$() : this.isGroup$()));\n\n /** @hidden */\n readonly expanded$ = signal<boolean>(false);\n\n /** @hidden */\n readonly isGroup$ = signal(false);\n\n /** @hidden */\n readonly disabled$ = signal(false);\n\n /** Navigation container reference. */\n readonly navigation = inject(FdbNavigation);\n}\n\nexport abstract class FdbNavigationListItemCmp extends FdbNavigationListItem {}\n","import { Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { FdbNavigationListItem } from '../models/navigation-list-item.class';\n\n@Injectable()\nexport class NavigationService {\n /** Currently active list item. */\n currentItem$ = new Subject<FdbNavigationListItem>();\n\n /** Currently selected item (for click-based selection mode). */\n selectedItem$ = signal<FdbNavigationListItem | null>(null);\n\n /** Subject to notify when an overflow item is selected and should be promoted. */\n overflowItemSelected$ = new Subject<FdbNavigationListItem>();\n\n /** Subject to notify when selection changes to clear manual selections */\n selectionChanged$ = new Subject<FdbNavigationListItem | null>();\n\n /**\n * Set the selected item.\n * @param item The item to select, or null to clear selection.\n */\n setSelectedItem(item: FdbNavigationListItem | null): void {\n this.selectedItem$.set(item);\n\n // Notify that selection has changed so other items can clear their manual selection\n this.selectionChanged$.next(item);\n\n // Handle smart overflow promotion logic\n if (item) {\n // Case 1: Child items promote their parent when the parent is in overflow\n if (item.parentListItem && item.parentListItem.isOverflow$()) {\n this.overflowItemSelected$.next(item.parentListItem);\n }\n // Case 2: Regular overflow items promote themselves\n else if (item.isOverflow$()) {\n this.overflowItemSelected$.next(item);\n }\n }\n }\n\n /**\n * Get the currently selected item.\n * @returns The currently selected item, or null if none is selected.\n */\n getSelectedItem(): FdbNavigationListItem | null {\n return this.selectedItem$();\n }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationService } from '../../services/navigation.service';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'ul[fdb-navigation-list]',\n imports: [NgTemplateOutlet],\n templateUrl: './navigation-list.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-navigation__list',\n tabindex: '-1'\n }\n})\nexport class NavigationListComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** @hidden */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('listItems')\n set _listItems(value: Nullable<FdbNavigationListItem>[]) {\n this._listItemsArray = value;\n this.listItems$.set(value);\n this._setupKeyManager();\n }\n\n get _listItems(): Nullable<FdbNavigationListItem>[] {\n return this._listItemsArray;\n }\n\n /** List Role. */\n @HostBinding('attr.role')\n get _role(): 'tree' | 'menubar' | 'group' | 'menu' {\n return this.computedRole();\n }\n\n @Input()\n role: 'tree' | 'menubar' | 'group' | 'menu' = 'tree';\n\n /**\n * aria-label for the navigation list.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('ariaLabel')\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('ariaRoleDescription')\n @HostBinding('attr.aria-roledescription')\n ariaRoleDescription: Nullable<string> = null;\n\n /** Whether the list is for parent items. */\n @HostBinding('class.fd-navigation__list--parent-items')\n @Input({ transform: booleanAttribute })\n parentItems = false;\n\n /** Whether the list is for child items. */\n @HostBinding('class.fd-navigation__list--child-items')\n @Input({ transform: booleanAttribute })\n childItems = false;\n\n /** Whether the list should not grow in height. */\n @HostBinding('class.fd-navigation__list--no-grow')\n @Input({ transform: booleanAttribute })\n noGrow = false;\n\n /** Whether the list should handle keyboard navigation. */\n @Input({ transform: booleanAttribute })\n withKeyboardNavigation = false;\n\n /** Reference to the More button component if this list is inside a More button popover. */\n @Input()\n moreButtonRef: any;\n\n /** Event emitted when user tries to navigate to the item before the list itself. */\n @Output()\n focusBefore = new EventEmitter<void>();\n\n /** Event emitted when user tries to navigate to the item after the list itself. */\n @Output()\n focusAfter = new EventEmitter<void>();\n\n /** Computed role based on navigation state and input role. */\n readonly computedRole = computed(() => {\n // Prioritize explicit role input\n if (this.role && this.role !== 'tree') {\n return this.role;\n }\n\n // Check if this is in an overflow menu context (More button popover)\n const navigation = this._navigation;\n if (navigation?.isSnapped$() && this.moreButtonRef) {\n // In overflow menu, lists should have role=\"menu\"\n return 'menu';\n }\n\n // If this is a child items list or parent items list, it should have role=\"group\"\n if (this.childItems || this.parentItems) {\n return 'group';\n }\n\n if (navigation?.isSnapped$()) {\n return 'menubar';\n }\n return this.role || 'tree';\n });\n\n /** Computed aria-label for group lists based on parent item's text content. */\n readonly computedAriaLabel = computed(() => {\n try {\n // Only provide aria-label for group role lists\n if (this.computedRole() === 'group' && this._listItem) {\n const parentLink = this._listItem.link$();\n if (parentLink?.elementRef?.nativeElement) {\n // Get text content directly from the navigation link element\n // The .fd-navigation__text span contains the projected content, but we can access\n // the text content directly from the link element itself\n const linkElement = parentLink.elementRef.nativeElement;\n const textContent = linkElement.textContent?.trim();\n if (textContent) {\n return textContent;\n }\n }\n }\n return this.ariaLabel;\n } catch {\n // Fallback to default ariaLabel if DOM is not ready or there's any error\n return this.ariaLabel;\n }\n });\n\n /** List items. */\n readonly listItems$ = signal<Nullable<FdbNavigationListItem>[]>([]);\n\n /** @hidden */\n private _listItemsArray: Nullable<FdbNavigationListItem>[] = [];\n\n /** @hidden */\n private _keyManager: Nullable<FocusKeyManager<FdbNavigationListItem>>;\n\n /** @hidden */\n private readonly _navigationService = inject(NavigationService, {\n optional: true\n });\n\n /**\n * @hidden\n * Parent navigation component.\n */\n private readonly _navigation = inject(FdbNavigation, {\n optional: true\n });\n\n /**\n * @hidden\n * Parent list item.\n */\n private readonly _listItem = inject(FdbNavigationListItem, {\n optional: true\n });\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private get _activeItemIndex(): number {\n return this._keyManager?.activeItemIndex ?? -1;\n }\n\n /** @hidden */\n private _renderer = inject(Renderer2);\n\n /** @hidden */\n private _elementRef = inject(ElementRef);\n\n /** @hidden */\n private _ariaLabelEffect = effect(() => {\n // This effect runs whenever the signals change, but we need to ensure\n // it doesn't run during the initial change detection cycle\n setTimeout(() => {\n this._updateAriaLabel();\n }, 0);\n });\n\n /** @hidden */\n constructor() {\n this._listItem?.registerChildList(this);\n }\n\n /**\n * @hidden\n * Handler for keyboard navigation.\n */\n @HostListener('keydown', ['$event'])\n _keydownHandler(event: KeyboardEvent): void {\n if (!this.withKeyboardNavigation) {\n return;\n }\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n event.stopImmediatePropagation();\n }\n if (KeyUtil.isKeyCode(event, UP_ARROW) && this._activeItemIndex <= 0) {\n this.focusBefore.emit();\n return;\n }\n if (KeyUtil.isKeyCode(event, DOWN_ARROW) && this._activeItemIndex === this._listItemsArray.length - 1) {\n this.focusAfter.emit();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW])) {\n this._keyManager?.onKeydown(event);\n return;\n }\n\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n // We need to cancel event bubbling since we may have parent list that will also try to focus it's parent list item.\n event.stopImmediatePropagation();\n\n // All navigation lists use the same swapped arrow logic:\n // RIGHT arrow = expand action, LEFT arrow = collapse/go back action\n const isExpandAction = KeyUtil.isKeyCode(event, this._rtlService?.rtl() ? LEFT_ARROW : RIGHT_ARROW);\n\n if (!isExpandAction) {\n if (this.moreButtonRef) {\n if (this._listItem) {\n this._listItem.focusLink(true);\n } else {\n this.moreButtonRef.popoverOpen$.set(false);\n this.moreButtonRef.focusLink();\n }\n } else {\n this._listItem?.focusLink(true);\n }\n }\n }\n\n /** @hidden */\n setActiveItemIndex(index: number): void {\n this._keyManager?.setActiveItem(index);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._navigationService?.currentItem$.pipe(takeUntilDestroyed(this._destroyRef)).subscribe((item) => {\n this._keyManager?.setActiveItem(item);\n });\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if ('withKeyboardNavigation' in changes) {\n this._setupKeyManager();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._listItem?.unregisterChildList(this);\n this._keyManager?.destroy();\n }\n\n /**\n * Updates aria-label attribute manually to avoid expression changed errors\n */\n private _updateAriaLabel(): void {\n try {\n const ariaLabel = this.computedAriaLabel();\n if (ariaLabel !== null && ariaLabel !== undefined) {\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-label', ariaLabel);\n } else {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-label');\n }\n } catch {\n if (this.ariaLabel) {\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-label', this.ariaLabel);\n }\n }\n }\n\n /** @hidden */\n private _setupKeyManager(): void {\n this._keyManager?.destroy();\n\n if (!this.withKeyboardNavigation) {\n return;\n }\n\n this._keyManager = new FocusKeyManager(this._listItemsArray as FdbNavigationListItem[])\n .withVerticalOrientation()\n .skipPredicate((item) => item.skipNavigation);\n }\n}\n","@for (item of listItems$(); track item) {\n @if (item) {\n <li [class]=\"item.class$()\" role=\"none\">\n <ng-template [ngTemplateOutlet]=\"item.renderer$()\"></ng-template>\n </li>\n <!-- Add separator after home list item. -->\n @if (item.home) {\n <li class=\"fd-navigation__list-item fd-navigation__list-item--separator\" role=\"separator\"></li>\n }\n }\n}\n<!-- Keep this for \"More\" button -->\n<ng-content></ng-content>\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n Input,\n QueryList,\n ViewEncapsulation,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Nullable } from '@fundamental-ngx/cdk';\nimport { asyncScheduler, filter, observeOn, startWith } from 'rxjs';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\n@Component({\n selector: 'fdb-navigation-content-end',\n template: `<ul\n fdb-navigation-list\n [listItems]=\"allListItems$()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaRoleDescription]=\"ariaRoleDescription\"\n ></ul>`,\n imports: [NavigationListComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-navigation__container fd-navigation__container--bottom'\n },\n providers: [\n {\n provide: FdbNavigationContentContainer,\n useExisting: NavigationContentEndComponent\n }\n ]\n})\nexport class NavigationContentEndComponent extends FdbNavigationContentContainer implements AfterContentInit {\n /** Whether the list items are content-projected. Used only with data-driven navigation. */\n @Input()\n contentProjected = true;\n\n /**\n * aria-label for the navigation list.\n */\n @Input()\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n @Input()\n ariaRoleDescription: Nullable<string> = null;\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: false })\n private readonly _listItems: QueryList<FdbNavigationListItem>;\n\n /** @hidden */\n readonly listItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** Whether the container is placed on the start position, or the end position of the navigation. */\n readonly placement: 'start' | 'end' = 'end';\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listItems.changes\n .pipe(\n startWith(null),\n observeOn(asyncScheduler),\n filter(() => this.contentProjected),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.allListItems$.set(this._listItems.toArray());\n this.listItems$.set(this._listItems.toArray());\n });\n }\n}\n","import { Directive, Injector, Input, OnDestroy, TemplateRef, inject, signal } from '@angular/core';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { FdbNavigationContentContainer } from '../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../models/navigation-list-item.class';\n\n@Directive({\n selector: '[fdbNavigationListItem]',\n standalone: true,\n providers: [\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationListItemDirective\n }\n ],\n exportAs: 'fdbListItem'\n})\nexport class NavigationListItemDirective implements OnDestroy {\n /**\n * Injector used for rendering child list item component.\n * Allows list item component to inject parent list container and register itself as a child item.\n */\n readonly injector = Injector.create({ providers: [], parent: inject(Injector) });\n\n /** @hidden */\n readonly parentNavListItemDirective = inject(NavigationListItemDirective, {\n skipSelf: true,\n optional: true\n });\n\n /**\n * Set of child directives.\n * Used to build hierarchy tree.\n */\n readonly childDirectives = signal(new Set<NavigationListItemDirective>());\n\n /**\n * @hidden\n * Navigation list item component instance.\n */\n _item: Nullable<FdbNavigationListItem>;\n\n /** @hidden */\n private readonly _contentContainer = inject(FdbNavigationContentContainer, {\n optional: true\n });\n\n /** @hidden */\n constructor() {\n this.parentNavListItemDirective?.registerChildDirective(this);\n }\n\n /**\n * Registers child list item component for further usage.\n * @param item\n */\n registerItem(item: FdbNavigationListItem): void {\n this._item = item;\n this._contentContainer?.registerItem(this._item);\n }\n\n /**\n * Removes child list item.\n */\n unregisterItem(): void {\n this._item && this._contentContainer?.unregisterItem(this._item);\n this._item = null;\n }\n\n /**\n * Registers child directive.\n */\n registerChildDirective(directive: NavigationListItemDirective): void {\n this.childDirectives.update((list) => list.add(directive));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._item && this._contentContainer?.unregisterItem(this._item);\n this._item = null;\n this.childDirectives().clear();\n }\n}\n\n@Directive({\n selector: '[fdbNavigationListItemRef]',\n standalone: true\n})\nexport class NavigationListItemRefDirective<T = any> {\n /** Type alias. */\n @Input()\n fdbNavigationListItemRefAs: T;\n /** Template reference. */\n readonly templateRef = inject<TemplateRef<T>>(TemplateRef);\n\n /** @hidden */\n static ngTemplateContextGuard<T>(dir: NavigationListItemRefDirective<T>, ctx: unknown): ctx is { $implicit: T } {\n return true;\n }\n}\n","import { ElementRef, Signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { HasElementRef, Nullable } from '@fundamental-ngx/cdk/utils';\n\nexport abstract class FdbNavigationItemLink implements HasElementRef {\n abstract elementRef: ElementRef<HTMLLinkElement>;\n abstract inPopover: boolean;\n abstract isActive$: Signal<boolean | undefined>;\n abstract routerLink: Nullable<RouterLink>;\n}\n","import { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n Renderer2,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { of, startWith } from 'rxjs';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\n\n@Directive({\n selector: '[fdbNavigationLinkRef]',\n standalone: true\n})\nexport class NavigationLinkRefDirective {\n /** Link template ref. */\n readonly templateRef = inject(TemplateRef);\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'a[fdb-navigation-link], button[fdb-navigation-link]',\n imports: [IconComponent],\n hostDirectives: [RouterLinkActive],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: FdbNavigationItemLink,\n useExisting: NavigationLinkComponent\n }\n ],\n host: {\n class: 'fd-navigation__link',\n '[attr.role]': 'quickCreate ? \"button\" : \"link\"'\n },\n templateUrl: './navigation-link.component.html'\n})\nexport class NavigationLinkComponent extends FdbNavigationItemLink implements OnDestroy {\n /** @hidden */\n @Input()\n class: Nullable<string>;\n\n /** Link glyph */\n @Input()\n glyph: Nullable<string>;\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether the link is for the external resource. */\n @Input()\n external = false;\n\n /** Whether it's a quick create button. */\n @Input({ transform: booleanAttribute })\n quickCreate = false;\n\n /** Whether the link is inside popover. */\n get inPopover(): boolean {\n return !!this.elementRef.nativeElement.parentElement?.classList.contains('fd-navigation__item--title');\n }\n\n /** Element reference. */\n readonly elementRef = inject<ElementRef<HTMLLinkElement>>(ElementRef);\n\n /** @hidden */\n readonly isActive$: Signal<boolean | undefined>;\n\n /** @hidden */\n readonly _listItemComponent = inject(FdbNavigationListItem, {\n optional: true\n });\n\n /** Router link reference. Used to determine whether the list item should be rendered with external expansion button. */\n readonly routerLink = inject(RouterLink, {\n optional: true,\n self: true\n });\n\n /** @hidden */\n private readonly _routerLinkActive = inject(RouterLinkActive, {\n optional: true,\n self: true\n });\n\n /** @hidden */\n private readonly _rtl = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private readonly _navigation = inject(FdbNavigation);\n\n /** @hidden */\n private _renderer = inject(Renderer2);\n\n /** @hidden */\n private _tabIndexEffect = effect(() => {\n // Track all the signals that affect tabindex computation\n this._navigation.getActiveItem(); // Track active item changes\n const isParentPopoverOpen = this._listItemComponent?.popoverOpen$();\n const isGrandparentPopoverOpen = this._listItemComponent?.parentListItem?.popoverOpen$();\n\n const hasOpenPopover = isParentPopoverOpen || isGrandparentPopoverOpen;\n\n if (hasOpenPopover) {\n // For popover cases, update immediately to ensure tabindex is set before focus management\n this._updateTabIndex();\n } else {\n // For other cases, use setTimeout to avoid expression changed errors\n setTimeout(() => {\n this._updateTabIndex();\n }, 0);\n }\n });\n\n /** @hidden */\n constructor() {\n super();\n this._listItemComponent?.registerLink(this);\n this.isActive$ = toSignal(\n this._routerLinkActive?.isActiveChange.pipe(startWith(this._routerLinkActive.isActive)) || of(false)\n );\n }\n\n /** @hidden */\n @HostListener('click', ['$event'])\n protected _clickHandler(event: Event): void {\n // Check if this is a NavigationMoreButtonComponent (More button itself)\n if (\n this._listItemComponent &&\n 'type' in this._listItemComponent &&\n (this._listItemComponent as any).type === 'showMore'\n ) {\n return;\n }\n\n const disabled = this._listItemComponent?.disabled$?.() || false;\n\n if (disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (this.inPopover || !this._listItemComponent?.isVisible$() || this._listItemComponent?.isOverflow$()) {\n this._navigation.closePopups();\n }\n\n if (this.routerLink) {\n return;\n }\n\n // Handle selection directly if in click mode\n if (this._navigation.selectionMode === 'click' && this._listItemComponent) {\n const canSelect = this._canItemBeSelected();\n\n if (canSelect) {\n this._navigation.service.setSelectedItem(this._listItemComponent);\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n protected _keyDownHandler(event: Event): void {\n const keyboardEvent = event as KeyboardEvent;\n const isDisabled = this._listItemComponent?.disabled$?.() || false;\n if (isDisabled) {\n return;\n }\n\n // Handle Space and Enter for selection (same as click behavior)\n if (KeyUtil.isKeyCode(keyboardEvent, [SPACE, ENTER])) {\n // Check if this is a NavigationMoreButtonComponent (More button itself)\n if (\n this._listItemComponent &&\n 'type' in this._listItemComponent &&\n (this._listItemComponent as any).type === 'showMore'\n ) {\n return;\n }\n\n // Prevent default scrolling behavior for Space\n keyboardEvent.preventDefault();\n\n if (this.inPopover || !this._listItemComponent?.isVisible$() || this._listItemComponent?.isOverflow$()) {\n this._navigation.closePopups();\n }\n\n // Ignore if link has URL applied to it (let router handle it)\n if (this.routerLink) {\n return;\n }\n\n // Handle selection directly if in click mode\n if (this._navigation.selectionMode === 'click' && this._listItemComponent) {\n const canSelect = this._canItemBeSelected();\n\n if (canSelect) {\n this._navigation.service.setSelectedItem(this._listItemComponent);\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n } else {\n // Handle expansion for items with children\n this._listItemComponent?.toggleExpanded();\n }\n return;\n }\n\n if (this.inPopover && KeyUtil.isKeyCode(keyboardEvent, DOWN_ARROW)) {\n this._listItemComponent?.popoverLinkArrowDown();\n return;\n }\n\n if (!KeyUtil.isKeyCode(keyboardEvent, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n // Skip keyboard expansion for More buttons - they handle their own keyboard events\n if ((this._listItemComponent as any).type === 'showMore') {\n return;\n }\n\n const expansionKey = this._rtl?.rtl() ? LEFT_ARROW : RIGHT_ARROW;\n\n this._listItemComponent?.keyboardExpanded(KeyUtil.isKeyCode(keyboardEvent, expansionKey));\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._listItemComponent?.unregisterLink(this);\n }\n\n /** @hidden */\n private _updateTabIndex(): void {\n try {\n // Check if this link should have tabindex=0\n const isActiveItem = this._navigation.getActiveItem()?.link$() === this;\n\n // Check if any ancestor has an open popover\n const isParentPopoverOpen = this._listItemComponent?.popoverOpen$();\n const isGrandparentPopoverOpen = this._listItemComponent?.parentListItem?.popoverOpen$();\n\n // Check if the navigation is inside any popover body (not just navigation item popovers)\n const isInsidePopoverBody = this.elementRef.nativeElement.closest('.fd-popover__body');\n\n // When a popover is open, all links in the popover hierarchy should be focusable\n if (isParentPopoverOpen || isGrandparentPopoverOpen || isInsidePopoverBody) {\n // All links in popover context should be focusable (except disabled ones)\n const tabIndex = 0;\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', tabIndex.toString());\n } else {\n // Normal case: active item gets tabindex=0, others get -1\n const tabIndex = isActiveItem ? 0 : -1;\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', tabIndex.toString());\n }\n } catch {\n // Fallback to -1 if there's any issue during evaluation\n this._renderer.setAttribute(this.elementRef.nativeElement, 'tabindex', '-1');\n }\n }\n\n /** @hidden */\n private _canItemBeSelected(): boolean {\n if (!this._listItemComponent) {\n return false;\n }\n\n // Group items (headers) cannot be selected\n if (this._listItemComponent.isGroup$()) {\n return false;\n }\n\n // Items with children that don't have a router link cannot be selected\n // (they should only expand/collapse)\n if (this._listItemComponent.hasChildren$() && !this.routerLink) {\n return false;\n }\n\n // Separator and spacer items cannot be selected\n if (this._listItemComponent.separator || this._listItemComponent.spacer) {\n return false;\n }\n\n // All other items (leaf items and items with both links and children) can be selected\n return true;\n }\n}\n","@if (glyph) {\n <fd-icon\n [glyph]=\"glyph\"\n [font]=\"glyphFont\"\n class=\"fd-navigation__icon\"\n [attr.role]=\"'presentation'\"\n [ariaHidden]=\"true\"\n ></fd-icon>\n}\n<span class=\"fd-navigation__text\">\n <ng-content></ng-content>\n</span>\n@if (external) {\n <span\n class=\"fd-navigation__external-link-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"external link indicator\"\n ></span>\n}\n<span\n class=\"fd-navigation__selection-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"selection indicator\"\n>\n</span>\n@if (_listItemComponent?.hasChildren$() && !inPopover && !routerLink) {\n <span\n class=\"fd-navigation__has-children-indicator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n aria-label=\"has children indicator, expanded\"\n >\n </span>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, ENTER, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n ContentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n Input,\n input,\n OnDestroy,\n QueryList,\n signal,\n TemplateRef,\n ViewChild,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { HasElementRef, KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { PopoverBodyComponent, PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { filter, startWith } from 'rxjs';\nimport { NavigationListItemDirective } from '../../directives/navigation-list-item-ref.directive';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport {\n FdbNavigationListItem,\n FdbNavigationListItemCmp,\n LIST_ITEM_CLASS\n} from '../../models/navigation-list-item.class';\nimport { NavigationService } from '../../services/navigation.service';\nimport { NavigationLinkRefDirective } from '../navigation-link/navigation-link.component';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\nlet navListItemUniqueId = 0;\n\n@Directive({\n selector: '[fdbNavigationListItemMarker]',\n standalone: true\n})\nexport class NavigationListItemMarkerDirective implements HasElementRef {\n /** Element reference. */\n readonly elementRef = inject(ElementRef);\n /** @hidden */\n constructor() {\n inject(NavigationListItemComponent).marker = this;\n }\n}\n\n@Component({\n selector: 'fdb-navigation-list-item',\n imports: [\n NgTemplateOutlet,\n NavigationListComponent,\n PopoverComponent,\n PopoverBodyComponent,\n NavigationListItemMarkerDirective,\n NgClass\n ],\n templateUrl: './navigation-list-item.component.html',\n styles: [],\n providers: [\n NavigationService,\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationListItemComponent\n },\n {\n provide: FdbNavigationListItemCmp,\n useExisting: NavigationListItemComponent\n }\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NavigationListItemComponent extends FdbNavigationListItem implements AfterViewInit, OnDestroy {\n /** @hidden */\n @Input()\n set class(value: Nullable<string>) {\n this._class$.set(value);\n }\n\n get class(): Nullable<string> {\n return this._class$();\n }\n\n /** Whether the list item represents \"Home\" item. */\n @Input({ transform: booleanAttribute })\n set home(value: boolean) {\n this._home$.set(value);\n }\n\n get home(): boolean {\n return this._home$();\n }\n\n /** Whether the list item represents \"Quick create\" button. */\n @Input({ transform: booleanAttribute })\n set quickCreate(value: boolean) {\n this.quickCreate$.set(value);\n }\n\n get quickCreate(): boolean {\n return this.quickCreate$();\n }\n\n /** Whether the list item should be rendered as a separator */\n @Input({ transform: booleanAttribute })\n set separator(value: boolean) {\n this._separator$.set(value);\n }\n get separator(): boolean {\n return this._separator$();\n }\n\n /** Whether the list item should be rendered as a spacer */\n @Input({ transform: booleanAttribute })\n set spacer(value: boolean) {\n this._spacer$.set(value);\n }\n get spacer(): boolean {\n return this._spacer$();\n }\n\n /** Whether the list item should be rendered as a group. */\n @Input({ transform: booleanAttribute })\n set group(group: boolean) {\n this.isGroup$.set(group);\n }\n\n get group(): boolean {\n return this.isGroup$();\n }\n\n /** Whether the list item is expanded. */\n @Input({ transform: booleanAttribute })\n set expanded(expanded: boolean) {\n this.expanded$.set(expanded);\n }\n\n get expanded(): boolean {\n return this.expanded$();\n }\n\n /** Whether the item should be marked as selected. */\n @Input({ transform: booleanAttribute })\n set selected(selected: boolean) {\n this._manuallySelected$.set(selected);\n }\n\n get selected(): boolean {\n return this.selected$();\n }\n\n /** Whether the item is disabled. */\n @Input({ transform: booleanAttribute })\n set disabled(disabled: boolean) {\n this.disabled$.set(disabled);\n }\n\n get disabled(): boolean {\n return this.disabled$();\n }\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: false })\n listItems: QueryList<FdbNavigationListItem>;\n\n /** Link reference. */\n @ContentChild(FdbNavigationItemLink)\n set link(value: Nullable<FdbNavigationItemLink>) {\n this.link$.set(value);\n }\n\n /**\n * Link template reference.\n */\n @ContentChild(NavigationLinkRefDirective)\n linkRef: Nullable<NavigationLinkRefDirective>;\n\n /** Renderer template reference. */\n @ViewChild('renderer')\n set renderer(renderer: TemplateRef<any> | undefined) {\n afterNextRender(\n () => {\n this.renderer$.set(renderer || null);\n },\n { injector: this._injector }\n );\n }\n\n /** ID for the navigation list item. Default one is assigned if not provided. */\n id = input(`fdb-nav-list-item-${++navListItemUniqueId}`);\n\n /** Type of the list item. Whether its a standard item or a \"show more\" button container. */\n readonly type: 'item' | 'showMore' = 'item';\n\n /** List item placement container. */\n readonly placementContainer =\n inject(FdbNavigationContentContainer, {\n skipSelf: true,\n optional: true\n }) || undefined;\n\n /**\n * Whether the list item is visible in the main navigation list container.\n */\n readonly isVisible$ = computed(() => {\n if (this.isOverflow$()) {\n return false;\n }\n\n if (!this.parentListItem) {\n return this.isGroup$() ? !this.navigation.isSnapped$() : true;\n }\n\n if (this.navigation.isSnapped$()) {\n return this.normalizedLevel$() < 3;\n }\n\n return this.parentListItem.isVisible$() && this.parentListItem.expanded$();\n });\n\n /** Whether the item is disabled. Cached to avoid repeated signal calls. */\n readonly _isDisabledCached$ = computed(() => this.disabled$());\n\n /**\n * Whether the item is navigatable via the keyboard.\n */\n get skipNavigation(): boolean {\n return this.spacer || this.separator || this._isDisabledCached$();\n }\n\n /** aria-expanded attribute value. */\n readonly expandedAttr$ = computed(() =>\n this.navigation.isSnapped$() ? this.popoverOpen$() && !this.isOverflow$() : this.expanded$()\n );\n\n /** Role attribute value based on navigation state. */\n readonly roleAttr$ = computed(() => {\n if (this.navigation.isSnapped$()) {\n // In popover context (when parent list item exists), child items should be treeitem\n if (this.parentListItem && this.parentListItem.popoverOpen$()) {\n return 'treeitem';\n }\n // In overflow menu context (More button popover), items should be menuitem\n if (this.isOverflow$()) {\n return 'menuitem';\n }\n return 'menuitemradio';\n }\n return 'treeitem';\n });\n\n /** aria-checked attribute value for menuitemradio role. */\n readonly ariaCheckedAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.roleAttr$() === 'menuitemradio') {\n return this.isActiveAttr$();\n }\n return undefined;\n });\n\n /** aria-selected attribute value - kept in both expanded and snapped modes. */\n readonly ariaSelectedAttr$ = computed(() => this.isActiveAttr$());\n\n /** aria-level attribute value - only for treeitem role. */\n readonly ariaLevelAttr$ = computed(() => {\n if (!this.navigation.isSnapped$()) {\n return this.level$();\n }\n return undefined;\n });\n\n /** aria-owns attribute value for items with children. */\n readonly ariaOwnsAttr$ = computed(() => {\n if (this.hasChildren$()) {\n return `${this.id()}-list`;\n }\n return undefined;\n });\n\n /** ID attribute for child lists. */\n readonly childListIdAttr$ = computed(() => {\n if (this.hasChildren$()) {\n return `${this.id()}-list`;\n }\n return undefined;\n });\n\n /** aria-label attribute value for snapped mode menuitemradio. */\n readonly ariaLabelAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.roleAttr$() === 'menuitemradio') {\n const link = this.link$();\n if (link?.elementRef?.nativeElement) {\n const linkElement = link.elementRef.nativeElement;\n const textContent = linkElement.textContent?.trim();\n if (textContent) {\n return textContent;\n }\n }\n }\n return undefined;\n });\n\n /** Expander aria-label attribute value. */\n readonly expanderAriaLabelAttr$ = computed(() => this._expanderAriaLabel$());\n\n /** aria-haspopup attribute value for snapped mode items with children. */\n readonly ariaHasPopupAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$()) {\n // In overflow menu, items with submenus should have aria-haspopup=\"menu\"\n if (this.isOverflow$()) {\n return 'menu';\n }\n // Regular navigation items should have aria-haspopup=\"dialog\"\n return 'dialog';\n }\n return undefined;\n });\n\n /** aria-current attribute value for snapped mode items with children. */\n readonly ariaCurrentAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$()) {\n return 'page';\n }\n return undefined;\n });\n\n /** Wrapper role attribute for snapped mode popovers. */\n readonly wrapperRoleAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$() && !this.isOverflow$()) {\n return 'tree';\n }\n return undefined;\n });\n\n /** Wrapper aria-roledescription for snapped mode popovers. */\n readonly wrapperAriaRoleDescriptionAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && this.hasChildren$() && !this.isOverflow$()) {\n return this._snappedPopoverRoleDescription$();\n }\n return undefined;\n });\n\n /** Title item role for snapped mode - should be treeitem in popovers. */\n readonly titleItemRoleAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n return 'treeitem';\n }\n return this.roleAttr$();\n });\n\n /** Title item aria-selected for snapped mode - should not be selected if children are selected. */\n readonly titleItemAriaSelectedAttr$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n // In popover, if any child is selected, the parent should not have aria-selected\n const hasSelectedChild = this.listItems$().some((item) => item?.isActiveAttr$());\n if (hasSelectedChild) {\n return false;\n }\n // Otherwise use the normal selected state\n return this.ariaSelectedAttr$();\n }\n return this.ariaSelectedAttr$();\n });\n readonly titleItemFocusable$ = computed(() => {\n if (this.navigation.isSnapped$() && !this.isOverflow$()) {\n // Check if the parent item has the with-expander class (two-click area)\n const parentItemElement = this.marker?.elementRef?.nativeElement;\n if (parentItemElement) {\n return parentItemElement.classList.contains('fd-navigation__item--with-expander');\n }\n return false; // Default to not focusable for one-click areas\n }\n return true;\n });\n\n /** CSS Class signal. */\n readonly class$ = computed(() =>\n [\n LIST_ITEM_CLASS,\n this._class$(),\n this._separator$() ? `${LIST_ITEM_CLASS}--separator` : '',\n this._spacer$() ? `${LIST_ITEM_CLASS}--spacer` : '',\n this._home$() ? `${LIST_ITEM_CLASS}--home` : ''\n ]\n .filter((k) => !!k)\n .join(' ')\n );\n\n /** Combined selected state - considers both manual selection and service selection. */\n readonly selected$ = computed(() => {\n // In router mode, only consider manual selection\n if (this.navigation.selectionMode === 'router') {\n return this._manuallySelected$();\n }\n\n // In click mode, check both manual selection and service selection\n // But manual selection should only be considered if no item is selected via service\n if (this.navigation.selectionMode === 'click') {\n const serviceSelected = this.navigation.service.selectedItem$() === this;\n const manuallySelected = this._manuallySelected$() && this.navigation.service.selectedItem$() === null;\n\n return serviceSelected || manuallySelected;\n }\n\n return false;\n });\n\n /** @hidden */\n readonly quickCreate$ = signal(false);\n\n /** @hidden */\n readonly _moreButtonRef$ = computed(() => this._parentNavigationList?.moreButtonRef || null);\n\n /** Optional parent list component. */\n readonly parentListItemComponent = inject(FdbNavigationListItemCmp, {\n optional: true,\n skipSelf: true\n });\n\n /** @hidden */\n get parentListItem(): FdbNavigationListItem | null {\n return (\n this._parentNavigationListItemDirective?.parentNavListItemDirective?._item || this.parentListItemComponent\n );\n }\n\n /**\n * @hidden\n * Popover position. Changes based on rtl value.\n */\n protected readonly popoverPlacement = computed<Placement>(() => (this._isRtl() ? 'left-start' : 'right-start'));\n\n /** @hidden Max-height for the overflow submenu, computed dynamically based on viewport position. */\n protected readonly overflowSubmenuMaxHeight = signal<string | null>(null);\n\n /** @hidden */\n private readonly _home$ = signal(false);\n\n /** Manual selection state signal (for router-based selection mode). */\n private readonly _manuallySelected$ = signal(false);\n\n /** @hidden */\n private readonly _class$ = signal<Nullable<string>>(null);\n\n /** @hidden */\n private readonly _separator$ = signal(false);\n\n /** @hidden */\n private readonly _spacer$ = signal(false);\n\n /** @hidden */\n private readonly _links: FdbNavigationItemLink[] = [];\n\n /** @hidden */\n private readonly _childLists: NavigationListComponent[] = [];\n\n /** @hidden */\n private _keyManager: Nullable<FocusKeyManager<FdbNavigationListItem>>;\n\n /** @hidden */\n private readonly _injector = inject(Injector);\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private _translationResolver = inject(TranslationResolver);\n\n /** Translation signal for snapped popover role description. */\n private readonly _snappedPopoverRoleDescription$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.snappedPopoverRoleDescription')\n );\n\n /** Translation signal for expander aria-label. */\n private readonly _expanderAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.expanderAriaLabel')\n );\n\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /**\n * @hidden\n * Directive that used during data-driven rendering.\n */\n private readonly _parentNavigationListItemDirective = inject(NavigationListItemDirective, { optional: true });\n\n /** @hidden */\n private readonly _parentNavigationService = inject(NavigationService, {\n skipSelf: true,\n optional: true\n });\n\n /** @hidden */\n private readonly _parentNavigationList = inject(NavigationListComponent, {\n skipSelf: true,\n optional: true\n });\n\n /** @hidden */\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @hidden */\n private readonly _itemContainer = viewChild<ElementRef>('itemContainer');\n\n /** @hidden */\n private readonly _overflowSubmenuContainer = viewChild<ElementRef>('overflowSubmenuContainer');\n\n /** @hidden */\n constructor() {\n super();\n effect(() => {\n if (this.popoverOpen$()) {\n const listItems = this.listItems$().filter(Boolean) as FdbNavigationListItem[];\n this._keyManager = new FocusKeyManager(listItems)\n .withVerticalOrientation()\n .skipPredicate((item) => item.skipNavigation);\n } else {\n this._keyManager?.destroy();\n }\n });\n\n // We need to track child directives change and set list items based on that.\n effect(() => {\n if (!this._parentNavigationListItemDirective?.childDirectives()) {\n return;\n }\n\n const children = this._parentNavigationListItemDirective.childDirectives();\n const mappedItems = Array.from(children).map((child) => child._item);\n\n this.listItems$.set(mappedItems);\n });\n\n this._parentNavigationListItemDirective?.registerItem(this);\n\n this.navigation.closeAllPopups.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this.popoverOpen$.set(false);\n });\n\n // Listen for selection changes to implement single-selection behavior\n this.navigation.service.selectionChanged$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((selectedItem) => {\n // If another item was selected and we're in click mode, clear our manual selection\n if (this.navigation.selectionMode === 'click' && selectedItem !== this && this._manuallySelected$()) {\n this._manuallySelected$.set(false);\n }\n });\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._keyManager?.destroy();\n }\n\n /** @hidden */\n _focusBeforeList(): void {\n if (this.popoverOpen$()) {\n this._focusPopoverLink();\n }\n }\n\n /**\n * @hidden\n * When item is focused, we notify list container about it to update active index in FocusKeyManager.\n */\n _focusInHandler(): void {\n if (!this.parentListItem?.popoverOpen$() && !this.isOverflow$()) {\n this.navigation.setActiveItem(this);\n return;\n }\n this._parentNavigationService?.currentItem$.next(this);\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this.listItems.changes\n .pipe(\n filter(() => !this._parentNavigationListItemDirective),\n startWith(null),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.listItems$.set(this.listItems.toArray());\n });\n }\n\n /** @hidden */\n registerLink(link: FdbNavigationItemLink): void {\n if (this._links.indexOf(link) === -1) {\n this._links.push(link);\n }\n }\n\n /** @hidden */\n unregisterLink(link: FdbNavigationItemLink): void {\n this._links.splice(this._links.indexOf(link), 1);\n }\n\n /** @hidden */\n registerChildList(list: NavigationListComponent): void {\n if (this._childLists.includes(list)) {\n return;\n }\n this._childLists.push(list);\n }\n\n /** @hidden */\n unregisterChildList(list: NavigationListComponent): void {\n if (!this._childLists.includes(list)) {\n return;\n }\n this._childLists.splice(this._childLists.indexOf(list), 1);\n }\n\n /** @hidden */\n handleHorizontalNavigation(isExpand: boolean): void {\n console.log(isExpand);\n }\n\n /**\n * Callback method when Arrow down is pressed on the link in popover.\n */\n popoverLinkArrowDown(): void {\n this._keyManager?.setActiveItem(0);\n }\n\n /** @Hidden */\n _innerListKeydown(event: KeyboardEvent): void {\n if (!this.popoverOpen$()) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, UP_ARROW) && this._keyManager?.activeItemIndex === 0) {\n this._focusPopoverLink();\n return;\n }\n\n if (KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW])) {\n this._keyManager?.onKeydown(event);\n return;\n }\n\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n const isGoBack = KeyUtil.isKeyCode(event, this._isRtl() ? LEFT_ARROW : RIGHT_ARROW);\n\n if (!isGoBack) {\n return;\n }\n\n this._snappedItemKeyboardExpandedHandler(false);\n }\n\n /** Toggles expanded state of the item. */\n toggleExpanded(): void {\n if (this.disabled$()) {\n return;\n }\n\n if (!this.hasChildren$()) {\n return;\n }\n\n // In snapped mode, toggle popover instead of expanded state\n if (this.navigation.isSnapped$()) {\n this.popoverOpen$.update((open) => !open);\n } else {\n this.expanded$.update((expanded) => !expanded);\n }\n }\n\n /** Handles item click for both selection and expansion based on item type and navigation mode. */\n handleItemClick(): void {\n if (this.disabled$()) {\n return;\n }\n\n // Let the navigation link handle expansion for items with links\n // Only handle expansion here for items without any links\n if (this.hasChildren$() && !this.link$()) {\n this.toggleExpanded();\n return;\n }\n\n // Handle selection in click mode for selectable items\n if (this.navigation.selectionMode === 'click' && this.canItemBeSelected()) {\n this.navigation.service.setSelectedItem(this);\n }\n }\n\n /** Handles keydown events for navigation item actions. */\n handleItemKeydown(event: KeyboardEvent): void {\n // For quick create items, execute the click action on Enter/Space\n if (this.quickCreate$() && KeyUtil.isKeyCode(event, [ENTER, SPACE])) {\n event.preventDefault();\n event.stopPropagation();\n\n // Trigger click on the link element if it exists\n const linkElement = this.link$()?.elementRef?.nativeElement;\n if (linkElement) {\n linkElement.click();\n }\n }\n }\n\n /** Callback method when user used keyboard arrows to expand/collapse list item. */\n keyboardExpanded(shouldExpand: boolean): void {\n if (this.isOverflow$()) {\n this._overflowItemKeyboardExpandedHandler(shouldExpand);\n } else if (this.navigation.isSnapped$()) {\n this._snappedItemKeyboardExpandedHandler(shouldExpand);\n } else {\n this._visibleItemKeyboardExpandedHandler(shouldExpand);\n }\n }\n\n /**\n * Focus method implementation.\n * Used by main navigation component FocusKeyManager.\n * @param origin\n */\n focus(): void {\n // If popover is open, focus will be automatically shifted to cloned link.\n if (this.popoverOpen$() && !this.isOverflow$()) {\n return;\n }\n this.focusLink();\n }\n\n /**\n * Focuses inner link element.\n * Optionally closes the popover.\n */\n focusLink(closePopover = false): void {\n this.link$()?.elementRef.nativeElement.focus();\n\n if (closePopover) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n _onPopoverOpen(isOpen: boolean, popover: PopoverComponent): void {\n // Set trigger if not already set\n const itemContainer = this._itemContainer();\n if (isOpen && !popover.trigger() && itemContainer) {\n popover.trigger.set(itemContainer);\n }\n\n this.popoverOpen$.set(isOpen);\n if (isOpen) {\n afterNextRender(\n () => {\n // Force update of tabindex for all child links before focusing\n this._ensureChildTabindexUpdated();\n setTimeout(() => {\n // Try to use the FocusKeyManager first\n if (this._keyManager) {\n this._keyManager.setActiveItem(0);\n return;\n }\n\n // Fallback: Use component data structures to find the first focusable link\n const firstFocusableLink = this._links.find(\n (link) => link.inPopover && link.elementRef?.nativeElement\n );\n\n if (firstFocusableLink) {\n firstFocusableLink.elementRef.nativeElement.focus();\n return;\n }\n\n // Alternative: Use listItems to find first item's link\n const firstListItem = this.listItems$().find((item) => item && !item.skipNavigation);\n if (firstListItem) {\n const link = firstListItem.link$();\n if (link?.elementRef?.nativeElement) {\n link.elementRef.nativeElement.focus();\n return;\n }\n }\n\n // Last resort: use the popover's built-in focus management\n try {\n const popoverBody = popover.popoverBody();\n popoverBody?._focusFirstTabbableElement(true);\n } catch (error) {\n console.error('Error focusing in popover:', error);\n\n const popoverBody = popover.popoverBody();\n const popoverBodyElement = popoverBody?._elementRef?.nativeElement;\n if (popoverBodyElement) {\n const firstFocusableElement = popoverBodyElement.querySelector(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n }\n }\n }, 0);\n },\n { injector: this._injector }\n );\n } else {\n // When popover closes, return focus to the parent link (for snapped state)\n if (this.navigation.isSnapped$()) {\n afterNextRender(\n () => {\n this.focusLink();\n },\n { injector: this._injector }\n );\n }\n }\n }\n\n /**\n * Determines if this item can be selected based on its type and structure.\n * @returns true if the item can be selected, false otherwise\n */\n canItemBeSelected(): boolean {\n // Group items (headers) cannot be selected\n if (this.isGroup$()) {\n return false;\n }\n\n // Quick create items cannot be selected (they execute actions instead)\n if (this.quickCreate$()) {\n return false;\n }\n\n // Items with children that don't have a router link cannot be selected\n // (they should only expand/collapse)\n if (this.hasChildren$() && !this.link$()?.routerLink) {\n return false;\n }\n\n // Separator and spacer items cannot be selected\n if (this.separator || this.spacer) {\n return false;\n }\n\n // All other items (leaf items and items with both links and children) can be selected\n return true;\n }\n\n /**\n * @hidden\n * Handles mouseenter on overflow items to dynamically adjust the submenu max-height.\n * Uses requestAnimationFrame to ensure the browser has laid out the submenu\n * (which transitions from display:none to display:block via CSS :hover)\n * before measuring its viewport position.\n */\n onOverflowItemMouseEnter(): void {\n if (!this.isOverflow$() || !this.hasChildren$()) {\n return;\n }\n\n const submenuEl = this._overflowSubmenuContainer()?.nativeElement;\n if (!submenuEl) {\n return;\n }\n\n // Wait for the browser to complete layout after CSS :hover makes the submenu visible\n requestAnimationFrame(() => {\n const rect = submenuEl.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const margin = 16; // 1rem safety margin from viewport edge\n const availableHeight = viewportHeight - rect.top - margin;\n\n if (availableHeight > 0) {\n this.overflowSubmenuMaxHeight.set(`${availableHeight}px`);\n }\n });\n }\n\n private _focusPopoverLink(): void {\n this._links.find((link) => link.inPopover)?.elementRef.nativeElement.focus();\n }\n\n /** @hidden */\n private _ensureChildTabindexUpdated(): void {\n // When popover is open, all links should be focusable\n this._links.forEach((link) => {\n if (link.elementRef?.nativeElement) {\n // Simple logic: if any popover is open in the hierarchy, all links are focusable\n const tabIndex = this.popoverOpen$() ? 0 : -1;\n link.elementRef.nativeElement.setAttribute('tabindex', tabIndex.toString());\n }\n });\n }\n\n /** @hidden */\n private _visibleItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (!this.hasChildren$()) {\n if (!shouldExpand) {\n this.parentListItem?.focus();\n }\n return;\n }\n\n if (!shouldExpand) {\n // If item already collapsed, shift focus to parent link\n if (!this.expanded$()) {\n this.parentListItem?.focus();\n return;\n }\n this.expanded$.set(false);\n } else {\n if (this.expanded$()) {\n this.listItems.first?.focus();\n return;\n }\n this.expanded$.set(true);\n }\n }\n\n /** @hidden */\n private _snappedItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (!this.hasChildren$()) {\n return;\n }\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n this.link$()?.elementRef.nativeElement.focus();\n }\n }\n\n /**\n * @hidden\n * Method used to handle keyboard navigation for list item that is inside overflow container.\n */\n private _overflowItemKeyboardExpandedHandler(shouldExpand: boolean): void {\n if (shouldExpand && this._childLists.length > 0) {\n const firstList = this._childLists[0];\n firstList.setActiveItemIndex(0);\n }\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n this.link?.elementRef.nativeElement.focus();\n }\n }\n}\n","<!-- General renderer. -->\n<ng-template #renderer>\n @if (!separator) {\n <div\n class=\"fd-navigation__item\"\n [class.fd-navigation__item--group]=\"isGroup$()\"\n [class.fd-navigation__item--create]=\"quickCreate$()\"\n [class.fd-navigation__item--child]=\"normalizedLevel$() > 2\"\n [class.fd-navigation__item--overflow]=\"isOverflow$()\"\n [class.fd-navigation__item--with-expander]=\"!!link$()?.routerLink && hasChildren$()\"\n [class.fd-navigation__item--disabled]=\"disabled$()\"\n [attr.id]=\"id()\"\n [attr.role]=\"roleAttr$()\"\n [attr.aria-level]=\"ariaLevelAttr$()\"\n [attr.aria-label]=\"ariaLabelAttr$()\"\n [attr.aria-selected]=\"ariaSelectedAttr$()\"\n [attr.aria-checked]=\"ariaCheckedAttr$()\"\n [attr.aria-expanded]=\"expandedAttr$()\"\n [attr.aria-disabled]=\"disabled$()\"\n [attr.aria-owns]=\"ariaOwnsAttr$()\"\n [attr.aria-haspopup]=\"ariaHasPopupAttr$()\"\n [attr.aria-current]=\"ariaCurrentAttr$()\"\n [attr.normalized-level]=\"normalizedLevel$()\"\n (focusin)=\"_focusInHandler()\"\n (click)=\"handleItemClick()\"\n (keydown)=\"handleItemKeydown($event)\"\n (mouseenter)=\"onOverflowItemMouseEnter()\"\n fdbNavigationListItemMarker\n #itemContainer\n >\n @if (!navigation.isSnapped$() || !hasChildren$()) {\n <ng-template\n [ngTemplateOutlet]=\"linkRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: true }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"snappedNavigationItemRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: itemContainer }\"\n ></ng-template>\n }\n </div>\n @if (isOverflow$() && hasChildren$()) {\n <ng-template [ngTemplateOutlet]=\"overflowItemListRenderer\"></ng-template>\n }\n @if (!navigation.isSnapped$()) {\n <ng-template [ngTemplateOutlet]=\"listRenderer\"></ng-template>\n }\n }\n</ng-template>\n<!-- Snapped navigation list item renderer. Implicit context points to the popover trigger element. -->\n<ng-template #snappedNavigationItemRenderer let-itemContainer>\n <ng-template [ngTemplateOutlet]=\"linkRenderer\" [ngTemplateOutletContext]=\"{ $implicit: false }\"></ng-template>\n @if (!isOverflow$()) {\n <fd-popover\n #popover\n [noArrow]=\"true\"\n additionalBodyClass=\"fd-navigation__list-container\"\n [isOpen]=\"popoverOpen$()\"\n (isOpenChange)=\"_onPopoverOpen($event, popover)\"\n [trigger]=\"itemContainer\"\n [focusAutoCapture]=\"true\"\n [restoreFocusOnClose]=\"false\"\n [focusTrapped]=\"true\"\n [placement]=\"popoverPlacement()\"\n [disableScrollbar]=\"true\"\n >\n <fd-popover-body [ngClass]=\"navigation.classList$()\">\n <ng-template\n [ngTemplateOutlet]=\"wrapperRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: true }\"\n ></ng-template>\n </fd-popover-body>\n </fd-popover>\n }\n</ng-template>\n<!-- Generic link renderer. -->\n<ng-template #linkRenderer let-showToggleButton>\n <ng-template [ngTemplateOutlet]=\"linkRef?.templateRef || null\"></ng-template>\n @if (!!link$()?.routerLink && hasChildren$()) {\n <span\n class=\"fd-navigation__has-children-indicator\"\n role=\"button\"\n [attr.aria-label]=\"expanderAriaLabelAttr$()\"\n (click)=\"toggleExpanded()\"\n ></span>\n }\n</ng-template>\n<!-- Generic list renderer. Used when navigation is not snapped. -->\n<ng-template #listRenderer>\n @if (isGroup$() && normalizedLevel$() === 1) {\n <ul\n fdb-navigation-list\n [listItems]=\"listItems$()\"\n parentItems\n [moreButtonRef]=\"_moreButtonRef$()\"\n [attr.id]=\"id() + '-list'\"\n ></ul>\n } @else if (hasChildren$()) {\n <div class=\"fd-navigation__list-container\">\n <ng-template\n [ngTemplateOutlet]=\"wrapperRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: false }\"\n ></ng-template>\n </div>\n }\n</ng-template>\n<!-- Template used for rendering sublist of items for the list item that is currently in overflow menu. -->\n<ng-template #overflowItemListRenderer>\n <div\n #overflowSubmenuContainer\n class=\"fd-navigation__list-container fd-navigation__list-container--submenu fd-menu__sublist\"\n [style.max-height]=\"overflowSubmenuMaxHeight()\"\n >\n <ng-template [ngTemplateOutlet]=\"wrapperRenderer\" [ngTemplateOutletContext]=\"{ $implicit: true }\"></ng-template>\n </div>\n</ng-template>\n<!-- Generic list renderer. Implicit context defines whether the inner list should handle keyboard navigation by its own. -->\n<ng-template #wrapperRenderer let-keyboardNavigation>\n <div\n class=\"fd-navigation__list-wrapper\"\n [attr.role]=\"wrapperRoleAttr$()\"\n [attr.aria-roledescription]=\"wrapperAriaRoleDescriptionAttr$()\"\n >\n @if (navigation.isSnapped$() && !isOverflow$()) {\n <!-- If opener link itself is active, project aria-checked attribute to link repeater too for snapped mode. -->\n <div\n class=\"fd-navigation__item fd-navigation__item--title fd-navigation__item--child\"\n [attr.role]=\"titleItemRoleAttr$()\"\n [attr.aria-selected]=\"titleItemAriaSelectedAttr$()\"\n [attr.tabindex]=\"titleItemFocusable$() ? 0 : -1\"\n >\n <ng-template\n [ngTemplateOutlet]=\"linkRenderer\"\n [ngTemplateOutletContext]=\"{ $implicit: false }\"\n ></ng-template>\n </div>\n }\n <ul\n fdb-navigation-list\n [listItems]=\"listItems$() || []\"\n [childItems]=\"true\"\n [role]=\"isOverflow$() ? 'menu' : 'group'\"\n (keydown)=\"(false)\"\n (focusBefore)=\"_focusBeforeList()\"\n [withKeyboardNavigation]=\"keyboardNavigation\"\n [moreButtonRef]=\"_moreButtonRef$()\"\n [attr.id]=\"childListIdAttr$()\"\n ></ul>\n </div>\n</ng-template>\n","import { LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';\nimport { NgClass } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyUtil, Nullable, RtlService } from '@fundamental-ngx/cdk';\nimport { PopoverBodyComponent, PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Placement } from '@fundamental-ngx/core/shared';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { FdbNavigationItemLink } from '../../models/navigation-item-link.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationLinkComponent } from '../navigation-link/navigation-link.component';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\n\nexport interface NavigationMoreButtonRefContext {\n $implicit: () => void;\n}\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'li[fdb-navigation-more-button]',\n imports: [NavigationLinkComponent, NavigationListComponent, PopoverComponent, PopoverBodyComponent, NgClass],\n providers: [\n {\n provide: FdbNavigationListItem,\n useExisting: NavigationMoreButtonComponent\n }\n ],\n templateUrl: './navigation-more-button.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-navigation__list-item'\n }\n})\nexport class NavigationMoreButtonComponent implements AfterViewInit {\n /** @hidden */\n @Input()\n listItems: FdbNavigationListItem[] = [];\n\n /** @hidden */\n @ViewChild(FdbNavigationItemLink)\n private readonly _link: Nullable<FdbNavigationItemLink>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n private readonly _popover: Nullable<PopoverComponent>;\n\n /** @hidden */\n @ViewChild(NavigationListComponent)\n private readonly _navigationList: Nullable<NavigationListComponent>;\n\n /** @hidden */\n customMoreRenderer: Nullable<TemplateRef<any>>;\n\n /** Whether the show more is visible. */\n isVisible$ = signal(true);\n\n /** Whether popover is open. Applicable for snapped navigation state. */\n readonly popoverOpen$ = signal(false);\n\n /** ID for the more button. */\n readonly id = signal('fdb-navigation-more-button');\n\n /** @hidden */\n readonly type = 'showMore';\n\n /** @hidden */\n readonly placementContainer = undefined;\n\n /**\n * Whether the item is in overflow menu.\n */\n readonly isOverflow$ = signal(false);\n\n /** Whether item has child items. */\n readonly hasChildren$ = signal(false);\n\n /** @hidden */\n readonly _navigation = inject(FdbNavigation);\n\n /**\n * Link reference.\n */\n readonly link$ = signal<Nullable<FdbNavigationItemLink>>(null);\n\n /** More button aria-label attribute value. */\n readonly moreButtonAriaLabelAttr$ = computed(() => this._moreButtonAriaLabel$());\n\n /** Overflow menu aria-label attribute value. */\n readonly overflowMenuAriaLabelAttr$ = computed((): string => this._overflowMenuAriaLabel$() || '');\n\n /**\n * @hidden\n * Popover position. Changes based on rtl value.\n */\n protected readonly popoverPlacement = computed<Placement>(() => (this._isRtl() ? 'left-start' : 'right-start'));\n\n /** @hidden */\n private readonly _triggerElement = viewChild<ElementRef>('trigger');\n\n /** @hidden */\n private _popoverClicked = false;\n\n /** @hidden */\n private readonly elementRef = inject(ElementRef);\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly _isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n /** @hidden */\n private _translationResolver = inject(TranslationResolver);\n\n /** Translation signal for more button aria-label. */\n private readonly _moreButtonAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.moreButtonAriaLabel')\n );\n\n /** Translation signal for overflow menu aria-label. */\n private readonly _overflowMenuAriaLabel$ = computed(() =>\n this._translationResolver.resolve(this._langSignal(), 'btpNavigation.overflowMenuAriaLabel')\n );\n\n /** @hidden */\n constructor() {\n this._navigation.closeAllPopups.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe(() => {\n this.popoverOpen$.set(false);\n });\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n // Set popover trigger reference\n const triggerElement = this._triggerElement();\n if (this._popover?.trigger && triggerElement) {\n this._popover.trigger.set(triggerElement);\n }\n }\n\n /** @hidden */\n _onPopoverOpenChange(isOpen: boolean): void {\n this.popoverOpen$.set(isOpen);\n\n // When popover opens, focus the first item\n if (isOpen) {\n // Use a short timeout to ensure the DOM is updated\n setTimeout(() => {\n if (this._navigationList) {\n let firstValidIndex = 0;\n const items = this._navigationList._listItems || [];\n for (let i = 0; i < items.length; i++) {\n if (items[i] && items[i]?.link$()?.elementRef?.nativeElement) {\n firstValidIndex = i;\n break;\n }\n }\n\n this._navigationList.setActiveItemIndex(firstValidIndex);\n return;\n }\n\n // Fallback: Focus the first item using the listItems array\n if (this.listItems && this.listItems.length > 0) {\n const firstItem = this.listItems[0];\n const link = firstItem.link$();\n\n if (link?.elementRef?.nativeElement) {\n link.elementRef.nativeElement.focus();\n return;\n }\n }\n\n // Last resort fallback: if direct access fails, try to focus any focusable element in the popover\n const popoverBody = (this._popover as any)?.popoverBody();\n const popoverBodyElement = popoverBody?._elementRef?.nativeElement;\n if (popoverBodyElement) {\n const firstFocusableElement = popoverBodyElement.querySelector(\n 'a, button, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n }\n }, 150);\n }\n }\n\n /** @hidden */\n togglePopover(withClick = false): void {\n this._popoverClicked = withClick;\n this.popoverOpen$.update((value) => !value);\n }\n\n /** @hidden */\n registerLink(): void {}\n\n /** @hidden */\n unregisterLink(): void {}\n\n /** @hidden */\n registerChildList(): void {}\n\n /** @hidden */\n unregisterChildList(): void {}\n\n /** @hidden */\n focus(): void {\n this.focusLink();\n }\n\n /**\n * Focuses inner link element.\n * Optionally closes the popover.\n */\n focusLink(closePopover = false): void {\n this._link?.elementRef.nativeElement.focus();\n if (closePopover) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n toggleExpanded(): void {}\n\n /** @hidden */\n keyboardExpanded(shouldExpand: boolean): void {\n if (shouldExpand && !this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n } else if (!shouldExpand && this.popoverOpen$()) {\n this.popoverOpen$.set(false);\n }\n }\n\n /** @hidden */\n _keydownPopoverToggle(event: KeyboardEvent): void {\n if (!KeyUtil.isKeyCode(event, [LEFT_ARROW, RIGHT_ARROW])) {\n return;\n }\n\n const isRtl = this._isRtl();\n\n if (KeyUtil.isKeyCode(event, isRtl ? LEFT_ARROW : RIGHT_ARROW)) {\n // Open popover only if not already open\n if (!this.popoverOpen$()) {\n this.popoverOpen$.set(true);\n }\n }\n }\n\n /** @hidden */\n canItemBeSelected(): boolean {\n return false; // More button cannot be selected\n }\n}\n","<div\n role=\"menuitem\"\n class=\"fd-navigation__item\"\n [attr.aria-expanded]=\"popoverOpen$()\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-label]=\"moreButtonAriaLabelAttr$()\"\n aria-level=\"1\"\n (click)=\"togglePopover(true)\"\n (keydown)=\"_keydownPopoverToggle($event)\"\n #trigger\n>\n <a fdb-navigation-link glyph=\"overflow\">More Items</a>\n <fd-popover\n #popover\n [triggers]=\"[]\"\n [isOpen]=\"popoverOpen$()\"\n (isOpenChange)=\"_onPopoverOpenChange($event)\"\n [focusTrapped]=\"true\"\n additionalBodyClass=\"fd-navigation__list-container fd-navigation__list-container--menu\"\n [placement]=\"popoverPlacement()\"\n >\n <fd-popover-body [ngClass]=\"_navigation.classList$()\" role=\"menu\">\n <ul\n fdb-navigation-list\n withKeyboardNavigation\n [parentItems]=\"true\"\n [ariaLabel]=\"overflowMenuAriaLabelAttr$()\"\n class=\"fd-menu__list\"\n [listItems]=\"listItems\"\n [moreButtonRef]=\"this\"\n ></ul>\n </fd-popover-body>\n </fd-popover>\n</div>\n","import { PortalModule } from '@angular/cdk/portal';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n QueryList,\n ViewChild,\n ViewEncapsulation,\n computed,\n inject,\n signal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Nullable, resizeObservable } from '@fundamental-ngx/cdk';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport {\n animationFrames,\n asyncScheduler,\n debounceTime,\n filter,\n merge,\n observeOn,\n startWith,\n switchMap,\n take\n} from 'rxjs';\nimport { FdbNavigationContentContainer } from '../../models/navigation-content-container.class';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { NavigationListComponent } from '../navigation-list/navigation-list.component';\nimport { NavigationMoreButtonComponent } from '../navigation-more-button/navigation-more-button.component';\n\nconst FD_NAVIGATION_OVERFLOW_ITEM_CLASS = 'fd-navigation__container--hidden-overflow';\n\n@Component({\n selector: 'fdb-navigation-content-start',\n templateUrl: './navigation-content-start.component.html',\n imports: [PortalModule, NavigationListComponent, NavigationMoreButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-navigation__container fd-navigation__container--top',\n '[style.flex-grow]': '1'\n },\n providers: [\n {\n provide: FdbNavigationContentContainer,\n useExisting: NavigationContentStartComponent\n }\n ],\n hostDirectives: [ScrollbarDirective]\n})\nexport class NavigationContentStartComponent extends FdbNavigationContentContainer implements AfterContentInit {\n /** Whether the list items are content-projected. Used only with data-driven navigation. */\n @Input()\n contentProjected = true;\n\n /**\n * aria-label for the navigation list.\n */\n @Input()\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation list.\n */\n @Input()\n ariaRoleDescription: Nullable<string> = null;\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: true })\n private readonly _listItems: QueryList<FdbNavigationListItem>;\n\n /** @hidden */\n @ViewChild('moreContainer', { read: ElementRef, static: false })\n private readonly _moreContainer: Nullable<ElementRef>;\n\n /** @hidden */\n @ViewChild(NavigationMoreButtonComponent, { static: false })\n private readonly _showMoreButton: Nullable<FdbNavigationListItem>;\n\n /** Whether the container is placed on the start position, or the end position of the navigation. */\n readonly placement: 'start' | 'end' = 'start';\n\n /** Navigation component reference. */\n readonly navigation = inject(FdbNavigation);\n\n /** Inner List items that should be rendered. */\n readonly listItems$ = computed(() => {\n const isSnapped = this.navigation.isSnapped$();\n const totalItems = this.allListItems$().filter((item) => item.normalizedLevel$() < 3);\n return totalItems.filter((item) => {\n const normalizedLevel = item.normalizedLevel$();\n const level = item.level$();\n return isSnapped ? normalizedLevel === 2 : level === 1;\n });\n });\n\n /** @hidden */\n readonly _showMoreButton$ = signal(false);\n\n /** @hidden */\n readonly visibleItems$ = signal<FdbNavigationListItem[]>(this.listItems$());\n\n /** @hidden */\n readonly hiddenItems$ = signal<FdbNavigationListItem[]>([]);\n\n /** @hidden */\n private _calculationInProgress = false;\n\n /** @hidden */\n private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** @hidden */\n private readonly _isSnappedObservable = toObservable(this.navigation.isSnapped$).pipe(\n startWith(this.navigation.isSnapped$())\n );\n\n /** @hidden */\n private readonly _listItemsObservable = toObservable(this.listItems$);\n\n /** @hidden */\n private readonly _cdr = inject(ChangeDetectorRef);\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._listItems.changes\n .pipe(\n startWith(null),\n observeOn(asyncScheduler),\n filter(() => this.contentProjected),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this.allListItems$.set(this._listItems.toArray());\n });\n\n const resize = resizeObservable(this._elementRef.nativeElement).pipe(debounceTime(30));\n\n merge(this._isSnappedObservable, this._listItemsObservable, resize)\n .pipe(\n switchMap(() => animationFrames().pipe(take(1))),\n takeUntilDestroyed(this._destroyRef)\n )\n .subscribe(() => {\n this._calculateVisibleItems();\n });\n\n // Listen for overflow item selections to promote them to visible\n this.navigation.service.overflowItemSelected$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((selectedItem) => {\n this._promoteOverflowItem(selectedItem);\n });\n }\n\n /**\n * @hidden\n * Calculates available space to fit the items.\n * Determines whether to show the \"More\" button if available space is not enough to fit all list items.\n */\n private _calculateVisibleItems(): void {\n if (this._calculationInProgress) {\n return;\n }\n const items = [...this.listItems$()];\n items.forEach((item) => item.hidden$.set(false));\n this.visibleItems$.set([...items]);\n this._cdr.detectChanges();\n if (!this.navigation.isSnapped$()) {\n this._showMoreButton$.set(false);\n this._calculationInProgress = false;\n this.navigation.showMoreButton$.set(null);\n return;\n }\n\n this._elementRef.nativeElement.classList.add(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n\n let availableSpace = this._elementRef.nativeElement.clientHeight - this._elementRef.nativeElement.scrollHeight;\n\n if (availableSpace >= 0) {\n this._showMoreButton$.set(false);\n this._calculationInProgress = false;\n this.navigation.showMoreButton$.set(null);\n this._elementRef.nativeElement.classList.remove(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n this._cdr.detectChanges();\n return;\n }\n\n this._showMoreButton$.set(true);\n this._cdr.detectChanges();\n availableSpace = availableSpace - (this._moreContainer?.nativeElement.clientHeight || 0);\n\n const hiddenItems: FdbNavigationListItem[] = [];\n\n // We are going from the bottom to the top and checking whether the available space is enough to fit the items.\n while (availableSpace < 0 && items.length > 0) {\n const item = items.pop();\n if (!item) {\n continue;\n }\n // Since we are going from the bottom to the top, we need to add item to the list as the first item of the array.\n hiddenItems.unshift(item);\n const itemHeight = item?.marker?.elementRef?.nativeElement?.clientHeight || 0;\n availableSpace = availableSpace + itemHeight;\n item.hidden$.set(true);\n }\n\n this._elementRef.nativeElement.classList.remove(FD_NAVIGATION_OVERFLOW_ITEM_CLASS);\n\n this.visibleItems$.set([...items]);\n this.hiddenItems$.set([...hiddenItems]);\n\n this._showMoreButton$.set(hiddenItems.length > 0);\n this._cdr.detectChanges();\n\n this.navigation.showMoreButton$.set(this._showMoreButton);\n\n this._calculationInProgress = false;\n }\n\n /**\n * @hidden\n * Promotes an overflow item to be the last visible item.\n * Moves the current last visible item to overflow while preserving overflow order.\n */\n private _promoteOverflowItem(selectedItem: FdbNavigationListItem): void {\n if (!this.navigation.isSnapped$() || !this._showMoreButton$()) {\n return;\n }\n\n const currentVisible = [...this.visibleItems$()];\n const currentHidden = [...this.hiddenItems$()];\n const allItems = [...this.listItems$()]; // Original order\n\n // Find the selected item in hidden items\n const hiddenIndex = currentHidden.findIndex((item) => item === selectedItem);\n\n // If not found by object reference, try text-based matching\n let fallbackIndex = -1;\n if (hiddenIndex === -1) {\n const selectedText = selectedItem.link$()?.elementRef?.nativeElement?.textContent?.trim();\n fallbackIndex = currentHidden.findIndex(\n (item) => item?.link$()?.elementRef?.nativeElement?.textContent?.trim() === selectedText\n );\n }\n\n const finalIndex = hiddenIndex !== -1 ? hiddenIndex : fallbackIndex;\n\n if (finalIndex === -1) {\n return; // Item not found in hidden items\n }\n\n // Remove the selected item from hidden items\n const [itemToPromote] = currentHidden.splice(finalIndex, 1);\n\n // Move the last visible item to overflow, but insert it in the correct position\n // to maintain the original order\n const lastVisibleItem = currentVisible.pop();\n\n if (lastVisibleItem) {\n lastVisibleItem.hidden$.set(true);\n\n // Find the correct position in the original order\n const lastVisibleIndex = allItems.findIndex((item) => item === lastVisibleItem);\n\n // Insert the item in the correct position in hidden items to maintain order\n let insertPosition = 0;\n for (let i = 0; i < currentHidden.length; i++) {\n const hiddenItemIndex = allItems.findIndex((item) => item === currentHidden[i]);\n if (hiddenItemIndex > lastVisibleIndex) {\n break;\n }\n insertPosition++;\n }\n\n currentHidden.splice(insertPosition, 0, lastVisibleItem);\n }\n\n // Add the promoted item as the last visible item\n currentVisible.push(itemToPromote);\n itemToPromote.hidden$.set(false);\n\n // Update the signals\n this.visibleItems$.set(currentVisible);\n this.hiddenItems$.set(currentHidden);\n\n // Update the \"More\" button visibility\n this._showMoreButton$.set(currentHidden.length > 0);\n this.navigation.showMoreButton$.set(currentHidden.length > 0 ? this._showMoreButton : null);\n\n // Trigger change detection to ensure navigation items are properly updated\n this._cdr.detectChanges();\n\n // Focus the More button after promotion to maintain standard accessibility pattern\n // (focus returns to trigger when popover closes)\n setTimeout(() => {\n if (this._showMoreButton) {\n this._showMoreButton.focus();\n }\n }, 50);\n }\n}\n","<ul\n fdb-navigation-list\n [listItems]=\"visibleItems$()\"\n [ariaLabel]=\"ariaLabel\"\n [ariaRoleDescription]=\"ariaRoleDescription\"\n></ul>\n@if (_showMoreButton$()) {\n <ul noGrow fdb-navigation-list role=\"menubar\" #moreContainer>\n <li fdb-navigation-more-button [listItems]=\"hiddenItems$()\"></li>\n </ul>\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n QueryList,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport { FdbViewMode } from '@fundamental-ngx/btp/shared';\nimport { CssClassBuilder, KeyUtil, Nullable, applyCssClass } from '@fundamental-ngx/cdk/utils';\nimport { Subject } from 'rxjs';\nimport { NavigationListItemRefDirective } from '../../directives/navigation-list-item-ref.directive';\nimport { FdbNavigationListItem } from '../../models/navigation-list-item.class';\nimport { FdbNavigation } from '../../models/navigation.class';\nimport { FdbNavigationState, FdbNavigationType } from '../../models/navigation.types';\nimport { NavigationService } from '../../services/navigation.service';\n\n@Component({\n selector: 'fdb-navigation',\n templateUrl: './navigation.component.html',\n styleUrls: ['./navigation.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n NavigationService,\n {\n provide: FdbNavigation,\n useExisting: NavigationComponent\n }\n ],\n host: {\n role: 'navigation'\n }\n})\nexport class NavigationComponent\n extends FdbNavigation\n implements CssClassBuilder, OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n /** @hidden */\n @Input()\n class: string;\n\n /**\n * aria-label for the navigation.\n */\n @Input()\n @HostBinding('attr.aria-label')\n ariaLabel: Nullable<string> = null;\n\n /**\n * aria-roledescription for the navigation.\n */\n @Input()\n @HostBinding('attr.aria-roledescription')\n ariaRoleDescription: Nullable<string> = null;\n\n /**\n * Navigation mode.\n */\n @Input()\n mode: FdbViewMode = '';\n\n /**\n * Whether the navigation is rendered as an overlay.\n */\n @Input({ transform: booleanAttribute })\n isOverlay = false;\n\n /**\n * Navigation state.\n */\n @Input()\n set state(value: FdbNavigationState) {\n this.state$.set(value);\n }\n get state(): FdbNavigationState {\n return this.state$();\n }\n\n /**\n * Navigation type.\n */\n @Input()\n type: FdbNavigationType = 'vertical';\n\n /**\n * Selection mode for navigation items.\n * - 'router': Selection is handled by router link activation (default)\n * - 'click': Selection is handled by click events\n */\n @Input()\n selectionMode: 'router' | 'click' = 'router';\n\n /** @hidden */\n @ContentChild(NavigationListItemRefDirective)\n set _navigationItemRef(value: Nullable<NavigationListItemRefDirective>) {\n this._navigationItemRenderer.set(value || null);\n }\n\n /** @hidden */\n @ContentChildren(FdbNavigationListItem, { descendants: true })\n private readonly _navigationItems: QueryList<FdbNavigationListItem>;\n\n /**\n * State signal.\n */\n readonly state$ = signal<FdbNavigationState>('expanded');\n\n /**\n * Whether the navigation is in snapped mode.\n */\n readonly isSnapped$ = computed(() => this.state$() === 'snapped');\n\n /**\n * Whether to show \"More\" button. Applicable for `snapped` state only.\n */\n readonly showMoreButton$ = signal<Nullable<FdbNavigationListItem>>(null);\n\n /**\n * Signal for navigation classList.\n * Used by popover-based submenus.\n */\n readonly classList$ = signal<string[]>([]);\n\n /** @hidden */\n readonly elementRef = inject(ElementRef);\n\n /** Navigation service for managing selection state. */\n readonly service = inject(NavigationService);\n\n /** @hidden */\n readonly _navigationItemRenderer = signal<NavigationListItemRefDirective | null>(null);\n\n /** Stream notifies to close all popups in child list items. */\n readonly closeAllPopups = new Subject<void>();\n\n /** @hidden */\n private readonly _viewInitiated$ = signal(false);\n\n /** @hidden */\n private _keyManager: FocusKeyManager<FdbNavigationListItem>;\n\n /** @hidden */\n constructor() {\n super();\n // When show more button is shown, reset items list with added \"More button\".\n effect(() => {\n if (this._viewInitiated$()) {\n this._resetItemsList(this.showMoreButton$());\n }\n });\n }\n\n /** @hidden */\n @applyCssClass\n buildComponentCssClass(): string[] {\n this.classList$.set(\n [\n this.class,\n 'fd-navigation',\n this.mode === '' ? 'fd-navigation--compact' : '',\n `fd-navigation--${this.state}`,\n this.isOverlay && this.state === 'expanded' ? 'is-overlay' : ''\n ].filter((k) => !!k)\n );\n return [...this.classList$(), `fd-navigation--${this.type}`];\n }\n\n /**\n * @hidden\n * Main keyboard navigation handler.\n */\n @HostListener('keydown', ['$event'])\n _keyDownHandler(event: KeyboardEvent): void {\n if (!KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW])) {\n return;\n }\n\n event.preventDefault();\n\n this._keyManager.onKeydown(event);\n }\n\n /** @hidden */\n ngOnInit(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this.buildComponentCssClass();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyManager = new FocusKeyManager(this._navigationItems)\n .withVerticalOrientation()\n .skipPredicate((item) => !item.isVisible$() || item.skipNavigation);\n this._keyManager.setActiveItem(0);\n this._viewInitiated$.set(true);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._keyManager?.destroy();\n }\n\n /**\n * Returns currently focused list item.\n */\n getActiveItem(): FdbNavigationListItem | null {\n return this._keyManager.activeItem;\n }\n\n /**\n * Sets focused item.\n */\n setActiveItem(item: FdbNavigationListItem): void {\n this._keyManager.setActiveItem(item);\n }\n\n /** Notifies child list items that all popups should be closed. */\n closePopups(): void {\n this.closeAllPopups.next();\n }\n\n /**\n * Get the currently selected item when in click selection mode.\n * @returns The currently selected item, or null if none is selected.\n */\n getSelectedItem(): FdbNavigationListItem | null {\n return this.service.getSelectedItem();\n }\n\n /**\n * Set the selected item when in click selection mode.\n * @param item The item to select, or null to clear selection.\n */\n setSelectedItem(item: FdbNavigationListItem | null): void {\n this.service.setSelectedItem(item);\n }\n\n /**\n * Clear the current selection when in click selection mode.\n */\n clearSelection(): void {\n this.service.setSelectedItem(null);\n }\n\n /**\n * Get a navigation item by its ID.\n * @param id The ID of the navigation item to find.\n * @returns The navigation item with the specified ID, or null if not found.\n */\n getNavigationItemById(id: string): FdbNavigationListItem | null {\n const items = this._navigationItems.toArray();\n return this._findItemById(items, id);\n }\n\n /**\n * Set the selected item by its ID when in click selection mode.\n * @param id The ID of the navigation item to select.\n * @returns True if the item was found and selected, false otherwise.\n */\n setSelectedItemById(id: string): boolean {\n const item = this.getNavigationItemById(id);\n if (item) {\n this.setSelectedItem(item);\n return true;\n }\n return false;\n }\n\n /**\n * Helper method to find an item by ID recursively through the navigation tree.\n * @param items Array of navigation items to search through.\n * @param id The ID to search for.\n * @returns The found item or null.\n */\n private _findItemById(items: FdbNavigationListItem[], id: string): FdbNavigationListItem | null {\n for (const item of items) {\n if (item.id() === id) {\n return item;\n }\n\n if (item.listItems$().length > 0) {\n const childItems = item.listItems$().filter((child): child is FdbNavigationListItem => child !== null);\n const found = this._findItemById(childItems, id);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Updates the list of items.\n * Optionally inserts \"More\" button if overflow menu should be rendered.\n * @param showMoreButton Whether to add \"More\" button.\n */\n private _resetItemsList(showMoreButton: Nullable<FdbNavigationListItem>): void {\n const items = [...this._navigationItems.toArray()];\n const showMoreButtonIndex = items.findIndex((item) => item.type === 'showMore');\n if (!showMoreButton) {\n if (showMoreButtonIndex === -1) {\n return;\n }\n\n items.splice(showMoreButtonIndex, 1);\n\n this._navigationItems.reset(items);\n } else {\n if (showMoreButtonIndex > -1) {\n return;\n }\n\n // Find last list item from the `Start` container.\n const insertionIndex = items.findIndex((item) => {\n const listItems = item.placementContainer?.listItems$();\n if (!listItems) {\n return;\n }\n\n return item.placementContainer?.placement === 'start' && listItems[listItems.length - 1] === item;\n });\n\n if (insertionIndex === -1) {\n return;\n }\n\n items.splice(insertionIndex, 0, showMoreButton);\n this._navigationItems.reset(items);\n }\n }\n}\n","<ng-content></ng-content>\n","import {\n AbstractDataProvider,\n BaseDataSource,\n DataProvider,\n DataSourceParser,\n isDataSource\n} from '@fundamental-ngx/cdk/data-source';\nimport { Observable, isObservable } from 'rxjs';\n\nexport type NavigationDataSourceItem<T extends Record<string, any> = Record<string, any>> = {\n placement: 'start' | 'end';\n children?: NavigationDataSourceItem<T>[];\n} & T;\n\nexport class FdbNavigationDataSource<T extends NavigationDataSourceItem> extends BaseDataSource<T> {\n /** @hidden */\n limitless = false;\n /** @hidden */\n constructor(public dataProvider: AbstractDataProvider<T>) {\n super(dataProvider);\n }\n}\n\nexport class ArrayNavigationDataSource<T extends NavigationDataSourceItem> extends FdbNavigationDataSource<T> {\n /** @hidden */\n constructor(data: T[]) {\n super(new DataProvider(data));\n }\n}\n\nexport class ObservableNavigationDataSDataSource<\n T extends NavigationDataSourceItem\n> extends FdbNavigationDataSource<T> {\n /** @hidden */\n constructor(data: Observable<T[]>) {\n super(new DataProvider(data));\n }\n}\n\n/**\n * Type of acceptable objects as a datasource for the Navigation component.\n */\nexport type FdbNavigationDataSAcceptableDataSource<T extends NavigationDataSourceItem> =\n | FdbNavigationDataSource<T>\n | Observable<T[]>\n | T[];\n\nexport class NavigationDataSourceParser<T extends NavigationDataSourceItem>\n implements DataSourceParser<T, FdbNavigationDataSource<T>>\n{\n /**\n * Transforms plain array or observable into DataSource class.\n * @param source\n */\n parse(source: FdbNavigationDataSAcceptableDataSource<T>): FdbNavigationDataSource<T> | undefined {\n if (isDataSource(source)) {\n return source as FdbNavigationDataSource<T>;\n }\n\n if (Array.isArray(source)) {\n return new ArrayNavigationDataSource<T>(source);\n }\n\n if (isObservable(source)) {\n return new ObservableNavigationDataSDataSource<T>(source);\n }\n\n return undefined;\n }\n}\n","import { Directive } from '@angular/core';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER } from '@fundamental-ngx/cdk/data-source';\nimport {\n FdbNavigationDataSource,\n NavigationDataSourceItem,\n NavigationDataSourceParser\n} from '../models/navigation-data-source-item.model';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fdb-navigation[dataSource]',\n standalone: true,\n providers: [\n {\n provide: FD_DATA_SOURCE_TRANSFORMER,\n useClass: NavigationDataSourceParser\n }\n ]\n})\nexport class NavigationListDataSourceDirective<T extends Record<string, any>> extends DataSourceDirective<\n NavigationDataSourceItem<T>,\n FdbNavigationDataSource<NavigationDataSourceItem<T>>\n> {}\n","import { NavigationContentEndComponent } from './components/navigation-end/navigation-content-end.component';\nimport { NavigationListItemComponent } from './components/navigation-item/navigation-list-item.component';\nimport {\n NavigationLinkComponent,\n NavigationLinkRefDirective\n} from './components/navigation-link/navigation-link.component';\nimport { NavigationContentStartComponent } from './components/navigation-start/navigation-content-start.component';\nimport { NavigationComponent } from './components/navigation/navigation.component';\nimport { NavigationListDataSourceDirective } from './directives/navigation-list-data-source.directive';\nimport { NavigationListItemRefDirective } from './directives/navigation-list-item-ref.directive';\n\nexport * from './components/navigation-end/navigation-content-end.component';\nexport * from './components/navigation-item/navigation-list-item.component';\nexport * from './components/navigation-link/navigation-link.component';\nexport * from './components/navigation-start/navigation-content-start.component';\nexport * from './components/navigation/navigation.component';\nexport * from './directives/navigation-list-data-source.directive';\nexport * from './directives/navigation-list-item-ref.directive';\nexport * from './models/navigation-content-container.class';\nexport * from './models/navigation-data-source-item.model';\nexport * from './models/navigation-list-item.class';\nexport * from './models/navigation.types';\n\nexport * from './components/navigation-list/navigation-list.component';\n\nexport * from './components/navigation-more-button/navigation-more-button.component';\n\nexport const FDB_NAVIGATION = [\n NavigationComponent,\n NavigationContentStartComponent,\n NavigationContentEndComponent,\n NavigationLinkComponent,\n NavigationLinkRefDirective,\n NavigationListItemComponent,\n NavigationListItemRefDirective,\n NavigationListDataSourceDirective\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["RtlService","KeyUtil","i1"],"mappings":"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"}