@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,12 +1,12 @@
1
1
  import { AXClickEvent, MXInteractiveComponent, AXRippleDirective, AXComponent, NXComponent, AXCommonModule } from '@acorex/cdk/common';
2
2
  import { AXLoadingComponent, AXLoadingModule } from '@acorex/components/loading';
3
+ import { AXPopoverComponent } from '@acorex/components/popover';
3
4
  import * as i1 from '@acorex/components/tooltip';
4
5
  import { AXTooltipModule } from '@acorex/components/tooltip';
5
6
  import { AXTranslatorPipe, AXTranslationModule } from '@acorex/core/translation';
6
- import { AXZIndexService } from '@acorex/core/z-index';
7
- import { isPlatformBrowser, NgTemplateOutlet, AsyncPipe, CommonModule } from '@angular/common';
7
+ import { DOCUMENT, isPlatformBrowser, NgTemplateOutlet, AsyncPipe, CommonModule } from '@angular/common';
8
8
  import * as i0 from '@angular/core';
9
- import { model, output, signal, input, inject, ElementRef, Renderer2, PLATFORM_ID, DestroyRef, contentChildren, viewChild, effect, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, DOCUMENT, HostBinding, Directive, NgModule } from '@angular/core';
9
+ import { model, output, signal, input, inject, ElementRef, PLATFORM_ID, DestroyRef, viewChild, computed, contentChildren, effect, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, HostBinding, Directive, NgModule } from '@angular/core';
10
10
  import { RouterLink, RouterLinkActive, Router } from '@angular/router';
11
11
  import { AXDecoratorGenericComponent, AXDecoratorIconComponent, AXDecoratorModule } from '@acorex/components/decorators';
12
12
  import { AXOutlineContainerDirective } from '@acorex/cdk/outline';
@@ -39,26 +39,39 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
39
39
  this.tooltipStatus = signal(false, ...(ngDevMode ? [{ debugName: "tooltipStatus" }] : []));
40
40
  this.tooltipText = input('', ...(ngDevMode ? [{ debugName: "tooltipText" }] : []));
41
41
  this.elem = inject(ElementRef);
42
- this.renderer = inject(Renderer2);
42
+ this.document = inject(DOCUMENT);
43
43
  this.platformId = inject(PLATFORM_ID);
44
- this.zIndexService = inject(AXZIndexService);
45
- /**
46
- * Parent `<ax-side-menu>` resolved via Angular DI. For items projected
47
- * directly this works; for items inside `ngTemplateOutlet` embedded views
48
- * Angular resolves DI from the template's declaration site (which is NOT
49
- * inside an `<ax-side-menu>`), so this is `null`. In that case we fall back
50
- * to a DOM-walked reference stored in `parentMenuFromDom`.
51
- */
52
- this.parentMenu = inject(AXSideMenuBase, { optional: true });
53
- /**
54
- * Fallback parent reference resolved by walking up the DOM and reading the
55
- * `__axContext__` property that `MXBaseComponent.ngOnInit` attaches to
56
- * each host element. Populated on first render in the browser.
57
- */
58
- this.parentMenuFromDom = signal(null, ...(ngDevMode ? [{ debugName: "parentMenuFromDom" }] : []));
59
44
  this.destroyRef = inject(DestroyRef);
60
- this.zToken = null;
61
45
  this.childObserver = null;
46
+ this.childrenPopover = viewChild('childrenPopover', ...(ngDevMode ? [{ debugName: "childrenPopover" }] : []));
47
+ this.menuItemTrigger = viewChild.required('menuItemTrigger');
48
+ /** Synced from the parent `ax-side-menu` (source of truth for full vs compact). */
49
+ this.menuMode = signal('full', ...(ngDevMode ? [{ debugName: "menuMode" }] : []));
50
+ /** True when this item should use compact flyout popovers (rail or inside a flyout). */
51
+ this.isCompactMode = computed(() => {
52
+ if (this.menuMode() === 'compact') {
53
+ return true;
54
+ }
55
+ if (!isPlatformBrowser(this.platformId)) {
56
+ return false;
57
+ }
58
+ const host = this.elem.nativeElement;
59
+ if (host.closest('.ax-side-menu-popover')) {
60
+ return !!this.document.querySelector('ax-side-menu.ax-mode-compact');
61
+ }
62
+ return !!host.closest('ax-side-menu.ax-mode-compact');
63
+ }, ...(ngDevMode ? [{ debugName: "isCompactMode" }] : []));
64
+ /** Top-level rail button in compact mode (icon only, opens flyout). */
65
+ this.isFirstLevel = computed(() => {
66
+ if (!this.isCompactMode()) {
67
+ return false;
68
+ }
69
+ const host = this.elem.nativeElement;
70
+ if (host.closest('.ax-side-menu-popover')) {
71
+ return false;
72
+ }
73
+ return !host.parentElement?.closest('.ax-side-children-content');
74
+ }, ...(ngDevMode ? [{ debugName: "isFirstLevel" }] : []));
62
75
  this.toggleOnClick = input(true, ...(ngDevMode ? [{ debugName: "toggleOnClick" }] : []));
63
76
  this.href = input(...(ngDevMode ? [undefined, { debugName: "href" }] : []));
64
77
  this.routerLink = input(...(ngDevMode ? [undefined, { debugName: "routerLink" }] : []));
@@ -66,7 +79,8 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
66
79
  this.routerLinkActiveOptions = input({ exact: false }, ...(ngDevMode ? [{ debugName: "routerLinkActiveOptions" }] : []));
67
80
  this.target = input('_self', ...(ngDevMode ? [{ debugName: "target" }] : []));
68
81
  this.childItems = contentChildren(AXSideMenuItemComponent, { ...(ngDevMode ? { debugName: "childItems" } : {}), descendants: true });
69
- this.childrenContainer = viewChild('childrenContainer', ...(ngDevMode ? [{ debugName: "childrenContainer" }] : []));
82
+ this.childrenSlot = viewChild('childrenSlot', ...(ngDevMode ? [{ debugName: "childrenSlot" }] : []));
83
+ this.popoverSlot = viewChild('popoverSlot', ...(ngDevMode ? [{ debugName: "popoverSlot" }] : []));
70
84
  this.hasChild = signal(false, ...(ngDevMode ? [{ debugName: "hasChild" }] : []));
71
85
  this.#childCheckEffect = effect(() => {
72
86
  if (this.childItems().length)
@@ -84,44 +98,47 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
84
98
  this.#initChildren = afterNextRender(() => {
85
99
  if (!isPlatformBrowser(this.platformId))
86
100
  return;
87
- this.resolveParentMenuFromDom();
88
101
  this.reparentOrphanedChildren();
89
102
  this.checkForChildren();
90
103
  this.childObserver = new MutationObserver(() => {
91
104
  this.reparentOrphanedChildren();
92
105
  this.checkForChildren();
93
- // Reparenting can move this element under a different parent menu,
94
- // so re-check on every mutation as well.
95
- if (!this.parentMenu)
96
- this.resolveParentMenuFromDom();
97
106
  });
98
107
  this.childObserver.observe(this.elem.nativeElement, { childList: true, subtree: true });
99
108
  this.destroyRef.onDestroy(() => this.childObserver?.disconnect());
100
109
  });
