@arsedizioni/ars-utils 22.6.80 → 22.6.82

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.
@@ -623,6 +623,29 @@ class NavigationBarComponent {
623
623
  return result;
624
624
  }, /* @ts-ignore */
625
625
  ...(ngDevMode ? [{ debugName: "highlightedIds" }] : /* istanbul ignore next */ []));
626
+ /**
627
+ * Ids of the rows that close an expanded branch: the last nested destination
628
+ * before the list goes back to the top level, or before it ends. They are what
629
+ * carries the gap that separates a branch from what follows it — a margin on
630
+ * the parent would not do, because the branch it opens is not inside it.
631
+ */
632
+ this.branchEndIds = computed(() => {
633
+ const result = new Set();
634
+ for (const group of this.visibleGroups()) {
635
+ for (const section of group.sections) {
636
+ const items = section.items;
637
+ for (let i = 0; i < items.length; i++) {
638
+ if (items[i].depth === 0)
639
+ continue;
640
+ const next = items[i + 1];
641
+ if (!next || next.depth === 0)
642
+ result.add(items[i].item.id);
643
+ }
644
+ }
645
+ }
646
+ return result;
647
+ }, /* @ts-ignore */
648
+ ...(ngDevMode ? [{ debugName: "branchEndIds" }] : /* istanbul ignore next */ []));
626
649
  /**
627
650
  * Ids of the ancestors of the active destination. No variant ever shows a parent
628
651
  * as selected, so this trail is what tells the user where they are: it marks the
@@ -1180,7 +1203,7 @@ class NavigationBarComponent {
1180
1203
  return withoutFragment.split('?')[0] ?? '';
1181
1204
  }
1182
1205
  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, 48px);--_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__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 }); }
1206
+ 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 branchEnds = branchEndIds();\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--branch-end]=\"branchEnds.has(r.item.id)\"\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--branch-end]=\"branchEnds.has(r.item.id)\"\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--branch-end,:host([data-variant=drawer]) .ars-nav__item--branch-end,:host([data-variant=modal]) .ars-nav__item--branch-end{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
1207
  }
1185
1208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: NavigationBarComponent, decorators: [{
1186
1209
  type: Component,
@@ -1201,7 +1224,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
1201
1224
  '[style.--ars-navigation-rail-width]': 'railWidthStyle()',
1202
1225
  '[style.--ars-navigation-min-width]': 'minWidthStyle()',
1203
1226
  '[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, 48px);--_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__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"] }]
1227
+ }, 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 branchEnds = branchEndIds();\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--branch-end]=\"branchEnds.has(r.item.id)\"\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--branch-end]=\"branchEnds.has(r.item.id)\"\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--branch-end,:host([data-variant=drawer]) .ars-nav__item--branch-end,:host([data-variant=modal]) .ars-nav__item--branch-end{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
1228
  }], 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
1229
 
1207
1230
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-ui.navigation.mjs","sources":["../../../projects/ars-utils/ui.navigation/navigation.definitions.ts","../../../projects/ars-utils/ui.navigation/navigation-bar.component.ts","../../../projects/ars-utils/ui.navigation/navigation-bar.component.html","../../../projects/ars-utils/ui.navigation/public_api.ts","../../../projects/ars-utils/ui.navigation/arsedizioni-ars-utils-ui.navigation.ts"],"sourcesContent":["/**\n * @file navigation.definitions.ts\n *\n * Data model shared by every variant of the Material Design 3 (Expressive)\n * navigation component: Navigation bar, Navigation rail (collapsed and\n * expanded) and Navigation drawer (standard and modal).\n *\n * Reference: https://m3.material.io/components/navigation-bar/specs\n * https://m3.material.io/components/navigation-rail/specs\n * https://m3.material.io/components/navigation-drawer/specs\n */\n\nimport { BreakpointAlias } from \"@arsedizioni/ars-utils/ui\";\n\n\n\n\n/**\n * Rendering variants supported by the component.\n *\n * - `bar` — Navigation bar, horizontal, anchored to the bottom edge (compact windows).\n * - `rail` — Collapsed navigation rail, vertical, 96dp wide (medium / expanded windows).\n * - `rail-expanded` — Expanded navigation rail, 220dp+, labels beside icons, supports sections.\n * - `drawer` — Standard navigation drawer, 360dp, inline with the page content.\n * - `modal` — Modal navigation drawer: same as `drawer` but overlaid on a scrim.\n * - `auto` — Resolved at runtime from the active CDK breakpoint (see `autoVariants`).\n */\nexport type NavigationVariant = 'auto' | 'bar' | 'rail' | 'rail-expanded' | 'drawer' | 'modal';\n\n/** Variants that can actually be rendered, i.e. every variant except `auto`. */\nexport type ResolvedNavigationVariant = Exclude<NavigationVariant, 'auto'>;\n\n/**\n * Label visibility policy, mirroring the four Material label visibility modes.\n *\n * - `auto` — Labels are always shown (current M3 guidance).\n * - `labeled` — Labels are always shown.\n * - `selected` — Only the active destination shows its label (legacy M3 \"auto\" behaviour).\n * - `unlabeled` — Icons only; the accessible name comes from `aria-label` / tooltip.\n */\nexport type NavigationLabelVisibility = 'auto' | 'labeled' | 'selected' | 'unlabeled';\n\n/**\n * Item layout inside a destination.\n *\n * - `vertical` — Icon stacked above the label (M3 default for compact windows).\n * - `horizontal` — Icon at the start of the label (M3 Expressive, medium windows and above).\n * - `auto` — `vertical` on compact windows, `horizontal` from 600dp upwards; always\n * `horizontal` for the expanded rail and the drawer.\n */\nexport type NavigationItemLayout = 'auto' | 'vertical' | 'horizontal';\n\n/** Vertical alignment of the destination list inside a rail. */\nexport type NavigationAlignment = 'top' | 'center' | 'bottom';\n\n/** Side the rail / drawer is anchored to. Automatically mirrored in RTL. */\nexport type NavigationPosition = 'start' | 'end';\n\n/**\n * Badge attached to a destination.\n * When `value` is `undefined` a small dot badge is rendered, otherwise a large\n * badge showing the value (clamped to `max`).\n */\nexport interface NavigationBadge {\n /** Numeric or textual content of the badge. Leave `undefined` for a dot badge. */\n value?: number | string;\n /** Upper bound for numeric values; above it the badge renders `${max}+`. Defaults to 999. */\n max?: number;\n /** Accessible description announced together with the destination label. */\n ariaLabel?: string;\n /** Optional CSS colour override for this badge only. */\n color?: string;\n}\n\n/**\n * Frame indices of a sprite sheet, one per interaction state.\n *\n * The same shape describes the light set (declared inline on the sprite) and the\n * dark set (declared under `NavigationIconSprite.dark`), so a sheet holding both\n * themes needs no duplicated geometry.\n */\nexport interface NavigationSpriteFrames {\n /** Zero-based frame index for the resting state. Defaults to 0. */\n normal?: number;\n /** Frame index used on hover and on keyboard focus. Defaults to `normal`. */\n hover?: number;\n /** Frame index used when the destination is selected. Defaults to `hover`. */\n active?: number;\n /** Frame index used when the destination is disabled. Defaults to `normal`. */\n disabled?: number;\n}\n\n/**\n * Sprite sheet descriptor: a single image holding every state frame of an icon,\n * revealed by shifting `background-position` — no extra request per state.\n *\n * Frames are assumed to be square and evenly spaced, laid out along a single\n * axis. Two geometries are described, and they are NOT the same thing:\n * - `size` is the side of a frame INSIDE the image file;\n * - `renderSize` is the side the icon is actually drawn at.\n * The component rescales the whole sheet through `background-size`, so a strip\n * of 26px frames can be drawn at the 24px of the surrounding Material icons\n * without the neighbouring frames bleeding in.\n *\n * The frame indices declared inline are the light-theme set; `dark` overrides\n * the ones that differ when the dark theme is active. A sheet that carries a\n * single set simply omits `dark`.\n */\nexport interface NavigationIconSprite extends NavigationSpriteFrames {\n /** URL of the sprite sheet. */\n url: string;\n /** Side of a single frame inside the image file, in pixels. Defaults to 24. */\n size?: number;\n /** Side the icon is drawn at, in pixels. Defaults to `size`. */\n renderSize?: number;\n /**\n * Total number of frames in the sheet, needed to rescale it.\n * Defaults to the highest referenced frame index plus one, which is correct\n * for any sheet that has no trailing unused frame.\n */\n frames?: number;\n /** Axis the frames are laid out along. Defaults to `vertical`. */\n direction?: 'vertical' | 'horizontal';\n /** Frame indices used when the dark theme is active. Defaults to the light ones. */\n dark?: NavigationSpriteFrames;\n}\n\n/** A single navigation destination. */\nexport interface NavigationItem {\n /** Stable unique identifier; used as the `@for` track key and as the selection value. */\n id: string;\n /** Visible label. Also used as the accessible name and as the tooltip fallback. */\n label: string;\n /**\n * Shorter label used ONLY where the label sits under the icon — the navigation\n * bar and the collapsed rail — which is where a long name wraps or is cut.\n * Defaults to `label`. The literal `'none'` drops the label there altogether and\n * leaves the icon alone, for a destination whose icon says it all.\n * The accessible name and the tooltip always keep `label`, so nothing is lost:\n * the short form — or no form — is what is drawn, the full one is what is\n * announced, and the tooltip is what shows it on hover.\n */\n labelVertical?: string;\n /** Material Symbols ligature rendered when the destination is NOT selected. */\n icon?: string;\n /** Material Symbols ligature rendered when the destination IS selected (usually the filled variant). */\n activeIcon?: string;\n /** Path of a raster / vector image rendered as the icon. Takes precedence over `icon`. */\n imageIcon?: string;\n /** Image used when the destination is selected. Takes precedence over `activeIcon`. */\n activeImageIcon?: string;\n /**\n * Sprite sheet holding every state frame of the icon. Takes precedence over\n * `imageIcon` and `icon`; state changes cost one `background-position` shift.\n */\n sprite?: NavigationIconSprite;\n /** Name of an SVG icon registered in `MatIconRegistry`; takes precedence over `icon`. */\n svgIcon?: string;\n /** SVG icon used when the destination is selected; takes precedence over `activeIcon`. */\n activeSvgIcon?: string;\n /** Badge shown on top of the icon (collapsed variants) or at the trailing edge (expanded variants). */\n badge?: NavigationBadge;\n /** Short trailing text shown at the end of the row in the expanded rail and in the drawer. */\n trailing?: string;\n /** When `true` the destination is rendered dimmed and is not interactive. */\n disabled?: boolean;\n /**\n * When `true` the destination is drawn in a much quieter colour while staying\n * fully usable: it is clicked, navigated to and selected exactly like any other.\n * Unlike `disabled` it says \"this matters less right now\", not \"you cannot use\n * this\", so nothing is turned off — not the pointer, not the keyboard, not the\n * accessible name.\n */\n greyed?: boolean;\n /**\n * When `true` the destination is not rendered inline in the compact variants:\n * it is moved into the overflow menu instead. Which variants count as compact\n * is decided by the component's `overflowMode` input.\n */\n hideWhenCompact?: boolean;\n /** Tooltip text; defaults to `label` when the label is not visible. */\n tooltip?: string;\n /** Router commands used to build the destination URL. */\n route?: string | readonly unknown[];\n /** Query parameters appended to `route`. */\n queryParams?: Record<string, unknown>;\n /** Fragment appended to `route`. */\n fragment?: string;\n /** When `true` the route must match the whole URL to mark the destination active. Defaults to `false`. */\n exact?: boolean;\n /** External URL. Rendered as a plain anchor and never matched against the router. */\n href?: string;\n /** Anchor target used together with `href`. */\n target?: string;\n /** Explicit accessible name, when the visible label is not descriptive enough. */\n ariaLabel?: string;\n /**\n * Nested destinations. Clicking a destination with children never navigates: it\n * expands the group inline (expanded rail / drawer) or opens it in a floating\n * panel (bar / collapsed rail). Giving it a `route` anyway is still meaningful —\n * the destination is matched against the router like any other, so the row shows\n * as selected while that route is active, even though only its children take the\n * user there.\n */\n children?: readonly NavigationItem[];\n /** Initial expansion state of a destination that has `children`. Defaults to `false`. */\n expanded?: boolean;\n /**\n * Edge the destination is pinned to inside a rail or a drawer.\n * `bottom` destinations are pushed to the end of the surface. Ignored by the\n * navigation bar, where every destination shares the same row.\n */\n align?: 'top' | 'bottom';\n /** Arbitrary payload echoed back in `NavigationSelection`. */\n data?: unknown;\n}\n\n/**\n * A group of destinations. Section headlines and dividers are only rendered by\n * the expanded rail and by the drawer, exactly as described by the M3 specs.\n */\nexport interface NavigationSection {\n /** Stable unique identifier; used as the `@for` track key. */\n id: string;\n /** Optional headline rendered above the group. */\n label?: string;\n /** Destinations belonging to the section. */\n items: readonly NavigationItem[];\n /** When `true` a divider is rendered after the section. */\n divider?: boolean;\n}\n\n/** Payload emitted when a destination is activated. */\nexport interface NavigationSelection {\n /** The activated destination. */\n item: NavigationItem;\n /** The section the destination belongs to, when sections are in use. */\n section?: NavigationSection;\n /** The parent destination, when a nested destination was activated. */\n parent?: NavigationItem;\n /** Zero-based index of the destination across the whole flattened list. */\n index: number;\n}\n\n/**\n * Policy deciding where `hideWhenCompact` destinations are collapsed into the\n * overflow menu.\n *\n * - `bar` — only in the navigation bar (default).\n * - `compact` — in the navigation bar and in the collapsed rail.\n * - `never` — `hideWhenCompact` is ignored and every destination stays inline.\n */\nexport type NavigationOverflowMode = 'bar' | 'compact' | 'never';\n\n/**\n * Identifier of the synthesized overflow destination. Use it to recognise the\n * overflow entry inside `itemSelected`.\n */\nexport const NAVIGATION_OVERFLOW_ID = '__overflow';\n\n/** Map of breakpoint alias to the variant used when `variant` is `auto`. */\nexport type NavigationAutoVariants = Partial<Record<BreakpointAlias, ResolvedNavigationVariant>>;\n\n/**\n * Default `auto` mapping, aligned with the Material 3 window size classes:\n * compact windows get the navigation bar, medium and expanded windows get the\n * collapsed rail, large and extra-large windows get the expanded rail.\n */\nexport const DEFAULT_NAVIGATION_AUTO_VARIANTS: Required<NavigationAutoVariants> = {\n xs: 'bar',\n sm: 'rail',\n md: 'rail',\n lg: 'rail-expanded',\n xl: 'rail-expanded',\n};\n\n/** Variants that render labels beside the icon and support sections and dividers. */\nexport const EXPANDED_NAVIGATION_VARIANTS: readonly ResolvedNavigationVariant[] = [\n 'rail-expanded',\n 'drawer',\n 'modal',\n];\n","/**\n * @file navigation-bar.component.ts\n *\n * Material Design 3 (Expressive) navigation component.\n *\n * A single adaptive component that renders every navigation surface described\n * by the M3 specs — Navigation bar, collapsed Navigation rail, expanded\n * Navigation rail, standard Navigation drawer and modal Navigation drawer —\n * from one destination model.\n *\n * Design goals:\n * - Zoneless / signal based: no `NgZone`, no `setTimeout`, no manual change detection.\n * - `OnPush` + pre-computed render models: the template contains no method calls.\n * - Zero-DOM active indicator and state layer (rendered as pseudo-elements).\n * - Nested destinations expand inline in the wide variants and open in a single\n * shared overlay in the compact ones — one overlay for the whole component,\n * not one menu instance per destination.\n * - Router integration that degrades gracefully when no `Router` is provided.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CdkConnectedOverlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { EMPTY, distinctUntilChanged, filter, map } from 'rxjs';\nimport {\n DEFAULT_NAVIGATION_AUTO_VARIANTS,\n EXPANDED_NAVIGATION_VARIANTS,\n NAVIGATION_OVERFLOW_ID,\n NavigationAlignment,\n NavigationAutoVariants,\n NavigationIconSprite,\n NavigationItem,\n NavigationItemLayout,\n NavigationLabelVisibility,\n NavigationOverflowMode,\n NavigationPosition,\n NavigationSection,\n NavigationSelection,\n NavigationSpriteFrames,\n NavigationVariant,\n ResolvedNavigationVariant,\n} from './navigation.definitions';\n\nimport { ThemeService } from '@arsedizioni/ars-utils/core';\nimport { MediaObserver } from '@arsedizioni/ars-utils/ui';\n\n/** Internal, pre-computed render model for a single destination. */\ninterface NavigationRenderItem {\n /** The source destination. */\n readonly item: NavigationItem;\n /** Owning section, when sections are in use. */\n readonly section?: NavigationSection;\n /** Parent destination, for nested destinations. */\n readonly parent?: NavigationItem;\n /** Zero-based index across the whole flattened destination list. */\n readonly index: number;\n /** Nesting level: `0` for a root destination. */\n readonly depth: number;\n /** Resolved URL, when the destination is routed or external. */\n readonly href?: string;\n /** `true` when the destination navigates through the Angular router. */\n readonly routed: boolean;\n /** Material Symbols ligature for the unselected state. */\n readonly iconOff?: string;\n /** Material Symbols ligature for the selected state. */\n readonly iconOn?: string;\n /** Registered SVG icon name for the unselected state. */\n readonly svgOff?: string;\n /** Registered SVG icon name for the selected state. */\n readonly svgOn?: string;\n /** Image URL for the unselected state. */\n readonly imageOff?: string;\n /** Image URL for the selected state. */\n readonly imageOn?: string;\n /** Inline custom properties driving a sprite-sheet icon, when one is used. */\n readonly spriteStyle?: Record<string, string>;\n /** Rendered badge text; empty string means \"dot badge\". */\n readonly badgeText: string;\n /** `true` when the destination carries a badge of any kind. */\n readonly hasBadge: boolean;\n /** `true` when the destination never renders its label, whatever the label policy. */\n readonly iconOnly: boolean;\n /** `true` when the destination owns nested destinations. */\n readonly hasChildren: boolean;\n /** Pre-computed render models of the nested destinations. */\n readonly children: readonly NavigationRenderItem[];\n /** Accessible name announced for the destination. */\n readonly ariaLabel: string;\n /** Tooltip text used when the label is not visible. */\n readonly tooltip: string;\n}\n\n/** Internal render model for a section and its destinations. */\ninterface NavigationRenderSection {\n /** The source section. */\n readonly section: NavigationSection;\n /** Destinations of the section. */\n readonly items: readonly NavigationRenderItem[];\n}\n\n/** Internal render model for one row of the floating submenu panel. */\ninterface NavigationPanelEntry {\n /** Stable `@for` track key. */\n readonly key: string;\n /** Heading text, when the row is a group heading. */\n readonly label?: string;\n /** Destination to render, when the row is an actual entry. */\n readonly render?: NavigationRenderItem;\n /** `true` when the entry sits under a heading, and is indented to show it. */\n readonly grouped?: boolean;\n}\n\n/** Internal render model for one of the two anchoring groups of a surface. */\ninterface NavigationRenderGroup {\n /** Edge the group is pinned to. */\n readonly align: 'top' | 'bottom';\n /** Sections belonging to the group. */\n readonly sections: readonly NavigationRenderSection[];\n}\n\n/** Default sprite geometry, applied when a `NavigationIconSprite` omits a field. */\nconst SPRITE_DEFAULT_SIZE = 24;\n\n/** Breathing space left above the parent row, and below the end of a branch, when scrolling. */\nconst BRANCH_SCROLL_PADDING = 8;\n\n/**\n * Tells whether the user asked the system for less animation.\n * @returns `true` when `prefers-reduced-motion` is set, `false` when it is not or cannot be read.\n */\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n@Component({\n selector: 'navigation-bar',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, CdkTrapFocus, CdkConnectedOverlay],\n templateUrl: './navigation-bar.component.html',\n styleUrl: './navigation-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ars-navigation',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-layout]': 'resolvedLayout()',\n '[attr.data-align]': 'alignment()',\n '[attr.data-position]': 'position()',\n '[attr.data-labels]': 'resolvedLabelVisibility()',\n '[attr.data-indicator]': 'indicatorMode()',\n '[class.ars-navigation--open]': 'isOverlayOpen()',\n '[class.ars-navigation--elevated]': 'elevated()',\n '[class.ars-navigation--bordered]': 'bordered()',\n '[class.ars-navigation--dense]': 'dense()',\n '[class.ars-navigation--hidden]': 'isHidden()',\n '[style.--ars-navigation-width]': 'widthStyle()',\n '[style.--ars-navigation-rail-width]': 'railWidthStyle()',\n '[style.--ars-navigation-min-width]': 'minWidthStyle()',\n '[style.--ars-navigation-max-width]': 'maxWidthStyle()',\n },\n})\nexport class NavigationBarComponent {\n\n // ── Injected dependencies ──────────────────────────────────────────────────\n\n private readonly media = inject(MediaObserver);\n // Optional for the same reason `Router` is: the component must still render\n // inside a bare test bed, where no application theme has been bootstrapped.\n private readonly themeService = inject(ThemeService, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly directionality = inject(Directionality, { optional: true });\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Used to schedule the post-render read that reveals a branch just expanded. */\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n\n /** Flat list of destinations. Ignored when `sections` is provided. */\n readonly items = input<readonly NavigationItem[]>([]);\n\n /** Grouped destinations. Section headlines and dividers only render in the expanded variants. */\n readonly sections = input<readonly NavigationSection[]>([]);\n\n /** Rendering variant. `auto` resolves from the active breakpoint through `autoVariants`. */\n readonly variant = input<NavigationVariant>('auto');\n\n /** Breakpoint → variant map used when `variant` is `auto`. Missing entries fall back to the M3 defaults. */\n readonly autoVariants = input<NavigationAutoVariants>({});\n\n /** Two-way bound id of the selected destination. The router, when active, takes precedence. */\n readonly selectedId = model<string | undefined>(undefined);\n\n /**\n * Two-way bound ids of the expanded parent destinations.\n * Leave unbound (`undefined`) to let the component manage the expansion state\n * on its own, seeding it from `NavigationItem.expanded` and auto-opening the\n * ancestors of the active destination.\n */\n readonly expandedIds = model<readonly string[] | undefined>(undefined);\n\n /** Two-way bound open state of the modal drawer. Ignored by the other variants. */\n readonly open = model<boolean>(false);\n\n /** Label visibility policy. */\n readonly labelVisibility = input<NavigationLabelVisibility>('auto');\n\n /** Icon / label arrangement inside a destination. */\n readonly itemLayout = input<NavigationItemLayout>('auto');\n\n /**\n * Icons of the nested destinations in the expanded variants (rail-expanded,\n * drawer, modal), where children are listed inline under their parent.\n * `false` — the default — renders those rows as label only, which keeps the\n * branch readable; the label stays aligned with the labels around it and a\n * badge moves to the trailing edge. Top level destinations always keep their\n * icon, and so do the children shown in the floating panel of the compact\n * variants.\n */\n readonly childIcons = input(false, { transform: booleanAttribute });\n\n /**\n * Compact rows in the expanded variants (rail-expanded, drawer, modal):\n * 48px instead of the 56px of the M3 spec, with the dependent measures\n * scaled along — nested rows 40px, labels one step smaller, tighter gaps.\n * The bar and the collapsed rail keep their own spec metrics.\n */\n readonly dense = input(false, { transform: booleanAttribute });\n\n /** Vertical alignment of the `top` destination group inside a rail. */\n readonly alignment = input<NavigationAlignment>('top');\n\n /** Edge the rail / drawer is anchored to. Mirrored automatically in RTL. */\n readonly position = input<NavigationPosition>('start');\n\n /** Headline rendered above the destinations in the expanded rail and in the drawer. */\n readonly headline = input<string | undefined>(undefined);\n\n /** When `true` a leading menu button is rendered; it emits `menuClick`. */\n readonly showMenuButton = input(false, { transform: booleanAttribute });\n\n /** Material Symbols ligature used by the menu button. */\n readonly menuIcon = input<string>('menu');\n\n /** Material Symbols ligature used by the expand / collapse chevron. */\n readonly expandIcon = input<string>('expand_more');\n\n /** Where `hideWhenCompact` destinations are collapsed into the overflow menu. */\n readonly overflowMode = input<NavigationOverflowMode>('bar');\n\n /** Material Symbols ligature of the overflow destination. */\n readonly overflowIcon = input<string>('more_vert');\n\n /** Accessible name and tooltip of the overflow destination, which renders icon-only. */\n readonly overflowLabel = input<string>('More');\n\n /**\n * Hard cap on the destinations rendered inline in the compact variants,\n * applied per anchoring group. The overflow destination counts as one slot.\n * `0` disables the cap; the M3 specs recommend 3 to 5 for the navigation bar.\n */\n readonly maxVisibleItems = input(0, { transform: numberAttribute });\n\n /** Accessible name of the menu button. */\n readonly menuAriaLabel = input<string>('Menu');\n\n /** Accessible name of the navigation landmark. */\n readonly ariaLabel = input<string>('Navigation');\n\n /** When `true` a scrim is rendered behind the modal drawer. */\n readonly scrim = input(true, { transform: booleanAttribute });\n\n /** When `true` the modal drawer closes as soon as a destination is activated. */\n readonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n /** When `true` the surface gets the M3 elevation-3 shadow. */\n readonly elevated = input(true, { transform: booleanAttribute });\n\n /** When `true` a 1px divider separates the surface from the page content. */\n readonly bordered = input(false, { transform: booleanAttribute });\n\n /** When `true` tooltips are shown for destinations whose label is not visible. */\n readonly tooltips = input(true, { transform: booleanAttribute });\n\n /** When `true` the selection follows the current router URL. */\n readonly routerSync = input(true, { transform: booleanAttribute });\n\n /** Route used to resolve relative `route` commands. Absolute resolution when omitted. */\n readonly relativeTo = input<ActivatedRoute | undefined>(undefined);\n\n /** Explicit surface width in pixels for the rail / drawer variants. `0` keeps the spec default. */\n readonly width = input(0, { transform: numberAttribute });\n\n /**\n * Explicit width in pixels of the COLLAPSED rail. `0` keeps the 96px of the\n * spec. It is separate from `width` because a surface set to `auto` is a\n * collapsed rail at one breakpoint and an expanded one at the next, and the\n * two want different widths; when both are given, this one wins on the\n * collapsed rail and `width` covers the rest.\n */\n readonly railWidth = input(0, { transform: numberAttribute });\n\n /**\n * Lower bound in pixels for the width of the expanded variants (rail-expanded,\n * drawer, modal). `0` keeps the default, which sets no floor. It is what keeps\n * the surface readable when its width comes from a percentage or from a\n * container that can shrink, instead of from `width`.\n */\n readonly minWidth = input(0, { transform: numberAttribute });\n\n /**\n * Upper bound in pixels for the width of the expanded variants (rail-expanded,\n * drawer, modal). `0` keeps the default, which is the width of the parent: the\n * surface never spills out of it, whatever `width` says.\n */\n readonly maxWidth = input(0, { transform: numberAttribute });\n\n /** When `true` the whole surface is hidden (animated off-screen) without being destroyed. */\n readonly hidden = input(false, { transform: booleanAttribute });\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n\n /** Emitted when a destination is activated by the user. */\n readonly itemSelected = output<NavigationSelection>();\n\n /** Emitted when the leading menu button is pressed. */\n readonly menuClick = output<void>();\n\n // ── View queries ───────────────────────────────────────────────────────────\n\n /** Focusable destination elements, in DOM order; used for keyboard roving. */\n private readonly itemElements = viewChildren<ElementRef<HTMLElement>>('navItem');\n\n /** Focusable entries of the floating submenu panel, in DOM order. */\n private readonly panelElements = viewChildren<ElementRef<HTMLElement>>('panelItem');\n\n // ── Router state ───────────────────────────────────────────────────────────\n\n /** Current router URL, kept in a signal so the template stays zoneless-friendly. */\n private readonly routerUrl = signal<string | undefined>(undefined);\n\n // ── Theme state ────────────────────────────────────────────────────────────\n\n /**\n * Ticks whenever the application theme moves. The emitted value is ignored on\n * purpose: it is a change notification, not the answer.\n *\n * Reads `themeService`, so it MUST stay below the injected dependencies: moved\n * above them it would read `undefined`, `?? EMPTY` would swallow it and the\n * theme would silently stop propagating, with nothing to show for it at\n * compile time.\n */\n private readonly themeChanged = toSignal(this.themeService?.changed ?? EMPTY, { initialValue: undefined });\n\n /**\n * `true` when the dark theme is active; selects the dark frame set of a sprite.\n *\n * The answer comes from `getTheme()`, the only one that resolves `auto`\n * against the OS preference. `getTheme()` already reads a signal for the\n * explicit modes, so `themeChanged()` is read for the one case that is not\n * reactive on its own: mode `auto` plus a change of the OS colour scheme,\n * which leaves the stored mode on `auto` and only travels through `changed`.\n * Falls back to the light set when no `ThemeService` is provided.\n */\n private readonly isDark = computed(() => {\n this.themeChanged();\n return this.themeService?.getTheme() === 'dark';\n });\n\n // ── Submenu overlay state ──────────────────────────────────────────────────\n\n /** Id of the destination whose children are currently shown in the floating panel. */\n private readonly popupId = signal<string | undefined>(undefined);\n\n /**\n * Destination whose children are currently shown in the floating panel.\n *\n * Derived from the id and NOT stored as an object: the render model is rebuilt\n * whenever the destinations, the resolved URLs or the theme change, and a\n * stored object would keep the panel painting the sprite frames of the\n * previous theme until the panel is closed and reopened.\n *\n * The search is recursive because a panel entry can itself own children and\n * open a panel of its own, and those nested render models are not part of the\n * top level of `visibleGroups`.\n *\n * Reads `visibleGroups`, which is declared further down: safe because\n * `computed` is lazy and nothing reads this before the first render — the\n * opposite of `themeChanged` above, which reads its dependency immediately.\n */\n protected readonly popupItem = computed<NavigationRenderItem | undefined>(() => {\n const id = this.popupId();\n if (id === undefined) return undefined;\n const find = (list: readonly NavigationRenderItem[]): NavigationRenderItem | undefined => {\n for (const rendered of list) {\n if (rendered.item.id === id) return rendered;\n const nested = find(rendered.children);\n if (nested) return nested;\n }\n return undefined;\n };\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n const hit = find(section.items);\n if (hit) return hit;\n }\n }\n // The destination went away while its panel was open.\n return undefined;\n });\n\n /** Element the floating panel is anchored to. */\n private readonly popupAnchor = signal<HTMLElement | undefined>(undefined);\n\n constructor() {\n const router = this.router;\n if (router) {\n this.routerUrl.set(router.url);\n router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map(e => e.urlAfterRedirects),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(url => this.routerUrl.set(url));\n }\n }\n\n // ── Derived state ──────────────────────────────────────────────────────────\n\n /** Sections actually rendered: the `sections` input, or a single implicit section wrapping `items`. */\n private readonly resolvedSections = computed<readonly NavigationSection[]>(() => {\n const sections = this.sections();\n if (sections.length > 0) return sections;\n return [{ id: '__default', items: this.items() }];\n });\n\n /** Every destination, nested ones included, in depth-first order. */\n private readonly allItems = computed<readonly NavigationItem[]>(() => {\n const result: NavigationItem[] = [];\n const walk = (list: readonly NavigationItem[]): void => {\n for (const item of list) {\n result.push(item);\n if (item.children?.length) walk(item.children);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** Map of destination id to the id of its parent destination. */\n private readonly parentOf = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const walk = (list: readonly NavigationItem[], parentId?: string): void => {\n for (const item of list) {\n if (parentId !== undefined) result.set(item.id, parentId);\n if (item.children?.length) walk(item.children, item.id);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** The variant to render, resolving `auto` against the active CDK breakpoint. */\n protected readonly resolvedVariant = computed<ResolvedNavigationVariant>(() => {\n const variant = this.variant();\n if (variant !== 'auto') return variant;\n const alias = this.media.currentBp();\n return this.autoVariants()[alias] ?? DEFAULT_NAVIGATION_AUTO_VARIANTS[alias];\n });\n\n /** `true` for the variants that render labels beside icons and support sections. */\n protected readonly isExpanded = computed(() =>\n EXPANDED_NAVIGATION_VARIANTS.includes(this.resolvedVariant())\n );\n\n /** `true` when the surface is the modal drawer. */\n protected readonly isModal = computed(() => this.resolvedVariant() === 'modal');\n\n /** `true` when the modal drawer is currently open. */\n protected readonly isOverlayOpen = computed(() => this.isModal() && this.open());\n\n /** `true` when the surface must be visually hidden. */\n protected readonly isHidden = computed(() => this.hidden() || (this.isModal() && !this.open()));\n\n /** Resolved icon / label arrangement. */\n protected readonly resolvedLayout = computed<Exclude<NavigationItemLayout, 'auto'>>(() => {\n if (this.isExpanded()) return 'horizontal';\n const layout = this.itemLayout();\n if (layout !== 'auto') return layout;\n // M3 Expressive: the navigation bar switches to a horizontal item layout from 600dp upwards.\n return this.resolvedVariant() === 'bar' && this.media.currentBp() !== 'xs' ? 'horizontal' : 'vertical';\n });\n\n /** Resolved label visibility; the expanded variants always show labels. */\n protected readonly resolvedLabelVisibility = computed<Exclude<NavigationLabelVisibility, 'auto'>>(() => {\n if (this.isExpanded()) return 'labeled';\n const visibility = this.labelVisibility();\n return visibility === 'auto' ? 'labeled' : visibility;\n });\n\n /** `true` when the headline row (menu button, headline text) is rendered. */\n protected readonly showsHeader = computed(() =>\n this.resolvedVariant() !== 'bar' && (this.showMenuButton() || (this.isExpanded() && !!this.headline()))\n );\n\n /**\n * Geometry of the active indicator:\n * `compact` wraps the icon only (56x32 pill), `wide` wraps icon and label\n * together, exactly as described by the M3 Expressive specs.\n */\n protected readonly indicatorMode = computed<'compact' | 'wide'>(() =>\n this.isExpanded() || this.resolvedLayout() === 'horizontal' ? 'wide' : 'compact'\n );\n\n /** Tooltip placement derived from the variant and from the anchoring edge. */\n protected readonly tooltipPosition = computed<TooltipPosition>(() => {\n if (this.resolvedVariant() === 'bar') return 'above';\n return this.position() === 'end' ? 'before' : 'after';\n });\n\n /** Inline width override for the rail / drawer, or `undefined` to keep the spec default. */\n protected readonly widthStyle = computed<string | undefined>(() => {\n const width = this.width();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline width override for the collapsed rail, or `undefined` to keep the spec default. */\n protected readonly railWidthStyle = computed<string | undefined>(() => {\n const width = this.railWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline lower bound for the expanded variants, or `undefined` to keep the default. */\n protected readonly minWidthStyle = computed<string | undefined>(() => {\n const width = this.minWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline upper bound for the expanded variants, or `undefined` to keep the default. */\n protected readonly maxWidthStyle = computed<string | undefined>(() => {\n const width = this.maxWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Map of destination id to resolved URL. Recomputed only when the destinations change. */\n private readonly hrefs = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const router = this.router;\n const relativeTo = this.relativeTo();\n for (const item of this.allItems()) {\n if (item.href) {\n result.set(item.id, item.href);\n continue;\n }\n if (item.route !== undefined && router) {\n const commands = Array.isArray(item.route) ? [...item.route] : [item.route];\n try {\n const tree = router.createUrlTree(commands, {\n queryParams: item.queryParams as Params | undefined,\n fragment: item.fragment,\n relativeTo,\n });\n result.set(item.id, router.serializeUrl(tree));\n } catch {\n // Invalid route commands: the destination degrades to a plain button.\n }\n }\n }\n return result;\n });\n\n /**\n * Static render model, rebuilt only when the destinations, the resolved URLs\n * or the theme change — never when the selection or the expansion state\n * changes. The theme is a dependency because sprite icons carry one frame set\n * per theme, and the frames are baked into the inline style of the icon.\n */\n private readonly renderGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const hrefs = this.hrefs();\n const dark = this.isDark();\n const counter = { value: 0 };\n const top: NavigationRenderSection[] = [];\n const bottom: NavigationRenderSection[] = [];\n\n for (const section of this.resolvedSections()) {\n const topItems: NavigationRenderItem[] = [];\n const bottomItems: NavigationRenderItem[] = [];\n for (const item of section.items) {\n const rendered = NavigationBarComponent.buildRenderItem(item, section, undefined, 0, counter, hrefs, dark);\n (item.align === 'bottom' ? bottomItems : topItems).push(rendered);\n }\n if (topItems.length > 0) top.push({ section, items: topItems });\n if (bottomItems.length > 0) bottom.push({ section, items: bottomItems });\n }\n\n const groups: NavigationRenderGroup[] = [];\n if (top.length > 0) groups.push({ align: 'top', sections: top });\n if (bottom.length > 0) groups.push({ align: 'bottom', sections: bottom });\n return groups;\n });\n\n /** Id of the destination matching the current router URL, using longest-prefix matching. */\n private readonly routerActiveId = computed<string | undefined>(() => {\n if (!this.routerSync()) return undefined;\n const url = this.routerUrl();\n if (!url) return undefined;\n const path = NavigationBarComponent.pathOf(url);\n const hrefs = this.hrefs();\n let best: string | undefined;\n let bestLength = -1;\n for (const item of this.allItems()) {\n if (item.href || item.route === undefined) continue;\n const href = hrefs.get(item.id);\n if (!href) continue;\n const target = NavigationBarComponent.pathOf(href);\n const matches = item.exact\n ? path === target\n : path === target || path.startsWith(target.endsWith('/') ? target : `${target}/`);\n if (matches && target.length > bestLength) {\n best = item.id;\n bestLength = target.length;\n }\n }\n return best;\n });\n\n /** Id of the currently active destination: router URL first, explicit selection as fallback. */\n protected readonly activeId = computed<string | undefined>(\n () => this.routerActiveId() ?? this.selectedId()\n );\n\n /**\n * Expansion state used when `expandedIds` is left unbound: the destinations\n * flagged `expanded`, plus every ancestor of the active destination.\n */\n private readonly defaultExpandedIds = computed<readonly string[]>(() => {\n const result = new Set<string>();\n for (const item of this.allItems()) {\n if (item.expanded) result.add(item.id);\n }\n const parents = this.parentOf();\n const visited = new Set<string>();\n let current = this.activeId();\n while (current !== undefined && !visited.has(current)) {\n visited.add(current);\n const parent = parents.get(current);\n if (parent === undefined) break;\n result.add(parent);\n current = parent;\n }\n return [...result];\n });\n\n /** Ids of the parent destinations currently expanded. */\n protected readonly expandedSet = computed<ReadonlySet<string>>(\n () => new Set(this.expandedIds() ?? this.defaultExpandedIds())\n );\n\n /** `true` when the current variant collapses `hideWhenCompact` destinations into the overflow menu. */\n protected readonly overflowApplies = computed(() => {\n const mode = this.overflowMode();\n if (mode === 'never') return false;\n const variant = this.resolvedVariant();\n return mode === 'bar' ? variant === 'bar' : variant === 'bar' || variant === 'rail';\n });\n\n /**\n * Render model actually walked by the template: the static model with the\n * compact-only destinations moved into the overflow menu and the children of\n * the expanded parents spliced in.\n */\n protected readonly visibleGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const inline = this.isExpanded();\n const open = this.expandedSet();\n const overflow = this.overflowApplies();\n const max = this.maxVisibleItems();\n\n // The bar ignores per-item anchoring, so both groups share a single row and\n // therefore a single overflow entry.\n let groups = this.resolvedVariant() === 'bar'\n ? NavigationBarComponent.mergeGroups(this.renderGroups())\n : this.renderGroups();\n\n if (overflow || max > 0) {\n groups = groups.map(group => this.applyOverflow(group, overflow, max));\n }\n if (!inline) return groups;\n\n const flatten = (list: readonly NavigationRenderItem[]): readonly NavigationRenderItem[] => {\n let expandedAny = false;\n const result: NavigationRenderItem[] = [];\n for (const rendered of list) {\n result.push(rendered);\n if (rendered.hasChildren && open.has(rendered.item.id)) {\n expandedAny = true;\n result.push(...flatten(rendered.children));\n }\n }\n return expandedAny ? result : list;\n };\n\n return groups.map(group => ({\n align: group.align,\n sections: group.sections.map(section => ({\n section: section.section,\n items: flatten(section.items),\n })),\n }));\n });\n\n /**\n * Ids rendered with the selected styling: the active destination alone, and only\n * while it is on screen. A parent stands in for nothing here — the template drops\n * it unless it owns a route of its own — so a destination hidden inside a closed\n * branch leaves this set empty and `ancestorIds` marks the trail instead.\n */\n protected readonly highlightedIds = computed<ReadonlySet<string>>(() => {\n const active = this.activeId();\n const result = new Set<string>();\n if (active === undefined) return result;\n\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n for (const item of section.items) {\n if (item.item.id === active) {\n result.add(active);\n return result;\n }\n }\n }\n }\n return result;\n });\n\n /**\n * Ids of the ancestors of the active destination. No variant ever shows a parent\n * as selected, so this trail is what tells the user where they are: it marks the\n * whole chain down to the active destination, whether its branch is open, closed\n * or inside a floating panel. Ancestors that are not rendered simply never reach\n * the template.\n */\n protected readonly ancestorIds = computed<ReadonlySet<string>>(() => {\n const active = this.activeId();\n const result = new Set<string>();\n if (active === undefined) return result;\n\n // Depth-first walk that records the ancestors of `active` on the way back up:\n // a branch that does not hold it contributes nothing.\n const walk = (items: readonly NavigationRenderItem[], trail: string[]): boolean => {\n for (const item of items) {\n if (item.item.id === active) {\n for (const id of trail) result.add(id);\n return true;\n }\n trail.push(item.item.id);\n const found = walk(item.children, trail);\n trail.pop();\n if (found) return true;\n }\n return false;\n };\n\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n if (walk(section.items.filter(item => item.depth === 0), [])) return result;\n }\n }\n return result;\n });\n\n /**\n * Rows of the floating submenu panel. Nested destinations one level down are\n * flattened under a heading, so the overflow menu can hold parents too.\n */\n protected readonly popupEntries = computed<readonly NavigationPanelEntry[]>(() => {\n const parent = this.popupItem();\n if (!parent) return [];\n const result: NavigationPanelEntry[] = [];\n for (const child of parent.children) {\n if (child.hasChildren) {\n result.push({ key: `${child.item.id}__heading`, label: child.item.label });\n for (const grandChild of child.children) {\n // Flagged, not just listed: a heading followed by rows aligned with it\n // reads as one flat list, and which rows belong to which group is lost.\n result.push({ key: grandChild.item.id, render: grandChild, grouped: true });\n }\n } else {\n result.push({ key: child.item.id, render: child });\n }\n }\n return result;\n });\n\n /** `true` when the floating submenu panel must be shown. */\n protected readonly isPopupOpen = computed(() => !this.isExpanded() && !!this.popupItem());\n\n /** Element the floating submenu panel is anchored to. */\n protected readonly popupOrigin = computed<HTMLElement>(\n () => this.popupAnchor() ?? this.hostRef.nativeElement\n );\n\n /** Connected positions of the floating submenu panel, derived from the variant. */\n protected readonly popupPositions = computed<ConnectedPosition[]>(() => {\n if (this.resolvedVariant() === 'bar') {\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\n ];\n }\n if (this.position() === 'end') {\n return [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },\n ];\n }\n return [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },\n ];\n });\n\n /** `true` when the layout runs right-to-left; used to mirror the arrow keys. */\n private readonly isRtl = computed(() => this.directionality?.value === 'rtl');\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n /**\n * Activates a destination, or expands it when it owns nested destinations.\n * A parent never navigates: it toggles its group inline in the wide variants\n * and opens the floating panel in the compact ones.\n * @param render - The render model of the activated destination.\n * @param event - The originating mouse or keyboard event.\n */\n protected select(render: NavigationRenderItem, event: Event): void {\n const item = render.item;\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n\n if (render.hasChildren) {\n event.preventDefault();\n if (this.isExpanded()) {\n this.toggleExpanded(item.id);\n } else {\n this.openPopup(render, event);\n }\n return;\n }\n\n // Let the browser handle modified clicks (new tab / new window) natively.\n const mouse = event as MouseEvent;\n if (render.href && (mouse.ctrlKey || mouse.metaKey || mouse.shiftKey || mouse.button === 1)) {\n return;\n }\n\n if (render.routed && render.href) {\n event.preventDefault();\n void this.router?.navigateByUrl(render.href);\n }\n\n this.selectedId.set(item.id);\n this.itemSelected.emit({ item, section: render.section, parent: render.parent, index: render.index });\n\n this.closePopup();\n if (this.isModal() && this.closeOnSelect()) {\n this.open.set(false);\n }\n }\n\n /**\n * Emits `menuClick` when the leading menu button is pressed.\n */\n protected onMenuClick(): void {\n this.menuClick.emit();\n }\n\n /**\n * Closes the modal drawer when the scrim is clicked.\n */\n protected onScrimClick(): void {\n this.open.set(false);\n }\n\n /**\n * Handles keyboard interaction: arrow keys move the focus between\n * destinations, `Home` / `End` jump to the first / last one and `Escape`\n * closes the floating submenu panel or the modal drawer.\n *\n * The same handler serves the surface and the floating panel, and it tells\n * them apart by `currentTarget`: roving inside an open `role=\"menu\"` must stay\n * inside it, and a programmatic `focus()` is NOT stopped by the focus trap, so\n * sharing one element list would send the focus onto the surface behind the\n * overlay.\n *\n * @param event - The originating keyboard event.\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n if (this.popupItem()) {\n event.preventDefault();\n this.closePopup();\n return;\n }\n if (this.isOverlayOpen()) {\n event.preventDefault();\n this.open.set(false);\n return;\n }\n }\n\n // The panel is always a vertical list, whatever the variant behind it.\n const inPanel = (event.currentTarget as HTMLElement | null)?.classList.contains('ars-nav-submenu') === true;\n const horizontal = !inPanel && this.resolvedVariant() === 'bar';\n const forward = horizontal ? (this.isRtl() ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';\n const backward = horizontal ? (this.isRtl() ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';\n\n let delta = 0;\n if (event.key === forward) delta = 1;\n else if (event.key === backward) delta = -1;\n else if (event.key !== 'Home' && event.key !== 'End') return;\n\n const elements = inPanel ? this.panelElements() : this.itemElements();\n if (elements.length === 0) return;\n\n const current = elements.findIndex(ref => ref.nativeElement === event.target);\n let next: number;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = elements.length - 1;\n else if (current < 0) next = 0;\n else next = (current + delta + elements.length) % elements.length;\n\n event.preventDefault();\n elements[next]?.nativeElement.focus();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Expands or collapses the parent destination with the given id.\n * @param id - Identifier of the parent destination to toggle.\n */\n toggleExpanded(id: string): void {\n const next = new Set(this.expandedSet());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n // The rows that are about to appear do not exist yet: the scroll is read and applied\n // after the next render, when they do.\n afterNextRender(() => this.revealBranch(id), { injector: this.injector });\n }\n this.expandedIds.set([...next]);\n }\n\n /**\n * Opens the floating submenu panel of a parent destination.\n * @param render - The render model of the parent destination.\n * @param event - The originating event, used to anchor the panel.\n */\n protected openPopup(render: NavigationRenderItem, event: Event): void {\n const anchor = event.currentTarget as HTMLElement | null;\n this.popupAnchor.set(anchor ?? undefined);\n this.popupId.set(this.popupItem()?.item.id === render.item.id ? undefined : render.item.id);\n }\n\n /**\n * Closes the floating submenu panel.\n */\n closePopup(): void {\n this.popupId.set(undefined);\n // Otherwise the component keeps a reference to a detached element.\n this.popupAnchor.set(undefined);\n }\n\n /**\n * Opens the modal drawer. No-op for the other variants.\n */\n openDrawer(): void {\n this.open.set(true);\n }\n\n /**\n * Closes the modal drawer. No-op for the other variants.\n */\n closeDrawer(): void {\n this.open.set(false);\n }\n\n /**\n * Toggles the modal drawer. No-op for the other variants.\n */\n toggleDrawer(): void {\n this.open.update(open => !open);\n }\n\n /**\n * Moves the browser focus to the destination with the given id.\n * @param id - Identifier of the destination to focus.\n * @returns `true` when a matching destination was found and focused.\n */\n focusItem(id: string): boolean {\n for (const ref of this.itemElements()) {\n if (ref.nativeElement.dataset['navId'] === id) {\n ref.nativeElement.focus();\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrolls the list so that the destinations a branch has just revealed are visible.\n *\n * Opening a parent sitting near the bottom of the list adds its children BELOW the fold: the\n * row answers the click, and nothing seems to happen. This scrolls to the end of the branch so\n * the options show up where the user is already looking.\n *\n * The parent row is never pushed out of the top: when a branch is taller than the list, showing\n * its end would cost the row that was clicked, so the scroll stops with the parent at the top\n * edge and the branch runs off the bottom — the user reads it downwards from there.\n *\n * Only the wide variants expand inline; in the compact ones the children live in the floating\n * panel and there is nothing to scroll.\n *\n * @param id - Identifier of the parent destination that has just been expanded.\n * @returns void\n */\n private revealBranch(id: string): void {\n if (!this.isExpanded()) return;\n\n const items = this.itemElements();\n const index = items.findIndex(ref => ref.nativeElement.dataset['navId'] === id);\n if (index < 0) return;\n\n const parent = items[index].nativeElement;\n const list = parent.closest('.ars-nav__items') as HTMLElement | null;\n if (!list) return;\n\n // The children are spliced in right after their parent and carry a deeper `data-depth`, so the\n // branch is the run of rows that follows until the depth drops back.\n const depth = Number(parent.dataset['depth'] ?? 0);\n let last = parent;\n for (let i = index + 1; i < items.length; i++) {\n const row = items[i].nativeElement;\n if (row.closest('.ars-nav__items') !== list) break;\n if (Number(row.dataset['depth'] ?? 0) <= depth) break;\n last = row;\n }\n // Nothing was revealed (an empty branch, or the rows are not rendered): nothing to scroll to.\n if (last === parent) return;\n\n const view = list.clientHeight;\n if (view === 0 || list.scrollHeight <= view) return;\n\n // `clientTop` is the top border: rects are measured from the border box, scrolling from the\n // padding box, and without it a themed list with a border would scroll a hair short.\n const origin = list.getBoundingClientRect().top + list.clientTop - list.scrollTop;\n const top = parent.getBoundingClientRect().top - origin;\n const end = last.getBoundingClientRect().bottom - origin;\n\n // Scroll only far enough to clear the end of the branch, and never past the parent row.\n const needed = end + BRANCH_SCROLL_PADDING - view;\n if (needed <= list.scrollTop) return;\n const target = Math.max(0, Math.min(needed, top - BRANCH_SCROLL_PADDING));\n if (target <= list.scrollTop) return;\n\n list.scrollTo({ top: target, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n\n /**\n * Moves the compact-only destinations of a group into a synthesized overflow\n * destination appended at the end of the group.\n * @param group - The group to process.\n * @param overflow - `true` when `hideWhenCompact` must be honoured.\n * @param max - Hard cap on the inline destinations; `0` disables it.\n * @returns The group with the overflow destination applied.\n */\n private applyOverflow(\n group: NavigationRenderGroup,\n overflow: boolean,\n max: number\n ): NavigationRenderGroup {\n const kept: { sectionIndex: number; render: NavigationRenderItem }[] = [];\n const overflowed: NavigationRenderItem[] = [];\n\n group.sections.forEach((section, sectionIndex) => {\n for (const render of section.items) {\n if (overflow && render.item.hideWhenCompact) overflowed.push(render);\n else kept.push({ sectionIndex, render });\n }\n });\n\n const slots = kept.length + (overflowed.length > 0 ? 1 : 0);\n if (max > 0 && slots > max) {\n const moved = kept.splice(Math.max(1, max - 1));\n for (const entry of moved) overflowed.push(entry.render);\n }\n\n if (overflowed.length === 0) return group;\n\n const sections: NavigationRenderSection[] = group.sections.map((section, sectionIndex) => ({\n section: section.section,\n items: kept.filter(entry => entry.sectionIndex === sectionIndex).map(entry => entry.render),\n }));\n\n const last = sections[sections.length - 1];\n sections[sections.length - 1] = {\n section: last.section,\n items: [...last.items, this.buildOverflowItem(overflowed)],\n };\n\n return { align: group.align, sections: sections.filter(section => section.items.length > 0) };\n }\n\n /**\n * Builds the synthesized, icon-only overflow destination.\n * @param children - The destinations moved into the overflow menu.\n * @returns The render model of the overflow destination.\n */\n private buildOverflowItem(children: readonly NavigationRenderItem[]): NavigationRenderItem {\n const label = this.overflowLabel();\n const icon = this.overflowIcon();\n return {\n item: { id: NAVIGATION_OVERFLOW_ID, label, icon },\n index: -1,\n depth: 0,\n routed: false,\n iconOff: icon,\n iconOn: icon,\n badgeText: '',\n hasBadge: false,\n iconOnly: true,\n hasChildren: true,\n children,\n ariaLabel: label,\n tooltip: label,\n };\n }\n\n /**\n * Merges the `top` and `bottom` groups into a single `top` group, combining\n * the sections that share an id so `@for` track keys stay unique.\n * @param groups - The groups to merge.\n * @returns A single-group array, or the input when there is nothing to merge.\n */\n private static mergeGroups(\n groups: readonly NavigationRenderGroup[]\n ): readonly NavigationRenderGroup[] {\n if (groups.length < 2) return groups;\n const order: string[] = [];\n const byId = new Map<string, NavigationRenderSection>();\n for (const group of groups) {\n for (const section of group.sections) {\n const existing = byId.get(section.section.id);\n if (existing) {\n byId.set(section.section.id, {\n section: existing.section,\n items: [...existing.items, ...section.items],\n });\n } else {\n order.push(section.section.id);\n byId.set(section.section.id, section);\n }\n }\n }\n return [{ align: 'top', sections: order.map(id => byId.get(id)!) }];\n }\n\n /**\n * Builds the render model of a destination and, recursively, of its children.\n * @param item - The source destination.\n * @param section - The section the destination belongs to.\n * @param parent - The parent destination, for nested destinations.\n * @param depth - Nesting level of the destination.\n * @param counter - Shared counter producing the flat destination index.\n * @param hrefs - Map of destination id to resolved URL.\n * @param dark - `true` when the dark theme is active, selecting the dark sprite frames.\n * @returns The render model of the destination.\n */\n private static buildRenderItem(\n item: NavigationItem,\n section: NavigationSection,\n parent: NavigationItem | undefined,\n depth: number,\n counter: { value: number },\n hrefs: ReadonlyMap<string, string>,\n dark: boolean\n ): NavigationRenderItem {\n const href = hrefs.get(item.id);\n // Icon precedence: registered SVG, then sprite sheet, then image, then ligature.\n const svgOff = item.svgIcon;\n const svgOn = item.activeSvgIcon ?? item.svgIcon;\n const spriteStyle = NavigationBarComponent.buildSpriteStyle(item, dark);\n const imageOff = spriteStyle || svgOff ? undefined : item.imageIcon;\n const imageOn = spriteStyle || svgOn ? undefined : (item.activeImageIcon ?? item.imageIcon);\n const index = counter.value++;\n\n const children = (item.children ?? []).map(child =>\n NavigationBarComponent.buildRenderItem(child, section, item, depth + 1, counter, hrefs, dark)\n );\n\n return {\n item,\n section: section.id === '__default' ? undefined : section,\n parent,\n index,\n depth,\n href,\n routed: !!href && !item.href,\n iconOff: svgOff || spriteStyle || imageOff ? undefined : item.icon,\n iconOn: svgOn || spriteStyle || imageOn ? undefined : (item.activeIcon ?? item.icon),\n svgOff,\n svgOn,\n imageOff,\n imageOn,\n spriteStyle,\n badgeText: NavigationBarComponent.formatBadge(item),\n hasBadge: !!item.badge,\n iconOnly: false,\n hasChildren: children.length > 0,\n children,\n ariaLabel: item.ariaLabel ?? item.label,\n tooltip: item.tooltip ?? item.label,\n };\n }\n\n /**\n * Translates a sprite descriptor into the inline custom properties the\n * stylesheet uses to size the icon and to shift `background-position` per\n * interaction state.\n *\n * The sheet is rescaled through `background-size` instead of being drawn at\n * its natural size: that is what lets a strip of 26px frames be painted at the\n * 24px of the surrounding Material icons without the neighbouring frames\n * bleeding into the box, and it makes the step between two frames exactly the\n * rendered side.\n *\n * @param item - The destination whose sprite must be translated.\n * @param dark - `true` when the dark theme is active, selecting the `dark` frame set.\n * @returns The inline style map, or `undefined` when the destination uses no sprite.\n */\n private static buildSpriteStyle(item: NavigationItem, dark: boolean): Record<string, string> | undefined {\n const sprite = item.sprite;\n if (!sprite) return undefined;\n\n // The inline indices are the light set; `dark` overrides only what differs.\n const light: NavigationSpriteFrames = sprite;\n const frames: NavigationSpriteFrames = dark && sprite.dark ? { ...light, ...sprite.dark } : light;\n const normal = frames.normal ?? 0;\n const hover = frames.hover ?? normal;\n const active = frames.active ?? hover;\n const disabled = frames.disabled ?? normal;\n\n const source = sprite.size ?? SPRITE_DEFAULT_SIZE;\n const size = sprite.renderSize ?? source;\n const count = NavigationBarComponent.spriteFrameCount(sprite);\n const vertical = (sprite.direction ?? 'vertical') === 'vertical';\n\n return {\n '--sp-url': `url(\"${sprite.url}\")`,\n '--sp-size': `${size}px`,\n '--sp-sheet-x': vertical ? `${size}px` : `${size * count}px`,\n '--sp-sheet-y': vertical ? `${size * count}px` : `${size}px`,\n '--sp-step-x': vertical ? '0px' : `${-size}px`,\n '--sp-step-y': vertical ? `${-size}px` : '0px',\n '--sp-normal': `${normal}`,\n '--sp-hover': `${hover}`,\n '--sp-active': `${active}`,\n '--sp-disabled': `${disabled}`,\n };\n }\n\n /**\n * Number of frames a sprite sheet holds, needed to rescale it.\n * @param sprite - The sprite descriptor to measure.\n * @returns The declared frame count, or the highest referenced index plus one.\n */\n private static spriteFrameCount(sprite: NavigationIconSprite): number {\n if (sprite.frames !== undefined && sprite.frames > 0) return sprite.frames;\n const indices = [\n sprite.normal, sprite.hover, sprite.active, sprite.disabled,\n sprite.dark?.normal, sprite.dark?.hover, sprite.dark?.active, sprite.dark?.disabled,\n ];\n let highest = 0;\n for (const index of indices) {\n if (index !== undefined && index > highest) highest = index;\n }\n return highest + 1;\n }\n\n /**\n * Formats the badge content of a destination.\n * @param item - The destination whose badge must be formatted.\n * @returns The badge text, or an empty string for a dot badge / no badge.\n */\n private static formatBadge(item: NavigationItem): string {\n const badge = item.badge;\n if (!badge || badge.value === undefined) return '';\n if (typeof badge.value === 'number') {\n const max = badge.max ?? 999;\n return badge.value > max ? `${max}+` : `${badge.value}`;\n }\n return badge.value;\n }\n\n /**\n * Strips the query string and the fragment from a URL.\n * @param url - The URL to normalise.\n * @returns The path portion of the URL.\n */\n private static pathOf(url: string): string {\n const withoutFragment = url.split('#')[0] ?? '';\n return withoutFragment.split('?')[0] ?? '';\n }\n}\n","@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","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.navigation\n */\nexport * from './navigation.definitions';\nexport * from './navigation-bar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.navigation.mjs","sources":["../../../projects/ars-utils/ui.navigation/navigation.definitions.ts","../../../projects/ars-utils/ui.navigation/navigation-bar.component.ts","../../../projects/ars-utils/ui.navigation/navigation-bar.component.html","../../../projects/ars-utils/ui.navigation/public_api.ts","../../../projects/ars-utils/ui.navigation/arsedizioni-ars-utils-ui.navigation.ts"],"sourcesContent":["/**\n * @file navigation.definitions.ts\n *\n * Data model shared by every variant of the Material Design 3 (Expressive)\n * navigation component: Navigation bar, Navigation rail (collapsed and\n * expanded) and Navigation drawer (standard and modal).\n *\n * Reference: https://m3.material.io/components/navigation-bar/specs\n * https://m3.material.io/components/navigation-rail/specs\n * https://m3.material.io/components/navigation-drawer/specs\n */\n\nimport { BreakpointAlias } from \"@arsedizioni/ars-utils/ui\";\n\n\n\n\n/**\n * Rendering variants supported by the component.\n *\n * - `bar` — Navigation bar, horizontal, anchored to the bottom edge (compact windows).\n * - `rail` — Collapsed navigation rail, vertical, 96dp wide (medium / expanded windows).\n * - `rail-expanded` — Expanded navigation rail, 220dp+, labels beside icons, supports sections.\n * - `drawer` — Standard navigation drawer, 360dp, inline with the page content.\n * - `modal` — Modal navigation drawer: same as `drawer` but overlaid on a scrim.\n * - `auto` — Resolved at runtime from the active CDK breakpoint (see `autoVariants`).\n */\nexport type NavigationVariant = 'auto' | 'bar' | 'rail' | 'rail-expanded' | 'drawer' | 'modal';\n\n/** Variants that can actually be rendered, i.e. every variant except `auto`. */\nexport type ResolvedNavigationVariant = Exclude<NavigationVariant, 'auto'>;\n\n/**\n * Label visibility policy, mirroring the four Material label visibility modes.\n *\n * - `auto` — Labels are always shown (current M3 guidance).\n * - `labeled` — Labels are always shown.\n * - `selected` — Only the active destination shows its label (legacy M3 \"auto\" behaviour).\n * - `unlabeled` — Icons only; the accessible name comes from `aria-label` / tooltip.\n */\nexport type NavigationLabelVisibility = 'auto' | 'labeled' | 'selected' | 'unlabeled';\n\n/**\n * Item layout inside a destination.\n *\n * - `vertical` — Icon stacked above the label (M3 default for compact windows).\n * - `horizontal` — Icon at the start of the label (M3 Expressive, medium windows and above).\n * - `auto` — `vertical` on compact windows, `horizontal` from 600dp upwards; always\n * `horizontal` for the expanded rail and the drawer.\n */\nexport type NavigationItemLayout = 'auto' | 'vertical' | 'horizontal';\n\n/** Vertical alignment of the destination list inside a rail. */\nexport type NavigationAlignment = 'top' | 'center' | 'bottom';\n\n/** Side the rail / drawer is anchored to. Automatically mirrored in RTL. */\nexport type NavigationPosition = 'start' | 'end';\n\n/**\n * Badge attached to a destination.\n * When `value` is `undefined` a small dot badge is rendered, otherwise a large\n * badge showing the value (clamped to `max`).\n */\nexport interface NavigationBadge {\n /** Numeric or textual content of the badge. Leave `undefined` for a dot badge. */\n value?: number | string;\n /** Upper bound for numeric values; above it the badge renders `${max}+`. Defaults to 999. */\n max?: number;\n /** Accessible description announced together with the destination label. */\n ariaLabel?: string;\n /** Optional CSS colour override for this badge only. */\n color?: string;\n}\n\n/**\n * Frame indices of a sprite sheet, one per interaction state.\n *\n * The same shape describes the light set (declared inline on the sprite) and the\n * dark set (declared under `NavigationIconSprite.dark`), so a sheet holding both\n * themes needs no duplicated geometry.\n */\nexport interface NavigationSpriteFrames {\n /** Zero-based frame index for the resting state. Defaults to 0. */\n normal?: number;\n /** Frame index used on hover and on keyboard focus. Defaults to `normal`. */\n hover?: number;\n /** Frame index used when the destination is selected. Defaults to `hover`. */\n active?: number;\n /** Frame index used when the destination is disabled. Defaults to `normal`. */\n disabled?: number;\n}\n\n/**\n * Sprite sheet descriptor: a single image holding every state frame of an icon,\n * revealed by shifting `background-position` — no extra request per state.\n *\n * Frames are assumed to be square and evenly spaced, laid out along a single\n * axis. Two geometries are described, and they are NOT the same thing:\n * - `size` is the side of a frame INSIDE the image file;\n * - `renderSize` is the side the icon is actually drawn at.\n * The component rescales the whole sheet through `background-size`, so a strip\n * of 26px frames can be drawn at the 24px of the surrounding Material icons\n * without the neighbouring frames bleeding in.\n *\n * The frame indices declared inline are the light-theme set; `dark` overrides\n * the ones that differ when the dark theme is active. A sheet that carries a\n * single set simply omits `dark`.\n */\nexport interface NavigationIconSprite extends NavigationSpriteFrames {\n /** URL of the sprite sheet. */\n url: string;\n /** Side of a single frame inside the image file, in pixels. Defaults to 24. */\n size?: number;\n /** Side the icon is drawn at, in pixels. Defaults to `size`. */\n renderSize?: number;\n /**\n * Total number of frames in the sheet, needed to rescale it.\n * Defaults to the highest referenced frame index plus one, which is correct\n * for any sheet that has no trailing unused frame.\n */\n frames?: number;\n /** Axis the frames are laid out along. Defaults to `vertical`. */\n direction?: 'vertical' | 'horizontal';\n /** Frame indices used when the dark theme is active. Defaults to the light ones. */\n dark?: NavigationSpriteFrames;\n}\n\n/** A single navigation destination. */\nexport interface NavigationItem {\n /** Stable unique identifier; used as the `@for` track key and as the selection value. */\n id: string;\n /** Visible label. Also used as the accessible name and as the tooltip fallback. */\n label: string;\n /**\n * Shorter label used ONLY where the label sits under the icon — the navigation\n * bar and the collapsed rail — which is where a long name wraps or is cut.\n * Defaults to `label`. The literal `'none'` drops the label there altogether and\n * leaves the icon alone, for a destination whose icon says it all.\n * The accessible name and the tooltip always keep `label`, so nothing is lost:\n * the short form — or no form — is what is drawn, the full one is what is\n * announced, and the tooltip is what shows it on hover.\n */\n labelVertical?: string;\n /** Material Symbols ligature rendered when the destination is NOT selected. */\n icon?: string;\n /** Material Symbols ligature rendered when the destination IS selected (usually the filled variant). */\n activeIcon?: string;\n /** Path of a raster / vector image rendered as the icon. Takes precedence over `icon`. */\n imageIcon?: string;\n /** Image used when the destination is selected. Takes precedence over `activeIcon`. */\n activeImageIcon?: string;\n /**\n * Sprite sheet holding every state frame of the icon. Takes precedence over\n * `imageIcon` and `icon`; state changes cost one `background-position` shift.\n */\n sprite?: NavigationIconSprite;\n /** Name of an SVG icon registered in `MatIconRegistry`; takes precedence over `icon`. */\n svgIcon?: string;\n /** SVG icon used when the destination is selected; takes precedence over `activeIcon`. */\n activeSvgIcon?: string;\n /** Badge shown on top of the icon (collapsed variants) or at the trailing edge (expanded variants). */\n badge?: NavigationBadge;\n /** Short trailing text shown at the end of the row in the expanded rail and in the drawer. */\n trailing?: string;\n /** When `true` the destination is rendered dimmed and is not interactive. */\n disabled?: boolean;\n /**\n * When `true` the destination is drawn in a much quieter colour while staying\n * fully usable: it is clicked, navigated to and selected exactly like any other.\n * Unlike `disabled` it says \"this matters less right now\", not \"you cannot use\n * this\", so nothing is turned off — not the pointer, not the keyboard, not the\n * accessible name.\n */\n greyed?: boolean;\n /**\n * When `true` the destination is not rendered inline in the compact variants:\n * it is moved into the overflow menu instead. Which variants count as compact\n * is decided by the component's `overflowMode` input.\n */\n hideWhenCompact?: boolean;\n /** Tooltip text; defaults to `label` when the label is not visible. */\n tooltip?: string;\n /** Router commands used to build the destination URL. */\n route?: string | readonly unknown[];\n /** Query parameters appended to `route`. */\n queryParams?: Record<string, unknown>;\n /** Fragment appended to `route`. */\n fragment?: string;\n /** When `true` the route must match the whole URL to mark the destination active. Defaults to `false`. */\n exact?: boolean;\n /** External URL. Rendered as a plain anchor and never matched against the router. */\n href?: string;\n /** Anchor target used together with `href`. */\n target?: string;\n /** Explicit accessible name, when the visible label is not descriptive enough. */\n ariaLabel?: string;\n /**\n * Nested destinations. Clicking a destination with children never navigates: it\n * expands the group inline (expanded rail / drawer) or opens it in a floating\n * panel (bar / collapsed rail). Giving it a `route` anyway is still meaningful —\n * the destination is matched against the router like any other, so the row shows\n * as selected while that route is active, even though only its children take the\n * user there.\n */\n children?: readonly NavigationItem[];\n /** Initial expansion state of a destination that has `children`. Defaults to `false`. */\n expanded?: boolean;\n /**\n * Edge the destination is pinned to inside a rail or a drawer.\n * `bottom` destinations are pushed to the end of the surface. Ignored by the\n * navigation bar, where every destination shares the same row.\n */\n align?: 'top' | 'bottom';\n /** Arbitrary payload echoed back in `NavigationSelection`. */\n data?: unknown;\n}\n\n/**\n * A group of destinations. Section headlines and dividers are only rendered by\n * the expanded rail and by the drawer, exactly as described by the M3 specs.\n */\nexport interface NavigationSection {\n /** Stable unique identifier; used as the `@for` track key. */\n id: string;\n /** Optional headline rendered above the group. */\n label?: string;\n /** Destinations belonging to the section. */\n items: readonly NavigationItem[];\n /** When `true` a divider is rendered after the section. */\n divider?: boolean;\n}\n\n/** Payload emitted when a destination is activated. */\nexport interface NavigationSelection {\n /** The activated destination. */\n item: NavigationItem;\n /** The section the destination belongs to, when sections are in use. */\n section?: NavigationSection;\n /** The parent destination, when a nested destination was activated. */\n parent?: NavigationItem;\n /** Zero-based index of the destination across the whole flattened list. */\n index: number;\n}\n\n/**\n * Policy deciding where `hideWhenCompact` destinations are collapsed into the\n * overflow menu.\n *\n * - `bar` — only in the navigation bar (default).\n * - `compact` — in the navigation bar and in the collapsed rail.\n * - `never` — `hideWhenCompact` is ignored and every destination stays inline.\n */\nexport type NavigationOverflowMode = 'bar' | 'compact' | 'never';\n\n/**\n * Identifier of the synthesized overflow destination. Use it to recognise the\n * overflow entry inside `itemSelected`.\n */\nexport const NAVIGATION_OVERFLOW_ID = '__overflow';\n\n/** Map of breakpoint alias to the variant used when `variant` is `auto`. */\nexport type NavigationAutoVariants = Partial<Record<BreakpointAlias, ResolvedNavigationVariant>>;\n\n/**\n * Default `auto` mapping, aligned with the Material 3 window size classes:\n * compact windows get the navigation bar, medium and expanded windows get the\n * collapsed rail, large and extra-large windows get the expanded rail.\n */\nexport const DEFAULT_NAVIGATION_AUTO_VARIANTS: Required<NavigationAutoVariants> = {\n xs: 'bar',\n sm: 'rail',\n md: 'rail',\n lg: 'rail-expanded',\n xl: 'rail-expanded',\n};\n\n/** Variants that render labels beside the icon and support sections and dividers. */\nexport const EXPANDED_NAVIGATION_VARIANTS: readonly ResolvedNavigationVariant[] = [\n 'rail-expanded',\n 'drawer',\n 'modal',\n];\n","/**\n * @file navigation-bar.component.ts\n *\n * Material Design 3 (Expressive) navigation component.\n *\n * A single adaptive component that renders every navigation surface described\n * by the M3 specs — Navigation bar, collapsed Navigation rail, expanded\n * Navigation rail, standard Navigation drawer and modal Navigation drawer —\n * from one destination model.\n *\n * Design goals:\n * - Zoneless / signal based: no `NgZone`, no `setTimeout`, no manual change detection.\n * - `OnPush` + pre-computed render models: the template contains no method calls.\n * - Zero-DOM active indicator and state layer (rendered as pseudo-elements).\n * - Nested destinations expand inline in the wide variants and open in a single\n * shared overlay in the compact ones — one overlay for the whole component,\n * not one menu instance per destination.\n * - Router integration that degrades gracefully when no `Router` is provided.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CdkConnectedOverlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { EMPTY, distinctUntilChanged, filter, map } from 'rxjs';\nimport {\n DEFAULT_NAVIGATION_AUTO_VARIANTS,\n EXPANDED_NAVIGATION_VARIANTS,\n NAVIGATION_OVERFLOW_ID,\n NavigationAlignment,\n NavigationAutoVariants,\n NavigationIconSprite,\n NavigationItem,\n NavigationItemLayout,\n NavigationLabelVisibility,\n NavigationOverflowMode,\n NavigationPosition,\n NavigationSection,\n NavigationSelection,\n NavigationSpriteFrames,\n NavigationVariant,\n ResolvedNavigationVariant,\n} from './navigation.definitions';\n\nimport { ThemeService } from '@arsedizioni/ars-utils/core';\nimport { MediaObserver } from '@arsedizioni/ars-utils/ui';\n\n/** Internal, pre-computed render model for a single destination. */\ninterface NavigationRenderItem {\n /** The source destination. */\n readonly item: NavigationItem;\n /** Owning section, when sections are in use. */\n readonly section?: NavigationSection;\n /** Parent destination, for nested destinations. */\n readonly parent?: NavigationItem;\n /** Zero-based index across the whole flattened destination list. */\n readonly index: number;\n /** Nesting level: `0` for a root destination. */\n readonly depth: number;\n /** Resolved URL, when the destination is routed or external. */\n readonly href?: string;\n /** `true` when the destination navigates through the Angular router. */\n readonly routed: boolean;\n /** Material Symbols ligature for the unselected state. */\n readonly iconOff?: string;\n /** Material Symbols ligature for the selected state. */\n readonly iconOn?: string;\n /** Registered SVG icon name for the unselected state. */\n readonly svgOff?: string;\n /** Registered SVG icon name for the selected state. */\n readonly svgOn?: string;\n /** Image URL for the unselected state. */\n readonly imageOff?: string;\n /** Image URL for the selected state. */\n readonly imageOn?: string;\n /** Inline custom properties driving a sprite-sheet icon, when one is used. */\n readonly spriteStyle?: Record<string, string>;\n /** Rendered badge text; empty string means \"dot badge\". */\n readonly badgeText: string;\n /** `true` when the destination carries a badge of any kind. */\n readonly hasBadge: boolean;\n /** `true` when the destination never renders its label, whatever the label policy. */\n readonly iconOnly: boolean;\n /** `true` when the destination owns nested destinations. */\n readonly hasChildren: boolean;\n /** Pre-computed render models of the nested destinations. */\n readonly children: readonly NavigationRenderItem[];\n /** Accessible name announced for the destination. */\n readonly ariaLabel: string;\n /** Tooltip text used when the label is not visible. */\n readonly tooltip: string;\n}\n\n/** Internal render model for a section and its destinations. */\ninterface NavigationRenderSection {\n /** The source section. */\n readonly section: NavigationSection;\n /** Destinations of the section. */\n readonly items: readonly NavigationRenderItem[];\n}\n\n/** Internal render model for one row of the floating submenu panel. */\ninterface NavigationPanelEntry {\n /** Stable `@for` track key. */\n readonly key: string;\n /** Heading text, when the row is a group heading. */\n readonly label?: string;\n /** Destination to render, when the row is an actual entry. */\n readonly render?: NavigationRenderItem;\n /** `true` when the entry sits under a heading, and is indented to show it. */\n readonly grouped?: boolean;\n}\n\n/** Internal render model for one of the two anchoring groups of a surface. */\ninterface NavigationRenderGroup {\n /** Edge the group is pinned to. */\n readonly align: 'top' | 'bottom';\n /** Sections belonging to the group. */\n readonly sections: readonly NavigationRenderSection[];\n}\n\n/** Default sprite geometry, applied when a `NavigationIconSprite` omits a field. */\nconst SPRITE_DEFAULT_SIZE = 24;\n\n/** Breathing space left above the parent row, and below the end of a branch, when scrolling. */\nconst BRANCH_SCROLL_PADDING = 8;\n\n/**\n * Tells whether the user asked the system for less animation.\n * @returns `true` when `prefers-reduced-motion` is set, `false` when it is not or cannot be read.\n */\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n@Component({\n selector: 'navigation-bar',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, CdkTrapFocus, CdkConnectedOverlay],\n templateUrl: './navigation-bar.component.html',\n styleUrl: './navigation-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ars-navigation',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-layout]': 'resolvedLayout()',\n '[attr.data-align]': 'alignment()',\n '[attr.data-position]': 'position()',\n '[attr.data-labels]': 'resolvedLabelVisibility()',\n '[attr.data-indicator]': 'indicatorMode()',\n '[class.ars-navigation--open]': 'isOverlayOpen()',\n '[class.ars-navigation--elevated]': 'elevated()',\n '[class.ars-navigation--bordered]': 'bordered()',\n '[class.ars-navigation--dense]': 'dense()',\n '[class.ars-navigation--hidden]': 'isHidden()',\n '[style.--ars-navigation-width]': 'widthStyle()',\n '[style.--ars-navigation-rail-width]': 'railWidthStyle()',\n '[style.--ars-navigation-min-width]': 'minWidthStyle()',\n '[style.--ars-navigation-max-width]': 'maxWidthStyle()',\n },\n})\nexport class NavigationBarComponent {\n\n // ── Injected dependencies ──────────────────────────────────────────────────\n\n private readonly media = inject(MediaObserver);\n // Optional for the same reason `Router` is: the component must still render\n // inside a bare test bed, where no application theme has been bootstrapped.\n private readonly themeService = inject(ThemeService, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly directionality = inject(Directionality, { optional: true });\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Used to schedule the post-render read that reveals a branch just expanded. */\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n\n /** Flat list of destinations. Ignored when `sections` is provided. */\n readonly items = input<readonly NavigationItem[]>([]);\n\n /** Grouped destinations. Section headlines and dividers only render in the expanded variants. */\n readonly sections = input<readonly NavigationSection[]>([]);\n\n /** Rendering variant. `auto` resolves from the active breakpoint through `autoVariants`. */\n readonly variant = input<NavigationVariant>('auto');\n\n /** Breakpoint → variant map used when `variant` is `auto`. Missing entries fall back to the M3 defaults. */\n readonly autoVariants = input<NavigationAutoVariants>({});\n\n /** Two-way bound id of the selected destination. The router, when active, takes precedence. */\n readonly selectedId = model<string | undefined>(undefined);\n\n /**\n * Two-way bound ids of the expanded parent destinations.\n * Leave unbound (`undefined`) to let the component manage the expansion state\n * on its own, seeding it from `NavigationItem.expanded` and auto-opening the\n * ancestors of the active destination.\n */\n readonly expandedIds = model<readonly string[] | undefined>(undefined);\n\n /** Two-way bound open state of the modal drawer. Ignored by the other variants. */\n readonly open = model<boolean>(false);\n\n /** Label visibility policy. */\n readonly labelVisibility = input<NavigationLabelVisibility>('auto');\n\n /** Icon / label arrangement inside a destination. */\n readonly itemLayout = input<NavigationItemLayout>('auto');\n\n /**\n * Icons of the nested destinations in the expanded variants (rail-expanded,\n * drawer, modal), where children are listed inline under their parent.\n * `false` — the default — renders those rows as label only, which keeps the\n * branch readable; the label stays aligned with the labels around it and a\n * badge moves to the trailing edge. Top level destinations always keep their\n * icon, and so do the children shown in the floating panel of the compact\n * variants.\n */\n readonly childIcons = input(false, { transform: booleanAttribute });\n\n /**\n * Compact rows in the expanded variants (rail-expanded, drawer, modal):\n * 48px instead of the 56px of the M3 spec, with the dependent measures\n * scaled along — nested rows 40px, labels one step smaller, tighter gaps.\n * The bar and the collapsed rail keep their own spec metrics.\n */\n readonly dense = input(false, { transform: booleanAttribute });\n\n /** Vertical alignment of the `top` destination group inside a rail. */\n readonly alignment = input<NavigationAlignment>('top');\n\n /** Edge the rail / drawer is anchored to. Mirrored automatically in RTL. */\n readonly position = input<NavigationPosition>('start');\n\n /** Headline rendered above the destinations in the expanded rail and in the drawer. */\n readonly headline = input<string | undefined>(undefined);\n\n /** When `true` a leading menu button is rendered; it emits `menuClick`. */\n readonly showMenuButton = input(false, { transform: booleanAttribute });\n\n /** Material Symbols ligature used by the menu button. */\n readonly menuIcon = input<string>('menu');\n\n /** Material Symbols ligature used by the expand / collapse chevron. */\n readonly expandIcon = input<string>('expand_more');\n\n /** Where `hideWhenCompact` destinations are collapsed into the overflow menu. */\n readonly overflowMode = input<NavigationOverflowMode>('bar');\n\n /** Material Symbols ligature of the overflow destination. */\n readonly overflowIcon = input<string>('more_vert');\n\n /** Accessible name and tooltip of the overflow destination, which renders icon-only. */\n readonly overflowLabel = input<string>('More');\n\n /**\n * Hard cap on the destinations rendered inline in the compact variants,\n * applied per anchoring group. The overflow destination counts as one slot.\n * `0` disables the cap; the M3 specs recommend 3 to 5 for the navigation bar.\n */\n readonly maxVisibleItems = input(0, { transform: numberAttribute });\n\n /** Accessible name of the menu button. */\n readonly menuAriaLabel = input<string>('Menu');\n\n /** Accessible name of the navigation landmark. */\n readonly ariaLabel = input<string>('Navigation');\n\n /** When `true` a scrim is rendered behind the modal drawer. */\n readonly scrim = input(true, { transform: booleanAttribute });\n\n /** When `true` the modal drawer closes as soon as a destination is activated. */\n readonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n /** When `true` the surface gets the M3 elevation-3 shadow. */\n readonly elevated = input(true, { transform: booleanAttribute });\n\n /** When `true` a 1px divider separates the surface from the page content. */\n readonly bordered = input(false, { transform: booleanAttribute });\n\n /** When `true` tooltips are shown for destinations whose label is not visible. */\n readonly tooltips = input(true, { transform: booleanAttribute });\n\n /** When `true` the selection follows the current router URL. */\n readonly routerSync = input(true, { transform: booleanAttribute });\n\n /** Route used to resolve relative `route` commands. Absolute resolution when omitted. */\n readonly relativeTo = input<ActivatedRoute | undefined>(undefined);\n\n /** Explicit surface width in pixels for the rail / drawer variants. `0` keeps the spec default. */\n readonly width = input(0, { transform: numberAttribute });\n\n /**\n * Explicit width in pixels of the COLLAPSED rail. `0` keeps the 96px of the\n * spec. It is separate from `width` because a surface set to `auto` is a\n * collapsed rail at one breakpoint and an expanded one at the next, and the\n * two want different widths; when both are given, this one wins on the\n * collapsed rail and `width` covers the rest.\n */\n readonly railWidth = input(0, { transform: numberAttribute });\n\n /**\n * Lower bound in pixels for the width of the expanded variants (rail-expanded,\n * drawer, modal). `0` keeps the default, which sets no floor. It is what keeps\n * the surface readable when its width comes from a percentage or from a\n * container that can shrink, instead of from `width`.\n */\n readonly minWidth = input(0, { transform: numberAttribute });\n\n /**\n * Upper bound in pixels for the width of the expanded variants (rail-expanded,\n * drawer, modal). `0` keeps the default, which is the width of the parent: the\n * surface never spills out of it, whatever `width` says.\n */\n readonly maxWidth = input(0, { transform: numberAttribute });\n\n /** When `true` the whole surface is hidden (animated off-screen) without being destroyed. */\n readonly hidden = input(false, { transform: booleanAttribute });\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n\n /** Emitted when a destination is activated by the user. */\n readonly itemSelected = output<NavigationSelection>();\n\n /** Emitted when the leading menu button is pressed. */\n readonly menuClick = output<void>();\n\n // ── View queries ───────────────────────────────────────────────────────────\n\n /** Focusable destination elements, in DOM order; used for keyboard roving. */\n private readonly itemElements = viewChildren<ElementRef<HTMLElement>>('navItem');\n\n /** Focusable entries of the floating submenu panel, in DOM order. */\n private readonly panelElements = viewChildren<ElementRef<HTMLElement>>('panelItem');\n\n // ── Router state ───────────────────────────────────────────────────────────\n\n /** Current router URL, kept in a signal so the template stays zoneless-friendly. */\n private readonly routerUrl = signal<string | undefined>(undefined);\n\n // ── Theme state ────────────────────────────────────────────────────────────\n\n /**\n * Ticks whenever the application theme moves. The emitted value is ignored on\n * purpose: it is a change notification, not the answer.\n *\n * Reads `themeService`, so it MUST stay below the injected dependencies: moved\n * above them it would read `undefined`, `?? EMPTY` would swallow it and the\n * theme would silently stop propagating, with nothing to show for it at\n * compile time.\n */\n private readonly themeChanged = toSignal(this.themeService?.changed ?? EMPTY, { initialValue: undefined });\n\n /**\n * `true` when the dark theme is active; selects the dark frame set of a sprite.\n *\n * The answer comes from `getTheme()`, the only one that resolves `auto`\n * against the OS preference. `getTheme()` already reads a signal for the\n * explicit modes, so `themeChanged()` is read for the one case that is not\n * reactive on its own: mode `auto` plus a change of the OS colour scheme,\n * which leaves the stored mode on `auto` and only travels through `changed`.\n * Falls back to the light set when no `ThemeService` is provided.\n */\n private readonly isDark = computed(() => {\n this.themeChanged();\n return this.themeService?.getTheme() === 'dark';\n });\n\n // ── Submenu overlay state ──────────────────────────────────────────────────\n\n /** Id of the destination whose children are currently shown in the floating panel. */\n private readonly popupId = signal<string | undefined>(undefined);\n\n /**\n * Destination whose children are currently shown in the floating panel.\n *\n * Derived from the id and NOT stored as an object: the render model is rebuilt\n * whenever the destinations, the resolved URLs or the theme change, and a\n * stored object would keep the panel painting the sprite frames of the\n * previous theme until the panel is closed and reopened.\n *\n * The search is recursive because a panel entry can itself own children and\n * open a panel of its own, and those nested render models are not part of the\n * top level of `visibleGroups`.\n *\n * Reads `visibleGroups`, which is declared further down: safe because\n * `computed` is lazy and nothing reads this before the first render — the\n * opposite of `themeChanged` above, which reads its dependency immediately.\n */\n protected readonly popupItem = computed<NavigationRenderItem | undefined>(() => {\n const id = this.popupId();\n if (id === undefined) return undefined;\n const find = (list: readonly NavigationRenderItem[]): NavigationRenderItem | undefined => {\n for (const rendered of list) {\n if (rendered.item.id === id) return rendered;\n const nested = find(rendered.children);\n if (nested) return nested;\n }\n return undefined;\n };\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n const hit = find(section.items);\n if (hit) return hit;\n }\n }\n // The destination went away while its panel was open.\n return undefined;\n });\n\n /** Element the floating panel is anchored to. */\n private readonly popupAnchor = signal<HTMLElement | undefined>(undefined);\n\n constructor() {\n const router = this.router;\n if (router) {\n this.routerUrl.set(router.url);\n router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map(e => e.urlAfterRedirects),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(url => this.routerUrl.set(url));\n }\n }\n\n // ── Derived state ──────────────────────────────────────────────────────────\n\n /** Sections actually rendered: the `sections` input, or a single implicit section wrapping `items`. */\n private readonly resolvedSections = computed<readonly NavigationSection[]>(() => {\n const sections = this.sections();\n if (sections.length > 0) return sections;\n return [{ id: '__default', items: this.items() }];\n });\n\n /** Every destination, nested ones included, in depth-first order. */\n private readonly allItems = computed<readonly NavigationItem[]>(() => {\n const result: NavigationItem[] = [];\n const walk = (list: readonly NavigationItem[]): void => {\n for (const item of list) {\n result.push(item);\n if (item.children?.length) walk(item.children);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** Map of destination id to the id of its parent destination. */\n private readonly parentOf = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const walk = (list: readonly NavigationItem[], parentId?: string): void => {\n for (const item of list) {\n if (parentId !== undefined) result.set(item.id, parentId);\n if (item.children?.length) walk(item.children, item.id);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** The variant to render, resolving `auto` against the active CDK breakpoint. */\n protected readonly resolvedVariant = computed<ResolvedNavigationVariant>(() => {\n const variant = this.variant();\n if (variant !== 'auto') return variant;\n const alias = this.media.currentBp();\n return this.autoVariants()[alias] ?? DEFAULT_NAVIGATION_AUTO_VARIANTS[alias];\n });\n\n /** `true` for the variants that render labels beside icons and support sections. */\n protected readonly isExpanded = computed(() =>\n EXPANDED_NAVIGATION_VARIANTS.includes(this.resolvedVariant())\n );\n\n /** `true` when the surface is the modal drawer. */\n protected readonly isModal = computed(() => this.resolvedVariant() === 'modal');\n\n /** `true` when the modal drawer is currently open. */\n protected readonly isOverlayOpen = computed(() => this.isModal() && this.open());\n\n /** `true` when the surface must be visually hidden. */\n protected readonly isHidden = computed(() => this.hidden() || (this.isModal() && !this.open()));\n\n /** Resolved icon / label arrangement. */\n protected readonly resolvedLayout = computed<Exclude<NavigationItemLayout, 'auto'>>(() => {\n if (this.isExpanded()) return 'horizontal';\n const layout = this.itemLayout();\n if (layout !== 'auto') return layout;\n // M3 Expressive: the navigation bar switches to a horizontal item layout from 600dp upwards.\n return this.resolvedVariant() === 'bar' && this.media.currentBp() !== 'xs' ? 'horizontal' : 'vertical';\n });\n\n /** Resolved label visibility; the expanded variants always show labels. */\n protected readonly resolvedLabelVisibility = computed<Exclude<NavigationLabelVisibility, 'auto'>>(() => {\n if (this.isExpanded()) return 'labeled';\n const visibility = this.labelVisibility();\n return visibility === 'auto' ? 'labeled' : visibility;\n });\n\n /** `true` when the headline row (menu button, headline text) is rendered. */\n protected readonly showsHeader = computed(() =>\n this.resolvedVariant() !== 'bar' && (this.showMenuButton() || (this.isExpanded() && !!this.headline()))\n );\n\n /**\n * Geometry of the active indicator:\n * `compact` wraps the icon only (56x32 pill), `wide` wraps icon and label\n * together, exactly as described by the M3 Expressive specs.\n */\n protected readonly indicatorMode = computed<'compact' | 'wide'>(() =>\n this.isExpanded() || this.resolvedLayout() === 'horizontal' ? 'wide' : 'compact'\n );\n\n /** Tooltip placement derived from the variant and from the anchoring edge. */\n protected readonly tooltipPosition = computed<TooltipPosition>(() => {\n if (this.resolvedVariant() === 'bar') return 'above';\n return this.position() === 'end' ? 'before' : 'after';\n });\n\n /** Inline width override for the rail / drawer, or `undefined` to keep the spec default. */\n protected readonly widthStyle = computed<string | undefined>(() => {\n const width = this.width();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline width override for the collapsed rail, or `undefined` to keep the spec default. */\n protected readonly railWidthStyle = computed<string | undefined>(() => {\n const width = this.railWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline lower bound for the expanded variants, or `undefined` to keep the default. */\n protected readonly minWidthStyle = computed<string | undefined>(() => {\n const width = this.minWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Inline upper bound for the expanded variants, or `undefined` to keep the default. */\n protected readonly maxWidthStyle = computed<string | undefined>(() => {\n const width = this.maxWidth();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Map of destination id to resolved URL. Recomputed only when the destinations change. */\n private readonly hrefs = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const router = this.router;\n const relativeTo = this.relativeTo();\n for (const item of this.allItems()) {\n if (item.href) {\n result.set(item.id, item.href);\n continue;\n }\n if (item.route !== undefined && router) {\n const commands = Array.isArray(item.route) ? [...item.route] : [item.route];\n try {\n const tree = router.createUrlTree(commands, {\n queryParams: item.queryParams as Params | undefined,\n fragment: item.fragment,\n relativeTo,\n });\n result.set(item.id, router.serializeUrl(tree));\n } catch {\n // Invalid route commands: the destination degrades to a plain button.\n }\n }\n }\n return result;\n });\n\n /**\n * Static render model, rebuilt only when the destinations, the resolved URLs\n * or the theme change — never when the selection or the expansion state\n * changes. The theme is a dependency because sprite icons carry one frame set\n * per theme, and the frames are baked into the inline style of the icon.\n */\n private readonly renderGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const hrefs = this.hrefs();\n const dark = this.isDark();\n const counter = { value: 0 };\n const top: NavigationRenderSection[] = [];\n const bottom: NavigationRenderSection[] = [];\n\n for (const section of this.resolvedSections()) {\n const topItems: NavigationRenderItem[] = [];\n const bottomItems: NavigationRenderItem[] = [];\n for (const item of section.items) {\n const rendered = NavigationBarComponent.buildRenderItem(item, section, undefined, 0, counter, hrefs, dark);\n (item.align === 'bottom' ? bottomItems : topItems).push(rendered);\n }\n if (topItems.length > 0) top.push({ section, items: topItems });\n if (bottomItems.length > 0) bottom.push({ section, items: bottomItems });\n }\n\n const groups: NavigationRenderGroup[] = [];\n if (top.length > 0) groups.push({ align: 'top', sections: top });\n if (bottom.length > 0) groups.push({ align: 'bottom', sections: bottom });\n return groups;\n });\n\n /** Id of the destination matching the current router URL, using longest-prefix matching. */\n private readonly routerActiveId = computed<string | undefined>(() => {\n if (!this.routerSync()) return undefined;\n const url = this.routerUrl();\n if (!url) return undefined;\n const path = NavigationBarComponent.pathOf(url);\n const hrefs = this.hrefs();\n let best: string | undefined;\n let bestLength = -1;\n for (const item of this.allItems()) {\n if (item.href || item.route === undefined) continue;\n const href = hrefs.get(item.id);\n if (!href) continue;\n const target = NavigationBarComponent.pathOf(href);\n const matches = item.exact\n ? path === target\n : path === target || path.startsWith(target.endsWith('/') ? target : `${target}/`);\n if (matches && target.length > bestLength) {\n best = item.id;\n bestLength = target.length;\n }\n }\n return best;\n });\n\n /** Id of the currently active destination: router URL first, explicit selection as fallback. */\n protected readonly activeId = computed<string | undefined>(\n () => this.routerActiveId() ?? this.selectedId()\n );\n\n /**\n * Expansion state used when `expandedIds` is left unbound: the destinations\n * flagged `expanded`, plus every ancestor of the active destination.\n */\n private readonly defaultExpandedIds = computed<readonly string[]>(() => {\n const result = new Set<string>();\n for (const item of this.allItems()) {\n if (item.expanded) result.add(item.id);\n }\n const parents = this.parentOf();\n const visited = new Set<string>();\n let current = this.activeId();\n while (current !== undefined && !visited.has(current)) {\n visited.add(current);\n const parent = parents.get(current);\n if (parent === undefined) break;\n result.add(parent);\n current = parent;\n }\n return [...result];\n });\n\n /** Ids of the parent destinations currently expanded. */\n protected readonly expandedSet = computed<ReadonlySet<string>>(\n () => new Set(this.expandedIds() ?? this.defaultExpandedIds())\n );\n\n /** `true` when the current variant collapses `hideWhenCompact` destinations into the overflow menu. */\n protected readonly overflowApplies = computed(() => {\n const mode = this.overflowMode();\n if (mode === 'never') return false;\n const variant = this.resolvedVariant();\n return mode === 'bar' ? variant === 'bar' : variant === 'bar' || variant === 'rail';\n });\n\n /**\n * Render model actually walked by the template: the static model with the\n * compact-only destinations moved into the overflow menu and the children of\n * the expanded parents spliced in.\n */\n protected readonly visibleGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const inline = this.isExpanded();\n const open = this.expandedSet();\n const overflow = this.overflowApplies();\n const max = this.maxVisibleItems();\n\n // The bar ignores per-item anchoring, so both groups share a single row and\n // therefore a single overflow entry.\n let groups = this.resolvedVariant() === 'bar'\n ? NavigationBarComponent.mergeGroups(this.renderGroups())\n : this.renderGroups();\n\n if (overflow || max > 0) {\n groups = groups.map(group => this.applyOverflow(group, overflow, max));\n }\n if (!inline) return groups;\n\n const flatten = (list: readonly NavigationRenderItem[]): readonly NavigationRenderItem[] => {\n let expandedAny = false;\n const result: NavigationRenderItem[] = [];\n for (const rendered of list) {\n result.push(rendered);\n if (rendered.hasChildren && open.has(rendered.item.id)) {\n expandedAny = true;\n result.push(...flatten(rendered.children));\n }\n }\n return expandedAny ? result : list;\n };\n\n return groups.map(group => ({\n align: group.align,\n sections: group.sections.map(section => ({\n section: section.section,\n items: flatten(section.items),\n })),\n }));\n });\n\n /**\n * Ids rendered with the selected styling: the active destination alone, and only\n * while it is on screen. A parent stands in for nothing here — the template drops\n * it unless it owns a route of its own — so a destination hidden inside a closed\n * branch leaves this set empty and `ancestorIds` marks the trail instead.\n */\n protected readonly highlightedIds = computed<ReadonlySet<string>>(() => {\n const active = this.activeId();\n const result = new Set<string>();\n if (active === undefined) return result;\n\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n for (const item of section.items) {\n if (item.item.id === active) {\n result.add(active);\n return result;\n }\n }\n }\n }\n return result;\n });\n\n /**\n * Ids of the rows that close an expanded branch: the last nested destination\n * before the list goes back to the top level, or before it ends. They are what\n * carries the gap that separates a branch from what follows it — a margin on\n * the parent would not do, because the branch it opens is not inside it.\n */\n protected readonly branchEndIds = computed<ReadonlySet<string>>(() => {\n const result = new Set<string>();\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n const items = section.items;\n for (let i = 0; i < items.length; i++) {\n if (items[i].depth === 0) continue;\n const next = items[i + 1];\n if (!next || next.depth === 0) result.add(items[i].item.id);\n }\n }\n }\n return result;\n });\n\n /**\n * Ids of the ancestors of the active destination. No variant ever shows a parent\n * as selected, so this trail is what tells the user where they are: it marks the\n * whole chain down to the active destination, whether its branch is open, closed\n * or inside a floating panel. Ancestors that are not rendered simply never reach\n * the template.\n */\n protected readonly ancestorIds = computed<ReadonlySet<string>>(() => {\n const active = this.activeId();\n const result = new Set<string>();\n if (active === undefined) return result;\n\n // Depth-first walk that records the ancestors of `active` on the way back up:\n // a branch that does not hold it contributes nothing.\n const walk = (items: readonly NavigationRenderItem[], trail: string[]): boolean => {\n for (const item of items) {\n if (item.item.id === active) {\n for (const id of trail) result.add(id);\n return true;\n }\n trail.push(item.item.id);\n const found = walk(item.children, trail);\n trail.pop();\n if (found) return true;\n }\n return false;\n };\n\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n if (walk(section.items.filter(item => item.depth === 0), [])) return result;\n }\n }\n return result;\n });\n\n /**\n * Rows of the floating submenu panel. Nested destinations one level down are\n * flattened under a heading, so the overflow menu can hold parents too.\n */\n protected readonly popupEntries = computed<readonly NavigationPanelEntry[]>(() => {\n const parent = this.popupItem();\n if (!parent) return [];\n const result: NavigationPanelEntry[] = [];\n for (const child of parent.children) {\n if (child.hasChildren) {\n result.push({ key: `${child.item.id}__heading`, label: child.item.label });\n for (const grandChild of child.children) {\n // Flagged, not just listed: a heading followed by rows aligned with it\n // reads as one flat list, and which rows belong to which group is lost.\n result.push({ key: grandChild.item.id, render: grandChild, grouped: true });\n }\n } else {\n result.push({ key: child.item.id, render: child });\n }\n }\n return result;\n });\n\n /** `true` when the floating submenu panel must be shown. */\n protected readonly isPopupOpen = computed(() => !this.isExpanded() && !!this.popupItem());\n\n /** Element the floating submenu panel is anchored to. */\n protected readonly popupOrigin = computed<HTMLElement>(\n () => this.popupAnchor() ?? this.hostRef.nativeElement\n );\n\n /** Connected positions of the floating submenu panel, derived from the variant. */\n protected readonly popupPositions = computed<ConnectedPosition[]>(() => {\n if (this.resolvedVariant() === 'bar') {\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\n ];\n }\n if (this.position() === 'end') {\n return [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },\n ];\n }\n return [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },\n ];\n });\n\n /** `true` when the layout runs right-to-left; used to mirror the arrow keys. */\n private readonly isRtl = computed(() => this.directionality?.value === 'rtl');\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n /**\n * Activates a destination, or expands it when it owns nested destinations.\n * A parent never navigates: it toggles its group inline in the wide variants\n * and opens the floating panel in the compact ones.\n * @param render - The render model of the activated destination.\n * @param event - The originating mouse or keyboard event.\n */\n protected select(render: NavigationRenderItem, event: Event): void {\n const item = render.item;\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n\n if (render.hasChildren) {\n event.preventDefault();\n if (this.isExpanded()) {\n this.toggleExpanded(item.id);\n } else {\n this.openPopup(render, event);\n }\n return;\n }\n\n // Let the browser handle modified clicks (new tab / new window) natively.\n const mouse = event as MouseEvent;\n if (render.href && (mouse.ctrlKey || mouse.metaKey || mouse.shiftKey || mouse.button === 1)) {\n return;\n }\n\n if (render.routed && render.href) {\n event.preventDefault();\n void this.router?.navigateByUrl(render.href);\n }\n\n this.selectedId.set(item.id);\n this.itemSelected.emit({ item, section: render.section, parent: render.parent, index: render.index });\n\n this.closePopup();\n if (this.isModal() && this.closeOnSelect()) {\n this.open.set(false);\n }\n }\n\n /**\n * Emits `menuClick` when the leading menu button is pressed.\n */\n protected onMenuClick(): void {\n this.menuClick.emit();\n }\n\n /**\n * Closes the modal drawer when the scrim is clicked.\n */\n protected onScrimClick(): void {\n this.open.set(false);\n }\n\n /**\n * Handles keyboard interaction: arrow keys move the focus between\n * destinations, `Home` / `End` jump to the first / last one and `Escape`\n * closes the floating submenu panel or the modal drawer.\n *\n * The same handler serves the surface and the floating panel, and it tells\n * them apart by `currentTarget`: roving inside an open `role=\"menu\"` must stay\n * inside it, and a programmatic `focus()` is NOT stopped by the focus trap, so\n * sharing one element list would send the focus onto the surface behind the\n * overlay.\n *\n * @param event - The originating keyboard event.\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n if (this.popupItem()) {\n event.preventDefault();\n this.closePopup();\n return;\n }\n if (this.isOverlayOpen()) {\n event.preventDefault();\n this.open.set(false);\n return;\n }\n }\n\n // The panel is always a vertical list, whatever the variant behind it.\n const inPanel = (event.currentTarget as HTMLElement | null)?.classList.contains('ars-nav-submenu') === true;\n const horizontal = !inPanel && this.resolvedVariant() === 'bar';\n const forward = horizontal ? (this.isRtl() ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';\n const backward = horizontal ? (this.isRtl() ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';\n\n let delta = 0;\n if (event.key === forward) delta = 1;\n else if (event.key === backward) delta = -1;\n else if (event.key !== 'Home' && event.key !== 'End') return;\n\n const elements = inPanel ? this.panelElements() : this.itemElements();\n if (elements.length === 0) return;\n\n const current = elements.findIndex(ref => ref.nativeElement === event.target);\n let next: number;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = elements.length - 1;\n else if (current < 0) next = 0;\n else next = (current + delta + elements.length) % elements.length;\n\n event.preventDefault();\n elements[next]?.nativeElement.focus();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Expands or collapses the parent destination with the given id.\n * @param id - Identifier of the parent destination to toggle.\n */\n toggleExpanded(id: string): void {\n const next = new Set(this.expandedSet());\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n // The rows that are about to appear do not exist yet: the scroll is read and applied\n // after the next render, when they do.\n afterNextRender(() => this.revealBranch(id), { injector: this.injector });\n }\n this.expandedIds.set([...next]);\n }\n\n /**\n * Opens the floating submenu panel of a parent destination.\n * @param render - The render model of the parent destination.\n * @param event - The originating event, used to anchor the panel.\n */\n protected openPopup(render: NavigationRenderItem, event: Event): void {\n const anchor = event.currentTarget as HTMLElement | null;\n this.popupAnchor.set(anchor ?? undefined);\n this.popupId.set(this.popupItem()?.item.id === render.item.id ? undefined : render.item.id);\n }\n\n /**\n * Closes the floating submenu panel.\n */\n closePopup(): void {\n this.popupId.set(undefined);\n // Otherwise the component keeps a reference to a detached element.\n this.popupAnchor.set(undefined);\n }\n\n /**\n * Opens the modal drawer. No-op for the other variants.\n */\n openDrawer(): void {\n this.open.set(true);\n }\n\n /**\n * Closes the modal drawer. No-op for the other variants.\n */\n closeDrawer(): void {\n this.open.set(false);\n }\n\n /**\n * Toggles the modal drawer. No-op for the other variants.\n */\n toggleDrawer(): void {\n this.open.update(open => !open);\n }\n\n /**\n * Moves the browser focus to the destination with the given id.\n * @param id - Identifier of the destination to focus.\n * @returns `true` when a matching destination was found and focused.\n */\n focusItem(id: string): boolean {\n for (const ref of this.itemElements()) {\n if (ref.nativeElement.dataset['navId'] === id) {\n ref.nativeElement.focus();\n return true;\n }\n }\n return false;\n }\n\n /**\n * Scrolls the list so that the destinations a branch has just revealed are visible.\n *\n * Opening a parent sitting near the bottom of the list adds its children BELOW the fold: the\n * row answers the click, and nothing seems to happen. This scrolls to the end of the branch so\n * the options show up where the user is already looking.\n *\n * The parent row is never pushed out of the top: when a branch is taller than the list, showing\n * its end would cost the row that was clicked, so the scroll stops with the parent at the top\n * edge and the branch runs off the bottom — the user reads it downwards from there.\n *\n * Only the wide variants expand inline; in the compact ones the children live in the floating\n * panel and there is nothing to scroll.\n *\n * @param id - Identifier of the parent destination that has just been expanded.\n * @returns void\n */\n private revealBranch(id: string): void {\n if (!this.isExpanded()) return;\n\n const items = this.itemElements();\n const index = items.findIndex(ref => ref.nativeElement.dataset['navId'] === id);\n if (index < 0) return;\n\n const parent = items[index].nativeElement;\n const list = parent.closest('.ars-nav__items') as HTMLElement | null;\n if (!list) return;\n\n // The children are spliced in right after their parent and carry a deeper `data-depth`, so the\n // branch is the run of rows that follows until the depth drops back.\n const depth = Number(parent.dataset['depth'] ?? 0);\n let last = parent;\n for (let i = index + 1; i < items.length; i++) {\n const row = items[i].nativeElement;\n if (row.closest('.ars-nav__items') !== list) break;\n if (Number(row.dataset['depth'] ?? 0) <= depth) break;\n last = row;\n }\n // Nothing was revealed (an empty branch, or the rows are not rendered): nothing to scroll to.\n if (last === parent) return;\n\n const view = list.clientHeight;\n if (view === 0 || list.scrollHeight <= view) return;\n\n // `clientTop` is the top border: rects are measured from the border box, scrolling from the\n // padding box, and without it a themed list with a border would scroll a hair short.\n const origin = list.getBoundingClientRect().top + list.clientTop - list.scrollTop;\n const top = parent.getBoundingClientRect().top - origin;\n const end = last.getBoundingClientRect().bottom - origin;\n\n // Scroll only far enough to clear the end of the branch, and never past the parent row.\n const needed = end + BRANCH_SCROLL_PADDING - view;\n if (needed <= list.scrollTop) return;\n const target = Math.max(0, Math.min(needed, top - BRANCH_SCROLL_PADDING));\n if (target <= list.scrollTop) return;\n\n list.scrollTo({ top: target, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n\n /**\n * Moves the compact-only destinations of a group into a synthesized overflow\n * destination appended at the end of the group.\n * @param group - The group to process.\n * @param overflow - `true` when `hideWhenCompact` must be honoured.\n * @param max - Hard cap on the inline destinations; `0` disables it.\n * @returns The group with the overflow destination applied.\n */\n private applyOverflow(\n group: NavigationRenderGroup,\n overflow: boolean,\n max: number\n ): NavigationRenderGroup {\n const kept: { sectionIndex: number; render: NavigationRenderItem }[] = [];\n const overflowed: NavigationRenderItem[] = [];\n\n group.sections.forEach((section, sectionIndex) => {\n for (const render of section.items) {\n if (overflow && render.item.hideWhenCompact) overflowed.push(render);\n else kept.push({ sectionIndex, render });\n }\n });\n\n const slots = kept.length + (overflowed.length > 0 ? 1 : 0);\n if (max > 0 && slots > max) {\n const moved = kept.splice(Math.max(1, max - 1));\n for (const entry of moved) overflowed.push(entry.render);\n }\n\n if (overflowed.length === 0) return group;\n\n const sections: NavigationRenderSection[] = group.sections.map((section, sectionIndex) => ({\n section: section.section,\n items: kept.filter(entry => entry.sectionIndex === sectionIndex).map(entry => entry.render),\n }));\n\n const last = sections[sections.length - 1];\n sections[sections.length - 1] = {\n section: last.section,\n items: [...last.items, this.buildOverflowItem(overflowed)],\n };\n\n return { align: group.align, sections: sections.filter(section => section.items.length > 0) };\n }\n\n /**\n * Builds the synthesized, icon-only overflow destination.\n * @param children - The destinations moved into the overflow menu.\n * @returns The render model of the overflow destination.\n */\n private buildOverflowItem(children: readonly NavigationRenderItem[]): NavigationRenderItem {\n const label = this.overflowLabel();\n const icon = this.overflowIcon();\n return {\n item: { id: NAVIGATION_OVERFLOW_ID, label, icon },\n index: -1,\n depth: 0,\n routed: false,\n iconOff: icon,\n iconOn: icon,\n badgeText: '',\n hasBadge: false,\n iconOnly: true,\n hasChildren: true,\n children,\n ariaLabel: label,\n tooltip: label,\n };\n }\n\n /**\n * Merges the `top` and `bottom` groups into a single `top` group, combining\n * the sections that share an id so `@for` track keys stay unique.\n * @param groups - The groups to merge.\n * @returns A single-group array, or the input when there is nothing to merge.\n */\n private static mergeGroups(\n groups: readonly NavigationRenderGroup[]\n ): readonly NavigationRenderGroup[] {\n if (groups.length < 2) return groups;\n const order: string[] = [];\n const byId = new Map<string, NavigationRenderSection>();\n for (const group of groups) {\n for (const section of group.sections) {\n const existing = byId.get(section.section.id);\n if (existing) {\n byId.set(section.section.id, {\n section: existing.section,\n items: [...existing.items, ...section.items],\n });\n } else {\n order.push(section.section.id);\n byId.set(section.section.id, section);\n }\n }\n }\n return [{ align: 'top', sections: order.map(id => byId.get(id)!) }];\n }\n\n /**\n * Builds the render model of a destination and, recursively, of its children.\n * @param item - The source destination.\n * @param section - The section the destination belongs to.\n * @param parent - The parent destination, for nested destinations.\n * @param depth - Nesting level of the destination.\n * @param counter - Shared counter producing the flat destination index.\n * @param hrefs - Map of destination id to resolved URL.\n * @param dark - `true` when the dark theme is active, selecting the dark sprite frames.\n * @returns The render model of the destination.\n */\n private static buildRenderItem(\n item: NavigationItem,\n section: NavigationSection,\n parent: NavigationItem | undefined,\n depth: number,\n counter: { value: number },\n hrefs: ReadonlyMap<string, string>,\n dark: boolean\n ): NavigationRenderItem {\n const href = hrefs.get(item.id);\n // Icon precedence: registered SVG, then sprite sheet, then image, then ligature.\n const svgOff = item.svgIcon;\n const svgOn = item.activeSvgIcon ?? item.svgIcon;\n const spriteStyle = NavigationBarComponent.buildSpriteStyle(item, dark);\n const imageOff = spriteStyle || svgOff ? undefined : item.imageIcon;\n const imageOn = spriteStyle || svgOn ? undefined : (item.activeImageIcon ?? item.imageIcon);\n const index = counter.value++;\n\n const children = (item.children ?? []).map(child =>\n NavigationBarComponent.buildRenderItem(child, section, item, depth + 1, counter, hrefs, dark)\n );\n\n return {\n item,\n section: section.id === '__default' ? undefined : section,\n parent,\n index,\n depth,\n href,\n routed: !!href && !item.href,\n iconOff: svgOff || spriteStyle || imageOff ? undefined : item.icon,\n iconOn: svgOn || spriteStyle || imageOn ? undefined : (item.activeIcon ?? item.icon),\n svgOff,\n svgOn,\n imageOff,\n imageOn,\n spriteStyle,\n badgeText: NavigationBarComponent.formatBadge(item),\n hasBadge: !!item.badge,\n iconOnly: false,\n hasChildren: children.length > 0,\n children,\n ariaLabel: item.ariaLabel ?? item.label,\n tooltip: item.tooltip ?? item.label,\n };\n }\n\n /**\n * Translates a sprite descriptor into the inline custom properties the\n * stylesheet uses to size the icon and to shift `background-position` per\n * interaction state.\n *\n * The sheet is rescaled through `background-size` instead of being drawn at\n * its natural size: that is what lets a strip of 26px frames be painted at the\n * 24px of the surrounding Material icons without the neighbouring frames\n * bleeding into the box, and it makes the step between two frames exactly the\n * rendered side.\n *\n * @param item - The destination whose sprite must be translated.\n * @param dark - `true` when the dark theme is active, selecting the `dark` frame set.\n * @returns The inline style map, or `undefined` when the destination uses no sprite.\n */\n private static buildSpriteStyle(item: NavigationItem, dark: boolean): Record<string, string> | undefined {\n const sprite = item.sprite;\n if (!sprite) return undefined;\n\n // The inline indices are the light set; `dark` overrides only what differs.\n const light: NavigationSpriteFrames = sprite;\n const frames: NavigationSpriteFrames = dark && sprite.dark ? { ...light, ...sprite.dark } : light;\n const normal = frames.normal ?? 0;\n const hover = frames.hover ?? normal;\n const active = frames.active ?? hover;\n const disabled = frames.disabled ?? normal;\n\n const source = sprite.size ?? SPRITE_DEFAULT_SIZE;\n const size = sprite.renderSize ?? source;\n const count = NavigationBarComponent.spriteFrameCount(sprite);\n const vertical = (sprite.direction ?? 'vertical') === 'vertical';\n\n return {\n '--sp-url': `url(\"${sprite.url}\")`,\n '--sp-size': `${size}px`,\n '--sp-sheet-x': vertical ? `${size}px` : `${size * count}px`,\n '--sp-sheet-y': vertical ? `${size * count}px` : `${size}px`,\n '--sp-step-x': vertical ? '0px' : `${-size}px`,\n '--sp-step-y': vertical ? `${-size}px` : '0px',\n '--sp-normal': `${normal}`,\n '--sp-hover': `${hover}`,\n '--sp-active': `${active}`,\n '--sp-disabled': `${disabled}`,\n };\n }\n\n /**\n * Number of frames a sprite sheet holds, needed to rescale it.\n * @param sprite - The sprite descriptor to measure.\n * @returns The declared frame count, or the highest referenced index plus one.\n */\n private static spriteFrameCount(sprite: NavigationIconSprite): number {\n if (sprite.frames !== undefined && sprite.frames > 0) return sprite.frames;\n const indices = [\n sprite.normal, sprite.hover, sprite.active, sprite.disabled,\n sprite.dark?.normal, sprite.dark?.hover, sprite.dark?.active, sprite.dark?.disabled,\n ];\n let highest = 0;\n for (const index of indices) {\n if (index !== undefined && index > highest) highest = index;\n }\n return highest + 1;\n }\n\n /**\n * Formats the badge content of a destination.\n * @param item - The destination whose badge must be formatted.\n * @returns The badge text, or an empty string for a dot badge / no badge.\n */\n private static formatBadge(item: NavigationItem): string {\n const badge = item.badge;\n if (!badge || badge.value === undefined) return '';\n if (typeof badge.value === 'number') {\n const max = badge.max ?? 999;\n return badge.value > max ? `${max}+` : `${badge.value}`;\n }\n return badge.value;\n }\n\n /**\n * Strips the query string and the fragment from a URL.\n * @param url - The URL to normalise.\n * @returns The path portion of the URL.\n */\n private static pathOf(url: string): string {\n const withoutFragment = url.split('#')[0] ?? '';\n return withoutFragment.split('?')[0] ?? '';\n }\n}\n","@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 branchEnds = branchEndIds();\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--branch-end]=\"branchEnds.has(r.item.id)\"\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--branch-end]=\"branchEnds.has(r.item.id)\"\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","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.navigation\n */\nexport * from './navigation.definitions';\nexport * from './navigation-bar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arsedizioni/ars-utils",
3
- "version": "22.6.80",
3
+ "version": "22.6.82",
4
4
  "author": {
5
5
  "email": "software@arsedizioni.it",
6
6
  "name": "Fabio Buscaroli, Alberto Doria"
@@ -568,6 +568,13 @@ declare class NavigationBarComponent {
568
568
  * branch leaves this set empty and `ancestorIds` marks the trail instead.
569
569
  */
570
570
  protected readonly highlightedIds: _angular_core.Signal<ReadonlySet<string>>;
571
+ /**
572
+ * Ids of the rows that close an expanded branch: the last nested destination
573
+ * before the list goes back to the top level, or before it ends. They are what
574
+ * carries the gap that separates a branch from what follows it — a margin on
575
+ * the parent would not do, because the branch it opens is not inside it.
576
+ */
577
+ protected readonly branchEndIds: _angular_core.Signal<ReadonlySet<string>>;
571
578
  /**
572
579
  * Ids of the ancestors of the active destination. No variant ever shows a parent
573
580
  * as selected, so this trail is what tells the user where they are: it marks the