@acorex/components 22.0.0-next.9 → 22.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/combo-box/README.md +35 -0
  2. package/fesm2022/acorex-components-accordion.mjs +2 -2
  3. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  4. package/fesm2022/acorex-components-action-sheet.mjs +1 -0
  5. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  6. package/fesm2022/acorex-components-alert.mjs +2 -2
  7. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  8. package/fesm2022/acorex-components-button.mjs +4 -4
  9. package/fesm2022/acorex-components-button.mjs.map +1 -1
  10. package/fesm2022/acorex-components-calendar.mjs +10 -12
  11. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  12. package/fesm2022/acorex-components-check-box.mjs +2 -2
  13. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  14. package/fesm2022/acorex-components-combo-box.mjs +783 -0
  15. package/fesm2022/acorex-components-combo-box.mjs.map +1 -0
  16. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +50 -0
  17. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +1 -0
  18. package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs → acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs} +7 -20
  19. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-DnSW908R.mjs.map +1 -0
  20. package/fesm2022/acorex-components-conversation.mjs +8966 -16359
  21. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  22. package/fesm2022/acorex-components-data-table.mjs +188 -64
  23. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  24. package/fesm2022/acorex-components-datetime-box.mjs +14 -16
  25. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  26. package/fesm2022/acorex-components-datetime-input.mjs +61 -32
  27. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  28. package/fesm2022/acorex-components-decorators.mjs +21 -5
  29. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  30. package/fesm2022/acorex-components-dialog.mjs +7 -4
  31. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  32. package/fesm2022/acorex-components-drawer.mjs +2 -2
  33. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  34. package/fesm2022/acorex-components-dropdown.mjs +4 -4
  35. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  36. package/fesm2022/acorex-components-fab.mjs +5 -5
  37. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  38. package/fesm2022/acorex-components-file-viewer.mjs +27 -27
  39. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
  40. package/fesm2022/acorex-components-form.mjs +21 -5
  41. package/fesm2022/acorex-components-form.mjs.map +1 -1
  42. package/fesm2022/acorex-components-grid-layout-builder.mjs +238 -36
  43. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  44. package/fesm2022/acorex-components-label.mjs +2 -2
  45. package/fesm2022/acorex-components-label.mjs.map +1 -1
  46. package/fesm2022/acorex-components-list.mjs +2 -2
  47. package/fesm2022/acorex-components-list.mjs.map +1 -1
  48. package/fesm2022/acorex-components-loading-dialog.mjs +59 -42
  49. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  50. package/fesm2022/acorex-components-lookup.mjs +2897 -0
  51. package/fesm2022/acorex-components-lookup.mjs.map +1 -0
  52. package/fesm2022/acorex-components-map.mjs +2 -2
  53. package/fesm2022/acorex-components-map.mjs.map +1 -1
  54. package/fesm2022/acorex-components-menu.mjs +238 -75
  55. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  56. package/fesm2022/acorex-components-notification.mjs +13 -6
  57. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  58. package/fesm2022/acorex-components-number-box.mjs +30 -29
  59. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  60. package/fesm2022/acorex-components-password-box.mjs +3 -3
  61. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  62. package/fesm2022/acorex-components-popover.mjs +40 -6
  63. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  64. package/fesm2022/acorex-components-popup.mjs +4 -2
  65. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  66. package/fesm2022/acorex-components-radio.mjs +2 -2
  67. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  68. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  69. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  70. package/fesm2022/acorex-components-scheduler.mjs +12 -22
  71. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  72. package/fesm2022/acorex-components-select-box.mjs +55 -18
  73. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  74. package/fesm2022/acorex-components-selection-list.mjs +2 -2
  75. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  76. package/fesm2022/acorex-components-switch.mjs +2 -2
  77. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  78. package/fesm2022/acorex-components-tabs.mjs +2 -2
  79. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  80. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  81. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  82. package/fesm2022/acorex-components-text-area.mjs +2 -2
  83. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  84. package/fesm2022/acorex-components-toast.mjs +9 -2
  85. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  86. package/fesm2022/acorex-components-tooltip.mjs +2 -2
  87. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  88. package/fesm2022/acorex-components-tree-view.mjs +40 -3
  89. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  90. package/lookup/README.md +74 -0
  91. package/package.json +12 -7
  92. package/select-box/README.md +5 -0
  93. package/types/acorex-components-action-sheet.d.ts +9 -1
  94. package/types/acorex-components-combo-box.d.ts +280 -0
  95. package/types/acorex-components-conversation.d.ts +947 -1354
  96. package/types/acorex-components-data-table.d.ts +47 -5
  97. package/types/acorex-components-datetime-box.d.ts +2 -0
  98. package/types/acorex-components-datetime-input.d.ts +24 -5
  99. package/types/acorex-components-decorators.d.ts +1 -0
  100. package/types/acorex-components-dialog.d.ts +9 -0
  101. package/types/acorex-components-grid-layout-builder.d.ts +34 -2
  102. package/types/acorex-components-loading-dialog.d.ts +12 -4
  103. package/types/acorex-components-lookup.d.ts +831 -0
  104. package/types/acorex-components-menu.d.ts +28 -4
  105. package/types/acorex-components-notification.d.ts +11 -1
  106. package/types/acorex-components-number-box.d.ts +3 -1
  107. package/types/acorex-components-popover.d.ts +12 -1
  108. package/types/acorex-components-popup.d.ts +9 -1
  109. package/types/acorex-components-scheduler.d.ts +2 -4
  110. package/types/acorex-components-select-box.d.ts +21 -4
  111. package/types/acorex-components-toast.d.ts +10 -1
  112. package/types/acorex-components-tree-view.d.ts +9 -1
  113. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs +0 -106
  114. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs.map +0 -1
  115. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs.map +0 -1
  116. package/fesm2022/acorex-components-selection-list-2.mjs +0 -168
  117. package/fesm2022/acorex-components-selection-list-2.mjs.map +0 -1
  118. package/selection-list-2/README.md +0 -3
  119. package/types/acorex-components-selection-list-2.d.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-menu.mjs","sources":["../../../../packages/components/menu/src/lib/menu.service.ts","../../../../packages/components/menu/src/lib/menu.types.ts","../../../../packages/components/menu/src/lib/menu-item.component.ts","../../../../packages/components/menu/src/lib/menu-item.component.html","../../../../packages/components/menu/src/lib/context-menu.component.ts","../../../../packages/components/menu/src/lib/menu.component.html","../../../../packages/components/menu/src/lib/menu.component.ts","../../../../packages/components/menu/src/lib/menu.module.ts","../../../../packages/components/menu/src/acorex-components-menu.ts"],"sourcesContent":["import { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, DOCUMENT, inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { AXMenuItemComponentBase, AXRootMenu } from './menu.types';\n\n@Injectable()\nexport class AXMenuService {\n public closeAll$: Subject<void> = new Subject();\n public open$: Subject<AXMenuItemComponentBase> = new Subject();\n public close$: Subject<AXMenuItemComponentBase> = new Subject();\n\n public openContextMenu$ = new Subject<{ sender: AXRootMenu; point: AXPoint }>();\n public closeAllContextMenu$ = new Subject<{ sender: AXRootMenu }>();\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly openItems = new Set<AXMenuItemComponentBase>();\n private globalListenersBound = false;\n private rootElement?: HTMLElement;\n private scrollableParents: HTMLElement[] = [];\n\n private readonly onDocumentClick = (event: MouseEvent) => {\n if (this.rootElement && !this.rootElement.contains(event.target as Node)) {\n this.closeAll$.next();\n }\n };\n\n private readonly onWindowOrScrollEvent = () => {\n this.closeAll$.next();\n };\n\n constructor() {\n this.closeAll$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.openItems.clear();\n });\n }\n\n /**\n * Registers a single set of document/window/scroll listeners for the whole menu tree.\n */\n initGlobalListeners(rootElement: HTMLElement) {\n if (!isPlatformBrowser(this.platformId) || this.globalListenersBound) {\n return;\n }\n this.globalListenersBound = true;\n this.rootElement = rootElement;\n\n this.document.addEventListener('click', this.onDocumentClick);\n window.addEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n window.addEventListener('resize', this.onWindowOrScrollEvent);\n\n this.scrollableParents = AXHtmlUtil.getScrollableParents(rootElement);\n this.scrollableParents.forEach((parent) => {\n parent.addEventListener('scroll', this.onWindowOrScrollEvent);\n });\n\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('click', this.onDocumentClick);\n window.removeEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n window.removeEventListener('resize', this.onWindowOrScrollEvent);\n this.scrollableParents.forEach((parent) => {\n parent.removeEventListener('scroll', this.onWindowOrScrollEvent);\n });\n });\n }\n\n /**\n * Closes open submenus that are not on the ancestor path of the item being opened.\n */\n closeExcept(opener: AXMenuItemComponentBase) {\n const keepOpen = new Set<AXMenuItemComponentBase>();\n let current: AXMenuItemComponentBase | null | undefined = opener;\n while (current) {\n keepOpen.add(current);\n current = current.getParentMenuItem?.() ?? current.parent ?? null;\n }\n\n for (const openItem of [...this.openItems]) {\n if (!keepOpen.has(openItem)) {\n this.markClosed(openItem);\n }\n }\n }\n\n markOpen(item: AXMenuItemComponentBase) {\n this.openItems.add(item);\n this.open$.next(item);\n }\n\n markClosed(item: AXMenuItemComponentBase) {\n this.openItems.delete(item);\n this.close$.next(item);\n }\n}\n","import { AXOrientation, AXStyleColorType, NXClickEvent, NXComponent } from '@acorex/cdk/common';\nimport { OutputEmitterRef, WritableSignal } from '@angular/core';\nimport { IsActiveMatchOptions, UrlTree } from '@angular/router';\n\nexport type AXMenuOpenTrigger = 'click' | 'hover';\nexport type AXMenuCloseTrigger = 'click' | 'leave';\n\nexport abstract class AXRootMenu {\n orientation: WritableSignal<AXOrientation>;\n openOn: WritableSignal<AXMenuOpenTrigger>;\n closeOn: WritableSignal<AXMenuCloseTrigger>;\n onItemClick: OutputEmitterRef<AXMenuItemClickBaseEvent>;\n nativeElement: HTMLDivElement;\n hasArrow: WritableSignal<boolean>;\n}\n\nexport abstract class AXMenuItemComponentBase {\n parent?: AXMenuItemComponentBase | null;\n\n /** Resolves the parent item, including for `ngTemplateOutlet`-created nested items. */\n getParentMenuItem?(): AXMenuItemComponentBase | null | undefined;\n}\n\n/** Shared tree item shape for `ax-menu`, `ax-context-menu`, and `ax-side-menu`. */\nexport interface AXMenuItem {\n text: string;\n name?: string;\n icon?: string;\n data?: unknown;\n disabled?: boolean;\n items?: AXMenuItem[];\n color?: AXStyleColorType;\n suffix?: {\n text: string;\n };\n /** Side-menu alias for `suffix.text`. */\n suffixText?: string;\n break?: boolean;\n group?: {\n name?: string;\n title?: string;\n };\n title?: string;\n routerLink?: string | any[] | UrlTree;\n routerLinkActive?: string | string[];\n routerLinkActiveOptions?: { exact: boolean } | IsActiveMatchOptions;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n active?: boolean;\n isLoading?: boolean;\n isCollapsed?: boolean;\n toggleOnClick?: boolean;\n}\n\nexport class AXMenuItemClickBaseEvent<T extends NXComponent = NXComponent> extends NXClickEvent<T> {\n item: {\n name?: string;\n text: string;\n data?: any;\n };\n canceled = false;\n}\n","import { AXComponent, AXStyleColorType, NXComponent } from '@acorex/cdk/common';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuItemClickBaseEvent, AXMenuItemComponentBase, AXRootMenu } from './menu.types';\n\nexport type AXMenuItemClickEvent = AXMenuItemClickBaseEvent<AXMenuItemComponent>;\n\n/**\n * Represents a menu item component used within an `ax-menu`.\n * @category Components\n */\n@Component({\n selector: 'ax-menu-item',\n templateUrl: './menu-item.component.html',\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n {\n provide: AXMenuItemComponentBase,\n useExisting: AXMenuItemComponent,\n },\n AXUnsubscriber,\n {\n provide: AXComponent,\n useExisting: AXMenuItemComponent,\n },\n ],\n})\nexport class AXMenuItemComponent extends NXComponent implements OnDestroy {\n protected isOpen = signal(false);\n\n readonly parent = inject(AXMenuItemComponent, { optional: true, skipSelf: true });\n\n protected isFirstLevel = computed(() => this.getParentMenuItem() == null);\n\n private readonly childMenuItems = contentChildren(AXMenuItemComponent, { descendants: false });\n private readonly discoveredSubmenuNodeCount = signal(0);\n private readonly submenuSlot = viewChild<ElementRef<HTMLElement>>('submenuSlot');\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private childObserver: MutationObserver | null = null;\n private childRefreshScheduled = false;\n\n /**\n * Nested items from the data model. Required for recursive `ngTemplateOutlet` templates\n * because `contentChildren` does not traverse those embedded views.\n */\n subItems = input<readonly unknown[]>([]);\n\n protected hasSubItems = computed(\n () =>\n (this.subItems()?.length ?? 0) > 0 || this.childMenuItems().length > 0 || this.discoveredSubmenuNodeCount() > 0,\n );\n\n protected root = inject(AXRootMenu);\n\n private service = inject(AXMenuService);\n\n private unsuscriber = inject(AXUnsubscriber);\n private renderer = inject(Renderer2);\n private injector = inject(Injector);\n private zIndexService = inject(AXZIndexService);\n private zToken: AXZToken | null = null;\n\n protected arrowIcon = computed<string>(() => {\n const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n return this.root.orientation() == 'horizontal' && this.isFirstLevel()\n ? 'ax-icon-chevron-down'\n : isRtl\n ? 'ax-icon-chevron-left'\n : 'ax-icon-chevron-right';\n });\n\n onClick = output<AXMenuItemClickEvent>();\n\n name = input<string>();\n data = input<any>();\n disabled = input<boolean>();\n color = input<AXStyleColorType>();\n\n constructor() {\n super();\n\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n this.reparentOrphanedChildren();\n this.updateDiscoveredSubmenuNodeCount();\n this.childObserver = new MutationObserver((records) => {\n if (!this.hasRelevantChildMutation(records)) {\n return;\n }\n this.scheduleChildRefresh();\n });\n this.childObserver.observe(this.nativeElement, { childList: true, subtree: true });\n this.destroyRef.onDestroy(() => this.childObserver?.disconnect());\n });\n\n this.service.closeAll$.pipe(this.unsuscriber.takeUntilDestroy).subscribe(() => this.close());\n\n this.service.open$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n if ((this as any) === item) {\n this.isOpen.set(true);\n this.schedulePositionCalculation();\n }\n });\n\n this.service.close$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n if ((this as any) == item) {\n this.isOpen.set(false);\n }\n });\n }\n\n private getText(): string {\n return this.nativeElement.querySelector<HTMLDivElement>('ax-text')?.innerText;\n }\n\n /**\n * Resolves the parent menu item. Items rendered via recursive `ngTemplateOutlet` do not\n * receive a DI parent, so we fall back to the DOM tree after reparenting.\n */\n getParentMenuItem(): AXMenuItemComponent | null {\n if (this.parent) {\n return this.parent;\n }\n\n const parentHost = this.nativeElement.parentElement?.closest('ax-menu-item');\n if (!parentHost || parentHost === this.nativeElement) {\n return null;\n }\n\n const ctx = (parentHost as HTMLElement & { __axContext__?: unknown }).__axContext__;\n return ctx instanceof AXMenuItemComponent ? ctx : null;\n }\n\n /**\n * Opens the submenu of this menu item if it has sub-items and is not disabled.\n */\n open() {\n if (this.disabled() || !this.hasSubItems()) {\n return;\n }\n\n this.reparentOrphanedChildren();\n this.service.closeExcept(this);\n\n if (!this.zToken) {\n this.zToken = this.zIndexService.acquire();\n }\n this.service.markOpen(this);\n }\n\n /**\n * Closes the submenu of this menu item if open.\n */\n close() {\n this.service.markClosed(this);\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n }\n\n /**\n * Positions the submenu after layout so nested levels measure their full height.\n */\n private schedulePositionCalculation() {\n afterNextRender(\n () => {\n if (this.isOpen()) {\n this.calculatePosition();\n afterNextRender(\n () => {\n if (this.isOpen()) {\n this.calculatePosition();\n }\n },\n { injector: this.injector },\n );\n }\n },\n { injector: this.injector },\n );\n }\n\n /**\n * Calculate the position of the submenu to avoid it going out of the viewport.\n */\n private calculatePosition() {\n const submenu = this.submenuSlot()?.nativeElement;\n if (!submenu) return;\n\n const submenuRect = this.measureSubmenuRect(submenu);\n const itemRect = this.nativeElement.getBoundingClientRect();\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n\n let finalTop: number;\n let finalLeft: number;\n\n const preferredTop =\n this.isFirstLevel() && this.root.orientation() === 'horizontal' ? itemRect.bottom : itemRect.top;\n\n const alternateTop = itemRect.top - submenuRect.height;\n\n if (preferredTop + submenuRect.height <= windowHeight) {\n finalTop = preferredTop;\n } else if (alternateTop >= 0) {\n finalTop = alternateTop;\n } else {\n finalTop = windowHeight - submenuRect.height;\n }\n\n finalTop = this.clampVerticalPosition(finalTop, submenuRect.height, windowHeight);\n\n if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {\n const preferredLeft = isRtl ? itemRect.right - submenuRect.width : itemRect.left;\n const alternateLeft = isRtl ? itemRect.left : itemRect.right - submenuRect.width;\n\n if (preferredLeft >= 0 && preferredLeft + submenuRect.width <= windowWidth) {\n finalLeft = preferredLeft;\n } else {\n finalLeft = Math.max(0, Math.min(alternateLeft, windowWidth - submenuRect.width));\n }\n } else {\n const preferredLeftRtl = itemRect.left - submenuRect.width;\n const alternateLeftRtl = itemRect.right;\n\n const preferredLeftLtr = itemRect.right;\n const alternateLeftLtr = itemRect.left - submenuRect.width;\n\n if (isRtl) {\n if (preferredLeftRtl >= 0) {\n finalLeft = preferredLeftRtl;\n } else if (alternateLeftRtl + submenuRect.width <= windowWidth) {\n finalLeft = alternateLeftRtl;\n } else {\n finalLeft = 0;\n }\n } else {\n if (preferredLeftLtr + submenuRect.width <= windowWidth) {\n finalLeft = preferredLeftLtr;\n } else if (alternateLeftLtr >= 0) {\n finalLeft = alternateLeftLtr;\n } else {\n finalLeft = windowWidth - submenuRect.width;\n }\n }\n }\n\n const isNestedMenu = !(this.isFirstLevel() && this.root.orientation() === 'horizontal');\n if (isNestedMenu) {\n const overlapsParent = finalLeft < itemRect.right && itemRect.left < finalLeft + submenuRect.width;\n if (overlapsParent) {\n const shiftedTop = itemRect.bottom;\n if (shiftedTop + submenuRect.height <= windowHeight) {\n finalTop = shiftedTop;\n }\n }\n }\n\n finalTop = this.clampVerticalPosition(finalTop, submenuRect.height, windowHeight);\n\n this.renderer.setStyle(submenu, 'position', 'fixed');\n this.renderer.setStyle(submenu, 'top', `${finalTop}px`);\n this.renderer.setStyle(submenu, 'left', `${finalLeft}px`);\n if (this.zToken) {\n this.renderer.setStyle(submenu, 'z-index', String(this.zToken.zIndex));\n }\n }\n\n /** Measures submenu size using the same flex layout as the rendered menu. */\n private measureSubmenuRect(submenu: HTMLElement): DOMRect {\n this.renderer.setStyle(submenu, 'visibility', 'hidden');\n this.renderer.setStyle(submenu, 'display', 'flex');\n const rect = submenu.getBoundingClientRect();\n this.renderer.removeStyle(submenu, 'visibility');\n this.renderer.removeStyle(submenu, 'display');\n return rect;\n }\n\n /**\n * Moves nested `ax-menu-item` nodes rendered by recursive `ngTemplateOutlet` templates\n * into the submenu slot. Angular content queries do not traverse those embedded views.\n */\n private reparentOrphanedChildren() {\n const container = this.submenuSlot()?.nativeElement;\n if (!container) {\n return;\n }\n\n for (const el of this.getDirectSubmenuNodes()) {\n if (!container.contains(el)) {\n try {\n container.appendChild(el);\n } catch {\n // HierarchyRequestError when the node is already being moved.\n }\n }\n }\n }\n\n /**\n * Nested submenu nodes rendered by custom recursive templates (direct children of this item only).\n */\n private getDirectSubmenuNodes(): HTMLElement[] {\n return Array.from(this.nativeElement.querySelectorAll<HTMLElement>('ax-menu-item, ax-title, ax-divider')).filter(\n (el) => {\n if (el === this.nativeElement) {\n return false;\n }\n\n if (el.tagName === 'AX-MENU-ITEM') {\n return el.parentElement?.closest('ax-menu-item') === this.nativeElement;\n }\n\n return el.closest('ax-menu-item') === this.nativeElement;\n },\n );\n }\n\n private updateDiscoveredSubmenuNodeCount() {\n this.discoveredSubmenuNodeCount.set(this.getDirectSubmenuNodes().length);\n }\n\n private scheduleChildRefresh() {\n if (this.childRefreshScheduled) {\n return;\n }\n this.childRefreshScheduled = true;\n requestAnimationFrame(() => {\n this.childRefreshScheduled = false;\n this.reparentOrphanedChildren();\n this.updateDiscoveredSubmenuNodeCount();\n });\n }\n\n private hasRelevantChildMutation(records: MutationRecord[]): boolean {\n for (const record of records) {\n if (\n this.nodeListContainsMenuStructuralNode(record.addedNodes) ||\n this.nodeListContainsMenuStructuralNode(record.removedNodes)\n ) {\n return true;\n }\n }\n return false;\n }\n\n private nodeListContainsMenuStructuralNode(nodes: NodeList): boolean {\n for (const node of Array.from(nodes)) {\n if (!(node instanceof Element)) {\n continue;\n }\n const tagName = node.tagName;\n if (tagName === 'AX-MENU-ITEM' || tagName === 'AX-TITLE' || tagName === 'AX-DIVIDER') {\n return true;\n }\n if (node.querySelector?.('ax-menu-item,ax-title,ax-divider')) {\n return true;\n }\n }\n return false;\n }\n\n /** Keeps the submenu fully inside the viewport vertically. */\n private clampVerticalPosition(top: number, height: number, windowHeight: number): number {\n if (top + height > windowHeight) {\n top = windowHeight - height;\n }\n if (top < 0) {\n top = 0;\n }\n return top;\n }\n\n @HostListener('click', ['$event'])\n handleClick(e: MouseEvent) {\n e.stopPropagation();\n if (this.disabled()) return;\n\n const event = {\n sender: this,\n nativeEvent: e,\n canceled: false,\n item: {\n name: this.name(),\n text: this.getText(),\n data: this.data(),\n },\n } as AXMenuItemClickEvent;\n\n this.onClick.emit(event);\n this.root.onItemClick.emit({ ...event, ...{ sender: this.root as any } });\n\n if (this.hasSubItems() && !event.canceled) {\n this.open();\n } else if (!event.canceled) {\n this.service.closeAll$.next();\n this.service.closeAllContextMenu$.next({ sender: this.root });\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n handleMouseEnter(event: MouseEvent) {\n event.stopPropagation();\n if (this.mouseLeaveTimeout) {\n clearTimeout(this.mouseLeaveTimeout);\n this.mouseLeaveTimeout = null;\n }\n if (!this.isFirstLevel() || this.root.openOn() == 'hover') {\n this.open();\n }\n }\n\n private mouseLeaveTimeout: ReturnType<typeof setTimeout> | null = null;\n\n @HostListener('mouseleave', ['$event'])\n handleMouseLeave(event: MouseEvent) {\n event.stopPropagation();\n\n if (!this.hasSubItems() || this.root.closeOn() !== 'leave') {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n if (relatedTarget instanceof Node && this.containsSubmenuPointer(relatedTarget)) {\n return;\n }\n\n if (this.mouseLeaveTimeout) {\n clearTimeout(this.mouseLeaveTimeout);\n }\n\n this.mouseLeaveTimeout = setTimeout(() => {\n this.close();\n }, 500);\n }\n\n /** True when the pointer moved into this item's submenu panel or a nested open submenu. */\n private containsSubmenuPointer(node: Node): boolean {\n const submenu = this.submenuSlot()?.nativeElement;\n if (submenu?.contains(node)) {\n return true;\n }\n\n if (this.nativeElement.contains(node)) {\n return true;\n }\n\n return this.getDirectSubmenuNodes().some((child) => child.contains(node));\n }\n\n ngOnDestroy() {\n if (this.isOpen()) {\n this.close();\n }\n }\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): string[] {\n const list: string[] = ['ax-action-item'];\n if (this.disabled()) {\n list.push('ax-state-disabled');\n }\n list.push(`${this.color() ?? 'ax-default'}`);\n\n return list;\n }\n}\n","<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems() && (!isFirstLevel() || root.hasArrow())) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} \"></i>\n }\n</div>\n<div\n #submenuSlot\n class=\"ax-menu-items ax-action-list ax-action-list-vertical\"\n [class.ax-state-open]=\"isOpen()\"\n>\n <ng-content select=\"ax-menu-item,ax-title,ax-divider,ng-container,[ngTemplateOutlet]\"></ng-content>\n</div>\n","import { AXComponent, AXOrientation, NXComponent, NXEvent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { isBrowser } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { AsyncPipe, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n DestroyRef,\n DOCUMENT,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationStart, Router } from '@angular/router';\nimport { cloneDeep } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport class AXContextMenuOpeningEvent extends NXEvent<AXContextMenuComponent> {\n items: AXMenuItem[];\n canceled = false;\n targetElement: HTMLElement;\n}\nexport type AXContextMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXContextMenuComponent>;\n\n/**\n * Represents a menu component that displays context menu.\n * @category Components\n */\n@Component({\n selector: 'ax-context-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css'],\n\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXMenuService,\n {\n provide: AXRootMenu,\n useExisting: AXContextMenuComponent,\n },\n {\n provide: AXComponent,\n useExisting: AXContextMenuComponent,\n },\n ],\n imports: [\n NgTemplateOutlet,\n AXDecoratorGenericComponent,\n AXMenuItemComponent,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n ],\n})\nexport class AXContextMenuComponent extends NXComponent {\n // Inputs and Outputs\n\n readonly orientation = input<AXOrientation>('vertical');\n readonly openOn = input<AXMenuOpenTrigger>('hover');\n readonly closeOn = input<AXMenuCloseTrigger>('click');\n /** When true, closes the menu on router navigation (e.g. side-menu route changes). */\n readonly closeOnRouteChange = input(false);\n readonly originalItems = input<AXMenuItem[]>([], { alias: 'items' });\n readonly target = input<HTMLElement | HTMLElement[] | string>();\n\n onItemClick = output<AXContextMenuItemsClickEvent>();\n onOpening = output<AXContextMenuOpeningEvent>();\n /** Emitted when the menu closes (backdrop, item click, scroll, another menu opening, etc.). */\n onClose = output<void>();\n\n hasArrow = signal<boolean>(true);\n\n // Injected Services\n\n private service = inject(AXMenuService);\n private renderer = inject(Renderer2);\n private document = inject(DOCUMENT);\n private platformID = inject(PLATFORM_ID);\n private zIndexService = inject(AXZIndexService);\n private injector = inject(Injector);\n private zToken: AXZToken | null = null;\n private lastOpenPoint: AXPoint | null = null;\n private router = inject(Router, { optional: true });\n private destroyRef = inject(DestroyRef);\n\n // Constructor (Dependency Injection)\n\n /** @ignore */\n constructor() {\n super();\n //\n afterNextRender(() => {\n this.bindContextEvent();\n this.service.initGlobalListeners(this.nativeElement);\n });\n\n this.setupCloseOnRouteChange();\n\n this.service.closeAllContextMenu$.subscribe(() => {\n this.service.closeAll$.next();\n this.close();\n });\n\n this.service.openContextMenu$.subscribe((e) => {\n if ((e.sender as any) == this) {\n this.internalShowAt(e.point);\n }\n });\n }\n\n // Lifecycle Hooks\n\n ngOnDestroy() {\n if (isBrowser()) {\n this.removeContextEvent();\n }\n }\n\n /**\n * Refreshes the context menu by rebinding event listeners to target elements.\n */\n refresh() {\n this.bindContextEvent();\n }\n\n /**\n * Shows the context menu at a specific point.\n * @param point - The coordinates where the menu should appear\n * @param targetElement - Optional target element for the context menu\n * @param event - Optional opening event with menu items\n */\n showAt(point: AXPoint, targetElement?: HTMLElement, event?: AXContextMenuOpeningEvent) {\n const sender = this as any as AXRootMenu;\n this.service.closeAllContextMenu$.next({ sender });\n if (isPlatformBrowser(this.platformID)) {\n if (!targetElement) {\n targetElement = this.document.elementFromPoint(point.x, point.y) as HTMLElement;\n }\n if (!event) {\n event = {\n sender: this,\n canceled: false,\n targetElement: targetElement,\n items: cloneDeep(this.originalItems()),\n };\n if (event.canceled) return;\n }\n this.onOpening.emit(event);\n this.items.set(event.items);\n }\n this.service.openContextMenu$.next({ sender, point });\n }\n\n /**\n * Closes the context menu and removes the backdrop.\n */\n close() {\n const wasOpen = this.nativeElement.classList.contains('ax-state-open');\n this.nativeElement.classList.remove('ax-state-open');\n this.lastOpenPoint = null;\n // Drop rendered items before moving DOM nodes back to the original parent.\n // This prevents a large menu tree from being re-parented/removed as a single heavy DOM operation.\n if (wasOpen) {\n this.items.set([]);\n }\n this.removeBackdrop();\n // Release z-index token\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n if (wasOpen) {\n this.onClose.emit();\n }\n }\n\n // Private Properties\n\n private backdropElement!: HTMLElement;\n private originalNextSibling: Node | null = null;\n private originalParent: HTMLElement | null = null;\n\n protected items = signal<AXMenuItem[]>([]);\n\n // Private Methods (Internal Logic)\n\n /** @ignore */\n private setupCloseOnRouteChange() {\n if (!this.router || !isPlatformBrowser(this.platformID)) {\n return;\n }\n\n this.router.events\n .pipe(\n filter((event): event is NavigationStart => event instanceof NavigationStart),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n if (this.closeOnRouteChange()) {\n this.close();\n }\n });\n }\n\n /** @ignore */\n private getTargetElements(): HTMLElement[] {\n if (isPlatformBrowser(this.platformID)) {\n const elements: HTMLElement[] =\n typeof this.target() == 'string'\n ? Array.from(this.document.querySelectorAll<HTMLElement>(this.target() as string))\n : Array.isArray(this.target())\n ? (this.target() as HTMLElement[])\n : [this.target() as HTMLElement];\n\n return elements;\n }\n return null;\n }\n\n /** @ignore */\n private bindContextEvent() {\n this.getTargetElements().forEach((e) => {\n e?.addEventListener('contextmenu', this.handleContextMenu.bind(this));\n });\n }\n\n /** @ignore */\n private removeContextEvent() {\n this.getTargetElements().forEach((e) => {\n e?.removeEventListener('contextmenu', this.handleContextMenu.bind(this));\n });\n }\n\n /** @ignore */\n private handleContextMenu(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n //\n if (isPlatformBrowser(this.platformID)) {\n const elementsUnderMouse = this.document.elementsFromPoint(e.x, e.y) as HTMLElement[];\n const targetElements = this.getTargetElements();\n const targetElement = elementsUnderMouse.find((target) => targetElements.includes(target));\n //\n const event: AXContextMenuOpeningEvent = {\n sender: this,\n canceled: false,\n targetElement: targetElement,\n items: cloneDeep(this.originalItems()),\n };\n //\n if (!event.canceled) {\n this.showAt({ x: e.clientX, y: e.clientY }, targetElement, event);\n }\n }\n }\n\n /** @ignore */\n private internalShowAt(point: AXPoint) {\n this.lastOpenPoint = point;\n const elementRef = this.nativeElement;\n elementRef.classList.add('ax-state-open');\n this.positionAtPoint(point);\n this.createBackdrop();\n\n // Items may render after the signal update (e.g. compact side-menu); reposition once laid out.\n afterNextRender(\n () => {\n if (this.lastOpenPoint && elementRef.classList.contains('ax-state-open')) {\n this.positionAtPoint(this.lastOpenPoint);\n }\n },\n { injector: this.injector },\n );\n }\n\n /**\n * Positions the menu at `point`, flipping when it would overflow the viewport.\n * Uses a temporary visible layout pass so parents that hide the host (e.g. side-menu `display: none`) do not yield a zero-sized rect.\n */\n private positionAtPoint(point: AXPoint) {\n const elementRef = this.nativeElement;\n const itemRect = this.measureMenuRect(elementRef);\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const isRtl = AXHtmlUtil.isRtl(elementRef);\n\n let left: number;\n if (isRtl) {\n left = point.x - itemRect.width;\n if (left < 0) {\n left = point.x;\n }\n } else {\n left = point.x;\n if (left + itemRect.width > windowWidth) {\n left = point.x - itemRect.width;\n }\n }\n\n const bottom = point.y + itemRect.height;\n let top: number;\n\n if (bottom > windowHeight) {\n top = point.y - itemRect.height;\n if (top < 0) {\n top = 0;\n }\n } else {\n top = point.y;\n }\n\n this.renderer.setStyle(elementRef, 'left', `${left}px`);\n this.renderer.setStyle(elementRef, 'top', `${top}px`);\n this.renderer.setStyle(elementRef, 'position', 'fixed');\n }\n\n /** Measures menu size even when an ancestor hides the host with `display: none`. */\n private measureMenuRect(elementRef: HTMLElement): DOMRect {\n this.renderer.setStyle(elementRef, 'visibility', 'hidden');\n this.renderer.setStyle(elementRef, 'display', 'flex');\n const rect = elementRef.getBoundingClientRect();\n this.renderer.removeStyle(elementRef, 'visibility');\n this.renderer.removeStyle(elementRef, 'display');\n return rect;\n }\n\n /** @ignore */\n private createBackdrop() {\n if (!this.originalParent) {\n this.originalParent = this.nativeElement.parentElement;\n this.originalNextSibling = this.nativeElement.nextSibling;\n }\n\n // Acquire z-index token\n this.zToken = this.zIndexService.acquire();\n\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.backdropElement, 'position', 'fixed');\n this.renderer.setStyle(this.backdropElement, 'top', '0');\n this.renderer.setStyle(this.backdropElement, 'left', '0');\n this.renderer.setStyle(this.backdropElement, 'width', '100%');\n this.renderer.setStyle(this.backdropElement, 'height', '100%');\n this.renderer.setStyle(this.backdropElement, 'z-index', String(this.zToken.zIndex));\n this.renderer.setStyle(this.backdropElement, 'background', 'transparent');\n\n this.createEventListeners(this.backdropElement);\n\n this.document.body.appendChild(this.backdropElement);\n this.backdropElement.appendChild(this.nativeElement);\n }\n\n /** @ignore */\n private removeBackdrop() {\n if (this.backdropElement) {\n if (this.originalParent) {\n this.renderer.insertBefore(this.originalParent, this.nativeElement, this.originalNextSibling);\n }\n if (this.backdropElement.parentNode) {\n this.renderer.removeChild(this.backdropElement.parentNode, this.backdropElement);\n }\n this.backdropElement = null;\n }\n }\n\n private createEventListeners(el: HTMLElement) {\n const l1 = this.renderer.listen(el, 'click', () => {\n this.close();\n l1();\n });\n\n const l2 = this.renderer.listen(el, 'wheel', () => {\n this.close();\n l2();\n });\n\n const l3 = this.renderer.listen(el, 'contextmenu', (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const x = e.clientX;\n const y = e.clientY;\n\n // Close first so the full-screen backdrop is gone; otherwise the next target never\n // receives contextmenu (conversation list / message list / etc.).\n this.close();\n\n if (isPlatformBrowser(this.platformID)) {\n requestAnimationFrame(() => {\n const under = this.document.elementFromPoint(x, y) as HTMLElement | null;\n if (!under || under === this.document.body || under === this.document.documentElement) {\n return;\n }\n const forward = new MouseEvent('contextmenu', {\n bubbles: true,\n cancelable: true,\n view: this.document.defaultView ?? undefined,\n clientX: x,\n clientY: y,\n screenX: e.screenX,\n screenY: e.screenY,\n button: 2,\n buttons: 2,\n });\n under.dispatchEvent(forward);\n });\n }\n\n l3();\n });\n }\n\n // Host Listeners (UI Interaction Handling)\n\n /** @ignore */\n @HostListener('window:scroll')\n @HostListener('window:resize')\n onWindowEvent() {\n const sender = this as any as AXRootMenu;\n this.service.closeAllContextMenu$.next({ sender: sender }); // Close all menus on scroll or resize\n }\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): any {\n return ['ax-menu-container', `ax-orientation-${this.orientation()}`, 'ax-action-list', 'ax-action-list-vertical'];\n }\n}\n","<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n","import { AXComponent, AXOrientation, NXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { afterNextRender, Component, HostBinding, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport type AXMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXMenuComponent>;\n\n/**\n * Represents a menu component that displays menu items.\n * @category Components\n */\n@Component({\n selector: 'ax-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css'],\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n AXMenuService,\n {\n provide: AXRootMenu,\n useExisting: AXMenuComponent,\n },\n {\n provide: AXComponent,\n useExisting: AXMenuComponent,\n },\n ],\n imports: [\n NgTemplateOutlet,\n AXDecoratorGenericComponent,\n AXMenuItemComponent,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n ],\n})\nexport class AXMenuComponent extends NXComponent {\n constructor() {\n super();\n afterNextRender(() => {\n this.service.initGlobalListeners(this.nativeElement);\n });\n }\n\n orientation = input<AXOrientation>('horizontal');\n\n openOn = input<AXMenuOpenTrigger>('hover');\n\n closeOn = input<AXMenuCloseTrigger>('leave');\n\n service = inject(AXMenuService);\n\n onItemClick = output<AXMenuItemsClickEvent>();\n\n items = input<AXMenuItem[]>([]);\n\n hasArrow = input<boolean>(true);\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): string[] {\n return [\n 'ax-root-menu',\n 'ax-action-list',\n `ax-action-list-${this.orientation()}`,\n `${!this.hasArrow() ? 'ax-hide-arrow' : ''}`,\n ];\n }\n\n /**\n * Closes all open menus and submenus for this root menu.\n *\n * @returns void - No return value. All open menu overlays are closed and hidden.\n */\n public close() {\n this.service.closeAll$.next();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXContextMenuComponent } from './context-menu.component';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuComponent } from './menu.component';\n\n@NgModule({\n imports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n exports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n})\nexport class AXMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-menu.mjs","sources":["../../../../packages/components/menu/src/lib/menu.service.ts","../../../../packages/components/menu/src/lib/menu.types.ts","../../../../packages/components/menu/src/lib/menu-viewport.ts","../../../../packages/components/menu/src/lib/menu-item.component.ts","../../../../packages/components/menu/src/lib/menu-item.component.html","../../../../packages/components/menu/src/lib/context-menu.component.ts","../../../../packages/components/menu/src/lib/menu.component.html","../../../../packages/components/menu/src/lib/menu.component.ts","../../../../packages/components/menu/src/lib/menu.module.ts","../../../../packages/components/menu/src/acorex-components-menu.ts"],"sourcesContent":["import { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { isPlatformBrowser } from '@angular/common';\nimport { DestroyRef, DOCUMENT, inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Subject } from 'rxjs';\nimport { AXMenuItemComponentBase, AXRootMenu } from './menu.types';\n\n@Injectable()\nexport class AXMenuService {\n public closeAll$: Subject<void> = new Subject();\n public open$: Subject<AXMenuItemComponentBase> = new Subject();\n public close$: Subject<AXMenuItemComponentBase> = new Subject();\n\n public openContextMenu$ = new Subject<{ sender: AXRootMenu; point: AXPoint }>();\n public closeAllContextMenu$ = new Subject<{ sender: AXRootMenu }>();\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n\n private readonly openItems = new Set<AXMenuItemComponentBase>();\n private globalListenersBound = false;\n private rootElement?: HTMLElement;\n private scrollableParents: HTMLElement[] = [];\n\n private readonly onDocumentClick = (event: MouseEvent) => {\n if (this.rootElement && !this.rootElement.contains(event.target as Node)) {\n this.closeAll$.next();\n }\n };\n\n private readonly onWindowOrScrollEvent = () => {\n this.closeAll$.next();\n };\n\n constructor() {\n this.closeAll$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.openItems.clear();\n });\n }\n\n /**\n * Registers a single set of document/window/scroll listeners for the whole menu tree.\n */\n initGlobalListeners(rootElement: HTMLElement) {\n if (!isPlatformBrowser(this.platformId) || this.globalListenersBound) {\n return;\n }\n this.globalListenersBound = true;\n this.rootElement = rootElement;\n\n this.document.addEventListener('click', this.onDocumentClick);\n window.addEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n window.addEventListener('resize', this.onWindowOrScrollEvent);\n\n this.scrollableParents = AXHtmlUtil.getScrollableParents(rootElement);\n this.scrollableParents.forEach((parent) => {\n parent.addEventListener('scroll', this.onWindowOrScrollEvent);\n });\n\n this.destroyRef.onDestroy(() => {\n this.document.removeEventListener('click', this.onDocumentClick);\n window.removeEventListener('scroll', this.onWindowOrScrollEvent, { capture: true });\n window.removeEventListener('resize', this.onWindowOrScrollEvent);\n this.scrollableParents.forEach((parent) => {\n parent.removeEventListener('scroll', this.onWindowOrScrollEvent);\n });\n });\n }\n\n /**\n * Closes open submenus that are not on the ancestor path of the item being opened.\n */\n closeExcept(opener: AXMenuItemComponentBase) {\n const keepOpen = new Set<AXMenuItemComponentBase>();\n let current: AXMenuItemComponentBase | null | undefined = opener;\n while (current) {\n keepOpen.add(current);\n current = current.getParentMenuItem?.() ?? current.parent ?? null;\n }\n\n for (const openItem of [...this.openItems]) {\n if (!keepOpen.has(openItem)) {\n this.markClosed(openItem);\n }\n }\n }\n\n markOpen(item: AXMenuItemComponentBase) {\n this.openItems.add(item);\n this.open$.next(item);\n }\n\n markClosed(item: AXMenuItemComponentBase) {\n this.openItems.delete(item);\n this.close$.next(item);\n }\n}\n","import { AXOrientation, AXStyleColorType, NXClickEvent, NXComponent } from '@acorex/cdk/common';\nimport { OutputEmitterRef, WritableSignal } from '@angular/core';\nimport { IsActiveMatchOptions, UrlTree } from '@angular/router';\n\nexport type AXMenuOpenTrigger = 'click' | 'hover';\nexport type AXMenuCloseTrigger = 'click' | 'leave';\n\nexport abstract class AXRootMenu {\n orientation: WritableSignal<AXOrientation>;\n openOn: WritableSignal<AXMenuOpenTrigger>;\n closeOn: WritableSignal<AXMenuCloseTrigger>;\n onItemClick: OutputEmitterRef<AXMenuItemClickBaseEvent>;\n nativeElement: HTMLDivElement;\n hasArrow: WritableSignal<boolean>;\n}\n\nexport abstract class AXMenuItemComponentBase {\n parent?: AXMenuItemComponentBase | null;\n\n /** Resolves the parent item, including for `ngTemplateOutlet`-created nested items. */\n getParentMenuItem?(): AXMenuItemComponentBase | null | undefined;\n}\n\n/** Shared tree item shape for `ax-menu`, `ax-context-menu`, and `ax-side-menu`. */\nexport interface AXMenuItem {\n text: string;\n name?: string;\n icon?: string;\n data?: unknown;\n disabled?: boolean;\n items?: AXMenuItem[];\n color?: AXStyleColorType;\n suffix?: {\n text: string;\n };\n /** Side-menu alias for `suffix.text`. */\n suffixText?: string;\n break?: boolean;\n group?: {\n name?: string;\n title?: string;\n };\n title?: string;\n routerLink?: string | any[] | UrlTree;\n routerLinkActive?: string | string[];\n routerLinkActiveOptions?: { exact: boolean } | IsActiveMatchOptions;\n href?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n active?: boolean;\n isLoading?: boolean;\n isCollapsed?: boolean;\n toggleOnClick?: boolean;\n}\n\nexport class AXMenuItemClickBaseEvent<T extends NXComponent = NXComponent> extends NXClickEvent<T> {\n item: {\n name?: string;\n text: string;\n data?: any;\n };\n canceled = false;\n}\n","import { Renderer2 } from '@angular/core';\n\n/** Edge padding when clamping floating menu panels to the viewport. */\nexport const AX_MENU_VIEWPORT_MARGIN = 8;\n\n/** Limits a fixed menu panel so it stays within the viewport below `top`. */\nexport function axFitMenuPanelHeight(renderer: Renderer2, el: HTMLElement, top: number): void {\n renderer.setStyle(el, 'max-height', `${Math.max(0, window.innerHeight - top - AX_MENU_VIEWPORT_MARGIN)}px`);\n}\n\nexport function axClearMenuPanelHeight(renderer: Renderer2, el: HTMLElement): void {\n renderer.removeStyle(el, 'max-height');\n}\n","import { AXComponent, AXStyleColorType, NXComponent } from '@acorex/cdk/common';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n DOCUMENT,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuItemClickBaseEvent, AXMenuItemComponentBase, AXRootMenu } from './menu.types';\nimport { AX_MENU_VIEWPORT_MARGIN, axClearMenuPanelHeight, axFitMenuPanelHeight } from './menu-viewport';\n\nexport type AXMenuItemClickEvent = AXMenuItemClickBaseEvent<AXMenuItemComponent>;\n\ntype AXMenuOwnerHost = HTMLElement & { __axMenuOwner__?: AXMenuItemComponent };\n\n/**\n * Represents a menu item component used within an `ax-menu`.\n * @category Components\n */\n@Component({\n selector: 'ax-menu-item',\n templateUrl: './menu-item.component.html',\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n {\n provide: AXMenuItemComponentBase,\n useExisting: AXMenuItemComponent,\n },\n AXUnsubscriber,\n {\n provide: AXComponent,\n useExisting: AXMenuItemComponent,\n },\n ],\n})\nexport class AXMenuItemComponent extends NXComponent implements OnDestroy {\n protected isOpen = signal(false);\n\n readonly parent = inject(AXMenuItemComponent, { optional: true, skipSelf: true });\n\n protected isFirstLevel = computed(() => this.getParentMenuItem() == null);\n\n private readonly childMenuItems = contentChildren(AXMenuItemComponent, { descendants: false });\n private readonly discoveredSubmenuNodeCount = signal(0);\n private readonly submenuSlot = viewChild<ElementRef<HTMLElement>>('submenuSlot');\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n private childObserver: MutationObserver | null = null;\n private childRefreshScheduled = false;\n\n /**\n * Nested items from the data model. Required for recursive `ngTemplateOutlet` templates\n * because `contentChildren` does not traverse those embedded views.\n */\n subItems = input<readonly unknown[]>([]);\n\n protected hasSubItems = computed(\n () =>\n (this.subItems()?.length ?? 0) > 0 || this.childMenuItems().length > 0 || this.discoveredSubmenuNodeCount() > 0,\n );\n\n protected root = inject(AXRootMenu);\n\n private service = inject(AXMenuService);\n\n private unsuscriber = inject(AXUnsubscriber);\n private renderer = inject(Renderer2);\n private injector = inject(Injector);\n private document = inject(DOCUMENT);\n private zIndexService = inject(AXZIndexService);\n private zToken: AXZToken | null = null;\n private submenuPortalParent: HTMLElement | null = null;\n private submenuPortalNextSibling: ChildNode | null = null;\n /** Survives submenu portaling when the DOM parent chain is broken. */\n private linkedParent: AXMenuItemComponent | null = null;\n private mouseLeaveTimeout: ReturnType<typeof setTimeout> | null = null;\n private submenuUnlistenEnter: (() => void) | null = null;\n private submenuUnlistenLeave: (() => void) | null = null;\n\n protected arrowIcon = computed<string>(() => {\n const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n return this.root.orientation() == 'horizontal' && this.isFirstLevel()\n ? 'ax-icon-chevron-down'\n : isRtl\n ? 'ax-icon-chevron-left'\n : 'ax-icon-chevron-right';\n });\n\n onClick = output<AXMenuItemClickEvent>();\n\n name = input<string>();\n data = input<any>();\n disabled = input<boolean>();\n color = input<AXStyleColorType>();\n\n constructor() {\n super();\n\n afterNextRender(() => {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n this.reparentOrphanedChildren();\n this.linkChildItems();\n this.updateDiscoveredSubmenuNodeCount();\n this.childObserver = new MutationObserver((records) => {\n if (!this.hasRelevantChildMutation(records)) {\n return;\n }\n this.scheduleChildRefresh();\n });\n this.childObserver.observe(this.nativeElement, { childList: true, subtree: true });\n this.destroyRef.onDestroy(() => this.childObserver?.disconnect());\n });\n\n this.service.closeAll$.pipe(this.unsuscriber.takeUntilDestroy).subscribe(() => this.close());\n\n this.service.open$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n if ((this as any) === item) {\n this.isOpen.set(true);\n this.schedulePositionCalculation();\n }\n });\n\n this.service.close$.pipe(this.unsuscriber.takeUntilDestroy).subscribe((item) => {\n if ((this as any) == item) {\n this.isOpen.set(false);\n this.clearCloseTimeout();\n this.restoreSubmenuPortal();\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n }\n });\n }\n\n private getText(): string {\n return this.nativeElement.querySelector<HTMLDivElement>('ax-text')?.innerText;\n }\n\n /**\n * Resolves the parent menu item. Prefers an explicit link (survives submenu portaling),\n * then DI, then the DOM tree.\n */\n getParentMenuItem(): AXMenuItemComponent | null {\n if (this.linkedParent) {\n return this.linkedParent;\n }\n if (this.parent) {\n return this.parent;\n }\n\n const parentHost = this.nativeElement.parentElement?.closest('ax-menu-item');\n if (!parentHost || parentHost === this.nativeElement) {\n return null;\n }\n\n return this.getInstanceFromElement(parentHost) ?? null;\n }\n\n /**\n * Opens the submenu of this menu item if it has sub-items and is not disabled.\n */\n open() {\n if (this.disabled() || !this.hasSubItems()) {\n return;\n }\n\n this.reparentOrphanedChildren();\n this.linkChildItems();\n this.service.closeExcept(this);\n\n const submenu = this.submenuSlot()?.nativeElement;\n if (submenu) {\n // Portal before `isOpen` so ancestor overflow cannot clip the first paint.\n this.portalSubmenu(submenu);\n }\n\n if (!this.zToken) {\n this.zToken = this.zIndexService.acquire();\n }\n this.service.markOpen(this);\n }\n\n /**\n * Closes the submenu of this menu item if open.\n */\n close() {\n this.clearCloseTimeout();\n this.service.markClosed(this);\n }\n\n /**\n * Positions the submenu after layout so nested levels measure their full height.\n */\n private schedulePositionCalculation() {\n afterNextRender(\n () => {\n if (this.isOpen()) {\n this.calculatePosition();\n afterNextRender(\n () => {\n if (this.isOpen()) {\n this.calculatePosition();\n }\n },\n { injector: this.injector },\n );\n }\n },\n { injector: this.injector },\n );\n }\n\n /**\n * Calculate the position of the submenu to avoid it going out of the viewport.\n * Tall panels are height-clamped; the panel is portaled so parent overflow cannot clip it.\n */\n private calculatePosition() {\n const submenu = this.submenuSlot()?.nativeElement;\n if (!submenu) return;\n\n this.portalSubmenu(submenu);\n axClearMenuPanelHeight(this.renderer, submenu);\n\n const submenuRect = this.measureSubmenuRect(submenu);\n const itemRect = this.nativeElement.getBoundingClientRect();\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const margin = AX_MENU_VIEWPORT_MARGIN;\n const isRtl = AXHtmlUtil.isRtl(this.nativeElement);\n const effectiveHeight = Math.min(submenuRect.height, Math.max(0, windowHeight - margin * 2));\n\n let finalTop: number;\n let finalLeft: number;\n\n const preferredTop =\n this.isFirstLevel() && this.root.orientation() === 'horizontal' ? itemRect.bottom : itemRect.top;\n const alternateTop = itemRect.top - effectiveHeight;\n\n if (preferredTop + effectiveHeight <= windowHeight - margin) {\n finalTop = preferredTop;\n } else if (alternateTop >= margin) {\n finalTop = alternateTop;\n } else {\n finalTop = margin;\n }\n\n finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);\n\n if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {\n const preferredLeft = isRtl ? itemRect.right - submenuRect.width : itemRect.left;\n const alternateLeft = isRtl ? itemRect.left : itemRect.right - submenuRect.width;\n\n if (preferredLeft >= 0 && preferredLeft + submenuRect.width <= windowWidth) {\n finalLeft = preferredLeft;\n } else {\n finalLeft = Math.max(0, Math.min(alternateLeft, windowWidth - submenuRect.width));\n }\n } else {\n const preferredLeft = isRtl ? itemRect.left - submenuRect.width : itemRect.right;\n const alternateLeft = isRtl ? itemRect.right : itemRect.left - submenuRect.width;\n\n if (isRtl ? preferredLeft >= 0 : preferredLeft + submenuRect.width <= windowWidth) {\n finalLeft = preferredLeft;\n } else if (isRtl ? alternateLeft + submenuRect.width <= windowWidth : alternateLeft >= 0) {\n finalLeft = alternateLeft;\n } else {\n finalLeft = isRtl ? 0 : windowWidth - submenuRect.width;\n }\n }\n\n const isNestedMenu = !(this.isFirstLevel() && this.root.orientation() === 'horizontal');\n if (isNestedMenu) {\n const overlapsParent = finalLeft < itemRect.right && itemRect.left < finalLeft + submenuRect.width;\n if (overlapsParent && itemRect.bottom + effectiveHeight <= windowHeight - margin) {\n finalTop = itemRect.bottom;\n }\n }\n\n finalTop = this.clampVerticalPosition(finalTop, effectiveHeight, windowHeight, margin);\n\n this.renderer.setStyle(submenu, 'position', 'fixed');\n this.renderer.setStyle(submenu, 'top', `${finalTop}px`);\n this.renderer.setStyle(submenu, 'left', `${finalLeft}px`);\n axFitMenuPanelHeight(this.renderer, submenu, finalTop);\n if (this.zToken) {\n this.renderer.setStyle(submenu, 'z-index', String(this.zToken.zIndex));\n }\n }\n\n /** Measures submenu size using the same flex layout as the rendered menu. */\n private measureSubmenuRect(submenu: HTMLElement): DOMRect {\n this.renderer.setStyle(submenu, 'visibility', 'hidden');\n this.renderer.setStyle(submenu, 'display', 'flex');\n const rect = submenu.getBoundingClientRect();\n this.renderer.removeStyle(submenu, 'visibility');\n this.renderer.removeStyle(submenu, 'display');\n return rect;\n }\n\n /** Moves the submenu under the context-menu backdrop (or body) to escape ancestor overflow. */\n private portalSubmenu(submenu: HTMLElement) {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n (submenu as AXMenuOwnerHost).__axMenuOwner__ = this;\n this.bindSubmenuPointerListeners(submenu);\n\n if (this.submenuPortalParent) {\n return;\n }\n\n const parent = submenu.parentElement;\n if (!parent) {\n return;\n }\n\n this.submenuPortalParent = parent;\n this.submenuPortalNextSibling = submenu.nextSibling;\n\n const rootEl = this.root.nativeElement;\n const rootParent = rootEl.parentElement;\n const portalHost =\n rootEl.tagName === 'AX-CONTEXT-MENU' && rootParent && rootParent !== this.document.body\n ? rootParent\n : this.document.body;\n\n if (submenu.parentElement !== portalHost) {\n portalHost.appendChild(submenu);\n }\n }\n\n private restoreSubmenuPortal() {\n const submenu = this.submenuSlot()?.nativeElement;\n this.unbindSubmenuPointerListeners();\n\n if (submenu) {\n axClearMenuPanelHeight(this.renderer, submenu);\n delete (submenu as AXMenuOwnerHost).__axMenuOwner__;\n }\n\n if (submenu && this.submenuPortalParent) {\n try {\n this.submenuPortalParent.insertBefore(submenu, this.submenuPortalNextSibling);\n } catch {\n // Host may already be torn down while the context menu is closing.\n }\n }\n\n this.submenuPortalParent = null;\n this.submenuPortalNextSibling = null;\n }\n\n /** Keep this item open while the pointer is over its portaled submenu panel. */\n private bindSubmenuPointerListeners(submenu: HTMLElement) {\n this.unbindSubmenuPointerListeners();\n this.submenuUnlistenEnter = this.renderer.listen(submenu, 'mouseenter', () => {\n this.clearCloseTimeout();\n this.clearAncestorCloseTimeouts();\n });\n this.submenuUnlistenLeave = this.renderer.listen(submenu, 'mouseleave', (event: MouseEvent) => {\n this.handlePointerLeave(event);\n });\n }\n\n private unbindSubmenuPointerListeners() {\n this.submenuUnlistenEnter?.();\n this.submenuUnlistenLeave?.();\n this.submenuUnlistenEnter = null;\n this.submenuUnlistenLeave = null;\n }\n\n /** Links direct children so parent resolution still works after the panel is portaled. */\n private linkChildItems() {\n const submenu = this.submenuSlot()?.nativeElement;\n if (!submenu) {\n return;\n }\n\n submenu.querySelectorAll(':scope > ax-menu-item').forEach((el) => {\n const child = this.getInstanceFromElement(el);\n if (child) {\n child.linkedParent = this;\n }\n });\n }\n\n private getInstanceFromElement(el: Element): AXMenuItemComponent | undefined {\n const ctx = (el as HTMLElement & { __axContext__?: unknown }).__axContext__;\n return ctx instanceof AXMenuItemComponent ? ctx : undefined;\n }\n\n /**\n * Moves nested `ax-menu-item` nodes rendered by recursive `ngTemplateOutlet` templates\n * into the submenu slot. Angular content queries do not traverse those embedded views.\n */\n private reparentOrphanedChildren() {\n const container = this.submenuSlot()?.nativeElement;\n if (!container) {\n return;\n }\n\n for (const el of this.getDirectSubmenuNodes()) {\n if (!container.contains(el)) {\n try {\n container.appendChild(el);\n } catch {\n // HierarchyRequestError when the node is already being moved.\n }\n }\n }\n }\n\n /**\n * Nested submenu nodes rendered by custom recursive templates (direct children of this item only).\n */\n private getDirectSubmenuNodes(): HTMLElement[] {\n return Array.from(this.nativeElement.querySelectorAll<HTMLElement>('ax-menu-item, ax-title, ax-divider')).filter(\n (el) => {\n if (el === this.nativeElement) {\n return false;\n }\n\n if (el.tagName === 'AX-MENU-ITEM') {\n return el.parentElement?.closest('ax-menu-item') === this.nativeElement;\n }\n\n return el.closest('ax-menu-item') === this.nativeElement;\n },\n );\n }\n\n private updateDiscoveredSubmenuNodeCount() {\n const fromHost = this.getDirectSubmenuNodes().length;\n const submenu = this.submenuSlot()?.nativeElement;\n const fromPanel = submenu\n ? submenu.querySelectorAll(':scope > ax-menu-item, :scope > ax-title, :scope > ax-divider').length\n : 0;\n // After portaling, projected children live in the panel outside this host.\n this.discoveredSubmenuNodeCount.set(Math.max(fromHost, fromPanel));\n }\n\n private scheduleChildRefresh() {\n if (this.childRefreshScheduled) {\n return;\n }\n this.childRefreshScheduled = true;\n requestAnimationFrame(() => {\n this.childRefreshScheduled = false;\n this.reparentOrphanedChildren();\n this.linkChildItems();\n this.updateDiscoveredSubmenuNodeCount();\n });\n }\n\n private hasRelevantChildMutation(records: MutationRecord[]): boolean {\n for (const record of records) {\n if (\n this.nodeListContainsMenuStructuralNode(record.addedNodes) ||\n this.nodeListContainsMenuStructuralNode(record.removedNodes)\n ) {\n return true;\n }\n }\n return false;\n }\n\n private nodeListContainsMenuStructuralNode(nodes: NodeList): boolean {\n for (const node of Array.from(nodes)) {\n if (!(node instanceof Element)) {\n continue;\n }\n const tagName = node.tagName;\n if (tagName === 'AX-MENU-ITEM' || tagName === 'AX-TITLE' || tagName === 'AX-DIVIDER') {\n return true;\n }\n if (node.querySelector?.('ax-menu-item,ax-title,ax-divider')) {\n return true;\n }\n }\n return false;\n }\n\n /** Keeps the submenu fully inside the viewport vertically. */\n private clampVerticalPosition(top: number, height: number, windowHeight: number, margin = 0): number {\n if (top + height > windowHeight - margin) {\n top = windowHeight - margin - height;\n }\n if (top < margin) {\n top = margin;\n }\n return top;\n }\n\n @HostListener('click', ['$event'])\n handleClick(e: MouseEvent) {\n e.stopPropagation();\n if (this.disabled()) return;\n\n const event = {\n sender: this,\n nativeEvent: e,\n canceled: false,\n item: {\n name: this.name(),\n text: this.getText(),\n data: this.data(),\n },\n } as AXMenuItemClickEvent;\n\n this.onClick.emit(event);\n this.root.onItemClick.emit({ ...event, ...{ sender: this.root as any } });\n\n if (this.hasSubItems() && !event.canceled) {\n this.open();\n } else if (!event.canceled) {\n this.service.closeAll$.next();\n this.service.closeAllContextMenu$.next({ sender: this.root });\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n handleMouseEnter(event: MouseEvent) {\n event.stopPropagation();\n this.clearCloseTimeout();\n this.clearAncestorCloseTimeouts();\n if (!this.isFirstLevel() || this.root.openOn() == 'hover') {\n this.open();\n }\n }\n\n @HostListener('mouseleave', ['$event'])\n handleMouseLeave(event: MouseEvent) {\n event.stopPropagation();\n this.handlePointerLeave(event);\n }\n\n private handlePointerLeave(event: MouseEvent) {\n if (!this.hasSubItems() || this.root.closeOn() !== 'leave') {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n if (relatedTarget instanceof Node && this.containsSubmenuPointer(relatedTarget)) {\n return;\n }\n\n this.scheduleClose();\n }\n\n private scheduleClose() {\n this.clearCloseTimeout();\n this.mouseLeaveTimeout = setTimeout(() => {\n this.mouseLeaveTimeout = null;\n this.close();\n }, 500);\n }\n\n private clearCloseTimeout() {\n if (this.mouseLeaveTimeout) {\n clearTimeout(this.mouseLeaveTimeout);\n this.mouseLeaveTimeout = null;\n }\n }\n\n private clearAncestorCloseTimeouts() {\n let current = this.getParentMenuItem();\n while (current) {\n current.clearCloseTimeout();\n current = current.getParentMenuItem();\n }\n }\n\n /** True when the pointer is still inside this item's submenu tree (including portaled panels). */\n private containsSubmenuPointer(node: Node): boolean {\n if (this.submenuSlot()?.nativeElement?.contains(node) || this.nativeElement.contains(node)) {\n return true;\n }\n\n const el = node instanceof Element ? node : node.parentElement;\n if (!el) {\n return false;\n }\n\n const item =\n this.getInstanceFromElement(el.closest('ax-menu-item') ?? el) ??\n (el.closest('.ax-menu-items') as AXMenuOwnerHost | null)?.__axMenuOwner__;\n\n return !!item && this.isSelfOrAncestorOf(item);\n }\n\n private isSelfOrAncestorOf(item: AXMenuItemComponent): boolean {\n let current: AXMenuItemComponent | null = item;\n while (current) {\n if (current === this) {\n return true;\n }\n current = current.getParentMenuItem();\n }\n return false;\n }\n\n ngOnDestroy() {\n this.clearCloseTimeout();\n this.unbindSubmenuPointerListeners();\n if (this.isOpen()) {\n this.close();\n }\n }\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): string[] {\n const list: string[] = ['ax-action-item'];\n if (this.disabled()) {\n list.push('ax-state-disabled');\n }\n list.push(resolveMenuItemColorClass(this.color()));\n\n return list;\n }\n}\n\nfunction resolveMenuItemColorClass(color?: AXStyleColorType): string {\n if (!color || color === 'default') {\n return 'ax-default';\n }\n\n return `ax-${color}`;\n}\n","<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems() && (!isFirstLevel() || root.hasArrow())) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} \"></i>\n }\n</div>\n<div\n #submenuSlot\n class=\"ax-menu-items ax-action-list ax-action-list-vertical\"\n [class.ax-state-open]=\"isOpen()\"\n>\n <ng-content select=\"ax-menu-item,ax-title,ax-divider,ng-container,[ngTemplateOutlet]\"></ng-content>\n</div>\n","import { AXComponent, AXOrientation, NXComponent, NXEvent } from '@acorex/cdk/common';\nimport { applyVisualContext, resolveVisualContext } from '@acorex/cdk/overlay';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { isBrowser } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXPoint } from '@acorex/core/utils';\nimport { AXZIndexService, AXZToken } from '@acorex/core/z-index';\nimport { AsyncPipe, isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n DestroyRef,\n DOCUMENT,\n HostBinding,\n HostListener,\n inject,\n Injector,\n input,\n output,\n PLATFORM_ID,\n Renderer2,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationStart, Router } from '@angular/router';\nimport { cloneDeep } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AX_MENU_VIEWPORT_MARGIN, axClearMenuPanelHeight, axFitMenuPanelHeight } from './menu-viewport';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport class AXContextMenuOpeningEvent extends NXEvent<AXContextMenuComponent> {\n items: AXMenuItem[];\n canceled = false;\n targetElement: HTMLElement;\n}\nexport type AXContextMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXContextMenuComponent>;\n\n/**\n * Represents a menu component that displays context menu.\n * @category Components\n */\n@Component({\n selector: 'ax-context-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css'],\n\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXMenuService,\n {\n provide: AXRootMenu,\n useExisting: AXContextMenuComponent,\n },\n {\n provide: AXComponent,\n useExisting: AXContextMenuComponent,\n },\n ],\n imports: [\n NgTemplateOutlet,\n AXDecoratorGenericComponent,\n AXMenuItemComponent,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n ],\n})\nexport class AXContextMenuComponent extends NXComponent {\n // Inputs and Outputs\n\n readonly orientation = input<AXOrientation>('vertical');\n readonly openOn = input<AXMenuOpenTrigger>('hover');\n readonly closeOn = input<AXMenuCloseTrigger>('click');\n /** When true, closes the menu on router navigation (e.g. side-menu route changes). */\n readonly closeOnRouteChange = input(false);\n readonly originalItems = input<AXMenuItem[]>([], { alias: 'items' });\n readonly target = input<HTMLElement | HTMLElement[] | string>();\n\n onItemClick = output<AXContextMenuItemsClickEvent>();\n onOpening = output<AXContextMenuOpeningEvent>();\n /** Emitted when the menu closes (backdrop, item click, scroll, another menu opening, etc.). */\n onClose = output<void>();\n\n hasArrow = signal<boolean>(true);\n\n // Injected Services\n\n private service = inject(AXMenuService);\n private renderer = inject(Renderer2);\n private document = inject(DOCUMENT);\n private platformID = inject(PLATFORM_ID);\n private zIndexService = inject(AXZIndexService);\n private injector = inject(Injector);\n private zToken: AXZToken | null = null;\n private lastOpenPoint: AXPoint | null = null;\n private router = inject(Router, { optional: true });\n private destroyRef = inject(DestroyRef);\n\n // Constructor (Dependency Injection)\n\n /** @ignore */\n constructor() {\n super();\n //\n afterNextRender(() => {\n this.bindContextEvent();\n this.service.initGlobalListeners(this.nativeElement);\n });\n\n this.setupCloseOnRouteChange();\n\n this.service.closeAllContextMenu$.subscribe(() => {\n this.service.closeAll$.next();\n this.close();\n });\n\n this.service.openContextMenu$.subscribe((e) => {\n if ((e.sender as any) == this) {\n this.internalShowAt(e.point);\n }\n });\n }\n\n // Lifecycle Hooks\n\n ngOnDestroy() {\n if (isBrowser()) {\n this.removeContextEvent();\n }\n }\n\n /**\n * Refreshes the context menu by rebinding event listeners to target elements.\n */\n refresh() {\n this.bindContextEvent();\n }\n\n /**\n * Shows the context menu at a specific point.\n * @param point - The coordinates where the menu should appear\n * @param targetElement - Optional target element for the context menu\n * @param event - Optional opening event with menu items\n */\n showAt(point: AXPoint, targetElement?: HTMLElement, event?: AXContextMenuOpeningEvent) {\n const sender = this as any as AXRootMenu;\n this.service.closeAllContextMenu$.next({ sender });\n if (isPlatformBrowser(this.platformID)) {\n if (!targetElement) {\n targetElement = this.document.elementFromPoint(point.x, point.y) as HTMLElement;\n }\n if (!event) {\n event = {\n sender: this,\n canceled: false,\n targetElement: targetElement,\n items: cloneDeep(this.originalItems()),\n };\n if (event.canceled) return;\n }\n this.onOpening.emit(event);\n this.items.set(event.items);\n }\n this.service.openContextMenu$.next({ sender, point });\n }\n\n /**\n * Closes the context menu and removes the backdrop.\n */\n close() {\n const wasOpen = this.nativeElement.classList.contains('ax-state-open');\n this.nativeElement.classList.remove('ax-state-open');\n this.lastOpenPoint = null;\n axClearMenuPanelHeight(this.renderer, this.nativeElement);\n // Drop rendered items before moving DOM nodes back to the original parent.\n // This prevents a large menu tree from being re-parented/removed as a single heavy DOM operation.\n if (wasOpen) {\n this.items.set([]);\n }\n this.removeBackdrop();\n // Release z-index token\n this.zIndexService.release(this.zToken);\n this.zToken = null;\n if (wasOpen) {\n this.onClose.emit();\n }\n }\n\n // Private Properties\n\n private backdropElement!: HTMLElement;\n private originalNextSibling: Node | null = null;\n private originalParent: HTMLElement | null = null;\n\n protected items = signal<AXMenuItem[]>([]);\n\n // Private Methods (Internal Logic)\n\n /** @ignore */\n private setupCloseOnRouteChange() {\n if (!this.router || !isPlatformBrowser(this.platformID)) {\n return;\n }\n\n this.router.events\n .pipe(\n filter((event): event is NavigationStart => event instanceof NavigationStart),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n if (this.closeOnRouteChange()) {\n this.close();\n }\n });\n }\n\n /** @ignore */\n private getTargetElements(): HTMLElement[] {\n if (isPlatformBrowser(this.platformID)) {\n const elements: HTMLElement[] =\n typeof this.target() == 'string'\n ? Array.from(this.document.querySelectorAll<HTMLElement>(this.target() as string))\n : Array.isArray(this.target())\n ? (this.target() as HTMLElement[])\n : [this.target() as HTMLElement];\n\n return elements;\n }\n return null;\n }\n\n /** @ignore */\n private bindContextEvent() {\n this.getTargetElements().forEach((e) => {\n e?.addEventListener('contextmenu', this.handleContextMenu.bind(this));\n });\n }\n\n /** @ignore */\n private removeContextEvent() {\n this.getTargetElements().forEach((e) => {\n e?.removeEventListener('contextmenu', this.handleContextMenu.bind(this));\n });\n }\n\n /** @ignore */\n private handleContextMenu(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n //\n if (isPlatformBrowser(this.platformID)) {\n const elementsUnderMouse = this.document.elementsFromPoint(e.x, e.y) as HTMLElement[];\n const targetElements = this.getTargetElements();\n const targetElement = elementsUnderMouse.find((target) => targetElements.includes(target));\n //\n const event: AXContextMenuOpeningEvent = {\n sender: this,\n canceled: false,\n targetElement: targetElement,\n items: cloneDeep(this.originalItems()),\n };\n //\n if (!event.canceled) {\n this.showAt({ x: e.clientX, y: e.clientY }, targetElement, event);\n }\n }\n }\n\n /** @ignore */\n private internalShowAt(point: AXPoint) {\n this.lastOpenPoint = point;\n const elementRef = this.nativeElement;\n elementRef.classList.add('ax-state-open');\n this.positionAtPoint(point);\n this.createBackdrop();\n\n // Items may render after the signal update (e.g. compact side-menu); reposition once laid out.\n afterNextRender(\n () => {\n if (this.lastOpenPoint && elementRef.classList.contains('ax-state-open')) {\n this.positionAtPoint(this.lastOpenPoint);\n }\n },\n { injector: this.injector },\n );\n }\n\n /**\n * Positions the menu at `point`, flipping when it would overflow the viewport.\n * Uses a temporary visible layout pass so parents that hide the host (e.g. side-menu `display: none`) do not yield a zero-sized rect.\n */\n private positionAtPoint(point: AXPoint) {\n const elementRef = this.nativeElement;\n const itemRect = this.measureMenuRect(elementRef);\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const margin = AX_MENU_VIEWPORT_MARGIN;\n const isRtl = AXHtmlUtil.isRtl(elementRef);\n\n let left: number;\n if (isRtl) {\n left = point.x - itemRect.width;\n if (left < 0) {\n left = point.x;\n }\n } else {\n left = point.x;\n if (left + itemRect.width > windowWidth) {\n left = point.x - itemRect.width;\n }\n }\n\n const effectiveHeight = Math.min(itemRect.height, Math.max(0, windowHeight - margin * 2));\n let top = point.y;\n if (top + effectiveHeight > windowHeight - margin) {\n top = windowHeight - margin - effectiveHeight;\n }\n if (top < margin) {\n top = margin;\n }\n\n this.renderer.setStyle(elementRef, 'left', `${left}px`);\n this.renderer.setStyle(elementRef, 'top', `${top}px`);\n this.renderer.setStyle(elementRef, 'position', 'fixed');\n axFitMenuPanelHeight(this.renderer, elementRef, top);\n }\n\n /** Measures menu size even when an ancestor hides the host with `display: none`. */\n private measureMenuRect(elementRef: HTMLElement): DOMRect {\n axClearMenuPanelHeight(this.renderer, elementRef);\n this.renderer.setStyle(elementRef, 'visibility', 'hidden');\n this.renderer.setStyle(elementRef, 'display', 'flex');\n const rect = elementRef.getBoundingClientRect();\n this.renderer.removeStyle(elementRef, 'visibility');\n this.renderer.removeStyle(elementRef, 'display');\n return rect;\n }\n\n /** @ignore */\n private createBackdrop() {\n if (!this.originalParent) {\n this.originalParent = this.nativeElement.parentElement;\n this.originalNextSibling = this.nativeElement.nextSibling;\n }\n\n // Acquire z-index token\n this.zToken = this.zIndexService.acquire();\n\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.setStyle(this.backdropElement, 'position', 'fixed');\n this.renderer.setStyle(this.backdropElement, 'top', '0');\n this.renderer.setStyle(this.backdropElement, 'left', '0');\n this.renderer.setStyle(this.backdropElement, 'width', '100%');\n this.renderer.setStyle(this.backdropElement, 'height', '100%');\n this.renderer.setStyle(this.backdropElement, 'z-index', String(this.zToken.zIndex));\n this.renderer.setStyle(this.backdropElement, 'background', 'transparent');\n\n this.createEventListeners(this.backdropElement);\n\n this.document.body.appendChild(this.backdropElement);\n this.backdropElement.appendChild(this.nativeElement);\n\n const contextSource = this.resolveContextMenuTarget();\n const context = resolveVisualContext(contextSource, this.document.documentElement);\n applyVisualContext(this.backdropElement, context);\n applyVisualContext(this.nativeElement, context);\n }\n\n /** @ignore */\n private resolveContextMenuTarget(): HTMLElement {\n const target = this.target();\n if (!target) {\n return this.document.documentElement;\n }\n if (typeof target === 'string') {\n const el = this.document.querySelector(target);\n return el instanceof HTMLElement ? el : this.document.documentElement;\n }\n if (Array.isArray(target)) {\n const first = target[0];\n return first instanceof HTMLElement ? first : this.document.documentElement;\n }\n return target;\n }\n\n /** @ignore */\n private removeBackdrop() {\n if (this.backdropElement) {\n if (this.originalParent) {\n this.renderer.insertBefore(this.originalParent, this.nativeElement, this.originalNextSibling);\n }\n if (this.backdropElement.parentNode) {\n this.renderer.removeChild(this.backdropElement.parentNode, this.backdropElement);\n }\n this.backdropElement = null;\n }\n }\n\n private createEventListeners(el: HTMLElement) {\n const l1 = this.renderer.listen(el, 'click', () => {\n this.close();\n l1();\n });\n\n const l2 = this.renderer.listen(el, 'wheel', (e: WheelEvent) => {\n const target = e.target;\n if (target instanceof Element && (this.nativeElement.contains(target) || target.closest('.ax-menu-items'))) {\n return;\n }\n this.close();\n l2();\n });\n\n const l3 = this.renderer.listen(el, 'contextmenu', (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const x = e.clientX;\n const y = e.clientY;\n\n // Close first so the full-screen backdrop is gone; otherwise the next target never\n // receives contextmenu (conversation list / message list / etc.).\n this.close();\n\n if (isPlatformBrowser(this.platformID)) {\n requestAnimationFrame(() => {\n const under = this.document.elementFromPoint(x, y) as HTMLElement | null;\n if (!under || under === this.document.body || under === this.document.documentElement) {\n return;\n }\n const forward = new MouseEvent('contextmenu', {\n bubbles: true,\n cancelable: true,\n view: this.document.defaultView ?? undefined,\n clientX: x,\n clientY: y,\n screenX: e.screenX,\n screenY: e.screenY,\n button: 2,\n buttons: 2,\n });\n under.dispatchEvent(forward);\n });\n }\n\n l3();\n });\n }\n\n // Host Listeners (UI Interaction Handling)\n\n /** @ignore */\n @HostListener('window:scroll')\n @HostListener('window:resize')\n onWindowEvent() {\n const sender = this as any as AXRootMenu;\n this.service.closeAllContextMenu$.next({ sender: sender }); // Close all menus on scroll or resize\n }\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): any {\n return ['ax-menu-container', `ax-orientation-${this.orientation()}`, 'ax-action-list', 'ax-action-list-vertical'];\n }\n}\n","<ng-content select=\"ax-menu-item,ax-divider,ax-title,ng-container\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n\n<ng-template #Recursion let-item>\n @if (item.group?.title) {\n <ax-title>{{ item.group?.title }}</ax-title>\n }\n <ax-menu-item\n [name]=\"item.name\"\n [data]=\"item.data\"\n [disabled]=\"item.disabled\"\n [color]=\"item.color\"\n [subItems]=\"item.items ?? []\"\n >\n @if (item.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n </ax-prefix>\n }\n @if (item.text) {\n <ax-text>{{ item.text | translate | async }}</ax-text>\n }\n @if (item.suffix) {\n <ax-suffix>\n <ax-text>{{ item.suffix.text | translate | async }}</ax-text>\n </ax-suffix>\n }\n @for (child of item.items; track child) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n }\n </ax-menu-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n</ng-template>\n","import { AXComponent, AXOrientation, NXComponent } from '@acorex/cdk/common';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { afterNextRender, Component, HostBinding, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuService } from './menu.service';\nimport { AXMenuCloseTrigger, AXMenuItem, AXMenuItemClickBaseEvent, AXMenuOpenTrigger, AXRootMenu } from './menu.types';\n\nexport type AXMenuItemsClickEvent = AXMenuItemClickBaseEvent<AXMenuComponent>;\n\n/**\n * Represents a menu component that displays menu items.\n * @category Components\n */\n@Component({\n selector: 'ax-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.css'],\n encapsulation: ViewEncapsulation.None,\n\n providers: [\n AXMenuService,\n {\n provide: AXRootMenu,\n useExisting: AXMenuComponent,\n },\n {\n provide: AXComponent,\n useExisting: AXMenuComponent,\n },\n ],\n imports: [\n NgTemplateOutlet,\n AXDecoratorGenericComponent,\n AXMenuItemComponent,\n AXDecoratorIconComponent,\n AsyncPipe,\n AXTranslatorPipe,\n ],\n})\nexport class AXMenuComponent extends NXComponent {\n constructor() {\n super();\n afterNextRender(() => {\n this.service.initGlobalListeners(this.nativeElement);\n });\n }\n\n orientation = input<AXOrientation>('horizontal');\n\n openOn = input<AXMenuOpenTrigger>('hover');\n\n closeOn = input<AXMenuCloseTrigger>('leave');\n\n service = inject(AXMenuService);\n\n onItemClick = output<AXMenuItemsClickEvent>();\n\n items = input<AXMenuItem[]>([]);\n\n hasArrow = input<boolean>(true);\n\n /** @ignore */\n @HostBinding('class')\n get __hostClass(): string[] {\n return [\n 'ax-root-menu',\n 'ax-action-list',\n `ax-action-list-${this.orientation()}`,\n `${!this.hasArrow() ? 'ax-hide-arrow' : ''}`,\n ];\n }\n\n /**\n * Closes all open menus and submenus for this root menu.\n *\n * @returns void - No return value. All open menu overlays are closed and hidden.\n */\n public close() {\n this.service.closeAll$.next();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { AXContextMenuComponent } from './context-menu.component';\nimport { AXMenuItemComponent } from './menu-item.component';\nimport { AXMenuComponent } from './menu.component';\n\n@NgModule({\n imports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n exports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent],\n})\nexport class AXMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { MXBaseComponent, AXClosableComponent, AXComponent } from '@acorex/cdk/c
2
2
  import { AXButtonComponent } from '@acorex/components/button';
3
3
  import { AXDecoratorCloseButtonComponent } from '@acorex/components/decorators';
4
4
  import { AXLoadingComponent } from '@acorex/components/loading';
5
+ import { AXSafePipe } from '@acorex/core/pipes';
5
6
  import { AXTranslationService, AXTranslatorPipe } from '@acorex/core/translation';
6
7
  import { NgTemplateOutlet, NgComponentOutlet, AsyncPipe } from '@angular/common';
7
8
  import * as i0 from '@angular/core';
@@ -45,6 +46,8 @@ class AXNotificationService {
45
46
  ...(ngDevMode ? [{ debugName: "moreNotificationsColor" }] : /* istanbul ignore next */ []));
46
47
  this.moreNotificationsLocation = signal('bottom-center', /* @ts-ignore */
47
48
  ...(ngDevMode ? [{ debugName: "moreNotificationsLocation" }] : /* istanbul ignore next */ []));
49
+ this.moreNotificationsContextElement = signal(undefined, /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "moreNotificationsContextElement" }] : /* istanbul ignore next */ []));
48
51
  this.reserveCounter = signal(0, /* @ts-ignore */
49
52
  ...(ngDevMode ? [{ debugName: "reserveCounter" }] : /* istanbul ignore next */ []));
50
53
  }