101
- // In compact mode the children flyout is absolutely positioned, so it needs a
102
- // dynamic z-index from the shared service so the most recently opened submenu
103
- // always sits on top of any sibling/nested flyout.
104
- this.#zIndexEffect = effect(() => {
105
- const isOpen = !this.isCollapsed();
106
- // Prefer the DI-resolved parent; fall back to the DOM-walked one for
107
- // items rendered inside `ngTemplateOutlet` embedded views.
108
- const parent = this.parentMenu ?? this.parentMenuFromDom();
109
- const isCompact = parent?.mode() === 'compact';
110
- const container = this.childrenContainer()?.nativeElement;
111
- if (!isPlatformBrowser(this.platformId) || !container)
110
+ // In compact mode submenus open in an overlay popover; keep collapse state in sync.
111
+ this.#popoverSync = effect(() => {
112
+ const compact = this.isCompactMode();
113
+ this.isCollapsed();
114
+ this.hasChild();
115
+ const popover = this.childrenPopover();
116
+ if (!popover || !isPlatformBrowser(this.platformId)) {
112
117
  return;
113
- if (isCompact && isOpen) {
114
- this.zToken = this.zToken ? this.zIndexService.bringToFront(this.zToken) : this.zIndexService.acquire();
115
- this.renderer.setStyle(container, 'z-index', String(this.zToken.zIndex));
116
118
  }
117
- else {
118
- if (this.zToken) {
119
- this.zIndexService.release(this.zToken);
120
- this.zToken = null;
119
+ if (!compact) {
120
+ this.relocateChildren(false);
121
+ if (popover.isOpen) {
122
+ popover.close();
121
123
  }
122
- this.renderer.removeStyle(container, 'z-index');
124
+ return;
123
125
  }
124
- }, ...(ngDevMode ? [{ debugName: "#zIndexEffect" }] : []));
126
+ this.syncCompactPopover();
127
+ }, ...(ngDevMode ? [{ debugName: "#popoverSync" }] : []));
128
+ }
129
+ /** Called by `ax-side-menu` so items always know the current display mode. */
130
+ syncMenuMode(mode) {
131
+ if (this.menuMode() === mode) {
132
+ return;
133
+ }
134
+ this.menuMode.set(mode);
135
+ if (mode === 'full') {
136
+ this.relocateChildren(false);
137
+ this.childrenPopover()?.close();
138
+ }
139
+ else {
140
+ this.isCollapsed.set(true);
141
+ }
125
142
  }
126
143
  #childCheckEffect;
127
144
  /**
@@ -140,17 +157,12 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
140
157
  * rendered inside `ngTemplateOutlet` embedded views cannot inject the
141
158
  * `AXSideMenuBase` token (DI scope is the template's declaration site).
142
159
  */
143
- resolveParentMenuFromDom() {
144
- if (this.parentMenu)
145
- return;
160
+ resolveMenuHostElement() {
146
161
  const host = this.elem.nativeElement;
147
- const menuEl = host.parentElement?.closest('ax-side-menu');
148
- if (!menuEl)
149
- return;
150
- const instance = menuEl.__axContext__;
151
- if (instance && typeof instance.mode === 'function') {
152
- this.parentMenuFromDom.set(instance);
153
- }
162
+ return (host.closest('ax-side-menu') ??
163
+ (host.closest('.ax-side-menu-popover')
164
+ ? this.document.querySelector('ax-side-menu.ax-mode-compact')
165
+ : null));
154
166
  }
155
167
  /**
156
168
  * Moves any `<ax-side-menu-item>` that belongs to this item (its nearest
@@ -159,18 +171,16 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
159
171
  * step a content-projection edge case in Angular 21+ leaves recursive items
160
172
  * stranded inside `.ax-inside-text` (the catch-all `<ng-content>` slot) and
161
173
  * the submenu cannot expand.
162
- *
163
- * IMPORTANT: We resolve our own container via the `childrenContainer`
164
- * view-child (NOT `host.querySelector('.ax-side-children-content')`),
165
- * because `querySelector` is depth-first and would otherwise return the
166
- * deepest *nested* item's container first.
167
174
  */
175
+ getActiveChildrenSlot() {
176
+ if (this.isCompactMode()) {
177
+ return this.popoverSlot()?.nativeElement ?? this.childrenSlot()?.nativeElement;
178
+ }
179
+ return this.childrenSlot()?.nativeElement;
180
+ }
168
181
  reparentOrphanedChildren() {
169
182
  const host = this.elem.nativeElement;
170
- const childrenWrapper = this.childrenContainer()?.nativeElement;
171
- if (!childrenWrapper)
172
- return;
173
- const container = childrenWrapper.querySelector(':scope > .ax-side-children-content');
183
+ const container = this.getActiveChildrenSlot();
174
184
  if (!container)
175
185
  return;
176
186
  // Only look at this host's *direct* descendants in projection terms:
@@ -194,49 +204,91 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
194
204
  }
195
205
  }
196
206
  }
