@ngrdt/menu 0.0.16 → 0.0.17
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":"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"}
|
|
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;;;;"}
|