@arsedizioni/ars-utils 22.6.86 → 22.6.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +3158 -3344
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +7616 -4772
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.date.mjs +321 -702
  6. package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +445 -590
  8. package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-core.mjs +1735 -2370
  10. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +1280 -1470
  12. package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +1097 -1528
  14. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +198 -294
  16. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +115 -117
  18. package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +1607 -613
  20. package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +840 -367
  22. package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -1
  23. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +1634 -651
  24. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
  25. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +1255 -792
  26. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
  27. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +1410 -357
  28. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
  29. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +2401 -944
  30. package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
  31. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +1553 -741
  32. package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
  33. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +901 -430
  34. package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs.map +1 -1
  35. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +737 -530
  36. package/fesm2022/arsedizioni-ars-utils-ui.help.mjs.map +1 -1
  37. package/fesm2022/arsedizioni-ars-utils-ui.mjs +6638 -1755
  38. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  39. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +1479 -1207
  40. package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -1
  41. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +1003 -270
  42. package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs.map +1 -1
  43. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +497 -278
  44. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  45. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +48 -52
  46. package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs.map +1 -1
  47. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +464 -704
  48. package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -1
  49. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +724 -657
  50. package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -1
  51. package/fesm2022/arsedizioni-ars-utils.mjs +3 -19
  52. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  53. package/package.json +1 -1
  54. package/types/arsedizioni-ars-utils-clipper.common.d.ts +1151 -1163
  55. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1588 -1426
  56. package/types/arsedizioni-ars-utils-core.d.ts +1169 -1172
  57. package/types/arsedizioni-ars-utils-core.date.d.ts +204 -208
  58. package/types/arsedizioni-ars-utils-core.markdown.d.ts +128 -126
  59. package/types/arsedizioni-ars-utils-core.validators.d.ts +270 -236
  60. package/types/arsedizioni-ars-utils-evolution.common.d.ts +1054 -1067
  61. package/types/arsedizioni-ars-utils-support.common.d.ts +225 -234
  62. package/types/arsedizioni-ars-utils-ui.controls.d.ts +440 -278
  63. package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +24 -28
  64. package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +172 -136
  65. package/types/arsedizioni-ars-utils-ui.d.ts +2035 -821
  66. package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +327 -322
  67. package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +343 -347
  68. package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +167 -167
  69. package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +373 -367
  70. package/types/arsedizioni-ars-utils-ui.files.d.ts +335 -283
  71. package/types/arsedizioni-ars-utils-ui.filters.d.ts +232 -160
  72. package/types/arsedizioni-ars-utils-ui.help.d.ts +204 -211
  73. package/types/arsedizioni-ars-utils-ui.navigation.d.ts +811 -646
  74. package/types/arsedizioni-ars-utils-ui.notifications.d.ts +74 -78
  75. package/types/arsedizioni-ars-utils-ui.oauth.d.ts +102 -62
  76. package/types/arsedizioni-ars-utils-ui.paginator.d.ts +19 -22
  77. package/types/arsedizioni-ars-utils-ui.shell.d.ts +376 -382
  78. package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +244 -231
  79. package/types/arsedizioni-ars-utils.d.ts +1 -3
@@ -1,1216 +1,1488 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ElementRef, Injector, DestroyRef, input, model, booleanAttribute, numberAttribute, output, viewChildren, signal, computed, afterNextRender, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { CdkTrapFocus } from '@angular/cdk/a11y';
5
- import { Directionality } from '@angular/cdk/bidi';
6
- import { CdkConnectedOverlay } from '@angular/cdk/overlay';
7
- import * as i1 from '@angular/material/icon';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import * as i2 from '@angular/material/tooltip';
10
- import { MatTooltipModule } from '@angular/material/tooltip';
11
- import { Router, NavigationEnd } from '@angular/router';
12
- import { EMPTY, filter, map, distinctUntilChanged } from 'rxjs';
13
- import { ThemeService } from '@arsedizioni/ars-utils/core';
14
- import { MediaObserver } from '@arsedizioni/ars-utils/ui';
15
-
16
- /**
17
- * @file navigation.definitions.ts
18
- *
19
- * Data model shared by every variant of the Material Design 3 (Expressive)
20
- * navigation component: Navigation bar, Navigation rail (collapsed and
21
- * expanded) and Navigation drawer (standard and modal).
22
- *
23
- * Reference: https://m3.material.io/components/navigation-bar/specs
24
- * https://m3.material.io/components/navigation-rail/specs
25
- * https://m3.material.io/components/navigation-drawer/specs
26
- */
27
- /**
28
- * Identifier of the synthesized overflow destination. Use it to recognise the
29
- * overflow entry inside `itemSelected`.
30
- */
31
- const NAVIGATION_OVERFLOW_ID = '__overflow';
32
- /**
33
- * Default `auto` mapping, aligned with the Material 3 window size classes:
34
- * compact windows get the navigation bar, medium and expanded windows get the
35
- * collapsed rail, large and extra-large windows get the expanded rail.
36
- */
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injector, afterNextRender, booleanAttribute, computed, inject, input, model, numberAttribute, output, signal, viewChildren } from "@angular/core";
3
+ import { takeUntilDestroyed, toSignal } from "@angular/core/rxjs-interop";
4
+ import { CdkTrapFocus } from "@angular/cdk/a11y";
5
+ import { Directionality } from "@angular/cdk/bidi";
6
+ import { CdkConnectedOverlay } from "@angular/cdk/overlay";
7
+ import * as i1 from "@angular/material/icon";
8
+ import { MatIconModule } from "@angular/material/icon";
9
+ import * as i2 from "@angular/material/tooltip";
10
+ import { MatTooltipModule } from "@angular/material/tooltip";
11
+ import { NavigationEnd, Router } from "@angular/router";
12
+ import { EMPTY, distinctUntilChanged, filter, map } from "rxjs";
13
+ import { ThemeService } from "@arsedizioni/ars-utils/core";
14
+ import { MediaObserver } from "@arsedizioni/ars-utils/ui";
15
+ const NAVIGATION_OVERFLOW_ID = "__overflow";
37
16
  const DEFAULT_NAVIGATION_AUTO_VARIANTS = {
38
- xs: 'bar',
39
- sm: 'rail',
40
- md: 'rail',
41
- lg: 'rail-expanded',
42
- xl: 'rail-expanded',
17
+ xs: "bar",
18
+ sm: "rail",
19
+ md: "rail",
20
+ lg: "rail-expanded",
21
+ xl: "rail-expanded"
43
22
  };
44
- /** Variants that render labels beside the icon and support sections and dividers. */
45
23
  const EXPANDED_NAVIGATION_VARIANTS = [
46
- 'rail-expanded',
47
- 'drawer',
48
- 'modal',
24
+ "rail-expanded",
25
+ "drawer",
26
+ "modal"
49
27
  ];
50
-
51
- /**
52
- * @file navigation-bar.component.ts
53
- *
54
- * Material Design 3 (Expressive) navigation component.
55
- *
56
- * A single adaptive component that renders every navigation surface described
57
- * by the M3 specs — Navigation bar, collapsed Navigation rail, expanded
58
- * Navigation rail, standard Navigation drawer and modal Navigation drawer —
59
- * from one destination model.
60
- *
61
- * Design goals:
62
- * - Zoneless / signal based: no `NgZone`, no `setTimeout`, no manual change detection.
63
- * - `OnPush` + pre-computed render models: the template contains no method calls.
64
- * - Zero-DOM active indicator and state layer (rendered as pseudo-elements).
65
- * - Nested destinations expand inline in the wide variants and open in a single
66
- * shared overlay in the compact ones — one overlay for the whole component,
67
- * not one menu instance per destination.
68
- * - Router integration that degrades gracefully when no `Router` is provided.
69
- */
70
- /** Default sprite geometry, applied when a `NavigationIconSprite` omits a field. */
71
28
  const SPRITE_DEFAULT_SIZE = 24;
72
- /** Breathing space left above the parent row, and below the end of a branch, when scrolling. */
73
29
  const BRANCH_SCROLL_PADDING = 8;
74
- /**
75
- * Tells whether the user asked the system for less animation.
76
- * @returns `true` when `prefers-reduced-motion` is set, `false` when it is not or cannot be read.
77
- */
78
30
  function prefersReducedMotion() {
79
- return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;
31
+ return typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
80
32
  }