197
- // In compact mode the children flyout is absolutely positioned, so it needs a
198
- // dynamic z-index from the shared service so the most recently opened submenu
199
- // always sits on top of any sibling/nested flyout.
200
- #zIndexEffect;
201
- ngOnDestroy() {
202
- if (this.zToken) {
203
- this.zIndexService.release(this.zToken);
204
- this.zToken = null;
207
+ // In compact mode submenus open in an overlay popover; keep collapse state in sync.
208
+ #popoverSync;
209
+ syncCompactPopover() {
210
+ if (!isPlatformBrowser(this.platformId) || !this.isCompactMode() || !this.hasChild())
211
+ return;
212
+ const popover = this.childrenPopover();
213
+ if (!popover || popover.disabled)
214
+ return;
215
+ if (this.isCollapsed()) {
216
+ popover.close();
217
+ }
218
+ else {
219
+ if (this.isFirstLevel()) {
220
+ this.closeSiblingCompactPopovers();
221
+ }
222
+ this.relocateChildren(true);
223
+ void popover.open().then(() => popover.bringToFront());
205
224
  }
206
225
  }
207
- checkForChildren() {
208
- const host = this.elem.nativeElement;
209
- const childrenWrapper = this.childrenContainer()?.nativeElement;
210
- // Resolve OUR own content container via the view-child instead of
211
- // `host.querySelector` (which is depth-first and would otherwise return
212
- // a nested item's container).
213
- const contentEl = childrenWrapper?.querySelector(':scope > .ax-side-children-content') ?? null;
214
- if (contentEl) {
215
- // `contentChildren` does not see items rendered inside `ngTemplateOutlet`
216
- // embedded views, so we also scan the DOM for nested items to support
217
- // recursive menu templates (Angular 21+).
218
- const domChildren = contentEl.querySelectorAll('ax-side-menu-item');
219
- // Items might still be stranded in `.ax-inside-text` before reparenting
220
- // happens: count any descendant ax-side-menu-item whose nearest
221
- // ax-side-menu-item ancestor is THIS host.
222
- let strandedCount = 0;
223
- const all = host.querySelectorAll('ax-side-menu-item');
224
- all.forEach((el) => {
225
- if (el === host)
226
- return;
227
- if (contentEl.contains(el))
228
- return; // already in our container
229
- const nearestParent = el.parentElement?.closest('ax-side-menu-item');
230
- if (nearestParent === host)
231
- strandedCount++;
232
- });
233
- const hasChildren = this.childItems().length > 0 || domChildren.length > 0 || strandedCount > 0;
234
- this.hasChild.set(hasChildren);
226
+ /** Closes other top-level compact flyouts when a rail item is opened. */
227
+ closeSiblingCompactPopovers() {
228
+ const menuEl = this.resolveMenuHostElement();
229
+ if (!menuEl)
230
+ return;
231
+ menuEl.querySelectorAll(':scope > ax-side-menu-item').forEach((el) => {
232
+ const instance = el.__axContext__;
233
+ if (!(instance instanceof AXSideMenuItemComponent) || instance === this) {
234
+ return;
235
+ }
236
+ instance.isCollapsed.set(true);
237
+ const siblingPopover = instance.childrenPopover();
238
+ if (siblingPopover?.isOpen) {
239
+ siblingPopover.close();
240
+ }
241
+ });
242
+ }
243
+ /**
244
+ * Moves projected submenu nodes into the popover panel when opening in compact mode.
245
+ * They are not moved back to the inline slot on close (that caused a full-mode flash below the rail).
246
+ */
247
+ relocateChildren(toPopover) {
248
+ const source = this.childrenSlot()?.nativeElement;
249
+ const target = this.popoverSlot()?.nativeElement;
250
+ if (!source || !target) {
251
+ return;
235
252
  }
236
- else {
237
- this.hasChild.set(this.childItems().length > 0);
253
+ if (this.isCompactMode() && !toPopover) {
254
+ return;
255
+ }
256
+ const from = toPopover ? source : target;
257
+ const to = toPopover ? target : source;
258
+ while (from.firstChild) {
259
+ to.appendChild(from.firstChild);
260
+ }
261
+ }
262
+ _handlePopoverClosed() {
263
+ if (!this.isCollapsed()) {
264
+ this.isCollapsed.set(true);
238
265
  }
239
266
  }
267
+ checkForChildren() {
268
+ const host = this.elem.nativeElement;
269
+ const inlineSlot = this.childrenSlot()?.nativeElement ?? null;
270
+ const flyoutSlot = this.popoverSlot()?.nativeElement ?? null;
271
+ const inlineCount = inlineSlot?.querySelectorAll('ax-side-menu-item').length ?? 0;
272
+ const flyoutCount = flyoutSlot?.querySelectorAll('ax-side-menu-item').length ?? 0;
273
+ const contentEl = inlineSlot ?? flyoutSlot;
274
+ this.hasChild.set(this.hasNestedMenuItems(host, contentEl, inlineCount + flyoutCount));
275
+ }
276
+ hasNestedMenuItems(host, contentEl, domChildCount) {
277
+ const inlineSlot = this.childrenSlot()?.nativeElement ?? null;
278
+ const flyoutSlot = this.popoverSlot()?.nativeElement ?? null;
279
+ let strandedCount = 0;
280
+ const all = host.querySelectorAll('ax-side-menu-item');
281
+ all.forEach((el) => {
282
+ if (el === host)
283
+ return;
284
+ if (inlineSlot?.contains(el) || flyoutSlot?.contains(el))
285
+ return;
286
+ const nearestParent = el.parentElement?.closest('ax-side-menu-item');
287
+ if (nearestParent === host)
288
+ strandedCount++;
289
+ });
290
+ return this.childItems().length > 0 || domChildCount > 0 || strandedCount > 0;
291
+ }
240
292
  _handleClickEvent(e) {
241
293
  if (this.disabled || this.isLoading())
242
294
  return;
@@ -247,12 +299,19 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
247
299
  handled: false,
248
300
  };
249
301
  this.onClick.emit(event);
250
- if (!event.handled && this.toggleOnClick()) {
302
+ if (!event.handled && this.toggleOnClick() && (this.hasChild() || !this.isCompactMode())) {
251
303
  this.toggle();
252
304
  }
253
305
  e.stopPropagation();
254
306
  }
255
307
  toggle() {
308
+ if (this.isCompactMode()) {
309
+ if (!this.hasChild())
310
+ return;
311
+ this.isCollapsed.update((prev) => !prev);
312
+ this.syncCompactPopover();
313
+ return;
314
+ }
256
315
  this.isCollapsed.update((prev) => !prev);
257
316
  }
258
317
  open() {
@@ -262,11 +321,11 @@ class AXSideMenuItemComponent extends MXInteractiveComponent {
262
321
  this.isCollapsed.set(false);
263
322
  }
264
323
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXSideMenuItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
265
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: AXSideMenuItemComponent, isStandalone: true, selector: "ax-side-menu-item", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isCollapsed: { classPropertyName: "isCollapsed", publicName: "isCollapsed", isSignal: true, isRequired: false, transformFunction: null }, tooltipText: { classPropertyName: "tooltipText", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, toggleOnClick: { classPropertyName: "toggleOnClick", publicName: "toggleOnClick", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActive: { classPropertyName: "routerLinkActive", publicName: "routerLinkActive", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { text: "textChange", active: "activeChange", isLoading: "isLoadingChange", isCollapsed: "isCollapsedChange", onClick: "onClick" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [{ provide: AXComponent, useExisting: AXSideMenuItemComponent }], queries: [{ propertyName: "childItems", predicate: AXSideMenuItemComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "childrenContainer", first: true, predicate: ["childrenContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div [axTooltip]=\"tooltipStatus() ? tooltipText() : null\">\n <ng-content select=\"ax-title\"></ng-content>\n @if (routerLink()) {\n <a\n [axRipple]\n [target]=\"target()\"\n class=\"ax-side-item\"\n [routerLink]=\"routerLink()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [routerLinkActive]=\"routerLinkActive()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else if (href()) {\n <a\n [axRipple]\n [href]=\"href()\"\n [target]=\"target()\"\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else {\n <div\n [axRipple]\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </div>\n }\n\n <div\n #childrenContainer\n class=\"ax-side-children\"\n [class.ax-collapsed]=\"isCollapsed()\"\n [class.ax-empty]=\"!hasChild() && !isLoading()\"\n >\n @if (isLoading()) {\n <p>{{ '@acorex:common.status.loading' | translate | async }}</p>\n }\n <div class=\"ax-side-children-content\" [hidden]=\"isLoading()\">\n <ng-content select=\"ax-side-menu-item, ng-container, [ngTemplateOutlet]\"></ng-content>\n </div>\n </div>\n\n <ng-content select=\"ax-divider\"></ng-content>\n <ng-template #menuItemContent>\n <div class=\"ax-start-side\">\n <ng-content select=\"ax-prefix\"></ng-content>\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <ng-content select=\"ax-text\"></ng-content>\n <div class=\"ax-inside-text\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"ax-end-side\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasChild() && !isLoading() && toggleOnClick()) {\n <span class=\"ax-icon ax-icon-chevron-right arrow-icon\" [class.arrow-icon-expand]=\"!isCollapsed()\"> </span>\n }\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i1.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: AXSideMenuItemComponent, isStandalone: true, selector: "ax-side-menu-item", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, isCollapsed: { classPropertyName: "isCollapsed", publicName: "isCollapsed", isSignal: true, isRequired: false, transformFunction: null }, tooltipText: { classPropertyName: "tooltipText", publicName: "tooltipText", isSignal: true, isRequired: false, transformFunction: null }, toggleOnClick: { classPropertyName: "toggleOnClick", publicName: "toggleOnClick", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActive: { classPropertyName: "routerLinkActive", publicName: "routerLinkActive", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { text: "textChange", active: "activeChange", isLoading: "isLoadingChange", isCollapsed: "isCollapsedChange", onClick: "onClick" }, providers: [{ provide: AXComponent, useExisting: AXSideMenuItemComponent }], queries: [{ propertyName: "childItems", predicate: AXSideMenuItemComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "childrenPopover", first: true, predicate: ["childrenPopover"], descendants: true, isSignal: true }, { propertyName: "menuItemTrigger", first: true, predicate: ["menuItemTrigger"], descendants: true, isSignal: true }, { propertyName: "childrenSlot", first: true, predicate: ["childrenSlot"], descendants: true, isSignal: true }, { propertyName: "popoverSlot", first: true, predicate: ["popoverSlot"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div [axTooltip]=\"tooltipStatus() ? tooltipText() : null\">\n <ng-content select=\"ax-title\"></ng-content>\n @if (routerLink()) {\n <a\n #menuItemTrigger\n [axRipple]\n [target]=\"target()\"\n class=\"ax-side-item\"\n [routerLink]=\"routerLink()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [routerLinkActive]=\"routerLinkActive()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else if (href()) {\n <a\n #menuItemTrigger\n [axRipple]\n [href]=\"href()\"\n [target]=\"target()\"\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else {\n <div\n #menuItemTrigger\n [axRipple]\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </div>\n }\n\n <div\n class=\"ax-side-children\"\n [class.ax-collapsed]=\"!isCompactMode() && isCollapsed()\"\n [class.ax-empty]=\"!hasChild() && !isLoading()\"\n >\n @if (isLoading()) {\n <p>{{ '@acorex:common.status.loading' | translate | async }}</p>\n }\n <div #childrenSlot class=\"ax-side-children-content\" [hidden]=\"isLoading()\">\n <ng-content select=\"ax-side-menu-item, ng-container, [ngTemplateOutlet]\"></ng-content>\n </div>\n </div>\n\n <ax-popover\n #childrenPopover\n class=\"ax-side-menu-children-popover\"\n [target]=\"menuItemTrigger().nativeElement\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'end-top'\"\n [offsetX]=\"8\"\n [disabled]=\"!isCompactMode() || disabled || isLoading()\"\n panelClass=\"ax-side-menu-popover\"\n (onClosed)=\"_handlePopoverClosed()\"\n >\n <div #popoverSlot class=\"ax-side-children-content\"></div>\n </ax-popover>\n\n <ng-content select=\"ax-divider\"></ng-content>\n <ng-template #menuItemContent>\n <div class=\"ax-start-side\">\n <ng-content select=\"ax-prefix\"></ng-content>\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <div class=\"ax-inside-text\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"ax-end-side\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasChild() && !isLoading() && toggleOnClick() && !isFirstLevel()) {\n <span class=\"ax-icon ax-icon-chevron-right arrow-icon\" [class.arrow-icon-expand]=\"!isCollapsed()\"> </span>\n }\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n </div>\n </ng-template>\n</div>\n", dependencies: [{ kind: "directive", type: AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i1.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "component", type: AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
266
325
  }
267
326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXSideMenuItemComponent, decorators: [{
268
327
  type: Component,
269
- args: [{ selector: 'ax-side-menu-item', inputs: ['disabled'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { ngSkipHydration: 'true' }, imports: [
328
+ args: [{ selector: 'ax-side-menu-item', inputs: ['disabled'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
270
329
  AXRippleDirective,
271
330
  RouterLink,
272
331
  RouterLinkActive,
@@ -275,8 +334,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
275
334
  AsyncPipe,
276
335
  AXTranslatorPipe,
277
336
  AXTooltipModule,
278
- ], providers: [{ provide: AXComponent, useExisting: AXSideMenuItemComponent }], template: "<div [axTooltip]=\"tooltipStatus() ? tooltipText() : null\">\n <ng-content select=\"ax-title\"></ng-content>\n @if (routerLink()) {\n <a\n [axRipple]\n [target]=\"target()\"\n class=\"ax-side-item\"\n [routerLink]=\"routerLink()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [routerLinkActive]=\"routerLinkActive()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else if (href()) {\n <a\n [axRipple]\n [href]=\"href()\"\n [target]=\"target()\"\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else {\n <div\n [axRipple]\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </div>\n }\n\n <div\n #childrenContainer\n class=\"ax-side-children\"\n [class.ax-collapsed]=\"isCollapsed()\"\n [class.ax-empty]=\"!hasChild() && !isLoading()\"\n >\n @if (isLoading()) {\n <p>{{ '@acorex:common.status.loading' | translate | async }}</p>\n }\n <div class=\"ax-side-children-content\" [hidden]=\"isLoading()\">\n <ng-content select=\"ax-side-menu-item, ng-container, [ngTemplateOutlet]\"></ng-content>\n </div>\n </div>\n\n <ng-content select=\"ax-divider\"></ng-content>\n <ng-template #menuItemContent>\n <div class=\"ax-start-side\">\n <ng-content select=\"ax-prefix\"></ng-content>\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <ng-content select=\"ax-text\"></ng-content>\n <div class=\"ax-inside-text\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"ax-end-side\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasChild() && !isLoading() && toggleOnClick()) {\n <span class=\"ax-icon ax-icon-chevron-right arrow-icon\" [class.arrow-icon-expand]=\"!isCollapsed()\"> </span>\n }\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n </div>\n </ng-template>\n</div>\n" }]
279
- }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }, { type: i0.Output, args: ["textChange"] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }, { type: i0.Output, args: ["isLoadingChange"] }], isCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCollapsed", required: false }] }, { type: i0.Output, args: ["isCollapsedChange"] }], onClick: [{ type: i0.Output, args: ["onClick"] }], tooltipText: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipText", required: false }] }], toggleOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleOnClick", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActive", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], childItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXSideMenuItemComponent), { ...{ descendants: true }, isSignal: true }] }], childrenContainer: [{ type: i0.ViewChild, args: ['childrenContainer', { isSignal: true }] }] } });
337
+ AXPopoverComponent,
338
+ ], providers: [{ provide: AXComponent, useExisting: AXSideMenuItemComponent }], template: "<div [axTooltip]=\"tooltipStatus() ? tooltipText() : null\">\n <ng-content select=\"ax-title\"></ng-content>\n @if (routerLink()) {\n <a\n #menuItemTrigger\n [axRipple]\n [target]=\"target()\"\n class=\"ax-side-item\"\n [routerLink]=\"routerLink()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n [routerLinkActive]=\"routerLinkActive()\"\n [routerLinkActiveOptions]=\"routerLinkActiveOptions()\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else if (href()) {\n <a\n #menuItemTrigger\n [axRipple]\n [href]=\"href()\"\n [target]=\"target()\"\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </a>\n } @else {\n <div\n #menuItemTrigger\n [axRipple]\n class=\"ax-side-item\"\n [class.ax-state-active]=\"active()\"\n (click)=\"_handleClickEvent($event)\"\n [class.ax-state-disabled]=\"disabled\"\n >\n <ng-container [ngTemplateOutlet]=\"menuItemContent\"></ng-container>\n </div>\n }\n\n <div\n class=\"ax-side-children\"\n [class.ax-collapsed]=\"!isCompactMode() && isCollapsed()\"\n [class.ax-empty]=\"!hasChild() && !isLoading()\"\n >\n @if (isLoading()) {\n <p>{{ '@acorex:common.status.loading' | translate | async }}</p>\n }\n <div #childrenSlot class=\"ax-side-children-content\" [hidden]=\"isLoading()\">\n <ng-content select=\"ax-side-menu-item, ng-container, [ngTemplateOutlet]\"></ng-content>\n </div>\n </div>\n\n <ax-popover\n #childrenPopover\n class=\"ax-side-menu-children-popover\"\n [target]=\"menuItemTrigger().nativeElement\"\n [openOn]=\"'manual'\"\n [closeOn]=\"'clickOut'\"\n [placement]=\"'end-top'\"\n [offsetX]=\"8\"\n [disabled]=\"!isCompactMode() || disabled || isLoading()\"\n panelClass=\"ax-side-menu-popover\"\n (onClosed)=\"_handlePopoverClosed()\"\n >\n <div #popoverSlot class=\"ax-side-children-content\"></div>\n </ax-popover>\n\n <ng-content select=\"ax-divider\"></ng-content>\n <ng-template #menuItemContent>\n <div class=\"ax-start-side\">\n <ng-content select=\"ax-prefix\"></ng-content>\n @if (text()) {\n <span>{{ text() }}</span>\n }\n <div class=\"ax-inside-text\">\n <ng-content></ng-content>\n </div>\n </div>\n <div class=\"ax-end-side\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasChild() && !isLoading() && toggleOnClick() && !isFirstLevel()) {\n <span class=\"ax-icon ax-icon-chevron-right arrow-icon\" [class.arrow-icon-expand]=\"!isCollapsed()\"> </span>\n }\n @if (isLoading()) {\n <ax-loading></ax-loading>\n }\n </div>\n </ng-template>\n</div>\n" }]
339
+ }], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: false }] }, { type: i0.Output, args: ["textChange"] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }, { type: i0.Output, args: ["activeChange"] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }, { type: i0.Output, args: ["isLoadingChange"] }], isCollapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCollapsed", required: false }] }, { type: i0.Output, args: ["isCollapsedChange"] }], onClick: [{ type: i0.Output, args: ["onClick"] }], tooltipText: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipText", required: false }] }], childrenPopover: [{ type: i0.ViewChild, args: ['childrenPopover', { isSignal: true }] }], menuItemTrigger: [{ type: i0.ViewChild, args: ['menuItemTrigger', { isSignal: true }] }], toggleOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleOnClick", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActive", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], childItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AXSideMenuItemComponent), { ...{ descendants: true }, isSignal: true }] }], childrenSlot: [{ type: i0.ViewChild, args: ['childrenSlot', { isSignal: true }] }], popoverSlot: [{ type: i0.ViewChild, args: ['popoverSlot', { isSignal: true }] }] } });
280
340
 
