@acorex/components 21.0.2-next.19 → 21.0.2-next.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, OnDestroy } from '@angular/core';
2
+ import { Signal, ElementRef } from '@angular/core';
3
3
  import * as i2 from '@acorex/cdk/common';
4
4
  import { MXInteractiveComponent, AXClickEvent, NXComponent } from '@acorex/cdk/common';
5
5
  import * as i5 from '@angular/router';
@@ -21,7 +21,7 @@ declare abstract class AXSideMenuBase {
21
21
  declare class AXSideMenuItemClickEvent extends AXClickEvent {
22
22
  handled: boolean;
23
23
  }
24
- declare class AXSideMenuItemComponent extends MXInteractiveComponent implements OnDestroy {
24
+ declare class AXSideMenuItemComponent extends MXInteractiveComponent {
25
25
  #private;
26
26
  text: _angular_core.ModelSignal<string>;
27
27
  active: _angular_core.ModelSignal<boolean>;
@@ -31,26 +31,20 @@ declare class AXSideMenuItemComponent extends MXInteractiveComponent implements
31
31
  tooltipStatus: _angular_core.WritableSignal<boolean>;
32
32
  tooltipText: _angular_core.InputSignal<string>;
33
33
  private elem;
34
- private renderer;
34
+ private document;
35
35
  private platformId;
36
- private zIndexService;
37
- /**
38
- * Parent `<ax-side-menu>` resolved via Angular DI. For items projected
39
- * directly this works; for items inside `ngTemplateOutlet` embedded views
40
- * Angular resolves DI from the template's declaration site (which is NOT
41
- * inside an `<ax-side-menu>`), so this is `null`. In that case we fall back
42
- * to a DOM-walked reference stored in `parentMenuFromDom`.
43
- */
44
- private parentMenu;
45
- /**
46
- * Fallback parent reference resolved by walking up the DOM and reading the
47
- * `__axContext__` property that `MXBaseComponent.ngOnInit` attaches to
48
- * each host element. Populated on first render in the browser.
49
- */
50
- private parentMenuFromDom;
51
36
  private destroyRef;
52
- private zToken;
53
37
  private childObserver;
38
+ private childrenPopover;
39
+ protected menuItemTrigger: _angular_core.Signal<ElementRef<HTMLElement>>;
40
+ /** Synced from the parent `ax-side-menu` (source of truth for full vs compact). */
41
+ private menuMode;
42
+ /** True when this item should use compact flyout popovers (rail or inside a flyout). */
43
+ protected isCompactMode: _angular_core.Signal<boolean>;
44
+ /** Called by `ax-side-menu` so items always know the current display mode. */
45
+ syncMenuMode(mode: 'full' | 'compact'): void;
46
+ /** Top-level rail button in compact mode (icon only, opens flyout). */
47
+ protected isFirstLevel: _angular_core.Signal<boolean>;
54
48
  readonly toggleOnClick: _angular_core.InputSignal<boolean>;
55
49
  readonly href: _angular_core.InputSignal<string>;
56
50
  readonly routerLink: _angular_core.InputSignal<string | any[] | UrlTree>;
@@ -60,7 +54,8 @@ declare class AXSideMenuItemComponent extends MXInteractiveComponent implements
60
54
  } | IsActiveMatchOptions>;
61
55
  readonly target: _angular_core.InputSignal<"_blank" | "_self" | "_parent" | "_top">;
62
56
  private childItems;
63
- private childrenContainer;
57
+ private childrenSlot;
58
+ private popoverSlot;
64
59
  protected hasChild: _angular_core.WritableSignal<boolean>;
65
60
  /**
66
61
  * Walks up the DOM to find the enclosing `<ax-side-menu>` host element and
@@ -68,7 +63,7 @@ declare class AXSideMenuItemComponent extends MXInteractiveComponent implements
68
63
  * rendered inside `ngTemplateOutlet` embedded views cannot inject the
69
64
  * `AXSideMenuBase` token (DI scope is the template's declaration site).
70
65
  */
71
- private resolveParentMenuFromDom;
66
+ private resolveMenuHostElement;
72
67
  /**
73
68
  * Moves any `<ax-side-menu-item>` that belongs to this item (its nearest
74
69
  * `<ax-side-menu-item>` ancestor in the projected DOM is this host) but is
@@ -76,21 +71,26 @@ declare class AXSideMenuItemComponent extends MXInteractiveComponent implements
76
71
  * step a content-projection edge case in Angular 21+ leaves recursive items
77
72
  * stranded inside `.ax-inside-text` (the catch-all `<ng-content>` slot) and
78
73
  * the submenu cannot expand.
79
- *
80
- * IMPORTANT: We resolve our own container via the `childrenContainer`
81
- * view-child (NOT `host.querySelector('.ax-side-children-content')`),
82
- * because `querySelector` is depth-first and would otherwise return the
83
- * deepest *nested* item's container first.
84
74
  */
75
+ private getActiveChildrenSlot;
85
76
  private reparentOrphanedChildren;
86
- ngOnDestroy(): void;
77
+ private syncCompactPopover;
78
+ /** Closes other top-level compact flyouts when a rail item is opened. */
79
+ private closeSiblingCompactPopovers;
80
+ /**
81
+ * Moves projected submenu nodes into the popover panel when opening in compact mode.
82
+ * They are not moved back to the inline slot on close (that caused a full-mode flash below the rail).
83
+ */
84
+ private relocateChildren;
85
+ protected _handlePopoverClosed(): void;
87
86
  private checkForChildren;
87
+ private hasNestedMenuItems;
88
88
  protected _handleClickEvent(e: MouseEvent): void;
89
89
  toggle(): void;
90
90
  open(): void;
91
91
  close(): void;
92
92
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSideMenuItemComponent, never>;
93
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSideMenuItemComponent, "ax-side-menu-item", never, { "disabled": { "alias": "disabled"; "required": false; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "tooltipText": { "alias": "tooltipText"; "required": false; "isSignal": true; }; "toggleOnClick": { "alias": "toggleOnClick"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "routerLinkActive": { "alias": "routerLinkActive"; "required": false; "isSignal": true; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; }, { "text": "textChange"; "active": "activeChange"; "isLoading": "isLoadingChange"; "isCollapsed": "isCollapsedChange"; "onClick": "onClick"; }, ["childItems"], ["ax-title", "ax-side-menu-item, ng-container, [ngTemplateOutlet]", "ax-divider", "ax-prefix", "ax-text", "*", "ax-suffix"], true, never>;
93
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSideMenuItemComponent, "ax-side-menu-item", never, { "disabled": { "alias": "disabled"; "required": false; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "isLoading": { "alias": "isLoading"; "required": false; "isSignal": true; }; "isCollapsed": { "alias": "isCollapsed"; "required": false; "isSignal": true; }; "tooltipText": { "alias": "tooltipText"; "required": false; "isSignal": true; }; "toggleOnClick": { "alias": "toggleOnClick"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "routerLink": { "alias": "routerLink"; "required": false; "isSignal": true; }; "routerLinkActive": { "alias": "routerLinkActive"; "required": false; "isSignal": true; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; }, { "text": "textChange"; "active": "activeChange"; "isLoading": "isLoadingChange"; "isCollapsed": "isCollapsedChange"; "onClick": "onClick"; }, ["childItems"], ["ax-title", "ax-side-menu-item, ng-container, [ngTemplateOutlet]", "ax-divider", "ax-prefix", "*", "ax-suffix"], true, never>;
94
94
  }
95
95
 
96
96
  type AXSideMenuLook = 'pills' | 'with-line' | 'with-line-color' | 'default';
@@ -126,7 +126,6 @@ declare class AXSideMenuComponent extends NXComponent implements AXSideMenuBase
126
126
  readonly location: _angular_core.InputSignal<AXSideMenuLocation>;
127
127
  readonly mode: _angular_core.InputSignal<"full" | "compact">;
128
128
  private elementRef;
129
- private firstLevelItems;
130
129
  /**
131
130
  * All `ax-side-menu-item` instances discovered by walking the host DOM.
132
131
  *
@@ -141,9 +140,7 @@ declare class AXSideMenuComponent extends NXComponent implements AXSideMenuBase
141
140
  private _items;
142
141
  /** Read-only signal exposing every discovered `ax-side-menu-item` instance. */
143
142
  readonly children: _angular_core.Signal<AXSideMenuItemComponent[]>;
144
- private document;
145
143
  private platformId;
146
- private renderer;
147
144
  private destroyRef;
148
145
  hostElement: HTMLElement;
149
146
  /**
@@ -156,8 +153,7 @@ declare class AXSideMenuComponent extends NXComponent implements AXSideMenuBase
156
153
  * templates that add/remove items at runtime stay in sync.
157
154
  */
158
155
  private refreshItemsFromDom;
159
- private closeFirstLevelItems;
160
- addFirstLevelClass(): void;
156
+ private addFirstLevelClass;
161
157
  /** @ignore */
162
158
  private get __hostClass();
163
159
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSideMenuComponent, never>;