@@ -52,6 +55,7 @@ class AXNotificationService {
52
55
  config = { ...this.defaultConfig, ...config };
53
56
  this.moreNotificationsColor.set(config.color);
54
57
  this.moreNotificationsLocation.set(config.location);
58
+ this.moreNotificationsContextElement.set(config.contextElement);
55
59
  if (this.defaultConfig.limit > 0 && this.activeNotifications().length >= this.defaultConfig.limit) {
56
60
  const reservedRef = {
57
61
  close: () => {
@@ -97,6 +101,7 @@ class AXNotificationService {
97
101
  config: notificationData,
98
102
  onClose: closeNotification,
99
103
  },
104
+ contextElement: config.contextElement,
100
105
  centered: false,
101
106
  panelClass: ['animate-animated', 'animate-fadeIn', 'animate-faster'],
102
107
  onDispose: () => {
@@ -114,6 +119,7 @@ class AXNotificationService {
114
119
  id: notificationId,
115
120
  overlayRef,
116
121
  config: notificationData,
122
+ contextElement: config.contextElement,
117
123
  close: closeNotification,
118
124
  };
119
125
  // Position the notification BEFORE adding to activeNotifications
@@ -184,6 +190,7 @@ class AXNotificationService {
184
190
  timeOutProgress: false,
185
191
  };
186
192
  const notificationId = `notification-counter-${++notificationIdCounter}`;
193
+ const counterContextElement = this.moreNotificationsContextElement() ?? this.activeNotifications()[0]?.contextElement;
187
194
  const overlayRef = await this.overlayService.create(AXNotificationComponent, {
188
195
  inputs: {
189
196
  config: opt,
@@ -197,6 +204,7 @@ class AXNotificationService {
197
204
  }
198
205
  },
199
206
  },
207
+ contextElement: counterContextElement,
200
208
  centered: false,
201
209
  panelClass: ['animate-animated', 'animate-fadeIn', 'animate-faster'],
202
210
  });
@@ -462,16 +470,14 @@ class AXNotificationComponent extends MXBaseComponent {
462
470
  this.notificationService.hideAll();
463
471
  }
464
472
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXNotificationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
465
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXNotificationComponent, isStandalone: true, selector: "ax-notification", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, onClose: { classPropertyName: "onClose", publicName: "onClose", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "\"ax-\" + config().color" } }, providers: [
473
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXNotificationComponent, isStandalone: true, selector: "ax-notification", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, onClose: { classPropertyName: "onClose", publicName: "onClose", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
466
474
  { provide: AXClosableComponent, useExisting: AXNotificationComponent },
467
475
  { provide: AXComponent, useExisting: AXNotificationComponent },
468
- ], usesInheritance: true, ngImport: i0, template: "<span class=\"ax-notification-icon ax-icon-solid {{ _icon }} ax-{{ this.config().color }}\"></span>\n<div class=\"ax-notification-content\">\n <div class=\"ax-notification-title\">{{ config().title | translate | async }}</div>\n @if (templateContent()) {\n <ng-container *ngTemplateOutlet=\"templateContent()\"></ng-container>\n } @else if (componentContent()) {\n <ng-container *ngComponentOutlet=\"componentContent()\"></ng-container>\n } @else {\n <div>{{ stringContent() | translate | async }}</div>\n }\n\n @if (config().buttons?.length) {\n <div class=\"ax-notification-buttons\">\n @for (button of config().buttons; track $index) {\n <ax-button\n class=\"ax-xs\"\n [text]=\"button.text | translate | async\"\n [color]=\"'ax-' + button.color\"\n [look]=\"'ax-' + button.look\"\n [disabled]=\"button.disabled\"\n (onClick)=\"_handleButtonClick(button)\"\n >\n @if (button.loading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n }\n </div>\n }\n</div>\n@if (config().closeButton) {\n <ax-close-button></ax-close-button>\n}\n@if (config().timeOutProgress && config().timeOut && remainingTime()) {\n <div\n [class]=\"'ax-notification-progress ax-' + this.config().color\"\n [style.transition-duration]=\"transitionDuration()\"\n [style.width]=\"(remainingTime() * 100) / config().timeOut + '%'\"\n ></div>\n}\n", styles: ["@layer properties;@layer components{ax-notification{position:relative;display:flex;width:98vw;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}ax-notification:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}@media(min-width:768px){ax-notification{width:calc(var(--spacing, .25rem) * 96)}}ax-notification .ax-notification-icon{padding-inline-end:calc(var(--spacing, .25rem) * 3);color:var(--ax-comp-bg)}ax-notification .ax-notification-content{display:flex;flex:1;flex-direction:column;justify-content:center;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:rgba(var(--ax-sys-color-on-surface))}ax-notification .ax-notification-content .ax-notification-title{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-notification .ax-notification-content .ax-notification-buttons{margin-top:calc(var(--spacing, .25rem) * 3);display:flex;gap:calc(var(--spacing, .25rem) * 3)}ax-notification .ax-notification-progress{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 0);inset-inline-end:calc(var(--spacing, .25rem) * 0);bottom:calc(var(--spacing, .25rem) * 0);height:calc(var(--spacing, .25rem) * 1);width:100%;background-color:var(--ax-comp-bg);transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s));--tw-duration: .3s;transition-duration:.3s;--tw-ease: linear;transition-timing-function:linear}ax-notification .ax-notification-icon,ax-notification .ax-icon-close{max-width:fit-content;align-items:flex-start!important;font-size:var(--text-xl, 1.25rem)!important;line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))!important}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-duration{syntax: \"*\"; inherits: false;}@property --tw-ease{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial;--tw-leading: initial;--tw-duration: initial;--tw-ease: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
476
+ ], usesInheritance: true, ngImport: i0, template: "<span class=\"ax-notification-icon ax-icon-solid {{ _icon }} ax-{{ this.config().color }}\"></span>\n<div class=\"ax-notification-content\">\n <div class=\"ax-notification-title\" [class.ax-mb-2]=\"config().title && config().content\">\n {{ config().title | translate | async }}\n </div>\n @if (templateContent(); as template) {\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n } @else if (componentContent(); as component) {\n <ng-container [ngComponentOutlet]=\"component\"></ng-container>\n } @else if (stringContent()) {\n <div class=\"ax-notification-body\" [innerHTML]=\"stringContent() | translate | async | safe: 'html'\"></div>\n }\n\n @if (config().buttons?.length) {\n <div class=\"ax-notification-buttons\">\n @for (button of config().buttons; track $index) {\n <ax-button\n class=\"ax-xs\"\n [text]=\"button.text | translate | async\"\n [color]=\"button.color || 'default'\"\n [look]=\"button.look || 'solid'\"\n [disabled]=\"button.disabled\"\n (onClick)=\"_handleButtonClick(button)\"\n >\n @if (button.loading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n }\n </div>\n }\n</div>\n@if (config().closeButton) {\n <ax-close-button></ax-close-button>\n}\n@if (config().timeOutProgress && config().timeOut && remainingTime()) {\n <div\n [class]=\"'ax-notification-progress ax-' + this.config().color\"\n [style.transition-duration]=\"transitionDuration()\"\n [style.width]=\"(remainingTime() * 100) / config().timeOut + '%'\"\n ></div>\n}\n", styles: ["@layer properties;@layer components{ax-notification{--ax-comp-notification-shadow-rest: var(--ax-sys-effect-prominent-floating);--ax-comp-notification-inner-border-rest: var(--ax-sys-inner-border-surface);--ax-comp-notification-contrast-inner-border-rest: var(--ax-sys-contrast-inner-border-surface);--ax-comp-notification-contrast-surface-overlay-rest: var(--ax-sys-contrast-surface-overlay-surface);--ax-comp-notification-backdrop-filter-rest: var(--ax-sys-backdrop-filter-surface);--ax-comp-notification-surface-overlay-rest: var(--ax-sys-surface-overlay-prominent-floating);position:relative;display:flex;width:98vw;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));background-color:rgba(var(--ax-sys-color-lightest-surface));background-image:linear-gradient(var(--ax-comp-notification-contrast-surface-overlay-rest),var(--ax-comp-notification-contrast-surface-overlay-rest)),linear-gradient(var(--ax-comp-notification-surface-overlay-rest),var(--ax-comp-notification-surface-overlay-rest));box-shadow:var(--ax-comp-notification-contrast-inner-border-rest),var(--ax-comp-notification-inner-border-rest),var(--ax-comp-notification-shadow-rest);backdrop-filter:var(--ax-comp-notification-backdrop-filter-rest);-webkit-backdrop-filter:var(--ax-comp-notification-backdrop-filter-rest)}ax-notification:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darker-surface))}@media(min-width:768px){ax-notification{width:calc(var(--spacing, .25rem) * 96)}}ax-notification .ax-notification-icon{padding-inline-end:calc(var(--spacing, .25rem) * 3);color:var(--ax-comp-bg)}ax-notification .ax-notification-content{display:flex;flex:1;flex-direction:column;justify-content:center;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:rgba(var(--ax-sys-color-on-surface))}ax-notification .ax-notification-content .ax-notification-title{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-notification .ax-notification-content .ax-notification-body{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-notification .ax-notification-content .ax-notification-buttons{margin-top:calc(var(--spacing, .25rem) * 3);display:flex;gap:calc(var(--spacing, .25rem) * 3)}ax-notification .ax-notification-progress{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 0);inset-inline-end:calc(var(--spacing, .25rem) * 0);bottom:calc(var(--spacing, .25rem) * 0);height:calc(var(--spacing, .25rem) * 1);width:100%;background-color:var(--ax-comp-bg);transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s));--tw-duration: .3s;transition-duration:.3s;--tw-ease: linear;transition-timing-function:linear}ax-notification .ax-notification-icon,ax-notification .ax-icon-close{max-width:fit-content;align-items:flex-start!important;font-size:var(--text-xl, 1.25rem)!important;line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))!important}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-duration{syntax: \"*\"; inherits: false;}@property --tw-ease{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial;--tw-leading: initial;--tw-duration: initial;--tw-ease: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], encapsulation: i0.ViewEncapsulation.None }); }
469
477
  }
470
478
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXNotificationComponent, decorators: [{
471
479
  type: Component,
472
- args: [{ selector: 'ax-notification', encapsulation: ViewEncapsulation.None, host: {
473
- '[class]': '"ax-" + config().color',
474
- }, providers: [
480
+ args: [{ selector: 'ax-notification', encapsulation: ViewEncapsulation.None, providers: [
475
481
  { provide: AXClosableComponent, useExisting: AXNotificationComponent },
476
482
  { provide: AXComponent, useExisting: AXNotificationComponent },
477
483
  ], imports: [
@@ -482,7 +488,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
482
488
  AXDecoratorCloseButtonComponent,
483
489
  AsyncPipe,
484
490
  AXTranslatorPipe,
485
- ], template: "<span class=\"ax-notification-icon ax-icon-solid {{ _icon }} ax-{{ this.config().color }}\"></span>\n<div class=\"ax-notification-content\">\n <div class=\"ax-notification-title\">{{ config().title | translate | async }}</div>\n @if (templateContent()) {\n <ng-container *ngTemplateOutlet=\"templateContent()\"></ng-container>\n } @else if (componentContent()) {\n <ng-container *ngComponentOutlet=\"componentContent()\"></ng-container>\n } @else {\n <div>{{ stringContent() | translate | async }}</div>\n }\n\n @if (config().buttons?.length) {\n <div class=\"ax-notification-buttons\">\n @for (button of config().buttons; track $index) {\n <ax-button\n class=\"ax-xs\"\n [text]=\"button.text | translate | async\"\n [color]=\"'ax-' + button.color\"\n [look]=\"'ax-' + button.look\"\n [disabled]=\"button.disabled\"\n (onClick)=\"_handleButtonClick(button)\"\n >\n @if (button.loading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n }\n </div>\n }\n</div>\n@if (config().closeButton) {\n <ax-close-button></ax-close-button>\n}\n@if (config().timeOutProgress && config().timeOut && remainingTime()) {\n <div\n [class]=\"'ax-notification-progress ax-' + this.config().color\"\n [style.transition-duration]=\"transitionDuration()\"\n [style.width]=\"(remainingTime() * 100) / config().timeOut + '%'\"\n ></div>\n}\n", styles: ["@layer properties;@layer components{ax-notification{position:relative;display:flex;width:98vw;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));background-color:rgba(var(--ax-sys-color-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}ax-notification:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darkest-surface))}@media(min-width:768px){ax-notification{width:calc(var(--spacing, .25rem) * 96)}}ax-notification .ax-notification-icon{padding-inline-end:calc(var(--spacing, .25rem) * 3);color:var(--ax-comp-bg)}ax-notification .ax-notification-content{display:flex;flex:1;flex-direction:column;justify-content:center;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:rgba(var(--ax-sys-color-on-surface))}ax-notification .ax-notification-content .ax-notification-title{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-notification .ax-notification-content .ax-notification-buttons{margin-top:calc(var(--spacing, .25rem) * 3);display:flex;gap:calc(var(--spacing, .25rem) * 3)}ax-notification .ax-notification-progress{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 0);inset-inline-end:calc(var(--spacing, .25rem) * 0);bottom:calc(var(--spacing, .25rem) * 0);height:calc(var(--spacing, .25rem) * 1);width:100%;background-color:var(--ax-comp-bg);transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s));--tw-duration: .3s;transition-duration:.3s;--tw-ease: linear;transition-timing-function:linear}ax-notification .ax-notification-icon,ax-notification .ax-icon-close{max-width:fit-content;align-items:flex-start!important;font-size:var(--text-xl, 1.25rem)!important;line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))!important}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-duration{syntax: \"*\"; inherits: false;}@property --tw-ease{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-font-weight: initial;--tw-leading: initial;--tw-duration: initial;--tw-ease: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
491
+ AXSafePipe,
492
+ ], template: "<span class=\"ax-notification-icon ax-icon-solid {{ _icon }} ax-{{ this.config().color }}\"></span>\n<div class=\"ax-notification-content\">\n <div class=\"ax-notification-title\" [class.ax-mb-2]=\"config().title && config().content\">\n {{ config().title | translate | async }}\n </div>\n @if (templateContent(); as template) {\n <ng-container [ngTemplateOutlet]=\"template\"></ng-container>\n } @else if (componentContent(); as component) {\n <ng-container [ngComponentOutlet]=\"component\"></ng-container>\n } @else if (stringContent()) {\n <div class=\"ax-notification-body\" [innerHTML]=\"stringContent() | translate | async | safe: 'html'\"></div>\n }\n\n @if (config().buttons?.length) {\n <div class=\"ax-notification-buttons\">\n @for (button of config().buttons; track $index) {\n <ax-button\n class=\"ax-xs\"\n [text]=\"button.text | translate | async\"\n [color]=\"button.color || 'default'\"\n [look]=\"button.look || 'solid'\"\n [disabled]=\"button.disabled\"\n (onClick)=\"_handleButtonClick(button)\"\n >\n @if (button.loading) {\n <ax-loading></ax-loading>\n }\n </ax-button>\n }\n </div>\n }\n</div>\n@if (config().closeButton) {\n <ax-close-button></ax-close-button>\n}\n@if (config().timeOutProgress && config().timeOut && remainingTime()) {\n <div\n [class]=\"'ax-notification-progress ax-' + this.config().color\"\n [style.transition-duration]=\"transitionDuration()\"\n [style.width]=\"(remainingTime() * 100) / config().timeOut + '%'\"\n ></div>\n}\n", styles: ["@layer properties;@layer components{ax-notification{--ax-comp-notification-shadow-rest: var(--ax-sys-effect-prominent-floating);--ax-comp-notification-inner-border-rest: var(--ax-sys-inner-border-surface);--ax-comp-notification-contrast-inner-border-rest: var(--ax-sys-contrast-inner-border-surface);--ax-comp-notification-contrast-surface-overlay-rest: var(--ax-sys-contrast-surface-overlay-surface);--ax-comp-notification-backdrop-filter-rest: var(--ax-sys-backdrop-filter-surface);--ax-comp-notification-surface-overlay-rest: var(--ax-sys-surface-overlay-prominent-floating);position:relative;display:flex;width:98vw;overflow:hidden;border-radius:var(--radius-lg, .5rem);border-style:var(--tw-border-style);border-width:1px;border-color:rgba(var(--ax-sys-color-border-lightest-surface));padding:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));background-color:rgba(var(--ax-sys-color-lightest-surface));background-image:linear-gradient(var(--ax-comp-notification-contrast-surface-overlay-rest),var(--ax-comp-notification-contrast-surface-overlay-rest)),linear-gradient(var(--ax-comp-notification-surface-overlay-rest),var(--ax-comp-notification-surface-overlay-rest));box-shadow:var(--ax-comp-notification-contrast-inner-border-rest),var(--ax-comp-notification-inner-border-rest),var(--ax-comp-notification-shadow-rest);backdrop-filter:var(--ax-comp-notification-backdrop-filter-rest);-webkit-backdrop-filter:var(--ax-comp-notification-backdrop-filter-rest)}ax-notification:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){background-color:rgba(var(--ax-sys-color-darker-surface))}@media(min-width:768px){ax-notification{width:calc(var(--spacing, .25rem) * 96)}}ax-notification .ax-notification-icon{padding-inline-end:calc(var(--spacing, .25rem) * 3);color:var(--ax-comp-bg)}ax-notification .ax-notification-content{display:flex;flex:1;flex-direction:column;justify-content:center;--tw-font-weight: var(--font-weight-normal, 400);font-weight:var(--font-weight-normal, 400);color:rgba(var(--ax-sys-color-on-surface))}ax-notification .ax-notification-content .ax-notification-title{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}ax-notification .ax-notification-content .ax-notification-body{--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-notification .ax-notification-content .ax-notification-buttons{margin-top:calc(var(--spacing, .25rem) * 3);display:flex;gap:calc(var(--spacing, .25rem) * 3)}ax-notification .ax-notification-progress{position:absolute;inset-inline-start:calc(var(--spacing, .25rem) * 0);inset-inline-end:calc(var(--spacing, .25rem) * 0);bottom:calc(var(--spacing, .25rem) * 0);height:calc(var(--spacing, .25rem) * 1);width:100%;background-color:var(--ax-comp-bg);transition-property:width;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s));--tw-duration: .3s;transition-duration:.3s;--tw-ease: linear;transition-timing-function:linear}ax-notification .ax-notification-icon,ax-notification .ax-icon-close{max-width:fit-content;align-items:flex-start!important;font-size:var(--text-xl, 1.25rem)!important;line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)))!important}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-duration{syntax: \"*\"; inherits: false;}@property --tw-ease{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial;--tw-leading: initial;--tw-duration: initial;--tw-ease: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
486
493
  }], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], onClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "onClose", required: false }] }] } });
487
494
 
488
495
  class AXNotificationModule {