281
341
  /**
282
342
  * @category
@@ -290,7 +350,6 @@ class AXSideMenuComponent extends NXComponent {
290
350
  this.location = input('start', ...(ngDevMode ? [{ debugName: "location" }] : []));
291
351
  this.mode = input('full', ...(ngDevMode ? [{ debugName: "mode" }] : []));
292
352
  this.elementRef = inject(ElementRef);
293
- this.firstLevelItems = signal([], ...(ngDevMode ? [{ debugName: "firstLevelItems" }] : []));
294
353
  /**
295
354
  * All `ax-side-menu-item` instances discovered by walking the host DOM.
296
355
  *
@@ -305,9 +364,7 @@ class AXSideMenuComponent extends NXComponent {
305
364
  this._items = signal([], ...(ngDevMode ? [{ debugName: "_items" }] : []));
306
365
  /** Read-only signal exposing every discovered `ax-side-menu-item` instance. */
307
366
  this.children = this._items.asReadonly();
308
- this.document = inject(DOCUMENT);
309
367
  this.platformId = inject(PLATFORM_ID);
310
- this.renderer = inject(Renderer2);
311
368
  this.destroyRef = inject(DestroyRef);
312
369
  this.hostElement = this.elementRef.nativeElement;
313
370
  this.#init = afterNextRender(() => {
