@tailng-ui/primitives 0.36.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -65,5 +65,16 @@ export declare class TngMenubarItem {
|
|
|
65
65
|
static ɵfac: i0.ɵɵFactoryDeclaration<TngMenubarItem, never>;
|
|
66
66
|
static ɵdir: i0.ɵɵDirectiveDeclaration<TngMenubarItem, "[tngMenubarItem]", ["tngMenubarItem"], { "ownedMenu": { "alias": "tngMenubarMenu"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Wrap each owned {@link TngMenu} and its {@link TngMenubarItem} so absolutely
|
|
70
|
+
* positioned menu panels anchor to this element. The menu contract positions
|
|
71
|
+
* root menus with `top: calc(100% + …)`; that percentage resolves against the
|
|
72
|
+
* nearest positioned ancestor — this host provides it (see theme menubar.css).
|
|
73
|
+
*/
|
|
74
|
+
export declare class TngMenubarGroup {
|
|
75
|
+
protected readonly dataSlot: "menubar-group";
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TngMenubarGroup, never>;
|
|
77
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<TngMenubarGroup, "[tngMenubarGroup]", ["tngMenubarGroup"], {}, {}, never, never, true, never>;
|
|
78
|
+
}
|
|
68
79
|
export {};
|
|
69
80
|
//# sourceMappingURL=tng-menubar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-menubar.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/menubar/tng-menubar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tng-menubar.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/menubar/tng-menubar.ts"],"names":[],"mappings":"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"}
|
|
@@ -475,4 +475,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
|
|
|
475
475
|
type: HostListener,
|
|
476
476
|
args: ['keydown', ['$event']]
|
|
477
477
|
}] } });
|
|
478
|
+
/**
|
|
479
|
+
* Wrap each owned {@link TngMenu} and its {@link TngMenubarItem} so absolutely
|
|
480
|
+
* positioned menu panels anchor to this element. The menu contract positions
|
|
481
|
+
* root menus with `top: calc(100% + …)`; that percentage resolves against the
|
|
482
|
+
* nearest positioned ancestor — this host provides it (see theme menubar.css).
|
|
483
|
+
*/
|
|
484
|
+
export class TngMenubarGroup {
|
|
485
|
+
dataSlot = 'menubar-group';
|
|
486
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenubarGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
487
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.1", type: TngMenubarGroup, isStandalone: true, selector: "[tngMenubarGroup]", host: { properties: { "attr.data-slot": "this.dataSlot" } }, exportAs: ["tngMenubarGroup"], ngImport: i0 });
|
|
488
|
+
}
|
|
489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngMenubarGroup, decorators: [{
|
|
490
|
+
type: Directive,
|
|
491
|
+
args: [{
|
|
492
|
+
selector: '[tngMenubarGroup]',
|
|
493
|
+
exportAs: 'tngMenubarGroup',
|
|
494
|
+
}]
|
|
495
|
+
}], propDecorators: { dataSlot: [{
|
|
496
|
+
type: HostBinding,
|
|
497
|
+
args: ['attr.data-slot']
|
|
498
|
+
}] } });
|
|
478
499
|
//# sourceMappingURL=tng-menubar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tng-menubar.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/menubar/tng-menubar.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\n\nimport { TngMenu } from '../menu/tng-menu';\n\ntype MenubarItemElement = HTMLElement;\nconst createMenubarItemId = createTngIdFactory('tng-menubar-item');\nconst TYPEAHEAD_RESET_MS = 500;\n\n@Directive({\n selector: '[tngMenubar]',\n exportAs: 'tngMenubar',\n})\nexport class TngMenubar {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private openItem: TngMenubarItem | null = null;\n private currentTabStopId: string | null = null;\n private typeaheadBuffer = '';\n private typeaheadResetHandle: ReturnType<typeof setTimeout> | null = null;\n\n readonly loop = input<boolean>(true);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'menubar' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'menubar' as const;\n\n @HostBinding('attr.aria-orientation')\n protected readonly ariaOrientation = 'horizontal' as const;\n\n getItems(): readonly MenubarItemElement[] {\n return Array.from(\n this.hostRef.nativeElement.querySelectorAll<MenubarItemElement>('[tngMenubarItem]'),\n );\n }\n\n getEnabledItems(): readonly MenubarItemElement[] {\n return this.getItems().filter((item) => item.getAttribute('aria-disabled') !== 'true');\n }\n\n isRtl(): boolean {\n const host = this.hostRef.nativeElement;\n const nearestDir =\n host.closest<HTMLElement>('[dir]')?.getAttribute('dir') ??\n host.ownerDocument?.documentElement.getAttribute('dir');\n\n return nearestDir?.toLowerCase() === 'rtl';\n }\n\n getCurrentTabStopId(): string | null {\n const enabledItems = this.getEnabledItems();\n if (enabledItems.length === 0) {\n this.currentTabStopId = null;\n return null;\n }\n\n if (!enabledItems.some((item) => item.id === this.currentTabStopId)) {\n this.currentTabStopId = enabledItems[0]?.id ?? null;\n }\n\n return this.currentTabStopId;\n }\n\n setCurrentTabStop(item: TngMenubarItem): void {\n if (item.isDisabledItem()) {\n return;\n }\n\n this.currentTabStopId = item.getItemId();\n }\n\n hasOpenItem(): boolean {\n return this.openItem !== null;\n }\n\n isOpenItem(item: TngMenubarItem): boolean {\n return this.openItem === item;\n }\n\n findTypeaheadMatch(currentItem: HTMLElement, key: string): MenubarItemElement | null {\n const items = this.getEnabledItems();\n if (items.length === 0) {\n return null;\n }\n\n const normalizedKey = key.trim().toLowerCase();\n if (normalizedKey.length !== 1) {\n return null;\n }\n\n const repeatingSingleChar =\n this.typeaheadBuffer.length > 0 &&\n this.typeaheadBuffer.split('').every((char) => char === normalizedKey);\n\n let query = repeatingSingleChar ? normalizedKey : `${this.typeaheadBuffer}${normalizedKey}`;\n let match = this.findMatchingItem(items, currentItem, query, repeatingSingleChar);\n\n if (match === null && query !== normalizedKey) {\n query = normalizedKey;\n match = this.findMatchingItem(items, currentItem, query, true);\n }\n\n if (match === null) {\n return null;\n }\n\n this.resetTypeaheadBuffer(query);\n return match;\n }\n\n requestToggleMenu(item: TngMenubarItem): void {\n const ownedMenu = item.getOwnedMenu();\n if (ownedMenu === null || item.isDisabledItem()) {\n return;\n }\n\n if (ownedMenu.isOpen()) {\n item.closeOwnedMenu(false);\n item.focusSelf();\n return;\n }\n\n this.requestOpenMenu(item, 'none');\n }\n\n requestOpenMenu(item: TngMenubarItem, focusAction: 'none' | 'first' | 'last'): void {\n const ownedMenu = item.getOwnedMenu();\n if (ownedMenu === null || item.isDisabledItem()) {\n return;\n }\n\n if (this.openItem !== null && this.openItem !== item) {\n this.openItem.closeOwnedMenu(false);\n }\n\n this.openItem = item;\n item.openOwnedMenu(focusAction);\n }\n\n syncOpenItem(item: TngMenubarItem): void {\n if (item.getOwnedMenu()?.isOpen()) {\n this.openItem = item;\n return;\n }\n\n if (this.openItem === item) {\n this.openItem = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadResetHandle !== null) {\n clearTimeout(this.typeaheadResetHandle);\n this.typeaheadResetHandle = null;\n }\n }\n\n private findMatchingItem(\n items: readonly MenubarItemElement[],\n currentItem: HTMLElement,\n query: string,\n cycleFromCurrentItem: boolean,\n ): MenubarItemElement | null {\n const currentIndex = items.indexOf(currentItem);\n const startIndex = cycleFromCurrentItem && currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\n for (let offset = 0; offset < items.length; offset += 1) {\n const index = (startIndex + offset) % items.length;\n const item = items[index];\n const label = item.textContent?.trim().toLowerCase() ?? '';\n\n if (label.startsWith(query)) {\n return item;\n }\n }\n\n return null;\n }\n\n private resetTypeaheadBuffer(nextBuffer: string): void {\n this.typeaheadBuffer = nextBuffer;\n\n if (this.typeaheadResetHandle !== null) {\n clearTimeout(this.typeaheadResetHandle);\n }\n\n this.typeaheadResetHandle = setTimeout(() => {\n this.typeaheadBuffer = '';\n this.typeaheadResetHandle = null;\n }, TYPEAHEAD_RESET_MS);\n }\n}\n\n@Directive({\n selector: '[tngMenubarItem]',\n exportAs: 'tngMenubarItem',\n})\nexport class TngMenubarItem {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly menubar = inject(TngMenubar, { host: true });\n private readonly resolvedId =\n this.hostRef.nativeElement.getAttribute('id') ?? createMenubarItemId();\n private lastOwnedMenu: TngMenu | null = null;\n\n readonly ownedMenu = input<TngMenu | null>(null, {\n alias: 'tngMenubarMenu',\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'menubar-item' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'menuitem' as const;\n\n @HostBinding('attr.id')\n protected readonly id = this.resolvedId;\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n if (this.isDisabled()) {\n return '-1';\n }\n\n return this.menubar.getCurrentTabStopId() === this.id ? '0' : '-1';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.isDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-haspopup')\n protected get ariaHaspopup(): 'menu' | null {\n return this.ownedMenu() === null ? null : 'menu';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n return this.ownedMenu()?.id ?? null;\n }\n\n ngOnInit(): void {\n this.syncHostId();\n this.lastOwnedMenu = this.ownedMenu();\n this.syncOwnedMenuLink();\n this.syncAriaExpanded();\n }\n\n ngDoCheck(): void {\n this.syncHostId();\n const currentOwnedMenu = this.ownedMenu();\n if (currentOwnedMenu === this.lastOwnedMenu) {\n return;\n }\n\n this.lastOwnedMenu?.clearTriggerLink(this.hostRef.nativeElement);\n this.lastOwnedMenu = currentOwnedMenu;\n this.syncOwnedMenuLink();\n this.syncAriaExpanded();\n }\n\n ngOnDestroy(): void {\n this.lastOwnedMenu?.clearTriggerLink(this.hostRef.nativeElement);\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.ownedMenu() === null || this.isDisabled()) {\n return;\n }\n\n this.focusSelf();\n this.syncOwnedMenuLink();\n this.menubar.requestToggleMenu(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerdown(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.focusSelf();\n }\n\n @HostListener('mouseenter')\n protected onMouseenter(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.menubar.setCurrentTabStop(this);\n\n if (!this.menubar.hasOpenItem() || this.menubar.isOpenItem(this) || this.ownedMenu() === null) {\n return;\n }\n\n this.syncOwnedMenuLink();\n this.menubar.requestOpenMenu(this, 'none');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.menubar.setCurrentTabStop(this);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const ownedMenu = this.ownedMenu();\n if (!this.isDisabled() && ownedMenu?.isOpen() && event.key === 'Escape') {\n event.preventDefault();\n this.closeOwnedMenu(true);\n return;\n }\n\n if (\n !this.isDisabled() &&\n ownedMenu !== null &&\n (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown' || event.key === 'ArrowUp')\n ) {\n event.preventDefault();\n this.syncOwnedMenuLink();\n\n if (ownedMenu.isOpen() && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n ownedMenu.focusPanelAndMoveActiveItem(event.key === 'ArrowDown' ? 'next' : 'prev');\n return;\n }\n\n this.menubar.requestOpenMenu(this, event.key === 'ArrowDown' ? 'first' : event.key === 'ArrowUp' ? 'last' : 'none');\n return;\n }\n\n if (event.key === 'Tab') {\n if (ownedMenu?.isOpen()) {\n if (this.handleTabFromOpenMenu(event.shiftKey)) {\n event.preventDefault();\n }\n return;\n }\n\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n const targetIndex = event.shiftKey ? currentIndex - 1 : currentIndex + 1;\n const target = items[targetIndex];\n\n if (target === undefined) {\n return;\n }\n\n event.preventDefault();\n target.focus();\n return;\n }\n\n if (ownedMenu?.isOpen() && (event.key === 'ArrowRight' || event.key === 'ArrowLeft')) {\n event.preventDefault();\n this.handleArrowFromOpenMenu(event.key);\n return;\n }\n\n if (\n event.key !== 'ArrowRight' &&\n event.key !== 'ArrowLeft' &&\n event.key !== 'Home' &&\n event.key !== 'End'\n ) {\n if (event.key.length === 1 && !this.isDisabled()) {\n const match = this.menubar.findTypeaheadMatch(this.hostRef.nativeElement, event.key);\n if (match !== null) {\n event.preventDefault();\n match.focus();\n }\n }\n return;\n }\n\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n event.preventDefault();\n\n if (event.key === 'Home') {\n items[0]?.focus();\n return;\n }\n\n if (event.key === 'End') {\n items[items.length - 1]?.focus();\n return;\n }\n\n const loop = this.menubar.loop();\n const moveToNext =\n event.key === (this.menubar.isRtl() ? 'ArrowLeft' : 'ArrowRight');\n const targetIndex =\n moveToNext\n ? currentIndex + 1 >= items.length\n ? loop\n ? 0\n : items.length - 1\n : currentIndex + 1\n : currentIndex - 1 < 0\n ? loop\n ? items.length - 1\n : 0\n : currentIndex - 1;\n\n items[targetIndex]?.focus();\n }\n\n isDisabledItem(): boolean {\n return this.isDisabled();\n }\n\n getOwnedMenu(): TngMenu | null {\n return this.ownedMenu();\n }\n\n openOwnedMenu(focusAction: 'none' | 'first' | 'last'): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n ownedMenu.open(focusAction);\n }\n\n closeOwnedMenu(restoreFocus: boolean): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n ownedMenu.close(restoreFocus);\n }\n\n focusSelf(): void {\n this.menubar.setCurrentTabStop(this);\n this.hostRef.nativeElement.focus();\n }\n\n getItemId(): string {\n return this.id;\n }\n\n handleArrowFromOpenMenu(key: 'ArrowRight' | 'ArrowLeft'): void {\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n const moveToNext =\n key === (this.menubar.isRtl() ? 'ArrowLeft' : 'ArrowRight');\n const loop = this.menubar.loop();\n const targetIndex =\n moveToNext\n ? currentIndex + 1 >= items.length\n ? loop\n ? 0\n : items.length - 1\n : currentIndex + 1\n : currentIndex - 1 < 0\n ? loop\n ? items.length - 1\n : 0\n : currentIndex - 1;\n\n const target = items[targetIndex];\n if (target === undefined || target === current) {\n return;\n }\n\n const targetOwnsMenu = target.getAttribute('aria-haspopup') === 'menu';\n if (!targetOwnsMenu) {\n this.closeOwnedMenu(false);\n target.focus();\n return;\n }\n\n target.focus();\n target.click();\n }\n\n private isDisabled(): boolean {\n const element = this.hostRef.nativeElement as HTMLElement & {\n disabled?: boolean;\n };\n\n return element.disabled || element.hasAttribute('disabled');\n }\n\n private syncOwnedMenuLink(): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n this.syncHostId();\n ownedMenu.setTriggerElement(this.hostRef.nativeElement, () => this.syncMenuState());\n ownedMenu.setRestoreFocusOnOutsideClick(true);\n ownedMenu.setMenubarArrowHandler((key) => this.handleArrowFromOpenMenu(key));\n ownedMenu.setMenubarTabHandler((shiftKey) => this.handleTabFromOpenMenu(shiftKey));\n }\n\n private syncAriaExpanded(): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n this.hostRef.nativeElement.removeAttribute('aria-expanded');\n return;\n }\n\n this.hostRef.nativeElement.setAttribute('aria-expanded', ownedMenu.isOpen() ? 'true' : 'false');\n }\n\n private syncMenuState(): void {\n this.syncAriaExpanded();\n this.menubar.syncOpenItem(this);\n }\n\n private handleTabFromOpenMenu(shiftKey: boolean): boolean {\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return false;\n }\n\n const targetIndex = shiftKey ? currentIndex - 1 : currentIndex + 1;\n const target = items[targetIndex];\n\n if (target === undefined || target === current) {\n this.closeOwnedMenu(false);\n return false;\n }\n\n const targetDirective = (target as HTMLElement & { click(): void });\n const targetOwnsMenu = target.getAttribute('aria-haspopup') === 'menu';\n\n if (targetOwnsMenu) {\n target.focus();\n targetDirective.click();\n return true;\n }\n\n this.closeOwnedMenu(false);\n target.focus();\n return true;\n }\n\n private syncHostId(): void {\n if (this.hostRef.nativeElement.id === this.id) {\n return;\n }\n\n this.hostRef.nativeElement.id = this.id;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tng-menubar.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/menubar/tng-menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;;AAKpD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;AACnE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAM/B,MAAM,OAAO,UAAU;IACJ,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IAC/D,QAAQ,GAA0B,IAAI,CAAC;IACvC,gBAAgB,GAAkB,IAAI,CAAC;IACvC,eAAe,GAAG,EAAE,CAAC;IACrB,oBAAoB,GAAyC,IAAI,CAAC;IAEjE,IAAI,GAAG,KAAK,CAAU,IAAI,gDAAC,CAAC;IAGlB,QAAQ,GAAG,SAAkB,CAAC;IAG9B,IAAI,GAAG,SAAkB,CAAC;IAG1B,eAAe,GAAG,YAAqB,CAAC;IAE3D,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAqB,kBAAkB,CAAC,CACpF,CAAC;IACJ,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,CAAC;IACzF,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACxC,MAAM,UAAU,GACd,IAAI,CAAC,OAAO,CAAc,OAAO,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;YACvD,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1D,OAAO,UAAU,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC;IAC7C,CAAC;IAED,mBAAmB;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,IAAoB;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,WAAwB,EAAE,GAAW;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,mBAAmB,GACvB,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QAEzE,IAAI,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,GAAG,aAAa,EAAE,CAAC;QAC5F,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;QAElF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC9C,KAAK,GAAG,aAAa,CAAC;YACtB,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iBAAiB,CAAC,IAAoB;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,eAAe,CAAC,IAAoB,EAAE,WAAsC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,YAAY,CAAC,IAAoB;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACxC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,gBAAgB,CACtB,KAAoC,EACpC,WAAwB,EACxB,KAAa,EACb,oBAA6B;QAE7B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,oBAAoB,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAErG,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YAE3D,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,oBAAoB,CAAC,UAAkB;QAC7C,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAElC,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC;uGAlLU,UAAU;2FAAV,UAAU;;2FAAV,UAAU;kBAJtB,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,QAAQ,EAAE,YAAY;iBACvB;;sBAUE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,WAAW;;sBAGvB,WAAW;uBAAC,uBAAuB;;AA0KtC,MAAM,OAAO,cAAc;IACR,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IACtD,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,UAAU,GACzB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC;IACjE,aAAa,GAAmB,IAAI,CAAC;IAEpC,SAAS,GAAG,KAAK,CAAiB,IAAI,sDAC7C,KAAK,EAAE,gBAAgB,GACvB,CAAC;IAGgB,QAAQ,GAAG,cAAuB,CAAC;IAGnC,IAAI,GAAG,UAAmB,CAAC;IAG3B,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;IAExC,IACc,QAAQ;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAED,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,IACc,YAAY;QACxB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAI,gBAAgB,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;QACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnE,CAAC;IAGS,OAAO;QACf,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAGS,aAAa;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAGS,YAAY;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;YAC9F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAGS,OAAO;QACf,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAGS,SAAS,CAAC,KAAoB;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,SAAS,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IACE,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,SAAS,KAAK,IAAI;YAClB,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,EACpG,CAAC;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;gBACjF,SAAS,CAAC,2BAA2B,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpH,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACxB,IAAI,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE5C,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;YAElC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,EAAE,CAAC;YACrF,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,IACE,KAAK,CAAC,GAAG,KAAK,YAAY;YAC1B,KAAK,CAAC,GAAG,KAAK,WAAW;YACzB,KAAK,CAAC,GAAG,KAAK,MAAM;YACpB,KAAK,CAAC,GAAG,KAAK,KAAK,EACnB,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrF,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,UAAU,GACd,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,WAAW,GACf,UAAU;YACR,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM;gBAChC,CAAC,CAAC,IAAI;oBACJ,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,YAAY,GAAG,CAAC;YACpB,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC;gBACpB,CAAC,CAAC,IAAI;oBACJ,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;QAEzB,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,aAAa,CAAC,WAAsC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,YAAqB;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,uBAAuB,CAAC,GAA+B;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GACd,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,WAAW,GACf,UAAU;YACR,CAAC,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM;gBAChC,CAAC,CAAC,IAAI;oBACJ,CAAC,CAAC,CAAC;oBACH,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,YAAY,GAAG,CAAC;YACpB,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC;gBACpB,CAAC,CAAC,IAAI;oBACJ,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC;QACvE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,UAAU;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAE5B,CAAC;QAEF,OAAO,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC9D,CAAC;IAEO,iBAAiB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACpF,SAAS,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAC9C,SAAS,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,SAAS,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrF,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAClG,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,qBAAqB,CAAC,QAAiB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5C,IAAI,YAAY,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAElC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,eAAe,GAAI,MAA0C,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC;QAEvE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;uGArXU,cAAc;2FAAd,cAAc;;2FAAd,cAAc;kBAJ1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,gBAAgB;iBAC3B;;sBAYE,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,WAAW;;sBAGvB,WAAW;uBAAC,SAAS;;sBAGrB,WAAW;uBAAC,eAAe;;sBAS3B,WAAW;uBAAC,oBAAoB;;sBAKhC,WAAW;uBAAC,oBAAoB;;sBAKhC,WAAW;uBAAC,oBAAoB;;sBA6BhC,YAAY;uBAAC,OAAO;;sBAWpB,YAAY;uBAAC,aAAa;;sBAS1B,YAAY;uBAAC,YAAY;;sBAgBzB,YAAY;uBAAC,OAAO;;sBAKpB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;AA2QrC;;;;;GAKG;AAKH,MAAM,OAAO,eAAe;IAEP,QAAQ,GAAG,eAAwB,CAAC;uGAF5C,eAAe;2FAAf,eAAe;;2FAAf,eAAe;kBAJ3B,SAAS;mBAAC;oBACT,QAAQ,EAAE,mBAAmB;oBAC7B,QAAQ,EAAE,iBAAiB;iBAC5B;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, ElementRef, HostBinding, HostListener, inject, input } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\n\nimport { TngMenu } from '../menu/tng-menu';\n\ntype MenubarItemElement = HTMLElement;\nconst createMenubarItemId = createTngIdFactory('tng-menubar-item');\nconst TYPEAHEAD_RESET_MS = 500;\n\n@Directive({\n selector: '[tngMenubar]',\n exportAs: 'tngMenubar',\n})\nexport class TngMenubar {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private openItem: TngMenubarItem | null = null;\n private currentTabStopId: string | null = null;\n private typeaheadBuffer = '';\n private typeaheadResetHandle: ReturnType<typeof setTimeout> | null = null;\n\n readonly loop = input<boolean>(true);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'menubar' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'menubar' as const;\n\n @HostBinding('attr.aria-orientation')\n protected readonly ariaOrientation = 'horizontal' as const;\n\n getItems(): readonly MenubarItemElement[] {\n return Array.from(\n this.hostRef.nativeElement.querySelectorAll<MenubarItemElement>('[tngMenubarItem]'),\n );\n }\n\n getEnabledItems(): readonly MenubarItemElement[] {\n return this.getItems().filter((item) => item.getAttribute('aria-disabled') !== 'true');\n }\n\n isRtl(): boolean {\n const host = this.hostRef.nativeElement;\n const nearestDir =\n host.closest<HTMLElement>('[dir]')?.getAttribute('dir') ??\n host.ownerDocument?.documentElement.getAttribute('dir');\n\n return nearestDir?.toLowerCase() === 'rtl';\n }\n\n getCurrentTabStopId(): string | null {\n const enabledItems = this.getEnabledItems();\n if (enabledItems.length === 0) {\n this.currentTabStopId = null;\n return null;\n }\n\n if (!enabledItems.some((item) => item.id === this.currentTabStopId)) {\n this.currentTabStopId = enabledItems[0]?.id ?? null;\n }\n\n return this.currentTabStopId;\n }\n\n setCurrentTabStop(item: TngMenubarItem): void {\n if (item.isDisabledItem()) {\n return;\n }\n\n this.currentTabStopId = item.getItemId();\n }\n\n hasOpenItem(): boolean {\n return this.openItem !== null;\n }\n\n isOpenItem(item: TngMenubarItem): boolean {\n return this.openItem === item;\n }\n\n findTypeaheadMatch(currentItem: HTMLElement, key: string): MenubarItemElement | null {\n const items = this.getEnabledItems();\n if (items.length === 0) {\n return null;\n }\n\n const normalizedKey = key.trim().toLowerCase();\n if (normalizedKey.length !== 1) {\n return null;\n }\n\n const repeatingSingleChar =\n this.typeaheadBuffer.length > 0 &&\n this.typeaheadBuffer.split('').every((char) => char === normalizedKey);\n\n let query = repeatingSingleChar ? normalizedKey : `${this.typeaheadBuffer}${normalizedKey}`;\n let match = this.findMatchingItem(items, currentItem, query, repeatingSingleChar);\n\n if (match === null && query !== normalizedKey) {\n query = normalizedKey;\n match = this.findMatchingItem(items, currentItem, query, true);\n }\n\n if (match === null) {\n return null;\n }\n\n this.resetTypeaheadBuffer(query);\n return match;\n }\n\n requestToggleMenu(item: TngMenubarItem): void {\n const ownedMenu = item.getOwnedMenu();\n if (ownedMenu === null || item.isDisabledItem()) {\n return;\n }\n\n if (ownedMenu.isOpen()) {\n item.closeOwnedMenu(false);\n item.focusSelf();\n return;\n }\n\n this.requestOpenMenu(item, 'none');\n }\n\n requestOpenMenu(item: TngMenubarItem, focusAction: 'none' | 'first' | 'last'): void {\n const ownedMenu = item.getOwnedMenu();\n if (ownedMenu === null || item.isDisabledItem()) {\n return;\n }\n\n if (this.openItem !== null && this.openItem !== item) {\n this.openItem.closeOwnedMenu(false);\n }\n\n this.openItem = item;\n item.openOwnedMenu(focusAction);\n }\n\n syncOpenItem(item: TngMenubarItem): void {\n if (item.getOwnedMenu()?.isOpen()) {\n this.openItem = item;\n return;\n }\n\n if (this.openItem === item) {\n this.openItem = null;\n }\n }\n\n ngOnDestroy(): void {\n if (this.typeaheadResetHandle !== null) {\n clearTimeout(this.typeaheadResetHandle);\n this.typeaheadResetHandle = null;\n }\n }\n\n private findMatchingItem(\n items: readonly MenubarItemElement[],\n currentItem: HTMLElement,\n query: string,\n cycleFromCurrentItem: boolean,\n ): MenubarItemElement | null {\n const currentIndex = items.indexOf(currentItem);\n const startIndex = cycleFromCurrentItem && currentIndex >= 0 ? (currentIndex + 1) % items.length : 0;\n\n for (let offset = 0; offset < items.length; offset += 1) {\n const index = (startIndex + offset) % items.length;\n const item = items[index];\n const label = item.textContent?.trim().toLowerCase() ?? '';\n\n if (label.startsWith(query)) {\n return item;\n }\n }\n\n return null;\n }\n\n private resetTypeaheadBuffer(nextBuffer: string): void {\n this.typeaheadBuffer = nextBuffer;\n\n if (this.typeaheadResetHandle !== null) {\n clearTimeout(this.typeaheadResetHandle);\n }\n\n this.typeaheadResetHandle = setTimeout(() => {\n this.typeaheadBuffer = '';\n this.typeaheadResetHandle = null;\n }, TYPEAHEAD_RESET_MS);\n }\n}\n\n@Directive({\n selector: '[tngMenubarItem]',\n exportAs: 'tngMenubarItem',\n})\nexport class TngMenubarItem {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly menubar = inject(TngMenubar, { host: true });\n private readonly resolvedId =\n this.hostRef.nativeElement.getAttribute('id') ?? createMenubarItemId();\n private lastOwnedMenu: TngMenu | null = null;\n\n readonly ownedMenu = input<TngMenu | null>(null, {\n alias: 'tngMenubarMenu',\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'menubar-item' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'menuitem' as const;\n\n @HostBinding('attr.id')\n protected readonly id = this.resolvedId;\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n if (this.isDisabled()) {\n return '-1';\n }\n\n return this.menubar.getCurrentTabStopId() === this.id ? '0' : '-1';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.isDisabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-haspopup')\n protected get ariaHaspopup(): 'menu' | null {\n return this.ownedMenu() === null ? null : 'menu';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n return this.ownedMenu()?.id ?? null;\n }\n\n ngOnInit(): void {\n this.syncHostId();\n this.lastOwnedMenu = this.ownedMenu();\n this.syncOwnedMenuLink();\n this.syncAriaExpanded();\n }\n\n ngDoCheck(): void {\n this.syncHostId();\n const currentOwnedMenu = this.ownedMenu();\n if (currentOwnedMenu === this.lastOwnedMenu) {\n return;\n }\n\n this.lastOwnedMenu?.clearTriggerLink(this.hostRef.nativeElement);\n this.lastOwnedMenu = currentOwnedMenu;\n this.syncOwnedMenuLink();\n this.syncAriaExpanded();\n }\n\n ngOnDestroy(): void {\n this.lastOwnedMenu?.clearTriggerLink(this.hostRef.nativeElement);\n }\n\n @HostListener('click')\n protected onClick(): void {\n if (this.ownedMenu() === null || this.isDisabled()) {\n return;\n }\n\n this.focusSelf();\n this.syncOwnedMenuLink();\n this.menubar.requestToggleMenu(this);\n }\n\n @HostListener('pointerdown')\n protected onPointerdown(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.focusSelf();\n }\n\n @HostListener('mouseenter')\n protected onMouseenter(): void {\n if (this.isDisabled()) {\n return;\n }\n\n this.menubar.setCurrentTabStop(this);\n\n if (!this.menubar.hasOpenItem() || this.menubar.isOpenItem(this) || this.ownedMenu() === null) {\n return;\n }\n\n this.syncOwnedMenuLink();\n this.menubar.requestOpenMenu(this, 'none');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.menubar.setCurrentTabStop(this);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n const ownedMenu = this.ownedMenu();\n if (!this.isDisabled() && ownedMenu?.isOpen() && event.key === 'Escape') {\n event.preventDefault();\n this.closeOwnedMenu(true);\n return;\n }\n\n if (\n !this.isDisabled() &&\n ownedMenu !== null &&\n (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown' || event.key === 'ArrowUp')\n ) {\n event.preventDefault();\n this.syncOwnedMenuLink();\n\n if (ownedMenu.isOpen() && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n ownedMenu.focusPanelAndMoveActiveItem(event.key === 'ArrowDown' ? 'next' : 'prev');\n return;\n }\n\n this.menubar.requestOpenMenu(this, event.key === 'ArrowDown' ? 'first' : event.key === 'ArrowUp' ? 'last' : 'none');\n return;\n }\n\n if (event.key === 'Tab') {\n if (ownedMenu?.isOpen()) {\n if (this.handleTabFromOpenMenu(event.shiftKey)) {\n event.preventDefault();\n }\n return;\n }\n\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n const targetIndex = event.shiftKey ? currentIndex - 1 : currentIndex + 1;\n const target = items[targetIndex];\n\n if (target === undefined) {\n return;\n }\n\n event.preventDefault();\n target.focus();\n return;\n }\n\n if (ownedMenu?.isOpen() && (event.key === 'ArrowRight' || event.key === 'ArrowLeft')) {\n event.preventDefault();\n this.handleArrowFromOpenMenu(event.key);\n return;\n }\n\n if (\n event.key !== 'ArrowRight' &&\n event.key !== 'ArrowLeft' &&\n event.key !== 'Home' &&\n event.key !== 'End'\n ) {\n if (event.key.length === 1 && !this.isDisabled()) {\n const match = this.menubar.findTypeaheadMatch(this.hostRef.nativeElement, event.key);\n if (match !== null) {\n event.preventDefault();\n match.focus();\n }\n }\n return;\n }\n\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n event.preventDefault();\n\n if (event.key === 'Home') {\n items[0]?.focus();\n return;\n }\n\n if (event.key === 'End') {\n items[items.length - 1]?.focus();\n return;\n }\n\n const loop = this.menubar.loop();\n const moveToNext =\n event.key === (this.menubar.isRtl() ? 'ArrowLeft' : 'ArrowRight');\n const targetIndex =\n moveToNext\n ? currentIndex + 1 >= items.length\n ? loop\n ? 0\n : items.length - 1\n : currentIndex + 1\n : currentIndex - 1 < 0\n ? loop\n ? items.length - 1\n : 0\n : currentIndex - 1;\n\n items[targetIndex]?.focus();\n }\n\n isDisabledItem(): boolean {\n return this.isDisabled();\n }\n\n getOwnedMenu(): TngMenu | null {\n return this.ownedMenu();\n }\n\n openOwnedMenu(focusAction: 'none' | 'first' | 'last'): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n ownedMenu.open(focusAction);\n }\n\n closeOwnedMenu(restoreFocus: boolean): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n ownedMenu.close(restoreFocus);\n }\n\n focusSelf(): void {\n this.menubar.setCurrentTabStop(this);\n this.hostRef.nativeElement.focus();\n }\n\n getItemId(): string {\n return this.id;\n }\n\n handleArrowFromOpenMenu(key: 'ArrowRight' | 'ArrowLeft'): void {\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return;\n }\n\n const moveToNext =\n key === (this.menubar.isRtl() ? 'ArrowLeft' : 'ArrowRight');\n const loop = this.menubar.loop();\n const targetIndex =\n moveToNext\n ? currentIndex + 1 >= items.length\n ? loop\n ? 0\n : items.length - 1\n : currentIndex + 1\n : currentIndex - 1 < 0\n ? loop\n ? items.length - 1\n : 0\n : currentIndex - 1;\n\n const target = items[targetIndex];\n if (target === undefined || target === current) {\n return;\n }\n\n const targetOwnsMenu = target.getAttribute('aria-haspopup') === 'menu';\n if (!targetOwnsMenu) {\n this.closeOwnedMenu(false);\n target.focus();\n return;\n }\n\n target.focus();\n target.click();\n }\n\n private isDisabled(): boolean {\n const element = this.hostRef.nativeElement as HTMLElement & {\n disabled?: boolean;\n };\n\n return element.disabled || element.hasAttribute('disabled');\n }\n\n private syncOwnedMenuLink(): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n return;\n }\n\n this.syncHostId();\n ownedMenu.setTriggerElement(this.hostRef.nativeElement, () => this.syncMenuState());\n ownedMenu.setRestoreFocusOnOutsideClick(true);\n ownedMenu.setMenubarArrowHandler((key) => this.handleArrowFromOpenMenu(key));\n ownedMenu.setMenubarTabHandler((shiftKey) => this.handleTabFromOpenMenu(shiftKey));\n }\n\n private syncAriaExpanded(): void {\n const ownedMenu = this.ownedMenu();\n if (ownedMenu === null) {\n this.hostRef.nativeElement.removeAttribute('aria-expanded');\n return;\n }\n\n this.hostRef.nativeElement.setAttribute('aria-expanded', ownedMenu.isOpen() ? 'true' : 'false');\n }\n\n private syncMenuState(): void {\n this.syncAriaExpanded();\n this.menubar.syncOpenItem(this);\n }\n\n private handleTabFromOpenMenu(shiftKey: boolean): boolean {\n const items = this.menubar.getEnabledItems();\n const current = this.hostRef.nativeElement;\n const currentIndex = items.indexOf(current);\n\n if (currentIndex < 0 || items.length === 0) {\n return false;\n }\n\n const targetIndex = shiftKey ? currentIndex - 1 : currentIndex + 1;\n const target = items[targetIndex];\n\n if (target === undefined || target === current) {\n this.closeOwnedMenu(false);\n return false;\n }\n\n const targetDirective = (target as HTMLElement & { click(): void });\n const targetOwnsMenu = target.getAttribute('aria-haspopup') === 'menu';\n\n if (targetOwnsMenu) {\n target.focus();\n targetDirective.click();\n return true;\n }\n\n this.closeOwnedMenu(false);\n target.focus();\n return true;\n }\n\n private syncHostId(): void {\n if (this.hostRef.nativeElement.id === this.id) {\n return;\n }\n\n this.hostRef.nativeElement.id = this.id;\n }\n}\n\n/**\n * Wrap each owned {@link TngMenu} and its {@link TngMenubarItem} so absolutely\n * positioned menu panels anchor to this element. The menu contract positions\n * root menus with `top: calc(100% + …)`; that percentage resolves against the\n * nearest positioned ancestor — this host provides it (see theme menubar.css).\n */\n@Directive({\n selector: '[tngMenubarGroup]',\n exportAs: 'tngMenubarGroup',\n})\nexport class TngMenubarGroup {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'menubar-group' as const;\n}\n"]}
|