81
- class NavigationBarComponent {
82
- constructor() {
83
- // ── Injected dependencies ──────────────────────────────────────────────────
84
- this.media = inject(MediaObserver);
85
- // Optional for the same reason `Router` is: the component must still render
86
- // inside a bare test bed, where no application theme has been bootstrapped.
87
- this.themeService = inject(ThemeService, { optional: true });
88
- this.router = inject(Router, { optional: true });
89
- this.directionality = inject(Directionality, { optional: true });
90
- this.hostRef = inject(ElementRef);
91
- /** Used to schedule the post-render read that reveals a branch just expanded. */
92
- this.injector = inject(Injector);
93
- this.destroyRef = inject(DestroyRef);
94
- // ── Inputs ─────────────────────────────────────────────────────────────────
95
- /** Flat list of destinations. Ignored when `sections` is provided. */
96
- this.items = input([], /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
98
- /** Grouped destinations. Section headlines and dividers only render in the expanded variants. */
99
- this.sections = input([], /* @ts-ignore */
100
- ...(ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []));
101
- /** Rendering variant. `auto` resolves from the active breakpoint through `autoVariants`. */
102
- this.variant = input('auto', /* @ts-ignore */
103
- ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
104
- /** Breakpoint → variant map used when `variant` is `auto`. Missing entries fall back to the M3 defaults. */
105
- this.autoVariants = input({}, /* @ts-ignore */
106
- ...(ngDevMode ? [{ debugName: "autoVariants" }] : /* istanbul ignore next */ []));
107
- /** Two-way bound id of the selected destination. The router, when active, takes precedence. */
108
- this.selectedId = model(undefined, /* @ts-ignore */
109
- ...(ngDevMode ? [{ debugName: "selectedId" }] : /* istanbul ignore next */ []));
110
- /**
111
- * Two-way bound ids of the expanded parent destinations.
112
- * Leave unbound (`undefined`) to let the component manage the expansion state
113
- * on its own, seeding it from `NavigationItem.expanded` and auto-opening the
114
- * ancestors of the active destination.
115
- */
116
- this.expandedIds = model(undefined, /* @ts-ignore */
117
- ...(ngDevMode ? [{ debugName: "expandedIds" }] : /* istanbul ignore next */ []));
118
- /** Two-way bound open state of the modal drawer. Ignored by the other variants. */
119
- this.open = model(false, /* @ts-ignore */
120
- ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
121
- /** Label visibility policy. */
122
- this.labelVisibility = input('auto', /* @ts-ignore */
123
- ...(ngDevMode ? [{ debugName: "labelVisibility" }] : /* istanbul ignore next */ []));
124
- /** Icon / label arrangement inside a destination. */
125
- this.itemLayout = input('auto', /* @ts-ignore */
126
- ...(ngDevMode ? [{ debugName: "itemLayout" }] : /* istanbul ignore next */ []));
127
- /**
128
- * Icons of the nested destinations in the expanded variants (rail-expanded,
129
- * drawer, modal), where children are listed inline under their parent.
130
- * `false` — the default — renders those rows as label only, which keeps the
131
- * branch readable; the label stays aligned with the labels around it and a
132
- * badge moves to the trailing edge. Top level destinations always keep their
133
- * icon, and so do the children shown in the floating panel of the compact
134
- * variants.
135
- */
136
- this.childIcons = input(false, { ...(ngDevMode ? { debugName: "childIcons" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
137
- /**
138
- * Compact rows in the expanded variants (rail-expanded, drawer, modal):
139
- * 48px instead of the 56px of the M3 spec, with the dependent measures
140
- * scaled along — nested rows 40px, labels one step smaller, tighter gaps.
141
- * The bar and the collapsed rail keep their own spec metrics.
142
- */
143
- this.dense = input(false, { ...(ngDevMode ? { debugName: "dense" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
144
- /** Vertical alignment of the `top` destination group inside a rail. */
145
- this.alignment = input('top', /* @ts-ignore */
146
- ...(ngDevMode ? [{ debugName: "alignment" }] : /* istanbul ignore next */ []));
147
- /** Edge the rail / drawer is anchored to. Mirrored automatically in RTL. */
148
- this.position = input('start', /* @ts-ignore */
149
- ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
150
- /** Headline rendered above the destinations in the expanded rail and in the drawer. */
151
- this.headline = input(undefined, /* @ts-ignore */
152
- ...(ngDevMode ? [{ debugName: "headline" }] : /* istanbul ignore next */ []));
153
- /** When `true` a leading menu button is rendered; it emits `menuClick`. */
154
- this.showMenuButton = input(false, { ...(ngDevMode ? { debugName: "showMenuButton" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
155
- /** Material Symbols ligature used by the menu button. */
156
- this.menuIcon = input('menu', /* @ts-ignore */
157
- ...(ngDevMode ? [{ debugName: "menuIcon" }] : /* istanbul ignore next */ []));
158
- /** Material Symbols ligature used by the expand / collapse chevron. */
159
- this.expandIcon = input('expand_more', /* @ts-ignore */
160
- ...(ngDevMode ? [{ debugName: "expandIcon" }] : /* istanbul ignore next */ []));
161
- /** Where `hideWhenCompact` destinations are collapsed into the overflow menu. */
162
- this.overflowMode = input('bar', /* @ts-ignore */
163
- ...(ngDevMode ? [{ debugName: "overflowMode" }] : /* istanbul ignore next */ []));
164
- /** Material Symbols ligature of the overflow destination. */
165
- this.overflowIcon = input('more_vert', /* @ts-ignore */
166
- ...(ngDevMode ? [{ debugName: "overflowIcon" }] : /* istanbul ignore next */ []));
167
- /** Accessible name and tooltip of the overflow destination, which renders icon-only. */
168
- this.overflowLabel = input('More', /* @ts-ignore */
169
- ...(ngDevMode ? [{ debugName: "overflowLabel" }] : /* istanbul ignore next */ []));
170
- /**
171
- * Hard cap on the destinations rendered inline in the compact variants,
172
- * applied per anchoring group. The overflow destination counts as one slot.
173
- * `0` disables the cap; the M3 specs recommend 3 to 5 for the navigation bar.
174
- */
175
- this.maxVisibleItems = input(0, { ...(ngDevMode ? { debugName: "maxVisibleItems" } : /* istanbul ignore next */ {}), transform: numberAttribute });
176
- /** Accessible name of the menu button. */
177
- this.menuAriaLabel = input('Menu', /* @ts-ignore */
178
- ...(ngDevMode ? [{ debugName: "menuAriaLabel" }] : /* istanbul ignore next */ []));
179
- /** Accessible name of the navigation landmark. */
180
- this.ariaLabel = input('Navigation', /* @ts-ignore */
181
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
182
- /** When `true` a scrim is rendered behind the modal drawer. */
183
- this.scrim = input(true, { ...(ngDevMode ? { debugName: "scrim" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
184
- /** When `true` the modal drawer closes as soon as a destination is activated. */
185
- this.closeOnSelect = input(true, { ...(ngDevMode ? { debugName: "closeOnSelect" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
186
- /** When `true` the surface gets the M3 elevation-3 shadow. */
187
- this.elevated = input(true, { ...(ngDevMode ? { debugName: "elevated" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
188
- /** When `true` a 1px divider separates the surface from the page content. */
189
- this.bordered = input(false, { ...(ngDevMode ? { debugName: "bordered" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
190
- /** When `true` tooltips are shown for destinations whose label is not visible. */
191
- this.tooltips = input(true, { ...(ngDevMode ? { debugName: "tooltips" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
192
- /** When `true` the selection follows the current router URL. */
193
- this.routerSync = input(true, { ...(ngDevMode ? { debugName: "routerSync" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
194
- /** Route used to resolve relative `route` commands. Absolute resolution when omitted. */
195
- this.relativeTo = input(undefined, /* @ts-ignore */
196
- ...(ngDevMode ? [{ debugName: "relativeTo" }] : /* istanbul ignore next */ []));
197
- /** Explicit surface width in pixels for the rail / drawer variants. `0` keeps the spec default. */
198
- this.width = input(0, { ...(ngDevMode ? { debugName: "width" } : /* istanbul ignore next */ {}), transform: numberAttribute });
199
- /**
200
- * Explicit width in pixels of the COLLAPSED rail. `0` keeps the 96px of the
201
- * spec. It is separate from `width` because a surface set to `auto` is a
202
- * collapsed rail at one breakpoint and an expanded one at the next, and the
203
- * two want different widths; when both are given, this one wins on the
204
- * collapsed rail and `width` covers the rest.
205
- */
206
- this.railWidth = input(0, { ...(ngDevMode ? { debugName: "railWidth" } : /* istanbul ignore next */ {}), transform: numberAttribute });
207
- /**
208
- * Lower bound in pixels for the width of the expanded variants (rail-expanded,
209
- * drawer, modal). `0` keeps the default, which sets no floor. It is what keeps
210
- * the surface readable when its width comes from a percentage or from a
211
- * container that can shrink, instead of from `width`.
212
- */
213
- this.minWidth = input(0, { ...(ngDevMode ? { debugName: "minWidth" } : /* istanbul ignore next */ {}), transform: numberAttribute });
214
- /**
215
- * Upper bound in pixels for the width of the expanded variants (rail-expanded,
216
- * drawer, modal). `0` keeps the default, which is the width of the parent: the
217
- * surface never spills out of it, whatever `width` says.
218
- */
219
- this.maxWidth = input(0, { ...(ngDevMode ? { debugName: "maxWidth" } : /* istanbul ignore next */ {}), transform: numberAttribute });
220
- /** When `true` the whole surface is hidden (animated off-screen) without being destroyed. */
221
- this.hidden = input(false, { ...(ngDevMode ? { debugName: "hidden" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
222
- // ── Outputs ────────────────────────────────────────────────────────────────
223
- /** Emitted when a destination is activated by the user. */
224
- this.itemSelected = output();
225
- /** Emitted when the leading menu button is pressed. */
226
- this.menuClick = output();
227
- // ── View queries ───────────────────────────────────────────────────────────
228
- /** Focusable destination elements, in DOM order; used for keyboard roving. */
229
- this.itemElements = viewChildren('navItem', /* @ts-ignore */
230
- ...(ngDevMode ? [{ debugName: "itemElements" }] : /* istanbul ignore next */ []));
231
- /** Focusable entries of the floating submenu panel, in DOM order. */
232
- this.panelElements = viewChildren('panelItem', /* @ts-ignore */
233
- ...(ngDevMode ? [{ debugName: "panelElements" }] : /* istanbul ignore next */ []));
234
- // ── Router state ───────────────────────────────────────────────────────────
235
- /** Current router URL, kept in a signal so the template stays zoneless-friendly. */
236
- this.routerUrl = signal(undefined, /* @ts-ignore */
237
- ...(ngDevMode ? [{ debugName: "routerUrl" }] : /* istanbul ignore next */ []));
238
- // ── Theme state ────────────────────────────────────────────────────────────
239
- /**
240
- * Ticks whenever the application theme moves. The emitted value is ignored on
241
- * purpose: it is a change notification, not the answer.
242
- *
243
- * Reads `themeService`, so it MUST stay below the injected dependencies: moved
244
- * above them it would read `undefined`, `?? EMPTY` would swallow it and the
245
- * theme would silently stop propagating, with nothing to show for it at
246
- * compile time.
247
- */
248
- this.themeChanged = toSignal(this.themeService?.changed ?? EMPTY, { initialValue: undefined });
249
- /**
250
- * `true` when the dark theme is active; selects the dark frame set of a sprite.
251
- *
252
- * The answer comes from `getTheme()`, the only one that resolves `auto`
253
- * against the OS preference. `getTheme()` already reads a signal for the
254
- * explicit modes, so `themeChanged()` is read for the one case that is not
255
- * reactive on its own: mode `auto` plus a change of the OS colour scheme,
256
- * which leaves the stored mode on `auto` and only travels through `changed`.
257
- * Falls back to the light set when no `ThemeService` is provided.
258
- */
259
- this.isDark = computed(() => {
260
- this.themeChanged();
261
- return this.themeService?.getTheme() === 'dark';
262
- }, /* @ts-ignore */
263
- ...(ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []));
264
- // ── Submenu overlay state ──────────────────────────────────────────────────
265
- /** Id of the destination whose children are currently shown in the floating panel. */
266
- this.popupId = signal(undefined, /* @ts-ignore */
267
- ...(ngDevMode ? [{ debugName: "popupId" }] : /* istanbul ignore next */ []));
268
- /**
269
- * Destination whose children are currently shown in the floating panel.
270
- *
271
- * Derived from the id and NOT stored as an object: the render model is rebuilt
272
- * whenever the destinations, the resolved URLs or the theme change, and a
273
- * stored object would keep the panel painting the sprite frames of the
274
- * previous theme until the panel is closed and reopened.
275
- *
276
- * The search is recursive because a panel entry can itself own children and
277
- * open a panel of its own, and those nested render models are not part of the
278
- * top level of `visibleGroups`.
279
- *
280
- * Reads `visibleGroups`, which is declared further down: safe because
281
- * `computed` is lazy and nothing reads this before the first render — the
282
- * opposite of `themeChanged` above, which reads its dependency immediately.
283
- */
284
- this.popupItem = computed(() => {
285
- const id = this.popupId();
286
- if (id === undefined)
287
- return undefined;
288
- const find = (list) => {
289
- for (const rendered of list) {
290
- if (rendered.item.id === id)
291
- return rendered;
292
- const nested = find(rendered.children);
293
- if (nested)
294
- return nested;
295
- }
296
- return undefined;
297
- };
298
- for (const group of this.visibleGroups()) {
299
- for (const section of group.sections) {
300
- const hit = find(section.items);
301
- if (hit)
302
- return hit;
303
- }
304
- }
305
- // The destination went away while its panel was open.
306
- return undefined;
307
- }, /* @ts-ignore */
308
- ...(ngDevMode ? [{ debugName: "popupItem" }] : /* istanbul ignore next */ []));
309
- /** Element the floating panel is anchored to. */
310
- this.popupAnchor = signal(undefined, /* @ts-ignore */
311
- ...(ngDevMode ? [{ debugName: "popupAnchor" }] : /* istanbul ignore next */ []));
312
- // ── Derived state ──────────────────────────────────────────────────────────
313
- /** Sections actually rendered: the `sections` input, or a single implicit section wrapping `items`. */
314
- this.resolvedSections = computed(() => {
315
- const sections = this.sections();
316
- if (sections.length > 0)
317
- return sections;
318
- return [{ id: '__default', items: this.items() }];
319
- }, /* @ts-ignore */
320
- ...(ngDevMode ? [{ debugName: "resolvedSections" }] : /* istanbul ignore next */ []));
321
- /** Every destination, nested ones included, in depth-first order. */
322
- this.allItems = computed(() => {
323
- const result = [];
324
- const walk = (list) => {
325
- for (const item of list) {
326
- result.push(item);
327
- if (item.children?.length)
328
- walk(item.children);
329
- }
330
- };
331
- for (const section of this.resolvedSections())
332
- walk(section.items);
333
- return result;
334
- }, /* @ts-ignore */
335
- ...(ngDevMode ? [{ debugName: "allItems" }] : /* istanbul ignore next */ []));
336
- /** Map of destination id to the id of its parent destination. */
337
- this.parentOf = computed(() => {
338
- const result = new Map();
339
- const walk = (list, parentId) => {
340
- for (const item of list) {
341
- if (parentId !== undefined)
342
- result.set(item.id, parentId);
343
- if (item.children?.length)
344
- walk(item.children, item.id);
345
- }
346
- };
347
- for (const section of this.resolvedSections())
348
- walk(section.items);
349
- return result;
350
- }, /* @ts-ignore */
351
- ...(ngDevMode ? [{ debugName: "parentOf" }] : /* istanbul ignore next */ []));
352
- /** The variant to render, resolving `auto` against the active CDK breakpoint. */
353
- this.resolvedVariant = computed(() => {
354
- const variant = this.variant();
355
- if (variant !== 'auto')
356
- return variant;
357
- const alias = this.media.currentBp();
358
- return this.autoVariants()[alias] ?? DEFAULT_NAVIGATION_AUTO_VARIANTS[alias];
359
- }, /* @ts-ignore */
360
- ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
361
- /** `true` for the variants that render labels beside icons and support sections. */
362
- this.isExpanded = computed(() => EXPANDED_NAVIGATION_VARIANTS.includes(this.resolvedVariant()), /* @ts-ignore */
363
- ...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
364
- /** `true` when the surface is the modal drawer. */
365
- this.isModal = computed(() => this.resolvedVariant() === 'modal', /* @ts-ignore */
366
- ...(ngDevMode ? [{ debugName: "isModal" }] : /* istanbul ignore next */ []));
367
- /** `true` when the modal drawer is currently open. */
368
- this.isOverlayOpen = computed(() => this.isModal() && this.open(), /* @ts-ignore */
369
- ...(ngDevMode ? [{ debugName: "isOverlayOpen" }] : /* istanbul ignore next */ []));
370
- /** `true` when the surface must be visually hidden. */
371
- this.isHidden = computed(() => this.hidden() || (this.isModal() && !this.open()), /* @ts-ignore */
372
- ...(ngDevMode ? [{ debugName: "isHidden" }] : /* istanbul ignore next */ []));
373
- /** Resolved icon / label arrangement. */
374
- this.resolvedLayout = computed(() => {
375
- if (this.isExpanded())
376
- return 'horizontal';
377
- const layout = this.itemLayout();
378
- if (layout !== 'auto')
379
- return layout;
380
- // M3 Expressive: the navigation bar switches to a horizontal item layout from 600dp upwards.
381
- return this.resolvedVariant() === 'bar' && this.media.currentBp() !== 'xs' ? 'horizontal' : 'vertical';
382
- }, /* @ts-ignore */
383
- ...(ngDevMode ? [{ debugName: "resolvedLayout" }] : /* istanbul ignore next */ []));
384
- /** Resolved label visibility; the expanded variants always show labels. */
385
- this.resolvedLabelVisibility = computed(() => {
386
- if (this.isExpanded())
387
- return 'labeled';
388
- const visibility = this.labelVisibility();
389
- return visibility === 'auto' ? 'labeled' : visibility;
390
- }, /* @ts-ignore */
391
- ...(ngDevMode ? [{ debugName: "resolvedLabelVisibility" }] : /* istanbul ignore next */ []));
392
- /** `true` when the headline row (menu button, headline text) is rendered. */
393
- this.showsHeader = computed(() => this.resolvedVariant() !== 'bar' && (this.showMenuButton() || (this.isExpanded() && !!this.headline())), /* @ts-ignore */
394
- ...(ngDevMode ? [{ debugName: "showsHeader" }] : /* istanbul ignore next */ []));
395
- /**
396
- * Geometry of the active indicator:
397
- * `compact` wraps the icon only (56x32 pill), `wide` wraps icon and label
398
- * together, exactly as described by the M3 Expressive specs.
399
- */
400
- this.indicatorMode = computed(() => this.isExpanded() || this.resolvedLayout() === 'horizontal' ? 'wide' : 'compact', /* @ts-ignore */
401
- ...(ngDevMode ? [{ debugName: "indicatorMode" }] : /* istanbul ignore next */ []));
402
- /** Tooltip placement derived from the variant and from the anchoring edge. */
403
- this.tooltipPosition = computed(() => {
404
- if (this.resolvedVariant() === 'bar')
405
- return 'above';
406
- return this.position() === 'end' ? 'before' : 'after';
407
- }, /* @ts-ignore */
408
- ...(ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []));
409
- /** Inline width override for the rail / drawer, or `undefined` to keep the spec default. */
410
- this.widthStyle = computed(() => {
411
- const width = this.width();
412
- return width > 0 ? `${width}px` : undefined;
413
- }, /* @ts-ignore */
414
- ...(ngDevMode ? [{ debugName: "widthStyle" }] : /* istanbul ignore next */ []));
415
- /** Inline width override for the collapsed rail, or `undefined` to keep the spec default. */
416
- this.railWidthStyle = computed(() => {
417
- const width = this.railWidth();
418
- return width > 0 ? `${width}px` : undefined;
419
- }, /* @ts-ignore */
420
- ...(ngDevMode ? [{ debugName: "railWidthStyle" }] : /* istanbul ignore next */ []));
421
- /** Inline lower bound for the expanded variants, or `undefined` to keep the default. */
422
- this.minWidthStyle = computed(() => {
423
- const width = this.minWidth();
424
- return width > 0 ? `${width}px` : undefined;
425
- }, /* @ts-ignore */
426
- ...(ngDevMode ? [{ debugName: "minWidthStyle" }] : /* istanbul ignore next */ []));
427
- /** Inline upper bound for the expanded variants, or `undefined` to keep the default. */
428
- this.maxWidthStyle = computed(() => {
429
- const width = this.maxWidth();
430
- return width > 0 ? `${width}px` : undefined;
431
- }, /* @ts-ignore */
432
- ...(ngDevMode ? [{ debugName: "maxWidthStyle" }] : /* istanbul ignore next */ []));
433
- /** Map of destination id to resolved URL. Recomputed only when the destinations change. */
434
- this.hrefs = computed(() => {
435
- const result = new Map();
436
- const router = this.router;
437
- const relativeTo = this.relativeTo();
438
- for (const item of this.allItems()) {
439
- if (item.href) {
440
- result.set(item.id, item.href);
441
- continue;
442
- }
443
- if (item.route !== undefined && router) {
444
- const commands = Array.isArray(item.route) ? [...item.route] : [item.route];
445
- try {
446
- const tree = router.createUrlTree(commands, {
447
- queryParams: item.queryParams,
448
- fragment: item.fragment,
449
- relativeTo,
450
- });
451
- result.set(item.id, router.serializeUrl(tree));
452
- }
453
- catch {
454
- // Invalid route commands: the destination degrades to a plain button.
455
- }
456
- }
457
- }
458
- return result;
459
- }, /* @ts-ignore */
460
- ...(ngDevMode ? [{ debugName: "hrefs" }] : /* istanbul ignore next */ []));
461
- /**
462
- * Static render model, rebuilt only when the destinations, the resolved URLs
463
- * or the theme change — never when the selection or the expansion state
464
- * changes. The theme is a dependency because sprite icons carry one frame set
465
- * per theme, and the frames are baked into the inline style of the icon.
466
- */
467
- this.renderGroups = computed(() => {
468
- const hrefs = this.hrefs();
469
- const dark = this.isDark();
470
- const counter = { value: 0 };
471
- const top = [];
472
- const bottom = [];
473
- for (const section of this.resolvedSections()) {
474
- const topItems = [];
475
- const bottomItems = [];
476
- for (const item of section.items) {
477
- const rendered = NavigationBarComponent.buildRenderItem(item, section, undefined, 0, counter, hrefs, dark);
478
- (item.align === 'bottom' ? bottomItems : topItems).push(rendered);
479
- }
480
- if (topItems.length > 0)
481
- top.push({ section, items: topItems });
482
- if (bottomItems.length > 0)
483
- bottom.push({ section, items: bottomItems });
484
- }
485
- const groups = [];
486
- if (top.length > 0)
487
- groups.push({ align: 'top', sections: top });
488
- if (bottom.length > 0)
489
- groups.push({ align: 'bottom', sections: bottom });
490
- return groups;
491
- }, /* @ts-ignore */
492
- ...(ngDevMode ? [{ debugName: "renderGroups" }] : /* istanbul ignore next */ []));
493
- /** Id of the destination matching the current router URL, using longest-prefix matching. */
494
- this.routerActiveId = computed(() => {
495
- if (!this.routerSync())
496
- return undefined;
497
- const url = this.routerUrl();
498
- if (!url)
499
- return undefined;
500
- const path = NavigationBarComponent.pathOf(url);
501
- const hrefs = this.hrefs();
502
- let best;
503
- let bestLength = -1;
504
- for (const item of this.allItems()) {
505
- if (item.href || item.route === undefined)
506
- continue;
507
- const href = hrefs.get(item.id);
508
- if (!href)
509
- continue;
510
- const target = NavigationBarComponent.pathOf(href);
511
- const matches = item.exact
512
- ? path === target
513
- : path === target || path.startsWith(target.endsWith('/') ? target : `${target}/`);
514
- if (matches && target.length > bestLength) {
515
- best = item.id;
516
- bestLength = target.length;
517
- }
518
- }
519
- return best;
520
- }, /* @ts-ignore */
521
- ...(ngDevMode ? [{ debugName: "routerActiveId" }] : /* istanbul ignore next */ []));
522
- /** Id of the currently active destination: router URL first, explicit selection as fallback. */
523
- this.activeId = computed(() => this.routerActiveId() ?? this.selectedId(), /* @ts-ignore */
524
- ...(ngDevMode ? [{ debugName: "activeId" }] : /* istanbul ignore next */ []));
525
- /**
526
- * Expansion state used when `expandedIds` is left unbound: the destinations
527
- * flagged `expanded`, plus every ancestor of the active destination.
528
- */
529
- this.defaultExpandedIds = computed(() => {
530
- const result = new Set();
531
- for (const item of this.allItems()) {
532
- if (item.expanded)
533
- result.add(item.id);
534
- }
535
- const parents = this.parentOf();
536
- const visited = new Set();
537
- let current = this.activeId();
538
- while (current !== undefined && !visited.has(current)) {
539
- visited.add(current);
540
- const parent = parents.get(current);
541
- if (parent === undefined)
542
- break;
543
- result.add(parent);
544
- current = parent;
545
- }
546
- return [...result];
547
- }, /* @ts-ignore */
548
- ...(ngDevMode ? [{ debugName: "defaultExpandedIds" }] : /* istanbul ignore next */ []));
549
- /** Ids of the parent destinations currently expanded. */
550
- this.expandedSet = computed(() => new Set(this.expandedIds() ?? this.defaultExpandedIds()), /* @ts-ignore */
551
- ...(ngDevMode ? [{ debugName: "expandedSet" }] : /* istanbul ignore next */ []));
552
- /** `true` when the current variant collapses `hideWhenCompact` destinations into the overflow menu. */
553
- this.overflowApplies = computed(() => {
554
- const mode = this.overflowMode();
555
- if (mode === 'never')
556
- return false;
557
- const variant = this.resolvedVariant();
558
- return mode === 'bar' ? variant === 'bar' : variant === 'bar' || variant === 'rail';
559
- }, /* @ts-ignore */
560
- ...(ngDevMode ? [{ debugName: "overflowApplies" }] : /* istanbul ignore next */ []));
561
- /**
562
- * Render model actually walked by the template: the static model with the
563
- * compact-only destinations moved into the overflow menu and the children of
564
- * the expanded parents spliced in.
565
- */
566
- this.visibleGroups = computed(() => {
567
- const inline = this.isExpanded();
568
- const open = this.expandedSet();
569
- const overflow = this.overflowApplies();
570
- const max = this.maxVisibleItems();
571
- // The bar ignores per-item anchoring, so both groups share a single row and
572
- // therefore a single overflow entry.
573
- let groups = this.resolvedVariant() === 'bar'
574
- ? NavigationBarComponent.mergeGroups(this.renderGroups())
575
- : this.renderGroups();
576
- if (overflow || max > 0) {
577
- groups = groups.map(group => this.applyOverflow(group, overflow, max));
578
- }
579
- if (!inline)
580
- return groups;
581
- const flatten = (list) => {
582
- let expandedAny = false;
583
- const result = [];
584
- for (const rendered of list) {
585
- result.push(rendered);
586
- if (rendered.hasChildren && open.has(rendered.item.id)) {
587
- expandedAny = true;
588
- result.push(...flatten(rendered.children));
589
- }
590
- }
591
- return expandedAny ? result : list;
592
- };
593
- return groups.map(group => ({
594
- align: group.align,
595
- sections: group.sections.map(section => ({
596
- section: section.section,
597
- items: flatten(section.items),
598
- })),
599
- }));
600
- }, /* @ts-ignore */
601
- ...(ngDevMode ? [{ debugName: "visibleGroups" }] : /* istanbul ignore next */ []));
602
- /**
603
- * Ids rendered with the selected styling: the active destination alone, and only
604
- * while it is on screen. A parent stands in for nothing here — the template drops
605
- * it unless it owns a route of its own — so a destination hidden inside a closed
606
- * branch leaves this set empty and `ancestorIds` marks the trail instead.
607
- */
608
- this.highlightedIds = computed(() => {
609
- const active = this.activeId();
610
- const result = new Set();
611
- if (active === undefined)
612
- return result;
613
- for (const group of this.visibleGroups()) {
614
- for (const section of group.sections) {
615
- for (const item of section.items) {
616
- if (item.item.id === active) {
617
- result.add(active);
618
- return result;
619
- }
620
- }
621
- }
622
- }
623
- return result;
624
- }, /* @ts-ignore */
625
- ...(ngDevMode ? [{ debugName: "highlightedIds" }] : /* istanbul ignore next */ []));
626
- /**
627
- * Ids of the ancestors of the active destination. No variant ever shows a parent
628
- * as selected, so this trail is what tells the user where they are: it marks the
629
- * whole chain down to the active destination, whether its branch is open, closed
630
- * or inside a floating panel. Ancestors that are not rendered simply never reach
631
- * the template.
632
- */
633
- this.ancestorIds = computed(() => {
634
- const active = this.activeId();
635
- const result = new Set();
636
- if (active === undefined)
637
- return result;
638
- // Depth-first walk that records the ancestors of `active` on the way back up:
639
- // a branch that does not hold it contributes nothing.
640
- const walk = (items, trail) => {
641
- for (const item of items) {
642
- if (item.item.id === active) {
643
- for (const id of trail)
644
- result.add(id);
645
- return true;
646
- }
647
- trail.push(item.item.id);
648
- const found = walk(item.children, trail);
649
- trail.pop();
650
- if (found)
651
- return true;
652
- }
653
- return false;
654
- };
655
- for (const group of this.visibleGroups()) {
656
- for (const section of group.sections) {
657
- if (walk(section.items.filter(item => item.depth === 0), []))
658
- return result;
659
- }
660
- }
661
- return result;
662
- }, /* @ts-ignore */
663
- ...(ngDevMode ? [{ debugName: "ancestorIds" }] : /* istanbul ignore next */ []));
664
- /**
665
- * Rows of the floating submenu panel. Nested destinations one level down are
666
- * flattened under a heading, so the overflow menu can hold parents too.
667
- */
668
- this.popupEntries = computed(() => {
669
- const parent = this.popupItem();
670
- if (!parent)
671
- return [];
672
- const result = [];
673
- for (const child of parent.children) {
674
- if (child.hasChildren) {
675
- result.push({ key: `${child.item.id}__heading`, label: child.item.label });
676
- for (const grandChild of child.children) {
677
- // Flagged, not just listed: a heading followed by rows aligned with it
678
- // reads as one flat list, and which rows belong to which group is lost.
679
- result.push({ key: grandChild.item.id, render: grandChild, grouped: true });
680
- }
681
- }
682
- else {
683
- result.push({ key: child.item.id, render: child });
684
- }
685
- }
686
- return result;
687
- }, /* @ts-ignore */
688
- ...(ngDevMode ? [{ debugName: "popupEntries" }] : /* istanbul ignore next */ []));
689
- /** `true` when the floating submenu panel must be shown. */
690
- this.isPopupOpen = computed(() => !this.isExpanded() && !!this.popupItem(), /* @ts-ignore */
691
- ...(ngDevMode ? [{ debugName: "isPopupOpen" }] : /* istanbul ignore next */ []));
692
- /** Element the floating submenu panel is anchored to. */
693
- this.popupOrigin = computed(() => this.popupAnchor() ?? this.hostRef.nativeElement, /* @ts-ignore */
694
- ...(ngDevMode ? [{ debugName: "popupOrigin" }] : /* istanbul ignore next */ []));
695
- /** Connected positions of the floating submenu panel, derived from the variant. */
696
- this.popupPositions = computed(() => {
697
- if (this.resolvedVariant() === 'bar') {
698
- return [
699
- { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },
700
- { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },
701
- ];
702
- }
703
- if (this.position() === 'end') {
704
- return [
705
- { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },
706
- { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },
707
- ];
708
- }
709
- return [
710
- { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },
711
- { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },
712
- ];
713
- }, /* @ts-ignore */
714
- ...(ngDevMode ? [{ debugName: "popupPositions" }] : /* istanbul ignore next */ []));
715
- /** `true` when the layout runs right-to-left; used to mirror the arrow keys. */
716
- this.isRtl = computed(() => this.directionality?.value === 'rtl', /* @ts-ignore */
717
- ...(ngDevMode ? [{ debugName: "isRtl" }] : /* istanbul ignore next */ []));
718
- const router = this.router;
719
- if (router) {
720
- this.routerUrl.set(router.url);
721
- router.events
722
- .pipe(filter((e) => e instanceof NavigationEnd), map(e => e.urlAfterRedirects), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))
723
- .subscribe(url => this.routerUrl.set(url));
724
- }
725
- }
726
- // ── Event handlers ─────────────────────────────────────────────────────────
727
- /**
728
- * Activates a destination, or expands it when it owns nested destinations.
729
- * A parent never navigates: it toggles its group inline in the wide variants
730
- * and opens the floating panel in the compact ones.
731
- * @param render - The render model of the activated destination.
732
- * @param event - The originating mouse or keyboard event.
733
- */
734
- select(render, event) {
735
- const item = render.item;
736
- if (item.disabled) {
737
- event.preventDefault();
738
- return;
739
- }
740
- if (render.hasChildren) {
741
- event.preventDefault();
742
- if (this.isExpanded()) {
743
- this.toggleExpanded(item.id);
744
- }
745
- else {
746
- this.openPopup(render, event);
747
- }
748
- return;
749
- }
750
- // Let the browser handle modified clicks (new tab / new window) natively.
751
- const mouse = event;
752
- if (render.href && (mouse.ctrlKey || mouse.metaKey || mouse.shiftKey || mouse.button === 1)) {
753
- return;
754
- }
755
- if (render.routed && render.href) {
756
- event.preventDefault();
757
- void this.router?.navigateByUrl(render.href);
758
- }
759
- this.selectedId.set(item.id);
760
- this.itemSelected.emit({ item, section: render.section, parent: render.parent, index: render.index });
761
- this.closePopup();
762
- if (this.isModal() && this.closeOnSelect()) {
763
- this.open.set(false);
764
- }
765
- }
766
- /**
767
- * Emits `menuClick` when the leading menu button is pressed.
768
- */
769
- onMenuClick() {
770
- this.menuClick.emit();
771
- }
772
- /**
773
- * Closes the modal drawer when the scrim is clicked.
774
- */
775
- onScrimClick() {
776
- this.open.set(false);
777
- }
778
- /**
779
- * Handles keyboard interaction: arrow keys move the focus between
780
- * destinations, `Home` / `End` jump to the first / last one and `Escape`
781
- * closes the floating submenu panel or the modal drawer.
782
- *
783
- * The same handler serves the surface and the floating panel, and it tells
784
- * them apart by `currentTarget`: roving inside an open `role="menu"` must stay
785
- * inside it, and a programmatic `focus()` is NOT stopped by the focus trap, so
786
- * sharing one element list would send the focus onto the surface behind the
787
- * overlay.
788
- *
789
- * @param event - The originating keyboard event.
790
- */
791
- onKeydown(event) {
792
- if (event.key === 'Escape') {
793
- if (this.popupItem()) {
794
- event.preventDefault();
795
- this.closePopup();
796
- return;
797
- }
798
- if (this.isOverlayOpen()) {
799
- event.preventDefault();
800
- this.open.set(false);
801
- return;
802
- }
803
- }
804
- // The panel is always a vertical list, whatever the variant behind it.
805
- const inPanel = event.currentTarget?.classList.contains('ars-nav-submenu') === true;
806
- const horizontal = !inPanel && this.resolvedVariant() === 'bar';
807
- const forward = horizontal ? (this.isRtl() ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';
808
- const backward = horizontal ? (this.isRtl() ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';
809
- let delta = 0;
810
- if (event.key === forward)
811
- delta = 1;
812
- else if (event.key === backward)
813
- delta = -1;
814
- else if (event.key !== 'Home' && event.key !== 'End')
815
- return;
816
- const elements = inPanel ? this.panelElements() : this.itemElements();
817
- if (elements.length === 0)
818
- return;
819
- const current = elements.findIndex(ref => ref.nativeElement === event.target);
820
- let next;
821
- if (event.key === 'Home')
822
- next = 0;
823
- else if (event.key === 'End')
824
- next = elements.length - 1;
825
- else if (current < 0)
826
- next = 0;
827
- else
828
- next = (current + delta + elements.length) % elements.length;
829
- event.preventDefault();
830
- elements[next]?.nativeElement.focus();
831
- }
832
- // ── Public API ─────────────────────────────────────────────────────────────
833
- /**
834
- * Expands or collapses the parent destination with the given id.
835
- * @param id - Identifier of the parent destination to toggle.
836
- */
837
- toggleExpanded(id) {
838
- const next = new Set(this.expandedSet());
839
- if (next.has(id)) {
840
- next.delete(id);
841
- }
842
- else {
843
- next.add(id);
844
- // The rows that are about to appear do not exist yet: the scroll is read and applied
845
- // after the next render, when they do.
846
- afterNextRender(() => this.revealBranch(id), { injector: this.injector });
847
- }
848
- this.expandedIds.set([...next]);
849
- }
850
- /**
851
- * Opens the floating submenu panel of a parent destination.
852
- * @param render - The render model of the parent destination.
853
- * @param event - The originating event, used to anchor the panel.
854
- */
855
- openPopup(render, event) {
856
- const anchor = event.currentTarget;
857
- this.popupAnchor.set(anchor ?? undefined);
858
- this.popupId.set(this.popupItem()?.item.id === render.item.id ? undefined : render.item.id);
859
- }
860
- /**
861
- * Closes the floating submenu panel.
862
- */
863
- closePopup() {
864
- this.popupId.set(undefined);
865
- // Otherwise the component keeps a reference to a detached element.
866
- this.popupAnchor.set(undefined);
867
- }
868
- /**
869
- * Opens the modal drawer. No-op for the other variants.
870
- */
871
- openDrawer() {
872
- this.open.set(true);
873
- }
874
- /**
875
- * Closes the modal drawer. No-op for the other variants.
876
- */
877
- closeDrawer() {
878
- this.open.set(false);
879
- }
880
- /**
881
- * Toggles the modal drawer. No-op for the other variants.
882
- */
883
- toggleDrawer() {
884
- this.open.update(open => !open);
885
- }
886
- /**
887
- * Moves the browser focus to the destination with the given id.
888
- * @param id - Identifier of the destination to focus.
889
- * @returns `true` when a matching destination was found and focused.
890
- */
891
- focusItem(id) {
892
- for (const ref of this.itemElements()) {
893
- if (ref.nativeElement.dataset['navId'] === id) {
894
- ref.nativeElement.focus();
895
- return true;
896
- }
897
- }
898
- return false;
899
- }
900
- /**
901
- * Scrolls the list so that the destinations a branch has just revealed are visible.
902
- *
903
- * Opening a parent sitting near the bottom of the list adds its children BELOW the fold: the
904
- * row answers the click, and nothing seems to happen. This scrolls to the end of the branch so
905
- * the options show up where the user is already looking.
906
- *
907
- * The parent row is never pushed out of the top: when a branch is taller than the list, showing
908
- * its end would cost the row that was clicked, so the scroll stops with the parent at the top
909
- * edge and the branch runs off the bottom — the user reads it downwards from there.
910
- *
911
- * Only the wide variants expand inline; in the compact ones the children live in the floating
912
- * panel and there is nothing to scroll.
913
- *
914
- * @param id - Identifier of the parent destination that has just been expanded.
915
- * @returns void
916
- */
917
- revealBranch(id) {
918
- if (!this.isExpanded())
919
- return;
920
- const items = this.itemElements();
921
- const index = items.findIndex(ref => ref.nativeElement.dataset['navId'] === id);
922
- if (index < 0)
923
- return;
924
- const parent = items[index].nativeElement;
925
- const list = parent.closest('.ars-nav__items');
926
- if (!list)
927
- return;
928
- // The children are spliced in right after their parent and carry a deeper `data-depth`, so the
929
- // branch is the run of rows that follows until the depth drops back.
930
- const depth = Number(parent.dataset['depth'] ?? 0);
931
- let last = parent;
932
- for (let i = index + 1; i < items.length; i++) {
933
- const row = items[i].nativeElement;
934
- if (row.closest('.ars-nav__items') !== list)
935
- break;
936
- if (Number(row.dataset['depth'] ?? 0) <= depth)
937
- break;
938
- last = row;
939
- }
940
- // Nothing was revealed (an empty branch, or the rows are not rendered): nothing to scroll to.
941
- if (last === parent)
942
- return;
943
- const view = list.clientHeight;
944
- if (view === 0 || list.scrollHeight <= view)
945
- return;
946
- // `clientTop` is the top border: rects are measured from the border box, scrolling from the
947
- // padding box, and without it a themed list with a border would scroll a hair short.
948
- const origin = list.getBoundingClientRect().top + list.clientTop - list.scrollTop;
949
- const top = parent.getBoundingClientRect().top - origin;
950
- const end = last.getBoundingClientRect().bottom - origin;
951
- // Scroll only far enough to clear the end of the branch, and never past the parent row.
952
- const needed = end + BRANCH_SCROLL_PADDING - view;
953
- if (needed <= list.scrollTop)
954
- return;
955
- const target = Math.max(0, Math.min(needed, top - BRANCH_SCROLL_PADDING));
956
- if (target <= list.scrollTop)
957
- return;
958
- list.scrollTo({ top: target, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });
959
- }
960
- // ── Helpers ────────────────────────────────────────────────────────────────
961
- /**
962
- * Moves the compact-only destinations of a group into a synthesized overflow
963
- * destination appended at the end of the group.
964
- * @param group - The group to process.
965
- * @param overflow - `true` when `hideWhenCompact` must be honoured.
966
- * @param max - Hard cap on the inline destinations; `0` disables it.
967
- * @returns The group with the overflow destination applied.
968
- */
969
- applyOverflow(group, overflow, max) {
970
- const kept = [];
971
- const overflowed = [];
972
- group.sections.forEach((section, sectionIndex) => {
973
- for (const render of section.items) {
974
- if (overflow && render.item.hideWhenCompact)
975
- overflowed.push(render);
976
- else
977
- kept.push({ sectionIndex, render });
978
- }
979
- });
980
- const slots = kept.length + (overflowed.length > 0 ? 1 : 0);
981
- if (max > 0 && slots > max) {
982
- const moved = kept.splice(Math.max(1, max - 1));
983
- for (const entry of moved)
984
- overflowed.push(entry.render);
985
- }
986
- if (overflowed.length === 0)
987
- return group;
988
- const sections = group.sections.map((section, sectionIndex) => ({
989
- section: section.section,
990
- items: kept.filter(entry => entry.sectionIndex === sectionIndex).map(entry => entry.render),
991
- }));
992
- const last = sections[sections.length - 1];
993
- sections[sections.length - 1] = {
994
- section: last.section,
995
- items: [...last.items, this.buildOverflowItem(overflowed)],
996
- };
997
- return { align: group.align, sections: sections.filter(section => section.items.length > 0) };
998
- }
999
- /**
1000
- * Builds the synthesized, icon-only overflow destination.
1001
- * @param children - The destinations moved into the overflow menu.
1002
- * @returns The render model of the overflow destination.
1003
- */
1004
- buildOverflowItem(children) {
1005
- const label = this.overflowLabel();
1006
- const icon = this.overflowIcon();
1007
- return {
1008
- item: { id: NAVIGATION_OVERFLOW_ID, label, icon },
1009
- index: -1,
1010
- depth: 0,
1011
- routed: false,
1012
- iconOff: icon,
1013
- iconOn: icon,
1014
- badgeText: '',
1015
- hasBadge: false,
1016
- iconOnly: true,
1017
- hasChildren: true,
1018
- children,
1019
- ariaLabel: label,
1020
- tooltip: label,
1021
- };
1022
- }
1023
- /**
1024
- * Merges the `top` and `bottom` groups into a single `top` group, combining
1025
- * the sections that share an id so `@for` track keys stay unique.
1026
- * @param groups - The groups to merge.
1027
- * @returns A single-group array, or the input when there is nothing to merge.
1028
- */
1029
- static mergeGroups(groups) {
1030
- if (groups.length < 2)
1031
- return groups;
1032
- const order = [];
1033
- const byId = new Map();
1034
- for (const group of groups) {
1035
- for (const section of group.sections) {
1036
- const existing = byId.get(section.section.id);
1037
- if (existing) {
1038
- byId.set(section.section.id, {
1039
- section: existing.section,
1040
- items: [...existing.items, ...section.items],
1041
- });
1042
- }
1043
- else {
1044
- order.push(section.section.id);
1045
- byId.set(section.section.id, section);
1046
- }
1047
- }
1048
- }
1049
- return [{ align: 'top', sections: order.map(id => byId.get(id)) }];
1050
- }
1051
- /**
1052
- * Builds the render model of a destination and, recursively, of its children.
1053
- * @param item - The source destination.
1054
- * @param section - The section the destination belongs to.
1055
- * @param parent - The parent destination, for nested destinations.
1056
- * @param depth - Nesting level of the destination.
1057
- * @param counter - Shared counter producing the flat destination index.
1058
- * @param hrefs - Map of destination id to resolved URL.
1059
- * @param dark - `true` when the dark theme is active, selecting the dark sprite frames.
1060
- * @returns The render model of the destination.
1061
- */
1062
- static buildRenderItem(item, section, parent, depth, counter, hrefs, dark) {
1063
- const href = hrefs.get(item.id);
1064
- // Icon precedence: registered SVG, then sprite sheet, then image, then ligature.
1065
- const svgOff = item.svgIcon;
1066
- const svgOn = item.activeSvgIcon ?? item.svgIcon;
1067
- const spriteStyle = NavigationBarComponent.buildSpriteStyle(item, dark);
1068
- const imageOff = spriteStyle || svgOff ? undefined : item.imageIcon;
1069
- const imageOn = spriteStyle || svgOn ? undefined : (item.activeImageIcon ?? item.imageIcon);
1070
- const index = counter.value++;
1071
- const children = (item.children ?? []).map(child => NavigationBarComponent.buildRenderItem(child, section, item, depth + 1, counter, hrefs, dark));
1072
- return {
1073
- item,
1074
- section: section.id === '__default' ? undefined : section,
1075
- parent,
1076
- index,
1077
- depth,
1078
- href,
1079
- routed: !!href && !item.href,
1080
- iconOff: svgOff || spriteStyle || imageOff ? undefined : item.icon,
1081
- iconOn: svgOn || spriteStyle || imageOn ? undefined : (item.activeIcon ?? item.icon),
1082
- svgOff,
1083
- svgOn,
1084
- imageOff,
1085
- imageOn,
1086
- spriteStyle,
1087
- badgeText: NavigationBarComponent.formatBadge(item),
1088
- hasBadge: !!item.badge,
1089
- iconOnly: false,
1090
- hasChildren: children.length > 0,
1091
- children,
1092
- ariaLabel: item.ariaLabel ?? item.label,
1093
- tooltip: item.tooltip ?? item.label,
1094
- };
1095
- }
1096
- /**
1097
- * Translates a sprite descriptor into the inline custom properties the
1098
- * stylesheet uses to size the icon and to shift `background-position` per
1099
- * interaction state.
1100
- *
1101
- * The sheet is rescaled through `background-size` instead of being drawn at
1102
- * its natural size: that is what lets a strip of 26px frames be painted at the
1103
- * 24px of the surrounding Material icons without the neighbouring frames
1104
- * bleeding into the box, and it makes the step between two frames exactly the
1105
- * rendered side.
1106
- *
1107
- * @param item - The destination whose sprite must be translated.
1108
- * @param dark - `true` when the dark theme is active, selecting the `dark` frame set.
1109
- * @returns The inline style map, or `undefined` when the destination uses no sprite.
1110
- */
1111
- static buildSpriteStyle(item, dark) {
1112
- const sprite = item.sprite;
1113
- if (!sprite)
1114
- return undefined;
1115
- // The inline indices are the light set; `dark` overrides only what differs.
1116
- const light = sprite;
1117
- const frames = dark && sprite.dark ? { ...light, ...sprite.dark } : light;
1118
- const normal = frames.normal ?? 0;
1119
- const hover = frames.hover ?? normal;
1120
- const active = frames.active ?? hover;
1121
- const disabled = frames.disabled ?? normal;
1122
- const source = sprite.size ?? SPRITE_DEFAULT_SIZE;
1123
- const size = sprite.renderSize ?? source;
1124
- const count = NavigationBarComponent.spriteFrameCount(sprite);
1125
- const vertical = (sprite.direction ?? 'vertical') === 'vertical';
1126
- return {
1127
- '--sp-url': `url("${sprite.url}")`,
1128
- '--sp-size': `${size}px`,
1129
- '--sp-sheet-x': vertical ? `${size}px` : `${size * count}px`,
1130
- '--sp-sheet-y': vertical ? `${size * count}px` : `${size}px`,
1131
- '--sp-step-x': vertical ? '0px' : `${-size}px`,
1132
- '--sp-step-y': vertical ? `${-size}px` : '0px',
1133
- '--sp-normal': `${normal}`,
1134
- '--sp-hover': `${hover}`,
1135
- '--sp-active': `${active}`,
1136
- '--sp-disabled': `${disabled}`,
1137
- };
1138
- }
1139
- /**
1140
- * Number of frames a sprite sheet holds, needed to rescale it.
1141
- * @param sprite - The sprite descriptor to measure.
1142
- * @returns The declared frame count, or the highest referenced index plus one.
1143
- */
1144
- static spriteFrameCount(sprite) {
1145
- if (sprite.frames !== undefined && sprite.frames > 0)
1146
- return sprite.frames;
1147
- const indices = [
1148
- sprite.normal, sprite.hover, sprite.active, sprite.disabled,
1149
- sprite.dark?.normal, sprite.dark?.hover, sprite.dark?.active, sprite.dark?.disabled,
1150
- ];
1151
- let highest = 0;
1152
- for (const index of indices) {
1153
- if (index !== undefined && index > highest)
1154
- highest = index;
1155
- }
1156
- return highest + 1;
1157
- }
1158
- /**
1159
- * Formats the badge content of a destination.
1160
- * @param item - The destination whose badge must be formatted.
1161
- * @returns The badge text, or an empty string for a dot badge / no badge.
1162
- */
1163
- static formatBadge(item) {
1164
- const badge = item.badge;
1165
- if (!badge || badge.value === undefined)
1166
- return '';
1167
- if (typeof badge.value === 'number') {
1168
- const max = badge.max ?? 999;
1169
- return badge.value > max ? `${max}+` : `${badge.value}`;
1170
- }
1171
- return badge.value;
1172
- }
1173
- /**
1174
- * Strips the query string and the fragment from a URL.
1175
- * @param url - The URL to normalise.
1176
- * @returns The path portion of the URL.
1177
- */
1178
- static pathOf(url) {
1179
- const withoutFragment = url.split('#')[0] ?? '';
1180
- return withoutFragment.split('?')[0] ?? '';
1181
- }
1182
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: NavigationBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1183
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: NavigationBarComponent, isStandalone: true, selector: "navigation-bar", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, autoVariants: { classPropertyName: "autoVariants", publicName: "autoVariants", isSignal: true, isRequired: false, transformFunction: null }, selectedId: { classPropertyName: "selectedId", publicName: "selectedId", isSignal: true, isRequired: false, transformFunction: null }, expandedIds: { classPropertyName: "expandedIds", publicName: "expandedIds", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, labelVisibility: { classPropertyName: "labelVisibility", publicName: "labelVisibility", isSignal: true, isRequired: false, transformFunction: null }, itemLayout: { classPropertyName: "itemLayout", publicName: "itemLayout", isSignal: true, isRequired: false, transformFunction: null }, childIcons: { classPropertyName: "childIcons", publicName: "childIcons", isSignal: true, isRequired: false, transformFunction: null }, dense: { classPropertyName: "dense", publicName: "dense", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, headline: { classPropertyName: "headline", publicName: "headline", isSignal: true, isRequired: false, transformFunction: null }, showMenuButton: { classPropertyName: "showMenuButton", publicName: "showMenuButton", isSignal: true, isRequired: false, transformFunction: null }, menuIcon: { classPropertyName: "menuIcon", publicName: "menuIcon", isSignal: true, isRequired: false, transformFunction: null }, expandIcon: { classPropertyName: "expandIcon", publicName: "expandIcon", isSignal: true, isRequired: false, transformFunction: null }, overflowMode: { classPropertyName: "overflowMode", publicName: "overflowMode", isSignal: true, isRequired: false, transformFunction: null }, overflowIcon: { classPropertyName: "overflowIcon", publicName: "overflowIcon", isSignal: true, isRequired: false, transformFunction: null }, overflowLabel: { classPropertyName: "overflowLabel", publicName: "overflowLabel", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, menuAriaLabel: { classPropertyName: "menuAriaLabel", publicName: "menuAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, scrim: { classPropertyName: "scrim", publicName: "scrim", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, routerSync: { classPropertyName: "routerSync", publicName: "routerSync", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: "relativeTo", publicName: "relativeTo", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, railWidth: { classPropertyName: "railWidth", publicName: "railWidth", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedId: "selectedIdChange", expandedIds: "expandedIdsChange", open: "openChange", itemSelected: "itemSelected", menuClick: "menuClick" }, host: { properties: { "attr.data-variant": "resolvedVariant()", "attr.data-layout": "resolvedLayout()", "attr.data-align": "alignment()", "attr.data-position": "position()", "attr.data-labels": "resolvedLabelVisibility()", "attr.data-indicator": "indicatorMode()", "class.ars-navigation--open": "isOverlayOpen()", "class.ars-navigation--elevated": "elevated()", "class.ars-navigation--bordered": "bordered()", "class.ars-navigation--dense": "dense()", "class.ars-navigation--hidden": "isHidden()", "style.--ars-navigation-width": "widthStyle()", "style.--ars-navigation-rail-width": "railWidthStyle()", "style.--ars-navigation-min-width": "minWidthStyle()", "style.--ars-navigation-max-width": "maxWidthStyle()" }, classAttribute: "ars-navigation" }, viewQueries: [{ propertyName: "itemElements", predicate: ["navItem"], descendants: true, isSignal: true }, { propertyName: "panelElements", predicate: ["panelItem"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (isModal() && scrim()) {\n <div class=\"ars-nav__scrim\" aria-hidden=\"true\" (click)=\"onScrimClick()\"></div>\n}\n\n<nav class=\"ars-nav\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.role]=\"isModal() ? 'dialog' : undefined\"\n [attr.aria-modal]=\"isModal() ? 'true' : undefined\"\n [attr.inert]=\"isHidden() ? '' : undefined\"\n [cdkTrapFocus]=\"isOverlayOpen()\"\n [cdkTrapFocusAutoCapture]=\"isOverlayOpen()\"\n (keydown)=\"onKeydown($event)\">\n\n @let labels = resolvedLabelVisibility();\n @let stacked = resolvedLayout() === 'vertical';\n @let wide = isExpanded();\n @let active = activeId();\n @let highlighted = highlightedIds();\n @let ancestors = ancestorIds();\n @let openIds = expandedSet();\n @let popupOpenId = popupItem()?.item.id;\n\n @if (showsHeader()) {\n <div class=\"ars-nav__header\">\n @if (showMenuButton()) {\n <button type=\"button\"\n class=\"ars-nav__menu\"\n [attr.aria-label]=\"menuAriaLabel()\"\n (click)=\"onMenuClick()\">\n <mat-icon aria-hidden=\"true\">{{ menuIcon() }}</mat-icon>\n </button>\n }\n @if (wide) {\n @if (headline(); as headlineText) {\n <h2 class=\"ars-nav__headline\">{{ headlineText }}</h2>\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__leading\"><ng-content select=\"[navHeader]\" /></div>\n <div class=\"ars-nav__fab\"><ng-content select=\"[navFab]\" /></div>\n\n @for (group of visibleGroups(); track group.align) {\n <div class=\"ars-nav__items\" [class.ars-nav__items--bottom]=\"group.align === 'bottom'\">\n @for (block of group.sections; track block.section.id) {\n\n @if (wide && block.section.label) {\n <h3 class=\"ars-nav__section-headline\">{{ block.section.label }}</h3>\n }\n\n @for (r of block.items; track r.item.id) {\n @let current = r.item.id === active;\n <!-- Clicking a parent opens and closes its branch, or its floating panel, and\n never navigates. It can still BE the active destination, but only when it\n owns a route of its own (`r.href`): that is a page the user can reach, so\n the row is allowed to look selected. A parent without a route is never\n selected \u2014 where it used to stand in for a destination it hides it now\n carries `ancestor` instead: the trail, not the selection. -->\n @let ancestor = ancestors.has(r.item.id);\n <!-- Stacked layouts get the short form when the destination declares one, or\n no label at all on `'none'`; `tooltip` and `ariaLabel` stay on the full\n label either way, so the name is still one hover \u2014 or one screen reader \u2014\n away. -->\n @let stackedLabelHidden = stacked && r.item.labelVertical === 'none';\n @let displayLabel = stacked ? (r.item.labelVertical ?? r.item.label) : r.item.label;\n @let selected = highlighted.has(r.item.id) && (!r.hasChildren || !!r.href);\n <!-- `stackedLabelHidden` counts as \"no label on screen\": that is what turns the\n tooltip back on, which is the only place the name is left to be read. -->\n @let labelVisible = !r.iconOnly && !stackedLabelHidden\n && (labels === 'labeled' || (labels === 'selected' && (selected || ancestor)));\n @let branchOpen = r.hasChildren && openIds.has(r.item.id);\n @let hideIcon = wide && r.depth > 0 && !childIcons();\n <!-- In the compact variants the children live in a floating panel, so an\n ancestor row IS how the active destination shows on screen: it takes the\n selected look whole, icon variant included, exactly like a destination\n without children. In the expanded ones the active row is visible on its\n own and the ancestor stays the quieter trail. -->\n @let activeLook = selected || (!wide && ancestor);\n @let svg = activeLook ? r.svgOn : r.svgOff;\n @let image = activeLook ? r.imageOn : r.imageOff;\n @let ligature = activeLook ? r.iconOn : r.iconOff;\n\n <!--\n The anchor and the button branches duplicate the inner markup on purpose:\n an `ng-template` + `ngTemplateOutlet` would allocate one extra embedded\n view per destination and lose the typed template context.\n -->\n @if (r.href && !r.hasChildren) {\n <a #navItem\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [attr.data-depth]=\"r.depth\"\n [attr.href]=\"r.item.disabled ? undefined : r.href\"\n [attr.target]=\"r.item.target\"\n [attr.rel]=\"r.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-disabled]=\"r.item.disabled ? 'true' : undefined\"\n [attr.tabindex]=\"r.item.disabled ? -1 : 0\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </a>\n } @else {\n <button #navItem\n type=\"button\"\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--ancestor]=\"ancestor\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [class.ars-nav__item--parent]=\"r.hasChildren\"\n [class.ars-nav__item--icon-only]=\"r.iconOnly\"\n [attr.data-depth]=\"r.depth\"\n [disabled]=\"!!r.item.disabled\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-expanded]=\"r.hasChildren ? (wide ? branchOpen : popupOpenId === r.item.id) : undefined\"\n [attr.aria-haspopup]=\"r.hasChildren && !wide ? 'menu' : undefined\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n @if (r.hasChildren && wide) {\n <mat-icon class=\"ars-nav__chevron\"\n [class.ars-nav__chevron--open]=\"branchOpen\"\n aria-hidden=\"true\">{{ expandIcon() }}</mat-icon>\n }\n </button>\n }\n }\n\n @if (wide && block.section.divider && !$last) {\n <hr class=\"ars-nav__divider\" aria-hidden=\"true\" />\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__footer\"><ng-content select=\"[navFooter]\" /></div>\n</nav>\n\n<!--\n One overlay for the whole component: the overflow entry and every parent\n destination of the compact variants reuse it, instead of allocating a menu\n instance per destination.\n-->\n<ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"popupOrigin()\"\n [cdkConnectedOverlayOpen]=\"isPopupOpen()\"\n [cdkConnectedOverlayPositions]=\"popupPositions()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"closePopup()\"\n (detach)=\"closePopup()\">\n <div class=\"ars-nav-submenu\"\n role=\"menu\"\n [attr.aria-label]=\"popupItem()?.ariaLabel\"\n [cdkTrapFocus]=\"true\"\n [cdkTrapFocusAutoCapture]=\"true\"\n (keydown)=\"onKeydown($event)\">\n @for (entry of popupEntries(); track entry.key) {\n @if (entry.render; as c) {\n @let childSelected = c.item.id === activeId();\n @let childSvg = childSelected ? c.svgOn : c.svgOff;\n @let childImage = childSelected ? c.imageOn : c.imageOff;\n @let childLigature = childSelected ? c.iconOn : c.iconOff;\n @if (c.href) {\n <a #panelItem\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [attr.href]=\"c.item.disabled ? undefined : c.href\"\n [attr.target]=\"c.item.target\"\n [attr.rel]=\"c.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-disabled]=\"c.item.disabled ? 'true' : undefined\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #panelItem\n type=\"button\"\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [disabled]=\"!!c.item.disabled\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </button>\n }\n } @else {\n <div class=\"ars-nav-submenu__heading\" role=\"presentation\">{{ entry.label }}</div>\n }\n }\n </div>\n</ng-template>\n", styles: [":host{--_container: var(--ars-navigation-container-color, var(--mat-sys-surface-container, #eff1ef));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));--_icon: var(--ars-navigation-icon-color, var(--mat-sys-on-surface-variant, #3f4947));--_icon-active: var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c));--_label: var(--ars-navigation-label-color, var(--mat-sys-on-surface-variant, #3f4947));--_label-active: var(--ars-navigation-active-label-color, var(--ars-color-secondary, #4a635f));--_headline: var(--ars-navigation-headline-color, var(--mat-sys-on-surface-variant, #3f4947));--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_badge: var(--ars-navigation-badge-color, var(--ars-color-error, #ff5449));--_badge-text: var(--ars-navigation-badge-text-color, #ffffff);--_divider: var(--ars-navigation-divider-color, var(--ars-color-divider, #757d87));--_scrim: var(--ars-navigation-scrim-color, rgba(0, 0, 0, .4));--_focus: var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_hover-opacity: .08;--_focus-opacity: .1;--_press-opacity: .1;--_row-height: var(--ars-navigation-item-height, 56px);--_row-gap: var(--ars-navigation-item-gap, 4px);--_row-font-size: var(--ars-navigation-label-font-size, 14px);--_child-height: var(--ars-navigation-child-height, 48px);--_child-font-size: var(--ars-navigation-child-font-size, 13px);--_section-padding: 18px 16px 8px;--_row-pad-start: var(--ars-navigation-item-padding-start, 24px);--_row-pad-end: var(--ars-navigation-item-padding-end, 24px);--_label-lines: var(--ars-navigation-label-lines, 2);--_rtl: 1;display:block;box-sizing:border-box;color:var(--_label);-webkit-tap-highlight-color:transparent}:host-context([dir=rtl]){--_rtl: -1}:host(.ars-navigation--dense){--_row-height: var(--ars-navigation-dense-item-height, 44px);--_child-height: var(--ars-navigation-dense-child-height, 36px);--_section-padding: 12px 16px 4px}:host(.ars-navigation--dense){--_row-pad-start: var(--ars-navigation-dense-item-padding-start, 12px);--_row-pad-end: var(--ars-navigation-dense-item-padding-end, 12px)}.ars-nav{box-sizing:border-box;display:flex;position:relative;background:var(--_container);color:var(--_label);overflow:hidden}.ars-nav__items{box-sizing:border-box;display:flex;min-height:0;min-width:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--_state) 25%,transparent) transparent}.ars-nav__header{box-sizing:border-box;display:flex;align-items:center;flex:none;gap:12px}.ars-nav__leading,.ars-nav__fab,.ars-nav__footer{box-sizing:border-box;flex:none}.ars-nav__leading:empty,.ars-nav__fab:empty,.ars-nav__footer:empty{display:none}.ars-nav__headline{margin:0;padding:0 16px;font-size:22px;line-height:28px;font-weight:400;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__section-headline{margin:0;padding:var(--_section-padding, 18px 16px 8px);font-size:14px;line-height:20px;font-weight:500;letter-spacing:.1px;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__divider{flex:none;margin:8px 16px;border:0;border-top:1px solid var(--_divider);opacity:.4}.ars-nav__menu{display:inline-flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;margin:0;padding:0;border:0;border-radius:50%;background:transparent;color:var(--_icon);cursor:pointer;transition:background-color var(--_dur-short) var(--_easing)}.ars-nav__menu:hover{background:color-mix(in srgb,var(--_state) 8%,transparent)}.ars-nav__menu:focus-visible{outline:3px solid var(--_focus);outline-offset:2px}.ars-nav__item{box-sizing:border-box;position:relative;isolation:isolate;display:flex;align-items:center;flex:none;margin:0;border:0;background:transparent;color:var(--_label);font:inherit;text-align:start;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;appearance:none;-webkit-tap-highlight-color:transparent}.ars-nav__item:focus-visible{outline:3px solid var(--_focus);outline-offset:-3px;border-radius:16px}.ars-nav__item--disabled,.ars-nav__item:disabled{cursor:default;opacity:.38;pointer-events:none}.ars-nav__icon-box{box-sizing:border-box;position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:var(--_icon);transition:color var(--_dur) var(--_easing)}.ars-nav__icon{position:relative;z-index:1;width:24px;height:24px;font-size:24px;line-height:24px;font-variation-settings:\"FILL\" 0;transform:scale(1);transform-origin:center;transition:font-variation-settings var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1)),transform var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__label{position:relative;z-index:1;min-width:0;font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-large-tracking, .1px);color:var(--_label);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color var(--_dur) var(--_easing),opacity var(--_dur) var(--_easing),max-height var(--_dur) var(--_easing),margin var(--_dur) var(--_easing)}.ars-nav__label--hidden{opacity:0;max-height:0;margin:0!important;pointer-events:none}.ars-nav__trailing{position:relative;z-index:1;margin-inline-start:auto;padding-inline-start:12px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;color:var(--_label);white-space:nowrap}.ars-nav__badge{position:absolute;z-index:2;top:-6px;inset-inline-start:12px;box-sizing:border-box;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--_badge);color:var(--_badge-text);font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-align:center;white-space:nowrap}.ars-nav__badge--dot{top:-1px;inset-inline-start:16px;width:6px;min-width:6px;height:6px;padding:0;border-radius:3px}.ars-nav__badge--inline{position:static;z-index:1;flex:none;margin-inline-start:8px}.ars-nav__badge--inline.ars-nav__badge--dot{margin-inline-start:12px}:host([data-indicator=compact]) .ars-nav__icon-box:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__icon-box:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:before,:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:after{width:var(--ars-navigation-icon-button-size, 48px);height:var(--ars-navigation-icon-button-size, 48px);margin:calc(var(--ars-navigation-icon-button-size, 48px) / -2) 0 0 calc(var(--ars-navigation-icon-button-size, 48px) / -2);border-radius:50%}:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-indicator=compact]) .ars-nav__item:hover .ars-nav__icon-box:after{opacity:var(--_hover-opacity)}:host([data-indicator=compact]) .ars-nav__item:focus-visible .ars-nav__icon-box:after{opacity:var(--_focus-opacity)}:host([data-indicator=compact]) .ars-nav__item:active .ars-nav__icon-box:after{opacity:var(--_press-opacity)}:host([data-indicator=wide]) .ars-nav__item:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item--selected:before{opacity:1;transform:scaleX(1)}:host([data-indicator=wide]) .ars-nav__item:hover:after{opacity:var(--_hover-opacity)}:host([data-indicator=wide]) .ars-nav__item:focus-visible:after{opacity:var(--_focus-opacity)}:host([data-indicator=wide]) .ars-nav__item:active:after{opacity:var(--_press-opacity)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__label{color:var(--_label-active)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__chevron{color:var(--_label-active)}:host([data-variant=bar][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before,:host([data-variant=rail][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon-box,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon-box{color:var(--_icon-active)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__icon-box{color:var(--_icon-active)}.ars-nav__item--selected .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__label{color:var(--_label-active)}.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__label,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__trailing,.ars-nav-submenu__item--greyed:not(.ars-nav-submenu__item--selected){opacity:var(--ars-navigation-greyed-opacity, .5);transition:opacity var(--_dur-short, .15s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__label,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__icon-box,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__trailing,.ars-nav-submenu__item--greyed:where(:hover,:focus-visible){opacity:1}:host([data-layout=vertical]) .ars-nav__item{flex-direction:column;justify-content:center}:host([data-layout=vertical]) .ars-nav__label{font:var(--mat-sys-label-medium, 500 12px/16px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-medium-tracking, .5px);margin-top:var(--ars-navigation-vertical-gap, 0);padding-block:var(--ars-navigation-vertical-label-padding, 8px);max-width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-vertical-label-line-height, 14px)}:host([data-layout=horizontal]) .ars-nav__item{flex-direction:row;justify-content:flex-start}:host([data-layout=horizontal]) .ars-nav__label{margin-inline-start:4px}:host .ars-nav__item--selected .ars-nav__label,:host .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}:host([data-variant=bar]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-compact-selected-font-weight, 500)}:host([data-variant=bar]){width:100%}:host([data-variant=bar]) .ars-nav{flex-direction:row;align-items:center;justify-content:space-around;width:100%;height:var(--ars-navigation-bar-height, 80px);padding:0 8px}:host([data-variant=bar]) .ars-nav__header,:host([data-variant=bar]) .ars-nav__leading,:host([data-variant=bar]) .ars-nav__fab,:host([data-variant=bar]) .ars-nav__footer,:host([data-variant=bar]) .ars-nav__section-headline,:host([data-variant=bar]) .ars-nav__divider,:host([data-variant=bar]) .ars-nav__trailing{display:none}:host([data-variant=bar]) .ars-nav__items{display:contents}:host([data-variant=bar]) .ars-nav__item{flex:1 1 0;min-width:0;height:100%}:host([data-variant=bar][data-layout=horizontal]) .ars-nav__item{justify-content:center;max-width:var(--ars-navigation-item-max-width, 168px);padding:0 12px}:host([data-variant=bar][data-layout=vertical]) .ars-nav__item{justify-content:flex-start;padding-block-start:var(--ars-navigation-bar-item-padding-top, 12px)}:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:before,:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:after{inset:12px 0}:host([data-variant=rail]){height:100%}:host([data-variant=rail]) .ars-nav{flex-direction:column;align-items:center;width:var(--ars-navigation-rail-width, var(--ars-navigation-width, 96px));height:100%;padding:var(--ars-navigation-rail-top-padding, 20px) 0 8px}:host([data-variant=rail]) .ars-nav__header{flex-direction:column;margin-bottom:40px}:host([data-variant=rail]) .ars-nav__headline,:host([data-variant=rail]) .ars-nav__section-headline,:host([data-variant=rail]) .ars-nav__divider,:host([data-variant=rail]) .ars-nav__trailing{display:none}:host([data-variant=rail]) .ars-nav__fab{margin-bottom:40px}:host([data-variant=rail]) .ars-nav__items{flex:1 1 auto;flex-direction:column;align-items:center;gap:var(--ars-navigation-rail-item-gap, 8px);width:100%;overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail]) .ars-nav__item{justify-content:center;width:100%;min-height:var(--ars-navigation-rail-item-height, 64px);padding:0 4px}:host([data-variant=rail-expanded]),:host([data-variant=drawer]),:host([data-variant=modal]){height:100%}:host([data-variant=rail-expanded]) .ars-nav,:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{flex-direction:column;align-items:stretch;height:100%;padding:12px 0}:host([data-variant=rail-expanded]) .ars-nav__header,:host([data-variant=drawer]) .ars-nav__header,:host([data-variant=modal]) .ars-nav__header{padding:4px 8px 8px}:host([data-variant=rail-expanded]) .ars-nav__items,:host([data-variant=drawer]) .ars-nav__items,:host([data-variant=modal]) .ars-nav__items{flex:1 1 auto;flex-direction:column;gap:var(--_row-gap, 4px);overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail-expanded]) .ars-nav__item,:host([data-variant=drawer]) .ars-nav__item,:host([data-variant=modal]) .ars-nav__item{min-height:var(--_row-height, 56px);padding-block:0;padding-inline:calc(var(--_row-pad-start, 24px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 24px);margin-block:0;margin-inline:var(--ars-navigation-item-inset, 20px)}:host(.ars-navigation--dense) .ars-nav__item{padding-inline:calc(var(--_row-pad-start, 12px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"]{margin-block-start:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child{margin-block-end:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__icon-box,:host([data-variant=drawer]) .ars-nav__icon-box,:host([data-variant=modal]) .ars-nav__icon-box{margin-inline-end:12px}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]){min-height:var(--_child-height, 48px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label{font-size:var(--_child-font-size, 13px)}:host([data-variant=rail-expanded]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-label-line-height, 18px);flex:1 1 auto;margin-inline-start:0;font-size:var(--_row-font-size, 14px)}:host([data-variant=rail-expanded]) .ars-nav{width:var(--ars-navigation-width, 220px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{width:var(--ars-navigation-width, 360px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=modal]){position:fixed;inset:0;z-index:var(--ars-navigation-z-index, 1000);height:auto;pointer-events:none}:host([data-variant=modal]) .ars-nav{position:absolute;inset-block:0;inset-inline-start:0;pointer-events:auto;border-start-end-radius:16px;border-end-end-radius:16px;translate:calc(var(--_shift, 0%) * var(--_rtl)) 0;transition:translate var(--_dur-long) var(--_easing),visibility var(--_dur-long) var(--_easing)}:host([data-variant=modal][data-position=end]) .ars-nav{inset-inline-start:auto;inset-inline-end:0;border-radius:0;border-start-start-radius:16px;border-end-start-radius:16px}:host([data-variant=modal].ars-navigation--hidden) .ars-nav__scrim{opacity:0;pointer-events:none}:host([data-variant=modal].ars-navigation--hidden) .ars-nav{--_shift: -100%;visibility:hidden}:host([data-variant=modal][data-position=end].ars-navigation--hidden) .ars-nav{--_shift: 100%}.ars-nav__scrim{position:absolute;inset:0;background:var(--_scrim);opacity:1;pointer-events:auto;transition:opacity var(--_dur-long) var(--_easing)}:host(:not([data-variant=bar])) .ars-nav__items--bottom{flex:0 0 auto;margin-block-start:auto;overflow:visible}:host([data-align=center]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe center}:host([data-align=bottom]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe flex-end}:host(.ars-navigation--elevated) .ars-nav{box-shadow:0 1px 3px #0000004d,0 4px 8px 3px #00000026}:host(.ars-navigation--hidden):not([data-variant=modal]){display:none}.ars-nav__icon--image{object-fit:contain}.ars-nav__icon--sprite{display:inline-block;flex:none;width:var(--sp-size, 24px);height:var(--sp-size, 24px);background-image:var(--sp-url);background-repeat:no-repeat;background-size:var(--sp-sheet-x, auto) var(--sp-sheet-y, auto);background-position:calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-x, 0px)) calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-y, 0px))}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon--sprite{--sp-frame: var(--sp-hover)}.ars-nav__item--selected .ars-nav__icon--sprite,.ars-nav-submenu__item--selected .ars-nav__icon--sprite,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon--sprite,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon--sprite{--sp-frame: var(--sp-active)}.ars-nav__item--disabled .ars-nav__icon--sprite,.ars-nav__item:where(:disabled) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:disabled,[aria-disabled=true]) .ars-nav__icon--sprite{--sp-frame: var(--sp-disabled)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon{transform:scale(var(--_icon-hover-scale, 1.12))}.ars-nav__item--selected .ars-nav__icon,.ars-nav-submenu__item--selected .ars-nav__icon{transform:scale(1)}.ars-nav__item:where(:active) .ars-nav__icon,.ars-nav-submenu__item:where(:active) .ars-nav__icon{transform:scale(var(--_icon-press-scale, .92));transition-duration:var(--_dur-short, .15s)}:host([data-variant=bar]) .ars-nav__item--icon-only{flex:0 0 auto;min-width:56px;max-width:72px}.ars-nav__chevron{position:relative;z-index:1;flex:none;margin-inline-start:8px;width:20px;height:20px;font-size:20px;line-height:20px;color:var(--_icon);rotate:0deg;opacity:0;transition:rotate var(--_dur) var(--_easing),opacity var(--_dur-short) var(--_easing)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__chevron{opacity:1}@media(hover:none){.ars-nav__chevron{opacity:1}}.ars-nav__chevron--open{rotate:180deg}.ars-nav__item[data-depth=\"1\"]{--_depth-indent: 24px}.ars-nav__item[data-depth=\"2\"]{--_depth-indent: 48px}.ars-nav__item[data-depth=\"3\"]{--_depth-indent: 72px}.ars-nav-submenu{--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));box-sizing:border-box;display:flex;flex-direction:column;gap:2px;min-width:200px;max-width:320px;max-height:60vh;padding:8px;border-radius:12px;background:var(--ars-navigation-menu-container-color, var(--ars-navigation-container-color, var(--mat-sys-surface-container-high, #e7e9e8)));color:var(--ars-navigation-label-color, var(--mat-sys-on-surface, #191c1b));box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026;overflow-y:auto;overscroll-behavior:contain}.ars-nav-submenu__item{box-sizing:border-box;display:flex;align-items:center;gap:12px;flex:none;min-height:48px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;appearance:none}.ars-nav-submenu__item--grouped{padding-inline-start:var(--ars-navigation-menu-group-indent, 24px)}.ars-nav-submenu__item:hover{background:color-mix(in srgb,currentColor 8%,transparent)}.ars-nav-submenu__item:focus-visible{outline:3px solid var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));outline-offset:-3px}.ars-nav-submenu__item--selected .ars-nav-submenu__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}.ars-nav-submenu__item--selected{background:var(--_indicator);color:var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c))}.ars-nav-submenu__item--selected:where(:hover,:focus-visible){background:color-mix(in srgb,var(--_state) 8%,var(--_indicator))}.ars-nav-submenu__item:disabled,.ars-nav-submenu__item[aria-disabled=true]{opacity:.38;pointer-events:none}.ars-nav-submenu__heading{padding:12px 12px 4px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;opacity:.7}.ars-nav-submenu__heading:first-child{padding-top:4px}.ars-nav-submenu__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--ars-navigation-label-lines, 2);line-clamp:var(--ars-navigation-label-lines, 2);flex:1 1 auto;min-width:0;padding-block:8px;font-size:14px;line-height:var(--ars-navigation-label-line-height, 18px);font-weight:500;letter-spacing:.1px;white-space:normal;overflow-wrap:anywhere;overflow:hidden}.ars-nav-submenu__trailing{flex:none;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;opacity:.8}@media(prefers-reduced-motion:reduce){:host{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}:host([data-indicator=wide]) .ars-nav__item:before,:host([data-indicator=compact]) .ars-nav__icon-box:before{transform:none}.ars-nav-submenu{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}}@media(forced-colors:active){:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before,:host([data-indicator=wide]) .ars-nav__item--selected:before{background:Highlight;forced-color-adjust:none}.ars-nav__item:focus-visible{outline:3px solid CanvasText}}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1184
- }
1185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: NavigationBarComponent, decorators: [{
1186
- type: Component,
1187
- args: [{ selector: 'navigation-bar', standalone: true, imports: [MatIconModule, MatTooltipModule, CdkTrapFocus, CdkConnectedOverlay], changeDetection: ChangeDetectionStrategy.OnPush, host: {
1188
- 'class': 'ars-navigation',
1189
- '[attr.data-variant]': 'resolvedVariant()',
1190
- '[attr.data-layout]': 'resolvedLayout()',
1191
- '[attr.data-align]': 'alignment()',
1192
- '[attr.data-position]': 'position()',
1193
- '[attr.data-labels]': 'resolvedLabelVisibility()',
1194
- '[attr.data-indicator]': 'indicatorMode()',
1195
- '[class.ars-navigation--open]': 'isOverlayOpen()',
1196
- '[class.ars-navigation--elevated]': 'elevated()',
1197
- '[class.ars-navigation--bordered]': 'bordered()',
1198
- '[class.ars-navigation--dense]': 'dense()',
1199
- '[class.ars-navigation--hidden]': 'isHidden()',
1200
- '[style.--ars-navigation-width]': 'widthStyle()',
1201
- '[style.--ars-navigation-rail-width]': 'railWidthStyle()',
1202
- '[style.--ars-navigation-min-width]': 'minWidthStyle()',
1203
- '[style.--ars-navigation-max-width]': 'maxWidthStyle()',
1204
- }, template: "@if (isModal() && scrim()) {\n <div class=\"ars-nav__scrim\" aria-hidden=\"true\" (click)=\"onScrimClick()\"></div>\n}\n\n<nav class=\"ars-nav\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.role]=\"isModal() ? 'dialog' : undefined\"\n [attr.aria-modal]=\"isModal() ? 'true' : undefined\"\n [attr.inert]=\"isHidden() ? '' : undefined\"\n [cdkTrapFocus]=\"isOverlayOpen()\"\n [cdkTrapFocusAutoCapture]=\"isOverlayOpen()\"\n (keydown)=\"onKeydown($event)\">\n\n @let labels = resolvedLabelVisibility();\n @let stacked = resolvedLayout() === 'vertical';\n @let wide = isExpanded();\n @let active = activeId();\n @let highlighted = highlightedIds();\n @let ancestors = ancestorIds();\n @let openIds = expandedSet();\n @let popupOpenId = popupItem()?.item.id;\n\n @if (showsHeader()) {\n <div class=\"ars-nav__header\">\n @if (showMenuButton()) {\n <button type=\"button\"\n class=\"ars-nav__menu\"\n [attr.aria-label]=\"menuAriaLabel()\"\n (click)=\"onMenuClick()\">\n <mat-icon aria-hidden=\"true\">{{ menuIcon() }}</mat-icon>\n </button>\n }\n @if (wide) {\n @if (headline(); as headlineText) {\n <h2 class=\"ars-nav__headline\">{{ headlineText }}</h2>\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__leading\"><ng-content select=\"[navHeader]\" /></div>\n <div class=\"ars-nav__fab\"><ng-content select=\"[navFab]\" /></div>\n\n @for (group of visibleGroups(); track group.align) {\n <div class=\"ars-nav__items\" [class.ars-nav__items--bottom]=\"group.align === 'bottom'\">\n @for (block of group.sections; track block.section.id) {\n\n @if (wide && block.section.label) {\n <h3 class=\"ars-nav__section-headline\">{{ block.section.label }}</h3>\n }\n\n @for (r of block.items; track r.item.id) {\n @let current = r.item.id === active;\n <!-- Clicking a parent opens and closes its branch, or its floating panel, and\n never navigates. It can still BE the active destination, but only when it\n owns a route of its own (`r.href`): that is a page the user can reach, so\n the row is allowed to look selected. A parent without a route is never\n selected \u2014 where it used to stand in for a destination it hides it now\n carries `ancestor` instead: the trail, not the selection. -->\n @let ancestor = ancestors.has(r.item.id);\n <!-- Stacked layouts get the short form when the destination declares one, or\n no label at all on `'none'`; `tooltip` and `ariaLabel` stay on the full\n label either way, so the name is still one hover \u2014 or one screen reader \u2014\n away. -->\n @let stackedLabelHidden = stacked && r.item.labelVertical === 'none';\n @let displayLabel = stacked ? (r.item.labelVertical ?? r.item.label) : r.item.label;\n @let selected = highlighted.has(r.item.id) && (!r.hasChildren || !!r.href);\n <!-- `stackedLabelHidden` counts as \"no label on screen\": that is what turns the\n tooltip back on, which is the only place the name is left to be read. -->\n @let labelVisible = !r.iconOnly && !stackedLabelHidden\n && (labels === 'labeled' || (labels === 'selected' && (selected || ancestor)));\n @let branchOpen = r.hasChildren && openIds.has(r.item.id);\n @let hideIcon = wide && r.depth > 0 && !childIcons();\n <!-- In the compact variants the children live in a floating panel, so an\n ancestor row IS how the active destination shows on screen: it takes the\n selected look whole, icon variant included, exactly like a destination\n without children. In the expanded ones the active row is visible on its\n own and the ancestor stays the quieter trail. -->\n @let activeLook = selected || (!wide && ancestor);\n @let svg = activeLook ? r.svgOn : r.svgOff;\n @let image = activeLook ? r.imageOn : r.imageOff;\n @let ligature = activeLook ? r.iconOn : r.iconOff;\n\n <!--\n The anchor and the button branches duplicate the inner markup on purpose:\n an `ng-template` + `ngTemplateOutlet` would allocate one extra embedded\n view per destination and lose the typed template context.\n -->\n @if (r.href && !r.hasChildren) {\n <a #navItem\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [attr.data-depth]=\"r.depth\"\n [attr.href]=\"r.item.disabled ? undefined : r.href\"\n [attr.target]=\"r.item.target\"\n [attr.rel]=\"r.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-disabled]=\"r.item.disabled ? 'true' : undefined\"\n [attr.tabindex]=\"r.item.disabled ? -1 : 0\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </a>\n } @else {\n <button #navItem\n type=\"button\"\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--ancestor]=\"ancestor\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [class.ars-nav__item--parent]=\"r.hasChildren\"\n [class.ars-nav__item--icon-only]=\"r.iconOnly\"\n [attr.data-depth]=\"r.depth\"\n [disabled]=\"!!r.item.disabled\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-expanded]=\"r.hasChildren ? (wide ? branchOpen : popupOpenId === r.item.id) : undefined\"\n [attr.aria-haspopup]=\"r.hasChildren && !wide ? 'menu' : undefined\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n @if (r.hasChildren && wide) {\n <mat-icon class=\"ars-nav__chevron\"\n [class.ars-nav__chevron--open]=\"branchOpen\"\n aria-hidden=\"true\">{{ expandIcon() }}</mat-icon>\n }\n </button>\n }\n }\n\n @if (wide && block.section.divider && !$last) {\n <hr class=\"ars-nav__divider\" aria-hidden=\"true\" />\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__footer\"><ng-content select=\"[navFooter]\" /></div>\n</nav>\n\n<!--\n One overlay for the whole component: the overflow entry and every parent\n destination of the compact variants reuse it, instead of allocating a menu\n instance per destination.\n-->\n<ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"popupOrigin()\"\n [cdkConnectedOverlayOpen]=\"isPopupOpen()\"\n [cdkConnectedOverlayPositions]=\"popupPositions()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"closePopup()\"\n (detach)=\"closePopup()\">\n <div class=\"ars-nav-submenu\"\n role=\"menu\"\n [attr.aria-label]=\"popupItem()?.ariaLabel\"\n [cdkTrapFocus]=\"true\"\n [cdkTrapFocusAutoCapture]=\"true\"\n (keydown)=\"onKeydown($event)\">\n @for (entry of popupEntries(); track entry.key) {\n @if (entry.render; as c) {\n @let childSelected = c.item.id === activeId();\n @let childSvg = childSelected ? c.svgOn : c.svgOff;\n @let childImage = childSelected ? c.imageOn : c.imageOff;\n @let childLigature = childSelected ? c.iconOn : c.iconOff;\n @if (c.href) {\n <a #panelItem\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [attr.href]=\"c.item.disabled ? undefined : c.href\"\n [attr.target]=\"c.item.target\"\n [attr.rel]=\"c.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-disabled]=\"c.item.disabled ? 'true' : undefined\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #panelItem\n type=\"button\"\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [disabled]=\"!!c.item.disabled\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </button>\n }\n } @else {\n <div class=\"ars-nav-submenu__heading\" role=\"presentation\">{{ entry.label }}</div>\n }\n }\n </div>\n</ng-template>\n", styles: [":host{--_container: var(--ars-navigation-container-color, var(--mat-sys-surface-container, #eff1ef));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));--_icon: var(--ars-navigation-icon-color, var(--mat-sys-on-surface-variant, #3f4947));--_icon-active: var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c));--_label: var(--ars-navigation-label-color, var(--mat-sys-on-surface-variant, #3f4947));--_label-active: var(--ars-navigation-active-label-color, var(--ars-color-secondary, #4a635f));--_headline: var(--ars-navigation-headline-color, var(--mat-sys-on-surface-variant, #3f4947));--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_badge: var(--ars-navigation-badge-color, var(--ars-color-error, #ff5449));--_badge-text: var(--ars-navigation-badge-text-color, #ffffff);--_divider: var(--ars-navigation-divider-color, var(--ars-color-divider, #757d87));--_scrim: var(--ars-navigation-scrim-color, rgba(0, 0, 0, .4));--_focus: var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_hover-opacity: .08;--_focus-opacity: .1;--_press-opacity: .1;--_row-height: var(--ars-navigation-item-height, 56px);--_row-gap: var(--ars-navigation-item-gap, 4px);--_row-font-size: var(--ars-navigation-label-font-size, 14px);--_child-height: var(--ars-navigation-child-height, 48px);--_child-font-size: var(--ars-navigation-child-font-size, 13px);--_section-padding: 18px 16px 8px;--_row-pad-start: var(--ars-navigation-item-padding-start, 24px);--_row-pad-end: var(--ars-navigation-item-padding-end, 24px);--_label-lines: var(--ars-navigation-label-lines, 2);--_rtl: 1;display:block;box-sizing:border-box;color:var(--_label);-webkit-tap-highlight-color:transparent}:host-context([dir=rtl]){--_rtl: -1}:host(.ars-navigation--dense){--_row-height: var(--ars-navigation-dense-item-height, 44px);--_child-height: var(--ars-navigation-dense-child-height, 36px);--_section-padding: 12px 16px 4px}:host(.ars-navigation--dense){--_row-pad-start: var(--ars-navigation-dense-item-padding-start, 12px);--_row-pad-end: var(--ars-navigation-dense-item-padding-end, 12px)}.ars-nav{box-sizing:border-box;display:flex;position:relative;background:var(--_container);color:var(--_label);overflow:hidden}.ars-nav__items{box-sizing:border-box;display:flex;min-height:0;min-width:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--_state) 25%,transparent) transparent}.ars-nav__header{box-sizing:border-box;display:flex;align-items:center;flex:none;gap:12px}.ars-nav__leading,.ars-nav__fab,.ars-nav__footer{box-sizing:border-box;flex:none}.ars-nav__leading:empty,.ars-nav__fab:empty,.ars-nav__footer:empty{display:none}.ars-nav__headline{margin:0;padding:0 16px;font-size:22px;line-height:28px;font-weight:400;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__section-headline{margin:0;padding:var(--_section-padding, 18px 16px 8px);font-size:14px;line-height:20px;font-weight:500;letter-spacing:.1px;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__divider{flex:none;margin:8px 16px;border:0;border-top:1px solid var(--_divider);opacity:.4}.ars-nav__menu{display:inline-flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;margin:0;padding:0;border:0;border-radius:50%;background:transparent;color:var(--_icon);cursor:pointer;transition:background-color var(--_dur-short) var(--_easing)}.ars-nav__menu:hover{background:color-mix(in srgb,var(--_state) 8%,transparent)}.ars-nav__menu:focus-visible{outline:3px solid var(--_focus);outline-offset:2px}.ars-nav__item{box-sizing:border-box;position:relative;isolation:isolate;display:flex;align-items:center;flex:none;margin:0;border:0;background:transparent;color:var(--_label);font:inherit;text-align:start;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;appearance:none;-webkit-tap-highlight-color:transparent}.ars-nav__item:focus-visible{outline:3px solid var(--_focus);outline-offset:-3px;border-radius:16px}.ars-nav__item--disabled,.ars-nav__item:disabled{cursor:default;opacity:.38;pointer-events:none}.ars-nav__icon-box{box-sizing:border-box;position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:var(--_icon);transition:color var(--_dur) var(--_easing)}.ars-nav__icon{position:relative;z-index:1;width:24px;height:24px;font-size:24px;line-height:24px;font-variation-settings:\"FILL\" 0;transform:scale(1);transform-origin:center;transition:font-variation-settings var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1)),transform var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__label{position:relative;z-index:1;min-width:0;font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-large-tracking, .1px);color:var(--_label);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color var(--_dur) var(--_easing),opacity var(--_dur) var(--_easing),max-height var(--_dur) var(--_easing),margin var(--_dur) var(--_easing)}.ars-nav__label--hidden{opacity:0;max-height:0;margin:0!important;pointer-events:none}.ars-nav__trailing{position:relative;z-index:1;margin-inline-start:auto;padding-inline-start:12px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;color:var(--_label);white-space:nowrap}.ars-nav__badge{position:absolute;z-index:2;top:-6px;inset-inline-start:12px;box-sizing:border-box;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--_badge);color:var(--_badge-text);font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-align:center;white-space:nowrap}.ars-nav__badge--dot{top:-1px;inset-inline-start:16px;width:6px;min-width:6px;height:6px;padding:0;border-radius:3px}.ars-nav__badge--inline{position:static;z-index:1;flex:none;margin-inline-start:8px}.ars-nav__badge--inline.ars-nav__badge--dot{margin-inline-start:12px}:host([data-indicator=compact]) .ars-nav__icon-box:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__icon-box:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:before,:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:after{width:var(--ars-navigation-icon-button-size, 48px);height:var(--ars-navigation-icon-button-size, 48px);margin:calc(var(--ars-navigation-icon-button-size, 48px) / -2) 0 0 calc(var(--ars-navigation-icon-button-size, 48px) / -2);border-radius:50%}:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-indicator=compact]) .ars-nav__item:hover .ars-nav__icon-box:after{opacity:var(--_hover-opacity)}:host([data-indicator=compact]) .ars-nav__item:focus-visible .ars-nav__icon-box:after{opacity:var(--_focus-opacity)}:host([data-indicator=compact]) .ars-nav__item:active .ars-nav__icon-box:after{opacity:var(--_press-opacity)}:host([data-indicator=wide]) .ars-nav__item:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item--selected:before{opacity:1;transform:scaleX(1)}:host([data-indicator=wide]) .ars-nav__item:hover:after{opacity:var(--_hover-opacity)}:host([data-indicator=wide]) .ars-nav__item:focus-visible:after{opacity:var(--_focus-opacity)}:host([data-indicator=wide]) .ars-nav__item:active:after{opacity:var(--_press-opacity)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__label{color:var(--_label-active)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__chevron{color:var(--_label-active)}:host([data-variant=bar][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before,:host([data-variant=rail][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon-box,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon-box{color:var(--_icon-active)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__icon-box{color:var(--_icon-active)}.ars-nav__item--selected .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__label{color:var(--_label-active)}.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__label,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__trailing,.ars-nav-submenu__item--greyed:not(.ars-nav-submenu__item--selected){opacity:var(--ars-navigation-greyed-opacity, .5);transition:opacity var(--_dur-short, .15s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__label,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__icon-box,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__trailing,.ars-nav-submenu__item--greyed:where(:hover,:focus-visible){opacity:1}:host([data-layout=vertical]) .ars-nav__item{flex-direction:column;justify-content:center}:host([data-layout=vertical]) .ars-nav__label{font:var(--mat-sys-label-medium, 500 12px/16px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-medium-tracking, .5px);margin-top:var(--ars-navigation-vertical-gap, 0);padding-block:var(--ars-navigation-vertical-label-padding, 8px);max-width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-vertical-label-line-height, 14px)}:host([data-layout=horizontal]) .ars-nav__item{flex-direction:row;justify-content:flex-start}:host([data-layout=horizontal]) .ars-nav__label{margin-inline-start:4px}:host .ars-nav__item--selected .ars-nav__label,:host .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}:host([data-variant=bar]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-compact-selected-font-weight, 500)}:host([data-variant=bar]){width:100%}:host([data-variant=bar]) .ars-nav{flex-direction:row;align-items:center;justify-content:space-around;width:100%;height:var(--ars-navigation-bar-height, 80px);padding:0 8px}:host([data-variant=bar]) .ars-nav__header,:host([data-variant=bar]) .ars-nav__leading,:host([data-variant=bar]) .ars-nav__fab,:host([data-variant=bar]) .ars-nav__footer,:host([data-variant=bar]) .ars-nav__section-headline,:host([data-variant=bar]) .ars-nav__divider,:host([data-variant=bar]) .ars-nav__trailing{display:none}:host([data-variant=bar]) .ars-nav__items{display:contents}:host([data-variant=bar]) .ars-nav__item{flex:1 1 0;min-width:0;height:100%}:host([data-variant=bar][data-layout=horizontal]) .ars-nav__item{justify-content:center;max-width:var(--ars-navigation-item-max-width, 168px);padding:0 12px}:host([data-variant=bar][data-layout=vertical]) .ars-nav__item{justify-content:flex-start;padding-block-start:var(--ars-navigation-bar-item-padding-top, 12px)}:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:before,:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:after{inset:12px 0}:host([data-variant=rail]){height:100%}:host([data-variant=rail]) .ars-nav{flex-direction:column;align-items:center;width:var(--ars-navigation-rail-width, var(--ars-navigation-width, 96px));height:100%;padding:var(--ars-navigation-rail-top-padding, 20px) 0 8px}:host([data-variant=rail]) .ars-nav__header{flex-direction:column;margin-bottom:40px}:host([data-variant=rail]) .ars-nav__headline,:host([data-variant=rail]) .ars-nav__section-headline,:host([data-variant=rail]) .ars-nav__divider,:host([data-variant=rail]) .ars-nav__trailing{display:none}:host([data-variant=rail]) .ars-nav__fab{margin-bottom:40px}:host([data-variant=rail]) .ars-nav__items{flex:1 1 auto;flex-direction:column;align-items:center;gap:var(--ars-navigation-rail-item-gap, 8px);width:100%;overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail]) .ars-nav__item{justify-content:center;width:100%;min-height:var(--ars-navigation-rail-item-height, 64px);padding:0 4px}:host([data-variant=rail-expanded]),:host([data-variant=drawer]),:host([data-variant=modal]){height:100%}:host([data-variant=rail-expanded]) .ars-nav,:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{flex-direction:column;align-items:stretch;height:100%;padding:12px 0}:host([data-variant=rail-expanded]) .ars-nav__header,:host([data-variant=drawer]) .ars-nav__header,:host([data-variant=modal]) .ars-nav__header{padding:4px 8px 8px}:host([data-variant=rail-expanded]) .ars-nav__items,:host([data-variant=drawer]) .ars-nav__items,:host([data-variant=modal]) .ars-nav__items{flex:1 1 auto;flex-direction:column;gap:var(--_row-gap, 4px);overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail-expanded]) .ars-nav__item,:host([data-variant=drawer]) .ars-nav__item,:host([data-variant=modal]) .ars-nav__item{min-height:var(--_row-height, 56px);padding-block:0;padding-inline:calc(var(--_row-pad-start, 24px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 24px);margin-block:0;margin-inline:var(--ars-navigation-item-inset, 20px)}:host(.ars-navigation--dense) .ars-nav__item{padding-inline:calc(var(--_row-pad-start, 12px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"]{margin-block-start:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child{margin-block-end:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__icon-box,:host([data-variant=drawer]) .ars-nav__icon-box,:host([data-variant=modal]) .ars-nav__icon-box{margin-inline-end:12px}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]){min-height:var(--_child-height, 48px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label{font-size:var(--_child-font-size, 13px)}:host([data-variant=rail-expanded]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-label-line-height, 18px);flex:1 1 auto;margin-inline-start:0;font-size:var(--_row-font-size, 14px)}:host([data-variant=rail-expanded]) .ars-nav{width:var(--ars-navigation-width, 220px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{width:var(--ars-navigation-width, 360px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=modal]){position:fixed;inset:0;z-index:var(--ars-navigation-z-index, 1000);height:auto;pointer-events:none}:host([data-variant=modal]) .ars-nav{position:absolute;inset-block:0;inset-inline-start:0;pointer-events:auto;border-start-end-radius:16px;border-end-end-radius:16px;translate:calc(var(--_shift, 0%) * var(--_rtl)) 0;transition:translate var(--_dur-long) var(--_easing),visibility var(--_dur-long) var(--_easing)}:host([data-variant=modal][data-position=end]) .ars-nav{inset-inline-start:auto;inset-inline-end:0;border-radius:0;border-start-start-radius:16px;border-end-start-radius:16px}:host([data-variant=modal].ars-navigation--hidden) .ars-nav__scrim{opacity:0;pointer-events:none}:host([data-variant=modal].ars-navigation--hidden) .ars-nav{--_shift: -100%;visibility:hidden}:host([data-variant=modal][data-position=end].ars-navigation--hidden) .ars-nav{--_shift: 100%}.ars-nav__scrim{position:absolute;inset:0;background:var(--_scrim);opacity:1;pointer-events:auto;transition:opacity var(--_dur-long) var(--_easing)}:host(:not([data-variant=bar])) .ars-nav__items--bottom{flex:0 0 auto;margin-block-start:auto;overflow:visible}:host([data-align=center]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe center}:host([data-align=bottom]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe flex-end}:host(.ars-navigation--elevated) .ars-nav{box-shadow:0 1px 3px #0000004d,0 4px 8px 3px #00000026}:host(.ars-navigation--hidden):not([data-variant=modal]){display:none}.ars-nav__icon--image{object-fit:contain}.ars-nav__icon--sprite{display:inline-block;flex:none;width:var(--sp-size, 24px);height:var(--sp-size, 24px);background-image:var(--sp-url);background-repeat:no-repeat;background-size:var(--sp-sheet-x, auto) var(--sp-sheet-y, auto);background-position:calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-x, 0px)) calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-y, 0px))}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon--sprite{--sp-frame: var(--sp-hover)}.ars-nav__item--selected .ars-nav__icon--sprite,.ars-nav-submenu__item--selected .ars-nav__icon--sprite,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon--sprite,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon--sprite{--sp-frame: var(--sp-active)}.ars-nav__item--disabled .ars-nav__icon--sprite,.ars-nav__item:where(:disabled) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:disabled,[aria-disabled=true]) .ars-nav__icon--sprite{--sp-frame: var(--sp-disabled)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon{transform:scale(var(--_icon-hover-scale, 1.12))}.ars-nav__item--selected .ars-nav__icon,.ars-nav-submenu__item--selected .ars-nav__icon{transform:scale(1)}.ars-nav__item:where(:active) .ars-nav__icon,.ars-nav-submenu__item:where(:active) .ars-nav__icon{transform:scale(var(--_icon-press-scale, .92));transition-duration:var(--_dur-short, .15s)}:host([data-variant=bar]) .ars-nav__item--icon-only{flex:0 0 auto;min-width:56px;max-width:72px}.ars-nav__chevron{position:relative;z-index:1;flex:none;margin-inline-start:8px;width:20px;height:20px;font-size:20px;line-height:20px;color:var(--_icon);rotate:0deg;opacity:0;transition:rotate var(--_dur) var(--_easing),opacity var(--_dur-short) var(--_easing)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__chevron{opacity:1}@media(hover:none){.ars-nav__chevron{opacity:1}}.ars-nav__chevron--open{rotate:180deg}.ars-nav__item[data-depth=\"1\"]{--_depth-indent: 24px}.ars-nav__item[data-depth=\"2\"]{--_depth-indent: 48px}.ars-nav__item[data-depth=\"3\"]{--_depth-indent: 72px}.ars-nav-submenu{--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));box-sizing:border-box;display:flex;flex-direction:column;gap:2px;min-width:200px;max-width:320px;max-height:60vh;padding:8px;border-radius:12px;background:var(--ars-navigation-menu-container-color, var(--ars-navigation-container-color, var(--mat-sys-surface-container-high, #e7e9e8)));color:var(--ars-navigation-label-color, var(--mat-sys-on-surface, #191c1b));box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026;overflow-y:auto;overscroll-behavior:contain}.ars-nav-submenu__item{box-sizing:border-box;display:flex;align-items:center;gap:12px;flex:none;min-height:48px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;appearance:none}.ars-nav-submenu__item--grouped{padding-inline-start:var(--ars-navigation-menu-group-indent, 24px)}.ars-nav-submenu__item:hover{background:color-mix(in srgb,currentColor 8%,transparent)}.ars-nav-submenu__item:focus-visible{outline:3px solid var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));outline-offset:-3px}.ars-nav-submenu__item--selected .ars-nav-submenu__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}.ars-nav-submenu__item--selected{background:var(--_indicator);color:var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c))}.ars-nav-submenu__item--selected:where(:hover,:focus-visible){background:color-mix(in srgb,var(--_state) 8%,var(--_indicator))}.ars-nav-submenu__item:disabled,.ars-nav-submenu__item[aria-disabled=true]{opacity:.38;pointer-events:none}.ars-nav-submenu__heading{padding:12px 12px 4px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;opacity:.7}.ars-nav-submenu__heading:first-child{padding-top:4px}.ars-nav-submenu__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--ars-navigation-label-lines, 2);line-clamp:var(--ars-navigation-label-lines, 2);flex:1 1 auto;min-width:0;padding-block:8px;font-size:14px;line-height:var(--ars-navigation-label-line-height, 18px);font-weight:500;letter-spacing:.1px;white-space:normal;overflow-wrap:anywhere;overflow:hidden}.ars-nav-submenu__trailing{flex:none;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;opacity:.8}@media(prefers-reduced-motion:reduce){:host{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}:host([data-indicator=wide]) .ars-nav__item:before,:host([data-indicator=compact]) .ars-nav__icon-box:before{transform:none}.ars-nav-submenu{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}}@media(forced-colors:active){:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before,:host([data-indicator=wide]) .ars-nav__item--selected:before{background:Highlight;forced-color-adjust:none}.ars-nav__item:focus-visible{outline:3px solid CanvasText}}\n"] }]
1205
- }], ctorParameters: () => [], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], autoVariants: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoVariants", required: false }] }], selectedId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedId", required: false }] }, { type: i0.Output, args: ["selectedIdChange"] }], expandedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedIds", required: false }] }, { type: i0.Output, args: ["expandedIdsChange"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], labelVisibility: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelVisibility", required: false }] }], itemLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemLayout", required: false }] }], childIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "childIcons", required: false }] }], dense: [{ type: i0.Input, args: [{ isSignal: true, alias: "dense", required: false }] }], alignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignment", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], headline: [{ type: i0.Input, args: [{ isSignal: true, alias: "headline", required: false }] }], showMenuButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMenuButton", required: false }] }], menuIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuIcon", required: false }] }], expandIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandIcon", required: false }] }], overflowMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflowMode", required: false }] }], overflowIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflowIcon", required: false }] }], overflowLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "overflowLabel", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], menuAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuAriaLabel", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], scrim: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrim", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], elevated: [{ type: i0.Input, args: [{ isSignal: true, alias: "elevated", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], routerSync: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerSync", required: false }] }], relativeTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "relativeTo", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], railWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "railWidth", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], itemSelected: [{ type: i0.Output, args: ["itemSelected"] }], menuClick: [{ type: i0.Output, args: ["menuClick"] }], itemElements: [{ type: i0.ViewChildren, args: ['navItem', { isSignal: true }] }], panelElements: [{ type: i0.ViewChildren, args: ['panelItem', { isSignal: true }] }] } });
1206
-
1207
- /*
1208
- * Public API Surface of @arsedizioni/ars-utils/ui.navigation
1209
- */
1210
-
1211
- /**
1212
- * Generated bundle index. Do not edit.
1213
- */
1214
-
33
+ var NavigationBarComponent = class NavigationBarComponent {
34
+ constructor() {
35
+ this.media = inject(MediaObserver);
36
+ this.themeService = inject(ThemeService, { optional: true });
37
+ this.router = inject(Router, { optional: true });
38
+ this.directionality = inject(Directionality, { optional: true });
39
+ this.hostRef = inject(ElementRef);
40
+ this.injector = inject(Injector);
41
+ this.destroyRef = inject(DestroyRef);
42
+ this.items = input([], ...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
43
+ this.sections = input([], ...ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []);
44
+ this.variant = input("auto", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
45
+ this.autoVariants = input({}, ...ngDevMode ? [{ debugName: "autoVariants" }] : /* istanbul ignore next */ []);
46
+ this.selectedId = model(void 0, ...ngDevMode ? [{ debugName: "selectedId" }] : /* istanbul ignore next */ []);
47
+ this.expandedIds = model(void 0, ...ngDevMode ? [{ debugName: "expandedIds" }] : /* istanbul ignore next */ []);
48
+ this.open = model(false, ...ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []);
49
+ this.labelVisibility = input("auto", ...ngDevMode ? [{ debugName: "labelVisibility" }] : /* istanbul ignore next */ []);
50
+ this.itemLayout = input("auto", ...ngDevMode ? [{ debugName: "itemLayout" }] : /* istanbul ignore next */ []);
51
+ this.childIcons = input(false, {
52
+ ...ngDevMode ? { debugName: "childIcons" } : /* istanbul ignore next */ {},
53
+ transform: booleanAttribute
54
+ });
55
+ this.dense = input(false, {
56
+ ...ngDevMode ? { debugName: "dense" } : /* istanbul ignore next */ {},
57
+ transform: booleanAttribute
58
+ });
59
+ this.alignment = input("top", ...ngDevMode ? [{ debugName: "alignment" }] : /* istanbul ignore next */ []);
60
+ this.position = input("start", ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
61
+ this.headline = input(void 0, ...ngDevMode ? [{ debugName: "headline" }] : /* istanbul ignore next */ []);
62
+ this.showMenuButton = input(false, {
63
+ ...ngDevMode ? { debugName: "showMenuButton" } : /* istanbul ignore next */ {},
64
+ transform: booleanAttribute
65
+ });
66
+ this.menuIcon = input("menu", ...ngDevMode ? [{ debugName: "menuIcon" }] : /* istanbul ignore next */ []);
67
+ this.expandIcon = input("expand_more", ...ngDevMode ? [{ debugName: "expandIcon" }] : /* istanbul ignore next */ []);
68
+ this.overflowMode = input("bar", ...ngDevMode ? [{ debugName: "overflowMode" }] : /* istanbul ignore next */ []);
69
+ this.overflowIcon = input("more_vert", ...ngDevMode ? [{ debugName: "overflowIcon" }] : /* istanbul ignore next */ []);
70
+ this.overflowLabel = input("More", ...ngDevMode ? [{ debugName: "overflowLabel" }] : /* istanbul ignore next */ []);
71
+ this.maxVisibleItems = input(0, {
72
+ ...ngDevMode ? { debugName: "maxVisibleItems" } : /* istanbul ignore next */ {},
73
+ transform: numberAttribute
74
+ });
75
+ this.menuAriaLabel = input("Menu", ...ngDevMode ? [{ debugName: "menuAriaLabel" }] : /* istanbul ignore next */ []);
76
+ this.ariaLabel = input("Navigation", ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
77
+ this.scrim = input(true, {
78
+ ...ngDevMode ? { debugName: "scrim" } : /* istanbul ignore next */ {},
79
+ transform: booleanAttribute
80
+ });
81
+ this.closeOnSelect = input(true, {
82
+ ...ngDevMode ? { debugName: "closeOnSelect" } : /* istanbul ignore next */ {},
83
+ transform: booleanAttribute
84
+ });
85
+ this.elevated = input(true, {
86
+ ...ngDevMode ? { debugName: "elevated" } : /* istanbul ignore next */ {},
87
+ transform: booleanAttribute
88
+ });
89
+ this.bordered = input(false, {
90
+ ...ngDevMode ? { debugName: "bordered" } : /* istanbul ignore next */ {},
91
+ transform: booleanAttribute
92
+ });
93
+ this.tooltips = input(true, {
94
+ ...ngDevMode ? { debugName: "tooltips" } : /* istanbul ignore next */ {},
95
+ transform: booleanAttribute
96
+ });
97
+ this.routerSync = input(true, {
98
+ ...ngDevMode ? { debugName: "routerSync" } : /* istanbul ignore next */ {},
99
+ transform: booleanAttribute
100
+ });
101
+ this.relativeTo = input(void 0, ...ngDevMode ? [{ debugName: "relativeTo" }] : /* istanbul ignore next */ []);
102
+ this.width = input(0, {
103
+ ...ngDevMode ? { debugName: "width" } : /* istanbul ignore next */ {},
104
+ transform: numberAttribute
105
+ });
106
+ this.railWidth = input(0, {
107
+ ...ngDevMode ? { debugName: "railWidth" } : /* istanbul ignore next */ {},
108
+ transform: numberAttribute
109
+ });
110
+ this.minWidth = input(0, {
111
+ ...ngDevMode ? { debugName: "minWidth" } : /* istanbul ignore next */ {},
112
+ transform: numberAttribute
113
+ });
114
+ this.maxWidth = input(0, {
115
+ ...ngDevMode ? { debugName: "maxWidth" } : /* istanbul ignore next */ {},
116
+ transform: numberAttribute
117
+ });
118
+ this.hidden = input(false, {
119
+ ...ngDevMode ? { debugName: "hidden" } : /* istanbul ignore next */ {},
120
+ transform: booleanAttribute
121
+ });
122
+ this.itemSelected = output();
123
+ this.menuClick = output();
124
+ this.itemElements = viewChildren("navItem", ...ngDevMode ? [{ debugName: "itemElements" }] : /* istanbul ignore next */ []);
125
+ this.panelElements = viewChildren("panelItem", ...ngDevMode ? [{ debugName: "panelElements" }] : /* istanbul ignore next */ []);
126
+ this.routerUrl = signal(void 0, ...ngDevMode ? [{ debugName: "routerUrl" }] : /* istanbul ignore next */ []);
127
+ this.themeChanged = toSignal(this.themeService?.changed ?? EMPTY, { initialValue: void 0 });
128
+ this.isDark = computed(() => {
129
+ this.themeChanged();
130
+ return this.themeService?.getTheme() === "dark";
131
+ }, ...ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []);
132
+ this.popupId = signal(void 0, ...ngDevMode ? [{ debugName: "popupId" }] : /* istanbul ignore next */ []);
133
+ this.popupItem = computed(() => {
134
+ const id = this.popupId();
135
+ if (id === void 0) return void 0;
136
+ const find = (list) => {
137
+ for (const rendered of list) {
138
+ if (rendered.item.id === id) return rendered;
139
+ const nested = find(rendered.children);
140
+ if (nested) return nested;
141
+ }
142
+ };
143
+ for (const group of this.visibleGroups()) for (const section of group.sections) {
144
+ const hit = find(section.items);
145
+ if (hit) return hit;
146
+ }
147
+ }, ...ngDevMode ? [{ debugName: "popupItem" }] : /* istanbul ignore next */ []);
148
+ this.popupAnchor = signal(void 0, ...ngDevMode ? [{ debugName: "popupAnchor" }] : /* istanbul ignore next */ []);
149
+ this.resolvedSections = computed(() => {
150
+ const sections = this.sections();
151
+ if (sections.length > 0) return sections;
152
+ return [{
153
+ id: "__default",
154
+ items: this.items()
155
+ }];
156
+ }, ...ngDevMode ? [{ debugName: "resolvedSections" }] : /* istanbul ignore next */ []);
157
+ this.allItems = computed(() => {
158
+ const result = [];
159
+ const walk = (list) => {
160
+ for (const item of list) {
161
+ result.push(item);
162
+ if (item.children?.length) walk(item.children);
163
+ }
164
+ };
165
+ for (const section of this.resolvedSections()) walk(section.items);
166
+ return result;
167
+ }, ...ngDevMode ? [{ debugName: "allItems" }] : /* istanbul ignore next */ []);
168
+ this.parentOf = computed(() => {
169
+ const result = /* @__PURE__ */ new Map();
170
+ const walk = (list, parentId) => {
171
+ for (const item of list) {
172
+ if (parentId !== void 0) result.set(item.id, parentId);
173
+ if (item.children?.length) walk(item.children, item.id);
174
+ }
175
+ };
176
+ for (const section of this.resolvedSections()) walk(section.items);
177
+ return result;
178
+ }, ...ngDevMode ? [{ debugName: "parentOf" }] : /* istanbul ignore next */ []);
179
+ this.resolvedVariant = computed(() => {
180
+ const variant = this.variant();
181
+ if (variant !== "auto") return variant;
182
+ const alias = this.media.currentBp();
183
+ return this.autoVariants()[alias] ?? DEFAULT_NAVIGATION_AUTO_VARIANTS[alias];
184
+ }, ...ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []);
185
+ this.isExpanded = computed(() => EXPANDED_NAVIGATION_VARIANTS.includes(this.resolvedVariant()), ...ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []);
186
+ this.isModal = computed(() => this.resolvedVariant() === "modal", ...ngDevMode ? [{ debugName: "isModal" }] : /* istanbul ignore next */ []);
187
+ this.isOverlayOpen = computed(() => this.isModal() && this.open(), ...ngDevMode ? [{ debugName: "isOverlayOpen" }] : /* istanbul ignore next */ []);
188
+ this.isHidden = computed(() => this.hidden() || this.isModal() && !this.open(), ...ngDevMode ? [{ debugName: "isHidden" }] : /* istanbul ignore next */ []);
189
+ this.resolvedLayout = computed(() => {
190
+ if (this.isExpanded()) return "horizontal";
191
+ const layout = this.itemLayout();
192
+ if (layout !== "auto") return layout;
193
+ return this.resolvedVariant() === "bar" && this.media.currentBp() !== "xs" ? "horizontal" : "vertical";
194
+ }, ...ngDevMode ? [{ debugName: "resolvedLayout" }] : /* istanbul ignore next */ []);
195
+ this.resolvedLabelVisibility = computed(() => {
196
+ if (this.isExpanded()) return "labeled";
197
+ const visibility = this.labelVisibility();
198
+ return visibility === "auto" ? "labeled" : visibility;
199
+ }, ...ngDevMode ? [{ debugName: "resolvedLabelVisibility" }] : /* istanbul ignore next */ []);
200
+ this.showsHeader = computed(() => this.resolvedVariant() !== "bar" && (this.showMenuButton() || this.isExpanded() && !!this.headline()), ...ngDevMode ? [{ debugName: "showsHeader" }] : /* istanbul ignore next */ []);
201
+ this.indicatorMode = computed(() => this.isExpanded() || this.resolvedLayout() === "horizontal" ? "wide" : "compact", ...ngDevMode ? [{ debugName: "indicatorMode" }] : /* istanbul ignore next */ []);
202
+ this.tooltipPosition = computed(() => {
203
+ if (this.resolvedVariant() === "bar") return "above";
204
+ return this.position() === "end" ? "before" : "after";
205
+ }, ...ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []);
206
+ this.widthStyle = computed(() => {
207
+ const width = this.width();
208
+ return width > 0 ? `${width}px` : void 0;
209
+ }, ...ngDevMode ? [{ debugName: "widthStyle" }] : /* istanbul ignore next */ []);
210
+ this.railWidthStyle = computed(() => {
211
+ const width = this.railWidth();
212
+ return width > 0 ? `${width}px` : void 0;
213
+ }, ...ngDevMode ? [{ debugName: "railWidthStyle" }] : /* istanbul ignore next */ []);
214
+ this.minWidthStyle = computed(() => {
215
+ const width = this.minWidth();
216
+ return width > 0 ? `${width}px` : void 0;
217
+ }, ...ngDevMode ? [{ debugName: "minWidthStyle" }] : /* istanbul ignore next */ []);
218
+ this.maxWidthStyle = computed(() => {
219
+ const width = this.maxWidth();
220
+ return width > 0 ? `${width}px` : void 0;
221
+ }, ...ngDevMode ? [{ debugName: "maxWidthStyle" }] : /* istanbul ignore next */ []);
222
+ this.hrefs = computed(() => {
223
+ const result = /* @__PURE__ */ new Map();
224
+ const router = this.router;
225
+ const relativeTo = this.relativeTo();
226
+ for (const item of this.allItems()) {
227
+ if (item.href) {
228
+ result.set(item.id, item.href);
229
+ continue;
230
+ }
231
+ if (item.route !== void 0 && router) {
232
+ const commands = Array.isArray(item.route) ? [...item.route] : [item.route];
233
+ try {
234
+ const tree = router.createUrlTree(commands, {
235
+ queryParams: item.queryParams,
236
+ fragment: item.fragment,
237
+ relativeTo
238
+ });
239
+ result.set(item.id, router.serializeUrl(tree));
240
+ } catch {}
241
+ }
242
+ }
243
+ return result;
244
+ }, ...ngDevMode ? [{ debugName: "hrefs" }] : /* istanbul ignore next */ []);
245
+ this.renderGroups = computed(() => {
246
+ const hrefs = this.hrefs();
247
+ const dark = this.isDark();
248
+ const counter = { value: 0 };
249
+ const top = [];
250
+ const bottom = [];
251
+ for (const section of this.resolvedSections()) {
252
+ const topItems = [];
253
+ const bottomItems = [];
254
+ for (const item of section.items) {
255
+ const rendered = NavigationBarComponent.buildRenderItem(item, section, void 0, 0, counter, hrefs, dark);
256
+ (item.align === "bottom" ? bottomItems : topItems).push(rendered);
257
+ }
258
+ if (topItems.length > 0) top.push({
259
+ section,
260
+ items: topItems
261
+ });
262
+ if (bottomItems.length > 0) bottom.push({
263
+ section,
264
+ items: bottomItems
265
+ });
266
+ }
267
+ const groups = [];
268
+ if (top.length > 0) groups.push({
269
+ align: "top",
270
+ sections: top
271
+ });
272
+ if (bottom.length > 0) groups.push({
273
+ align: "bottom",
274
+ sections: bottom
275
+ });
276
+ return groups;
277
+ }, ...ngDevMode ? [{ debugName: "renderGroups" }] : /* istanbul ignore next */ []);
278
+ this.routerActiveId = computed(() => {
279
+ if (!this.routerSync()) return void 0;
280
+ const url = this.routerUrl();
281
+ if (!url) return void 0;
282
+ const path = NavigationBarComponent.pathOf(url);
283
+ const hrefs = this.hrefs();
284
+ let best;
285
+ let bestLength = -1;
286
+ for (const item of this.allItems()) {
287
+ if (item.href || item.route === void 0) continue;
288
+ const href = hrefs.get(item.id);
289
+ if (!href) continue;
290
+ const target = NavigationBarComponent.pathOf(href);
291
+ if ((item.exact ? path === target : path === target || path.startsWith(target.endsWith("/") ? target : `${target}/`)) && target.length > bestLength) {
292
+ best = item.id;
293
+ bestLength = target.length;
294
+ }
295
+ }
296
+ return best;
297
+ }, ...ngDevMode ? [{ debugName: "routerActiveId" }] : /* istanbul ignore next */ []);
298
+ this.activeId = computed(() => this.routerActiveId() ?? this.selectedId(), ...ngDevMode ? [{ debugName: "activeId" }] : /* istanbul ignore next */ []);
299
+ this.defaultExpandedIds = computed(() => {
300
+ const result = /* @__PURE__ */ new Set();
301
+ for (const item of this.allItems()) if (item.expanded) result.add(item.id);
302
+ const parents = this.parentOf();
303
+ const visited = /* @__PURE__ */ new Set();
304
+ let current = this.activeId();
305
+ while (current !== void 0 && !visited.has(current)) {
306
+ visited.add(current);
307
+ const parent = parents.get(current);
308
+ if (parent === void 0) break;
309
+ result.add(parent);
310
+ current = parent;
311
+ }
312
+ return [...result];
313
+ }, ...ngDevMode ? [{ debugName: "defaultExpandedIds" }] : /* istanbul ignore next */ []);
314
+ this.expandedSet = computed(() => new Set(this.expandedIds() ?? this.defaultExpandedIds()), ...ngDevMode ? [{ debugName: "expandedSet" }] : /* istanbul ignore next */ []);
315
+ this.overflowApplies = computed(() => {
316
+ const mode = this.overflowMode();
317
+ if (mode === "never") return false;
318
+ const variant = this.resolvedVariant();
319
+ return mode === "bar" ? variant === "bar" : variant === "bar" || variant === "rail";
320
+ }, ...ngDevMode ? [{ debugName: "overflowApplies" }] : /* istanbul ignore next */ []);
321
+ this.visibleGroups = computed(() => {
322
+ const inline = this.isExpanded();
323
+ const open = this.expandedSet();
324
+ const overflow = this.overflowApplies();
325
+ const max = this.maxVisibleItems();
326
+ let groups = this.resolvedVariant() === "bar" ? NavigationBarComponent.mergeGroups(this.renderGroups()) : this.renderGroups();
327
+ if (overflow || max > 0) groups = groups.map((group) => this.applyOverflow(group, overflow, max));
328
+ if (!inline) return groups;
329
+ const flatten = (list) => {
330
+ let expandedAny = false;
331
+ const result = [];
332
+ for (const rendered of list) {
333
+ result.push(rendered);
334
+ if (rendered.hasChildren && open.has(rendered.item.id)) {
335
+ expandedAny = true;
336
+ result.push(...flatten(rendered.children));
337
+ }
338
+ }
339
+ return expandedAny ? result : list;
340
+ };
341
+ return groups.map((group) => ({
342
+ align: group.align,
343
+ sections: group.sections.map((section) => ({
344
+ section: section.section,
345
+ items: flatten(section.items)
346
+ }))
347
+ }));
348
+ }, ...ngDevMode ? [{ debugName: "visibleGroups" }] : /* istanbul ignore next */ []);
349
+ this.highlightedIds = computed(() => {
350
+ const active = this.activeId();
351
+ const result = /* @__PURE__ */ new Set();
352
+ if (active === void 0) return result;
353
+ for (const group of this.visibleGroups()) for (const section of group.sections) for (const item of section.items) if (item.item.id === active) {
354
+ result.add(active);
355
+ return result;
356
+ }
357
+ return result;
358
+ }, ...ngDevMode ? [{ debugName: "highlightedIds" }] : /* istanbul ignore next */ []);
359
+ this.ancestorIds = computed(() => {
360
+ const active = this.activeId();
361
+ const result = /* @__PURE__ */ new Set();
362
+ if (active === void 0) return result;
363
+ const walk = (items, trail) => {
364
+ for (const item of items) {
365
+ if (item.item.id === active) {
366
+ for (const id of trail) result.add(id);
367
+ return true;
368
+ }
369
+ trail.push(item.item.id);
370
+ const found = walk(item.children, trail);
371
+ trail.pop();
372
+ if (found) return true;
373
+ }
374
+ return false;
375
+ };
376
+ for (const group of this.visibleGroups()) for (const section of group.sections) if (walk(section.items.filter((item) => item.depth === 0), [])) return result;
377
+ return result;
378
+ }, ...ngDevMode ? [{ debugName: "ancestorIds" }] : /* istanbul ignore next */ []);
379
+ this.popupEntries = computed(() => {
380
+ const parent = this.popupItem();
381
+ if (!parent) return [];
382
+ const result = [];
383
+ for (const child of parent.children) if (child.hasChildren) {
384
+ result.push({
385
+ key: `${child.item.id}__heading`,
386
+ label: child.item.label
387
+ });
388
+ for (const grandChild of child.children) result.push({
389
+ key: grandChild.item.id,
390
+ render: grandChild,
391
+ grouped: true
392
+ });
393
+ } else result.push({
394
+ key: child.item.id,
395
+ render: child
396
+ });
397
+ return result;
398
+ }, ...ngDevMode ? [{ debugName: "popupEntries" }] : /* istanbul ignore next */ []);
399
+ this.isPopupOpen = computed(() => !this.isExpanded() && !!this.popupItem(), ...ngDevMode ? [{ debugName: "isPopupOpen" }] : /* istanbul ignore next */ []);
400
+ this.popupOrigin = computed(() => this.popupAnchor() ?? this.hostRef.nativeElement, ...ngDevMode ? [{ debugName: "popupOrigin" }] : /* istanbul ignore next */ []);
401
+ this.popupPositions = computed(() => {
402
+ if (this.resolvedVariant() === "bar") return [{
403
+ originX: "center",
404
+ originY: "top",
405
+ overlayX: "center",
406
+ overlayY: "bottom",
407
+ offsetY: -8
408
+ }, {
409
+ originX: "center",
410
+ originY: "bottom",
411
+ overlayX: "center",
412
+ overlayY: "top",
413
+ offsetY: 8
414
+ }];
415
+ if (this.position() === "end") return [{
416
+ originX: "start",
417
+ originY: "top",
418
+ overlayX: "end",
419
+ overlayY: "top",
420
+ offsetX: -8
421
+ }, {
422
+ originX: "start",
423
+ originY: "bottom",
424
+ overlayX: "end",
425
+ overlayY: "bottom",
426
+ offsetX: -8
427
+ }];
428
+ return [{
429
+ originX: "end",
430
+ originY: "top",
431
+ overlayX: "start",
432
+ overlayY: "top",
433
+ offsetX: 8
434
+ }, {
435
+ originX: "end",
436
+ originY: "bottom",
437
+ overlayX: "start",
438
+ overlayY: "bottom",
439
+ offsetX: 8
440
+ }];
441
+ }, ...ngDevMode ? [{ debugName: "popupPositions" }] : /* istanbul ignore next */ []);
442
+ this.isRtl = computed(() => this.directionality?.value === "rtl", ...ngDevMode ? [{ debugName: "isRtl" }] : /* istanbul ignore next */ []);
443
+ const router = this.router;
444
+ if (router) {
445
+ this.routerUrl.set(router.url);
446
+ router.events.pipe(filter((e) => e instanceof NavigationEnd), map((e) => e.urlAfterRedirects), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef)).subscribe((url) => this.routerUrl.set(url));
447
+ }
448
+ }
449
+ select(render, event) {
450
+ const item = render.item;
451
+ if (item.disabled) {
452
+ event.preventDefault();
453
+ return;
454
+ }
455
+ if (render.hasChildren) {
456
+ event.preventDefault();
457
+ if (this.isExpanded()) this.toggleExpanded(item.id);
458
+ else this.openPopup(render, event);
459
+ return;
460
+ }
461
+ const mouse = event;
462
+ if (render.href && (mouse.ctrlKey || mouse.metaKey || mouse.shiftKey || mouse.button === 1)) return;
463
+ if (render.routed && render.href) {
464
+ event.preventDefault();
465
+ this.router?.navigateByUrl(render.href);
466
+ }
467
+ this.selectedId.set(item.id);
468
+ this.itemSelected.emit({
469
+ item,
470
+ section: render.section,
471
+ parent: render.parent,
472
+ index: render.index
473
+ });
474
+ this.closePopup();
475
+ if (this.isModal() && this.closeOnSelect()) this.open.set(false);
476
+ }
477
+ onMenuClick() {
478
+ this.menuClick.emit();
479
+ }
480
+ onScrimClick() {
481
+ this.open.set(false);
482
+ }
483
+ onKeydown(event) {
484
+ if (event.key === "Escape") {
485
+ if (this.popupItem()) {
486
+ event.preventDefault();
487
+ this.closePopup();
488
+ return;
489
+ }
490
+ if (this.isOverlayOpen()) {
491
+ event.preventDefault();
492
+ this.open.set(false);
493
+ return;
494
+ }
495
+ }
496
+ const inPanel = event.currentTarget?.classList.contains("ars-nav-submenu") === true;
497
+ const horizontal = !inPanel && this.resolvedVariant() === "bar";
498
+ const forward = horizontal ? this.isRtl() ? "ArrowLeft" : "ArrowRight" : "ArrowDown";
499
+ const backward = horizontal ? this.isRtl() ? "ArrowRight" : "ArrowLeft" : "ArrowUp";
500
+ let delta = 0;
501
+ if (event.key === forward) delta = 1;
502
+ else if (event.key === backward) delta = -1;
503
+ else if (event.key !== "Home" && event.key !== "End") return;
504
+ const elements = inPanel ? this.panelElements() : this.itemElements();
505
+ if (elements.length === 0) return;
506
+ const current = elements.findIndex((ref) => ref.nativeElement === event.target);
507
+ let next;
508
+ if (event.key === "Home") next = 0;
509
+ else if (event.key === "End") next = elements.length - 1;
510
+ else if (current < 0) next = 0;
511
+ else next = (current + delta + elements.length) % elements.length;
512
+ event.preventDefault();
513
+ elements[next]?.nativeElement.focus();
514
+ }
515
+ toggleExpanded(id) {
516
+ const next = new Set(this.expandedSet());
517
+ if (next.has(id)) next.delete(id);
518
+ else {
519
+ next.add(id);
520
+ afterNextRender(() => this.revealBranch(id), { injector: this.injector });
521
+ }
522
+ this.expandedIds.set([...next]);
523
+ }
524
+ openPopup(render, event) {
525
+ const anchor = event.currentTarget;
526
+ this.popupAnchor.set(anchor ?? void 0);
527
+ this.popupId.set(this.popupItem()?.item.id === render.item.id ? void 0 : render.item.id);
528
+ }
529
+ closePopup() {
530
+ this.popupId.set(void 0);
531
+ this.popupAnchor.set(void 0);
532
+ }
533
+ openDrawer() {
534
+ this.open.set(true);
535
+ }
536
+ closeDrawer() {
537
+ this.open.set(false);
538
+ }
539
+ toggleDrawer() {
540
+ this.open.update((open) => !open);
541
+ }
542
+ focusItem(id) {
543
+ for (const ref of this.itemElements()) if (ref.nativeElement.dataset["navId"] === id) {
544
+ ref.nativeElement.focus();
545
+ return true;
546
+ }
547
+ return false;
548
+ }
549
+ revealBranch(id) {
550
+ if (!this.isExpanded()) return;
551
+ const items = this.itemElements();
552
+ const index = items.findIndex((ref) => ref.nativeElement.dataset["navId"] === id);
553
+ if (index < 0) return;
554
+ const parent = items[index].nativeElement;
555
+ const list = parent.closest(".ars-nav__items");
556
+ if (!list) return;
557
+ const depth = Number(parent.dataset["depth"] ?? 0);
558
+ let last = parent;
559
+ for (let i = index + 1; i < items.length; i++) {
560
+ const row = items[i].nativeElement;
561
+ if (row.closest(".ars-nav__items") !== list) break;
562
+ if (Number(row.dataset["depth"] ?? 0) <= depth) break;
563
+ last = row;
564
+ }
565
+ if (last === parent) return;
566
+ const view = list.clientHeight;
567
+ if (view === 0 || list.scrollHeight <= view) return;
568
+ const origin = list.getBoundingClientRect().top + list.clientTop - list.scrollTop;
569
+ const top = parent.getBoundingClientRect().top - origin;
570
+ const needed = last.getBoundingClientRect().bottom - origin + BRANCH_SCROLL_PADDING - view;
571
+ if (needed <= list.scrollTop) return;
572
+ const target = Math.max(0, Math.min(needed, top - BRANCH_SCROLL_PADDING));
573
+ if (target <= list.scrollTop) return;
574
+ list.scrollTo({
575
+ top: target,
576
+ behavior: prefersReducedMotion() ? "auto" : "smooth"
577
+ });
578
+ }
579
+ applyOverflow(group, overflow, max) {
580
+ const kept = [];
581
+ const overflowed = [];
582
+ group.sections.forEach((section, sectionIndex) => {
583
+ for (const render of section.items) if (overflow && render.item.hideWhenCompact) overflowed.push(render);
584
+ else kept.push({
585
+ sectionIndex,
586
+ render
587
+ });
588
+ });
589
+ const slots = kept.length + (overflowed.length > 0 ? 1 : 0);
590
+ if (max > 0 && slots > max) {
591
+ const moved = kept.splice(Math.max(1, max - 1));
592
+ for (const entry of moved) overflowed.push(entry.render);
593
+ }
594
+ if (overflowed.length === 0) return group;
595
+ const sections = group.sections.map((section, sectionIndex) => ({
596
+ section: section.section,
597
+ items: kept.filter((entry) => entry.sectionIndex === sectionIndex).map((entry) => entry.render)
598
+ }));
599
+ const last = sections[sections.length - 1];
600
+ sections[sections.length - 1] = {
601
+ section: last.section,
602
+ items: [...last.items, this.buildOverflowItem(overflowed)]
603
+ };
604
+ return {
605
+ align: group.align,
606
+ sections: sections.filter((section) => section.items.length > 0)
607
+ };
608
+ }
609
+ buildOverflowItem(children) {
610
+ const label = this.overflowLabel();
611
+ const icon = this.overflowIcon();
612
+ return {
613
+ item: {
614
+ id: NAVIGATION_OVERFLOW_ID,
615
+ label,
616
+ icon
617
+ },
618
+ index: -1,
619
+ depth: 0,
620
+ routed: false,
621
+ iconOff: icon,
622
+ iconOn: icon,
623
+ badgeText: "",
624
+ hasBadge: false,
625
+ iconOnly: true,
626
+ hasChildren: true,
627
+ children,
628
+ ariaLabel: label,
629
+ tooltip: label
630
+ };
631
+ }
632
+ static mergeGroups(groups) {
633
+ if (groups.length < 2) return groups;
634
+ const order = [];
635
+ const byId = /* @__PURE__ */ new Map();
636
+ for (const group of groups) for (const section of group.sections) {
637
+ const existing = byId.get(section.section.id);
638
+ if (existing) byId.set(section.section.id, {
639
+ section: existing.section,
640
+ items: [...existing.items, ...section.items]
641
+ });
642
+ else {
643
+ order.push(section.section.id);
644
+ byId.set(section.section.id, section);
645
+ }
646
+ }
647
+ return [{
648
+ align: "top",
649
+ sections: order.map((id) => byId.get(id))
650
+ }];
651
+ }
652
+ static buildRenderItem(item, section, parent, depth, counter, hrefs, dark) {
653
+ const href = hrefs.get(item.id);
654
+ const svgOff = item.svgIcon;
655
+ const svgOn = item.activeSvgIcon ?? item.svgIcon;
656
+ const spriteStyle = NavigationBarComponent.buildSpriteStyle(item, dark);
657
+ const imageOff = spriteStyle || svgOff ? void 0 : item.imageIcon;
658
+ const imageOn = spriteStyle || svgOn ? void 0 : item.activeImageIcon ?? item.imageIcon;
659
+ const index = counter.value++;
660
+ const children = (item.children ?? []).map((child) => NavigationBarComponent.buildRenderItem(child, section, item, depth + 1, counter, hrefs, dark));
661
+ return {
662
+ item,
663
+ section: section.id === "__default" ? void 0 : section,
664
+ parent,
665
+ index,
666
+ depth,
667
+ href,
668
+ routed: !!href && !item.href,
669
+ iconOff: svgOff || spriteStyle || imageOff ? void 0 : item.icon,
670
+ iconOn: svgOn || spriteStyle || imageOn ? void 0 : item.activeIcon ?? item.icon,
671
+ svgOff,
672
+ svgOn,
673
+ imageOff,
674
+ imageOn,
675
+ spriteStyle,
676
+ badgeText: NavigationBarComponent.formatBadge(item),
677
+ hasBadge: !!item.badge,
678
+ iconOnly: false,
679
+ hasChildren: children.length > 0,
680
+ children,
681
+ ariaLabel: item.ariaLabel ?? item.label,
682
+ tooltip: item.tooltip ?? item.label
683
+ };
684
+ }
685
+ static buildSpriteStyle(item, dark) {
686
+ const sprite = item.sprite;
687
+ if (!sprite) return void 0;
688
+ const light = sprite;
689
+ const frames = dark && sprite.dark ? {
690
+ ...light,
691
+ ...sprite.dark
692
+ } : light;
693
+ const normal = frames.normal ?? 0;
694
+ const hover = frames.hover ?? normal;
695
+ const active = frames.active ?? hover;
696
+ const disabled = frames.disabled ?? normal;
697
+ const source = sprite.size ?? SPRITE_DEFAULT_SIZE;
698
+ const size = sprite.renderSize ?? source;
699
+ const count = NavigationBarComponent.spriteFrameCount(sprite);
700
+ const vertical = (sprite.direction ?? "vertical") === "vertical";
701
+ return {
702
+ "--sp-url": `url("${sprite.url}")`,
703
+ "--sp-size": `${size}px`,
704
+ "--sp-sheet-x": vertical ? `${size}px` : `${size * count}px`,
705
+ "--sp-sheet-y": vertical ? `${size * count}px` : `${size}px`,
706
+ "--sp-step-x": vertical ? "0px" : `${-size}px`,
707
+ "--sp-step-y": vertical ? `${-size}px` : "0px",
708
+ "--sp-normal": `${normal}`,
709
+ "--sp-hover": `${hover}`,
710
+ "--sp-active": `${active}`,
711
+ "--sp-disabled": `${disabled}`
712
+ };
713
+ }
714
+ static spriteFrameCount(sprite) {
715
+ if (sprite.frames !== void 0 && sprite.frames > 0) return sprite.frames;
716
+ const indices = [
717
+ sprite.normal,
718
+ sprite.hover,
719
+ sprite.active,
720
+ sprite.disabled,
721
+ sprite.dark?.normal,
722
+ sprite.dark?.hover,
723
+ sprite.dark?.active,
724
+ sprite.dark?.disabled
725
+ ];
726
+ let highest = 0;
727
+ for (const index of indices) if (index !== void 0 && index > highest) highest = index;
728
+ return highest + 1;
729
+ }
730
+ static formatBadge(item) {
731
+ const badge = item.badge;
732
+ if (!badge || badge.value === void 0) return "";
733
+ if (typeof badge.value === "number") {
734
+ const max = badge.max ?? 999;
735
+ return badge.value > max ? `${max}+` : `${badge.value}`;
736
+ }
737
+ return badge.value;
738
+ }
739
+ static pathOf(url) {
740
+ return (url.split("#")[0] ?? "").split("?")[0] ?? "";
741
+ }
742
+ static {
743
+ this.ɵfac = i0.ɵɵngDeclareFactory({
744
+ minVersion: "12.0.0",
745
+ version: "22.2.1",
746
+ ngImport: i0,
747
+ type: NavigationBarComponent,
748
+ deps: [],
749
+ target: i0.ɵɵFactoryTarget.Component
750
+ });
751
+ }
752
+ static {
753
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
754
+ minVersion: "17.0.0",
755
+ version: "22.2.1",
756
+ type: NavigationBarComponent,
757
+ isStandalone: true,
758
+ selector: "navigation-bar",
759
+ inputs: {
760
+ items: {
761
+ classPropertyName: "items",
762
+ publicName: "items",
763
+ isSignal: true,
764
+ isRequired: false,
765
+ transformFunction: null
766
+ },
767
+ sections: {
768
+ classPropertyName: "sections",
769
+ publicName: "sections",
770
+ isSignal: true,
771
+ isRequired: false,
772
+ transformFunction: null
773
+ },
774
+ variant: {
775
+ classPropertyName: "variant",
776
+ publicName: "variant",
777
+ isSignal: true,
778
+ isRequired: false,
779
+ transformFunction: null
780
+ },
781
+ autoVariants: {
782
+ classPropertyName: "autoVariants",
783
+ publicName: "autoVariants",
784
+ isSignal: true,
785
+ isRequired: false,
786
+ transformFunction: null
787
+ },
788
+ selectedId: {
789
+ classPropertyName: "selectedId",
790
+ publicName: "selectedId",
791
+ isSignal: true,
792
+ isRequired: false,
793
+ transformFunction: null
794
+ },
795
+ expandedIds: {
796
+ classPropertyName: "expandedIds",
797
+ publicName: "expandedIds",
798
+ isSignal: true,
799
+ isRequired: false,
800
+ transformFunction: null
801
+ },
802
+ open: {
803
+ classPropertyName: "open",
804
+ publicName: "open",
805
+ isSignal: true,
806
+ isRequired: false,
807
+ transformFunction: null
808
+ },
809
+ labelVisibility: {
810
+ classPropertyName: "labelVisibility",
811
+ publicName: "labelVisibility",
812
+ isSignal: true,
813
+ isRequired: false,
814
+ transformFunction: null
815
+ },
816
+ itemLayout: {
817
+ classPropertyName: "itemLayout",
818
+ publicName: "itemLayout",
819
+ isSignal: true,
820
+ isRequired: false,
821
+ transformFunction: null
822
+ },
823
+ childIcons: {
824
+ classPropertyName: "childIcons",
825
+ publicName: "childIcons",
826
+ isSignal: true,
827
+ isRequired: false,
828
+ transformFunction: null
829
+ },
830
+ dense: {
831
+ classPropertyName: "dense",
832
+ publicName: "dense",
833
+ isSignal: true,
834
+ isRequired: false,
835
+ transformFunction: null
836
+ },
837
+ alignment: {
838
+ classPropertyName: "alignment",
839
+ publicName: "alignment",
840
+ isSignal: true,
841
+ isRequired: false,
842
+ transformFunction: null
843
+ },
844
+ position: {
845
+ classPropertyName: "position",
846
+ publicName: "position",
847
+ isSignal: true,
848
+ isRequired: false,
849
+ transformFunction: null
850
+ },
851
+ headline: {
852
+ classPropertyName: "headline",
853
+ publicName: "headline",
854
+ isSignal: true,
855
+ isRequired: false,
856
+ transformFunction: null
857
+ },
858
+ showMenuButton: {
859
+ classPropertyName: "showMenuButton",
860
+ publicName: "showMenuButton",
861
+ isSignal: true,
862
+ isRequired: false,
863
+ transformFunction: null
864
+ },
865
+ menuIcon: {
866
+ classPropertyName: "menuIcon",
867
+ publicName: "menuIcon",
868
+ isSignal: true,
869
+ isRequired: false,
870
+ transformFunction: null
871
+ },
872
+ expandIcon: {
873
+ classPropertyName: "expandIcon",
874
+ publicName: "expandIcon",
875
+ isSignal: true,
876
+ isRequired: false,
877
+ transformFunction: null
878
+ },
879
+ overflowMode: {
880
+ classPropertyName: "overflowMode",
881
+ publicName: "overflowMode",
882
+ isSignal: true,
883
+ isRequired: false,
884
+ transformFunction: null
885
+ },
886
+ overflowIcon: {
887
+ classPropertyName: "overflowIcon",
888
+ publicName: "overflowIcon",
889
+ isSignal: true,
890
+ isRequired: false,
891
+ transformFunction: null
892
+ },
893
+ overflowLabel: {
894
+ classPropertyName: "overflowLabel",
895
+ publicName: "overflowLabel",
896
+ isSignal: true,
897
+ isRequired: false,
898
+ transformFunction: null
899
+ },
900
+ maxVisibleItems: {
901
+ classPropertyName: "maxVisibleItems",
902
+ publicName: "maxVisibleItems",
903
+ isSignal: true,
904
+ isRequired: false,
905
+ transformFunction: null
906
+ },
907
+ menuAriaLabel: {
908
+ classPropertyName: "menuAriaLabel",
909
+ publicName: "menuAriaLabel",
910
+ isSignal: true,
911
+ isRequired: false,
912
+ transformFunction: null
913
+ },
914
+ ariaLabel: {
915
+ classPropertyName: "ariaLabel",
916
+ publicName: "ariaLabel",
917
+ isSignal: true,
918
+ isRequired: false,
919
+ transformFunction: null
920
+ },
921
+ scrim: {
922
+ classPropertyName: "scrim",
923
+ publicName: "scrim",
924
+ isSignal: true,
925
+ isRequired: false,
926
+ transformFunction: null
927
+ },
928
+ closeOnSelect: {
929
+ classPropertyName: "closeOnSelect",
930
+ publicName: "closeOnSelect",
931
+ isSignal: true,
932
+ isRequired: false,
933
+ transformFunction: null
934
+ },
935
+ elevated: {
936
+ classPropertyName: "elevated",
937
+ publicName: "elevated",
938
+ isSignal: true,
939
+ isRequired: false,
940
+ transformFunction: null
941
+ },
942
+ bordered: {
943
+ classPropertyName: "bordered",
944
+ publicName: "bordered",
945
+ isSignal: true,
946
+ isRequired: false,
947
+ transformFunction: null
948
+ },
949
+ tooltips: {
950
+ classPropertyName: "tooltips",
951
+ publicName: "tooltips",
952
+ isSignal: true,
953
+ isRequired: false,
954
+ transformFunction: null
955
+ },
956
+ routerSync: {
957
+ classPropertyName: "routerSync",
958
+ publicName: "routerSync",
959
+ isSignal: true,
960
+ isRequired: false,
961
+ transformFunction: null
962
+ },
963
+ relativeTo: {
964
+ classPropertyName: "relativeTo",
965
+ publicName: "relativeTo",
966
+ isSignal: true,
967
+ isRequired: false,
968
+ transformFunction: null
969
+ },
970
+ width: {
971
+ classPropertyName: "width",
972
+ publicName: "width",
973
+ isSignal: true,
974
+ isRequired: false,
975
+ transformFunction: null
976
+ },
977
+ railWidth: {
978
+ classPropertyName: "railWidth",
979
+ publicName: "railWidth",
980
+ isSignal: true,
981
+ isRequired: false,
982
+ transformFunction: null
983
+ },
984
+ minWidth: {
985
+ classPropertyName: "minWidth",
986
+ publicName: "minWidth",
987
+ isSignal: true,
988
+ isRequired: false,
989
+ transformFunction: null
990
+ },
991
+ maxWidth: {
992
+ classPropertyName: "maxWidth",
993
+ publicName: "maxWidth",
994
+ isSignal: true,
995
+ isRequired: false,
996
+ transformFunction: null
997
+ },
998
+ hidden: {
999
+ classPropertyName: "hidden",
1000
+ publicName: "hidden",
1001
+ isSignal: true,
1002
+ isRequired: false,
1003
+ transformFunction: null
1004
+ }
1005
+ },
1006
+ outputs: {
1007
+ selectedId: "selectedIdChange",
1008
+ expandedIds: "expandedIdsChange",
1009
+ open: "openChange",
1010
+ itemSelected: "itemSelected",
1011
+ menuClick: "menuClick"
1012
+ },
1013
+ host: {
1014
+ properties: {
1015
+ "attr.data-variant": "resolvedVariant()",
1016
+ "attr.data-layout": "resolvedLayout()",
1017
+ "attr.data-align": "alignment()",
1018
+ "attr.data-position": "position()",
1019
+ "attr.data-labels": "resolvedLabelVisibility()",
1020
+ "attr.data-indicator": "indicatorMode()",
1021
+ "class.ars-navigation--open": "isOverlayOpen()",
1022
+ "class.ars-navigation--elevated": "elevated()",
1023
+ "class.ars-navigation--bordered": "bordered()",
1024
+ "class.ars-navigation--dense": "dense()",
1025
+ "class.ars-navigation--hidden": "isHidden()",
1026
+ "style.--ars-navigation-width": "widthStyle()",
1027
+ "style.--ars-navigation-rail-width": "railWidthStyle()",
1028
+ "style.--ars-navigation-min-width": "minWidthStyle()",
1029
+ "style.--ars-navigation-max-width": "maxWidthStyle()"
1030
+ },
1031
+ classAttribute: "ars-navigation"
1032
+ },
1033
+ viewQueries: [{
1034
+ propertyName: "itemElements",
1035
+ predicate: ["navItem"],
1036
+ descendants: true,
1037
+ isSignal: true
1038
+ }, {
1039
+ propertyName: "panelElements",
1040
+ predicate: ["panelItem"],
1041
+ descendants: true,
1042
+ isSignal: true
1043
+ }],
1044
+ ngImport: i0,
1045
+ template: "@if (isModal() && scrim()) {\n <div class=\"ars-nav__scrim\" aria-hidden=\"true\" (click)=\"onScrimClick()\"></div>\n}\n\n<nav class=\"ars-nav\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.role]=\"isModal() ? 'dialog' : undefined\"\n [attr.aria-modal]=\"isModal() ? 'true' : undefined\"\n [attr.inert]=\"isHidden() ? '' : undefined\"\n [cdkTrapFocus]=\"isOverlayOpen()\"\n [cdkTrapFocusAutoCapture]=\"isOverlayOpen()\"\n (keydown)=\"onKeydown($event)\">\n\n @let labels = resolvedLabelVisibility();\n @let stacked = resolvedLayout() === 'vertical';\n @let wide = isExpanded();\n @let active = activeId();\n @let highlighted = highlightedIds();\n @let ancestors = ancestorIds();\n @let openIds = expandedSet();\n @let popupOpenId = popupItem()?.item.id;\n\n @if (showsHeader()) {\n <div class=\"ars-nav__header\">\n @if (showMenuButton()) {\n <button type=\"button\"\n class=\"ars-nav__menu\"\n [attr.aria-label]=\"menuAriaLabel()\"\n (click)=\"onMenuClick()\">\n <mat-icon aria-hidden=\"true\">{{ menuIcon() }}</mat-icon>\n </button>\n }\n @if (wide) {\n @if (headline(); as headlineText) {\n <h2 class=\"ars-nav__headline\">{{ headlineText }}</h2>\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__leading\"><ng-content select=\"[navHeader]\" /></div>\n <div class=\"ars-nav__fab\"><ng-content select=\"[navFab]\" /></div>\n\n @for (group of visibleGroups(); track group.align) {\n <div class=\"ars-nav__items\" [class.ars-nav__items--bottom]=\"group.align === 'bottom'\">\n @for (block of group.sections; track block.section.id) {\n\n @if (wide && block.section.label) {\n <h3 class=\"ars-nav__section-headline\">{{ block.section.label }}</h3>\n }\n\n @for (r of block.items; track r.item.id) {\n @let current = r.item.id === active;\n <!-- Clicking a parent opens and closes its branch, or its floating panel, and\n never navigates. It can still BE the active destination, but only when it\n owns a route of its own (`r.href`): that is a page the user can reach, so\n the row is allowed to look selected. A parent without a route is never\n selected — where it used to stand in for a destination it hides it now\n carries `ancestor` instead: the trail, not the selection. -->\n @let ancestor = ancestors.has(r.item.id);\n <!-- Stacked layouts get the short form when the destination declares one, or\n no label at all on `'none'`; `tooltip` and `ariaLabel` stay on the full\n label either way, so the name is still one hover — or one screen reader —\n away. -->\n @let stackedLabelHidden = stacked && r.item.labelVertical === 'none';\n @let displayLabel = stacked ? (r.item.labelVertical ?? r.item.label) : r.item.label;\n @let selected = highlighted.has(r.item.id) && (!r.hasChildren || !!r.href);\n <!-- `stackedLabelHidden` counts as \"no label on screen\": that is what turns the\n tooltip back on, which is the only place the name is left to be read. -->\n @let labelVisible = !r.iconOnly && !stackedLabelHidden\n && (labels === 'labeled' || (labels === 'selected' && (selected || ancestor)));\n @let branchOpen = r.hasChildren && openIds.has(r.item.id);\n @let hideIcon = wide && r.depth > 0 && !childIcons();\n <!-- In the compact variants the children live in a floating panel, so an\n ancestor row IS how the active destination shows on screen: it takes the\n selected look whole, icon variant included, exactly like a destination\n without children. In the expanded ones the active row is visible on its\n own and the ancestor stays the quieter trail. -->\n @let activeLook = selected || (!wide && ancestor);\n @let svg = activeLook ? r.svgOn : r.svgOff;\n @let image = activeLook ? r.imageOn : r.imageOff;\n @let ligature = activeLook ? r.iconOn : r.iconOff;\n\n <!--\n The anchor and the button branches duplicate the inner markup on purpose:\n an `ng-template` + `ngTemplateOutlet` would allocate one extra embedded\n view per destination and lose the typed template context.\n -->\n @if (r.href && !r.hasChildren) {\n <a #navItem\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [attr.data-depth]=\"r.depth\"\n [attr.href]=\"r.item.disabled ? undefined : r.href\"\n [attr.target]=\"r.item.target\"\n [attr.rel]=\"r.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-disabled]=\"r.item.disabled ? 'true' : undefined\"\n [attr.tabindex]=\"r.item.disabled ? -1 : 0\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </a>\n } @else {\n <button #navItem\n type=\"button\"\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--ancestor]=\"ancestor\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [class.ars-nav__item--parent]=\"r.hasChildren\"\n [class.ars-nav__item--icon-only]=\"r.iconOnly\"\n [attr.data-depth]=\"r.depth\"\n [disabled]=\"!!r.item.disabled\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-expanded]=\"r.hasChildren ? (wide ? branchOpen : popupOpenId === r.item.id) : undefined\"\n [attr.aria-haspopup]=\"r.hasChildren && !wide ? 'menu' : undefined\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n @if (r.hasChildren && wide) {\n <mat-icon class=\"ars-nav__chevron\"\n [class.ars-nav__chevron--open]=\"branchOpen\"\n aria-hidden=\"true\">{{ expandIcon() }}</mat-icon>\n }\n </button>\n }\n }\n\n @if (wide && block.section.divider && !$last) {\n <hr class=\"ars-nav__divider\" aria-hidden=\"true\" />\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__footer\"><ng-content select=\"[navFooter]\" /></div>\n</nav>\n\n<!--\n One overlay for the whole component: the overflow entry and every parent\n destination of the compact variants reuse it, instead of allocating a menu\n instance per destination.\n-->\n<ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"popupOrigin()\"\n [cdkConnectedOverlayOpen]=\"isPopupOpen()\"\n [cdkConnectedOverlayPositions]=\"popupPositions()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"closePopup()\"\n (detach)=\"closePopup()\">\n <div class=\"ars-nav-submenu\"\n role=\"menu\"\n [attr.aria-label]=\"popupItem()?.ariaLabel\"\n [cdkTrapFocus]=\"true\"\n [cdkTrapFocusAutoCapture]=\"true\"\n (keydown)=\"onKeydown($event)\">\n @for (entry of popupEntries(); track entry.key) {\n @if (entry.render; as c) {\n @let childSelected = c.item.id === activeId();\n @let childSvg = childSelected ? c.svgOn : c.svgOff;\n @let childImage = childSelected ? c.imageOn : c.imageOff;\n @let childLigature = childSelected ? c.iconOn : c.iconOff;\n @if (c.href) {\n <a #panelItem\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [attr.href]=\"c.item.disabled ? undefined : c.href\"\n [attr.target]=\"c.item.target\"\n [attr.rel]=\"c.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-disabled]=\"c.item.disabled ? 'true' : undefined\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #panelItem\n type=\"button\"\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [disabled]=\"!!c.item.disabled\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </button>\n }\n } @else {\n <div class=\"ars-nav-submenu__heading\" role=\"presentation\">{{ entry.label }}</div>\n }\n }\n </div>\n</ng-template>\n",
1046
+ styles: [":host{--_container: var(--ars-navigation-container-color, var(--mat-sys-surface-container, #eff1ef));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));--_icon: var(--ars-navigation-icon-color, var(--mat-sys-on-surface-variant, #3f4947));--_icon-active: var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c));--_label: var(--ars-navigation-label-color, var(--mat-sys-on-surface-variant, #3f4947));--_label-active: var(--ars-navigation-active-label-color, var(--ars-color-secondary, #4a635f));--_headline: var(--ars-navigation-headline-color, var(--mat-sys-on-surface-variant, #3f4947));--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_badge: var(--ars-navigation-badge-color, var(--ars-color-error, #ff5449));--_badge-text: var(--ars-navigation-badge-text-color, #ffffff);--_divider: var(--ars-navigation-divider-color, var(--ars-color-divider, #757d87));--_scrim: var(--ars-navigation-scrim-color, rgba(0, 0, 0, .4));--_focus: var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_hover-opacity: .08;--_focus-opacity: .1;--_press-opacity: .1;--_row-height: var(--ars-navigation-item-height, 56px);--_row-gap: var(--ars-navigation-item-gap, 4px);--_row-font-size: var(--ars-navigation-label-font-size, 14px);--_child-height: var(--ars-navigation-child-height, 48px);--_child-font-size: var(--ars-navigation-child-font-size, 13px);--_section-padding: 18px 16px 8px;--_row-pad-start: var(--ars-navigation-item-padding-start, 24px);--_row-pad-end: var(--ars-navigation-item-padding-end, 24px);--_label-lines: var(--ars-navigation-label-lines, 2);--_rtl: 1;display:block;box-sizing:border-box;color:var(--_label);-webkit-tap-highlight-color:transparent}:host-context([dir=rtl]){--_rtl: -1}:host(.ars-navigation--dense){--_row-height: var(--ars-navigation-dense-item-height, 44px);--_child-height: var(--ars-navigation-dense-child-height, 36px);--_section-padding: 12px 16px 4px}:host(.ars-navigation--dense){--_row-pad-start: var(--ars-navigation-dense-item-padding-start, 12px);--_row-pad-end: var(--ars-navigation-dense-item-padding-end, 12px)}.ars-nav{box-sizing:border-box;display:flex;position:relative;background:var(--_container);color:var(--_label);overflow:hidden}.ars-nav__items{box-sizing:border-box;display:flex;min-height:0;min-width:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--_state) 25%,transparent) transparent}.ars-nav__header{box-sizing:border-box;display:flex;align-items:center;flex:none;gap:12px}.ars-nav__leading,.ars-nav__fab,.ars-nav__footer{box-sizing:border-box;flex:none}.ars-nav__leading:empty,.ars-nav__fab:empty,.ars-nav__footer:empty{display:none}.ars-nav__headline{margin:0;padding:0 16px;font-size:22px;line-height:28px;font-weight:400;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__section-headline{margin:0;padding:var(--_section-padding, 18px 16px 8px);font-size:14px;line-height:20px;font-weight:500;letter-spacing:.1px;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__divider{flex:none;margin:8px 16px;border:0;border-top:1px solid var(--_divider);opacity:.4}.ars-nav__menu{display:inline-flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;margin:0;padding:0;border:0;border-radius:50%;background:transparent;color:var(--_icon);cursor:pointer;transition:background-color var(--_dur-short) var(--_easing)}.ars-nav__menu:hover{background:color-mix(in srgb,var(--_state) 8%,transparent)}.ars-nav__menu:focus-visible{outline:3px solid var(--_focus);outline-offset:2px}.ars-nav__item{box-sizing:border-box;position:relative;isolation:isolate;display:flex;align-items:center;flex:none;margin:0;border:0;background:transparent;color:var(--_label);font:inherit;text-align:start;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;appearance:none;-webkit-tap-highlight-color:transparent}.ars-nav__item:focus-visible{outline:3px solid var(--_focus);outline-offset:-3px;border-radius:16px}.ars-nav__item--disabled,.ars-nav__item:disabled{cursor:default;opacity:.38;pointer-events:none}.ars-nav__icon-box{box-sizing:border-box;position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:var(--_icon);transition:color var(--_dur) var(--_easing)}.ars-nav__icon{position:relative;z-index:1;width:24px;height:24px;font-size:24px;line-height:24px;font-variation-settings:\"FILL\" 0;transform:scale(1);transform-origin:center;transition:font-variation-settings var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1)),transform var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__label{position:relative;z-index:1;min-width:0;font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-large-tracking, .1px);color:var(--_label);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color var(--_dur) var(--_easing),opacity var(--_dur) var(--_easing),max-height var(--_dur) var(--_easing),margin var(--_dur) var(--_easing)}.ars-nav__label--hidden{opacity:0;max-height:0;margin:0!important;pointer-events:none}.ars-nav__trailing{position:relative;z-index:1;margin-inline-start:auto;padding-inline-start:12px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;color:var(--_label);white-space:nowrap}.ars-nav__badge{position:absolute;z-index:2;top:-6px;inset-inline-start:12px;box-sizing:border-box;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--_badge);color:var(--_badge-text);font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-align:center;white-space:nowrap}.ars-nav__badge--dot{top:-1px;inset-inline-start:16px;width:6px;min-width:6px;height:6px;padding:0;border-radius:3px}.ars-nav__badge--inline{position:static;z-index:1;flex:none;margin-inline-start:8px}.ars-nav__badge--inline.ars-nav__badge--dot{margin-inline-start:12px}:host([data-indicator=compact]) .ars-nav__icon-box:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__icon-box:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:before,:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:after{width:var(--ars-navigation-icon-button-size, 48px);height:var(--ars-navigation-icon-button-size, 48px);margin:calc(var(--ars-navigation-icon-button-size, 48px) / -2) 0 0 calc(var(--ars-navigation-icon-button-size, 48px) / -2);border-radius:50%}:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-indicator=compact]) .ars-nav__item:hover .ars-nav__icon-box:after{opacity:var(--_hover-opacity)}:host([data-indicator=compact]) .ars-nav__item:focus-visible .ars-nav__icon-box:after{opacity:var(--_focus-opacity)}:host([data-indicator=compact]) .ars-nav__item:active .ars-nav__icon-box:after{opacity:var(--_press-opacity)}:host([data-indicator=wide]) .ars-nav__item:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item--selected:before{opacity:1;transform:scaleX(1)}:host([data-indicator=wide]) .ars-nav__item:hover:after{opacity:var(--_hover-opacity)}:host([data-indicator=wide]) .ars-nav__item:focus-visible:after{opacity:var(--_focus-opacity)}:host([data-indicator=wide]) .ars-nav__item:active:after{opacity:var(--_press-opacity)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__label{color:var(--_label-active)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__chevron{color:var(--_label-active)}:host([data-variant=bar][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before,:host([data-variant=rail][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon-box,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon-box{color:var(--_icon-active)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__icon-box{color:var(--_icon-active)}.ars-nav__item--selected .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__label{color:var(--_label-active)}.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__label,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__trailing,.ars-nav-submenu__item--greyed:not(.ars-nav-submenu__item--selected){opacity:var(--ars-navigation-greyed-opacity, .5);transition:opacity var(--_dur-short, .15s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__label,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__icon-box,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__trailing,.ars-nav-submenu__item--greyed:where(:hover,:focus-visible){opacity:1}:host([data-layout=vertical]) .ars-nav__item{flex-direction:column;justify-content:center}:host([data-layout=vertical]) .ars-nav__label{font:var(--mat-sys-label-medium, 500 12px/16px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-medium-tracking, .5px);margin-top:var(--ars-navigation-vertical-gap, 0);padding-block:var(--ars-navigation-vertical-label-padding, 8px);max-width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-vertical-label-line-height, 14px)}:host([data-layout=horizontal]) .ars-nav__item{flex-direction:row;justify-content:flex-start}:host([data-layout=horizontal]) .ars-nav__label{margin-inline-start:4px}:host .ars-nav__item--selected .ars-nav__label,:host .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}:host([data-variant=bar]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-compact-selected-font-weight, 500)}:host([data-variant=bar]){width:100%}:host([data-variant=bar]) .ars-nav{flex-direction:row;align-items:center;justify-content:space-around;width:100%;height:var(--ars-navigation-bar-height, 80px);padding:0 8px}:host([data-variant=bar]) .ars-nav__header,:host([data-variant=bar]) .ars-nav__leading,:host([data-variant=bar]) .ars-nav__fab,:host([data-variant=bar]) .ars-nav__footer,:host([data-variant=bar]) .ars-nav__section-headline,:host([data-variant=bar]) .ars-nav__divider,:host([data-variant=bar]) .ars-nav__trailing{display:none}:host([data-variant=bar]) .ars-nav__items{display:contents}:host([data-variant=bar]) .ars-nav__item{flex:1 1 0;min-width:0;height:100%}:host([data-variant=bar][data-layout=horizontal]) .ars-nav__item{justify-content:center;max-width:var(--ars-navigation-item-max-width, 168px);padding:0 12px}:host([data-variant=bar][data-layout=vertical]) .ars-nav__item{justify-content:flex-start;padding-block-start:var(--ars-navigation-bar-item-padding-top, 12px)}:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:before,:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:after{inset:12px 0}:host([data-variant=rail]){height:100%}:host([data-variant=rail]) .ars-nav{flex-direction:column;align-items:center;width:var(--ars-navigation-rail-width, var(--ars-navigation-width, 96px));height:100%;padding:var(--ars-navigation-rail-top-padding, 20px) 0 8px}:host([data-variant=rail]) .ars-nav__header{flex-direction:column;margin-bottom:40px}:host([data-variant=rail]) .ars-nav__headline,:host([data-variant=rail]) .ars-nav__section-headline,:host([data-variant=rail]) .ars-nav__divider,:host([data-variant=rail]) .ars-nav__trailing{display:none}:host([data-variant=rail]) .ars-nav__fab{margin-bottom:40px}:host([data-variant=rail]) .ars-nav__items{flex:1 1 auto;flex-direction:column;align-items:center;gap:var(--ars-navigation-rail-item-gap, 8px);width:100%;overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail]) .ars-nav__item{justify-content:center;width:100%;min-height:var(--ars-navigation-rail-item-height, 64px);padding:0 4px}:host([data-variant=rail-expanded]),:host([data-variant=drawer]),:host([data-variant=modal]){height:100%}:host([data-variant=rail-expanded]) .ars-nav,:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{flex-direction:column;align-items:stretch;height:100%;padding:12px 0}:host([data-variant=rail-expanded]) .ars-nav__header,:host([data-variant=drawer]) .ars-nav__header,:host([data-variant=modal]) .ars-nav__header{padding:4px 8px 8px}:host([data-variant=rail-expanded]) .ars-nav__items,:host([data-variant=drawer]) .ars-nav__items,:host([data-variant=modal]) .ars-nav__items{flex:1 1 auto;flex-direction:column;gap:var(--_row-gap, 4px);overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail-expanded]) .ars-nav__item,:host([data-variant=drawer]) .ars-nav__item,:host([data-variant=modal]) .ars-nav__item{min-height:var(--_row-height, 56px);padding-block:0;padding-inline:calc(var(--_row-pad-start, 24px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 24px);margin-block:0;margin-inline:var(--ars-navigation-item-inset, 20px)}:host(.ars-navigation--dense) .ars-nav__item{padding-inline:calc(var(--_row-pad-start, 12px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"]{margin-block-start:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child{margin-block-end:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__icon-box,:host([data-variant=drawer]) .ars-nav__icon-box,:host([data-variant=modal]) .ars-nav__icon-box{margin-inline-end:12px}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]){min-height:var(--_child-height, 48px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label{font-size:var(--_child-font-size, 13px)}:host([data-variant=rail-expanded]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-label-line-height, 18px);flex:1 1 auto;margin-inline-start:0;font-size:var(--_row-font-size, 14px)}:host([data-variant=rail-expanded]) .ars-nav{width:var(--ars-navigation-width, 220px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{width:var(--ars-navigation-width, 360px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=modal]){position:fixed;inset:0;z-index:var(--ars-navigation-z-index, 1000);height:auto;pointer-events:none}:host([data-variant=modal]) .ars-nav{position:absolute;inset-block:0;inset-inline-start:0;pointer-events:auto;border-start-end-radius:16px;border-end-end-radius:16px;translate:calc(var(--_shift, 0%) * var(--_rtl)) 0;transition:translate var(--_dur-long) var(--_easing),visibility var(--_dur-long) var(--_easing)}:host([data-variant=modal][data-position=end]) .ars-nav{inset-inline-start:auto;inset-inline-end:0;border-radius:0;border-start-start-radius:16px;border-end-start-radius:16px}:host([data-variant=modal].ars-navigation--hidden) .ars-nav__scrim{opacity:0;pointer-events:none}:host([data-variant=modal].ars-navigation--hidden) .ars-nav{--_shift: -100%;visibility:hidden}:host([data-variant=modal][data-position=end].ars-navigation--hidden) .ars-nav{--_shift: 100%}.ars-nav__scrim{position:absolute;inset:0;background:var(--_scrim);opacity:1;pointer-events:auto;transition:opacity var(--_dur-long) var(--_easing)}:host(:not([data-variant=bar])) .ars-nav__items--bottom{flex:0 0 auto;margin-block-start:auto;overflow:visible}:host([data-align=center]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe center}:host([data-align=bottom]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe flex-end}:host(.ars-navigation--elevated) .ars-nav{box-shadow:0 1px 3px #0000004d,0 4px 8px 3px #00000026}:host(.ars-navigation--hidden):not([data-variant=modal]){display:none}.ars-nav__icon--image{object-fit:contain}.ars-nav__icon--sprite{display:inline-block;flex:none;width:var(--sp-size, 24px);height:var(--sp-size, 24px);background-image:var(--sp-url);background-repeat:no-repeat;background-size:var(--sp-sheet-x, auto) var(--sp-sheet-y, auto);background-position:calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-x, 0px)) calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-y, 0px))}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon--sprite{--sp-frame: var(--sp-hover)}.ars-nav__item--selected .ars-nav__icon--sprite,.ars-nav-submenu__item--selected .ars-nav__icon--sprite,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon--sprite,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon--sprite{--sp-frame: var(--sp-active)}.ars-nav__item--disabled .ars-nav__icon--sprite,.ars-nav__item:where(:disabled) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:disabled,[aria-disabled=true]) .ars-nav__icon--sprite{--sp-frame: var(--sp-disabled)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon{transform:scale(var(--_icon-hover-scale, 1.12))}.ars-nav__item--selected .ars-nav__icon,.ars-nav-submenu__item--selected .ars-nav__icon{transform:scale(1)}.ars-nav__item:where(:active) .ars-nav__icon,.ars-nav-submenu__item:where(:active) .ars-nav__icon{transform:scale(var(--_icon-press-scale, .92));transition-duration:var(--_dur-short, .15s)}:host([data-variant=bar]) .ars-nav__item--icon-only{flex:0 0 auto;min-width:56px;max-width:72px}.ars-nav__chevron{position:relative;z-index:1;flex:none;margin-inline-start:8px;width:20px;height:20px;font-size:20px;line-height:20px;color:var(--_icon);rotate:0deg;opacity:0;transition:rotate var(--_dur) var(--_easing),opacity var(--_dur-short) var(--_easing)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__chevron{opacity:1}@media(hover:none){.ars-nav__chevron{opacity:1}}.ars-nav__chevron--open{rotate:180deg}.ars-nav__item[data-depth=\"1\"]{--_depth-indent: 24px}.ars-nav__item[data-depth=\"2\"]{--_depth-indent: 48px}.ars-nav__item[data-depth=\"3\"]{--_depth-indent: 72px}.ars-nav-submenu{--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));box-sizing:border-box;display:flex;flex-direction:column;gap:2px;min-width:200px;max-width:320px;max-height:60vh;padding:8px;border-radius:12px;background:var(--ars-navigation-menu-container-color, var(--ars-navigation-container-color, var(--mat-sys-surface-container-high, #e7e9e8)));color:var(--ars-navigation-label-color, var(--mat-sys-on-surface, #191c1b));box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026;overflow-y:auto;overscroll-behavior:contain}.ars-nav-submenu__item{box-sizing:border-box;display:flex;align-items:center;gap:12px;flex:none;min-height:48px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;appearance:none}.ars-nav-submenu__item--grouped{padding-inline-start:var(--ars-navigation-menu-group-indent, 24px)}.ars-nav-submenu__item:hover{background:color-mix(in srgb,currentColor 8%,transparent)}.ars-nav-submenu__item:focus-visible{outline:3px solid var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));outline-offset:-3px}.ars-nav-submenu__item--selected .ars-nav-submenu__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}.ars-nav-submenu__item--selected{background:var(--_indicator);color:var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c))}.ars-nav-submenu__item--selected:where(:hover,:focus-visible){background:color-mix(in srgb,var(--_state) 8%,var(--_indicator))}.ars-nav-submenu__item:disabled,.ars-nav-submenu__item[aria-disabled=true]{opacity:.38;pointer-events:none}.ars-nav-submenu__heading{padding:12px 12px 4px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;opacity:.7}.ars-nav-submenu__heading:first-child{padding-top:4px}.ars-nav-submenu__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--ars-navigation-label-lines, 2);line-clamp:var(--ars-navigation-label-lines, 2);flex:1 1 auto;min-width:0;padding-block:8px;font-size:14px;line-height:var(--ars-navigation-label-line-height, 18px);font-weight:500;letter-spacing:.1px;white-space:normal;overflow-wrap:anywhere;overflow:hidden}.ars-nav-submenu__trailing{flex:none;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;opacity:.8}@media(prefers-reduced-motion:reduce){:host{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}:host([data-indicator=wide]) .ars-nav__item:before,:host([data-indicator=compact]) .ars-nav__icon-box:before{transform:none}.ars-nav-submenu{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}}@media(forced-colors:active){:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before,:host([data-indicator=wide]) .ars-nav__item--selected:before{background:Highlight;forced-color-adjust:none}.ars-nav__item:focus-visible{outline:3px solid CanvasText}}\n"],
1047
+ dependencies: [
1048
+ {
1049
+ kind: "ngmodule",
1050
+ type: MatIconModule
1051
+ },
1052
+ {
1053
+ kind: "component",
1054
+ type: i1.MatIcon,
1055
+ selector: "mat-icon",
1056
+ inputs: [
1057
+ "color",
1058
+ "inline",
1059
+ "svgIcon",
1060
+ "fontSet",
1061
+ "fontIcon"
1062
+ ],
1063
+ exportAs: ["matIcon"]
1064
+ },
1065
+ {
1066
+ kind: "ngmodule",
1067
+ type: MatTooltipModule
1068
+ },
1069
+ {
1070
+ kind: "directive",
1071
+ type: i2.MatTooltip,
1072
+ selector: "[matTooltip]",
1073
+ inputs: [
1074
+ "matTooltipPosition",
1075
+ "matTooltipPositionAtOrigin",
1076
+ "matTooltipDisabled",
1077
+ "matTooltipShowDelay",
1078
+ "matTooltipHideDelay",
1079
+ "matTooltipTouchGestures",
1080
+ "matTooltip",
1081
+ "matTooltipClass"
1082
+ ],
1083
+ exportAs: ["matTooltip"]
1084
+ },
1085
+ {
1086
+ kind: "directive",
1087
+ type: CdkTrapFocus,
1088
+ selector: "[cdkTrapFocus]",
1089
+ inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"],
1090
+ exportAs: ["cdkTrapFocus"]
1091
+ },
1092
+ {
1093
+ kind: "directive",
1094
+ type: CdkConnectedOverlay,
1095
+ selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]",
1096
+ inputs: [
1097
+ "cdkConnectedOverlayOrigin",
1098
+ "cdkConnectedOverlayPositions",
1099
+ "cdkConnectedOverlayPositionStrategy",
1100
+ "cdkConnectedOverlayOffsetX",
1101
+ "cdkConnectedOverlayOffsetY",
1102
+ "cdkConnectedOverlayWidth",
1103
+ "cdkConnectedOverlayHeight",
1104
+ "cdkConnectedOverlayMinWidth",
1105
+ "cdkConnectedOverlayMinHeight",
1106
+ "cdkConnectedOverlayBackdropClass",
1107
+ "cdkConnectedOverlayPanelClass",
1108
+ "cdkConnectedOverlayViewportMargin",
1109
+ "cdkConnectedOverlayScrollStrategy",
1110
+ "cdkConnectedOverlayOpen",
1111
+ "cdkConnectedOverlayDisableClose",
1112
+ "cdkConnectedOverlayTransformOriginOn",
1113
+ "cdkConnectedOverlayHasBackdrop",
1114
+ "cdkConnectedOverlayLockPosition",
1115
+ "cdkConnectedOverlayFlexibleDimensions",
1116
+ "cdkConnectedOverlayGrowAfterOpen",
1117
+ "cdkConnectedOverlayPush",
1118
+ "cdkConnectedOverlayDisposeOnNavigation",
1119
+ "cdkConnectedOverlayUsePopover",
1120
+ "cdkConnectedOverlayMatchWidth",
1121
+ "cdkConnectedOverlay"
1122
+ ],
1123
+ outputs: [
1124
+ "backdropClick",
1125
+ "positionChange",
1126
+ "attach",
1127
+ "detach",
1128
+ "overlayKeydown",
1129
+ "overlayOutsideClick"
1130
+ ],
1131
+ exportAs: ["cdkConnectedOverlay"]
1132
+ }
1133
+ ],
1134
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
1135
+ });
1136
+ }
1137
+ };
1138
+ i0.ɵɵngDeclareClassMetadata({
1139
+ minVersion: "12.0.0",
1140
+ version: "22.2.1",
1141
+ ngImport: i0,
1142
+ type: NavigationBarComponent,
1143
+ decorators: [{
1144
+ type: Component,
1145
+ args: [{
1146
+ selector: "navigation-bar",
1147
+ standalone: true,
1148
+ imports: [
1149
+ MatIconModule,
1150
+ MatTooltipModule,
1151
+ CdkTrapFocus,
1152
+ CdkConnectedOverlay
1153
+ ],
1154
+ changeDetection: ChangeDetectionStrategy.OnPush,
1155
+ host: {
1156
+ "class": "ars-navigation",
1157
+ "[attr.data-variant]": "resolvedVariant()",
1158
+ "[attr.data-layout]": "resolvedLayout()",
1159
+ "[attr.data-align]": "alignment()",
1160
+ "[attr.data-position]": "position()",
1161
+ "[attr.data-labels]": "resolvedLabelVisibility()",
1162
+ "[attr.data-indicator]": "indicatorMode()",
1163
+ "[class.ars-navigation--open]": "isOverlayOpen()",
1164
+ "[class.ars-navigation--elevated]": "elevated()",
1165
+ "[class.ars-navigation--bordered]": "bordered()",
1166
+ "[class.ars-navigation--dense]": "dense()",
1167
+ "[class.ars-navigation--hidden]": "isHidden()",
1168
+ "[style.--ars-navigation-width]": "widthStyle()",
1169
+ "[style.--ars-navigation-rail-width]": "railWidthStyle()",
1170
+ "[style.--ars-navigation-min-width]": "minWidthStyle()",
1171
+ "[style.--ars-navigation-max-width]": "maxWidthStyle()"
1172
+ },
1173
+ template: "@if (isModal() && scrim()) {\n <div class=\"ars-nav__scrim\" aria-hidden=\"true\" (click)=\"onScrimClick()\"></div>\n}\n\n<nav class=\"ars-nav\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.role]=\"isModal() ? 'dialog' : undefined\"\n [attr.aria-modal]=\"isModal() ? 'true' : undefined\"\n [attr.inert]=\"isHidden() ? '' : undefined\"\n [cdkTrapFocus]=\"isOverlayOpen()\"\n [cdkTrapFocusAutoCapture]=\"isOverlayOpen()\"\n (keydown)=\"onKeydown($event)\">\n\n @let labels = resolvedLabelVisibility();\n @let stacked = resolvedLayout() === 'vertical';\n @let wide = isExpanded();\n @let active = activeId();\n @let highlighted = highlightedIds();\n @let ancestors = ancestorIds();\n @let openIds = expandedSet();\n @let popupOpenId = popupItem()?.item.id;\n\n @if (showsHeader()) {\n <div class=\"ars-nav__header\">\n @if (showMenuButton()) {\n <button type=\"button\"\n class=\"ars-nav__menu\"\n [attr.aria-label]=\"menuAriaLabel()\"\n (click)=\"onMenuClick()\">\n <mat-icon aria-hidden=\"true\">{{ menuIcon() }}</mat-icon>\n </button>\n }\n @if (wide) {\n @if (headline(); as headlineText) {\n <h2 class=\"ars-nav__headline\">{{ headlineText }}</h2>\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__leading\"><ng-content select=\"[navHeader]\" /></div>\n <div class=\"ars-nav__fab\"><ng-content select=\"[navFab]\" /></div>\n\n @for (group of visibleGroups(); track group.align) {\n <div class=\"ars-nav__items\" [class.ars-nav__items--bottom]=\"group.align === 'bottom'\">\n @for (block of group.sections; track block.section.id) {\n\n @if (wide && block.section.label) {\n <h3 class=\"ars-nav__section-headline\">{{ block.section.label }}</h3>\n }\n\n @for (r of block.items; track r.item.id) {\n @let current = r.item.id === active;\n <!-- Clicking a parent opens and closes its branch, or its floating panel, and\n never navigates. It can still BE the active destination, but only when it\n owns a route of its own (`r.href`): that is a page the user can reach, so\n the row is allowed to look selected. A parent without a route is never\n selected — where it used to stand in for a destination it hides it now\n carries `ancestor` instead: the trail, not the selection. -->\n @let ancestor = ancestors.has(r.item.id);\n <!-- Stacked layouts get the short form when the destination declares one, or\n no label at all on `'none'`; `tooltip` and `ariaLabel` stay on the full\n label either way, so the name is still one hover — or one screen reader —\n away. -->\n @let stackedLabelHidden = stacked && r.item.labelVertical === 'none';\n @let displayLabel = stacked ? (r.item.labelVertical ?? r.item.label) : r.item.label;\n @let selected = highlighted.has(r.item.id) && (!r.hasChildren || !!r.href);\n <!-- `stackedLabelHidden` counts as \"no label on screen\": that is what turns the\n tooltip back on, which is the only place the name is left to be read. -->\n @let labelVisible = !r.iconOnly && !stackedLabelHidden\n && (labels === 'labeled' || (labels === 'selected' && (selected || ancestor)));\n @let branchOpen = r.hasChildren && openIds.has(r.item.id);\n @let hideIcon = wide && r.depth > 0 && !childIcons();\n <!-- In the compact variants the children live in a floating panel, so an\n ancestor row IS how the active destination shows on screen: it takes the\n selected look whole, icon variant included, exactly like a destination\n without children. In the expanded ones the active row is visible on its\n own and the ancestor stays the quieter trail. -->\n @let activeLook = selected || (!wide && ancestor);\n @let svg = activeLook ? r.svgOn : r.svgOff;\n @let image = activeLook ? r.imageOn : r.imageOff;\n @let ligature = activeLook ? r.iconOn : r.iconOff;\n\n <!--\n The anchor and the button branches duplicate the inner markup on purpose:\n an `ng-template` + `ngTemplateOutlet` would allocate one extra embedded\n view per destination and lose the typed template context.\n -->\n @if (r.href && !r.hasChildren) {\n <a #navItem\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [attr.data-depth]=\"r.depth\"\n [attr.href]=\"r.item.disabled ? undefined : r.href\"\n [attr.target]=\"r.item.target\"\n [attr.rel]=\"r.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-disabled]=\"r.item.disabled ? 'true' : undefined\"\n [attr.tabindex]=\"r.item.disabled ? -1 : 0\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </a>\n } @else {\n <button #navItem\n type=\"button\"\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--ancestor]=\"ancestor\"\n [class.ars-nav__item--icon-stacked]=\"stackedLabelHidden\"\n [class.ars-nav__item--greyed]=\"r.item.greyed\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--no-icon]=\"hideIcon\"\n [class.ars-nav__item--parent]=\"r.hasChildren\"\n [class.ars-nav__item--icon-only]=\"r.iconOnly\"\n [attr.data-depth]=\"r.depth\"\n [disabled]=\"!!r.item.disabled\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-expanded]=\"r.hasChildren ? (wide ? branchOpen : popupOpenId === r.item.id) : undefined\"\n [attr.aria-haspopup]=\"r.hasChildren && !wide ? 'menu' : undefined\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n @if (!hideIcon) {\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n }\n @if (labels !== 'unlabeled' && !r.iconOnly && !stackedLabelHidden) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ displayLabel }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n <!-- The badge of an icon-less child has no icon box to sit on: it moves\n to the trailing edge, exactly as the submenu panel renders it. -->\n @if (hideIcon && r.hasBadge) {\n <span class=\"ars-nav__badge ars-nav__badge--inline\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n @if (r.hasChildren && wide) {\n <mat-icon class=\"ars-nav__chevron\"\n [class.ars-nav__chevron--open]=\"branchOpen\"\n aria-hidden=\"true\">{{ expandIcon() }}</mat-icon>\n }\n </button>\n }\n }\n\n @if (wide && block.section.divider && !$last) {\n <hr class=\"ars-nav__divider\" aria-hidden=\"true\" />\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__footer\"><ng-content select=\"[navFooter]\" /></div>\n</nav>\n\n<!--\n One overlay for the whole component: the overflow entry and every parent\n destination of the compact variants reuse it, instead of allocating a menu\n instance per destination.\n-->\n<ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"popupOrigin()\"\n [cdkConnectedOverlayOpen]=\"isPopupOpen()\"\n [cdkConnectedOverlayPositions]=\"popupPositions()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"closePopup()\"\n (detach)=\"closePopup()\">\n <div class=\"ars-nav-submenu\"\n role=\"menu\"\n [attr.aria-label]=\"popupItem()?.ariaLabel\"\n [cdkTrapFocus]=\"true\"\n [cdkTrapFocusAutoCapture]=\"true\"\n (keydown)=\"onKeydown($event)\">\n @for (entry of popupEntries(); track entry.key) {\n @if (entry.render; as c) {\n @let childSelected = c.item.id === activeId();\n @let childSvg = childSelected ? c.svgOn : c.svgOff;\n @let childImage = childSelected ? c.imageOn : c.imageOff;\n @let childLigature = childSelected ? c.iconOn : c.iconOff;\n @if (c.href) {\n <a #panelItem\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [attr.href]=\"c.item.disabled ? undefined : c.href\"\n [attr.target]=\"c.item.target\"\n [attr.rel]=\"c.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-disabled]=\"c.item.disabled ? 'true' : undefined\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #panelItem\n type=\"button\"\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--grouped]=\"entry.grouped\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [class.ars-nav-submenu__item--greyed]=\"c.item.greyed\"\n [disabled]=\"!!c.item.disabled\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </button>\n }\n } @else {\n <div class=\"ars-nav-submenu__heading\" role=\"presentation\">{{ entry.label }}</div>\n }\n }\n </div>\n</ng-template>\n",
1174
+ styles: [":host{--_container: var(--ars-navigation-container-color, var(--mat-sys-surface-container, #eff1ef));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));--_icon: var(--ars-navigation-icon-color, var(--mat-sys-on-surface-variant, #3f4947));--_icon-active: var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c));--_label: var(--ars-navigation-label-color, var(--mat-sys-on-surface-variant, #3f4947));--_label-active: var(--ars-navigation-active-label-color, var(--ars-color-secondary, #4a635f));--_headline: var(--ars-navigation-headline-color, var(--mat-sys-on-surface-variant, #3f4947));--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_badge: var(--ars-navigation-badge-color, var(--ars-color-error, #ff5449));--_badge-text: var(--ars-navigation-badge-text-color, #ffffff);--_divider: var(--ars-navigation-divider-color, var(--ars-color-divider, #757d87));--_scrim: var(--ars-navigation-scrim-color, rgba(0, 0, 0, .4));--_focus: var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_hover-opacity: .08;--_focus-opacity: .1;--_press-opacity: .1;--_row-height: var(--ars-navigation-item-height, 56px);--_row-gap: var(--ars-navigation-item-gap, 4px);--_row-font-size: var(--ars-navigation-label-font-size, 14px);--_child-height: var(--ars-navigation-child-height, 48px);--_child-font-size: var(--ars-navigation-child-font-size, 13px);--_section-padding: 18px 16px 8px;--_row-pad-start: var(--ars-navigation-item-padding-start, 24px);--_row-pad-end: var(--ars-navigation-item-padding-end, 24px);--_label-lines: var(--ars-navigation-label-lines, 2);--_rtl: 1;display:block;box-sizing:border-box;color:var(--_label);-webkit-tap-highlight-color:transparent}:host-context([dir=rtl]){--_rtl: -1}:host(.ars-navigation--dense){--_row-height: var(--ars-navigation-dense-item-height, 44px);--_child-height: var(--ars-navigation-dense-child-height, 36px);--_section-padding: 12px 16px 4px}:host(.ars-navigation--dense){--_row-pad-start: var(--ars-navigation-dense-item-padding-start, 12px);--_row-pad-end: var(--ars-navigation-dense-item-padding-end, 12px)}.ars-nav{box-sizing:border-box;display:flex;position:relative;background:var(--_container);color:var(--_label);overflow:hidden}.ars-nav__items{box-sizing:border-box;display:flex;min-height:0;min-width:0;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--_state) 25%,transparent) transparent}.ars-nav__header{box-sizing:border-box;display:flex;align-items:center;flex:none;gap:12px}.ars-nav__leading,.ars-nav__fab,.ars-nav__footer{box-sizing:border-box;flex:none}.ars-nav__leading:empty,.ars-nav__fab:empty,.ars-nav__footer:empty{display:none}.ars-nav__headline{margin:0;padding:0 16px;font-size:22px;line-height:28px;font-weight:400;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__section-headline{margin:0;padding:var(--_section-padding, 18px 16px 8px);font-size:14px;line-height:20px;font-weight:500;letter-spacing:.1px;color:var(--_headline);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ars-nav__divider{flex:none;margin:8px 16px;border:0;border-top:1px solid var(--_divider);opacity:.4}.ars-nav__menu{display:inline-flex;align-items:center;justify-content:center;flex:none;width:48px;height:48px;margin:0;padding:0;border:0;border-radius:50%;background:transparent;color:var(--_icon);cursor:pointer;transition:background-color var(--_dur-short) var(--_easing)}.ars-nav__menu:hover{background:color-mix(in srgb,var(--_state) 8%,transparent)}.ars-nav__menu:focus-visible{outline:3px solid var(--_focus);outline-offset:2px}.ars-nav__item{box-sizing:border-box;position:relative;isolation:isolate;display:flex;align-items:center;flex:none;margin:0;border:0;background:transparent;color:var(--_label);font:inherit;text-align:start;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;appearance:none;-webkit-tap-highlight-color:transparent}.ars-nav__item:focus-visible{outline:3px solid var(--_focus);outline-offset:-3px;border-radius:16px}.ars-nav__item--disabled,.ars-nav__item:disabled{cursor:default;opacity:.38;pointer-events:none}.ars-nav__icon-box{box-sizing:border-box;position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;color:var(--_icon);transition:color var(--_dur) var(--_easing)}.ars-nav__icon{position:relative;z-index:1;width:24px;height:24px;font-size:24px;line-height:24px;font-variation-settings:\"FILL\" 0;transform:scale(1);transform-origin:center;transition:font-variation-settings var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1)),transform var(--_dur, .25s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__label{position:relative;z-index:1;min-width:0;font:var(--mat-sys-label-large, 500 14px/20px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-large-tracking, .1px);color:var(--_label);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color var(--_dur) var(--_easing),opacity var(--_dur) var(--_easing),max-height var(--_dur) var(--_easing),margin var(--_dur) var(--_easing)}.ars-nav__label--hidden{opacity:0;max-height:0;margin:0!important;pointer-events:none}.ars-nav__trailing{position:relative;z-index:1;margin-inline-start:auto;padding-inline-start:12px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;color:var(--_label);white-space:nowrap}.ars-nav__badge{position:absolute;z-index:2;top:-6px;inset-inline-start:12px;box-sizing:border-box;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--_badge);color:var(--_badge-text);font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-align:center;white-space:nowrap}.ars-nav__badge--dot{top:-1px;inset-inline-start:16px;width:6px;min-width:6px;height:6px;padding:0;border-radius:3px}.ars-nav__badge--inline{position:static;z-index:1;flex:none;margin-inline-start:8px}.ars-nav__badge--inline.ars-nav__badge--dot{margin-inline-start:12px}:host([data-indicator=compact]) .ars-nav__icon-box:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__icon-box:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:50% auto auto 50%;width:56px;height:32px;margin:-16px 0 0 -28px;border-radius:16px}:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:before,:host([data-indicator=compact]) .ars-nav__item--icon-stacked .ars-nav__icon-box:after{width:var(--ars-navigation-icon-button-size, 48px);height:var(--ars-navigation-icon-button-size, 48px);margin:calc(var(--ars-navigation-icon-button-size, 48px) / -2) 0 0 calc(var(--ars-navigation-icon-button-size, 48px) / -2);border-radius:50%}:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-indicator=compact]) .ars-nav__item:hover .ars-nav__icon-box:after{opacity:var(--_hover-opacity)}:host([data-indicator=compact]) .ars-nav__item:focus-visible .ars-nav__icon-box:after{opacity:var(--_focus-opacity)}:host([data-indicator=compact]) .ars-nav__item:active .ars-nav__icon-box:after{opacity:var(--_press-opacity)}:host([data-indicator=wide]) .ars-nav__item:before{content:\"\";position:absolute;z-index:0;background:var(--_indicator);opacity:0;transform:scaleX(.55);transition:opacity var(--_dur) var(--_easing),transform var(--_dur-long) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item:after{content:\"\";position:absolute;z-index:0;background:var(--_state);opacity:0;transition:opacity var(--_dur-short) var(--_easing);pointer-events:none;inset:0;border-radius:28px}:host([data-indicator=wide]) .ars-nav__item--selected:before{opacity:1;transform:scaleX(1)}:host([data-indicator=wide]) .ars-nav__item:hover:after{opacity:var(--_hover-opacity)}:host([data-indicator=wide]) .ars-nav__item:focus-visible:after{opacity:var(--_focus-opacity)}:host([data-indicator=wide]) .ars-nav__item:active:after{opacity:var(--_press-opacity)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__label{color:var(--_label-active)}.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--ancestor:not(.ars-nav__item--selected) .ars-nav__chevron{color:var(--_label-active)}:host([data-variant=bar][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before,:host([data-variant=rail][data-indicator=compact]) .ars-nav__item--ancestor .ars-nav__icon-box:before{opacity:1;transform:scaleX(1)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon-box,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon-box{color:var(--_icon-active)}:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__icon-box{color:var(--_icon-active)}.ars-nav__item--selected .ars-nav__icon{font-variation-settings:\"FILL\" 1}.ars-nav__item--selected .ars-nav__label{color:var(--_label-active)}.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__label,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__icon-box,.ars-nav__item--greyed:not(.ars-nav__item--selected) .ars-nav__trailing,.ars-nav-submenu__item--greyed:not(.ars-nav-submenu__item--selected){opacity:var(--ars-navigation-greyed-opacity, .5);transition:opacity var(--_dur-short, .15s) var(--_easing, cubic-bezier(.2, 0, 0, 1))}.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__label,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__icon-box,.ars-nav__item--greyed:where(:hover,:focus-visible) .ars-nav__trailing,.ars-nav-submenu__item--greyed:where(:hover,:focus-visible){opacity:1}:host([data-layout=vertical]) .ars-nav__item{flex-direction:column;justify-content:center}:host([data-layout=vertical]) .ars-nav__label{font:var(--mat-sys-label-medium, 500 12px/16px Roboto, sans-serif);letter-spacing:var(--mat-sys-label-medium-tracking, .5px);margin-top:var(--ars-navigation-vertical-gap, 0);padding-block:var(--ars-navigation-vertical-label-padding, 8px);max-width:100%;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-vertical-label-line-height, 14px)}:host([data-layout=horizontal]) .ars-nav__item{flex-direction:row;justify-content:flex-start}:host([data-layout=horizontal]) .ars-nav__label{margin-inline-start:4px}:host .ars-nav__item--selected .ars-nav__label,:host .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}:host([data-variant=bar]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--selected .ars-nav__label,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__label{font-weight:var(--ars-navigation-compact-selected-font-weight, 500)}:host([data-variant=bar]){width:100%}:host([data-variant=bar]) .ars-nav{flex-direction:row;align-items:center;justify-content:space-around;width:100%;height:var(--ars-navigation-bar-height, 80px);padding:0 8px}:host([data-variant=bar]) .ars-nav__header,:host([data-variant=bar]) .ars-nav__leading,:host([data-variant=bar]) .ars-nav__fab,:host([data-variant=bar]) .ars-nav__footer,:host([data-variant=bar]) .ars-nav__section-headline,:host([data-variant=bar]) .ars-nav__divider,:host([data-variant=bar]) .ars-nav__trailing{display:none}:host([data-variant=bar]) .ars-nav__items{display:contents}:host([data-variant=bar]) .ars-nav__item{flex:1 1 0;min-width:0;height:100%}:host([data-variant=bar][data-layout=horizontal]) .ars-nav__item{justify-content:center;max-width:var(--ars-navigation-item-max-width, 168px);padding:0 12px}:host([data-variant=bar][data-layout=vertical]) .ars-nav__item{justify-content:flex-start;padding-block-start:var(--ars-navigation-bar-item-padding-top, 12px)}:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:before,:host([data-variant=bar][data-indicator=wide]) .ars-nav__item:after{inset:12px 0}:host([data-variant=rail]){height:100%}:host([data-variant=rail]) .ars-nav{flex-direction:column;align-items:center;width:var(--ars-navigation-rail-width, var(--ars-navigation-width, 96px));height:100%;padding:var(--ars-navigation-rail-top-padding, 20px) 0 8px}:host([data-variant=rail]) .ars-nav__header{flex-direction:column;margin-bottom:40px}:host([data-variant=rail]) .ars-nav__headline,:host([data-variant=rail]) .ars-nav__section-headline,:host([data-variant=rail]) .ars-nav__divider,:host([data-variant=rail]) .ars-nav__trailing{display:none}:host([data-variant=rail]) .ars-nav__fab{margin-bottom:40px}:host([data-variant=rail]) .ars-nav__items{flex:1 1 auto;flex-direction:column;align-items:center;gap:var(--ars-navigation-rail-item-gap, 8px);width:100%;overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail]) .ars-nav__item{justify-content:center;width:100%;min-height:var(--ars-navigation-rail-item-height, 64px);padding:0 4px}:host([data-variant=rail-expanded]),:host([data-variant=drawer]),:host([data-variant=modal]){height:100%}:host([data-variant=rail-expanded]) .ars-nav,:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{flex-direction:column;align-items:stretch;height:100%;padding:12px 0}:host([data-variant=rail-expanded]) .ars-nav__header,:host([data-variant=drawer]) .ars-nav__header,:host([data-variant=modal]) .ars-nav__header{padding:4px 8px 8px}:host([data-variant=rail-expanded]) .ars-nav__items,:host([data-variant=drawer]) .ars-nav__items,:host([data-variant=modal]) .ars-nav__items{flex:1 1 auto;flex-direction:column;gap:var(--_row-gap, 4px);overflow-y:auto;overscroll-behavior:contain}:host([data-variant=rail-expanded]) .ars-nav__item,:host([data-variant=drawer]) .ars-nav__item,:host([data-variant=modal]) .ars-nav__item{min-height:var(--_row-height, 56px);padding-block:0;padding-inline:calc(var(--_row-pad-start, 24px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 24px);margin-block:0;margin-inline:var(--ars-navigation-item-inset, 20px)}:host(.ars-navigation--dense) .ars-nav__item{padding-inline:calc(var(--_row-pad-start, 12px) + var(--_depth-indent, 0px)) var(--_row-pad-end, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"],:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"])+.ars-nav__item[data-depth=\"0\"]{margin-block-start:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]):last-child{margin-block-end:var(--ars-navigation-branch-end-gap, 12px)}:host([data-variant=rail-expanded]) .ars-nav__icon-box,:host([data-variant=drawer]) .ars-nav__icon-box,:host([data-variant=modal]) .ars-nav__icon-box{margin-inline-end:12px}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]),:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]){min-height:var(--_child-height, 48px)}:host([data-variant=rail-expanded]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__item[data-depth]:not([data-depth=\"0\"]) .ars-nav__label{font-size:var(--_child-font-size, 13px)}:host([data-variant=rail-expanded]) .ars-nav__label,:host([data-variant=drawer]) .ars-nav__label,:host([data-variant=modal]) .ars-nav__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--_label-lines, 2);line-clamp:var(--_label-lines, 2);white-space:normal;overflow-wrap:anywhere;line-height:var(--ars-navigation-label-line-height, 18px);flex:1 1 auto;margin-inline-start:0;font-size:var(--_row-font-size, 14px)}:host([data-variant=rail-expanded]) .ars-nav{width:var(--ars-navigation-width, 220px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=drawer]) .ars-nav,:host([data-variant=modal]) .ars-nav{width:var(--ars-navigation-width, 360px);min-width:var(--ars-navigation-min-width, 0);max-width:var(--ars-navigation-max-width, 100%)}:host([data-variant=modal]){position:fixed;inset:0;z-index:var(--ars-navigation-z-index, 1000);height:auto;pointer-events:none}:host([data-variant=modal]) .ars-nav{position:absolute;inset-block:0;inset-inline-start:0;pointer-events:auto;border-start-end-radius:16px;border-end-end-radius:16px;translate:calc(var(--_shift, 0%) * var(--_rtl)) 0;transition:translate var(--_dur-long) var(--_easing),visibility var(--_dur-long) var(--_easing)}:host([data-variant=modal][data-position=end]) .ars-nav{inset-inline-start:auto;inset-inline-end:0;border-radius:0;border-start-start-radius:16px;border-end-start-radius:16px}:host([data-variant=modal].ars-navigation--hidden) .ars-nav__scrim{opacity:0;pointer-events:none}:host([data-variant=modal].ars-navigation--hidden) .ars-nav{--_shift: -100%;visibility:hidden}:host([data-variant=modal][data-position=end].ars-navigation--hidden) .ars-nav{--_shift: 100%}.ars-nav__scrim{position:absolute;inset:0;background:var(--_scrim);opacity:1;pointer-events:auto;transition:opacity var(--_dur-long) var(--_easing)}:host(:not([data-variant=bar])) .ars-nav__items--bottom{flex:0 0 auto;margin-block-start:auto;overflow:visible}:host([data-align=center]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe center}:host([data-align=bottom]) .ars-nav__items:not(.ars-nav__items--bottom){justify-content:safe flex-end}:host(.ars-navigation--elevated) .ars-nav{box-shadow:0 1px 3px #0000004d,0 4px 8px 3px #00000026}:host(.ars-navigation--hidden):not([data-variant=modal]){display:none}.ars-nav__icon--image{object-fit:contain}.ars-nav__icon--sprite{display:inline-block;flex:none;width:var(--sp-size, 24px);height:var(--sp-size, 24px);background-image:var(--sp-url);background-repeat:no-repeat;background-size:var(--sp-sheet-x, auto) var(--sp-sheet-y, auto);background-position:calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-x, 0px)) calc(var(--sp-frame, var(--sp-normal, 0)) * var(--sp-step-y, 0px))}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon--sprite{--sp-frame: var(--sp-hover)}.ars-nav__item--selected .ars-nav__icon--sprite,.ars-nav-submenu__item--selected .ars-nav__icon--sprite,:host([data-variant=bar]) .ars-nav__item--ancestor .ars-nav__icon--sprite,:host([data-variant=rail]) .ars-nav__item--ancestor .ars-nav__icon--sprite{--sp-frame: var(--sp-active)}.ars-nav__item--disabled .ars-nav__icon--sprite,.ars-nav__item:where(:disabled) .ars-nav__icon--sprite,.ars-nav-submenu__item:where(:disabled,[aria-disabled=true]) .ars-nav__icon--sprite{--sp-frame: var(--sp-disabled)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__icon,.ars-nav-submenu__item:where(:hover,:focus-visible) .ars-nav__icon{transform:scale(var(--_icon-hover-scale, 1.12))}.ars-nav__item--selected .ars-nav__icon,.ars-nav-submenu__item--selected .ars-nav__icon{transform:scale(1)}.ars-nav__item:where(:active) .ars-nav__icon,.ars-nav-submenu__item:where(:active) .ars-nav__icon{transform:scale(var(--_icon-press-scale, .92));transition-duration:var(--_dur-short, .15s)}:host([data-variant=bar]) .ars-nav__item--icon-only{flex:0 0 auto;min-width:56px;max-width:72px}.ars-nav__chevron{position:relative;z-index:1;flex:none;margin-inline-start:8px;width:20px;height:20px;font-size:20px;line-height:20px;color:var(--_icon);rotate:0deg;opacity:0;transition:rotate var(--_dur) var(--_easing),opacity var(--_dur-short) var(--_easing)}.ars-nav__item:where(:hover,:focus-visible) .ars-nav__chevron{opacity:1}@media(hover:none){.ars-nav__chevron{opacity:1}}.ars-nav__chevron--open{rotate:180deg}.ars-nav__item[data-depth=\"1\"]{--_depth-indent: 24px}.ars-nav__item[data-depth=\"2\"]{--_depth-indent: 48px}.ars-nav__item[data-depth=\"3\"]{--_depth-indent: 72px}.ars-nav-submenu{--_easing: var(--ars-navigation-easing, cubic-bezier(.2, 0, 0, 1));--_dur-short: var(--ars-navigation-duration-short, .15s);--_dur: var(--ars-navigation-duration, .25s);--_dur-long: var(--ars-navigation-duration-long, .4s);--_icon-hover-scale: var(--ars-navigation-icon-hover-scale, 1.12);--_icon-press-scale: var(--ars-navigation-icon-press-scale, .92);--_state: var(--ars-navigation-state-layer-color, var(--mat-sys-on-surface, #191c1b));--_indicator: var(--ars-navigation-indicator-color, var(--mat-sys-secondary-container, #cce8e2));box-sizing:border-box;display:flex;flex-direction:column;gap:2px;min-width:200px;max-width:320px;max-height:60vh;padding:8px;border-radius:12px;background:var(--ars-navigation-menu-container-color, var(--ars-navigation-container-color, var(--mat-sys-surface-container-high, #e7e9e8)));color:var(--ars-navigation-label-color, var(--mat-sys-on-surface, #191c1b));box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026;overflow-y:auto;overscroll-behavior:contain}.ars-nav-submenu__item{box-sizing:border-box;display:flex;align-items:center;gap:12px;flex:none;min-height:48px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;text-align:start;text-decoration:none;cursor:pointer;appearance:none}.ars-nav-submenu__item--grouped{padding-inline-start:var(--ars-navigation-menu-group-indent, 24px)}.ars-nav-submenu__item:hover{background:color-mix(in srgb,currentColor 8%,transparent)}.ars-nav-submenu__item:focus-visible{outline:3px solid var(--ars-navigation-focus-color, var(--ars-color-primary, #00a293));outline-offset:-3px}.ars-nav-submenu__item--selected .ars-nav-submenu__label{font-weight:var(--ars-navigation-selected-font-weight, 700)}.ars-nav-submenu__item--selected{background:var(--_indicator);color:var(--ars-navigation-active-icon-color, var(--mat-sys-on-secondary-container, #0b1f1c))}.ars-nav-submenu__item--selected:where(:hover,:focus-visible){background:color-mix(in srgb,var(--_state) 8%,var(--_indicator))}.ars-nav-submenu__item:disabled,.ars-nav-submenu__item[aria-disabled=true]{opacity:.38;pointer-events:none}.ars-nav-submenu__heading{padding:12px 12px 4px;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;text-transform:uppercase;opacity:.7}.ars-nav-submenu__heading:first-child{padding-top:4px}.ars-nav-submenu__label{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--ars-navigation-label-lines, 2);line-clamp:var(--ars-navigation-label-lines, 2);flex:1 1 auto;min-width:0;padding-block:8px;font-size:14px;line-height:var(--ars-navigation-label-line-height, 18px);font-weight:500;letter-spacing:.1px;white-space:normal;overflow-wrap:anywhere;overflow:hidden}.ars-nav-submenu__trailing{flex:none;font-size:11px;line-height:16px;font-weight:500;letter-spacing:.5px;opacity:.8}@media(prefers-reduced-motion:reduce){:host{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}:host([data-indicator=wide]) .ars-nav__item:before,:host([data-indicator=compact]) .ars-nav__icon-box:before{transform:none}.ars-nav-submenu{--_dur-short: 0ms;--_dur: 0ms;--_dur-long: 0ms;--_icon-hover-scale: 1;--_icon-press-scale: 1}}@media(forced-colors:active){:host([data-indicator=compact]) .ars-nav__item--selected .ars-nav__icon-box:before,:host([data-indicator=wide]) .ars-nav__item--selected:before{background:Highlight;forced-color-adjust:none}.ars-nav__item:focus-visible{outline:3px solid CanvasText}}\n"]
1175
+ }]
1176
+ }],
1177
+ ctorParameters: () => [],
1178
+ propDecorators: {
1179
+ items: [{
1180
+ type: i0.Input,
1181
+ args: [{
1182
+ isSignal: true,
1183
+ alias: "items",
1184
+ required: false
1185
+ }]
1186
+ }],
1187
+ sections: [{
1188
+ type: i0.Input,
1189
+ args: [{
1190
+ isSignal: true,
1191
+ alias: "sections",
1192
+ required: false
1193
+ }]
1194
+ }],
1195
+ variant: [{
1196
+ type: i0.Input,
1197
+ args: [{
1198
+ isSignal: true,
1199
+ alias: "variant",
1200
+ required: false
1201
+ }]
1202
+ }],
1203
+ autoVariants: [{
1204
+ type: i0.Input,
1205
+ args: [{
1206
+ isSignal: true,
1207
+ alias: "autoVariants",
1208
+ required: false
1209
+ }]
1210
+ }],
1211
+ selectedId: [{
1212
+ type: i0.Input,
1213
+ args: [{
1214
+ isSignal: true,
1215
+ alias: "selectedId",
1216
+ required: false
1217
+ }]
1218
+ }, {
1219
+ type: i0.Output,
1220
+ args: ["selectedIdChange"]
1221
+ }],
1222
+ expandedIds: [{
1223
+ type: i0.Input,
1224
+ args: [{
1225
+ isSignal: true,
1226
+ alias: "expandedIds",
1227
+ required: false
1228
+ }]
1229
+ }, {
1230
+ type: i0.Output,
1231
+ args: ["expandedIdsChange"]
1232
+ }],
1233
+ open: [{
1234
+ type: i0.Input,
1235
+ args: [{
1236
+ isSignal: true,
1237
+ alias: "open",
1238
+ required: false
1239
+ }]
1240
+ }, {
1241
+ type: i0.Output,
1242
+ args: ["openChange"]
1243
+ }],
1244
+ labelVisibility: [{
1245
+ type: i0.Input,
1246
+ args: [{
1247
+ isSignal: true,
1248
+ alias: "labelVisibility",
1249
+ required: false
1250
+ }]
1251
+ }],
1252
+ itemLayout: [{
1253
+ type: i0.Input,
1254
+ args: [{
1255
+ isSignal: true,
1256
+ alias: "itemLayout",
1257
+ required: false
1258
+ }]
1259
+ }],
1260
+ childIcons: [{
1261
+ type: i0.Input,
1262
+ args: [{
1263
+ isSignal: true,
1264
+ alias: "childIcons",
1265
+ required: false
1266
+ }]
1267
+ }],
1268
+ dense: [{
1269
+ type: i0.Input,
1270
+ args: [{
1271
+ isSignal: true,
1272
+ alias: "dense",
1273
+ required: false
1274
+ }]
1275
+ }],
1276
+ alignment: [{
1277
+ type: i0.Input,
1278
+ args: [{
1279
+ isSignal: true,
1280
+ alias: "alignment",
1281
+ required: false
1282
+ }]
1283
+ }],
1284
+ position: [{
1285
+ type: i0.Input,
1286
+ args: [{
1287
+ isSignal: true,
1288
+ alias: "position",
1289
+ required: false
1290
+ }]
1291
+ }],
1292
+ headline: [{
1293
+ type: i0.Input,
1294
+ args: [{
1295
+ isSignal: true,
1296
+ alias: "headline",
1297
+ required: false
1298
+ }]
1299
+ }],
1300
+ showMenuButton: [{
1301
+ type: i0.Input,
1302
+ args: [{
1303
+ isSignal: true,
1304
+ alias: "showMenuButton",
1305
+ required: false
1306
+ }]
1307
+ }],
1308
+ menuIcon: [{
1309
+ type: i0.Input,
1310
+ args: [{
1311
+ isSignal: true,
1312
+ alias: "menuIcon",
1313
+ required: false
1314
+ }]
1315
+ }],
1316
+ expandIcon: [{
1317
+ type: i0.Input,
1318
+ args: [{
1319
+ isSignal: true,
1320
+ alias: "expandIcon",
1321
+ required: false
1322
+ }]
1323
+ }],
1324
+ overflowMode: [{
1325
+ type: i0.Input,
1326
+ args: [{
1327
+ isSignal: true,
1328
+ alias: "overflowMode",
1329
+ required: false
1330
+ }]
1331
+ }],
1332
+ overflowIcon: [{
1333
+ type: i0.Input,
1334
+ args: [{
1335
+ isSignal: true,
1336
+ alias: "overflowIcon",
1337
+ required: false
1338
+ }]
1339
+ }],
1340
+ overflowLabel: [{
1341
+ type: i0.Input,
1342
+ args: [{
1343
+ isSignal: true,
1344
+ alias: "overflowLabel",
1345
+ required: false
1346
+ }]
1347
+ }],
1348
+ maxVisibleItems: [{
1349
+ type: i0.Input,
1350
+ args: [{
1351
+ isSignal: true,
1352
+ alias: "maxVisibleItems",
1353
+ required: false
1354
+ }]
1355
+ }],
1356
+ menuAriaLabel: [{
1357
+ type: i0.Input,
1358
+ args: [{
1359
+ isSignal: true,
1360
+ alias: "menuAriaLabel",
1361
+ required: false
1362
+ }]
1363
+ }],
1364
+ ariaLabel: [{
1365
+ type: i0.Input,
1366
+ args: [{
1367
+ isSignal: true,
1368
+ alias: "ariaLabel",
1369
+ required: false
1370
+ }]
1371
+ }],
1372
+ scrim: [{
1373
+ type: i0.Input,
1374
+ args: [{
1375
+ isSignal: true,
1376
+ alias: "scrim",
1377
+ required: false
1378
+ }]
1379
+ }],
1380
+ closeOnSelect: [{
1381
+ type: i0.Input,
1382
+ args: [{
1383
+ isSignal: true,
1384
+ alias: "closeOnSelect",
1385
+ required: false
1386
+ }]
1387
+ }],
1388
+ elevated: [{
1389
+ type: i0.Input,
1390
+ args: [{
1391
+ isSignal: true,
1392
+ alias: "elevated",
1393
+ required: false
1394
+ }]
1395
+ }],
1396
+ bordered: [{
1397
+ type: i0.Input,
1398
+ args: [{
1399
+ isSignal: true,
1400
+ alias: "bordered",
1401
+ required: false
1402
+ }]
1403
+ }],
1404
+ tooltips: [{
1405
+ type: i0.Input,
1406
+ args: [{
1407
+ isSignal: true,
1408
+ alias: "tooltips",
1409
+ required: false
1410
+ }]
1411
+ }],
1412
+ routerSync: [{
1413
+ type: i0.Input,
1414
+ args: [{
1415
+ isSignal: true,
1416
+ alias: "routerSync",
1417
+ required: false
1418
+ }]
1419
+ }],
1420
+ relativeTo: [{
1421
+ type: i0.Input,
1422
+ args: [{
1423
+ isSignal: true,
1424
+ alias: "relativeTo",
1425
+ required: false
1426
+ }]
1427
+ }],
1428
+ width: [{
1429
+ type: i0.Input,
1430
+ args: [{
1431
+ isSignal: true,
1432
+ alias: "width",
1433
+ required: false
1434
+ }]
1435
+ }],
1436
+ railWidth: [{
1437
+ type: i0.Input,
1438
+ args: [{
1439
+ isSignal: true,
1440
+ alias: "railWidth",
1441
+ required: false
1442
+ }]
1443
+ }],
1444
+ minWidth: [{
1445
+ type: i0.Input,
1446
+ args: [{
1447
+ isSignal: true,
1448
+ alias: "minWidth",
1449
+ required: false
1450
+ }]
1451
+ }],
1452
+ maxWidth: [{
1453
+ type: i0.Input,
1454
+ args: [{
1455
+ isSignal: true,
1456
+ alias: "maxWidth",
1457
+ required: false
1458
+ }]
1459
+ }],
1460
+ hidden: [{
1461
+ type: i0.Input,
1462
+ args: [{
1463
+ isSignal: true,
1464
+ alias: "hidden",
1465
+ required: false
1466
+ }]
1467
+ }],
1468
+ itemSelected: [{
1469
+ type: i0.Output,
1470
+ args: ["itemSelected"]
1471
+ }],
1472
+ menuClick: [{
1473
+ type: i0.Output,
1474
+ args: ["menuClick"]
1475
+ }],
1476
+ itemElements: [{
1477
+ type: i0.ViewChildren,
1478
+ args: ["navItem", { isSignal: true }]
1479
+ }],
1480
+ panelElements: [{
1481
+ type: i0.ViewChildren,
1482
+ args: ["panelItem", { isSignal: true }]
1483
+ }]
1484
+ }
1485
+ });
1215
1486
  export { DEFAULT_NAVIGATION_AUTO_VARIANTS, EXPANDED_NAVIGATION_VARIANTS, NAVIGATION_OVERFLOW_ID, NavigationBarComponent };
1216
- //# sourceMappingURL=arsedizioni-ars-utils-ui.navigation.mjs.map
1487
+
1488
+ //# sourceMappingURL=arsedizioni-ars-utils-ui.navigation.mjs.map