@@ -318,48 +375,23 @@ class AXSideMenuComponent extends NXComponent {
318
375
  observer.observe(this.elementRef.nativeElement, { childList: true, subtree: true });
319
376
  this.destroyRef.onDestroy(() => observer.disconnect());
320
377
  });
321
- this.#eff = effect(() => {
322
- if (this.mode() === 'compact') {
323
- this.firstLevelItems().forEach((item) => {
324
- item.tooltipStatus.set(true);
325
- });
326
- }
327
- else {
328
- this.firstLevelItems().forEach((item) => {
329
- item.tooltipStatus.set(false);
330
- });
331
- }
332
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
333
- this.#eff2 = effect(() => {
378
+ this.#syncTooltips = effect(() => {
334
379
  const isCompact = this.mode() === 'compact';
335
380
  this._items().forEach((item) => {
336
381
  const isFirstLevel = !item.getHostElement().parentElement?.closest('.ax-side-children-content');
337
382
  item.tooltipStatus.set(isCompact && isFirstLevel);
338
383
  });
339
- }, ...(ngDevMode ? [{ debugName: "#eff2" }] : []));
340
- // In compact mode, first-level items render their submenu as an absolutely positioned
341
- // flyout. Close any open first-level item when the user clicks anywhere outside the menu.
342
- this.#outsideClickEff = effect((onCleanup) => {
343
- if (!isPlatformBrowser(this.platformId))
344
- return;
345
- if (this.mode() !== 'compact')
346
- return;
347
- const host = this.elementRef.nativeElement;
348
- const unlisten = this.renderer.listen(this.document, 'click', (event) => {
349
- const target = event.target;
350
- if (!target || host.contains(target))
351
- return;
352
- this.closeFirstLevelItems();
353
- });
354
- onCleanup(() => unlisten());
355
- }, ...(ngDevMode ? [{ debugName: "#outsideClickEff" }] : []));
384
+ }, ...(ngDevMode ? [{ debugName: "#syncTooltips" }] : []));
385
+ /** Push full/compact mode to every menu item whenever mode changes. */
386
+ this.#syncItemMode = effect(() => {
387
+ const mode = this.mode();
388
+ this._items().forEach((item) => item.syncMenuMode(mode));
389
+ }, ...(ngDevMode ? [{ debugName: "#syncItemMode" }] : []));
356
390
  }
357
391
  #init;
358
- #eff;
359
- #eff2;
360
- // In compact mode, first-level items render their submenu as an absolutely positioned
361
- // flyout. Close any open first-level item when the user clicks anywhere outside the menu.
362
- #outsideClickEff;
392
+ #syncTooltips;
393
+ /** Push full/compact mode to every menu item whenever mode changes. */
394
+ #syncItemMode;
363
395
  /**
364
396
  * Walks the host DOM to discover every nested `ax-side-menu-item`, looks up
365
397
  * the component instance through the `__axContext__` property that
@@ -386,29 +418,15 @@ class AXSideMenuComponent extends NXComponent {
386
418
  }
387
419
  this.addFirstLevelClass();
388
420
  }
389
- closeFirstLevelItems() {
390
- this._items().forEach((item) => {
391
- const isFirstLevel = !item.getHostElement().parentElement?.closest('.ax-side-children-content');
392
- if (isFirstLevel && !item.isCollapsed()) {
393
- item.isCollapsed.set(true);
394
- }
395
- });
396
- }
397
421
  addFirstLevelClass() {
398
422
  const allChildren = this._items();
399
- if (!allChildren.length) {
400
- this.firstLevelItems.set([]);
401
- return;
402
- }
403
423
  allChildren.forEach((item) => item.getHostElement().querySelector('.ax-side-item')?.classList.remove('first-level'));
404
- const filter = allChildren.filter((item) => {
424
+ allChildren
425
+ .filter((item) => {
405
426
  const itemElement = item.getHostElement();
406
427
  return this.hostElement.contains(itemElement) && !itemElement.parentElement?.closest('.ax-side-children-content');
407
- });
408
- this.firstLevelItems.set(filter);
409
- filter.forEach((item) => {
410
- item.getHostElement().querySelector('.ax-side-item')?.classList.add('first-level');
411
- });
428
+ })
429
+ .forEach((item) => item.getHostElement().querySelector('.ax-side-item')?.classList.add('first-level'));
412
430
  }
413
431
  /** @ignore */
