@ngrdt/menu 0.0.17 → 0.0.19

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":"ngrdt-menu.mjs","sources":["../../../../@ngrdt/menu/src/lib/models.ts","../../../../@ngrdt/menu/src/lib/private-models.ts","../../../../@ngrdt/menu/src/lib/utils.ts","../../../../@ngrdt/menu/src/lib/menu-overlay/rdt-menu-overlay.component.ts","../../../../@ngrdt/menu/src/lib/menu-overlay/rdt-menu-overlay.component.html","../../../../@ngrdt/menu/src/lib/menu-base/rdt-menu-base.component.ts","../../../../@ngrdt/menu/src/lib/menu-bar/rdt-menu-bar.component.ts","../../../../@ngrdt/menu/src/lib/menu-bar/rdt-menu-bar.component.html","../../../../@ngrdt/menu/src/lib/menu/rdt-menu.component.ts","../../../../@ngrdt/menu/src/lib/menu/rdt-menu.component.html","../../../../@ngrdt/menu/src/lib/rdt-menu.module.ts","../../../../@ngrdt/menu/src/ngrdt-menu.ts"],"sourcesContent":["import { RdtRoute } from '@ngrdt/router';\r\nimport { RdtMenuItemBase } from './private-models';\r\nimport {\r\n RdtHorizontalDirection,\r\n RdtVerticalDirection,\r\n WindowOpenTargetType,\r\n} from '@ngrdt/utils';\r\nimport { InjectionToken } from '@angular/core';\r\n\r\nexport interface RdtMenuItemWithRoute extends RdtMenuItemBase {\r\n items?: never;\r\n routerLink?: RdtRoute;\r\n externalLink?: never;\r\n target?: never;\r\n}\r\n\r\nexport interface RdtMenuItemWithLink extends RdtMenuItemBase {\r\n items?: never;\r\n externalLink: string;\r\n routerLink?: never;\r\n target?: WindowOpenTargetType;\r\n}\r\n\r\nexport interface RdtMenuItemWithChildren extends RdtMenuItemBase {\r\n items: RdtMenuItem[];\r\n routerLink?: never;\r\n externalLink?: never;\r\n target?: WindowOpenTargetType;\r\n}\r\n\r\nexport type RdtMenuItem =\r\n | RdtMenuItemWithChildren\r\n | RdtMenuItemWithRoute\r\n | RdtMenuItemWithLink;\r\n\r\nexport enum RdtMenuShortcutMode {\r\n FOCUS_ITEM = 'focus-item',\r\n OPEN_SUBMENU = 'open-submenu',\r\n}\r\n\r\nexport const RDT_MENU_MARGIN_TOP_PROPERTY_NAME = '--rdt-menu-margin-top';\r\nexport const RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME = '--rdt-menu-margin-bottom';\r\nexport const RDT_MENU_MARGIN_LEFT_PROPERTY_NAME = '--rdt-menu-margin-left';\r\nexport const RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME = '--rdt-menu-margin-right';\r\n\r\nexport const DEFAULT_MENU_HORIZONTAL_DIR = 'left';\r\nexport const DEFAULT_MENU_VERTICAL_DIR = 'down';\r\n\r\nexport const RDT_MENU_HORIZONTAL_DIR_PROVIDER =\r\n new InjectionToken<RdtHorizontalDirection>('RDT_MENU_HORIZONTAL_DIR');\r\nexport const RDT_MENU_VERTICAL_DIR_PROVIDER =\r\n new InjectionToken<RdtVerticalDirection>('RDT_MENU_VERTICAL_DIR');\r\n","import { Injector } from '@angular/core';\r\nimport { RdtRoute } from '@ngrdt/router';\r\nimport { RdtShortcut } from '@ngrdt/shortcuts';\r\nimport { RdtStringUtils, WindowOpenTargetType } from '@ngrdt/utils';\r\nimport { RdtMenuItem } from './models';\r\n\r\nexport interface RdtMenuItemBase<TIcon = string> {\r\n label: string;\r\n icon?: TIcon;\r\n shortcut?: RdtShortcut;\r\n command?: () => void;\r\n visible?: () => boolean;\r\n queryParams?: { [key: string]: any };\r\n requiredParent?: RdtRoute;\r\n dataTestId?: string;\r\n}\r\n\r\nexport interface ParsedRdtMenuItemBase<TIcon = string>\r\n extends RdtMenuItemBase<TIcon> {\r\n dataTestId: string;\r\n}\r\n\r\nexport interface ParsedRdtMenuItemWithChildren<TIcon = string>\r\n extends ParsedRdtMenuItemBase<TIcon> {\r\n items: ParsedRdtMenuItem[];\r\n routerLink?: never;\r\n externalLink?: never;\r\n icon?: never;\r\n target?: never;\r\n}\r\n\r\nexport interface ParsedRdtMenuItemWithRoute<TIcon = string>\r\n extends ParsedRdtMenuItemBase<TIcon> {\r\n items?: never;\r\n routerLink?: string[];\r\n externalLink?: never;\r\n icon?: TIcon;\r\n target: WindowOpenTargetType;\r\n}\r\n\r\nexport interface ParsedRdtMenuItemWithLink<TIcon = string>\r\n extends ParsedRdtMenuItemBase<TIcon> {\r\n items?: never;\r\n routerLink?: never;\r\n externalLink?: string;\r\n icon?: TIcon;\r\n target: WindowOpenTargetType;\r\n}\r\n\r\nexport type ParsedRdtMenuItem =\r\n | ParsedRdtMenuItemWithRoute\r\n | ParsedRdtMenuItemWithChildren\r\n | ParsedRdtMenuItemWithLink;\r\n\r\nexport function parseMenuItems(\r\n items: RdtMenuItem[],\r\n injector: Injector,\r\n prefix = ''\r\n): ParsedRdtMenuItem[] {\r\n return items\r\n .map((item) => {\r\n let newPrefix: string;\r\n if (item.dataTestId) {\r\n newPrefix = item.dataTestId;\r\n } else if (prefix) {\r\n newPrefix = RdtStringUtils.getDataTestId(item.label, prefix);\r\n } else {\r\n newPrefix = RdtStringUtils.getDataTestId(item.label);\r\n }\r\n const newDataTestId = RdtStringUtils.getDataTestId(\r\n newPrefix,\r\n null,\r\n 'menu-item'\r\n );\r\n const res: ParsedRdtMenuItemBase = {\r\n label: item.label,\r\n icon: item.icon,\r\n shortcut: item.shortcut,\r\n command: item.command,\r\n visible: item.visible,\r\n queryParams: item.queryParams,\r\n requiredParent: item.requiredParent,\r\n dataTestId: newDataTestId,\r\n };\r\n if (item.items) {\r\n const childrenRes = res as ParsedRdtMenuItemWithChildren;\r\n const parsedChildren = parseMenuItems(item.items, injector, newPrefix);\r\n if (parsedChildren.length > 0) {\r\n childrenRes.items = parsedChildren;\r\n }\r\n return childrenRes;\r\n } else if (item.routerLink) {\r\n const linkRes = res as ParsedRdtMenuItemWithRoute;\r\n linkRes.target = item.target ?? '_self';\r\n if (item.routerLink) {\r\n linkRes.routerLink = [item.routerLink.createAbsoluteUrl()];\r\n if (!res.visible && item.routerLink.hasCanBeEnteredGuard) {\r\n const canBeEntered = item.routerLink.canBeEntered.bind(\r\n item.routerLink\r\n );\r\n linkRes.visible = () => canBeEntered(injector);\r\n }\r\n }\r\n return linkRes;\r\n } else {\r\n const linkRes = res as ParsedRdtMenuItemWithLink;\r\n if (item.externalLink) {\r\n if (item.queryParams) {\r\n linkRes.externalLink = RdtStringUtils.appendQueryParams(\r\n item.externalLink,\r\n item.queryParams\r\n );\r\n } else {\r\n linkRes.externalLink = item.externalLink;\r\n }\r\n }\r\n linkRes.target = item.target ?? '_blank';\r\n return linkRes;\r\n }\r\n })\r\n .filter((item) => !item.visible || item.visible())\r\n .filter(\r\n (item) =>\r\n item.externalLink ||\r\n item['routerLink'] ||\r\n item.command ||\r\n (item['items']?.length ?? 0) > 0\r\n );\r\n}\r\n\r\nexport enum RdtMenuExpandSource {\r\n Click,\r\n Hover,\r\n Shortcut,\r\n Focus,\r\n}\r\n\r\nexport interface RdtMenuExpandedChild {\r\n item: ParsedRdtMenuItem;\r\n src: RdtMenuExpandSource;\r\n}\r\n","import { RdtShortcut } from '@ngrdt/shortcuts';\r\nimport {\r\n Nullable,\r\n RdtHorizontalDirection,\r\n RdtVerticalDirection,\r\n} from '@ngrdt/utils';\r\nimport {\r\n ParsedRdtMenuItem,\r\n ParsedRdtMenuItemWithChildren,\r\n ParsedRdtMenuItemWithRoute,\r\n} from './private-models';\r\n\r\nexport const INVISIBLE_CLASS = 'invisible';\r\nexport const FOCUS_VISIBLE = 'focus-visible';\r\n\r\nexport interface Size {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface VertOffset {\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\nexport interface HorOffset {\r\n left: number;\r\n right: number;\r\n}\r\n\r\nexport interface VertDirWithOffset {\r\n dir: RdtVerticalDirection;\r\n top: number;\r\n}\r\n\r\nexport interface HorDirWithOffset {\r\n dir: RdtHorizontalDirection;\r\n left: number;\r\n}\r\n\r\nexport interface ParsedRdtMenuItemWithShortcut {\r\n path: ParsedRdtMenuItem[];\r\n shortcut: RdtShortcut;\r\n}\r\n\r\nfunction getChildRoutesMapRec(\r\n item: ParsedRdtMenuItem,\r\n map: Map<ParsedRdtMenuItem, string[][]>\r\n): string[][] {\r\n let childRoutes: string[][][];\r\n\r\n if (menuItemHasChildren(item)) {\r\n childRoutes = item.items.map((child) => getChildRoutesMapRec(child, map));\r\n } else {\r\n childRoutes = [];\r\n }\r\n\r\n let res: string[][];\r\n\r\n if (menuItemHasRoute(item) && item.routerLink) {\r\n res = [item.routerLink].concat(...childRoutes);\r\n } else {\r\n res = ([] as string[][]).concat(...childRoutes);\r\n }\r\n map.set(item, res);\r\n return res;\r\n}\r\n\r\nexport function getChildRoutesMap(items: ParsedRdtMenuItem[]) {\r\n const map = new Map<ParsedRdtMenuItem, string[][]>();\r\n\r\n items.forEach((item) => getChildRoutesMapRec(item, map));\r\n return map;\r\n}\r\n\r\nexport function findNextItemWithPrefix(\r\n items: ParsedRdtMenuItem[],\r\n itemIndex: number,\r\n prefix: string\r\n) {\r\n const len = items.length;\r\n prefix = prefix.toLocaleLowerCase();\r\n for (let i = (itemIndex + 1) % len; i !== itemIndex; i = (i + 1) % len) {\r\n const label = items[i].label.toLocaleLowerCase();\r\n if (label.startsWith(prefix)) {\r\n return i;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function menuItemHasChildren(\r\n item: ParsedRdtMenuItem\r\n): item is ParsedRdtMenuItemWithChildren {\r\n return 'items' in item;\r\n}\r\n\r\nexport function menuItemHasRoute(\r\n item: ParsedRdtMenuItem\r\n): item is ParsedRdtMenuItemWithRoute {\r\n return 'routerLink' in item;\r\n}\r\n\r\nfunction getMenuItemsShortcutsRec(\r\n item: ParsedRdtMenuItem,\r\n currentPath: ParsedRdtMenuItem[],\r\n res: ParsedRdtMenuItemWithShortcut[]\r\n) {\r\n const path = [...currentPath, item];\r\n if (item.shortcut) {\r\n res.push({\r\n path: path,\r\n shortcut: item.shortcut,\r\n });\r\n }\r\n if (menuItemHasChildren(item)) {\r\n item.items.forEach((child) => getMenuItemsShortcutsRec(child, path, res));\r\n }\r\n}\r\n\r\nexport function getMenuItemsShortcuts(items: ParsedRdtMenuItem[]) {\r\n const res: ParsedRdtMenuItemWithShortcut[] = [];\r\n const initialPath: ParsedRdtMenuItem[] = [];\r\n items.forEach((item) => getMenuItemsShortcutsRec(item, initialPath, res));\r\n return res;\r\n}\r\n\r\nexport function areHorDirsEqual(\r\n a: Nullable<HorDirWithOffset>,\r\n b: Nullable<HorDirWithOffset>\r\n) {\r\n if (!a) {\r\n return !b;\r\n }\r\n if (!b) {\r\n return !a;\r\n }\r\n return a.dir === b.dir && a.left === b.left;\r\n}\r\n\r\nexport function areVertDirsEqual(\r\n a: Nullable<VertDirWithOffset>,\r\n b: Nullable<VertDirWithOffset>\r\n) {\r\n if (!a) {\r\n return !b;\r\n }\r\n if (!b) {\r\n return !a;\r\n }\r\n return a.dir === b.dir && a.top === b.top;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n HostBinding,\r\n HostListener,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n QueryList,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n RdtShortcut,\r\n RdtShortcutEvent,\r\n RdtShortcutService,\r\n} from '@ngrdt/shortcuts';\r\nimport {\r\n KB_CODE,\r\n RdtHorizontalDirection,\r\n RdtObjectUtils,\r\n RdtStringUtils,\r\n RdtVerticalDirection,\r\n} from '@ngrdt/utils';\r\nimport { delay, first, map, of } from 'rxjs';\r\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\r\nimport {\r\n DEFAULT_MENU_HORIZONTAL_DIR,\r\n DEFAULT_MENU_VERTICAL_DIR,\r\n} from '../models';\r\nimport {\r\n ParsedRdtMenuItem,\r\n ParsedRdtMenuItemWithChildren,\r\n RdtMenuExpandSource,\r\n} from '../private-models';\r\nimport {\r\n FOCUS_VISIBLE,\r\n HorDirWithOffset,\r\n VertDirWithOffset,\r\n areHorDirsEqual,\r\n areVertDirsEqual,\r\n findNextItemWithPrefix,\r\n menuItemHasChildren,\r\n menuItemHasRoute,\r\n} from '../utils';\r\n\r\n// TODO: Split positioning and shortcut/focus management in separate classes\r\n@Component({\r\n selector: 'rdt-menu-overlay',\r\n templateUrl: './rdt-menu-overlay.component.html',\r\n styleUrls: ['./rdt-menu-overlay.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RdtMenuOverlayComponent\r\n implements OnInit, OnChanges, AfterViewInit\r\n{\r\n readonly elRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\r\n readonly destroyRef = inject(DestroyRef);\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private readonly topLevelMenu = inject(RdtMenuBaseComponent);\r\n private readonly parentMenu = inject(RdtMenuOverlayComponent, {\r\n optional: true,\r\n skipSelf: true,\r\n });\r\n private readonly cd = inject(ChangeDetectorRef);\r\n private readonly router = inject(Router);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly shortcutService = inject(RdtShortcutService);\r\n\r\n @ViewChildren(RdtMenuOverlayComponent)\r\n readonly children!: QueryList<RdtMenuOverlayComponent>;\r\n\r\n @ViewChildren('focusableItem')\r\n private focusableElements!: QueryList<ElementRef<HTMLLIElement>>;\r\n\r\n @ViewChild('menuItemContainer')\r\n private menuItemContainer!: ElementRef<HTMLUListElement>;\r\n\r\n @Input()\r\n item!: ParsedRdtMenuItemWithChildren;\r\n\r\n @Input()\r\n level!: number;\r\n\r\n @Input()\r\n preferredHorizontalDir: RdtHorizontalDirection = DEFAULT_MENU_HORIZONTAL_DIR;\r\n\r\n @Input()\r\n preferredVerticalDir: RdtVerticalDirection = DEFAULT_MENU_VERTICAL_DIR;\r\n\r\n @HostBinding('class.expanded')\r\n @Input()\r\n expanded = false;\r\n\r\n @Input()\r\n autofocusItem: 'first' | 'last' | null = null;\r\n\r\n // Element used to relatively position menu,\r\n // typically parent element.\r\n // If not specified, parent element is used.\r\n @Input()\r\n anchorElement?: HTMLElement;\r\n\r\n @HostBinding('attr.role')\r\n private roleAttr = 'menu';\r\n\r\n @HostBinding('attr.tabindex')\r\n private tabindexAttr = '-1';\r\n\r\n @HostBinding('style.z-index')\r\n get zIndex() {\r\n return this.level + 10;\r\n }\r\n\r\n get isRootLevel() {\r\n return this.level === 0;\r\n }\r\n\r\n // Bounding box of this excluding any extra offset.\r\n private _box!: DOMRect;\r\n get box() {\r\n return this._box;\r\n }\r\n\r\n // Bounding box of parent element.\r\n private _anchorBox!: DOMRect;\r\n private _containerPadding = { top: 0, bottom: 0 };\r\n\r\n // Recalculate child components only after they are initialized.\r\n private _viewWasInit = false;\r\n\r\n // Currently applied vertical and horizontal directions.\r\n protected verticalDir: VertDirWithOffset | null = null;\r\n protected horizontalDir: HorDirWithOffset | null = null;\r\n\r\n protected expandedChild: {\r\n item: ParsedRdtMenuItem;\r\n src: RdtMenuExpandSource;\r\n } | null = null;\r\n protected autofocusSubmenuItem: 'first' | 'last' | null = null;\r\n\r\n readonly keyActions = {\r\n [KB_CODE.ARROW.UP]: (index: number) => this.focusPrevItem(index),\r\n [KB_CODE.ARROW.DOWN]: (index: number) => this.focusNextItem(index),\r\n [KB_CODE.ARROW.RIGHT]: (index: number) =>\r\n this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\r\n [KB_CODE.ARROW.LEFT]: () => this.closeSelf(),\r\n [KB_CODE.HOME]: () => this.focusItem(0),\r\n [KB_CODE.END]: () => this.focusItem(this.item.items.length - 1),\r\n [KB_CODE.ESCAPE]: () => this.closeSelf(),\r\n [KB_CODE.ENTER]: (index: number) => this.invokeItemClickByIndex(index),\r\n [KB_CODE.SPACEBAR]: (index: number) => this.invokeItemClickByIndex(index),\r\n };\r\n get selfExpandSrc() {\r\n if (this.expanded) {\r\n if (this.parentMenu) {\r\n return this.parentMenu.expandedChild?.src;\r\n } else {\r\n return this.topLevelMenu.expandedChild?.src;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n ngOnInit() {\r\n this.setClasses();\r\n this.listenTabKeyPress();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const recalcTriggers = [\r\n 'preferredHorizontalDir',\r\n 'preferredVerticalDir',\r\n 'expanded',\r\n ];\r\n if (recalcTriggers.some((key) => key in changes) && this._viewWasInit) {\r\n this.recalculatePosition(\r\n this.preferredHorizontalDir,\r\n this.preferredVerticalDir\r\n );\r\n }\r\n\r\n if (!this.expanded) {\r\n this.expandedChild = null;\r\n }\r\n\r\n if ('expanded' in changes && this.expanded) {\r\n // Wait for Angular to set .expanded class,\r\n // because invisible elements cannot be focused.\r\n setTimeout(() => {\r\n switch (this.autofocusItem) {\r\n case null:\r\n this.focusItem(0, false);\r\n break;\r\n case 'first':\r\n this.focusItem(0, true);\r\n break;\r\n case 'last':\r\n this.focusItem(this.item.items.length - 1, true);\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.measureContainerPadding();\r\n this.recalculatePosition(\r\n this.preferredHorizontalDir,\r\n this.preferredVerticalDir\r\n );\r\n this._viewWasInit = true;\r\n }\r\n\r\n private getMinOffsetLeft() {\r\n return this.topLevelMenu.bodyMargin.left;\r\n }\r\n\r\n private getMaxOffsetLeft() {\r\n return (\r\n this.topLevelMenu.clientSize.width -\r\n this._box.width -\r\n this.topLevelMenu.bodyMargin.right\r\n );\r\n }\r\n\r\n private getMinOffsetTop() {\r\n return this.topLevelMenu.bodyMargin.top;\r\n }\r\n\r\n private getMaxOffsetTop() {\r\n return (\r\n this.topLevelMenu.clientSize.height -\r\n this._box.height -\r\n this.topLevelMenu.bodyMargin.bottom\r\n );\r\n }\r\n\r\n recalculatePosition(\r\n preferredHorizontalDir: RdtHorizontalDirection,\r\n preferredVerticalDir: RdtVerticalDirection\r\n ) {\r\n // Make menu invisible so the menu does not move around in case of slow computer.\r\n this.measureBoundingRect();\r\n\r\n if (!this._box || !this._anchorBox) {\r\n return;\r\n }\r\n\r\n const newHorDir = this.getRealHorizontalDir(preferredHorizontalDir);\r\n const newVertDir = this.getRealVerticalDir(preferredVerticalDir);\r\n\r\n // Horizontal direction\r\n if (newHorDir.dir === 'right') {\r\n newHorDir.left += this._anchorBox.left;\r\n if (!this.isRootLevel) {\r\n newHorDir.left += this._anchorBox.width;\r\n }\r\n } else if (newHorDir.dir === 'left') {\r\n newHorDir.left += this._anchorBox.left - this._box.width;\r\n\r\n if (this.isRootLevel) {\r\n newHorDir.left += this._anchorBox.width;\r\n }\r\n }\r\n\r\n // Restrictions from left menu and right menu\r\n newHorDir.left = Math.min(\r\n Math.max(this.getMinOffsetLeft(), newHorDir.left),\r\n this.getMaxOffsetLeft()\r\n );\r\n\r\n // Vertical direction\r\n if (newVertDir.dir === 'down') {\r\n newVertDir.top = this._anchorBox.top;\r\n if (this.isRootLevel) {\r\n newVertDir.top += this._anchorBox.height;\r\n } else {\r\n newVertDir.top -= this._containerPadding.top;\r\n }\r\n } else if (newVertDir.dir === 'up') {\r\n newVertDir.top = this._anchorBox.top - this._box.height;\r\n if (!this.isRootLevel) {\r\n newVertDir.top += this._anchorBox.height + this._containerPadding.top;\r\n }\r\n }\r\n\r\n // Restrictions from header and footer\r\n newVertDir.top = Math.min(\r\n Math.max(this.getMinOffsetTop(), newVertDir.top),\r\n this.getMaxOffsetTop()\r\n );\r\n\r\n if (\r\n !areHorDirsEqual(this.horizontalDir, newHorDir) ||\r\n !areVertDirsEqual(this.verticalDir, newVertDir)\r\n ) {\r\n this.horizontalDir = newHorDir;\r\n this.verticalDir = newVertDir;\r\n this.setClasses();\r\n this.measureBoundingRect();\r\n }\r\n\r\n this.recalculateChildren();\r\n }\r\n\r\n onItemPointerEnter(item: ParsedRdtMenuItem) {\r\n if (\r\n this.topLevelMenu.openOnHover &&\r\n this.expandedChild?.src !== RdtMenuExpandSource.Click\r\n ) {\r\n this.autofocusSubmenuItem = null;\r\n if (menuItemHasChildren(item)) {\r\n this.expandedChild = { item, src: RdtMenuExpandSource.Hover };\r\n this.expanded = true;\r\n } else {\r\n //console.log('expanded child', this.expandedChild);\r\n this.expandedChild = null;\r\n }\r\n }\r\n }\r\n\r\n onItemClick(item: ParsedRdtMenuItem) {\r\n const hasChildren = menuItemHasChildren(item);\r\n if (\r\n (hasChildren && this.expandedChild?.item !== item) ||\r\n (this.topLevelMenu.openOnHover &&\r\n this.expandedChild?.src === RdtMenuExpandSource.Hover)\r\n ) {\r\n this.autofocusSubmenuItem = null;\r\n this.expandedChild = { item, src: RdtMenuExpandSource.Click };\r\n } else {\r\n this.expandedChild = null;\r\n }\r\n // Could also listen to router events, but might be triggered by\r\n // child router navigation.\r\n if (!hasChildren) {\r\n this.topLevelMenu.closeSubmenus();\r\n }\r\n if (typeof item.command === 'function') {\r\n item.command();\r\n }\r\n }\r\n\r\n invokeItemClick(item: ParsedRdtMenuItem) {\r\n if (menuItemHasRoute(item) && item.routerLink) {\r\n this.router.navigate(item.routerLink);\r\n }\r\n this.onItemClick(item);\r\n this.autofocusSubmenuItem = 'first';\r\n }\r\n\r\n getChildRoutes(item: ParsedRdtMenuItem) {\r\n return this.topLevelMenu.getChildRoutes(item);\r\n }\r\n\r\n closeSubmenus(focusExpanded = false) {\r\n if (focusExpanded && this.expandedChild) {\r\n this.focusItem(this.expandedChild.item);\r\n }\r\n this.expandedChild = null;\r\n this.cd.markForCheck();\r\n }\r\n\r\n focusItemRecursively(path: ParsedRdtMenuItem[]) {\r\n const children = [...path];\r\n const thisItem = children.shift()!;\r\n\r\n this.autofocusSubmenuItem = null;\r\n this.autofocusItem = null;\r\n\r\n if (children.length > 0) {\r\n this.expandAndGetChild(thisItem, RdtMenuExpandSource.Focus)\r\n .pipe(delay(1))\r\n .subscribe((overlay) => {\r\n overlay.focusItemRecursively(children);\r\n });\r\n } else {\r\n // First focus the correct item because submenu might have focus on it.\r\n // Removing focused element from DOM results in window:focusout event\r\n // and that closes all menus\r\n this.focusItem(thisItem);\r\n // Now close submenus and therefore remove them from DOM\r\n this.closeSubmenus();\r\n // Wait until they are removed and focus the correct item again\r\n setTimeout(() => this.focusItem(thisItem), 1);\r\n }\r\n }\r\n\r\n private expandAndGetChild(item: ParsedRdtMenuItem, src: RdtMenuExpandSource) {\r\n if (this.item.items.indexOf(item) < 0) {\r\n throw new Error(\r\n 'Attempting to expand item that is not child item of this.item'\r\n );\r\n }\r\n this.expandedChild = { item, src };\r\n this.cd.markForCheck();\r\n\r\n const child = this.children.find((child) => child.item === item);\r\n if (child) {\r\n return of(child);\r\n } else {\r\n return this.children.changes.pipe(\r\n map(() => this.children.find((child) => child.item === item)),\r\n first(RdtObjectUtils.notNullGuard)\r\n );\r\n }\r\n }\r\n\r\n protected onKeyDown(itemIndex: number, event: KeyboardEvent) {\r\n const hasAction = event.code in this.keyActions;\r\n const isLetter =\r\n RdtStringUtils.isAlphabetCharacter(event.key) ||\r\n RdtStringUtils.isNumericCharacter(event.key);\r\n\r\n if (hasAction || isLetter) {\r\n event.preventDefault();\r\n }\r\n if (hasAction) {\r\n event.stopPropagation();\r\n }\r\n\r\n if (hasAction) {\r\n this.keyActions[event.code](itemIndex);\r\n } else if (isLetter) {\r\n const next = findNextItemWithPrefix(\r\n this.item.items,\r\n itemIndex,\r\n event.key\r\n );\r\n if (next !== null) {\r\n this.focusItem(next);\r\n }\r\n }\r\n }\r\n\r\n private onTabKeyPress(event: RdtShortcutEvent) {\r\n // Do not prevent default to correctly switch to previous element\r\n event.originalEvent.stopPropagation();\r\n // Wait for document.activeElement to switch to new element\r\n setTimeout(() => {\r\n if (!this.elRef.nativeElement.contains(this.document.activeElement)) {\r\n this.closeSelf(false);\r\n }\r\n }, 1);\r\n }\r\n\r\n private invokeItemClickByIndex(itemIndex: number) {\r\n const item = this.item.items[itemIndex];\r\n if (!item) {\r\n return;\r\n }\r\n this.invokeItemClick(item);\r\n }\r\n\r\n private focusItem(item: number | ParsedRdtMenuItem, visibleFocus = true) {\r\n let itemIndex: number;\r\n\r\n if (typeof item === 'number') {\r\n itemIndex = item;\r\n } else {\r\n itemIndex = this.item.items.indexOf(item);\r\n }\r\n\r\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\r\n this.blurAllFocusable();\r\n this.focusFocusable(itemIndex, visibleFocus);\r\n }\r\n }\r\n\r\n private blurAllFocusable() {\r\n this.focusableElements.forEach((el) =>\r\n this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE)\r\n );\r\n }\r\n\r\n private focusFocusable(itemIndex: number, visibleFocus: boolean) {\r\n const elRef = this.focusableElements.get(itemIndex);\r\n if (elRef) {\r\n if (visibleFocus) {\r\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\r\n }\r\n elRef.nativeElement.focus();\r\n }\r\n }\r\n\r\n private focusNextItem(itemIndex: number) {\r\n const next = (itemIndex + 1) % this.item.items.length;\r\n this.focusItem(next);\r\n }\r\n\r\n private focusPrevItem(itemIndex: number) {\r\n const prev =\r\n (itemIndex - 1 + this.item.items.length) % this.item.items.length;\r\n this.focusItem(prev);\r\n }\r\n\r\n private openSubmenu(\r\n itemIndex: number,\r\n visibleFocus: 'first' | 'last',\r\n src: RdtMenuExpandSource\r\n ) {\r\n if (\r\n itemIndex < this.item.items.length &&\r\n menuItemHasChildren(this.item.items[itemIndex])\r\n ) {\r\n this.expandedChild = { item: this.item.items[itemIndex], src };\r\n this.autofocusSubmenuItem = visibleFocus;\r\n }\r\n }\r\n\r\n closeSelf(focusExpanded = true) {\r\n if (this.parentMenu) {\r\n this.parentMenu.closeSubmenus(focusExpanded);\r\n } else {\r\n this.topLevelMenu.closeSubmenus(focusExpanded);\r\n }\r\n }\r\n\r\n @HostListener('window:focusout', ['$event'])\r\n private checkActiveElement(event: FocusEvent) {\r\n if (this.topLevelMenu.closeOnFocusOut && !this.topLevelMenu.openOnHover) {\r\n const thisEl = this.elRef.nativeElement;\r\n const target = event.relatedTarget;\r\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\r\n this.expandedChild = null;\r\n }\r\n }\r\n }\r\n\r\n // Calculates direction of this menu and offset in case\r\n // menu won't fit in left nor right of parent menu.\r\n private getRealHorizontalDir(\r\n preferredHorizontalDir: RdtHorizontalDirection\r\n ): HorDirWithOffset {\r\n let left: number;\r\n let right: number;\r\n // This menu is directly under menubar\r\n if (this.level === 0) {\r\n left = this._anchorBox.right - this._box.width;\r\n right =\r\n this.topLevelMenu.clientSize.width -\r\n (this._anchorBox.left + this._box.width);\r\n } else {\r\n // Menu is nested\r\n right =\r\n this.topLevelMenu.clientSize.width -\r\n (this._anchorBox.right + this._box.width);\r\n left = this._anchorBox.left - this._box.width;\r\n }\r\n\r\n left -= this.topLevelMenu.bodyMargin.left;\r\n right -= this.topLevelMenu.bodyMargin.right;\r\n\r\n if (preferredHorizontalDir === 'right') {\r\n // We use preferred if possible.\r\n if (right >= 0) {\r\n return { dir: 'right', left: 0 };\r\n // Then the other one.\r\n } else if (left >= 0) {\r\n return { dir: 'left', left: 0 };\r\n // Edge case if neither direction can be used (ultra narrow screen).\r\n // Choose direction that covers least of parent menu.\r\n } else {\r\n return this.getNarrowScreenHorizontalDir(left, right);\r\n }\r\n } else {\r\n if (left >= 0) {\r\n return { dir: 'left', left: 0 };\r\n } else if (right >= 0) {\r\n return { dir: 'right', left: 0 };\r\n } else {\r\n return this.getNarrowScreenHorizontalDir(left, right);\r\n }\r\n }\r\n }\r\n\r\n // Finds out where to put menu in case screen is too narrow for two menus\r\n // to fit next to each other. Minimizes area of parent menu covered by this.\r\n private getNarrowScreenHorizontalDir(\r\n left: number,\r\n right: number\r\n ): HorDirWithOffset {\r\n const screenStart = this.topLevelMenu.bodyMargin.left;\r\n const screenEnd =\r\n this.topLevelMenu.clientSize.width - this.topLevelMenu.bodyMargin.right;\r\n const screenCenter = (screenStart - screenEnd) / 2;\r\n\r\n const leftStart = Math.max(this._anchorBox.left, screenStart);\r\n const leftEnd = Math.min(\r\n this._anchorBox.left + this._anchorBox.width,\r\n screenCenter\r\n );\r\n\r\n const rightStart = Math.max(screenCenter, leftEnd);\r\n const rightEnd = Math.min(\r\n this._anchorBox.left + this._anchorBox.width,\r\n screenEnd\r\n );\r\n\r\n if (leftEnd - leftStart > rightEnd - rightStart) {\r\n return { dir: 'right', left: right };\r\n } else {\r\n return { dir: 'left', left: -left };\r\n }\r\n }\r\n\r\n private getRealVerticalDir(\r\n preferredVerticalDir: RdtVerticalDirection\r\n ): VertDirWithOffset {\r\n let bottom: number;\r\n let top: number;\r\n\r\n if (this.level === 0) {\r\n bottom =\r\n this.topLevelMenu.clientSize.height +\r\n this._anchorBox.bottom -\r\n this._box.height;\r\n top = this._anchorBox.top - this._box.height;\r\n } else {\r\n bottom =\r\n this.topLevelMenu.clientSize.height -\r\n this._anchorBox.top -\r\n this._box.height;\r\n top = this._anchorBox.bottom - this._box.height;\r\n }\r\n\r\n top -= this.topLevelMenu.bodyMargin.top;\r\n bottom -= this.topLevelMenu.bodyMargin.bottom;\r\n\r\n if (preferredVerticalDir === 'down') {\r\n if (bottom >= 0) {\r\n return { dir: 'down', top: 0 };\r\n } else if (top >= 0) {\r\n return { dir: 'up', top: 0 };\r\n } else {\r\n return { dir: preferredVerticalDir, top: 0 };\r\n }\r\n } else {\r\n if (top >= 0) {\r\n return { dir: 'up', top: 0 };\r\n } else if (bottom >= 0) {\r\n return { dir: 'down', top: 0 };\r\n } else {\r\n return { dir: preferredVerticalDir, top: 0 };\r\n }\r\n }\r\n }\r\n\r\n // Measures bounding rect of this and offset container\r\n // Should always be called after parent menu has already been measured.\r\n private measureBoundingRect() {\r\n this._box = this.elRef.nativeElement.getBoundingClientRect();\r\n const anchor =\r\n this.anchorElement ?? this.elRef.nativeElement.parentElement!;\r\n this._anchorBox = anchor.getBoundingClientRect();\r\n }\r\n\r\n private measureContainerPadding() {\r\n const computedStyles = getComputedStyle(\r\n this.menuItemContainer.nativeElement\r\n );\r\n const paddingTop = parseFloat(computedStyles.paddingTop);\r\n const paddingBottom = parseFloat(computedStyles.paddingBottom);\r\n this._containerPadding = { top: paddingTop, bottom: paddingBottom };\r\n }\r\n\r\n private recalculateChildren() {\r\n if (this.expanded && this.horizontalDir && this.verticalDir) {\r\n this.children.forEach((child) =>\r\n child.recalculatePosition(\r\n this.horizontalDir!.dir,\r\n this.verticalDir!.dir\r\n )\r\n );\r\n }\r\n }\r\n\r\n private setClasses() {\r\n if (this.verticalDir) {\r\n if (this.verticalDir.dir === 'up') {\r\n this.setClass('rdt-overlay-up');\r\n this.removeClass('rdt-overlay-down');\r\n } else {\r\n this.removeClass('rdt-overlay-up');\r\n this.setClass('rdt-overlay-down');\r\n }\r\n this.setOffset('top', this.verticalDir.top);\r\n }\r\n\r\n if (this.horizontalDir) {\r\n if (this.horizontalDir.dir === 'left') {\r\n this.setClass('rdt-overlay-left');\r\n this.removeClass('rdt-overlay-right');\r\n } else {\r\n this.removeClass('rdt-overlay-left');\r\n this.setClass('rdt-overlay-right');\r\n }\r\n this.setOffset('left', this.horizontalDir.left);\r\n }\r\n\r\n if (this.isRootLevel) {\r\n this.setClass('rdt-menu-root');\r\n this.removeClass('rdt-menu-sub');\r\n } else {\r\n this.removeClass('rdt-menu-root');\r\n this.setClass('rdt-menu-sub');\r\n }\r\n }\r\n\r\n private setClass(className: string) {\r\n this.renderer.addClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private removeClass(className: string) {\r\n this.renderer.removeClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private setOffset(direction: 'top' | 'left', value: number) {\r\n this.renderer.setStyle(this.elRef.nativeElement, direction, `${value}px`);\r\n }\r\n\r\n private listenTabKeyPress() {\r\n const shiftTab = RdtShortcut.createUnsafe('shift', 'tab');\r\n const tab = RdtShortcut.createUnsafe('tab');\r\n this.shortcutService\r\n .listen([tab, shiftTab], {\r\n element: this.elRef.nativeElement,\r\n preventDefault: false,\r\n })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((event) => this.onTabKeyPress(event));\r\n }\r\n}\r\n","<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span\r\n class=\"menu-item-icon rdt-menu-icon-right\"\r\n *ngIf=\"item.items\"\r\n ></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n booleanAttribute,\r\n ChangeDetectorRef,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n EnvironmentInjector,\r\n HostBinding,\r\n HostListener,\r\n inject,\r\n Input,\r\n numberAttribute,\r\n OnChanges,\r\n OnInit,\r\n QueryList,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { Router } from '@angular/router';\r\nimport { RdtRoute, RdtRouterService } from '@ngrdt/router';\r\nimport { RdtShortcut, RdtShortcutService } from '@ngrdt/shortcuts';\r\nimport {\r\n KB_CODE,\r\n RdtHorizontalDirection,\r\n RdtStringUtils,\r\n RdtVerticalDirection,\r\n} from '@ngrdt/utils';\r\nimport {\r\n animationFrameScheduler,\r\n fromEvent,\r\n Subscription,\r\n throttleTime,\r\n} from 'rxjs';\r\nimport { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';\r\nimport {\r\n DEFAULT_MENU_HORIZONTAL_DIR,\r\n DEFAULT_MENU_VERTICAL_DIR,\r\n RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME,\r\n RDT_MENU_MARGIN_LEFT_PROPERTY_NAME,\r\n RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME,\r\n RDT_MENU_MARGIN_TOP_PROPERTY_NAME,\r\n RdtMenuShortcutMode,\r\n} from '../models';\r\nimport {\r\n ParsedRdtMenuItem,\r\n RdtMenuExpandedChild,\r\n RdtMenuExpandSource,\r\n} from '../private-models';\r\nimport {\r\n findNextItemWithPrefix,\r\n FOCUS_VISIBLE,\r\n getChildRoutesMap,\r\n getMenuItemsShortcuts,\r\n menuItemHasChildren,\r\n menuItemHasRoute,\r\n ParsedRdtMenuItemWithShortcut,\r\n Size,\r\n} from '../utils';\r\n\r\n@Directive()\r\nexport abstract class RdtMenuBaseComponent\r\n implements OnInit, OnChanges, AfterViewInit\r\n{\r\n @Input()\r\n preferredVerticalDir: RdtVerticalDirection = DEFAULT_MENU_VERTICAL_DIR;\r\n\r\n @Input()\r\n preferredHorizontalDir: RdtHorizontalDirection = DEFAULT_MENU_HORIZONTAL_DIR;\r\n\r\n // Mode only matters if item has shortcut and only children, no command nor routerLink\r\n // FOCUS_ITEM will put focus on item with shortcut\r\n // OPEN_SUBMENU will open its submenu and put focus on the first item in it\r\n // If item has command or routerLink, it will always be activated and everything closed\r\n @Input()\r\n shortcutMode: 'focus-item' | 'open-submenu' =\r\n RdtMenuShortcutMode.OPEN_SUBMENU;\r\n\r\n @Input({ transform: booleanAttribute })\r\n closeOnFocusOut = false;\r\n\r\n @Input({ transform: booleanAttribute })\r\n openOnHover = false;\r\n\r\n @Input({ transform: numberAttribute })\r\n hitboxMargin = 10;\r\n\r\n readonly cd = inject(ChangeDetectorRef);\r\n readonly destroyRef = inject(DestroyRef);\r\n protected readonly rdtRouter = inject(RdtRouterService);\r\n protected readonly elRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n protected readonly document = inject(DOCUMENT);\r\n protected readonly renderer = inject(Renderer2);\r\n protected readonly router = inject(Router);\r\n protected readonly shortcutService = inject(RdtShortcutService);\r\n protected readonly injector = inject(EnvironmentInjector);\r\n\r\n @ViewChildren(RdtMenuOverlayComponent)\r\n protected children!: QueryList<RdtMenuOverlayComponent>;\r\n\r\n @ViewChildren('focusableItem')\r\n protected focusableElements!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n abstract get buttonContainer(): HTMLElement | undefined;\r\n\r\n @HostBinding('class')\r\n classes = 'rdt-menu-base';\r\n\r\n expandedChild: RdtMenuExpandedChild | null = null;\r\n\r\n protected autofocusSubmenuItem: 'first' | 'last' | null = null;\r\n protected parsedItems!: ParsedRdtMenuItem[];\r\n\r\n get clientSize() {\r\n return this._clientSize;\r\n }\r\n private _clientSize!: Size;\r\n\r\n get bodyMargin() {\r\n return this._bodyMargin;\r\n }\r\n private _bodyMargin!: {\r\n top: number;\r\n bottom: number;\r\n left: number;\r\n right: number;\r\n };\r\n\r\n get buttonContainerRect() {\r\n return this._buttonContainerRect;\r\n }\r\n private _buttonContainerRect?: DOMRect;\r\n\r\n protected allParsedItems!: ParsedRdtMenuItem[];\r\n protected childRoutesMap: Map<ParsedRdtMenuItem, string[][]> = new Map();\r\n protected shortcutSub = new Subscription();\r\n protected shortcutMap: Record<string, ParsedRdtMenuItem[]> = {};\r\n\r\n readonly keyActions = {\r\n [KB_CODE.ARROW.LEFT]: (index: number) => this.focusPrevItem(index),\r\n [KB_CODE.ARROW.RIGHT]: (index: number) => this.focusNextItem(index),\r\n [KB_CODE.ARROW.DOWN]: (index: number) =>\r\n this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\r\n [KB_CODE.ARROW.UP]: (index: number) =>\r\n this.openSubmenu(index, 'last', RdtMenuExpandSource.Shortcut),\r\n [KB_CODE.HOME]: () => this.focusItem(0),\r\n [KB_CODE.END]: () => this.focusItem(this.parsedItems.length - 1),\r\n [KB_CODE.ENTER]: (index: number) => this.invokeItemClickByIndex(index),\r\n [KB_CODE.SPACEBAR]: (index: number) => this.invokeItemClickByIndex(index),\r\n };\r\n\r\n // Returns all routes asociated with item or its subitems.\r\n getChildRoutes(item: ParsedRdtMenuItem) {\r\n return this.childRoutesMap.get(item) ?? [];\r\n }\r\n\r\n ngOnInit() {\r\n this.rdtRouter.navigationEnd$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((ev) => this.filterItems());\r\n this.measure();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.children) {\r\n this.recalculateChildren();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.listenWindowResize();\r\n\r\n // Not using timeout results in horizontal overflow on html element\r\n setTimeout(() => {\r\n this.measure();\r\n this.recalculateChildren();\r\n }, 50);\r\n }\r\n\r\n recalculateChildren() {\r\n this.children.forEach((child) => {\r\n child.recalculatePosition(\r\n this.preferredHorizontalDir,\r\n this.preferredVerticalDir\r\n );\r\n });\r\n }\r\n\r\n closeSubmenus(focusExpanded = false) {\r\n if (focusExpanded && this.expandedChild) {\r\n this.focusItem(this.expandedChild.item);\r\n }\r\n this.expandedChild = null;\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected onItemClick(item: ParsedRdtMenuItem) {\r\n if (\r\n (menuItemHasChildren(item) && this.expandedChild?.item !== item) ||\r\n (this.openOnHover &&\r\n this.expandedChild?.src === RdtMenuExpandSource.Hover)\r\n ) {\r\n this.autofocusSubmenuItem = null;\r\n this.expandedChild = { item, src: RdtMenuExpandSource.Click };\r\n } else {\r\n this.expandedChild = null;\r\n }\r\n if (typeof item.command === 'function') {\r\n item.command();\r\n }\r\n }\r\n\r\n protected onItemPointerEnter(item: ParsedRdtMenuItem) {\r\n if (this.openOnHover) {\r\n if (\r\n menuItemHasChildren(item) &&\r\n this.expandedChild?.src !== RdtMenuExpandSource.Click\r\n ) {\r\n this.autofocusSubmenuItem = null;\r\n this.expandedChild = { item, src: RdtMenuExpandSource.Hover };\r\n } else {\r\n this.expandedChild = null;\r\n }\r\n }\r\n }\r\n\r\n protected onKeyDown(itemIndex: number, event: KeyboardEvent) {\r\n const hasAction = event.code in this.keyActions;\r\n const isLetter =\r\n RdtStringUtils.isAlphabetCharacter(event.key) ||\r\n RdtStringUtils.isNumericCharacter(event.key);\r\n\r\n if (hasAction || isLetter) {\r\n event.preventDefault();\r\n }\r\n\r\n if (hasAction) {\r\n event.stopPropagation();\r\n }\r\n\r\n if (hasAction) {\r\n this.keyActions[event.code](itemIndex);\r\n } else if (isLetter) {\r\n const next = findNextItemWithPrefix(\r\n this.parsedItems,\r\n itemIndex,\r\n event.key\r\n );\r\n if (next !== null) {\r\n this.focusItem(next);\r\n }\r\n }\r\n }\r\n\r\n protected invokeItemClick(item: ParsedRdtMenuItem) {\r\n if (menuItemHasRoute(item) && item.routerLink) {\r\n this.router.navigate(item.routerLink);\r\n }\r\n this.onItemClick(item);\r\n this.autofocusSubmenuItem = 'first';\r\n }\r\n\r\n protected filterItems() {\r\n const current = this.rdtRouter.parseAbsoluteUrl();\r\n if (!current) {\r\n this.parsedItems = this.allParsedItems;\r\n } else {\r\n this.parsedItems = this.filterRec(this.allParsedItems, current);\r\n }\r\n this.childRoutesMap = getChildRoutesMap(this.parsedItems);\r\n this.listenShortcuts();\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected filterRec(\r\n items: ParsedRdtMenuItem[],\r\n current: { route: RdtRoute; params: Record<string, any> }\r\n ): ParsedRdtMenuItem[] {\r\n let currentParent = current.route;\r\n const currentParams = current.params;\r\n\r\n const filtered = items.filter((item) => {\r\n if (!item.requiredParent) {\r\n return true;\r\n }\r\n const required = item.requiredParent;\r\n while (currentParent.absolutePath !== required.absolutePath) {\r\n currentParent = currentParent.parent!;\r\n if (!currentParent) {\r\n return false;\r\n }\r\n }\r\n let requiredParent: RdtRoute | null = required;\r\n do {\r\n const path = requiredParent.absolutePath;\r\n if (path in currentParams) {\r\n for (const key in requiredParent.staticParams) {\r\n if (currentParams[path][key] !== requiredParent.staticParams[key]) {\r\n return false;\r\n }\r\n }\r\n }\r\n requiredParent = requiredParent.parent;\r\n } while (requiredParent);\r\n return true;\r\n });\r\n\r\n return filtered.map((item) => {\r\n if (item.items) {\r\n return {\r\n ...item,\r\n items: this.filterRec(item.items, current),\r\n };\r\n } else {\r\n return item;\r\n }\r\n });\r\n }\r\n\r\n protected invokeItemClickByIndex(itemIndex: number) {\r\n const item = this.parsedItems[itemIndex];\r\n if (!item) {\r\n return;\r\n }\r\n this.invokeItemClick(item);\r\n }\r\n\r\n protected openSubmenu(\r\n itemIndex: number,\r\n visibleFocus: 'first' | 'last',\r\n src: RdtMenuExpandSource\r\n ) {\r\n if (\r\n itemIndex < this.parsedItems.length &&\r\n menuItemHasChildren(this.parsedItems[itemIndex])\r\n ) {\r\n const item = this.parsedItems[itemIndex];\r\n this.autofocusSubmenuItem = visibleFocus;\r\n this.expandedChild = { item, src };\r\n }\r\n }\r\n\r\n protected focusItem(item: number | ParsedRdtMenuItem) {\r\n let itemIndex: number;\r\n\r\n if (typeof item === 'number') {\r\n itemIndex = item;\r\n } else {\r\n itemIndex = this.parsedItems.indexOf(item);\r\n }\r\n\r\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\r\n this.blurAllFocusable();\r\n this.focusFocusable(itemIndex);\r\n }\r\n }\r\n\r\n protected focusNextItem(itemIndex: number) {\r\n const next = (itemIndex + 1) % this.parsedItems.length;\r\n this.focusItem(next);\r\n }\r\n\r\n protected focusPrevItem(itemIndex: number) {\r\n const prev =\r\n (itemIndex - 1 + this.parsedItems.length) % this.parsedItems.length;\r\n this.focusItem(prev);\r\n }\r\n\r\n protected blurAllFocusable() {\r\n this.focusableElements.forEach((el) =>\r\n this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE)\r\n );\r\n }\r\n\r\n protected focusFocusable(itemIndex: number) {\r\n const elRef = this.focusableElements.get(itemIndex);\r\n if (elRef) {\r\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\r\n elRef.nativeElement.focus();\r\n }\r\n }\r\n\r\n @HostListener('window:pointermove', ['$event'])\r\n protected onPointerMove(event: PointerEvent) {\r\n if (this.openOnHover && this.expandedChild) {\r\n const hitboxes = this.getHitboxes();\r\n const isInside = hitboxes.some((hitbox) =>\r\n this.isPointerInsideHitbox(hitbox.rect, event)\r\n );\r\n for (let i = hitboxes.length - 1; i >= 0; i--) {\r\n const hitbox = hitboxes[i];\r\n if (!hitbox.fixed && !isInside) {\r\n hitbox.close();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Closes menu if user navigates outside it using Tab.\r\n @HostListener('window:focusout', ['$event'])\r\n protected checkActiveElement(event: FocusEvent) {\r\n if (this.closeOnFocusOut && !this.openOnHover) {\r\n console.log('focusout', event);\r\n\r\n const thisEl = this.elRef.nativeElement;\r\n const target = event.relatedTarget;\r\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\r\n this.expandedChild = null;\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n protected onDocumentClick(event: PointerEvent) {\r\n const target = event.target as HTMLElement;\r\n const elRef = this.elRef.nativeElement;\r\n if (!elRef.contains(target)) {\r\n this.closeSubmenus();\r\n }\r\n }\r\n\r\n protected measure() {\r\n this.measureButtonContainer();\r\n this.measureClientSize();\r\n this.readMargin();\r\n }\r\n\r\n protected readMargin() {\r\n const computedStyle = getComputedStyle(this.elRef.nativeElement);\r\n const topVal = computedStyle.getPropertyValue(\r\n RDT_MENU_MARGIN_TOP_PROPERTY_NAME\r\n );\r\n const bottomVal = computedStyle.getPropertyValue(\r\n RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME\r\n );\r\n const leftVal = computedStyle.getPropertyValue(\r\n RDT_MENU_MARGIN_LEFT_PROPERTY_NAME\r\n );\r\n const rightVal = computedStyle.getPropertyValue(\r\n RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME\r\n );\r\n this._bodyMargin = {\r\n top: parseInt(topVal) || 0,\r\n bottom: parseInt(bottomVal) || 0,\r\n left: parseInt(leftVal) || 0,\r\n right: parseInt(rightVal) || 0,\r\n };\r\n }\r\n\r\n protected measureClientSize() {\r\n this._clientSize = {\r\n width: this.document.body.clientWidth,\r\n height: this.document.body.clientHeight,\r\n };\r\n }\r\n\r\n protected measureButtonContainer() {\r\n const el = this.buttonContainer;\r\n if (el) {\r\n this._buttonContainerRect = el.getBoundingClientRect();\r\n } else {\r\n this._buttonContainerRect = undefined;\r\n }\r\n }\r\n\r\n protected listenWindowResize() {\r\n fromEvent(window, 'resize')\r\n .pipe(\r\n throttleTime(0, animationFrameScheduler, { trailing: true }),\r\n takeUntilDestroyed(this.destroyRef)\r\n )\r\n .subscribe(() => {\r\n this.measure();\r\n this.recalculateChildren();\r\n });\r\n }\r\n\r\n protected listenShortcuts() {\r\n const itemsWithShortcuts = getMenuItemsShortcuts(this.parsedItems);\r\n const shortcuts: RdtShortcut[] = itemsWithShortcuts.map(\r\n (it) => it.shortcut\r\n );\r\n\r\n this.shortcutMap = this.getShortcutMap(itemsWithShortcuts);\r\n this.shortcutSub.unsubscribe();\r\n this.shortcutSub = this.shortcutService\r\n .listen(shortcuts)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((evt) => this.onShortcut(evt.shortcut));\r\n }\r\n\r\n protected getShortcutMap(\r\n itemsWithShortcuts: ParsedRdtMenuItemWithShortcut[]\r\n ) {\r\n const shortcutMap: Record<string, ParsedRdtMenuItem[]> = {};\r\n itemsWithShortcuts.forEach((item) => {\r\n shortcutMap[item.shortcut.hotkeysValue] = item.path;\r\n });\r\n return shortcutMap;\r\n }\r\n\r\n protected onShortcut(shortcut: RdtShortcut) {\r\n const path = this.shortcutMap[shortcut.hotkeysValue];\r\n if (!path) {\r\n console.warn(\r\n `Menu shortcut ${shortcut.hotkeysValue} was detected, but there is no path associated with it.`,\r\n this.shortcutMap\r\n );\r\n }\r\n const last = path[path.length - 1];\r\n const hasRoute = menuItemHasRoute(last);\r\n const hasCommand = typeof last.command === 'function';\r\n if (hasRoute || hasCommand) {\r\n this.closeSubmenus(false);\r\n if (hasCommand) {\r\n last.command!();\r\n }\r\n if (hasRoute) {\r\n this.router.navigate(last.routerLink!);\r\n }\r\n } else {\r\n this.activateItemRecursively(path, RdtMenuExpandSource.Shortcut);\r\n }\r\n }\r\n\r\n protected activateItemRecursively(\r\n path: ParsedRdtMenuItem[],\r\n src: RdtMenuExpandSource\r\n ) {\r\n const children = [...path];\r\n\r\n if (this.shortcutMode === RdtMenuShortcutMode.OPEN_SUBMENU) {\r\n const last = children[children.length - 1];\r\n if (menuItemHasChildren(last) && last.items[0]) {\r\n children.push(last.items[0]);\r\n }\r\n }\r\n\r\n const thisItem = children.shift()!;\r\n\r\n if (children.length > 0) {\r\n this.expandedChild = { item: thisItem, src };\r\n const overlay = this.children.find((child) => child.item === thisItem);\r\n overlay!.focusItemRecursively(children);\r\n } else {\r\n this.expandedChild = null;\r\n this.focusItem(thisItem);\r\n }\r\n }\r\n\r\n isPointerInsideHitbox(hitbox: DOMRect, event: PointerEvent) {\r\n const rect = hitbox;\r\n const x = event.clientX;\r\n const y = event.clientY;\r\n\r\n return (\r\n x >= rect.left - this.hitboxMargin &&\r\n x <= rect.right + this.hitboxMargin &&\r\n y >= rect.top - this.hitboxMargin &&\r\n y <= rect.bottom + this.hitboxMargin\r\n );\r\n }\r\n\r\n getHitboxes(): { rect: DOMRect; fixed: boolean; close: () => void }[] {\r\n const boxes = this.getOpenMenuBoundingBoxes();\r\n const buttonContainerRect = this.buttonContainerRect;\r\n if (buttonContainerRect) {\r\n boxes.push({ rect: buttonContainerRect, fixed: true, close: () => {} });\r\n }\r\n return boxes;\r\n }\r\n\r\n getOpenMenuBoundingBoxes() {\r\n const boxes: { rect: DOMRect; fixed: boolean; close: () => void }[] = [];\r\n this.children.forEach((overlay) => {\r\n this.getOpenMenuBoundingBoxesRec(overlay, boxes);\r\n });\r\n return boxes;\r\n }\r\n\r\n private getOpenMenuBoundingBoxesRec(\r\n overlay: RdtMenuOverlayComponent,\r\n boxes: { rect: DOMRect; fixed: boolean; close: () => void }[]\r\n ): boolean {\r\n if (overlay.expanded) {\r\n let someByClick = false;\r\n overlay.children.forEach(\r\n (child) =>\r\n (someByClick ||= this.getOpenMenuBoundingBoxesRec(child, boxes))\r\n );\r\n const fixed =\r\n someByClick || overlay.selfExpandSrc === RdtMenuExpandSource.Click;\r\n boxes.push({\r\n rect: overlay.box,\r\n fixed: fixed,\r\n close: () => overlay.closeSelf(false),\r\n });\r\n return fixed;\r\n }\r\n return false;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n HostBinding,\r\n Input,\r\n numberAttribute,\r\n ViewChild,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\r\nimport { RdtMenuItem } from '../models';\r\nimport { parseMenuItems } from '../private-models';\r\n\r\n@Component({\r\n selector: 'rdt-menu-bar',\r\n templateUrl: './rdt-menu-bar.component.html',\r\n styleUrl: './rdt-menu-bar.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n {\r\n provide: RdtMenuBaseComponent,\r\n useExisting: RdtMenuBarComponent,\r\n },\r\n ],\r\n})\r\nexport class RdtMenuBarComponent extends RdtMenuBaseComponent {\r\n @ViewChild('buttonContainer', { static: true })\r\n buttonContainerRef?: ElementRef<HTMLElement>;\r\n\r\n get buttonContainer() {\r\n return this.buttonContainerRef?.nativeElement;\r\n }\r\n\r\n @Input()\r\n get items() {\r\n return this._items;\r\n }\r\n set items(value: RdtMenuItem[]) {\r\n this._items = value;\r\n this.allParsedItems = parseMenuItems(value, this.injector);\r\n this.filterItems();\r\n }\r\n private _items!: RdtMenuItem[];\r\n\r\n @Input({ transform: numberAttribute })\r\n headerHeight = 0;\r\n\r\n @Input({ transform: numberAttribute })\r\n footerHeight = 0;\r\n\r\n @HostBinding('attr.role')\r\n private roleAttr = 'menubar';\r\n}\r\n","<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnInit,\r\n QueryList,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { RDT_BUTTON_BASE_PROVIDER, RdtButtonBaseInt } from '@ngrdt/button';\r\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\r\nimport { RdtMenuItem } from '../models';\r\nimport { parseMenuItems } from '../private-models';\r\n\r\n@Component({\r\n selector: 'rdt-menu',\r\n templateUrl: './rdt-menu.component.html',\r\n styleUrl: './rdt-menu.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n {\r\n provide: RdtMenuBaseComponent,\r\n useExisting: RdtMenuComponent,\r\n },\r\n ],\r\n})\r\nexport class RdtMenuComponent\r\n extends RdtMenuBaseComponent\r\n implements OnInit, DoCheck\r\n{\r\n protected readonly buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);\r\n\r\n @Input({ required: true })\r\n trigger!: RdtButtonBaseInt;\r\n\r\n @Input()\r\n dataTestId = '';\r\n\r\n @Input({ required: true })\r\n get items() {\r\n return this._items;\r\n }\r\n set items(value: RdtMenuItem[]) {\r\n this._items = value;\r\n const wrapper: RdtMenuItem = {\r\n label: '',\r\n icon: '',\r\n items: value,\r\n };\r\n this.allParsedItems = parseMenuItems([wrapper], this.injector);\r\n this.filterItems();\r\n }\r\n private _items!: RdtMenuItem[];\r\n\r\n protected override readonly focusableElements = new QueryList<\r\n ElementRef<HTMLElement>\r\n >();\r\n\r\n override get buttonContainer(): HTMLElement | undefined {\r\n return this.anchorElement ?? undefined;\r\n }\r\n\r\n get parsedItem() {\r\n return this.parsedItems[0];\r\n }\r\n\r\n get anchorElement() {\r\n return this.trigger.anchorElement;\r\n }\r\n\r\n override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.trigger.tabIndex = 0;\r\n this.trigger.dataTestId = this.dataTestId;\r\n this.trigger.click$.subscribe(() => this.toggle());\r\n this.listenPointerOver();\r\n if (this.anchorElement) {\r\n console.log('Anchor element:', this.anchorElement);\r\n this.focusableElements.reset([{ nativeElement: this.anchorElement }]);\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.trigger) {\r\n this.trigger.aria = {\r\n role: 'menuitem',\r\n 'aria-haspopup': 'true',\r\n 'aria-expanded': this.expandedChild?.item === this.parsedItem,\r\n };\r\n }\r\n }\r\n\r\n toggle() {\r\n this.onItemClick(this.parsedItem);\r\n this.cd.markForCheck();\r\n }\r\n\r\n private listenPointerOver() {\r\n const target = this.anchorElement;\r\n const listener = this.renderer.listen(target, 'pointerover', (event) => {\r\n this.onItemPointerEnter(this.parsedItem);\r\n this.cd.markForCheck();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => listener());\r\n }\r\n}\r\n","<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"anchorElement!\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expandedChild?.item === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { RdtButtonOutletDirective } from '@ngrdt/button';\r\nimport { RdtAnyRouteActiveDirective } from '@ngrdt/router';\r\nimport { RdtKeyListenerDirective } from '@ngrdt/shortcuts';\r\nimport { RdtMenuBarComponent } from './menu-bar/rdt-menu-bar.component';\r\nimport { RdtMenuOverlayComponent } from './menu-overlay/rdt-menu-overlay.component';\r\nimport { RdtMenuComponent } from './menu/rdt-menu.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n RdtAnyRouteActiveDirective,\r\n RdtKeyListenerDirective,\r\n RdtButtonOutletDirective,\r\n ],\r\n declarations: [\r\n RdtMenuOverlayComponent,\r\n RdtMenuComponent,\r\n RdtMenuBarComponent,\r\n ],\r\n exports: [RdtMenuComponent, RdtMenuBarComponent],\r\n})\r\nexport class RdtMenuModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i5.RdtMenuOverlayComponent","i2.RdtMenuOverlayComponent"],"mappings":";;;;;;;;;;;;;;;IAmCY,oBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC/B,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA,CAAA;AAEM,MAAM,iCAAiC,GAAG,wBAAwB;AAClE,MAAM,oCAAoC,GAAG,2BAA2B;AACxE,MAAM,kCAAkC,GAAG,yBAAyB;AACpE,MAAM,mCAAmC,GAAG,0BAA0B;AAEtE,MAAM,2BAA2B,GAAG,OAAO;AAC3C,MAAM,yBAAyB,GAAG,OAAO;MAEnC,gCAAgC,GAC3C,IAAI,cAAc,CAAyB,yBAAyB,EAAE;MAC3D,8BAA8B,GACzC,IAAI,cAAc,CAAuB,uBAAuB;;ACG5D,SAAU,cAAc,CAC5B,KAAoB,EACpB,QAAkB,EAClB,MAAM,GAAG,EAAE,EAAA;AAEX,IAAA,OAAO,KAAK;AACT,SAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,QAAA,IAAI,SAAiB,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;SAC7B;aAAM,IAAI,MAAM,EAAE;YACjB,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;SAC9D;aAAM;YACL,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtD;AACD,QAAA,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,CAChD,SAAS,EACT,IAAI,EACJ,WAAW,CACZ,CAAC;AACF,QAAA,MAAM,GAAG,GAA0B;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;AACnC,YAAA,UAAU,EAAE,aAAa;SAC1B,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,WAAW,GAAG,GAAoC,CAAC;AACzD,YAAA,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACvE,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,gBAAA,WAAW,CAAC,KAAK,GAAG,cAAc,CAAC;aACpC;AACD,YAAA,OAAO,WAAW,CAAC;SACpB;AAAM,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1B,MAAM,OAAO,GAAG,GAAiC,CAAC;YAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE;AACxD,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CACpD,IAAI,CAAC,UAAU,CAChB,CAAC;oBACF,OAAO,CAAC,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;iBAChD;aACF;AACD,YAAA,OAAO,OAAO,CAAC;SAChB;aAAM;YACL,MAAM,OAAO,GAAG,GAAgC,CAAC;AACjD,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,iBAAiB,CACrD,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,CACjB,CAAC;iBACH;qBAAM;AACL,oBAAA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;iBAC1C;aACF;YACD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;AACzC,YAAA,OAAO,OAAO,CAAC;SAChB;AACH,KAAC,CAAC;AACD,SAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;SACjD,MAAM,CACL,CAAC,IAAI,KACH,IAAI,CAAC,YAAY;QACjB,IAAI,CAAC,YAAY,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO;AACZ,QAAA,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CACnC,CAAC;AACN,CAAC;AAED,IAAY,mBAKX,CAAA;AALD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,mBAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,mBAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACR,IAAA,mBAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACP,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,GAK9B,EAAA,CAAA,CAAA;;AC3HM,MAAM,eAAe,GAAG,WAAW,CAAC;AACpC,MAAM,aAAa,GAAG,eAAe,CAAC;AAgC7C,SAAS,oBAAoB,CAC3B,IAAuB,EACvB,GAAuC,EAAA;AAEvC,IAAA,IAAI,WAAyB,CAAC;AAE9B,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AAC7B,QAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3E;SAAM;QACL,WAAW,GAAG,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,GAAe,CAAC;IAEpB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7C,QAAA,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;KAChD;SAAM;QACL,GAAG,GAAI,EAAiB,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;KACjD;AACD,IAAA,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnB,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAEK,SAAU,iBAAiB,CAAC,KAA0B,EAAA;AAC1D,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiC,CAAC;AAErD,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;SAEe,sBAAsB,CACpC,KAA0B,EAC1B,SAAiB,EACjB,MAAc,EAAA;AAEd,IAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;AACjD,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,CAAC;SACV;KACF;AACD,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAEK,SAAU,mBAAmB,CACjC,IAAuB,EAAA;IAEvB,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAEK,SAAU,gBAAgB,CAC9B,IAAuB,EAAA;IAEvB,OAAO,YAAY,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,wBAAwB,CAC/B,IAAuB,EACvB,WAAgC,EAChC,GAAoC,EAAA;IAEpC,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;AACpC,IAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,IAAI,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC,CAAC;KACJ;AACD,IAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,wBAAwB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3E;AACH,CAAC;AAEK,SAAU,qBAAqB,CAAC,KAA0B,EAAA;IAC9D,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,MAAM,WAAW,GAAwB,EAAE,CAAC;AAC5C,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1E,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAEe,SAAA,eAAe,CAC7B,CAA6B,EAC7B,CAA6B,EAAA;IAE7B,IAAI,CAAC,CAAC,EAAE;QACN,OAAO,CAAC,CAAC,CAAC;KACX;IACD,IAAI,CAAC,CAAC,EAAE;QACN,OAAO,CAAC,CAAC,CAAC;KACX;AACD,IAAA,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAEe,SAAA,gBAAgB,CAC9B,CAA8B,EAC9B,CAA8B,EAAA;IAE9B,IAAI,CAAC,CAAC,EAAE;QACN,OAAO,CAAC,CAAC,CAAC;KACX;IACD,IAAI,CAAC,CAAC,EAAE;QACN,OAAO,CAAC,CAAC,CAAC;KACX;AACD,IAAA,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC;AAC5C;;AC/FA;MAOa,uBAAuB,CAAA;AAGzB,IAAA,KAAK,GAA4B,MAAM,EAAC,UAAuB,EAAC,CAAC;AACjE,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAExB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,IAAA,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC5C,IAAA,UAAU,GAAG,MAAM,CAAC,uBAAuB,EAAE;AAC5D,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC,CAAC;AACc,IAAA,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC/B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAGrD,IAAA,QAAQ,CAAsC;AAG/C,IAAA,iBAAiB,CAAwC;AAGzD,IAAA,iBAAiB,CAAgC;AAGzD,IAAA,IAAI,CAAiC;AAGrC,IAAA,KAAK,CAAU;IAGf,sBAAsB,GAA2B,2BAA2B,CAAC;IAG7E,oBAAoB,GAAyB,yBAAyB,CAAC;IAIvE,QAAQ,GAAG,KAAK,CAAC;IAGjB,aAAa,GAA4B,IAAI,CAAC;;;;AAM9C,IAAA,aAAa,CAAe;IAGpB,QAAQ,GAAG,MAAM,CAAC;IAGlB,YAAY,GAAG,IAAI,CAAC;AAE5B,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACxB;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;KACzB;;AAGO,IAAA,IAAI,CAAW;AACvB,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;;AAGO,IAAA,UAAU,CAAW;IACrB,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;;IAG1C,YAAY,GAAG,KAAK,CAAC;;IAGnB,WAAW,GAA6B,IAAI,CAAC;IAC7C,aAAa,GAA4B,IAAI,CAAC;IAE9C,aAAa,GAGZ,IAAI,CAAC;IACN,oBAAoB,GAA4B,IAAI,CAAC;AAEtD,IAAA,UAAU,GAAG;AACpB,QAAA,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAChE,QAAA,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAClE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAa,KACnC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AAChE,QAAA,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAC5C,QAAA,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACvC,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/D,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AACxC,QAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACtE,QAAA,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;KAC1E,CAAC;AACF,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC;aAC3C;iBAAM;AACL,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC;aAC7C;SACF;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,cAAc,GAAG;YACrB,wBAAwB;YACxB,sBAAsB;YACtB,UAAU;SACX,CAAC;AACF,QAAA,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YACrE,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,oBAAoB,CAC1B,CAAC;SACH;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;QAED,IAAI,UAAU,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;;;YAG1C,UAAU,CAAC,MAAK;AACd,gBAAA,QAAQ,IAAI,CAAC,aAAa;AACxB,oBAAA,KAAK,IAAI;AACP,wBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;wBACzB,MAAM;AACR,oBAAA,KAAK,OAAO;AACV,wBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;wBACxB,MAAM;AACR,oBAAA,KAAK,MAAM;AACT,wBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;iBACpD;AACH,aAAC,CAAC,CAAC;SACJ;KACF;IAED,eAAe,GAAA;QACb,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,oBAAoB,CAC1B,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC1B;IAEO,gBAAgB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;KAC1C;IAEO,gBAAgB,GAAA;AACtB,QAAA,QACE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAClC;KACH;IAEO,eAAe,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;KACzC;IAEO,eAAe,GAAA;AACrB,QAAA,QACE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;YACnC,IAAI,CAAC,IAAI,CAAC,MAAM;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EACnC;KACH;IAED,mBAAmB,CACjB,sBAA8C,EAC9C,oBAA0C,EAAA;;QAG1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClC,OAAO;SACR;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;;AAGjE,QAAA,IAAI,SAAS,CAAC,GAAG,KAAK,OAAO,EAAE;YAC7B,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;aACzC;SACF;AAAM,aAAA,IAAI,SAAS,CAAC,GAAG,KAAK,MAAM,EAAE;AACnC,YAAA,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAEzD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;aACzC;SACF;;QAGD,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,EACjD,IAAI,CAAC,gBAAgB,EAAE,CACxB,CAAC;;AAGF,QAAA,IAAI,UAAU,CAAC,GAAG,KAAK,MAAM,EAAE;YAC7B,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;aAC1C;iBAAM;gBACL,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;aAC9C;SACF;AAAM,aAAA,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,EAAE;AAClC,YAAA,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACxD,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;aACvE;SACF;;QAGD,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EAChD,IAAI,CAAC,eAAe,EAAE,CACvB,CAAC;QAEF,IACE,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;YAC/C,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAC/C;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,kBAAkB,CAAC,IAAuB,EAAA;AACxC,QAAA,IACE,IAAI,CAAC,YAAY,CAAC,WAAW;YAC7B,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,EACrD;AACA,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;AAC9D,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACtB;iBAAM;;AAEL,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;SACF;KACF;AAED,IAAA,WAAW,CAAC,IAAuB,EAAA;AACjC,QAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC9C,IACE,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,IAAI;AACjD,aAAC,IAAI,CAAC,YAAY,CAAC,WAAW;gBAC5B,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,CAAC,EACxD;AACA,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;SAC/D;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;;;QAGD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;SACnC;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;KACF;AAED,IAAA,eAAe,CAAC,IAAuB,EAAA;QACrC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACvC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;KACrC;AAED,IAAA,cAAc,CAAC,IAAuB,EAAA;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC/C;IAED,aAAa,CAAC,aAAa,GAAG,KAAK,EAAA;AACjC,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACzC;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;AAED,IAAA,oBAAoB,CAAC,IAAyB,EAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;AAEnC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAE1B,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,KAAK,CAAC;AACxD,iBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,iBAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,gBAAA,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACzC,aAAC,CAAC,CAAC;SACN;aAAM;;;;AAIL,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;;YAEzB,IAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/C;KACF;IAEO,iBAAiB,CAAC,IAAuB,EAAE,GAAwB,EAAA;AACzE,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;SACH;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AAEvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACjE,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SAClB;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAC/B,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAC7D,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CACnC,CAAC;SACH;KACF;IAES,SAAS,CAAC,SAAiB,EAAE,KAAoB,EAAA;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;QAChD,MAAM,QAAQ,GACZ,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,YAAA,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE/C,QAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QACD,IAAI,SAAS,EAAE;YACb,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;QAED,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;SACxC;aAAM,IAAI,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,sBAAsB,CACjC,IAAI,CAAC,IAAI,CAAC,KAAK,EACf,SAAS,EACT,KAAK,CAAC,GAAG,CACV,CAAC;AACF,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACtB;SACF;KACF;AAEO,IAAA,aAAa,CAAC,KAAuB,EAAA;;AAE3C,QAAA,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;;QAEtC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aACvB;SACF,EAAE,CAAC,CAAC,CAAC;KACP;AAEO,IAAA,sBAAsB,CAAC,SAAiB,EAAA;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC5B;AAEO,IAAA,SAAS,CAAC,IAAgC,EAAE,YAAY,GAAG,IAAI,EAAA;AACrE,QAAA,IAAI,SAAiB,CAAC;AAEtB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,SAAS,GAAG,IAAI,CAAC;SAClB;aAAM;YACL,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC3C;AAED,QAAA,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;SAC9C;KACF;IAEO,gBAAgB,GAAA;QACtB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAC3D,CAAC;KACH;IAEO,cAAc,CAAC,SAAiB,EAAE,YAAqB,EAAA;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE;YACT,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;aAC5D;AACD,YAAA,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC7B;KACF;AAEO,IAAA,aAAa,CAAC,SAAiB,EAAA;AACrC,QAAA,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtB;AAEO,IAAA,aAAa,CAAC,SAAiB,EAAA;QACrC,MAAM,IAAI,GACR,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACpE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtB;AAEO,IAAA,WAAW,CACjB,SAAiB,EACjB,YAA8B,EAC9B,GAAwB,EAAA;QAExB,IACE,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAClC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAC/C;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AAC/D,YAAA,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC;SAC1C;KACF;IAED,SAAS,CAAC,aAAa,GAAG,IAAI,EAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;SAC9C;aAAM;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;SAChD;KACF;AAGO,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACvE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,YAAA,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;SACF;KACF;;;AAIO,IAAA,oBAAoB,CAC1B,sBAA8C,EAAA;AAE9C,QAAA,IAAI,IAAY,CAAC;AACjB,QAAA,IAAI,KAAa,CAAC;;AAElB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACpB,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/C,KAAK;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAClC,qBAAC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC5C;aAAM;;YAEL,KAAK;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK;AAClC,qBAAC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;SAC/C;QAED,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1C,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;AAE5C,QAAA,IAAI,sBAAsB,KAAK,OAAO,EAAE;;AAEtC,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;gBACd,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;aAElC;AAAM,iBAAA,IAAI,IAAI,IAAI,CAAC,EAAE;gBACpB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;;;aAGjC;iBAAM;gBACL,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACvD;SACF;aAAM;AACL,YAAA,IAAI,IAAI,IAAI,CAAC,EAAE;gBACb,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;aACjC;AAAM,iBAAA,IAAI,KAAK,IAAI,CAAC,EAAE;gBACrB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;aAClC;iBAAM;gBACL,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACvD;SACF;KACF;;;IAIO,4BAA4B,CAClC,IAAY,EACZ,KAAa,EAAA;QAEb,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC;AACtD,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;QAC1E,MAAM,YAAY,GAAG,CAAC,WAAW,GAAG,SAAS,IAAI,CAAC,CAAC;AAEnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAC5C,YAAY,CACb,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAC5C,SAAS,CACV,CAAC;QAEF,IAAI,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,EAAE;YAC/C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SACtC;aAAM;YACL,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;SACrC;KACF;AAEO,IAAA,kBAAkB,CACxB,oBAA0C,EAAA;AAE1C,QAAA,IAAI,MAAc,CAAC;AACnB,QAAA,IAAI,GAAW,CAAC;AAEhB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACpB,MAAM;AACJ,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;oBACnC,IAAI,CAAC,UAAU,CAAC,MAAM;AACtB,oBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACnB,YAAA,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;SAC9C;aAAM;YACL,MAAM;AACJ,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM;oBACnC,IAAI,CAAC,UAAU,CAAC,GAAG;AACnB,oBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACnB,YAAA,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;SACjD;QAED,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QACxC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;AAE9C,QAAA,IAAI,oBAAoB,KAAK,MAAM,EAAE;AACnC,YAAA,IAAI,MAAM,IAAI,CAAC,EAAE;gBACf,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAChC;AAAM,iBAAA,IAAI,GAAG,IAAI,CAAC,EAAE;gBACnB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9B;iBAAM;gBACL,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9C;SACF;aAAM;AACL,YAAA,IAAI,GAAG,IAAI,CAAC,EAAE;gBACZ,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9B;AAAM,iBAAA,IAAI,MAAM,IAAI,CAAC,EAAE;gBACtB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAChC;iBAAM;gBACL,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;aAC9C;SACF;KACF;;;IAIO,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;AAC7D,QAAA,MAAM,MAAM,GACV,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAc,CAAC;AAChE,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;KAClD;IAEO,uBAAuB,GAAA;QAC7B,MAAM,cAAc,GAAG,gBAAgB,CACrC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CACrC,CAAC;QACF,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,UAAU,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;KACrE;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAC1B,KAAK,CAAC,mBAAmB,CACvB,IAAI,CAAC,aAAc,CAAC,GAAG,EACvB,IAAI,CAAC,WAAY,CAAC,GAAG,CACtB,CACF,CAAC;SACH;KACF;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,IAAI,EAAE;AACjC,gBAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;aACtC;iBAAM;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAC7C;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,MAAM,EAAE;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;aACvC;iBAAM;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACrC,gBAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;aACpC;YACD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACjD;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;SAClC;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;SAC/B;KACF;AAEO,IAAA,QAAQ,CAAC,SAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;KAC7D;AAEO,IAAA,WAAW,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;KAChE;IAEO,SAAS,CAAC,SAAyB,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA,EAAA,CAAI,CAAC,CAAC;KAC3E;IAEO,iBAAiB,GAAA;QACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACjC,YAAA,cAAc,EAAE,KAAK;SACtB,CAAC;AACD,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACpD;uGAvqBU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAiBpB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,EAAA,eAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,uBAAuB,EChFvC,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,mqHAiHA,+8GDlDa,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;+BACE,kBAAkB,EAAA,eAAA,EAGX,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mqHAAA,EAAA,MAAA,EAAA,CAAA,2+EAAA,CAAA,EAAA,CAAA;8BAoBtC,QAAQ,EAAA,CAAA;sBADhB,YAAY;uBAAC,uBAAuB,CAAA;gBAI7B,iBAAiB,EAAA,CAAA;sBADxB,YAAY;uBAAC,eAAe,CAAA;gBAIrB,iBAAiB,EAAA,CAAA;sBADxB,SAAS;uBAAC,mBAAmB,CAAA;gBAI9B,IAAI,EAAA,CAAA;sBADH,KAAK;gBAIN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIN,sBAAsB,EAAA,CAAA;sBADrB,KAAK;gBAIN,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAKN,QAAQ,EAAA,CAAA;sBAFP,WAAW;uBAAC,gBAAgB,CAAA;;sBAC5B,KAAK;gBAIN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAON,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIE,QAAQ,EAAA,CAAA;sBADf,WAAW;uBAAC,WAAW,CAAA;gBAIhB,YAAY,EAAA,CAAA;sBADnB,WAAW;uBAAC,eAAe,CAAA;gBAIxB,MAAM,EAAA,CAAA;sBADT,WAAW;uBAAC,eAAe,CAAA;gBA0ZpB,kBAAkB,EAAA,CAAA;sBADzB,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEjdvB,oBAAoB,CAAA;IAIxC,oBAAoB,GAAyB,yBAAyB,CAAC;IAGvE,sBAAsB,GAA2B,2BAA2B,CAAC;;;;;AAO7E,IAAA,YAAY,GACV,mBAAmB,CAAC,YAAY,CAAC;IAGnC,eAAe,GAAG,KAAK,CAAC;IAGxB,WAAW,GAAG,KAAK,CAAC;IAGpB,YAAY,GAAG,EAAE,CAAC;AAET,IAAA,EAAE,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrC,IAAA,KAAK,GAA4B,MAAM,CAAC,UAAU,CAAC,CAAC;AACpD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,IAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC7C,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAGhD,IAAA,QAAQ,CAAsC;AAG9C,IAAA,iBAAiB,CAAsC;IAKjE,OAAO,GAAG,eAAe,CAAC;IAE1B,aAAa,GAAgC,IAAI,CAAC;IAExC,oBAAoB,GAA4B,IAAI,CAAC;AACrD,IAAA,WAAW,CAAuB;AAE5C,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AACO,IAAA,WAAW,CAAQ;AAE3B,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;AACO,IAAA,WAAW,CAKjB;AAEF,IAAA,IAAI,mBAAmB,GAAA;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;KAClC;AACO,IAAA,oBAAoB,CAAW;AAE7B,IAAA,cAAc,CAAuB;AACrC,IAAA,cAAc,GAAuC,IAAI,GAAG,EAAE,CAAC;AAC/D,IAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;IACjC,WAAW,GAAwC,EAAE,CAAC;AAEvD,IAAA,UAAU,GAAG;AACpB,QAAA,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAClE,QAAA,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACnE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAa,KAClC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,QAAQ,CAAC;QAChE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAa,KAChC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC;AAC/D,QAAA,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,QAAA,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAChE,QAAA,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;AACtE,QAAA,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,KAAa,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;KAC1E,CAAC;;AAGF,IAAA,cAAc,CAAC,IAAuB,EAAA;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAC5C;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,CAAC,cAAc;AAC1B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACzC,SAAS,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;IAED,eAAe,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;;QAG1B,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B,EAAE,EAAE,CAAC,CAAC;KACR;IAED,mBAAmB,GAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YAC9B,KAAK,CAAC,mBAAmB,CACvB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,oBAAoB,CAC1B,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,aAAa,GAAG,KAAK,EAAA;AACjC,QAAA,IAAI,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SACzC;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;AAES,IAAA,WAAW,CAAC,IAAuB,EAAA;AAC3C,QAAA,IACE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,IAAI;aAC9D,IAAI,CAAC,WAAW;gBACf,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,CAAC,EACxD;AACA,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;SAC/D;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;KACF;AAES,IAAA,kBAAkB,CAAC,IAAuB,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IACE,mBAAmB,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,aAAa,EAAE,GAAG,KAAK,mBAAmB,CAAC,KAAK,EACrD;AACA,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC;aAC/D;iBAAM;AACL,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;SACF;KACF;IAES,SAAS,CAAC,SAAiB,EAAE,KAAoB,EAAA;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC;QAChD,MAAM,QAAQ,GACZ,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7C,YAAA,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE/C,QAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QAED,IAAI,SAAS,EAAE;YACb,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;QAED,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;SACxC;aAAM,IAAI,QAAQ,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,sBAAsB,CACjC,IAAI,CAAC,WAAW,EAChB,SAAS,EACT,KAAK,CAAC,GAAG,CACV,CAAC;AACF,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACtB;SACF;KACF;AAES,IAAA,eAAe,CAAC,IAAuB,EAAA;QAC/C,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACvC;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;KACrC;IAES,WAAW,GAAA;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;SACxC;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;SACjE;QACD,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAES,SAAS,CACjB,KAA0B,EAC1B,OAAyD,EAAA;AAEzD,QAAA,IAAI,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QAErC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC;aACb;AACD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;YACrC,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE;AAC3D,gBAAA,aAAa,GAAG,aAAa,CAAC,MAAO,CAAC;gBACtC,IAAI,CAAC,aAAa,EAAE;AAClB,oBAAA,OAAO,KAAK,CAAC;iBACd;aACF;YACD,IAAI,cAAc,GAAoB,QAAQ,CAAC;AAC/C,YAAA,GAAG;AACD,gBAAA,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,CAAC;AACzC,gBAAA,IAAI,IAAI,IAAI,aAAa,EAAE;AACzB,oBAAA,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,YAAY,EAAE;AAC7C,wBAAA,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACjE,4BAAA,OAAO,KAAK,CAAC;yBACd;qBACF;iBACF;AACD,gBAAA,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;aACxC,QAAQ,cAAc,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC3B,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,OAAO;AACL,oBAAA,GAAG,IAAI;oBACP,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;iBAC3C,CAAC;aACH;iBAAM;AACL,gBAAA,OAAO,IAAI,CAAC;aACb;AACH,SAAC,CAAC,CAAC;KACJ;AAES,IAAA,sBAAsB,CAAC,SAAiB,EAAA;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC5B;AAES,IAAA,WAAW,CACnB,SAAiB,EACjB,YAA8B,EAC9B,GAAwB,EAAA;AAExB,QAAA,IACE,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;YACnC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAChD;YACA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,oBAAoB,GAAG,YAAY,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;SACpC;KACF;AAES,IAAA,SAAS,CAAC,IAAgC,EAAA;AAClD,QAAA,IAAI,SAAiB,CAAC;AAEtB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC5B,SAAS,GAAG,IAAI,CAAC;SAClB;aAAM;YACL,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5C;AAED,QAAA,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;SAChC;KACF;AAES,IAAA,aAAa,CAAC,SAAiB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtB;AAES,IAAA,aAAa,CAAC,SAAiB,EAAA;AACvC,QAAA,MAAM,IAAI,GACR,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACtE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtB;IAES,gBAAgB,GAAA;QACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,KAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAC3D,CAAC;KACH;AAES,IAAA,cAAc,CAAC,SAAiB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC3D,YAAA,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC7B;KACF;AAGS,IAAA,aAAa,CAAC,KAAmB,EAAA;QACzC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KACpC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAC/C,CAAC;AACF,YAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,gBAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;oBAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM;iBACP;aACF;SACF;KACF;;AAIS,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAC5C,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC7C,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAE/B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC,YAAA,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;SACF;KACF;AAGS,IAAA,eAAe,CAAC,KAAmB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;KACF;IAES,OAAO,GAAA;QACf,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAES,UAAU,GAAA;QAClB,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAC3C,iCAAiC,CAClC,CAAC;QACF,MAAM,SAAS,GAAG,aAAa,CAAC,gBAAgB,CAC9C,oCAAoC,CACrC,CAAC;QACF,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAC5C,kCAAkC,CACnC,CAAC;QACF,MAAM,QAAQ,GAAG,aAAa,CAAC,gBAAgB,CAC7C,mCAAmC,CACpC,CAAC;QACF,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,YAAA,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;SAC/B,CAAC;KACH;IAES,iBAAiB,GAAA;QACzB,IAAI,CAAC,WAAW,GAAG;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW;AACrC,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY;SACxC,CAAC;KACH;IAES,sBAAsB,GAAA;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;QAChC,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;SACxD;aAAM;AACL,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC;SACvC;KACF;IAES,kBAAkB,GAAA;AAC1B,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;aACxB,IAAI,CACH,YAAY,CAAC,CAAC,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAC5D,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;aACA,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;KACN;IAES,eAAe,GAAA;QACvB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnE,QAAA,MAAM,SAAS,GAAkB,kBAAkB,CAAC,GAAG,CACrD,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CACpB,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe;aACpC,MAAM,CAAC,SAAS,CAAC;AACjB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;KACtD;AAES,IAAA,cAAc,CACtB,kBAAmD,EAAA;QAEnD,MAAM,WAAW,GAAwC,EAAE,CAAC;AAC5D,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YAClC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AACtD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,WAAW,CAAC;KACpB;AAES,IAAA,UAAU,CAAC,QAAqB,EAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,cAAA,EAAiB,QAAQ,CAAC,YAAY,CAAA,uDAAA,CAAyD,EAC/F,IAAI,CAAC,WAAW,CACjB,CAAC;SACH;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC;AACtD,QAAA,IAAI,QAAQ,IAAI,UAAU,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,OAAQ,EAAE,CAAC;aACjB;YACD,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;aACxC;SACF;aAAM;YACL,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAClE;KACF;IAES,uBAAuB,CAC/B,IAAyB,EACzB,GAAwB,EAAA;AAExB,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,YAAY,KAAK,mBAAmB,CAAC,YAAY,EAAE;YAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3C,YAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;SACF;AAED,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;AAEnC,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACvE,YAAA,OAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;SACzC;aAAM;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;SAC1B;KACF;IAED,qBAAqB,CAAC,MAAe,EAAE,KAAmB,EAAA;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC;AACpB,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AACxB,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAExB,QACE,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY;AAClC,YAAA,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;AACnC,YAAA,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY;YACjC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EACpC;KACH;IAED,WAAW,GAAA;AACT,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAC9C,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACrD,IAAI,mBAAmB,EAAE;YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAQ,EAAE,CAAC,CAAC;SACzE;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,wBAAwB,GAAA;QACtB,MAAM,KAAK,GAA2D,EAAE,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AAChC,YAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,KAAK,CAAC;KACd;IAEO,2BAA2B,CACjC,OAAgC,EAChC,KAA6D,EAAA;AAE7D,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CACtB,CAAC,KAAK,MACH,WAAW,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CACnE,CAAC;YACF,MAAM,KAAK,GACT,WAAW,IAAI,OAAO,CAAC,aAAa,KAAK,mBAAmB,CAAC,KAAK,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,GAAG;AACjB,gBAAA,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;AACtC,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,KAAK,CAAC;SACd;AACD,QAAA,OAAO,KAAK,CAAC;KACd;uGA5hBmB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,kMAiBpB,gBAAgB,CAAA,EAAA,WAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAGhB,gBAAgB,CAGhB,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,eAAe,yQAarB,uBAAuB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FApCjB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADzC,SAAS;8BAKR,oBAAoB,EAAA,CAAA;sBADnB,KAAK;gBAIN,sBAAsB,EAAA,CAAA;sBADrB,KAAK;gBAQN,YAAY,EAAA,CAAA;sBADX,KAAK;gBAKN,eAAe,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAItC,WAAW,EAAA,CAAA;sBADV,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAItC,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAc3B,QAAQ,EAAA,CAAA;sBADjB,YAAY;uBAAC,uBAAuB,CAAA;gBAI3B,iBAAiB,EAAA,CAAA;sBAD1B,YAAY;uBAAC,eAAe,CAAA;gBAM7B,OAAO,EAAA,CAAA;sBADN,WAAW;uBAAC,OAAO,CAAA;gBAsRV,aAAa,EAAA,CAAA;sBADtB,YAAY;uBAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAmBpC,kBAAkB,EAAA,CAAA;sBAD3B,YAAY;uBAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAcjC,eAAe,EAAA,CAAA;sBADxB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ACrYtC,MAAO,mBAAoB,SAAQ,oBAAoB,CAAA;AAE3D,IAAA,kBAAkB,CAA2B;AAE7C,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC;KAC/C;AAED,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AACO,IAAA,MAAM,CAAiB;IAG/B,YAAY,GAAG,CAAC,CAAC;IAGjB,YAAY,GAAG,CAAC,CAAC;IAGT,QAAQ,GAAG,SAAS,CAAC;uGA1BlB,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAmBV,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,eAAe,CAGf,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,eAAe,CA7BxB,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,WAAW,EAAE,mBAAmB;AACjC,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,s4GAkHA,EAAA,MAAA,EAAA,CAAA,2yGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDvFa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;+BACE,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAqB,mBAAA;AACjC,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,s4GAAA,EAAA,MAAA,EAAA,CAAA,2yGAAA,CAAA,EAAA,CAAA;8BAID,kBAAkB,EAAA,CAAA;sBADjB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAQ1C,KAAK,EAAA,CAAA;sBADR,KAAK;gBAYN,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAIrC,YAAY,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAI7B,QAAQ,EAAA,CAAA;sBADf,WAAW;uBAAC,WAAW,CAAA;;;AEvBpB,MAAO,gBACX,SAAQ,oBAAoB,CAAA;AAGT,IAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAGlE,IAAA,OAAO,CAAoB;IAG3B,UAAU,GAAG,EAAE,CAAC;AAEhB,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,MAAM,OAAO,GAAgB;AAC3B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,KAAK;SACb,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AACO,IAAA,MAAM,CAAiB;AAEH,IAAA,iBAAiB,GAAG,IAAI,SAAS,EAE1D,CAAC;AAEJ,IAAA,IAAa,eAAe,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC;KACxC;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC5B;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;KACnC;IAEQ,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;SACvE;KACF;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG;AAClB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,eAAe,EAAE,MAAM;gBACvB,eAAe,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,IAAI,CAAC,UAAU;aAC9D,CAAC;SACH;KACF;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KACxB;IAEO,iBAAiB,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,KAAK,KAAI;AACrE,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;KAC7C;uGA/EU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAPhB,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,WAAW,EAAE,gBAAgB;AAC9B,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BH,sWAUA,EAAA,MAAA,EAAA,CAAA,40BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDmBa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAb5B,SAAS;+BACE,UAAU,EAAA,eAAA,EAGH,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAkB,gBAAA;AAC9B,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,sWAAA,EAAA,MAAA,EAAA,CAAA,40BAAA,CAAA,EAAA,CAAA;8BASD,OAAO,EAAA,CAAA;sBADN,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAIzB,UAAU,EAAA,CAAA;sBADT,KAAK;gBAIF,KAAK,EAAA,CAAA;sBADR,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;;;MEhBd,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBANtB,uBAAuB;YACvB,gBAAgB;AAChB,YAAA,mBAAmB,aATnB,YAAY;YACZ,YAAY;YACZ,0BAA0B;YAC1B,uBAAuB;YACvB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAOhB,gBAAgB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAEpC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAbtB,YAAY;YACZ,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAYH,aAAa,EAAA,UAAA,EAAA,CAAA;kBAfzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,YAAY;wBACZ,0BAA0B;wBAC1B,uBAAuB;wBACvB,wBAAwB;AACzB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,uBAAuB;wBACvB,gBAAgB;wBAChB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;AACjD,iBAAA,CAAA;;;ACxBD;;AAEG;;;;"}
1
+ {"version":3,"file":"ngrdt-menu.mjs","sources":["../tmp-esm2022/lib/models.js","../tmp-esm2022/lib/private-models.js","../tmp-esm2022/lib/utils.js","../tmp-esm2022/lib/menu-overlay/rdt-menu-overlay.component.js","../tmp-esm2022/lib/menu-base/rdt-menu-base.component.js","../tmp-esm2022/lib/menu-bar/rdt-menu-bar.component.js","../tmp-esm2022/lib/menu/rdt-menu.component.js","../tmp-esm2022/lib/rdt-menu.module.js","../tmp-esm2022/ngrdt-menu.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nexport var RdtMenuShortcutMode;\n(function (RdtMenuShortcutMode) {\n RdtMenuShortcutMode[\"FOCUS_ITEM\"] = \"focus-item\";\n RdtMenuShortcutMode[\"OPEN_SUBMENU\"] = \"open-submenu\";\n})(RdtMenuShortcutMode || (RdtMenuShortcutMode = {}));\nexport const RDT_MENU_MARGIN_TOP_PROPERTY_NAME = '--rdt-menu-margin-top';\nexport const RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME = '--rdt-menu-margin-bottom';\nexport const RDT_MENU_MARGIN_LEFT_PROPERTY_NAME = '--rdt-menu-margin-left';\nexport const RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME = '--rdt-menu-margin-right';\nexport const DEFAULT_MENU_HORIZONTAL_DIR = 'left';\nexport const DEFAULT_MENU_VERTICAL_DIR = 'down';\nexport const RDT_MENU_HORIZONTAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_HORIZONTAL_DIR');\nexport const RDT_MENU_VERTICAL_DIR_PROVIDER = new InjectionToken('RDT_MENU_VERTICAL_DIR');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRCL0MsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixnREFBeUIsQ0FBQTtJQUN6QixvREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QjtBQUVELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLDBCQUEwQixDQUFDO0FBQy9FLE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLHdCQUF3QixDQUFDO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLHlCQUF5QixDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLE1BQU0sQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQzNDLElBQUksY0FBYyxDQUF5Qix5QkFBeUIsQ0FBQyxDQUFDO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUN6QyxJQUFJLGNBQWMsQ0FBdUIsdUJBQXVCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJkdFJvdXRlIH0gZnJvbSAnQG5ncmR0L3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdE1lbnVJdGVtQmFzZSB9IGZyb20gJy4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbiAgV2luZG93T3BlblRhcmdldFR5cGUsXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmR0TWVudUl0ZW1XaXRoUm91dGUgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IFJkdFJvdXRlO1xyXG4gIGV4dGVybmFsTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aExpbmsgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2Uge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIHRhcmdldD86IFdpbmRvd09wZW5UYXJnZXRUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuIGV4dGVuZHMgUmR0TWVudUl0ZW1CYXNlIHtcclxuICBpdGVtczogUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgdGFyZ2V0PzogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJkdE1lbnVJdGVtID1cclxuICB8IFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBSZHRNZW51SXRlbVdpdGhSb3V0ZVxyXG4gIHwgUmR0TWVudUl0ZW1XaXRoTGluaztcclxuXHJcbmV4cG9ydCBlbnVtIFJkdE1lbnVTaG9ydGN1dE1vZGUge1xyXG4gIEZPQ1VTX0lURU0gPSAnZm9jdXMtaXRlbScsXHJcbiAgT1BFTl9TVUJNRU5VID0gJ29wZW4tc3VibWVudScsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9NQVJHSU5fVE9QX1BST1BFUlRZX05BTUUgPSAnLS1yZHQtbWVudS1tYXJnaW4tdG9wJztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9CT1RUT01fUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1ib3R0b20nO1xyXG5leHBvcnQgY29uc3QgUkRUX01FTlVfTUFSR0lOX0xFRlRfUFJPUEVSVFlfTkFNRSA9ICctLXJkdC1tZW51LW1hcmdpbi1sZWZ0JztcclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FID0gJy0tcmR0LW1lbnUtbWFyZ2luLXJpZ2h0JztcclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVIgPSAnbGVmdCc7XHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSID0gJ2Rvd24nO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9NRU5VX0hPUklaT05UQUxfRElSX1BST1ZJREVSID1cclxuICBuZXcgSW5qZWN0aW9uVG9rZW48UmR0SG9yaXpvbnRhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX0hPUklaT05UQUxfRElSJyk7XHJcbmV4cG9ydCBjb25zdCBSRFRfTUVOVV9WRVJUSUNBTF9ESVJfUFJPVklERVIgPVxyXG4gIG5ldyBJbmplY3Rpb25Ub2tlbjxSZHRWZXJ0aWNhbERpcmVjdGlvbj4oJ1JEVF9NRU5VX1ZFUlRJQ0FMX0RJUicpO1xyXG4iXX0=","import { RdtStringUtils } from '@ngrdt/utils';\nexport function parseMenuItems(items, injector, prefix = '') {\n return items\n .map((item) => {\n let newPrefix;\n if (item.dataTestId) {\n newPrefix = item.dataTestId;\n }\n else if (prefix) {\n newPrefix = RdtStringUtils.getDataTestId(item.label, prefix);\n }\n else {\n newPrefix = RdtStringUtils.getDataTestId(item.label);\n }\n const newDataTestId = RdtStringUtils.getDataTestId(newPrefix, null, 'menu-item');\n const res = {\n label: item.label,\n icon: item.icon,\n shortcut: item.shortcut,\n command: item.command,\n visible: item.visible,\n queryParams: item.queryParams,\n requiredParent: item.requiredParent,\n dataTestId: newDataTestId,\n };\n if (item.items) {\n const childrenRes = res;\n const parsedChildren = parseMenuItems(item.items, injector, newPrefix);\n if (parsedChildren.length > 0) {\n childrenRes.items = parsedChildren;\n }\n return childrenRes;\n }\n else if (item.routerLink) {\n const linkRes = res;\n linkRes.target = item.target ?? '_self';\n if (item.routerLink) {\n linkRes.routerLink = [item.routerLink.createAbsoluteUrl()];\n if (!res.visible && item.routerLink.hasCanBeEnteredGuard) {\n const canBeEntered = item.routerLink.canBeEntered.bind(item.routerLink);\n linkRes.visible = () => canBeEntered(injector);\n }\n }\n return linkRes;\n }\n else {\n const linkRes = res;\n if (item.externalLink) {\n if (item.queryParams) {\n linkRes.externalLink = RdtStringUtils.appendQueryParams(item.externalLink, item.queryParams);\n }\n else {\n linkRes.externalLink = item.externalLink;\n }\n }\n linkRes.target = item.target ?? '_blank';\n return linkRes;\n }\n })\n .filter((item) => !item.visible || item.visible())\n .filter((item) => item.externalLink ||\n item['routerLink'] ||\n item.command ||\n (item['items']?.length ?? 0) > 0);\n}\nexport var RdtMenuExpandSource;\n(function (RdtMenuExpandSource) {\n RdtMenuExpandSource[RdtMenuExpandSource[\"Click\"] = 0] = \"Click\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Hover\"] = 1] = \"Hover\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Shortcut\"] = 2] = \"Shortcut\";\n RdtMenuExpandSource[RdtMenuExpandSource[\"Focus\"] = 3] = \"Focus\";\n})(RdtMenuExpandSource || (RdtMenuExpandSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3ByaXZhdGUtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBbURwRSxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFvQixFQUNwQixRQUFrQixFQUNsQixNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sS0FBSztTQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFNBQVMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQ2hELFNBQVMsRUFDVCxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBMEI7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBb0MsQ0FBQztZQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEdBQWlDLENBQUM7WUFDbEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztvQkFDRixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLEdBQWdDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqRCxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksQ0FBQyxZQUFZO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU87UUFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsK0RBQUssQ0FBQTtJQUNMLCtEQUFLLENBQUE7SUFDTCxxRUFBUSxDQUFBO0lBQ1IsK0RBQUssQ0FBQTtBQUNQLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMsIFdpbmRvd09wZW5UYXJnZXRUeXBlIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtQmFzZTxUSWNvbiA9IHN0cmluZz4ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHNob3J0Y3V0PzogUmR0U2hvcnRjdXQ7XHJcbiAgY29tbWFuZD86ICgpID0+IHZvaWQ7XHJcbiAgdmlzaWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgcXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHJlcXVpcmVkUGFyZW50PzogUmR0Um91dGU7XHJcbiAgZGF0YVRlc3RJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBkYXRhVGVzdElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW48VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFJvdXRlPFRJY29uID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgUGFyc2VkUmR0TWVudUl0ZW1CYXNlPFRJY29uPiB7XHJcbiAgaXRlbXM/OiBuZXZlcjtcclxuICByb3V0ZXJMaW5rPzogc3RyaW5nW107XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHRhcmdldDogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluazxUSWNvbiA9IHN0cmluZz5cclxuICBleHRlbmRzIFBhcnNlZFJkdE1lbnVJdGVtQmFzZTxUSWNvbj4ge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIGV4dGVybmFsTGluaz86IHN0cmluZztcclxuICBpY29uPzogVEljb247XHJcbiAgdGFyZ2V0OiBXaW5kb3dPcGVuVGFyZ2V0VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyc2VkUmR0TWVudUl0ZW0gPVxyXG4gIHwgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGVcclxuICB8IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBQYXJzZWRSZHRNZW51SXRlbVdpdGhMaW5rO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVudUl0ZW1zKFxyXG4gIGl0ZW1zOiBSZHRNZW51SXRlbVtdLFxyXG4gIGluamVjdG9yOiBJbmplY3RvcixcclxuICBwcmVmaXggPSAnJ1xyXG4pOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICByZXR1cm4gaXRlbXNcclxuICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbGV0IG5ld1ByZWZpeDogc3RyaW5nO1xyXG4gICAgICBpZiAoaXRlbS5kYXRhVGVzdElkKSB7XHJcbiAgICAgICAgbmV3UHJlZml4ID0gaXRlbS5kYXRhVGVzdElkO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZWZpeCkge1xyXG4gICAgICAgIG5ld1ByZWZpeCA9IFJkdFN0cmluZ1V0aWxzLmdldERhdGFUZXN0SWQoaXRlbS5sYWJlbCwgcHJlZml4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdQcmVmaXggPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKGl0ZW0ubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGFUZXN0SWQgPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKFxyXG4gICAgICAgIG5ld1ByZWZpeCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdtZW51LWl0ZW0nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlczogUGFyc2VkUmR0TWVudUl0ZW1CYXNlID0ge1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcclxuICAgICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgICAgICBjb21tYW5kOiBpdGVtLmNvbW1hbmQsXHJcbiAgICAgICAgdmlzaWJsZTogaXRlbS52aXNpYmxlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50OiBpdGVtLnJlcXVpcmVkUGFyZW50LFxyXG4gICAgICAgIGRhdGFUZXN0SWQ6IG5ld0RhdGFUZXN0SWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5SZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgcGFyc2VkQ2hpbGRyZW4gPSBwYXJzZU1lbnVJdGVtcyhpdGVtLml0ZW1zLCBpbmplY3RvciwgbmV3UHJlZml4KTtcclxuICAgICAgICBpZiAocGFyc2VkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hpbGRyZW5SZXMuaXRlbXMgPSBwYXJzZWRDaGlsZHJlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuUmVzO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGU7XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX3NlbGYnO1xyXG4gICAgICAgIGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgICAgIGxpbmtSZXMucm91dGVyTGluayA9IFtpdGVtLnJvdXRlckxpbmsuY3JlYXRlQWJzb2x1dGVVcmwoKV07XHJcbiAgICAgICAgICBpZiAoIXJlcy52aXNpYmxlICYmIGl0ZW0ucm91dGVyTGluay5oYXNDYW5CZUVudGVyZWRHdWFyZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5CZUVudGVyZWQgPSBpdGVtLnJvdXRlckxpbmsuY2FuQmVFbnRlcmVkLmJpbmQoXHJcbiAgICAgICAgICAgICAgaXRlbS5yb3V0ZXJMaW5rXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxpbmtSZXMudmlzaWJsZSA9ICgpID0+IGNhbkJlRW50ZXJlZChpbmplY3Rvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rUmVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluaztcclxuICAgICAgICBpZiAoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGxpbmtSZXMuZXh0ZXJuYWxMaW5rID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgaXRlbS5xdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGlua1Jlcy5leHRlcm5hbExpbmsgPSBpdGVtLmV4dGVybmFsTGluaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX2JsYW5rJztcclxuICAgICAgICByZXR1cm4gbGlua1JlcztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnZpc2libGUgfHwgaXRlbS52aXNpYmxlKCkpXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmV4dGVybmFsTGluayB8fFxyXG4gICAgICAgIGl0ZW1bJ3JvdXRlckxpbmsnXSB8fFxyXG4gICAgICAgIGl0ZW0uY29tbWFuZCB8fFxyXG4gICAgICAgIChpdGVtWydpdGVtcyddPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZHRNZW51RXhwYW5kU291cmNlIHtcclxuICBDbGljayxcclxuICBIb3ZlcixcclxuICBTaG9ydGN1dCxcclxuICBGb2N1cyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZHRNZW51RXhwYW5kZWRDaGlsZCB7XHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW07XHJcbiAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG59XHJcbiJdfQ==","export const INVISIBLE_CLASS = 'invisible';\nexport const FOCUS_VISIBLE = 'focus-visible';\nfunction getChildRoutesMapRec(item, map) {\n let childRoutes;\n if (menuItemHasChildren(item)) {\n childRoutes = item.items.map((child) => getChildRoutesMapRec(child, map));\n }\n else {\n childRoutes = [];\n }\n let res;\n if (menuItemHasRoute(item) && item.routerLink) {\n res = [item.routerLink].concat(...childRoutes);\n }\n else {\n res = [].concat(...childRoutes);\n }\n map.set(item, res);\n return res;\n}\nexport function getChildRoutesMap(items) {\n const map = new Map();\n items.forEach((item) => getChildRoutesMapRec(item, map));\n return map;\n}\nexport function findNextItemWithPrefix(items, itemIndex, prefix) {\n const len = items.length;\n prefix = prefix.toLocaleLowerCase();\n for (let i = (itemIndex + 1) % len; i !== itemIndex; i = (i + 1) % len) {\n const label = items[i].label.toLocaleLowerCase();\n if (label.startsWith(prefix)) {\n return i;\n }\n }\n return null;\n}\nexport function menuItemHasChildren(item) {\n return 'items' in item;\n}\nexport function menuItemHasRoute(item) {\n return 'routerLink' in item;\n}\nfunction getMenuItemsShortcutsRec(item, currentPath, res) {\n const path = [...currentPath, item];\n if (item.shortcut) {\n res.push({\n path: path,\n shortcut: item.shortcut,\n });\n }\n if (menuItemHasChildren(item)) {\n item.items.forEach((child) => getMenuItemsShortcutsRec(child, path, res));\n }\n}\nexport function getMenuItemsShortcuts(items) {\n const res = [];\n const initialPath = [];\n items.forEach((item) => getMenuItemsShortcutsRec(item, initialPath, res));\n return res;\n}\nexport function areHorDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.left === b.left;\n}\nexport function areVertDirsEqual(a, b) {\n if (!a) {\n return !b;\n }\n if (!b) {\n return !a;\n }\n return a.dir === b.dir && a.top === b.top;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQWdDN0MsU0FBUyxvQkFBb0IsQ0FDM0IsSUFBdUIsRUFDdkIsR0FBdUM7SUFFdkMsSUFBSSxXQUF5QixDQUFDO0lBRTlCLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7U0FBTSxDQUFDO1FBQ04sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxHQUFlLENBQUM7SUFFcEIsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxHQUFJLEVBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUEwQjtJQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUVyRCxLQUFL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QUFDLEVBQUUsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTaG9ydGN1dCB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIE51bGxhYmxlLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhSb3V0ZSxcclxufSBmcm9tICcuL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjb25zdCBJTlZJU0lCTEVfQ0xBU1MgPSAnaW52aXNpYmxlJztcclxuZXhwb3J0IGNvbnN0IEZPQ1VTX1ZJU0lCTEUgPSAnZm9jdXMtdmlzaWJsZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpemUge1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmVydE9mZnNldCB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgYm90dG9tOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSG9yT2Zmc2V0IHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgZGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbjtcclxuICB0b3A6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICBkaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb247XHJcbiAgbGVmdDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0IHtcclxuICBwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdO1xyXG4gIHNob3J0Y3V0OiBSZHRTaG9ydGN1dDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXBSZWMoXHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgbWFwOiBNYXA8UGFyc2VkUmR0TWVudUl0ZW0sIHN0cmluZ1tdW10+XHJcbik6IHN0cmluZ1tdW10ge1xyXG4gIGxldCBjaGlsZFJvdXRlczogc3RyaW5nW11bXVtdO1xyXG5cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBpdGVtLml0ZW1zLm1hcCgoY2hpbGQpID0+IGdldENoaWxkUm91dGVzTWFwUmVjKGNoaWxkLCBtYXApKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY2hpbGRSb3V0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGxldCByZXM6IHN0cmluZ1tdW107XHJcblxyXG4gIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgcmVzID0gW2l0ZW0ucm91dGVyTGlua10uY29uY2F0KC4uLmNoaWxkUm91dGVzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmVzID0gKFtdIGFzIHN0cmluZ1tdW10pLmNvbmNhdCguLi5jaGlsZFJvdXRlcyk7XHJcbiAgfVxyXG4gIG1hcC5zZXQoaXRlbSwgcmVzKTtcclxuICByZXR1cm4gcmVzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNNYXAoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCBtYXAgPSBuZXcgTWFwPFBhcnNlZFJkdE1lbnVJdGVtLCBzdHJpbmdbXVtdPigpO1xyXG5cclxuICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBnZXRDaGlsZFJvdXRlc01hcFJlYyhpdGVtLCBtYXApKTtcclxuICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmluZE5leHRJdGVtV2l0aFByZWZpeChcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXSxcclxuICBpdGVtSW5kZXg6IG51bWJlcixcclxuICBwcmVmaXg6IHN0cmluZ1xyXG4pIHtcclxuICBjb25zdCBsZW4gPSBpdGVtcy5sZW5ndGg7XHJcbiAgcHJlZml4ID0gcHJlZml4LnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgZm9yIChsZXQgaSA9IChpdGVtSW5kZXggKyAxKSAlIGxlbjsgaSAhPT0gaXRlbUluZGV4OyBpID0gKGkgKyAxKSAlIGxlbikge1xyXG4gICAgY29uc3QgbGFiZWwgPSBpdGVtc1tpXS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICByZXR1cm4gaTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc0NoaWxkcmVuKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4ge1xyXG4gIHJldHVybiAnaXRlbXMnIGluIGl0ZW07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZW51SXRlbUhhc1JvdXRlKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtXHJcbik6IGl0ZW0gaXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGUge1xyXG4gIHJldHVybiAncm91dGVyTGluaycgaW4gaXRlbTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKFxyXG4gIGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtLFxyXG4gIGN1cnJlbnRQYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gIHJlczogUGFyc2VkUmR0TWVudUl0ZW1XaXRoU2hvcnRjdXRbXVxyXG4pIHtcclxuICBjb25zdCBwYXRoID0gWy4uLmN1cnJlbnRQYXRoLCBpdGVtXTtcclxuICBpZiAoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgcmVzLnB1c2goe1xyXG4gICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgIH0pO1xyXG4gIH1cclxuICBpZiAobWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKSkge1xyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjaGlsZCkgPT4gZ2V0TWVudUl0ZW1zU2hvcnRjdXRzUmVjKGNoaWxkLCBwYXRoLCByZXMpKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbXNTaG9ydGN1dHMoaXRlbXM6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICBjb25zdCByZXM6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0W10gPSBbXTtcclxuICBjb25zdCBpbml0aWFsUGF0aDogUGFyc2VkUmR0TWVudUl0ZW1bXSA9IFtdO1xyXG4gIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGdldE1lbnVJdGVtc1Nob3J0Y3V0c1JlYyhpdGVtLCBpbml0aWFsUGF0aCwgcmVzKSk7XHJcbiAgcmV0dXJuIHJlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFyZUhvckRpcnNFcXVhbChcclxuICBhOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxIb3JEaXJXaXRoT2Zmc2V0PlxyXG4pIHtcclxuICBpZiAoIWEpIHtcclxuICAgIHJldHVybiAhYjtcclxuICB9XHJcbiAgaWYgKCFiKSB7XHJcbiAgICByZXR1cm4gIWE7XHJcbiAgfVxyXG4gIHJldHVybiBhLmRpciA9PT0gYi5kaXIgJiYgYS5sZWZ0ID09PSBiLmxlZnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcmVWZXJ0RGlyc0VxdWFsKFxyXG4gIGE6IE51bGxhYmxlPFZlcnREaXJXaXRoT2Zmc2V0PixcclxuICBiOiBOdWxsYWJsZTxWZXJ0RGlyV2l0aE9mZnNldD5cclxuKSB7XHJcbiAgaWYgKCFhKSB7XHJcbiAgICByZXR1cm4gIWI7XHJcbiAgfVxyXG4gIGlmICghYikge1xyXG4gICAgcmV0dXJuICFhO1xyXG4gIH1cclxuICByZXR1cm4gYS5kaXIgPT09IGIuZGlyICYmIGEudG9wID09PSBiLnRvcDtcclxufVxyXG4iXX0=","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, HostListener, QueryList, Renderer2, ViewChild, ViewChildren, afterNextRender, afterRenderEffect, computed, effect, inject, input, linkedSignal, signal, untracked, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtShortcut, RdtShortcutService, } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtObjectUtils, RdtStringUtils, } from '@ngrdt/utils';\nimport { delay, first, map, of } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { FOCUS_VISIBLE, areHorDirsEqual, areVertDirsEqual, findNextItemWithPrefix, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\n// TODO: Split positioning and shortcut/focus management in separate classes\nexport class RdtMenuOverlayComponent {\n elRef = inject((ElementRef));\n destroyRef = inject(DestroyRef);\n renderer = inject(Renderer2);\n topLevelMenu = inject(RdtMenuBaseComponent);\n parentMenu = inject(RdtMenuOverlayComponent, {\n optional: true,\n skipSelf: true,\n });\n cd = inject(ChangeDetectorRef);\n router = inject(Router);\n document = inject(DOCUMENT);\n shortcutService = inject(RdtShortcutService);\n children;\n focusableElements;\n menuItemContainer;\n item = input.required(...(ngDevMode ? [{ debugName: \"item\" }] : []));\n level = input.required(...(ngDevMode ? [{ debugName: \"level\" }] : []));\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR, ...(ngDevMode ? [{ debugName: \"preferredHorizontalDir\" }] : []));\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR, ...(ngDevMode ? [{ debugName: \"preferredVerticalDir\" }] : []));\n expandedInput = input(false, ...(ngDevMode ? [{ debugName: \"expandedInput\", alias: 'expanded' }] : [{ alias: 'expanded' }]));\n expanded = linkedSignal(() => this.expandedInput());\n autofocusItemInput = input(null, ...(ngDevMode ? [{ debugName: \"autofocusItemInput\", alias: 'autofocusItem' }] : [{\n alias: 'autofocusItem',\n }]));\n autofocusItem = linkedSignal(() => this.autofocusItemInput());\n // Element used to relatively position menu,\n // typically parent element.\n // If not specified, parent element is used.\n anchorElementInput = input(null, ...(ngDevMode ? [{ debugName: \"anchorElementInput\", alias: 'anchorElement' }] : [{\n alias: 'anchorElement',\n }]));\n anchorElement = computed(() => this.anchorElementInput() ?? this.elRef.nativeElement.parentElement, ...(ngDevMode ? [{ debugName: \"anchorElement\" }] : []));\n zIndex = computed(() => this.level() + 10, ...(ngDevMode ? [{ debugName: \"zIndex\" }] : []));\n isRootLevel = computed(() => this.level() === 0, ...(ngDevMode ? [{ debugName: \"isRootLevel\" }] : []));\n // Bounding box of this excluding any extra offset.\n _box;\n get box() {\n return this._box;\n }\n // Bounding box of parent element.\n _anchorBox;\n _containerPadding = { top: 0, bottom: 0 };\n // Currently applied vertical and horizontal directions.\n verticalDir = signal(null, ...(ngDevMode ? [{ debugName: \"verticalDir\", equal: areVertDirsEqual }] : [{\n equal: areVertDirsEqual,\n }]));\n horizontalDir = signal(null, ...(ngDevMode ? [{ debugName: \"horizontalDir\", equal: areHorDirsEqual }] : [{\n equal: areHorDirsEqual,\n }]));\n expandedChild = signal(null, ...(ngDevMode ? [{ debugName: \"expandedChild\" }] : []));\n autofocusSubmenuItem = signal(null, ...(ngDevMode ? [{ debugName: \"autofocusSubmenuItem\" }] : []));\n keyActions = {\n [KB_CODE.ARROW.UP]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.LEFT]: () => this.closeSelf(),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.item).items.length - 1),\n [KB_CODE.ESCAPE]: () => this.closeSelf(),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n get selfExpandSrc() {\n if (this.expanded()) {\n if (this.parentMenu) {\n return this.parentMenu.expandedChild()?.src;\n }\n else {\n return this.topLevelMenu.expandedChild()?.src;\n }\n }\n return undefined;\n }\n recalcEffect = effect(() => {\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n }, ...(ngDevMode ? [{ debugName: \"recalcEffect\" }] : []));\n expandedEffect = effect(() => {\n if (!this.expanded()) {\n this.expandedChild.set(null);\n }\n }, ...(ngDevMode ? [{ debugName: \"expandedEffect\" }] : []));\n expandedFocusEffect = afterRenderEffect(() => {\n const rootItem = untracked(this.item);\n this.expandedInput();\n const expanded = untracked(this.expanded);\n const autofocusItem = untracked(this.autofocusItem);\n if (expanded) {\n switch (autofocusItem) {\n case null:\n this.focusItem(0, false);\n break;\n case 'first':\n this.focusItem(0, true);\n break;\n case 'last':\n this.focusItem(rootItem.items.length - 1, true);\n }\n }\n });\n constructor() {\n afterNextRender(() => {\n this.measureContainerPadding();\n this.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n this.listenTabKeyPress();\n });\n }\n getMinOffsetLeft() {\n return this.topLevelMenu.bodyMargin.left;\n }\n getMaxOffsetLeft() {\n return (this.topLevelMenu.clientSize.width -\n this._box.width -\n this.topLevelMenu.bodyMargin.right);\n }\n getMinOffsetTop() {\n return this.topLevelMenu.bodyMargin.top;\n }\n getMaxOffsetTop() {\n return (this.topLevelMenu.clientSize.height -\n this._box.height -\n this.topLevelMenu.bodyMargin.bottom);\n }\n recalculatePosition(preferredHorizontalDir, preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n this.measureBoundingRect();\n if (!this._box || !this._anchorBox || !this.topLevelMenu.clientSize) {\n return;\n }\n const newHorDir = this.getRealHorizontalDir(preferredHorizontalDir);\n const newVertDir = this.getRealVerticalDir(preferredVerticalDir);\n // Horizontal direction\n if (newHorDir.dir === 'right') {\n newHorDir.left += this._anchorBox.left;\n if (!isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n else if (newHorDir.dir === 'left') {\n newHorDir.left += this._anchorBox.left - this._box.width;\n if (isRoot) {\n newHorDir.left += this._anchorBox.width;\n }\n }\n // Restrictions from left menu and right menu\n newHorDir.left = Math.min(Math.max(this.getMinOffsetLeft(), newHorDir.left), this.getMaxOffsetLeft());\n // Vertical direction\n if (newVertDir.dir === 'down') {\n newVertDir.top = this._anchorBox.top;\n if (isRoot) {\n newVertDir.top += this._anchorBox.height;\n }\n else {\n newVertDir.top -= this._containerPadding.top;\n }\n }\n else if (newVertDir.dir === 'up') {\n newVertDir.top = this._anchorBox.top - this._box.height;\n if (!isRoot) {\n newVertDir.top += this._anchorBox.height + this._containerPadding.top;\n }\n }\n // Restrictions from header and footer\n newVertDir.top = Math.min(Math.max(this.getMinOffsetTop(), newVertDir.top), this.getMaxOffsetTop());\n if (!areHorDirsEqual(horizontalDir, newHorDir) ||\n !areVertDirsEqual(verticalDir, newVertDir)) {\n this.horizontalDir.set(newHorDir);\n this.verticalDir.set(newVertDir);\n this.setClasses();\n this.measureBoundingRect();\n }\n this.recalculateChildren();\n }\n recalculateChildren() {\n const horizontalDir = untracked(this.horizontalDir);\n const verticalDir = untracked(this.verticalDir);\n if (this.children && horizontalDir && verticalDir) {\n this.children.forEach((child) => child.recalculatePosition(horizontalDir.dir, verticalDir.dir));\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.topLevelMenu.openOnHover);\n if (openOnHover && expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem.set(null);\n if (menuItemHasChildren(item)) {\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n this.expanded.set(true);\n }\n else {\n //console.log('expanded child', this.expandedChild);\n this.expandedChild.set(null);\n }\n }\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const hasChildren = menuItemHasChildren(item);\n const openOnHover = this.topLevelMenu.openOnHover();\n if ((hasChildren && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem.set(null);\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n // Could also listen to router events, but might be triggered by\n // child router navigation.\n if (!hasChildren) {\n this.topLevelMenu.closeSubmenus();\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem.set('first');\n }\n getChildRoutes(item) {\n return this.topLevelMenu.getChildRoutes(item);\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = this.expandedChild();\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n focusItemRecursively(path) {\n const children = [...path];\n const thisItem = children.shift();\n this.autofocusSubmenuItem.set(null);\n this.autofocusItem.set(null);\n if (children.length > 0) {\n this.expandAndGetChild(thisItem, RdtMenuExpandSource.Focus)\n .pipe(delay(1))\n .subscribe((overlay) => {\n overlay.focusItemRecursively(children);\n });\n }\n else {\n // First focus the correct item because submenu might have focus on it.\n // Removing focused element from DOM results in window:focusout event\n // and that closes all menus\n this.focusItem(thisItem);\n // Now close submenus and therefore remove them from DOM\n this.closeSubmenus();\n // Wait until they are removed and focus the correct item again\n setTimeout(() => this.focusItem(thisItem), 1);\n }\n }\n expandAndGetChild(item, src) {\n const rootItem = untracked(this.item);\n if (rootItem.items.indexOf(item) < 0) {\n throw new Error('Attempting to expand item that is not child item of this.item');\n }\n this.expandedChild.set({ item, src });\n this.cd.markForCheck();\n const child = this.children.find((child) => untracked(child.item) === item);\n if (child) {\n return of(child);\n }\n else {\n return this.children.changes.pipe(map(() => this.children.find((child) => untracked(child.item) === item)), first(RdtObjectUtils.notNullGuard));\n }\n }\n onKeyDown(itemIndex, event) {\n const rootItem = untracked(this.item);\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const next = findNextItemWithPrefix(rootItem.items, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n onTabKeyPress(event) {\n // Do not prevent default to correctly switch to previous element\n event.originalEvent.stopPropagation();\n // Wait for document.activeElement to switch to new element\n setTimeout(() => {\n if (!this.elRef.nativeElement.contains(this.document.activeElement)) {\n this.closeSelf(false);\n }\n }, 1);\n }\n invokeItemClickByIndex(itemIndex) {\n const rootItem = untracked(this.item);\n const item = rootItem.items[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n focusItem(item, visibleFocus = true) {\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = this.item().items.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex, visibleFocus);\n }\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex, visibleFocus) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n if (visibleFocus) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n }\n elRef.nativeElement.focus();\n }\n }\n focusNextItem(itemIndex) {\n const rootItem = untracked(this.item);\n const next = (itemIndex + 1) % rootItem.items.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const rootItem = untracked(this.item);\n const prev = (itemIndex - 1 + rootItem.items.length) % rootItem.items.length;\n this.focusItem(prev);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const rootItem = untracked(this.item);\n if (itemIndex < rootItem.items.length &&\n menuItemHasChildren(rootItem.items[itemIndex])) {\n this.expandedChild.set({ item: rootItem.items[itemIndex], src });\n this.autofocusSubmenuItem.set(visibleFocus);\n }\n }\n closeSelf(focusExpanded = true) {\n if (this.parentMenu) {\n this.parentMenu.closeSubmenus(focusExpanded);\n }\n else {\n this.topLevelMenu.closeSubmenus(focusExpanded);\n }\n }\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.topLevelMenu.closeOnFocusOut);\n if (closeOnFocusOut && !this.topLevelMenu.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n // Calculates direction of this menu and offset in case\n // menu won't fit in left nor right of parent menu.\n getRealHorizontalDir(preferredHorizontalDir) {\n const isRoot = untracked(this.isRootLevel);\n let left;\n let right;\n // This menu is directly under menubar\n if (isRoot) {\n left = this._anchorBox.right - this._box.width;\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.left + this._box.width);\n }\n else {\n // Menu is nested\n right =\n this.topLevelMenu.clientSize.width -\n (this._anchorBox.right + this._box.width);\n left = this._anchorBox.left - this._box.width;\n }\n left -= this.topLevelMenu.bodyMargin.left;\n right -= this.topLevelMenu.bodyMargin.right;\n if (preferredHorizontalDir === 'right') {\n // We use preferred if possible.\n if (right >= 0) {\n return { dir: 'right', left: 0 };\n // Then the other one.\n }\n else if (left >= 0) {\n return { dir: 'left', left: 0 };\n // Edge case if neither direction can be used (ultra narrow screen).\n // Choose direction that covers least of parent menu.\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n else {\n if (left >= 0) {\n return { dir: 'left', left: 0 };\n }\n else if (right >= 0) {\n return { dir: 'right', left: 0 };\n }\n else {\n return this.getNarrowScreenHorizontalDir(left, right);\n }\n }\n }\n // Finds out where to put menu in case screen is too narrow for two menus\n // to fit next to each other. Minimizes area of parent menu covered by this.\n getNarrowScreenHorizontalDir(left, right) {\n const screenStart = this.topLevelMenu.bodyMargin.left;\n const screenEnd = this.topLevelMenu.clientSize.width - this.topLevelMenu.bodyMargin.right;\n const screenCenter = (screenStart - screenEnd) / 2;\n const leftStart = Math.max(this._anchorBox.left, screenStart);\n const leftEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenCenter);\n const rightStart = Math.max(screenCenter, leftEnd);\n const rightEnd = Math.min(this._anchorBox.left + this._anchorBox.width, screenEnd);\n if (leftEnd - leftStart > rightEnd - rightStart) {\n return { dir: 'right', left: right };\n }\n else {\n return { dir: 'left', left: -left };\n }\n }\n getRealVerticalDir(preferredVerticalDir) {\n const isRoot = untracked(this.isRootLevel);\n let bottom;\n let top;\n if (isRoot) {\n bottom =\n this.topLevelMenu.clientSize.height +\n this._anchorBox.bottom -\n this._box.height;\n top = this._anchorBox.top - this._box.height;\n }\n else {\n bottom =\n this.topLevelMenu.clientSize.height -\n this._anchorBox.top -\n this._box.height;\n top = this._anchorBox.bottom - this._box.height;\n }\n top -= this.topLevelMenu.bodyMargin.top;\n bottom -= this.topLevelMenu.bodyMargin.bottom;\n if (preferredVerticalDir === 'down') {\n if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n else {\n if (top >= 0) {\n return { dir: 'up', top: 0 };\n }\n else if (bottom >= 0) {\n return { dir: 'down', top: 0 };\n }\n else {\n return { dir: preferredVerticalDir, top: 0 };\n }\n }\n }\n // Measures bounding rect of this and offset container\n // Should always be called after parent menu has already been measured.\n measureBoundingRect() {\n this._box = this.elRef.nativeElement.getBoundingClientRect();\n const anchor = this.anchorElement();\n this._anchorBox = anchor.getBoundingClientRect();\n }\n measureContainerPadding() {\n const computedStyles = getComputedStyle(this.menuItemContainer.nativeElement);\n const paddingTop = parseFloat(computedStyles.paddingTop);\n const paddingBottom = parseFloat(computedStyles.paddingBottom);\n this._containerPadding = { top: paddingTop, bottom: paddingBottom };\n }\n setClasses() {\n const isRoot = this.isRootLevel();\n const vertical = this.verticalDir();\n const horizontal = this.horizontalDir();\n if (vertical) {\n if (vertical.dir === 'up') {\n this.setClass('rdt-overlay-up');\n this.removeClass('rdt-overlay-down');\n }\n else {\n this.removeClass('rdt-overlay-up');\n this.setClass('rdt-overlay-down');\n }\n this.setOffset('top', vertical.top);\n }\n if (horizontal) {\n if (horizontal.dir === 'left') {\n this.setClass('rdt-overlay-left');\n this.removeClass('rdt-overlay-right');\n }\n else {\n this.removeClass('rdt-overlay-left');\n this.setClass('rdt-overlay-right');\n }\n this.setOffset('left', horizontal.left);\n }\n if (isRoot) {\n this.setClass('rdt-menu-root');\n this.removeClass('rdt-menu-sub');\n }\n else {\n this.removeClass('rdt-menu-root');\n this.setClass('rdt-menu-sub');\n }\n }\n setClass(className) {\n this.renderer.addClass(this.elRef.nativeElement, className);\n }\n removeClass(className) {\n this.renderer.removeClass(this.elRef.nativeElement, className);\n }\n setOffset(direction, value) {\n this.renderer.setStyle(this.elRef.nativeElement, direction, `${value}px`);\n }\n listenTabKeyPress() {\n const shiftTab = RdtShortcut.createUnsafe('shift', 'tab');\n const tab = RdtShortcut.createUnsafe('tab');\n this.shortcutService\n .listen([tab, shiftTab], {\n element: this.elRef.nativeElement,\n preventDefault: false,\n })\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => this.onTabKeyPress(event));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: RdtMenuOverlayComponent, isStandalone: false, selector: \"rdt-menu-overlay\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: true, transformFunction: null }, level: { classPropertyName: \"level\", publicName: \"level\", isSignal: true, isRequired: true, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, expandedInput: { classPropertyName: \"expandedInput\", publicName: \"expanded\", isSignal: true, isRequired: false, transformFunction: null }, autofocusItemInput: { classPropertyName: \"autofocusItemInput\", publicName: \"autofocusItem\", isSignal: true, isRequired: false, transformFunction: null }, anchorElementInput: { classPropertyName: \"anchorElementInput\", publicName: \"anchorElement\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"tabindex\": \"-1\", \"role\": \"menu\" }, listeners: { \"window:focusout\": \"checkActiveElement($event)\" }, properties: { \"class.expanded\": \"expanded()\", \"style.z-index\": \"zIndex()\" } }, viewQueries: [{ propertyName: \"menuItemContainer\", first: true, predicate: [\"menuItemContainer\"], descendants: true }, { propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {\n '[class.expanded]': 'expanded()',\n '[style.z-index]': 'zIndex()',\n tabindex: '-1',\n role: 'menu',\n }, template: \"<ul class=\\\"menu-item-container\\\" role=\\\"presentation\\\" #menuItemContainer>\\r\\n @for(item of item().items; track item; let i = $index) {\\r\\n <li\\r\\n role=\\\"presentation\\\"\\r\\n class=\\\"menu-item\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n rdtAnyRouteActive=\\\"menu-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if (item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"chevron_right\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n -->\\r\\n @if (item.items) {\\r\\n <span class=\\\"menu-item-icon rdt-menu-icon-right\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO:\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-item-icon\\\"\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if (item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [queryParams]=\\\"item.queryParams\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n }\\r\\n\\r\\n <!-- Child menus exist only if this menu is expanded. -->\\r\\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\\r\\n @if (item.items && expanded()) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem()\\\"\\r\\n [preferredHorizontalDir]=\\\"horizontalDir()?.dir!\\\"\\r\\n [preferredVerticalDir]=\\\"verticalDir()?.dir!\\\"\\r\\n [level]=\\\"level() + 1\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}ul.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-background);margin-top:0;margin-bottom:0;margin-block-start:0;margin-block-end:0}.menu-item-content{cursor:pointer;display:flex;align-items:center;width:100%;padding:var(--rdt-menu-item-padding);background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color);font-size:var(--rdt-menu-item-font-size);font-weight:var(--rdt-menu-item-font-weight);border:var(--rdt-menu-item-border);outline:var(--rdt-menu-item-outline)}.menu-item{display:flex;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-route-active-background);--rdt-menu-item-text-color: var(--rdt-menu-item-route-active-text-color);--rdt-menu-item-border: var(--rdt-menu-item-route-active-border);--rdt-menu-item-outline: var(--rdt-menu-item-route-active-outline)}.menu-item .menu-item-content:hover{--rdt-menu-item-background: var(--rdt-menu-item-hover-background);--rdt-menu-item-text-color: var(--rdt-menu-item-hover-text-color);--rdt-menu-item-border: var(--rdt-menu-item-hover-border);--rdt-menu-item-outline: var(--rdt-menu-item-hover-outline)}.menu-item [aria-expanded=true].menu-item-content{--rdt-menu-item-background: var(--rdt-menu-item-expanded-background);--rdt-menu-item-text-color: var(--rdt-menu-item-expanded-text-color);--rdt-menu-item-border: var(--rdt-menu-item-expanded-border);--rdt-menu-item-outline: var(--rdt-menu-item-expanded-outline)}.menu-item .menu-item-content.focus-visible:focus,.menu-item .menu-item-content:focus-visible{--rdt-menu-item-background: var(--rdt-menu-item-focus-background);--rdt-menu-item-text-color: var(--rdt-menu-item-focus-text-color);--rdt-menu-item-border: var(--rdt-menu-item-focus-border);--rdt-menu-item-outline: var(--rdt-menu-item-focus-outline)}.menu-item-icon.rdt-menu-icon-right{width:0;height:0;border-top:var(--rdt-menu-default-icon-size) solid transparent;border-bottom:var(--rdt-menu-default-icon-size) solid transparent;border-left:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-item-text-color)}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }], menuItemContainer: [{\n type: ViewChild,\n args: ['menuItemContainer']\n }], checkActiveElement: [{\n type: HostListener,\n args: ['window:focusout', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFHUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIs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O3dCQUNoQyxpQkFBaUIsRUFBRSxVQUFVO3dCQUM3QixRQUFRLEVBQUUsSUFBSTt3QkFDZCxJQUFJLEVBQUUsTUFBTTtxQkFDYjt3REFrQlEsUUFBUTtzQkFEaEIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSTdCLGlCQUFpQjtzQkFEeEIsWUFBWTt1QkFBQyxlQUFlO2dCQUlyQixpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CO2dCQTZidEIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEZXN0cm95UmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBhZnRlck5leHRSZW5kZXIsXHJcbiAgYWZ0ZXJSZW5kZXJFZmZlY3QsXHJcbiAgY29tcHV0ZWQsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBsaW5rZWRTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gIFJkdFNob3J0Y3V0LFxyXG4gIFJkdFNob3J0Y3V0RXZlbnQsXHJcbiAgUmR0U2hvcnRjdXRTZXJ2aWNlLFxyXG59IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQge1xyXG4gIEtCX0NPREUsXHJcbiAgTnVsbGFibGUsXHJcbiAgUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICBSZHRPYmplY3RVdGlscyxcclxuICBSZHRTdHJpbmdVdGlscyxcclxuICBSZHRWZXJ0aWNhbERpcmVjdGlvbixcclxufSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZmlyc3QsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0TWVudUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9tZW51LWJhc2UvcmR0LW1lbnUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUixcclxuICBERUZBVUxUX01FTlVfVkVSVElDQUxfRElSLFxyXG59IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgUGFyc2VkUmR0TWVudUl0ZW0sXHJcbiAgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4sXHJcbiAgUmR0TWVudUV4cGFuZFNvdXJjZSxcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRk9DVVNfVklTSUJMRSxcclxuICBIb3JEaXJXaXRoT2Zmc2V0LFxyXG4gIFZlcnREaXJXaXRoT2Zmc2V0LFxyXG4gIGFyZUhvckRpcnNFcXVhbCxcclxuICBhcmVWZXJ0RGlyc0VxdWFsLFxyXG4gIGZpbmROZXh0SXRlbVdpdGhQcmVmaXgsXHJcbiAgbWVudUl0ZW1IYXNDaGlsZHJlbixcclxuICBtZW51SXRlbUhhc1JvdXRlLFxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8vIFRPRE86IFNwbGl0IHBvc2l0aW9uaW5nIGFuZCBzaG9ydGN1dC9mb2N1cyBtYW5hZ2VtZW50IGluIHNlcGFyYXRlIGNsYXNzZXNcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudS1vdmVybGF5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbY2xhc3MuZXhwYW5kZWRdJzogJ2V4cGFuZGVkKCknLFxyXG4gICAgJ1tzdHlsZS56LWluZGV4XSc6ICd6SW5kZXgoKScsXHJcbiAgICB0YWJpbmRleDogJy0xJyxcclxuICAgIHJvbGU6ICdtZW51JyxcclxuICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0TWVudU92ZXJsYXlDb21wb25lbnQge1xyXG4gIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9wTGV2ZWxNZW51ID0gaW5qZWN0KFJkdE1lbnVCYXNlQ29tcG9uZW50KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE1lbnUgPSBpbmplY3QoUmR0TWVudU92ZXJsYXlDb21wb25lbnQsIHtcclxuICAgIG9wdGlvbmFsOiB0cnVlLFxyXG4gICAgc2tpcFNlbGY6IHRydWUsXHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNob3J0Y3V0U2VydmljZSA9IGluamVjdChSZHRTaG9ydGN1dFNlcnZpY2UpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFJkdE1lbnVPdmVybGF5Q29tcG9uZW50KVxyXG4gIHJlYWRvbmx5IGNoaWxkcmVuITogUXVlcnlMaXN0PFJkdE1lbnVPdmVybGF5Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9jdXNhYmxlSXRlbScpXHJcbiAgcHJpdmF0ZSBmb2N1c2FibGVFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUl0ZW1Db250YWluZXInKVxyXG4gIHByaXZhdGUgbWVudUl0ZW1Db250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xyXG5cclxuICByZWFkb25seSBpdGVtID0gaW5wdXQucmVxdWlyZWQ8UGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW4+KCk7XHJcbiAgcmVhZG9ubHkgbGV2ZWwgPSBpbnB1dC5yZXF1aXJlZDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgcHJlZmVycmVkSG9yaXpvbnRhbERpciA9IGlucHV0PFJkdEhvcml6b250YWxEaXJlY3Rpb24+KFxyXG4gICAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSXHJcbiAgKTtcclxuICByZWFkb25seSBwcmVmZXJyZWRWZXJ0aWNhbERpciA9IGlucHV0PFJkdFZlcnRpY2FsRGlyZWN0aW9uPihcclxuICAgIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVJcclxuICApO1xyXG5cclxuICByZWFkb25seSBleHBhbmRlZElucHV0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UsIHsgYWxpYXM6ICdleHBhbmRlZCcgfSk7XHJcbiAgcmVhZG9ubHkgZXhwYW5kZWQgPSBsaW5rZWRTaWduYWwoKCkgPT4gdGhpcy5leHBhbmRlZElucHV0KCkpO1xyXG5cclxuICByZWFkb25seSBhdXRvZm9jdXNJdGVtSW5wdXQgPSBpbnB1dDwnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbD4obnVsbCwge1xyXG4gICAgYWxpYXM6ICdhdXRvZm9jdXNJdGVtJyxcclxuICB9KTtcclxuICByZWFkb25seSBhdXRvZm9jdXNJdGVtID0gbGlua2VkU2lnbmFsKCgpID0+IHRoaXMuYXV0b2ZvY3VzSXRlbUlucHV0KCkpO1xyXG5cclxuICAvLyBFbGVtZW50IHVzZWQgdG8gcmVsYXRpdmVseSBwb3NpdGlvbiBtZW51LFxyXG4gIC8vIHR5cGljYWxseSBwYXJlbnQgZWxlbWVudC5cclxuICAvLyBJZiBub3Qgc3BlY2lmaWVkLCBwYXJlbnQgZWxlbWVudCBpcyB1c2VkLlxyXG4gIHJlYWRvbmx5IGFuY2hvckVsZW1lbnRJbnB1dCA9IGlucHV0PE51bGxhYmxlPEhUTUxFbGVtZW50Pj4obnVsbCwge1xyXG4gICAgYWxpYXM6ICdhbmNob3JFbGVtZW50JyxcclxuICB9KTtcclxuICByZWFkb25seSBhbmNob3JFbGVtZW50ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB0aGlzLmFuY2hvckVsZW1lbnRJbnB1dCgpID8/IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50IVxyXG4gICk7XHJcblxyXG4gIHJlYWRvbmx5IHpJbmRleCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGV2ZWwoKSArIDEwKTtcclxuICByZWFkb25seSBpc1Jvb3RMZXZlbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubGV2ZWwoKSA9PT0gMCk7XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiB0aGlzIGV4Y2x1ZGluZyBhbnkgZXh0cmEgb2Zmc2V0LlxyXG4gIHByaXZhdGUgX2JveCE6IERPTVJlY3Q7XHJcbiAgZ2V0IGJveCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9ib3g7XHJcbiAgfVxyXG5cclxuICAvLyBCb3VuZGluZyBib3ggb2YgcGFyZW50IGVsZW1lbnQuXHJcbiAgcHJpdmF0ZSBfYW5jaG9yQm94ITogRE9NUmVjdDtcclxuICBwcml2YXRlIF9jb250YWluZXJQYWRkaW5nID0geyB0b3A6IDAsIGJvdHRvbTogMCB9O1xyXG5cclxuICAvLyBDdXJyZW50bHkgYXBwbGllZCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBkaXJlY3Rpb25zLlxyXG4gIHByb3RlY3RlZCB2ZXJ0aWNhbERpciA9IHNpZ25hbDxWZXJ0RGlyV2l0aE9mZnNldCB8IG51bGw+KG51bGwsIHtcclxuICAgIGVxdWFsOiBhcmVWZXJ0RGlyc0VxdWFsLFxyXG4gIH0pO1xyXG4gIHByb3RlY3RlZCBob3Jpem9udGFsRGlyID0gc2lnbmFsPEhvckRpcldpdGhPZmZzZXQgfCBudWxsPihudWxsLCB7XHJcbiAgICBlcXVhbDogYXJlSG9yRGlyc0VxdWFsLFxyXG4gIH0pO1xyXG5cclxuICBwcm90ZWN0ZWQgZXhwYW5kZWRDaGlsZCA9IHNpZ25hbDx7XHJcbiAgICBpdGVtOiBQYXJzZWRSZHRNZW51SXRlbTtcclxuICAgIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZTtcclxuICB9IHwgbnVsbD4obnVsbCk7XHJcbiAgcHJvdGVjdGVkIGF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gc2lnbmFsPCdmaXJzdCcgfCAnbGFzdCcgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PlxyXG4gICAgICB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuSE9NRV06ICgpID0+IHRoaXMuZm9jdXNJdGVtKDApLFxyXG4gICAgW0tCX0NPREUuRU5EXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0odW50cmFja2VkKHRoaXMuaXRlbSkuaXRlbXMubGVuZ3RoIC0gMSksXHJcbiAgICBbS0JfQ09ERS5FU0NBUEVdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuRU5URVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICAgIFtLQl9DT0RFLlNQQUNFQkFSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgfTtcclxuICBnZXQgc2VsZkV4cGFuZFNyYygpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkKCkpIHtcclxuICAgICAgaWYgKHRoaXMucGFyZW50TWVudSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE1lbnUuZXhwYW5kZWRDaGlsZCgpPy5zcmM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmV4cGFuZGVkQ2hpbGQoKT8uc3JjO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgcmVjYWxjRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyKCksXHJcbiAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXIoKVxyXG4gICAgKTtcclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgZXhwYW5kZWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmV4cGFuZGVkKCkpIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmVhZG9ubHkgZXhwYW5kZWRGb2N1c0VmZmVjdCA9IGFmdGVyUmVuZGVyRWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHJvb3RJdGVtID0gdW50cmFja2VkKHRoaXMuaXRlbSk7XHJcbiAgICB0aGlzLmV4cGFuZGVkSW5wdXQoKTtcclxuICAgIGNvbnN0IGV4cGFuZGVkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWQpO1xyXG4gICAgY29uc3QgYXV0b2ZvY3VzSXRlbSA9IHVudHJhY2tlZCh0aGlzLmF1dG9mb2N1c0l0ZW0pO1xyXG4gICAgaWYgKGV4cGFuZGVkKSB7XHJcbiAgICAgIHN3aXRjaCAoYXV0b2ZvY3VzSXRlbSkge1xyXG4gICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIGZhbHNlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ2ZpcnN0JzpcclxuICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIHRydWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnbGFzdCc6XHJcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbShyb290SXRlbS5pdGVtcy5sZW5ndGggLSAxLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVhc3VyZUNvbnRhaW5lclBhZGRpbmcoKTtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcigpLFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXIoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmxpc3RlblRhYktleVByZXNzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldExlZnQoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgdGhpcy5fYm94LndpZHRoIC1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWluT2Zmc2V0VG9wKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4udG9wO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCAtXHJcbiAgICAgIHRoaXMuX2JveC5oZWlnaHQgLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gICAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB1bnRyYWNrZWQodGhpcy5pc1Jvb3RMZXZlbCk7XHJcbiAgICBjb25zdCBob3Jpem9udGFsRGlyID0gdW50cmFja2VkKHRoaXMuaG9yaXpvbnRhbERpcik7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbERpciA9IHVudHJhY2tlZCh0aGlzLnZlcnRpY2FsRGlyKTtcclxuICAgIHRoaXMubWVhc3VyZUJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5fYm94IHx8ICF0aGlzLl9hbmNob3JCb3ggfHwgIXRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0hvckRpciA9IHRoaXMuZ2V0UmVhbEhvcml6b250YWxEaXIocHJlZmVycmVkSG9yaXpvbnRhbERpcik7XHJcbiAgICBjb25zdCBuZXdWZXJ0RGlyID0gdGhpcy5nZXRSZWFsVmVydGljYWxEaXIocHJlZmVycmVkVmVydGljYWxEaXIpO1xyXG5cclxuICAgIC8vIEhvcml6b250YWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gubGVmdDtcclxuICAgICAgaWYgKCFpc1Jvb3QpIHtcclxuICAgICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0IC0gdGhpcy5fYm94LndpZHRoO1xyXG5cclxuICAgICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RyaWN0aW9ucyBmcm9tIGxlZnQgbWVudSBhbmQgcmlnaHQgbWVudVxyXG4gICAgbmV3SG9yRGlyLmxlZnQgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRMZWZ0KCksIG5ld0hvckRpci5sZWZ0KSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRMZWZ0KClcclxuICAgICk7XHJcblxyXG4gICAgLy8gVmVydGljYWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3VmVydERpci5kaXIgPT09ICdkb3duJykge1xyXG4gICAgICBuZXdWZXJ0RGlyLnRvcCA9IHRoaXMuX2FuY2hvckJveC50b3A7XHJcbiAgICAgIGlmIChpc1Jvb3QpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wIC09IHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5ld1ZlcnREaXIuZGlyID09PSAndXAnKSB7XHJcbiAgICAgIG5ld1ZlcnREaXIudG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIGlmICghaXNSb290KSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgKz0gdGhpcy5fYW5jaG9yQm94LmhlaWdodCArIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gaGVhZGVyIGFuZCBmb290ZXJcclxuICAgIG5ld1ZlcnREaXIudG9wID0gTWF0aC5taW4oXHJcbiAgICAgIE1hdGgubWF4KHRoaXMuZ2V0TWluT2Zmc2V0VG9wKCksIG5ld1ZlcnREaXIudG9wKSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRUb3AoKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFhcmVIb3JEaXJzRXF1YWwoaG9yaXpvbnRhbERpciwgbmV3SG9yRGlyKSB8fFxyXG4gICAgICAhYXJlVmVydERpcnNFcXVhbCh2ZXJ0aWNhbERpciwgbmV3VmVydERpcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhvcml6b250YWxEaXIuc2V0KG5ld0hvckRpcik7XHJcbiAgICAgIHRoaXMudmVydGljYWxEaXIuc2V0KG5ld1ZlcnREaXIpO1xyXG4gICAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICBjb25zdCBob3Jpem9udGFsRGlyID0gdW50cmFja2VkKHRoaXMuaG9yaXpvbnRhbERpcik7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbERpciA9IHVudHJhY2tlZCh0aGlzLnZlcnRpY2FsRGlyKTtcclxuICAgIGlmICh0aGlzLmNoaWxkcmVuICYmIGhvcml6b250YWxEaXIgJiYgdmVydGljYWxEaXIpIHtcclxuICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT5cclxuICAgICAgICBjaGlsZC5yZWNhbGN1bGF0ZVBvc2l0aW9uKGhvcml6b250YWxEaXIuZGlyLCB2ZXJ0aWNhbERpci5kaXIpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgIGNvbnN0IG9wZW5PbkhvdmVyID0gdW50cmFja2VkKHRoaXMudG9wTGV2ZWxNZW51Lm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkPy5zcmMgIT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2spIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbS5zZXQobnVsbCk7XHJcbiAgICAgIGlmIChtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZS5Ib3ZlciB9KTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkLnNldCh0cnVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdleHBhbmRlZCBjaGlsZCcsIHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKTtcclxuICAgIGNvbnN0IG9wZW5PbkhvdmVyID0gdGhpcy50b3BMZXZlbE1lbnUub3Blbk9uSG92ZXIoKTtcclxuICAgIGlmIChcclxuICAgICAgKGhhc0NoaWxkcmVuICYmIGV4cGFuZGVkQ2hpbGQ/Lml0ZW0gIT09IGl0ZW0pIHx8XHJcbiAgICAgIChvcGVuT25Ib3ZlciAmJiBleHBhbmRlZENoaWxkPy5zcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbS5zZXQobnVsbCk7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2sgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KG51bGwpO1xyXG4gICAgfVxyXG4gICAgLy8gQ291bGQgYWxzbyBsaXN0ZW4gdG8gcm91dGVyIGV2ZW50cywgYnV0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieVxyXG4gICAgLy8gY2hpbGQgcm91dGVyIG5hdmlnYXRpb24uXHJcbiAgICBpZiAoIWhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGl0ZW0uY29tbWFuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldCgnZmlyc3QnKTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZ2V0Q2hpbGRSb3V0ZXMoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgZXhwYW5kZWRDaGlsZCA9IHRoaXMuZXhwYW5kZWRDaGlsZCgpO1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgZXhwYW5kZWRDaGlsZCkge1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbShleHBhbmRlZENoaWxkLml0ZW0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0l0ZW1SZWN1cnNpdmVseShwYXRoOiBQYXJzZWRSZHRNZW51SXRlbVtdKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuICAgIGNvbnN0IHRoaXNJdGVtID0gY2hpbGRyZW4uc2hpZnQoKSE7XHJcblxyXG4gICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbS5zZXQobnVsbCk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c0l0ZW0uc2V0KG51bGwpO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQW5kR2V0Q2hpbGQodGhpc0l0ZW0sIFJkdE1lbnVFeHBhbmRTb3VyY2UuRm9jdXMpXHJcbiAgICAgICAgLnBpcGUoZGVsYXkoMSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgob3ZlcmxheSkgPT4ge1xyXG4gICAgICAgICAgb3ZlcmxheS5mb2N1c0l0ZW1SZWN1cnNpdmVseShjaGlsZHJlbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGaXJzdCBmb2N1cyB0aGUgY29ycmVjdCBpdGVtIGJlY2F1c2Ugc3VibWVudSBtaWdodCBoYXZlIGZvY3VzIG9uIGl0LlxyXG4gICAgICAvLyBSZW1vdmluZyBmb2N1c2VkIGVsZW1lbnQgZnJvbSBET00gcmVzdWx0cyBpbiB3aW5kb3c6Zm9jdXNvdXQgZXZlbnRcclxuICAgICAgLy8gYW5kIHRoYXQgY2xvc2VzIGFsbCBtZW51c1xyXG4gICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSk7XHJcbiAgICAgIC8vIE5vdyBjbG9zZSBzdWJtZW51cyBhbmQgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gRE9NXHJcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51cygpO1xyXG4gICAgICAvLyBXYWl0IHVudGlsIHRoZXkgYXJlIHJlbW92ZWQgYW5kIGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYWdhaW5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzSXRlbSh0aGlzSXRlbSksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBhbmRBbmRHZXRDaGlsZChpdGVtOiBQYXJzZWRSZHRNZW51SXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlKSB7XHJcbiAgICBjb25zdCByb290SXRlbSA9IHVudHJhY2tlZCh0aGlzLml0ZW0pO1xyXG4gICAgaWYgKHJvb3RJdGVtLml0ZW1zLmluZGV4T2YoaXRlbSkgPCAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQXR0ZW1wdGluZyB0byBleHBhbmQgaXRlbSB0aGF0IGlzIG5vdCBjaGlsZCBpdGVtIG9mIHRoaXMuaXRlbSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmMgfSk7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gdW50cmFja2VkKGNoaWxkLml0ZW0pID09PSBpdGVtKTtcclxuICAgIGlmIChjaGlsZCkge1xyXG4gICAgICByZXR1cm4gb2YoY2hpbGQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uY2hhbmdlcy5waXBlKFxyXG4gICAgICAgIG1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gdW50cmFja2VkKGNoaWxkLml0ZW0pID09PSBpdGVtKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgZmlyc3QoUmR0T2JqZWN0VXRpbHMubm90TnVsbEd1YXJkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uS2V5RG93bihpdGVtSW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IHJvb3RJdGVtID0gdW50cmFja2VkKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgocm9vdEl0ZW0uaXRlbXMsIGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcclxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRhYktleVByZXNzKGV2ZW50OiBSZHRTaG9ydGN1dEV2ZW50KSB7XHJcbiAgICAvLyBEbyBub3QgcHJldmVudCBkZWZhdWx0IHRvIGNvcnJlY3RseSBzd2l0Y2ggdG8gcHJldmlvdXMgZWxlbWVudFxyXG4gICAgZXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIFdhaXQgZm9yIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgdG8gc3dpdGNoIHRvIG5ldyBlbGVtZW50XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZWxmKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludm9rZUl0ZW1DbGlja0J5SW5kZXgoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHJvb3RJdGVtID0gdW50cmFja2VkKHRoaXMuaXRlbSk7XHJcbiAgICBjb25zdCBpdGVtID0gcm9vdEl0ZW0uaXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNJdGVtKGl0ZW06IG51bWJlciB8IFBhcnNlZFJkdE1lbnVJdGVtLCB2aXNpYmxlRm9jdXMgPSB0cnVlKSB7XHJcbiAgICBsZXQgaXRlbUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICBpdGVtSW5kZXggPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUluZGV4ID0gdGhpcy5pdGVtKCkuaXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbUluZGV4ID49IDAgJiYgaXRlbUluZGV4IDwgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5ibHVyQWxsRm9jdXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4LCB2aXNpYmxlRm9jdXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBibHVyQWxsRm9jdXNhYmxlKCkge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbCkgPT5cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbC5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmdldChpdGVtSW5kZXgpO1xyXG4gICAgaWYgKGVsUmVmKSB7XHJcbiAgICAgIGlmICh2aXNpYmxlRm9jdXMpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNOZXh0SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IG5leHQgPSAoaXRlbUluZGV4ICsgMSkgJSByb290SXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNQcmV2SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGNvbnN0IHByZXYgPVxyXG4gICAgICAoaXRlbUluZGV4IC0gMSArIHJvb3RJdGVtLml0ZW1zLmxlbmd0aCkgJSByb290SXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlblN1Ym1lbnUoXHJcbiAgICBpdGVtSW5kZXg6IG51bWJlcixcclxuICAgIHZpc2libGVGb2N1czogJ2ZpcnN0JyB8ICdsYXN0JyxcclxuICAgIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZVxyXG4gICkge1xyXG4gICAgY29uc3Qgcm9vdEl0ZW0gPSB1bnRyYWNrZWQodGhpcy5pdGVtKTtcclxuICAgIGlmIChcclxuICAgICAgaXRlbUluZGV4IDwgcm9vdEl0ZW0uaXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIG1lbnVJdGVtSGFzQ2hpbGRyZW4ocm9vdEl0ZW0uaXRlbXNbaXRlbUluZGV4XSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbTogcm9vdEl0ZW0uaXRlbXNbaXRlbUluZGV4XSwgc3JjIH0pO1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtLnNldCh2aXNpYmxlRm9jdXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWxmKGZvY3VzRXhwYW5kZWQgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgIHRoaXMucGFyZW50TWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGNvbnN0IGNsb3NlT25Gb2N1c091dCA9IHVudHJhY2tlZCh0aGlzLnRvcExldmVsTWVudS5jbG9zZU9uRm9jdXNPdXQpO1xyXG4gICAgaWYgKGNsb3NlT25Gb2N1c091dCAmJiAhdGhpcy50b3BMZXZlbE1lbnUub3Blbk9uSG92ZXIpIHtcclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYXRlcyBkaXJlY3Rpb24gb2YgdGhpcyBtZW51IGFuZCBvZmZzZXQgaW4gY2FzZVxyXG4gIC8vIG1lbnUgd29uJ3QgZml0IGluIGxlZnQgbm9yIHJpZ2h0IG9mIHBhcmVudCBtZW51LlxyXG4gIHByaXZhdGUgZ2V0UmVhbEhvcml6b250YWxEaXIoXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uXHJcbiAgKTogSG9yRGlyV2l0aE9mZnNldCB7XHJcbiAgICBjb25zdCBpc1Jvb3QgPSB1bnRyYWNrZWQodGhpcy5pc1Jvb3RMZXZlbCk7XHJcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xyXG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XHJcbiAgICAvLyBUaGlzIG1lbnUgaXMgZGlyZWN0bHkgdW5kZXIgbWVudWJhclxyXG4gICAgaWYgKGlzUm9vdCkge1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LnJpZ2h0IC0gdGhpcy5fYm94LndpZHRoO1xyXG4gICAgICByaWdodCA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtXHJcbiAgICAgICAgKHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYm94LndpZHRoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE1lbnUgaXMgbmVzdGVkXHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LnJpZ2h0ICsgdGhpcy5fYm94LndpZHRoKTtcclxuICAgICAgbGVmdCA9IHRoaXMuX2FuY2hvckJveC5sZWZ0IC0gdGhpcy5fYm94LndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGxlZnQgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5sZWZ0O1xyXG4gICAgcmlnaHQgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuXHJcbiAgICBpZiAocHJlZmVycmVkSG9yaXpvbnRhbERpciA9PT0gJ3JpZ2h0Jykge1xyXG4gICAgICAvLyBXZSB1c2UgcHJlZmVycmVkIGlmIHBvc3NpYmxlLlxyXG4gICAgICBpZiAocmlnaHQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogMCB9O1xyXG4gICAgICAgIC8vIFRoZW4gdGhlIG90aGVyIG9uZS5cclxuICAgICAgfSBlbHNlIGlmIChsZWZ0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdsZWZ0JywgbGVmdDogMCB9O1xyXG4gICAgICAgIC8vIEVkZ2UgY2FzZSBpZiBuZWl0aGVyIGRpcmVjdGlvbiBjYW4gYmUgdXNlZCAodWx0cmEgbmFycm93IHNjcmVlbikuXHJcbiAgICAgICAgLy8gQ2hvb3NlIGRpcmVjdGlvbiB0aGF0IGNvdmVycyBsZWFzdCBvZiBwYXJlbnQgbWVudS5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKGxlZnQsIHJpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSBpZiAocmlnaHQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGaW5kcyBvdXQgd2hlcmUgdG8gcHV0IG1lbnUgaW4gY2FzZSBzY3JlZW4gaXMgdG9vIG5hcnJvdyBmb3IgdHdvIG1lbnVzXHJcbiAgLy8gdG8gZml0IG5leHQgdG8gZWFjaCBvdGhlci4gTWluaW1pemVzIGFyZWEgb2YgcGFyZW50IG1lbnUgY292ZXJlZCBieSB0aGlzLlxyXG4gIHByaXZhdGUgZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihcclxuICAgIGxlZnQ6IG51bWJlcixcclxuICAgIHJpZ2h0OiBudW1iZXJcclxuICApOiBIb3JEaXJXaXRoT2Zmc2V0IHtcclxuICAgIGNvbnN0IHNjcmVlblN0YXJ0ID0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5sZWZ0O1xyXG4gICAgY29uc3Qgc2NyZWVuRW5kID1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ucmlnaHQ7XHJcbiAgICBjb25zdCBzY3JlZW5DZW50ZXIgPSAoc2NyZWVuU3RhcnQgLSBzY3JlZW5FbmQpIC8gMjtcclxuXHJcbiAgICBjb25zdCBsZWZ0U3RhcnQgPSBNYXRoLm1heCh0aGlzLl9hbmNob3JCb3gubGVmdCwgc2NyZWVuU3RhcnQpO1xyXG4gICAgY29uc3QgbGVmdEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuQ2VudGVyXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0U3RhcnQgPSBNYXRoLm1heChzY3JlZW5DZW50ZXIsIGxlZnRFbmQpO1xyXG4gICAgY29uc3QgcmlnaHRFbmQgPSBNYXRoLm1pbihcclxuICAgICAgdGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9hbmNob3JCb3gud2lkdGgsXHJcbiAgICAgIHNjcmVlbkVuZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobGVmdEVuZCAtIGxlZnRTdGFydCA+IHJpZ2h0RW5kIC0gcmlnaHRTdGFydCkge1xyXG4gICAgICByZXR1cm4geyBkaXI6ICdyaWdodCcsIGxlZnQ6IHJpZ2h0IH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4geyBkaXI6ICdsZWZ0JywgbGVmdDogLWxlZnQgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVhbFZlcnRpY2FsRGlyKFxyXG4gICAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uXHJcbiAgKTogVmVydERpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3QgaXNSb290ID0gdW50cmFja2VkKHRoaXMuaXNSb290TGV2ZWwpO1xyXG4gICAgbGV0IGJvdHRvbTogbnVtYmVyO1xyXG4gICAgbGV0IHRvcDogbnVtYmVyO1xyXG5cclxuICAgIGlmIChpc1Jvb3QpIHtcclxuICAgICAgYm90dG9tID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCArXHJcbiAgICAgICAgdGhpcy5fYW5jaG9yQm94LmJvdHRvbSAtXHJcbiAgICAgICAgdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgdG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgICB0aGlzLl9hbmNob3JCb3gudG9wIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3guYm90dG9tIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0b3AgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgICBib3R0b20gLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZFZlcnRpY2FsRGlyID09PSAnZG93bicpIHtcclxuICAgICAgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChib3R0b20gPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2Rvd24nLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWVhc3VyZXMgYm91bmRpbmcgcmVjdCBvZiB0aGlzIGFuZCBvZmZzZXQgY29udGFpbmVyXHJcbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgcGFyZW50IG1lbnUgaGFzIGFscmVhZHkgYmVlbiBtZWFzdXJlZC5cclxuICBwcml2YXRlIG1lYXN1cmVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICB0aGlzLl9ib3ggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvckVsZW1lbnQoKTtcclxuICAgIHRoaXMuX2FuY2hvckJveCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVhc3VyZUNvbnRhaW5lclBhZGRpbmcoKSB7XHJcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoXHJcbiAgICAgIHRoaXMubWVudUl0ZW1Db250YWluZXIubmF0aXZlRWxlbWVudFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGVzLnBhZGRpbmdUb3ApO1xyXG4gICAgY29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ0JvdHRvbSk7XHJcbiAgICB0aGlzLl9jb250YWluZXJQYWRkaW5nID0geyB0b3A6IHBhZGRpbmdUb3AsIGJvdHRvbTogcGFkZGluZ0JvdHRvbSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDbGFzc2VzKCkge1xyXG4gICAgY29uc3QgaXNSb290ID0gdGhpcy5pc1Jvb3RMZXZlbCgpO1xyXG4gICAgY29uc3QgdmVydGljYWwgPSB0aGlzLnZlcnRpY2FsRGlyKCk7XHJcbiAgICBjb25zdCBob3Jpem9udGFsID0gdGhpcy5ob3Jpem9udGFsRGlyKCk7XHJcbiAgICBpZiAodmVydGljYWwpIHtcclxuICAgICAgaWYgKHZlcnRpY2FsLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0T2Zmc2V0KCd0b3AnLCB2ZXJ0aWNhbC50b3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChob3Jpem9udGFsKSB7XHJcbiAgICAgIGlmIChob3Jpem9udGFsLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ2xlZnQnLCBob3Jpem9udGFsLmxlZnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc1Jvb3QpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXJvb3QnKTtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtc3ViJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPZmZzZXQoZGlyZWN0aW9uOiAndG9wJyB8ICdsZWZ0JywgdmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGRpcmVjdGlvbiwgYCR7dmFsdWV9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVGFiS2V5UHJlc3MoKSB7XHJcbiAgICBjb25zdCBzaGlmdFRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgnc2hpZnQnLCAndGFiJyk7XHJcbiAgICBjb25zdCB0YWIgPSBSZHRTaG9ydGN1dC5jcmVhdGVVbnNhZmUoJ3RhYicpO1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihbdGFiLCBzaGlmdFRhYl0sIHtcclxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25UYWJLZXlQcmVzcyhldmVudCkpO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiICNtZW51SXRlbUNvbnRhaW5lcj5cclxuICBAZm9yKGl0ZW0gb2YgaXRlbSgpLml0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gIDxsaVxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgICNhbmNob3JFbFxyXG4gID5cclxuICAgIEBpZighaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLmV4dGVybmFsTGluaykge1xyXG4gICAgPGJ1dHRvblxyXG4gICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbSA9PT0gZXhwYW5kZWRDaGlsZCgpPy5pdGVtXCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIEBpZiAoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIFRPRE86XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zXCJcclxuICAgICAgICAgICAgbmFtZT1cImNoZXZyb25fcmlnaHRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgQGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0taWNvbiByZHQtbWVudS1pY29uLXJpZ2h0XCI+PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpbmtCb2R5IGxldC1pdGVtPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICBAaWYoaXRlbS5zaG9ydGN1dCkge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8IS0tIFRPRE86XHJcbiAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0taWNvblwiXHJcbiAgICAgICAgLz5cclxuICAgICAgLS0+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIEBpZiAoaXRlbS5yb3V0ZXJMaW5rKSB7XHJcbiAgICA8YVxyXG4gICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcclxuICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuICAgIH0gQGlmIChpdGVtLmV4dGVybmFsTGluaykge1xyXG4gICAgPGFcclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgIFtocmVmXT1cIml0ZW0uZXh0ZXJuYWxMaW5rXCJcclxuICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQm9keTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2E+XHJcbiAgICB9XHJcblxyXG4gICAgPCEtLSBDaGlsZCBtZW51cyBleGlzdCBvbmx5IGlmIHRoaXMgbWVudSBpcyBleHBhbmRlZC4gLS0+XHJcbiAgICA8IS0tIE9ubHkgb25lIGludmlzaWJsZSBsZXZlbCBpcyBhbHdheXMgYXR0YWNoZWQgdG8gRE9NLCB0aGUgcmVzdCBkb2VzIG5vdCBleGlzdC4gLS0+XHJcbiAgICBAaWYgKGl0ZW0uaXRlbXMgJiYgZXhwYW5kZWQoKSkge1xyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkKCk/Lml0ZW1cIlxyXG4gICAgICBbYXV0b2ZvY3VzSXRlbV09XCJhdXRvZm9jdXNTdWJtZW51SXRlbSgpXCJcclxuICAgICAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwiaG9yaXpvbnRhbERpcigpPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyKCk/LmRpciFcIlxyXG4gICAgICBbbGV2ZWxdPVwibGV2ZWwoKSArIDFcIlxyXG4gICAgICBbYW5jaG9yRWxlbWVudF09XCJhbmNob3JFbFwiXHJcbiAgICAvPlxyXG4gICAgfVxyXG4gIDwvbGk+XHJcbiAgfVxyXG48L3VsPlxyXG4iXX0=","import { DOCUMENT } from '@angular/common';\nimport { afterNextRender, booleanAttribute, ChangeDetectorRef, computed, DestroyRef, Directive, effect, ElementRef, EnvironmentInjector, inject, input, numberAttribute, QueryList, Renderer2, signal, untracked, ViewChildren, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal, } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { RdtRouterService } from '@ngrdt/router';\nimport { RdtShortcutService } from '@ngrdt/shortcuts';\nimport { KB_CODE, RdtStringUtils, } from '@ngrdt/utils';\nimport { animationFrameScheduler, fromEvent, map, switchMap, throttleTime, withLatestFrom, } from 'rxjs';\nimport { RdtMenuOverlayComponent } from '../menu-overlay/rdt-menu-overlay.component';\nimport { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RdtMenuShortcutMode, } from '../models';\nimport { RdtMenuExpandSource, } from '../private-models';\nimport { findNextItemWithPrefix, FOCUS_VISIBLE, getChildRoutesMap, getMenuItemsShortcuts, menuItemHasChildren, menuItemHasRoute, } from '../utils';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuBaseComponent {\n preferredVerticalDir = input(DEFAULT_MENU_VERTICAL_DIR, ...(ngDevMode ? [{ debugName: \"preferredVerticalDir\" }] : []));\n preferredHorizontalDir = input(DEFAULT_MENU_HORIZONTAL_DIR, ...(ngDevMode ? [{ debugName: \"preferredHorizontalDir\" }] : []));\n // Mode only matters if item has shortcut and only children, no command nor routerLink\n // FOCUS_ITEM will put focus on item with shortcut\n // OPEN_SUBMENU will open its submenu and put focus on the first item in it\n // If item has command or routerLink, it will always be activated and everything closed\n shortcutMode = input(RdtMenuShortcutMode.OPEN_SUBMENU, ...(ngDevMode ? [{ debugName: \"shortcutMode\" }] : []));\n closeOnFocusOut = input(false, ...(ngDevMode ? [{ debugName: \"closeOnFocusOut\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n openOnHover = input(false, ...(ngDevMode ? [{ debugName: \"openOnHover\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n hitboxMargin = input(10, ...(ngDevMode ? [{ debugName: \"hitboxMargin\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n cd = inject(ChangeDetectorRef);\n destroyRef = inject(DestroyRef);\n rdtRouter = inject(RdtRouterService);\n elRef = inject(ElementRef);\n document = inject(DOCUMENT);\n renderer = inject(Renderer2);\n router = inject(Router);\n shortcutService = inject(RdtShortcutService);\n injector = inject(EnvironmentInjector);\n children;\n focusableElements;\n expandedChild = signal(null, ...(ngDevMode ? [{ debugName: \"expandedChild\" }] : []));\n autofocusSubmenuItem = null;\n filteredItems = computed(() => {\n this.navigationEnd();\n const items = this.allParsedItems();\n const current = this.rdtRouter.parseAbsoluteUrl();\n if (!current) {\n return items;\n }\n else {\n return this.filterRec(items, current);\n }\n }, ...(ngDevMode ? [{ debugName: \"filteredItems\" }] : []));\n get clientSize() {\n return this._clientSize;\n }\n _clientSize;\n get bodyMargin() {\n return this._bodyMargin;\n }\n _bodyMargin;\n get buttonContainerRect() {\n return this._buttonContainerRect;\n }\n _buttonContainerRect;\n childRoutesMap = computed(() => getChildRoutesMap(this.filteredItems()), ...(ngDevMode ? [{ debugName: \"childRoutesMap\" }] : []));\n keyActions = {\n [KB_CODE.ARROW.LEFT]: (index) => this.focusPrevItem(index),\n [KB_CODE.ARROW.RIGHT]: (index) => this.focusNextItem(index),\n [KB_CODE.ARROW.DOWN]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),\n [KB_CODE.ARROW.UP]: (index) => this.openSubmenu(index, 'last', RdtMenuExpandSource.Shortcut),\n [KB_CODE.HOME]: () => this.focusItem(0),\n [KB_CODE.END]: () => this.focusItem(untracked(this.filteredItems).length - 1),\n [KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),\n [KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),\n };\n navigationEnd = toSignal(this.rdtRouter.navigationEnd$);\n // Returns all routes asociated with item or its subitems.\n getChildRoutes(item) {\n return this.childRoutesMap().get(item) ?? [];\n }\n constructor() {\n this.listenShortcuts();\n afterNextRender(() => {\n this.listenWindowResize();\n this.measure();\n this.recalculateChildren();\n });\n }\n recalcChildrenEffect = effect(() => {\n this.recalculateChildren();\n }, ...(ngDevMode ? [{ debugName: \"recalcChildrenEffect\" }] : []));\n recalculateChildren() {\n if (this.children) {\n this.children.forEach((child) => {\n child.recalculatePosition(this.preferredHorizontalDir(), this.preferredVerticalDir());\n });\n }\n }\n closeSubmenus(focusExpanded = false) {\n const expandedChild = untracked(this.expandedChild);\n if (focusExpanded && expandedChild) {\n this.focusItem(expandedChild.item);\n }\n this.expandedChild.set(null);\n this.cd.markForCheck();\n }\n onItemClick(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if ((menuItemHasChildren(item) && expandedChild?.item !== item) ||\n (openOnHover && expandedChild?.src === RdtMenuExpandSource.Hover)) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Click });\n }\n else {\n this.expandedChild.set(null);\n }\n if (typeof item.command === 'function') {\n item.command();\n }\n }\n onItemPointerEnter(item) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover) {\n if (menuItemHasChildren(item) &&\n expandedChild?.src !== RdtMenuExpandSource.Click) {\n this.autofocusSubmenuItem = null;\n this.expandedChild.set({ item, src: RdtMenuExpandSource.Hover });\n }\n else {\n this.expandedChild.set(null);\n }\n }\n }\n onKeyDown(itemIndex, event) {\n const hasAction = event.code in this.keyActions;\n const isLetter = RdtStringUtils.isAlphabetCharacter(event.key) ||\n RdtStringUtils.isNumericCharacter(event.key);\n if (hasAction || isLetter) {\n event.preventDefault();\n }\n if (hasAction) {\n event.stopPropagation();\n }\n if (hasAction) {\n this.keyActions[event.code](itemIndex);\n }\n else if (isLetter) {\n const filteredItems = untracked(this.filteredItems);\n const next = findNextItemWithPrefix(filteredItems, itemIndex, event.key);\n if (next !== null) {\n this.focusItem(next);\n }\n }\n }\n invokeItemClick(item) {\n if (menuItemHasRoute(item) && item.routerLink) {\n this.router.navigate(item.routerLink);\n }\n this.onItemClick(item);\n this.autofocusSubmenuItem = 'first';\n }\n filterRec(items, current) {\n let currentParent = current.route;\n const currentParams = current.params;\n const filtered = items.filter((item) => {\n if (!item.requiredParent) {\n return true;\n }\n const required = item.requiredParent;\n while (currentParent.absolutePath !== required.absolutePath) {\n currentParent = currentParent.parent;\n if (!currentParent) {\n return false;\n }\n }\n let requiredParent = required;\n do {\n const path = requiredParent.absolutePath;\n if (path in currentParams) {\n for (const key in requiredParent.staticParams) {\n if (currentParams[path][key] !== requiredParent.staticParams[key]) {\n return false;\n }\n }\n }\n requiredParent = requiredParent.parent;\n } while (requiredParent);\n return true;\n });\n return filtered.map((item) => {\n if (item.items) {\n return {\n ...item,\n items: this.filterRec(item.items, current),\n };\n }\n else {\n return item;\n }\n });\n }\n invokeItemClickByIndex(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const item = filteredItems[itemIndex];\n if (!item) {\n return;\n }\n this.invokeItemClick(item);\n }\n openSubmenu(itemIndex, visibleFocus, src) {\n const filteredItems = untracked(this.filteredItems);\n if (itemIndex < filteredItems.length &&\n menuItemHasChildren(filteredItems[itemIndex])) {\n const item = filteredItems[itemIndex];\n this.autofocusSubmenuItem = visibleFocus;\n this.expandedChild.set({ item, src });\n }\n }\n focusItem(item) {\n const filteredItems = untracked(this.filteredItems);\n let itemIndex;\n if (typeof item === 'number') {\n itemIndex = item;\n }\n else {\n itemIndex = filteredItems.indexOf(item);\n }\n if (itemIndex >= 0 && itemIndex < this.focusableElements.length) {\n this.blurAllFocusable();\n this.focusFocusable(itemIndex);\n }\n }\n focusNextItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const next = (itemIndex + 1) % filteredItems.length;\n this.focusItem(next);\n }\n focusPrevItem(itemIndex) {\n const filteredItems = untracked(this.filteredItems);\n const prev = (itemIndex - 1 + filteredItems.length) % filteredItems.length;\n this.focusItem(prev);\n }\n blurAllFocusable() {\n this.focusableElements.forEach((el) => this.renderer.removeClass(el.nativeElement, FOCUS_VISIBLE));\n }\n focusFocusable(itemIndex) {\n const elRef = this.focusableElements.get(itemIndex);\n if (elRef) {\n this.renderer.addClass(elRef.nativeElement, FOCUS_VISIBLE);\n elRef.nativeElement.focus();\n }\n }\n onPointerMove(event) {\n const expandedChild = untracked(this.expandedChild);\n const openOnHover = untracked(this.openOnHover);\n if (openOnHover && expandedChild) {\n const hitboxes = this.getHitboxes();\n const isInside = hitboxes.some((hitbox) => this.isPointerInsideHitbox(hitbox.rect, event));\n for (let i = hitboxes.length - 1; i >= 0; i--) {\n const hitbox = hitboxes[i];\n if (!hitbox.fixed && !isInside) {\n hitbox.close();\n break;\n }\n }\n }\n }\n // Closes menu if user navigates outside it using Tab.\n checkActiveElement(event) {\n const closeOnFocusOut = untracked(this.closeOnFocusOut);\n if (closeOnFocusOut && !this.openOnHover) {\n const thisEl = this.elRef.nativeElement;\n const target = event.relatedTarget;\n if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {\n this.expandedChild.set(null);\n }\n }\n }\n onDocumentClick(event) {\n const target = event.target;\n const elRef = this.elRef.nativeElement;\n if (!elRef.contains(target)) {\n this.closeSubmenus();\n }\n }\n measure() {\n this.measureButtonContainer();\n this.measureClientSize();\n this.readMargin();\n }\n readMargin() {\n const computedStyle = getComputedStyle(this.elRef.nativeElement);\n const topVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_TOP_PROPERTY_NAME);\n const bottomVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME);\n const leftVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_LEFT_PROPERTY_NAME);\n const rightVal = computedStyle.getPropertyValue(RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME);\n this._bodyMargin = {\n top: parseInt(topVal) || 0,\n bottom: parseInt(bottomVal) || 0,\n left: parseInt(leftVal) || 0,\n right: parseInt(rightVal) || 0,\n };\n }\n measureClientSize() {\n this._clientSize = {\n width: this.document.body.clientWidth,\n height: this.document.body.clientHeight,\n };\n }\n measureButtonContainer() {\n const el = this.buttonContainer;\n if (el) {\n this._buttonContainerRect = el.getBoundingClientRect();\n }\n else {\n this._buttonContainerRect = undefined;\n }\n }\n listenWindowResize() {\n fromEvent(window, 'resize')\n .pipe(throttleTime(0, animationFrameScheduler, { trailing: true }), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.measure();\n this.recalculateChildren();\n });\n }\n listenShortcuts() {\n const filteredItems$ = toObservable(this.filteredItems);\n const itemsWithShortcuts$ = filteredItems$.pipe(map(getMenuItemsShortcuts));\n const shortcuts$ = itemsWithShortcuts$.pipe(map((items) => items.map((it) => it.shortcut)));\n const map$ = itemsWithShortcuts$.pipe(map((items) => this.getShortcutMap(items)));\n shortcuts$\n .pipe(switchMap((shortcuts) => this.shortcutService.listen(shortcuts)), withLatestFrom(map$), takeUntilDestroyed(this.destroyRef))\n .subscribe(([evt, map]) => this.onShortcut(evt.shortcut, map));\n }\n getShortcutMap(itemsWithShortcuts) {\n const shortcutMap = {};\n itemsWithShortcuts.forEach((item) => {\n shortcutMap[item.shortcut.hotkeysValue] = item.path;\n });\n return shortcutMap;\n }\n onShortcut(shortcut, map) {\n const path = map[shortcut.hotkeysValue];\n if (!path) {\n console.warn(`Menu shortcut ${shortcut.hotkeysValue} was detected, but there is no path associated with it.`, map);\n }\n const last = path[path.length - 1];\n const hasRoute = menuItemHasRoute(last);\n const hasCommand = typeof last.command === 'function';\n if (hasRoute || hasCommand) {\n this.closeSubmenus(false);\n if (hasCommand) {\n last.command();\n }\n if (hasRoute) {\n this.router.navigate(last.routerLink);\n }\n }\n else {\n this.activateItemRecursively(path, RdtMenuExpandSource.Shortcut);\n }\n }\n activateItemRecursively(path, src) {\n const shortcutMode = untracked(this.shortcutMode);\n const children = [...path];\n if (shortcutMode === RdtMenuShortcutMode.OPEN_SUBMENU) {\n const last = children[children.length - 1];\n if (menuItemHasChildren(last) && last.items[0]) {\n children.push(last.items[0]);\n }\n }\n const thisItem = children.shift();\n if (children.length > 0) {\n this.expandedChild.set({ item: thisItem, src });\n const overlay = this.children.find((child) => untracked(child.item) === thisItem);\n overlay.focusItemRecursively(children);\n }\n else {\n this.expandedChild.set(null);\n this.focusItem(thisItem);\n }\n }\n isPointerInsideHitbox(hitbox, event) {\n const rect = hitbox;\n const x = event.clientX;\n const y = event.clientY;\n const margin = untracked(this.hitboxMargin);\n return (x >= rect.left - margin &&\n x <= rect.right + margin &&\n y >= rect.top - margin &&\n y <= rect.bottom + margin);\n }\n getHitboxes() {\n const boxes = this.getOpenMenuBoundingBoxes();\n const buttonContainerRect = this.buttonContainerRect;\n if (buttonContainerRect) {\n boxes.push({ rect: buttonContainerRect, fixed: true, close: () => { } });\n }\n return boxes;\n }\n getOpenMenuBoundingBoxes() {\n const boxes = [];\n this.children.forEach((overlay) => {\n this.getOpenMenuBoundingBoxesRec(overlay, boxes);\n });\n return boxes;\n }\n getOpenMenuBoundingBoxesRec(overlay, boxes) {\n if (overlay.expanded()) {\n let someByClick = false;\n overlay.children.forEach((child) => (someByClick ||= this.getOpenMenuBoundingBoxesRec(child, boxes)));\n const fixed = someByClick || overlay.selfExpandSrc === RdtMenuExpandSource.Click;\n boxes.push({\n rect: overlay.box,\n fixed: fixed,\n close: () => overlay.closeSelf(false),\n });\n return fixed;\n }\n return false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.1.7\", type: RdtMenuBaseComponent, isStandalone: true, inputs: { preferredVerticalDir: { classPropertyName: \"preferredVerticalDir\", publicName: \"preferredVerticalDir\", isSignal: true, isRequired: false, transformFunction: null }, preferredHorizontalDir: { classPropertyName: \"preferredHorizontalDir\", publicName: \"preferredHorizontalDir\", isSignal: true, isRequired: false, transformFunction: null }, shortcutMode: { classPropertyName: \"shortcutMode\", publicName: \"shortcutMode\", isSignal: true, isRequired: false, transformFunction: null }, closeOnFocusOut: { classPropertyName: \"closeOnFocusOut\", publicName: \"closeOnFocusOut\", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: \"openOnHover\", publicName: \"openOnHover\", isSignal: true, isRequired: false, transformFunction: null }, hitboxMargin: { classPropertyName: \"hitboxMargin\", publicName: \"hitboxMargin\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"window:pointermove\": \"onPointerMove($event)\", \"document:click\": \"onDocumentClick($event)\", \"window:focusout\": \"checkActiveElement($event)\" }, classAttribute: \"rdt-menu-base\" }, viewQueries: [{ propertyName: \"children\", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: \"focusableElements\", predicate: [\"focusableItem\"], descendants: true }], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuBaseComponent, decorators: [{\n type: Directive,\n args: [{\n host: {\n class: 'rdt-menu-base',\n '(window:pointermove)': 'onPointerMove($event)',\n '(document:click)': 'onDocumentClick($event)',\n '(window:focusout)': 'checkActiveElement($event)',\n },\n }]\n }], ctorParameters: () => [], propDecorators: { children: [{\n type: ViewChildren,\n args: [RdtMenuOverlayComponent]\n }], focusableElements: [{\n type: ViewChildren,\n args: ['focusableItem']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUNmLFNBQVMsRUFDVCxTQUFTLEVBRVQsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osUUFBUSxHQUNULE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBWSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsT0FBTyxFQUVQLGNBQWMsR0FFZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxHQUFHLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEdBQ2YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6QixvQ0FBb0MsRUFDcEMsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyxpQ0FB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QUFPLEtBQUssQ0FBQztJQUNmLENBQUM7dUdBeGhCbUIsb0JBQW9COzJGQUFwQixvQkFBb0Isd3FDQTRCMUIsdUJBQXVCOzsyRkE1QmpCLG9CQUFvQjtrQkFSekMsU0FBUzttQkFBQztvQkFDVCxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLGVBQWU7d0JBQ3RCLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0Msa0JBQWtCLEVBQUUseUJBQXlCO3dCQUM3QyxtQkFBbUIsRUFBRSw0QkFBNEI7cUJBQ2xEO2lCQUNGO3dEQThCVyxRQUFRO3NCQURqQixZQUFZO3VCQUFDLHVCQUF1QjtnQkFJM0IsaUJBQWlCO3NCQUQxQixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBEaXJlY3RpdmUsXHJcbiAgZWZmZWN0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcclxuICBpbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgbnVtYmVyQXR0cmlidXRlLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIHRha2VVbnRpbERlc3Ryb3llZCxcclxuICB0b09ic2VydmFibGUsXHJcbiAgdG9TaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSwgUmR0Um91dGVyU2VydmljZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRTaG9ydGN1dCwgUmR0U2hvcnRjdXRTZXJ2aWNlIH0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsXHJcbiAgZnJvbUV2ZW50LFxyXG4gIG1hcCxcclxuICBzd2l0Y2hNYXAsXHJcbiAgdGhyb3R0bGVUaW1lLFxyXG4gIHdpdGhMYXRlc3RGcm9tLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbiAgUkRUX01FTlVfTUFSR0lOX0JPVFRPTV9QUk9QRVJUWV9OQU1FLFxyXG4gIFJEVF9NRU5VX01BUkdJTl9MRUZUX1BST1BFUlRZX05BTUUsXHJcbiAgUkRUX01FTlVfTUFSR0lOX1JJR0hUX1BST1BFUlRZX05BTUUsXHJcbiAgUkRUX01FTlVfTUFSR0lOX1RPUF9QUk9QRVJUWV9OQU1FLFxyXG4gIFJkdE1lbnVTaG9ydGN1dE1vZGUsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBSZHRNZW51RXhwYW5kZWRDaGlsZCxcclxuICBSZHRNZW51RXhwYW5kU291cmNlLFxyXG59IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4LFxyXG4gIEZPQ1VTX1ZJU0lCTEUsXHJcbiAgZ2V0Q2hpbGRSb3V0ZXNNYXAsXHJcbiAgZ2V0TWVudUl0ZW1zU2hvcnRjdXRzLFxyXG4gIG1lbnVJdGVtSGFzQ2hpbGRyZW4sXHJcbiAgbWVudUl0ZW1IYXNSb3V0ZSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhTaG9ydGN1dCxcclxuICBTaXplLFxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAncmR0LW1lbnUtYmFzZScsXHJcbiAgICAnKHdpbmRvdzpwb2ludGVybW92ZSknOiAnb25Qb2ludGVyTW92ZSgkZXZlbnQpJyxcclxuICAgICcoZG9jdW1lbnQ6Y2xpY2spJzogJ29uRG9jdW1lbnRDbGljaygkZXZlbnQpJyxcclxuICAgICcod2luZG93OmZvY3Vzb3V0KSc6ICdjaGVja0FjdGl2ZUVsZW1lbnQoJGV2ZW50KScsXHJcbiAgfSxcclxufSlcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJkdE1lbnVCYXNlQ29tcG9uZW50IHtcclxuICByZWFkb25seSBwcmVmZXJyZWRWZXJ0aWNhbERpciA9IGlucHV0PFJkdFZlcnRpY2FsRGlyZWN0aW9uPihcclxuICAgIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVJcclxuICApO1xyXG4gIHJlYWRvbmx5IHByZWZlcnJlZEhvcml6b250YWxEaXIgPSBpbnB1dDxSZHRIb3Jpem9udGFsRGlyZWN0aW9uPihcclxuICAgIERFRkFVTFRfTUVOVV9IT1JJWk9OVEFMX0RJUlxyXG4gICk7XHJcbiAgLy8gTW9kZSBvbmx5IG1hdHRlcnMgaWYgaXRlbSBoYXMgc2hvcnRjdXQgYW5kIG9ubHkgY2hpbGRyZW4sIG5vIGNvbW1hbmQgbm9yIHJvdXRlckxpbmtcclxuICAvLyBGT0NVU19JVEVNIHdpbGwgcHV0IGZvY3VzIG9uIGl0ZW0gd2l0aCBzaG9ydGN1dFxyXG4gIC8vIE9QRU5fU1VCTUVOVSB3aWxsIG9wZW4gaXRzIHN1Ym1lbnUgYW5kIHB1dCBmb2N1cyBvbiB0aGUgZmlyc3QgaXRlbSBpbiBpdFxyXG4gIC8vIElmIGl0ZW0gaGFzIGNvbW1hbmQgb3Igcm91dGVyTGluaywgaXQgd2lsbCBhbHdheXMgYmUgYWN0aXZhdGVkIGFuZCBldmVyeXRoaW5nIGNsb3NlZFxyXG4gIHJlYWRvbmx5IHNob3J0Y3V0TW9kZSA9IGlucHV0PCdmb2N1cy1pdGVtJyB8ICdvcGVuLXN1Ym1lbnUnPihcclxuICAgIFJkdE1lbnVTaG9ydGN1dE1vZGUuT1BFTl9TVUJNRU5VXHJcbiAgKTtcclxuICByZWFkb25seSBjbG9zZU9uRm9jdXNPdXQgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XHJcbiAgcmVhZG9ubHkgb3Blbk9uSG92ZXIgPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XHJcbiAgcmVhZG9ubHkgaGl0Ym94TWFyZ2luID0gaW5wdXQoMTAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByZHRSb3V0ZXIgPSBpbmplY3QoUmR0Um91dGVyU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFJkdE1lbnVPdmVybGF5Q29tcG9uZW50KVxyXG4gIHByb3RlY3RlZCBjaGlsZHJlbiE6IFF1ZXJ5TGlzdDxSZHRNZW51T3ZlcmxheUNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZvY3VzYWJsZUl0ZW0nKVxyXG4gIHByb3RlY3RlZCBmb2N1c2FibGVFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XHJcblxyXG4gIGFic3RyYWN0IGdldCBidXR0b25Db250YWluZXIoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHJlYWRvbmx5IGV4cGFuZGVkQ2hpbGQgPSBzaWduYWw8UmR0TWVudUV4cGFuZGVkQ2hpbGQgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dG9mb2N1c1N1Ym1lbnVJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25FbmQoKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5hbGxQYXJzZWRJdGVtcygpO1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMucmR0Um91dGVyLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmICghY3VycmVudCkge1xyXG4gICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJSZWMoaXRlbXMsIGN1cnJlbnQpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBnZXQgY2xpZW50U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTaXplO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGllbnRTaXplITogU2l6ZTtcclxuXHJcbiAgZ2V0IGJvZHlNYXJnaW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9keU1hcmdpbjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYm9keU1hcmdpbiE6IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICByaWdodDogbnVtYmVyO1xyXG4gIH07XHJcblxyXG4gIGdldCBidXR0b25Db250YWluZXJSZWN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvbkNvbnRhaW5lclJlY3Q7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2J1dHRvbkNvbnRhaW5lclJlY3Q/OiBET01SZWN0O1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgYWxsUGFyc2VkSXRlbXM6IFNpZ25hbDxQYXJzZWRSZHRNZW51SXRlbVtdPjtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hpbGRSb3V0ZXNNYXAgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgZ2V0Q2hpbGRSb3V0ZXNNYXAodGhpcy5maWx0ZXJlZEl0ZW1zKCkpXHJcbiAgKTtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5mb2N1c1ByZXZJdGVtKGluZGV4KSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLlJJR0hUXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+XHJcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgsICdmaXJzdCcsIFJkdE1lbnVFeHBhbmRTb3VyY2UuU2hvcnRjdXQpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuVVBdOiAoaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2xhc3QnLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KSxcclxuICAgIFtLQl9DT0RFLkhPTUVdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSgwKSxcclxuICAgIFtLQl9DT0RFLkVORF06ICgpID0+XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpLmxlbmd0aCAtIDEpLFxyXG4gICAgW0tCX0NPREUuRU5URVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICAgIFtLQl9DT0RFLlNQQUNFQkFSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uRW5kID0gdG9TaWduYWwodGhpcy5yZHRSb3V0ZXIubmF2aWdhdGlvbkVuZCQpO1xyXG5cclxuICAvLyBSZXR1cm5zIGFsbCByb3V0ZXMgYXNvY2lhdGVkIHdpdGggaXRlbSBvciBpdHMgc3ViaXRlbXMuXHJcbiAgZ2V0Q2hpbGRSb3V0ZXMoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLmNoaWxkUm91dGVzTWFwKCkuZ2V0KGl0ZW0pID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxpc3RlblNob3J0Y3V0cygpO1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgdGhpcy5saXN0ZW5XaW5kb3dSZXNpemUoKTtcclxuICAgICAgdGhpcy5tZWFzdXJlKCk7XHJcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlY2FsY0NoaWxkcmVuRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gIH0pO1xyXG5cclxuICByZWNhbGN1bGF0ZUNoaWxkcmVuKCkge1xyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4pIHtcclxuICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIoKSxcclxuICAgICAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXIoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgIGlmIChmb2N1c0V4cGFuZGVkICYmIGV4cGFuZGVkQ2hpbGQpIHtcclxuICAgICAgdGhpcy5mb2N1c0l0ZW0oZXhwYW5kZWRDaGlsZC5pdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdW50cmFja2VkKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICBjb25zdCBvcGVuT25Ib3ZlciA9IHVudHJhY2tlZCh0aGlzLm9wZW5PbkhvdmVyKTtcclxuICAgIGlmIChcclxuICAgICAgKG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkgJiYgZXhwYW5kZWRDaGlsZD8uaXRlbSAhPT0gaXRlbSkgfHxcclxuICAgICAgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQ/LnNyYyA9PT0gUmR0TWVudUV4cGFuZFNvdXJjZS5Ib3ZlcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZS5DbGljayB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQobnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGl0ZW0uY29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpdGVtLmNvbW1hbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgIGNvbnN0IG9wZW5PbkhvdmVyID0gdW50cmFja2VkKHRoaXMub3Blbk9uSG92ZXIpO1xyXG4gICAgaWYgKG9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pICYmXHJcbiAgICAgICAgZXhwYW5kZWRDaGlsZD8uc3JjICE9PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZC5zZXQoeyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uS2V5RG93bihpdGVtSW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGhhc0FjdGlvbiA9IGV2ZW50LmNvZGUgaW4gdGhpcy5rZXlBY3Rpb25zO1xyXG4gICAgY29uc3QgaXNMZXR0ZXIgPVxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc0FscGhhYmV0Q2hhcmFjdGVyKGV2ZW50LmtleSkgfHxcclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNOdW1lcmljQ2hhcmFjdGVyKGV2ZW50LmtleSk7XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbiB8fCBpc0xldHRlcikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpO1xyXG4gICAgICBjb25zdCBuZXh0ID0gZmluZE5leHRJdGVtV2l0aFByZWZpeChmaWx0ZXJlZEl0ZW1zLCBpdGVtSW5kZXgsIGV2ZW50LmtleSk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZva2VJdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmIChtZW51SXRlbUhhc1JvdXRlKGl0ZW0pICYmIGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLnJvdXRlckxpbmspO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkl0ZW1DbGljayhpdGVtKTtcclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSAnZmlyc3QnO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbHRlclJlYyhcclxuICAgIGl0ZW1zOiBQYXJzZWRSZHRNZW51SXRlbVtdLFxyXG4gICAgY3VycmVudDogeyByb3V0ZTogUmR0Um91dGU7IHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiB9XHJcbiAgKTogUGFyc2VkUmR0TWVudUl0ZW1bXSB7XHJcbiAgICBsZXQgY3VycmVudFBhcmVudCA9IGN1cnJlbnQucm91dGU7XHJcbiAgICBjb25zdCBjdXJyZW50UGFyYW1zID0gY3VycmVudC5wYXJhbXM7XHJcblxyXG4gICAgY29uc3QgZmlsdGVyZWQgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKCFpdGVtLnJlcXVpcmVkUGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVxdWlyZWQgPSBpdGVtLnJlcXVpcmVkUGFyZW50O1xyXG4gICAgICB3aGlsZSAoY3VycmVudFBhcmVudC5hYnNvbHV0ZVBhdGggIT09IHJlcXVpcmVkLmFic29sdXRlUGF0aCkge1xyXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50LnBhcmVudCE7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50UGFyZW50KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCByZXF1aXJlZFBhcmVudDogUmR0Um91dGUgfCBudWxsID0gcmVxdWlyZWQ7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZWRQYXJlbnQuYWJzb2x1dGVQYXRoO1xyXG4gICAgICAgIGlmIChwYXRoIGluIGN1cnJlbnRQYXJhbXMpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcXVpcmVkUGFyZW50LnN0YXRpY1BhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFBhcmFtc1twYXRoXVtrZXldICE9PSByZXF1aXJlZFBhcmVudC5zdGF0aWNQYXJhbXNba2V5XSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXF1aXJlZFBhcmVudCA9IHJlcXVpcmVkUGFyZW50LnBhcmVudDtcclxuICAgICAgfSB3aGlsZSAocmVxdWlyZWRQYXJlbnQpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbXMpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGl0ZW1zOiB0aGlzLmZpbHRlclJlYyhpdGVtLml0ZW1zLCBjdXJyZW50KSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbnZva2VJdGVtQ2xpY2tCeUluZGV4KGl0ZW1JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdW50cmFja2VkKHRoaXMuZmlsdGVyZWRJdGVtcyk7XHJcbiAgICBjb25zdCBpdGVtID0gZmlsdGVyZWRJdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaW52b2tlSXRlbUNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9wZW5TdWJtZW51KFxyXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXHJcbiAgICB2aXNpYmxlRm9jdXM6ICdmaXJzdCcgfCAnbGFzdCcsXHJcbiAgICBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2VcclxuICApIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGlmIChcclxuICAgICAgaXRlbUluZGV4IDwgZmlsdGVyZWRJdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihmaWx0ZXJlZEl0ZW1zW2l0ZW1JbmRleF0pXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaXRlbSA9IGZpbHRlcmVkSXRlbXNbaXRlbUluZGV4XTtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IHZpc2libGVGb2N1cztcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldCh7IGl0ZW0sIHNyYyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB1bnRyYWNrZWQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSBmaWx0ZXJlZEl0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYmx1ckFsbEZvY3VzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNOZXh0SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpO1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZm9jdXNQcmV2SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHVudHJhY2tlZCh0aGlzLmZpbHRlcmVkSXRlbXMpO1xyXG4gICAgY29uc3QgcHJldiA9IChpdGVtSW5kZXggLSAxICsgZmlsdGVyZWRJdGVtcy5sZW5ndGgpICUgZmlsdGVyZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShwcmV2KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBibHVyQWxsRm9jdXNhYmxlKCkge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbCkgPT5cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbC5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmb2N1c0ZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmdldChpdGVtSW5kZXgpO1xyXG4gICAgaWYgKGVsUmVmKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxSZWYubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSk7XHJcbiAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblBvaW50ZXJNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkQ2hpbGQgPSB1bnRyYWNrZWQodGhpcy5leHBhbmRlZENoaWxkKTtcclxuICAgIGNvbnN0IG9wZW5PbkhvdmVyID0gdW50cmFja2VkKHRoaXMub3Blbk9uSG92ZXIpO1xyXG4gICAgaWYgKG9wZW5PbkhvdmVyICYmIGV4cGFuZGVkQ2hpbGQpIHtcclxuICAgICAgY29uc3QgaGl0Ym94ZXMgPSB0aGlzLmdldEhpdGJveGVzKCk7XHJcbiAgICAgIGNvbnN0IGlzSW5zaWRlID0gaGl0Ym94ZXMuc29tZSgoaGl0Ym94KSA9PlxyXG4gICAgICAgIHRoaXMuaXNQb2ludGVySW5zaWRlSGl0Ym94KGhpdGJveC5yZWN0LCBldmVudClcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IGhpdGJveGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgY29uc3QgaGl0Ym94ID0gaGl0Ym94ZXNbaV07XHJcbiAgICAgICAgaWYgKCFoaXRib3guZml4ZWQgJiYgIWlzSW5zaWRlKSB7XHJcbiAgICAgICAgICBoaXRib3guY2xvc2UoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2xvc2VzIG1lbnUgaWYgdXNlciBuYXZpZ2F0ZXMgb3V0c2lkZSBpdCB1c2luZyBUYWIuXHJcbiAgcHJvdGVjdGVkIGNoZWNrQWN0aXZlRWxlbWVudChldmVudDogRm9jdXNFdmVudCkge1xyXG4gICAgY29uc3QgY2xvc2VPbkZvY3VzT3V0ID0gdW50cmFja2VkKHRoaXMuY2xvc2VPbkZvY3VzT3V0KTtcclxuICAgIGlmIChjbG9zZU9uRm9jdXNPdXQgJiYgIXRoaXMub3Blbk9uSG92ZXIpIHtcclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uRG9jdW1lbnRDbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBlbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICghZWxSZWYuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlKCkge1xyXG4gICAgdGhpcy5tZWFzdXJlQnV0dG9uQ29udGFpbmVyKCk7XHJcbiAgICB0aGlzLm1lYXN1cmVDbGllbnRTaXplKCk7XHJcbiAgICB0aGlzLnJlYWRNYXJnaW4oKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkTWFyZ2luKCkge1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIGNvbnN0IHRvcFZhbCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcclxuICAgICAgUkRUX01FTlVfTUFSR0lOX1RPUF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgYm90dG9tVmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fQk9UVE9NX1BST1BFUlRZX05BTUVcclxuICAgICk7XHJcbiAgICBjb25zdCBsZWZ0VmFsID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxyXG4gICAgICBSRFRfTUVOVV9NQVJHSU5fTEVGVF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmlnaHRWYWwgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXHJcbiAgICAgIFJEVF9NRU5VX01BUkdJTl9SSUdIVF9QUk9QRVJUWV9OQU1FXHJcbiAgICApO1xyXG4gICAgdGhpcy5fYm9keU1hcmdpbiA9IHtcclxuICAgICAgdG9wOiBwYXJzZUludCh0b3BWYWwpIHx8IDAsXHJcbiAgICAgIGJvdHRvbTogcGFyc2VJbnQoYm90dG9tVmFsKSB8fCAwLFxyXG4gICAgICBsZWZ0OiBwYXJzZUludChsZWZ0VmFsKSB8fCAwLFxyXG4gICAgICByaWdodDogcGFyc2VJbnQocmlnaHRWYWwpIHx8IDAsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG1lYXN1cmVDbGllbnRTaXplKCkge1xyXG4gICAgdGhpcy5fY2xpZW50U2l6ZSA9IHtcclxuICAgICAgd2lkdGg6IHRoaXMuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLmRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBtZWFzdXJlQnV0dG9uQ29udGFpbmVyKCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmJ1dHRvbkNvbnRhaW5lcjtcclxuICAgIGlmIChlbCkge1xyXG4gICAgICB0aGlzLl9idXR0b25Db250YWluZXJSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9idXR0b25Db250YWluZXJSZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxpc3RlbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0aHJvdHRsZVRpbWUoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIHsgdHJhaWxpbmc6IHRydWUgfSksXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLm1lYXN1cmUoKTtcclxuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ2hpbGRyZW4oKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuU2hvcnRjdXRzKCkge1xyXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtcyQgPSB0b09ic2VydmFibGUodGhpcy5maWx0ZXJlZEl0ZW1zKTtcclxuICAgIGNvbnN0IGl0ZW1zV2l0aFNob3J0Y3V0cyQgPSBmaWx0ZXJlZEl0ZW1zJC5waXBlKG1hcChnZXRNZW51SXRlbXNTaG9ydGN1dHMpKTtcclxuICAgIGNvbnN0IHNob3J0Y3V0cyQgPSBpdGVtc1dpdGhTaG9ydGN1dHMkLnBpcGUoXHJcbiAgICAgIG1hcCgoaXRlbXMpID0+IGl0ZW1zLm1hcCgoaXQpID0+IGl0LnNob3J0Y3V0KSlcclxuICAgICk7XHJcbiAgICBjb25zdCBtYXAkID0gaXRlbXNXaXRoU2hvcnRjdXRzJC5waXBlKFxyXG4gICAgICBtYXAoKGl0ZW1zKSA9PiB0aGlzLmdldFNob3J0Y3V0TWFwKGl0ZW1zKSlcclxuICAgICk7XHJcblxyXG4gICAgc2hvcnRjdXRzJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKHNob3J0Y3V0cykgPT4gdGhpcy5zaG9ydGN1dFNlcnZpY2UubGlzdGVuKHNob3J0Y3V0cykpLFxyXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKG1hcCQpLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoW2V2dCwgbWFwXSkgPT4gdGhpcy5vblNob3J0Y3V0KGV2dC5zaG9ydGN1dCwgbWFwKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0U2hvcnRjdXRNYXAoXHJcbiAgICBpdGVtc1dpdGhTaG9ydGN1dHM6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aFNob3J0Y3V0W11cclxuICApIHtcclxuICAgIGNvbnN0IHNob3J0Y3V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBQYXJzZWRSZHRNZW51SXRlbVtdPiA9IHt9O1xyXG4gICAgaXRlbXNXaXRoU2hvcnRjdXRzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgc2hvcnRjdXRNYXBbaXRlbS5zaG9ydGN1dC5ob3RrZXlzVmFsdWVdID0gaXRlbS5wYXRoO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2hvcnRjdXRNYXA7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25TaG9ydGN1dChcclxuICAgIHNob3J0Y3V0OiBSZHRTaG9ydGN1dCxcclxuICAgIG1hcDogUmVjb3JkPHN0cmluZywgUGFyc2VkUmR0TWVudUl0ZW1bXT5cclxuICApIHtcclxuICAgIGNvbnN0IHBhdGggPSBtYXBbc2hvcnRjdXQuaG90a2V5c1ZhbHVlXTtcclxuICAgIGlmICghcGF0aCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYE1lbnUgc2hvcnRjdXQgJHtzaG9ydGN1dC5ob3RrZXlzVmFsdWV9IHdhcyBkZXRlY3RlZCwgYnV0IHRoZXJlIGlzIG5vIHBhdGggYXNzb2NpYXRlZCB3aXRoIGl0LmAsXHJcbiAgICAgICAgbWFwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXN0ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xyXG4gICAgY29uc3QgaGFzUm91dGUgPSBtZW51SXRlbUhhc1JvdXRlKGxhc3QpO1xyXG4gICAgY29uc3QgaGFzQ29tbWFuZCA9IHR5cGVvZiBsYXN0LmNvbW1hbmQgPT09ICdmdW5jdGlvbic7XHJcbiAgICBpZiAoaGFzUm91dGUgfHwgaGFzQ29tbWFuZCkge1xyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoZmFsc2UpO1xyXG4gICAgICBpZiAoaGFzQ29tbWFuZCkge1xyXG4gICAgICAgIGxhc3QuY29tbWFuZCEoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaGFzUm91dGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShsYXN0LnJvdXRlckxpbmshKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShwYXRoLCBSZHRNZW51RXhwYW5kU291cmNlLlNob3J0Y3V0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhY3RpdmF0ZUl0ZW1SZWN1cnNpdmVseShcclxuICAgIHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10sXHJcbiAgICBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2VcclxuICApIHtcclxuICAgIGNvbnN0IHNob3J0Y3V0TW9kZSA9IHVudHJhY2tlZCh0aGlzLnNob3J0Y3V0TW9kZSk7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsuLi5wYXRoXTtcclxuXHJcbiAgICBpZiAoc2hvcnRjdXRNb2RlID09PSBSZHRNZW51U2hvcnRjdXRNb2RlLk9QRU5fU1VCTUVOVSkge1xyXG4gICAgICBjb25zdCBsYXN0ID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XHJcbiAgICAgIGlmIChtZW51SXRlbUhhc0NoaWxkcmVuKGxhc3QpICYmIGxhc3QuaXRlbXNbMF0pIHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKGxhc3QuaXRlbXNbMF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQuc2V0KHsgaXRlbTogdGhpc0l0ZW0sIHNyYyB9KTtcclxuICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMuY2hpbGRyZW4uZmluZChcclxuICAgICAgICAoY2hpbGQpID0+IHVudHJhY2tlZChjaGlsZC5pdGVtKSA9PT0gdGhpc0l0ZW1cclxuICAgICAgKTtcclxuICAgICAgb3ZlcmxheSEuZm9jdXNJdGVtUmVjdXJzaXZlbHkoY2hpbGRyZW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkLnNldChudWxsKTtcclxuICAgICAgdGhpcy5mb2N1c0l0ZW0odGhpc0l0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNQb2ludGVySW5zaWRlSGl0Ym94KGhpdGJveDogRE9NUmVjdCwgZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xyXG4gICAgY29uc3QgcmVjdCA9IGhpdGJveDtcclxuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xyXG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFk7XHJcbiAgICBjb25zdCBtYXJnaW4gPSB1bnRyYWNrZWQodGhpcy5oaXRib3hNYXJnaW4pO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHggPj0gcmVjdC5sZWZ0IC0gbWFyZ2luICYmXHJcbiAgICAgIHggPD0gcmVjdC5yaWdodCArIG1hcmdpbiAmJlxyXG4gICAgICB5ID49IHJlY3QudG9wIC0gbWFyZ2luICYmXHJcbiAgICAgIHkgPD0gcmVjdC5ib3R0b20gKyBtYXJnaW5cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRIaXRib3hlcygpOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W10ge1xyXG4gICAgY29uc3QgYm94ZXMgPSB0aGlzLmdldE9wZW5NZW51Qm91bmRpbmdCb3hlcygpO1xyXG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyUmVjdCA9IHRoaXMuYnV0dG9uQ29udGFpbmVyUmVjdDtcclxuICAgIGlmIChidXR0b25Db250YWluZXJSZWN0KSB7XHJcbiAgICAgIGJveGVzLnB1c2goeyByZWN0OiBidXR0b25Db250YWluZXJSZWN0LCBmaXhlZDogdHJ1ZSwgY2xvc2U6ICgpID0+IHt9IH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJveGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzKCkge1xyXG4gICAgY29uc3QgYm94ZXM6IHsgcmVjdDogRE9NUmVjdDsgZml4ZWQ6IGJvb2xlYW47IGNsb3NlOiAoKSA9PiB2b2lkIH1bXSA9IFtdO1xyXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKChvdmVybGF5KSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKG92ZXJsYXksIGJveGVzKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJveGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcGVuTWVudUJvdW5kaW5nQm94ZXNSZWMoXHJcbiAgICBvdmVybGF5OiBSZHRNZW51T3ZlcmxheUNvbXBvbmVudCxcclxuICAgIGJveGVzOiB7IHJlY3Q6IERPTVJlY3Q7IGZpeGVkOiBib29sZWFuOyBjbG9zZTogKCkgPT4gdm9pZCB9W11cclxuICApOiBib29sZWFuIHtcclxuICAgIGlmIChvdmVybGF5LmV4cGFuZGVkKCkpIHtcclxuICAgICAgbGV0IHNvbWVCeUNsaWNrID0gZmFsc2U7XHJcbiAgICAgIG92ZXJsYXkuY2hpbGRyZW4uZm9yRWFjaChcclxuICAgICAgICAoY2hpbGQpID0+XHJcbiAgICAgICAgICAoc29tZUJ5Q2xpY2sgfHw9IHRoaXMuZ2V0T3Blbk1lbnVCb3VuZGluZ0JveGVzUmVjKGNoaWxkLCBib3hlcykpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZpeGVkID1cclxuICAgICAgICBzb21lQnlDbGljayB8fCBvdmVybGF5LnNlbGZFeHBhbmRTcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuQ2xpY2s7XHJcbiAgICAgIGJveGVzLnB1c2goe1xyXG4gICAgICAgIHJlY3Q6IG92ZXJsYXkuYm94LFxyXG4gICAgICAgIGZpeGVkOiBmaXhlZCxcclxuICAgICAgICBjbG9zZTogKCkgPT4gb3ZlcmxheS5jbG9zZVNlbGYoZmFsc2UpLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGZpeGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=","import { ChangeDetectionStrategy, Component, computed, ElementRef, input, numberAttribute, ViewChild, ViewEncapsulation, } from '@angular/core';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@ngrdt/router\";\nimport * as i4 from \"@ngrdt/shortcuts\";\nimport * as i5 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuBarComponent extends RdtMenuBaseComponent {\n buttonContainerRef;\n get buttonContainer() {\n return this.buttonContainerRef?.nativeElement;\n }\n items = input.required(...(ngDevMode ? [{ debugName: \"items\" }] : []));\n allParsedItems = computed(() => parseMenuItems(this.items(), this.injector), ...(ngDevMode ? [{ debugName: \"allParsedItems\" }] : []));\n headerHeight = input(0, ...(ngDevMode ? [{ debugName: \"headerHeight\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n footerHeight = input(0, ...(ngDevMode ? [{ debugName: \"footerHeight\", transform: numberAttribute }] : [{ transform: numberAttribute }]));\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: RdtMenuBarComponent, isStandalone: false, selector: \"rdt-menu-bar\", inputs: { items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null }, headerHeight: { classPropertyName: \"headerHeight\", publicName: \"headerHeight\", isSignal: true, isRequired: false, transformFunction: null }, footerHeight: { classPropertyName: \"footerHeight\", publicName: \"footerHeight\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"role\": \"menubar\" } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], viewQueries: [{ propertyName: \"buttonContainerRef\", first: true, predicate: [\"buttonContainer\"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"], dependencies: [{ kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: i2.RouterLink, selector: \"[routerLink]\", inputs: [\"target\", \"queryParams\", \"fragment\", \"queryParamsHandling\", \"state\", \"info\", \"relativeTo\", \"preserveFragment\", \"skipLocationChange\", \"replaceUrl\", \"routerLink\"] }, { kind: \"directive\", type: i3.RdtAnyRouteActiveDirective, selector: \"[rdtAnyRouteActive]\", inputs: [\"rdtAnyRouteActive\", \"watchedRoutes\", \"anyRouteActiveOptions\", \"ariaCurrentWhenActive\"] }, { kind: \"directive\", type: i4.RdtKeyListenerDirective, selector: \"[rdtKeyListener]\", outputs: [\"rdtKeyListener\"] }, { kind: \"component\", type: i5.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuBarComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu-bar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuBarComponent,\n },\n ], standalone: false, host: {\n role: 'menubar',\n }, template: \"<ul class=\\\"menu-bar-item-container\\\" role=\\\"presentation\\\" #buttonContainer>\\r\\n @for(item of filteredItems(); track item; let i = $index) {\\r\\n <li\\r\\n class=\\\"menu-bar-item\\\"\\r\\n role=\\\"presentation\\\"\\r\\n rdtAnyRouteActive=\\\"menu-bar-item-route-active\\\"\\r\\n [watchedRoutes]=\\\"getChildRoutes(item)\\\"\\r\\n (rdtKeyListener)=\\\"onKeyDown(i, $event)\\\"\\r\\n #anchorEl\\r\\n >\\r\\n @if(!item.routerLink && !item.externalLink) {\\r\\n <button\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n (pointerenter)=\\\"onItemPointerEnter(item)\\\"\\r\\n [attr.aria-haspopup]=\\\"item.items ? 'menu' : null\\\"\\r\\n [attr.aria-expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!-- TODO\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.items\\\"\\r\\n name=\\\"expand_more\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n -->\\r\\n @if(item.items) {\\r\\n <span class=\\\"menu-bar-item-icon rdt-menu-icon-down\\\"></span>\\r\\n }\\r\\n </div>\\r\\n </button>\\r\\n }\\r\\n\\r\\n <ng-template #linkBody let-item>\\r\\n {{ item.label }}\\r\\n\\r\\n <div class=\\\"menu-bar-item-right-content\\\">\\r\\n @if(item.shortcut) {\\r\\n <span class=\\\"menu-item-shortcut\\\">\\r\\n {{ item.shortcut.label }}\\r\\n </span>\\r\\n }\\r\\n <!--\\r\\n <rdt-icon\\r\\n *ngIf=\\\"item.icon\\\"\\r\\n [name]=\\\"item.icon\\\"\\r\\n class=\\\"menu-bar-item-icon\\\"\\r\\n inverted\\r\\n />\\r\\n --></div>\\r\\n </ng-template>\\r\\n\\r\\n @if(item.routerLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [routerLink]=\\\"item.routerLink\\\"\\r\\n [target]=\\\"item.target!\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if(item.externalLink) {\\r\\n <a\\r\\n #focusableItem\\r\\n class=\\\"menu-bar-item-content\\\"\\r\\n role=\\\"menuitem\\\"\\r\\n (click)=\\\"onItemClick(item)\\\"\\r\\n [href]=\\\"item.externalLink\\\"\\r\\n [target]=\\\"item.target\\\"\\r\\n [attr.tabindex]=\\\"0\\\"\\r\\n [attr.data-testid]=\\\"item.dataTestId\\\"\\r\\n >\\r\\n <ng-container\\r\\n *ngTemplateOutlet=\\\"linkBody; context: { $implicit: item }\\\"\\r\\n />\\r\\n </a>\\r\\n } @if (item.items) {\\r\\n <rdt-menu-overlay\\r\\n [item]=\\\"$any(item)\\\"\\r\\n [expanded]=\\\"item === expandedChild()?.item\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n [anchorElement]=\\\"anchorEl\\\"\\r\\n />\\r\\n }\\r\\n </li>\\r\\n }\\r\\n</ul>\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);font-weight:var(--rdt-menu-bar-item-font-weight);font-size:var(--rdt-menu-bar-item-font-size, inherit);outline:var(--rdt-menu-bar-item-outline)}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\\n\"] }]\n }], propDecorators: { buttonContainerRef: [{\n type: ViewChild,\n args: ['buttonContainer', { static: true }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQW1CbkQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLG9CQUFvQjtJQUUzRCxrQkFBa0IsQ0FBMkI7SUFFN0MsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBRVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLGdEQUFpQixDQUFDO0lBQ3hDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQywwREFDNUMsQ0FBQztJQUVPLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxnREFBSSxTQUFTLEVBQUUsZUFBZSxPQUE1QixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBQyxDQUFDO0lBQ3hELFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxnREFBSSxTQUFTLEVBQUUsZUFBZSxPQUE1QixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBQyxDQUFDO3VHQWR0RCxtQkFBbUI7MkZBQW5CLG1CQUFtQixzZ0JBWG5CO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLG9CQUFvQjtnQkFDN0IsV0FBVyxFQUFFLG1CQUFtQjthQUNqQztTQUNGLHNMQ3pCSCxrNUdBa0hBOzsyRkRuRmEsbUJBQW1CO2tCQWpCL0IsU0FBUzsrQkFDRSxjQUFjLG1CQUdQLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLG9CQUFvQjs0QkFDN0IsV0FBVyxxQkFBcUI7eUJBQ2pDO3FCQUNGLGNBQ1csS0FBSyxRQUNYO3dCQUNKLElBQUksRUFBRSxTQUFTO3FCQUNoQjs4QkFJRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgRWxlbWVudFJlZixcclxuICBpbnB1dCxcclxuICBudW1iZXJBdHRyaWJ1dGUsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJkdE1lbnVJdGVtIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgcGFyc2VNZW51SXRlbXMgfSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC1tZW51LWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JkdC1tZW51LWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JkdC1tZW51LWJhci5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogUmR0TWVudUJhc2VDb21wb25lbnQsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBSZHRNZW51QmFyQ29tcG9uZW50LFxyXG4gICAgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxyXG4gIGhvc3Q6IHtcclxuICAgIHJvbGU6ICdtZW51YmFyJyxcclxuICB9LFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0TWVudUJhckNvbXBvbmVudCBleHRlbmRzIFJkdE1lbnVCYXNlQ29tcG9uZW50IHtcclxuICBAVmlld0NoaWxkKCdidXR0b25Db250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGJ1dHRvbkNvbnRhaW5lclJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBnZXQgYnV0dG9uQ29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcmVhZG9ubHkgaXRlbXMgPSBpbnB1dC5yZXF1aXJlZDxSZHRNZW51SXRlbVtdPigpO1xyXG4gIHJlYWRvbmx5IGFsbFBhcnNlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT5cclxuICAgIHBhcnNlTWVudUl0ZW1zKHRoaXMuaXRlbXMoKSwgdGhpcy5pbmplY3RvcilcclxuICApO1xyXG5cclxuICByZWFkb25seSBoZWFkZXJIZWlnaHQgPSBpbnB1dCgwLCB7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pO1xyXG4gIHJlYWRvbmx5IGZvb3RlckhlaWdodCA9IGlucHV0KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XHJcbn1cclxuIiwiPHVsIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI2J1dHRvbkNvbnRhaW5lcj5cclxuICBAZm9yKGl0ZW0gb2YgZmlsdGVyZWRJdGVtcygpOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gIDxsaVxyXG4gICAgY2xhc3M9XCJtZW51LWJhci1pdGVtXCJcclxuICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWJhci1pdGVtLXJvdXRlLWFjdGl2ZVwiXHJcbiAgICBbd2F0Y2hlZFJvdXRlc109XCJnZXRDaGlsZFJvdXRlcyhpdGVtKVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgQGlmKCFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rKSB7XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIml0ZW0uaXRlbXMgPyAnbWVudScgOiBudWxsXCJcclxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkKCk/Lml0ZW1cIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIEBpZihpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ET1xyXG4gICAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pdGVtc1wiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleHBhbmRfbW9yZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvblwiXHJcbiAgICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIEBpZihpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb24gcmR0LW1lbnUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpbmtCb2R5IGxldC1pdGVtPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmKGl0ZW0uc2hvcnRjdXQpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLVxyXG4gICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgW25hbWVdPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgLz5cclxuICAgICAgLS0+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIEBpZihpdGVtLnJvdXRlckxpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcclxuICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldCFcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW2hyZWZdPVwiaXRlbS5leHRlcm5hbExpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuICAgIH0gQGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICA8cmR0LW1lbnUtb3ZlcmxheVxyXG4gICAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcclxuICAgICAgW2V4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQoKT8uaXRlbVwiXHJcbiAgICAgIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtXCJcclxuICAgICAgW3ByZWZlcnJlZEhvcml6b250YWxEaXJdPVwicHJlZmVycmVkSG9yaXpvbnRhbERpcigpXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInByZWZlcnJlZFZlcnRpY2FsRGlyKClcIlxyXG4gICAgICBbbGV2ZWxdPVwiMFwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuICB9XHJcbjwvdWw+XHJcbiJdfQ==","import { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject, input, QueryList, ViewEncapsulation, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { RDT_BUTTON_BASE_PROVIDER } from '@ngrdt/button';\nimport { switchMap } from 'rxjs';\nimport { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';\nimport { parseMenuItems } from '../private-models';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../menu-overlay/rdt-menu-overlay.component\";\nexport class RdtMenuComponent extends RdtMenuBaseComponent {\n buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);\n trigger = input.required(...(ngDevMode ? [{ debugName: \"trigger\" }] : []));\n dataTestId = input('', ...(ngDevMode ? [{ debugName: \"dataTestId\" }] : []));\n items = input.required(...(ngDevMode ? [{ debugName: \"items\" }] : []));\n allParsedItems = computed(() => {\n const items = this.items();\n const wrapper = {\n label: '',\n icon: '',\n items: items,\n };\n return parseMenuItems([wrapper], this.injector);\n }, ...(ngDevMode ? [{ debugName: \"allParsedItems\" }] : []));\n focusableElements = new QueryList();\n get buttonContainer() {\n return this.anchorElement() ?? undefined;\n }\n get parsedItem() {\n return this.filteredItems()[0];\n }\n get anchorElement() {\n return this.trigger().anchorElement;\n }\n constructor() {\n super();\n afterNextRender(() => {\n this.listenPointerOver();\n this.updateFocusableElements();\n });\n this.subscribeClicks();\n }\n triggerTabIndexEffect = effect(() => {\n const trigger = this.trigger();\n trigger.tabIndex.set(0);\n }, ...(ngDevMode ? [{ debugName: \"triggerTabIndexEffect\" }] : []));\n triggerDataTestIdEffect = effect(() => {\n const trigger = this.trigger();\n const dataTestId = this.dataTestId();\n trigger.dataTestId.set(dataTestId);\n }, ...(ngDevMode ? [{ debugName: \"triggerDataTestIdEffect\" }] : []));\n triggerAriaEffect = effect(() => {\n const trigger = this.trigger();\n const expandedChild = this.expandedChild();\n trigger.aria.set({\n role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-expanded': expandedChild?.item === this.parsedItem,\n });\n }, ...(ngDevMode ? [{ debugName: \"triggerAriaEffect\" }] : []));\n subscribeClicks() {\n toObservable(this.trigger)\n .pipe(switchMap((trigger) => trigger.click$), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.toggle());\n }\n toggle() {\n this.onItemClick(this.parsedItem);\n }\n listenPointerOver() {\n const target = this.anchorElement();\n const listener = this.renderer.listen(target, 'pointerover', (event) => {\n this.onItemPointerEnter(this.parsedItem);\n this.cd.markForCheck();\n });\n this.destroyRef.onDestroy(() => listener());\n }\n updateFocusableElements() {\n const anchor = this.anchorElement();\n if (anchor) {\n this.focusableElements.reset([{ nativeElement: anchor }]);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: RdtMenuComponent, isStandalone: false, selector: \"rdt-menu\", inputs: { trigger: { classPropertyName: \"trigger\", publicName: \"trigger\", isSignal: true, isRequired: true, transformFunction: null }, dataTestId: { classPropertyName: \"dataTestId\", publicName: \"dataTestId\", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: true, transformFunction: null } }, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], usesInheritance: true, ngImport: i0, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"], dependencies: [{ kind: \"component\", type: i1.RdtMenuOverlayComponent, selector: \"rdt-menu-overlay\", inputs: [\"item\", \"level\", \"preferredHorizontalDir\", \"preferredVerticalDir\", \"expanded\", \"autofocusItem\", \"anchorElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuComponent, decorators: [{\n type: Component,\n args: [{ selector: 'rdt-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: RdtMenuBaseComponent,\n useExisting: RdtMenuComponent,\n },\n ], standalone: false, template: \"@if (parsedItem) {\\r\\n<rdt-menu-overlay\\r\\n [anchorElement]=\\\"anchorElement()\\\"\\r\\n [item]=\\\"$any(parsedItem)\\\"\\r\\n [expanded]=\\\"expandedChild()?.item === parsedItem\\\"\\r\\n [autofocusItem]=\\\"autofocusSubmenuItem\\\"\\r\\n [preferredHorizontalDir]=\\\"preferredHorizontalDir()\\\"\\r\\n [preferredVerticalDir]=\\\"preferredVerticalDir()\\\"\\r\\n [level]=\\\"0\\\"\\r\\n/>\\r\\n}\\r\\n\", styles: [\"a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS9yZHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQWdCbkQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLG9CQUFvQjtJQUNyQyxXQUFXLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFekQsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLGtEQUFvQixDQUFDO0lBQzdDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRSxzREFBQyxDQUFDO0lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxnREFBaUIsQ0FBQztJQUNyQixjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQWdCO1lB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QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7SUFDSCxDQUFDO3VHQXhGVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQiwrYkFSaEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsZ0JBQWdCO2FBQzlCO1NBQ0YsaURDOUJILDhXQVdBOzsyRkRzQmEsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNFLFVBQVUsbUJBR0gsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLGtCQUFrQjt5QkFDOUI7cUJBQ0YsY0FDVyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBhZnRlck5leHRSZW5kZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGVmZmVjdCxcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBpbnB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSRFRfQlVUVE9OX0JBU0VfUFJPVklERVIsIFJkdEJ1dHRvbkJhc2VJbnQgfSBmcm9tICdAbmdyZHQvYnV0dG9uJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JkdC1tZW51LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51Q29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBidXR0b25DbGFzcyA9IGluamVjdChSRFRfQlVUVE9OX0JBU0VfUFJPVklERVIpO1xyXG5cclxuICByZWFkb25seSB0cmlnZ2VyID0gaW5wdXQucmVxdWlyZWQ8UmR0QnV0dG9uQmFzZUludD4oKTtcclxuICByZWFkb25seSBkYXRhVGVzdElkID0gaW5wdXQoJycpO1xyXG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8UmR0TWVudUl0ZW1bXT4oKTtcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgYWxsUGFyc2VkSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMoKTtcclxuICAgIGNvbnN0IHdyYXBwZXI6IFJkdE1lbnVJdGVtID0ge1xyXG4gICAgICBsYWJlbDogJycsXHJcbiAgICAgIGljb246ICcnLFxyXG4gICAgICBpdGVtczogaXRlbXMsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHBhcnNlTWVudUl0ZW1zKFt3cmFwcGVyXSwgdGhpcy5pbmplY3Rvcik7XHJcbiAgfSk7XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBmb2N1c2FibGVFbGVtZW50cyA9IG5ldyBRdWVyeUxpc3Q8XHJcbiAgICBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gID4oKTtcclxuXHJcbiAgb3ZlcnJpZGUgZ2V0IGJ1dHRvbkNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hbmNob3JFbGVtZW50KCkgPz8gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhcnNlZEl0ZW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEl0ZW1zKClbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgYW5jaG9yRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXIoKS5hbmNob3JFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcclxuICAgICAgdGhpcy5saXN0ZW5Qb2ludGVyT3ZlcigpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZUVsZW1lbnRzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3Vic2NyaWJlQ2xpY2tzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJUYWJJbmRleEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyKCk7XHJcbiAgICB0cmlnZ2VyLnRhYkluZGV4LnNldCgwKTtcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJEYXRhVGVzdElkRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIoKTtcclxuICAgIGNvbnN0IGRhdGFUZXN0SWQgPSB0aGlzLmRhdGFUZXN0SWQoKTtcclxuICAgIHRyaWdnZXIuZGF0YVRlc3RJZC5zZXQoZGF0YVRlc3RJZCk7XHJcbiAgfSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0cmlnZ2VyQXJpYUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy50cmlnZ2VyKCk7XHJcbiAgICBjb25zdCBleHBhbmRlZENoaWxkID0gdGhpcy5leHBhbmRlZENoaWxkKCk7XHJcbiAgICB0cmlnZ2VyLmFyaWEuc2V0KHtcclxuICAgICAgcm9sZTogJ21lbnVpdGVtJyxcclxuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiAndHJ1ZScsXHJcbiAgICAgICdhcmlhLWV4cGFuZGVkJzogZXhwYW5kZWRDaGlsZD8uaXRlbSA9PT0gdGhpcy5wYXJzZWRJdGVtLFxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlQ2xpY2tzKCkge1xyXG4gICAgdG9PYnNlcnZhYmxlKHRoaXMudHJpZ2dlcilcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCh0cmlnZ2VyKSA9PiB0cmlnZ2VyLmNsaWNrJCksXHJcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudG9nZ2xlKCkpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCkge1xyXG4gICAgdGhpcy5vbkl0ZW1DbGljayh0aGlzLnBhcnNlZEl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Qb2ludGVyT3ZlcigpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuYW5jaG9yRWxlbWVudCgpO1xyXG4gICAgY29uc3QgbGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0YXJnZXQsICdwb2ludGVyb3ZlcicsIChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm9uSXRlbVBvaW50ZXJFbnRlcih0aGlzLnBhcnNlZEl0ZW0pO1xyXG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBsaXN0ZW5lcigpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9jdXNhYmxlRWxlbWVudHMoKSB7XHJcbiAgICBjb25zdCBhbmNob3IgPSB0aGlzLmFuY2hvckVsZW1lbnQoKTtcclxuICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5yZXNldChbeyBuYXRpdmVFbGVtZW50OiBhbmNob3IgfV0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYgKHBhcnNlZEl0ZW0pIHtcclxuPHJkdC1tZW51LW92ZXJsYXlcclxuICBbYW5jaG9yRWxlbWVudF09XCJhbmNob3JFbGVtZW50KClcIlxyXG4gIFtpdGVtXT1cIiRhbnkocGFyc2VkSXRlbSlcIlxyXG4gIFtleHBhbmRlZF09XCJleHBhbmRlZENoaWxkKCk/Lml0ZW0gPT09IHBhcnNlZEl0ZW1cIlxyXG4gIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtXCJcclxuICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJwcmVmZXJyZWRIb3Jpem9udGFsRGlyKClcIlxyXG4gIFtwcmVmZXJyZWRWZXJ0aWNhbERpcl09XCJwcmVmZXJyZWRWZXJ0aWNhbERpcigpXCJcclxuICBbbGV2ZWxdPVwiMFwiXHJcbi8+XHJcbn1cclxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { RdtButtonOutletDirective } from '@ngrdt/button';\nimport { RdtAnyRouteActiveDirective } from '@ngrdt/router';\nimport { RdtKeyListenerDirective } from '@ngrdt/shortcuts';\nimport { RdtMenuBarComponent } from './menu-bar/rdt-menu-bar.component';\nimport { RdtMenuOverlayComponent } from './menu-overlay/rdt-menu-overlay.component';\nimport { RdtMenuComponent } from './menu/rdt-menu.component';\nimport * as i0 from \"@angular/core\";\nexport class RdtMenuModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuModule, declarations: [RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent], imports: [CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective,\n RdtButtonOutletDirective], exports: [RdtMenuComponent, RdtMenuBarComponent] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuModule, imports: [CommonModule,\n RouterModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: RdtMenuModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n RouterModule,\n RdtAnyRouteActiveDirective,\n RdtKeyListenerDirective,\n RdtButtonOutletDirective,\n ],\n declarations: [\n RdtMenuOverlayComponent,\n RdtMenuComponent,\n RdtMenuBarComponent,\n ],\n exports: [RdtMenuComponent, RdtMenuBarComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9yZHQtbWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBaUI3RCxNQUFNLE9BQU8sYUFBYTt1R0FBYixhQUFhO3dHQUFiLGFBQWEsaUJBTnRCLHVCQUF1QjtZQUN2QixnQkFBZ0I7WUFDaEIsbUJBQW1CLGFBVG5CLFlBQVk7WUFDWixZQUFZO1lBQ1osMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2Qix3QkFBd0IsYUFPaEIsZ0JBQWdCLEVBQUUsbUJBQW1CO3dHQUVwQyxhQUFhLFlBYnRCLFlBQVk7WUFDWixZQUFZOzsyRkFZSCxhQUFhO2tCQWZ6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLHdCQUF3QjtxQkFDekI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixtQkFBbUI7cUJBQ3BCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDO2lCQUNqRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJkdEJ1dHRvbk91dGxldERpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9idXR0b24nO1xyXG5pbXBvcnQgeyBSZHRBbnlSb3V0ZUFjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSB9IGZyb20gJ0BuZ3JkdC9zaG9ydGN1dHMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudU92ZXJsYXlDb21wb25lbnQgfSBmcm9tICcuL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJkdE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUvcmR0LW1lbnUuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLFxyXG4gICAgUmR0QW55Um91dGVBY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBSZHRLZXlMaXN0ZW5lckRpcmVjdGl2ZSxcclxuICAgIFJkdEJ1dHRvbk91dGxldERpcmVjdGl2ZSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUmR0TWVudU92ZXJsYXlDb21wb25lbnQsXHJcbiAgICBSZHRNZW51Q29tcG9uZW50LFxyXG4gICAgUmR0TWVudUJhckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSZHRNZW51Q29tcG9uZW50LCBSZHRNZW51QmFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVNb2R1bGUge31cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtbWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9uZ3JkdC1tZW51LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i5.RdtMenuOverlayComponent","i1.RdtMenuOverlayComponent"],"mappings":"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"}