414
432
  get __hostClass() {
@@ -418,7 +436,7 @@ class AXSideMenuComponent extends NXComponent {
418
436
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: AXSideMenuComponent, isStandalone: true, selector: "ax-side-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, location: { classPropertyName: "location", publicName: "location", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { properties: { "class": "this.__hostClass" } }, providers: [
419
437
  { provide: AXComponent, useExisting: AXSideMenuComponent },
420
438
  { provide: AXSideMenuBase, useExisting: AXSideMenuComponent },
421
- ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-side-menu-item,ax-title,ng-container,[ngTemplateOutlet]\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n<ng-template #Recursion let-item>\n @if (item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n @if (item.routerLink) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [target]=\"item.target\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [routerLink]=\"item.routerLink\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n [routerLinkActive]=\"item.routerLinkActive\"\n [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else if (item.href) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else {\n <ax-side-menu-item\n [text]=\"item.text\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n }\n\n <ng-template #sideMenuItemContent>\n <ax-prefix>\n @if (item.icon) {\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n }\n </ax-prefix>\n @if (item.data) {\n <ax-text>{{ item.data }}</ax-text>\n }\n @if (item.suffixText) {\n <ax-suffix>\n <ax-text>{{ item.suffixText }}</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 </ng-template>\n</ng-template>\n", styles: ["@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-font-weight:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer base{:root{--ax-comp-side-menu-indicator-size:2px}}@layer components{ax-side-menu{gap:calc(var(--spacing,.25rem) * 2);width:100%;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none;flex-direction:column;display:flex}ax-side-menu>ax-title{margin-block:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-title{margin-block:calc(var(--spacing,.25rem) * 2);margin-top:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-divider{margin-block:calc(var(--spacing,.25rem) * 1);background-color:rgba(var(--ax-sys-color-border-lightest-surface));width:100%;height:1px;display:block}ax-side-menu ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:inherit;--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);display:flex;position:relative}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled .ax-ripple{opacity:0}:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active):not(:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active).ax-state-disabled) ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-start-side,ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand{rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *),ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand-first-level{rotate:-90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand-first-level:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:rgba(var(--ax-sys-color-on-surface))!important}@supports (color:color-mix(in lab,red,red)){ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 30%,transparent)!important}}ax-side-menu ax-side-menu-item .ax-side-children{opacity:1;transition-property:grid-template-rows,opacity;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));grid-template-rows:1fr;padding-inline-start:calc(var(--spacing,.25rem) * 5);display:grid}ax-side-menu ax-side-menu-item .ax-side-children.ax-collapsed{opacity:0;grid-template-rows:0fr}ax-side-menu ax-side-menu-item .ax-side-children.ax-empty{display:none}ax-side-menu ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:hidden}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child{padding-top:var(--ax-comp-side-menu-children-gap,.5rem);padding-top:calc(var(--spacing,.25rem) * 2)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child ax-title{margin-top:calc(var(--spacing,.25rem) * 4)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}ax-side-menu ax-side-menu-item .ax-side-children-content{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item{border-radius:var(--ax-sys-border-radius)}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-d isabled){background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color{gap:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-ripple{display:none}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-start:calc(var(--spacing,.25rem) * 0)}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-end:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item{position:relative}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item):before{background-color:rgba(var(--ax-sys-color-border-lightest-surface));height:100%;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-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item:hover:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-disabled),:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled){color:rgba(var(--ax-sys-color-primary-surface))}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled):before{height:100%;width:var(--ax-comp-side-menu-indicator-size);background-color:rgba(var(--ax-comp-side-menu-indicator-active-color,var(--ax-comp-side-menu-bg-color,var(--ax-sys-color-primary-surface))));--tw-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children{gap:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 5%,transparent)}}ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}ax-side-menu.ax-look-default{gap:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default ax-icon{opacity:.6}ax-side-menu.ax-look-default .ax-side-item{border-radius:var(--ax-sys-border-radius);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2)}ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 50%,transparent)}}ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 10%,transparent)}}ax-side-menu.ax-look-default .ax-side-children{gap:calc(var(--spacing,.25rem) * 1);padding-inline-start:calc(var(--spacing,.25rem) * 9);position:relative}ax-side-menu.ax-look-default .ax-side-children:before{background-color:rgba(var(--ax-sys-color-border-light-surface));--tw-content:\"\";content:var(--tw-content);width:1px;height:100%;margin-inline-start:calc(var(--spacing,.25rem) * 6);position:absolute}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item .ax-side-item{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-mode-compact{width:fit-content!important}ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}:is(ax-side-menu.ax-mode-compact.ax-look-with-line,ax-side-menu.ax-mode-compact.ax-look-with-line-color) ax-side-menu-item .ax-side-children:before{display:none}ax-side-menu.ax-mode-compact ax-side-menu-item{position:relative;padding:calc(var(--spacing,.25rem) * .5)!important}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children{top:calc(var(--spacing,.25rem) * 0);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing,.25rem) * 1);position:absolute;left:calc(100% + .5rem);right:auto}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:auto;right:calc(100% + .5rem)}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:visible}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{white-space:nowrap}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{rotate:90deg}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand,ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:0deg}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item.first-level .ax-end-side,ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item.first-level .ax-inside-text:not(.ax-badge-text){display:none!important}[dir=rtl] ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon:before{--tw-scale-x: -100% ;scale:var(--tw-scale-x) var(--tw-scale-y)}}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}\n/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXSideMenuItemComponent, selector: "ax-side-menu-item", inputs: ["disabled", "text", "active", "isLoading", "isCollapsed", "tooltipText", "toggleOnClick", "href", "routerLink", "routerLinkActive", "routerLinkActiveOptions", "target"], outputs: ["textChange", "activeChange", "isLoadingChange", "isCollapsedChange", "onClick"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
439
+ ], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-side-menu-item,ax-title,ng-container,[ngTemplateOutlet]\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n<ng-template #Recursion let-item>\n @if (item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n @if (item.routerLink) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [target]=\"item.target\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [routerLink]=\"item.routerLink\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n [routerLinkActive]=\"item.routerLinkActive\"\n [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else if (item.href) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else {\n <ax-side-menu-item\n [text]=\"item.text\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n }\n\n <ng-template #sideMenuItemContent>\n <ax-prefix>\n @if (item.icon) {\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n }\n </ax-prefix>\n @if (item.data) {\n <ax-text>{{ item.data }}</ax-text>\n }\n @if (item.suffixText) {\n <ax-suffix>\n <ax-text>{{ item.suffixText }}</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 </ng-template>\n</ng-template>\n", styles: ["@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-font-weight:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer base{:root{--ax-comp-side-menu-indicator-size:2px}}@layer components{ax-side-menu{gap:calc(var(--spacing,.25rem) * 2);width:100%;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none;flex-direction:column;display:flex}ax-side-menu>ax-title{margin-block:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-title{margin-block:calc(var(--spacing,.25rem) * 2);margin-top:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-divider{margin-block:calc(var(--spacing,.25rem) * 1);background-color:rgba(var(--ax-sys-color-border-lightest-surface));width:100%;height:1px;display:block}ax-side-menu ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:inherit;--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);display:flex;position:relative}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled .ax-ripple{opacity:0}:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active):not(:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active).ax-state-disabled) ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-start-side,ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand{rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:rgba(var(--ax-sys-color-on-surface))!important}@supports (color:color-mix(in lab,red,red)){ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 30%,transparent)!important}}ax-side-menu ax-side-menu-item .ax-side-children{opacity:1;transition-property:grid-template-rows,opacity;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));grid-template-rows:1fr;padding-inline-start:calc(var(--spacing,.25rem) * 5);display:grid}ax-side-menu ax-side-menu-item .ax-side-children.ax-collapsed{opacity:0;grid-template-rows:0fr}ax-side-menu ax-side-menu-item .ax-side-children.ax-empty{display:none}ax-side-menu ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:hidden}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child{padding-top:var(--ax-comp-side-menu-children-gap,.5rem);padding-top:calc(var(--spacing,.25rem) * 2)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child ax-title{margin-top:calc(var(--spacing,.25rem) * 4)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}ax-side-menu ax-side-menu-item .ax-side-children-content{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item{border-radius:var(--ax-sys-border-radius)}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-d isabled){background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color{gap:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-ripple{display:none}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-start:calc(var(--spacing,.25rem) * 0)}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-end:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item{position:relative}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item):before{background-color:rgba(var(--ax-sys-color-border-lightest-surface));height:100%;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-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item:hover:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-disabled),:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled){color:rgba(var(--ax-sys-color-primary-surface))}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled):before{height:100%;width:var(--ax-comp-side-menu-indicator-size);background-color:rgba(var(--ax-comp-side-menu-indicator-active-color,var(--ax-comp-side-menu-bg-color,var(--ax-sys-color-primary-surface))));--tw-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children{gap:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 5%,transparent)}}ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}ax-side-menu.ax-look-default{gap:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default ax-icon{opacity:.6}ax-side-menu.ax-look-default .ax-side-item{border-radius:var(--ax-sys-border-radius);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2)}ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 50%,transparent)}}ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 10%,transparent)}}ax-side-menu.ax-look-default .ax-side-children{gap:calc(var(--spacing,.25rem) * 1);padding-inline-start:calc(var(--spacing,.25rem) * 9);position:relative}ax-side-menu.ax-look-default .ax-side-children:before{background-color:rgba(var(--ax-sys-color-border-light-surface));--tw-content:\"\";content:var(--tw-content);width:1px;height:100%;margin-inline-start:calc(var(--spacing,.25rem) * 6);position:absolute}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item .ax-side-item{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-mode-compact{width:fit-content!important}ax-side-menu.ax-mode-compact .ax-inside-text{display:none}ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item:hover:not(ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-active:not(ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-mode-compact ax-side-menu-item{position:relative;padding:calc(var(--spacing,.25rem) * .5)!important}[dir=rtl] ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon:before{--tw-scale-x: -100% ;scale:var(--tw-scale-x) var(--tw-scale-y)}.ax-side-menu-popover{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none}.ax-side-menu-popover .ax-side-children-content{min-width:calc(var(--spacing,.25rem) * 40);gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex;overflow:visible}.ax-side-menu-popover ax-side-menu-item{width:100%;padding:calc(var(--spacing,.25rem) * 0);display:block;position:relative}.ax-side-menu-popover ax-side-menu-item .ax-side-children.ax-empty,.ax-side-menu-popover ax-side-menu-item>ax-popover.ax-side-menu-children-popover>.ax-side-menu-popover-host{display:none}.ax-side-menu-popover ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--ax-sys-border-radius);width:100%;padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400);white-space:nowrap;display:flex;position:relative}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-start-side,.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block;rotate:90deg}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand,.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:0deg}.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}\n/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXSideMenuItemComponent, selector: "ax-side-menu-item", inputs: ["disabled", "text", "active", "isLoading", "isCollapsed", "tooltipText", "toggleOnClick", "href", "routerLink", "routerLinkActive", "routerLinkActiveOptions", "target"], outputs: ["textChange", "activeChange", "isLoadingChange", "isCollapsedChange", "onClick"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
422
440
  }
423
441
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: AXSideMenuComponent, decorators: [{
424
442
  type: Component,
@@ -432,7 +450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
432
450
  ], providers: [
433
451
  { provide: AXComponent, useExisting: AXSideMenuComponent },
434
452
  { provide: AXSideMenuBase, useExisting: AXSideMenuComponent },
435
- ], template: "<ng-content select=\"ax-side-menu-item,ax-title,ng-container,[ngTemplateOutlet]\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n<ng-template #Recursion let-item>\n @if (item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n @if (item.routerLink) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [target]=\"item.target\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [routerLink]=\"item.routerLink\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n [routerLinkActive]=\"item.routerLinkActive\"\n [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else if (item.href) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else {\n <ax-side-menu-item\n [text]=\"item.text\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n }\n\n <ng-template #sideMenuItemContent>\n <ax-prefix>\n @if (item.icon) {\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n }\n </ax-prefix>\n @if (item.data) {\n <ax-text>{{ item.data }}</ax-text>\n }\n @if (item.suffixText) {\n <ax-suffix>\n <ax-text>{{ item.suffixText }}</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 </ng-template>\n</ng-template>\n", styles: ["@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-font-weight:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer base{:root{--ax-comp-side-menu-indicator-size:2px}}@layer components{ax-side-menu{gap:calc(var(--spacing,.25rem) * 2);width:100%;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none;flex-direction:column;display:flex}ax-side-menu>ax-title{margin-block:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-title{margin-block:calc(var(--spacing,.25rem) * 2);margin-top:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-divider{margin-block:calc(var(--spacing,.25rem) * 1);background-color:rgba(var(--ax-sys-color-border-lightest-surface));width:100%;height:1px;display:block}ax-side-menu ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:inherit;--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);display:flex;position:relative}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled .ax-ripple{opacity:0}:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active):not(:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active).ax-state-disabled) ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-start-side,ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand{rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *),ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand-first-level{rotate:-90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand-first-level:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:rgba(var(--ax-sys-color-on-surface))!important}@supports (color:color-mix(in lab,red,red)){ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 30%,transparent)!important}}ax-side-menu ax-side-menu-item .ax-side-children{opacity:1;transition-property:grid-template-rows,opacity;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));grid-template-rows:1fr;padding-inline-start:calc(var(--spacing,.25rem) * 5);display:grid}ax-side-menu ax-side-menu-item .ax-side-children.ax-collapsed{opacity:0;grid-template-rows:0fr}ax-side-menu ax-side-menu-item .ax-side-children.ax-empty{display:none}ax-side-menu ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:hidden}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child{padding-top:var(--ax-comp-side-menu-children-gap,.5rem);padding-top:calc(var(--spacing,.25rem) * 2)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child ax-title{margin-top:calc(var(--spacing,.25rem) * 4)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}ax-side-menu ax-side-menu-item .ax-side-children-content{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item{border-radius:var(--ax-sys-border-radius)}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-d isabled){background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color{gap:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-ripple{display:none}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-start:calc(var(--spacing,.25rem) * 0)}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-end:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item{position:relative}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item):before{background-color:rgba(var(--ax-sys-color-border-lightest-surface));height:100%;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-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item:hover:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-disabled),:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled){color:rgba(var(--ax-sys-color-primary-surface))}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled):before{height:100%;width:var(--ax-comp-side-menu-indicator-size);background-color:rgba(var(--ax-comp-side-menu-indicator-active-color,var(--ax-comp-side-menu-bg-color,var(--ax-sys-color-primary-surface))));--tw-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children{gap:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 5%,transparent)}}ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}ax-side-menu.ax-look-default{gap:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default ax-icon{opacity:.6}ax-side-menu.ax-look-default .ax-side-item{border-radius:var(--ax-sys-border-radius);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2)}ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 50%,transparent)}}ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 10%,transparent)}}ax-side-menu.ax-look-default .ax-side-children{gap:calc(var(--spacing,.25rem) * 1);padding-inline-start:calc(var(--spacing,.25rem) * 9);position:relative}ax-side-menu.ax-look-default .ax-side-children:before{background-color:rgba(var(--ax-sys-color-border-light-surface));--tw-content:\"\";content:var(--tw-content);width:1px;height:100%;margin-inline-start:calc(var(--spacing,.25rem) * 6);position:absolute}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item .ax-side-item{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-mode-compact{width:fit-content!important}ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-mode-compact.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}:is(ax-side-menu.ax-mode-compact.ax-look-with-line,ax-side-menu.ax-mode-compact.ax-look-with-line-color) ax-side-menu-item .ax-side-children:before{display:none}ax-side-menu.ax-mode-compact ax-side-menu-item{position:relative;padding:calc(var(--spacing,.25rem) * .5)!important}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children{top:calc(var(--spacing,.25rem) * 0);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing,.25rem) * 1);position:absolute;left:calc(100% + .5rem);right:auto}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children:where(:dir(rtl),[dir=rtl],[dir=rtl] *){left:auto;right:calc(100% + .5rem)}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:visible}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{white-space:nowrap}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{rotate:90deg}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand,ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:0deg}ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item.first-level .ax-end-side,ax-side-menu.ax-mode-compact ax-side-menu-item .ax-side-item.first-level .ax-inside-text:not(.ax-badge-text){display:none!important}[dir=rtl] ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon:before{--tw-scale-x: -100% ;scale:var(--tw-scale-x) var(--tw-scale-y)}}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}\n/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n"] }]
453
+ ], template: "<ng-content select=\"ax-side-menu-item,ax-title,ng-container,[ngTemplateOutlet]\"></ng-content>\n\n@for (node of items(); track node) {\n <ng-container [ngTemplateOutlet]=\"Recursion\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-container>\n}\n<ng-template #Recursion let-item>\n @if (item.title) {\n <ax-title>{{ item.title }}</ax-title>\n }\n @if (item.routerLink) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [target]=\"item.target\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [routerLink]=\"item.routerLink\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n [routerLinkActive]=\"item.routerLinkActive\"\n [routerLinkActiveOptions]=\"item.routerLinkActiveOptions\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else if (item.href) {\n <ax-side-menu-item\n [text]=\"item.text\"\n [href]=\"item.href\"\n [target]=\"item.target\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n } @else {\n <ax-side-menu-item\n [text]=\"item.text\"\n [active]=\"item.active\"\n [disabled]=\"item.disabled\"\n [isLoading]=\"item.isLoading\"\n [isCollapsed]=\"item.isCollapsed\"\n [toggleOnClick]=\"item.toggleOnClick\"\n >\n <ng-container [ngTemplateOutlet]=\"sideMenuItemContent\"></ng-container>\n </ax-side-menu-item>\n }\n\n <ng-template #sideMenuItemContent>\n <ax-prefix>\n @if (item.icon) {\n <ax-icon [icon]=\"item.icon\"> </ax-icon>\n }\n </ax-prefix>\n @if (item.data) {\n <ax-text>{{ item.data }}</ax-text>\n }\n @if (item.suffixText) {\n <ax-suffix>\n <ax-text>{{ item.suffixText }}</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 </ng-template>\n</ng-template>\n", styles: ["@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-font-weight:initial;--tw-content:\"\";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer base{:root{--ax-comp-side-menu-indicator-size:2px}}@layer components{ax-side-menu{gap:calc(var(--spacing,.25rem) * 2);width:100%;font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none;flex-direction:column;display:flex}ax-side-menu>ax-title{margin-block:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-title{margin-block:calc(var(--spacing,.25rem) * 2);margin-top:calc(var(--spacing,.25rem) * 2);padding-inline:calc(var(--spacing,.25rem) * 3);padding-bottom:calc(var(--spacing,.25rem) * 1);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);text-transform:uppercase;opacity:.5;display:block}ax-side-menu ax-side-menu-item ax-divider{margin-block:calc(var(--spacing,.25rem) * 1);background-color:rgba(var(--ax-sys-color-border-lightest-surface));width:100%;height:1px;display:block}ax-side-menu ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2);font-size:inherit;--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);display:flex;position:relative}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-side-menu ax-side-menu-item .ax-side-item.ax-state-disabled .ax-ripple{opacity:0}:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active):not(:is(ax-side-menu ax-side-menu-item .ax-side-item:hover,ax-side-menu ax-side-menu-item .ax-side-item.ax-state-active).ax-state-disabled) ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-start-side,ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand{rotate:90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:-90deg}ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side ax-loading ax-loading-spinner span{border-color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:rgba(var(--ax-sys-color-on-surface))!important}@supports (color:color-mix(in lab,red,red)){ax-side-menu ax-side-menu-item .ax-side-item .ax-ripple{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-on-surface)) 30%,transparent)!important}}ax-side-menu ax-side-menu-item .ax-side-children{opacity:1;transition-property:grid-template-rows,opacity;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));grid-template-rows:1fr;padding-inline-start:calc(var(--spacing,.25rem) * 5);display:grid}ax-side-menu ax-side-menu-item .ax-side-children.ax-collapsed{opacity:0;grid-template-rows:0fr}ax-side-menu ax-side-menu-item .ax-side-children.ax-empty{display:none}ax-side-menu ax-side-menu-item .ax-side-children .ax-side-children-content{overflow:hidden}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child{padding-top:var(--ax-comp-side-menu-children-gap,.5rem);padding-top:calc(var(--spacing,.25rem) * 2)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item:first-child ax-title{margin-top:calc(var(--spacing,.25rem) * 4)}ax-side-menu ax-side-menu-item .ax-side-children ax-side-menu-item .ax-side-item{--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400)}ax-side-menu ax-side-menu-item .ax-side-children-content{gap:calc(var(--spacing,.25rem) * 2);flex-direction:column;display:flex}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item{border-radius:var(--ax-sys-border-radius)}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item:hover.ax-state-d isabled){background-color:rgba(var(--ax-sys-color-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color{gap:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-ripple{display:none}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-start .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-start:calc(var(--spacing,.25rem) * 0)}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color).ax-location-end .ax-side-item):before{width:calc(var(--ax-comp-side-menu-indicator-size) / 2);inset-inline-end:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item{position:relative}:is(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) ax-side-menu-item,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children,:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item):before{background-color:rgba(var(--ax-sys-color-border-lightest-surface));height:100%;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-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item:hover:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-disabled),:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled){color:rgba(var(--ax-sys-color-primary-surface))}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active:not(:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-item.ax-state-active.ax-state-disabled):before{height:100%;width:var(--ax-comp-side-menu-indicator-size);background-color:rgba(var(--ax-comp-side-menu-indicator-active-color,var(--ax-comp-side-menu-bg-color,var(--ax-sys-color-primary-surface))));--tw-content:\"\";content:var(--tw-content);position:absolute}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}:is(ax-side-menu.ax-look-with-line,ax-side-menu.ax-look-with-line-color) .ax-side-children{gap:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item:hover:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 5%,transparent)}}ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-with-line-color .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 10%,transparent)}}ax-side-menu.ax-look-default{gap:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default ax-icon{opacity:.6}ax-side-menu.ax-look-default .ax-side-item{border-radius:var(--ax-sys-border-radius);padding-inline:calc(var(--spacing,.25rem) * 4);padding-block:calc(var(--spacing,.25rem) * 2)}ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item:hover:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 50%,transparent)}}ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:rgba(var(--ax-sys-color-surface))}@supports (color:color-mix(in lab,red,red)){ax-side-menu.ax-look-default .ax-side-item.ax-state-active:not(ax-side-menu.ax-look-default .ax-side-item.ax-state-active.ax-state-disabled){background-color:color-mix(in oklab,rgba(var(--ax-sys-color-surface)) 10%,transparent)}}ax-side-menu.ax-look-default .ax-side-children{gap:calc(var(--spacing,.25rem) * 1);padding-inline-start:calc(var(--spacing,.25rem) * 9);position:relative}ax-side-menu.ax-look-default .ax-side-children:before{background-color:rgba(var(--ax-sys-color-border-light-surface));--tw-content:\"\";content:var(--tw-content);width:1px;height:100%;margin-inline-start:calc(var(--spacing,.25rem) * 6);position:absolute}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item .ax-side-item{padding-inline:calc(var(--spacing,.25rem) * 2);padding-block:calc(var(--spacing,.25rem) * 1)}ax-side-menu.ax-look-default .ax-side-children ax-side-menu-item:first-child{padding-top:calc(var(--spacing,.25rem) * 0)}ax-side-menu.ax-mode-compact{width:fit-content!important}ax-side-menu.ax-mode-compact .ax-inside-text{display:none}ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item:hover:not(ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-active:not(ax-side-menu.ax-mode-compact.ax-look-pills>ax-side-menu-item>.ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}ax-side-menu.ax-mode-compact ax-side-menu-item{position:relative;padding:calc(var(--spacing,.25rem) * .5)!important}[dir=rtl] ax-side-menu ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon:before{--tw-scale-x: -100% ;scale:var(--tw-scale-x) var(--tw-scale-y)}.ax-side-menu-popover{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:inherit;-webkit-user-select:none;user-select:none}.ax-side-menu-popover .ax-side-children-content{min-width:calc(var(--spacing,.25rem) * 40);gap:calc(var(--spacing,.25rem) * 1);border-radius:var(--ax-sys-border-radius);background-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing,.25rem) * 1);flex-direction:column;display:flex;overflow:visible}.ax-side-menu-popover ax-side-menu-item{width:100%;padding:calc(var(--spacing,.25rem) * 0);display:block;position:relative}.ax-side-menu-popover ax-side-menu-item .ax-side-children.ax-empty,.ax-side-menu-popover ax-side-menu-item>ax-popover.ax-side-menu-children-popover>.ax-side-menu-popover-host{display:none}.ax-side-menu-popover ax-side-menu-item .ax-side-item{cursor:pointer;justify-content:space-between;align-items:center;gap:calc(var(--spacing,.25rem) * 3);border-radius:var(--ax-sys-border-radius);width:100%;padding-inline:calc(var(--spacing,.25rem) * 3);padding-block:calc(var(--spacing,.25rem) * 2);--tw-font-weight:var(--font-weight-normal,400);font-weight:var(--font-weight-normal,400);white-space:nowrap;display:flex;position:relative}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-start-side,.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side{align-items:center;gap:calc(var(--spacing,.25rem) * 2);display:flex}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon{transition-property:rotate;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));display:block;rotate:90deg}.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand,.ax-side-menu-popover ax-side-menu-item .ax-side-item .ax-end-side .arrow-icon.arrow-icon-expand:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:0deg}.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item:hover:not(.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-darker-surface));color:rgba(var(--ax-sys-color-on-surface))}.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-active:not(.ax-side-menu-popover .ax-side-menu-popover-host.ax-look-pills ax-side-menu-item .ax-side-item.ax-state-disabled){background-color:rgba(var(--ax-sys-color-primary-surface));color:rgba(var(--ax-sys-color-on-primary-surface))}}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-content{syntax:\"*\";inherits:false;initial-value:\"\"}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}\n/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */\n"] }]
436
454
  }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }, { type: i0.Output, args: ["itemsChange"] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }], location: [{ type: i0.Input, args: [{ isSignal: true, alias: "location", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], __hostClass: [{
437
455
  type: HostBinding,
438
456
  args: ['class']