@cqa-lib/cqa-ui 1.1.557 → 1.1.558

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/esm2020/lib/sidebar/nav-item.component.mjs +171 -0
  2. package/esm2020/lib/sidebar/nav-menu.component.mjs +56 -0
  3. package/esm2020/lib/sidebar/nav-sub-item.component.mjs +27 -0
  4. package/esm2020/lib/sidebar/profile-menu/profile-menu.component.mjs +122 -0
  5. package/esm2020/lib/sidebar/profile-menu/profile-menu.models.mjs +4 -0
  6. package/esm2020/lib/sidebar/sidebar.component.mjs +286 -0
  7. package/esm2020/lib/sidebar/sidebar.models.mjs +5 -0
  8. package/esm2020/lib/sidebar/workspace-menu/workspace-menu.component.mjs +120 -0
  9. package/esm2020/lib/sidebar/workspace-menu/workspace-menu.models.mjs +2 -0
  10. package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +3 -3
  11. package/esm2020/lib/ui-kit.module.mjs +31 -1
  12. package/esm2020/lib/utils/tw-overlay-container.mjs +3 -1
  13. package/esm2020/public-api.mjs +10 -1
  14. package/fesm2015/cqa-lib-cqa-ui.mjs +818 -20
  15. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/fesm2020/cqa-lib-cqa-ui.mjs +801 -20
  17. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  18. package/lib/sidebar/nav-item.component.d.ts +48 -0
  19. package/lib/sidebar/nav-menu.component.d.ts +19 -0
  20. package/lib/sidebar/nav-sub-item.component.d.ts +11 -0
  21. package/lib/sidebar/profile-menu/profile-menu.component.d.ts +35 -0
  22. package/lib/sidebar/profile-menu/profile-menu.models.d.ts +35 -0
  23. package/lib/sidebar/sidebar.component.d.ts +97 -0
  24. package/lib/sidebar/sidebar.models.d.ts +63 -0
  25. package/lib/sidebar/workspace-menu/workspace-menu.component.d.ts +34 -0
  26. package/lib/sidebar/workspace-menu/workspace-menu.models.d.ts +12 -0
  27. package/lib/ui-kit.module.d.ts +164 -158
  28. package/package.json +1 -1
  29. package/public-api.d.ts +9 -0
@@ -0,0 +1,171 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/cdk/overlay";
4
+ import * as i2 from "@angular/material/tooltip";
5
+ import * as i3 from "@angular/common";
6
+ export class NavItemComponent {
7
+ constructor(overlay) {
8
+ this.overlay = overlay;
9
+ this.isActive = false;
10
+ /** Whether the sidebar is in expanded (wide) mode */
11
+ this.isExpanded = false;
12
+ /** Whether this item's sub-menu is open */
13
+ this.isOpen = false;
14
+ /** Current route / selection id — used to highlight child in collapsed flyout */
15
+ this.activeNavId = '';
16
+ this.itemClick = new EventEmitter();
17
+ /** Collapsed parent: drives CDK connected overlay for submenu */
18
+ this.showCollapsedFlyout = false;
19
+ this.closeFlyoutTimer = null;
20
+ this.collapsedFlyoutPositions = [
21
+ {
22
+ originX: 'end',
23
+ originY: 'center',
24
+ overlayX: 'start',
25
+ overlayY: 'center',
26
+ offsetX: 8
27
+ },
28
+ {
29
+ originX: 'end',
30
+ originY: 'top',
31
+ overlayX: 'start',
32
+ overlayY: 'top',
33
+ offsetX: 8
34
+ },
35
+ {
36
+ originX: 'end',
37
+ originY: 'bottom',
38
+ overlayX: 'start',
39
+ overlayY: 'bottom',
40
+ offsetX: 8
41
+ }
42
+ ];
43
+ this.flyoutScrollStrategy = this.overlay.scrollStrategies.reposition();
44
+ }
45
+ ngOnDestroy() {
46
+ this.clearFlyoutCloseTimer();
47
+ }
48
+ get hasChildren() {
49
+ return !!(this.item?.children?.length);
50
+ }
51
+ get collapsedFlyoutOpen() {
52
+ return (!this.isExpanded &&
53
+ this.showCollapsedFlyout &&
54
+ this.hasChildren &&
55
+ !!(this.item?.children?.length));
56
+ }
57
+ /**
58
+ * Collapsed rail: show label (leaf) or disabled copy in MatTooltip so it renders in CDK overlay,
59
+ * not as an absolute child inside the scrolling nav.
60
+ */
61
+ get collapsedRailTooltip() {
62
+ if (this.item?.disabled && this.item?.disabledTooltip) {
63
+ return this.item.disabledTooltip;
64
+ }
65
+ if (!this.isExpanded && !this.hasChildren && this.item?.label) {
66
+ return this.item.label;
67
+ }
68
+ return '';
69
+ }
70
+ get collapsedRailTooltipClass() {
71
+ return !this.isExpanded && this.collapsedRailTooltip ? 'cqa-nav-rail-tooltip' : '';
72
+ }
73
+ isChildRowActive(childId) {
74
+ return this.activeNavId === childId;
75
+ }
76
+ onHostMouseEnter() {
77
+ this.clearFlyoutCloseTimer();
78
+ if (!this.isExpanded && !this.item?.disabled && this.hasChildren) {
79
+ this.showCollapsedFlyout = true;
80
+ }
81
+ }
82
+ onHostMouseLeave() {
83
+ this.scheduleCloseCollapsedFlyout();
84
+ }
85
+ onHostFocusIn(_e) {
86
+ this.clearFlyoutCloseTimer();
87
+ if (!this.isExpanded && !this.item?.disabled && this.hasChildren) {
88
+ this.showCollapsedFlyout = true;
89
+ }
90
+ }
91
+ onHostFocusOut(e) {
92
+ if (this.isExpanded)
93
+ return;
94
+ const related = e.relatedTarget;
95
+ if (related?.closest('.cqa-nav-flyout-overlay')) {
96
+ return;
97
+ }
98
+ const host = e.currentTarget;
99
+ if (related && host.contains(related))
100
+ return;
101
+ this.closeCollapsedFlyout();
102
+ }
103
+ onFlyoutOverlayPointerEnter() {
104
+ this.clearFlyoutCloseTimer();
105
+ }
106
+ onFlyoutOverlayPointerLeave() {
107
+ this.scheduleCloseCollapsedFlyout();
108
+ }
109
+ onFlyoutOverlayFocusOut(e) {
110
+ const related = e.relatedTarget;
111
+ const panel = e.currentTarget;
112
+ if (related && panel.contains(related))
113
+ return;
114
+ const hostEl = this.navHostRef?.nativeElement;
115
+ if (related && hostEl?.contains(related))
116
+ return;
117
+ this.closeCollapsedFlyout();
118
+ }
119
+ closeCollapsedFlyout() {
120
+ this.clearFlyoutCloseTimer();
121
+ this.showCollapsedFlyout = false;
122
+ }
123
+ onClick() {
124
+ if (!this.item?.disabled) {
125
+ this.itemClick.emit(this.item.id);
126
+ }
127
+ }
128
+ onChildRowClick(e, child) {
129
+ e.stopPropagation();
130
+ if (child.disabled)
131
+ return;
132
+ this.itemClick.emit(child.id);
133
+ this.closeCollapsedFlyout();
134
+ }
135
+ clearFlyoutCloseTimer() {
136
+ if (this.closeFlyoutTimer) {
137
+ clearTimeout(this.closeFlyoutTimer);
138
+ this.closeFlyoutTimer = null;
139
+ }
140
+ }
141
+ scheduleCloseCollapsedFlyout() {
142
+ this.clearFlyoutCloseTimer();
143
+ this.closeFlyoutTimer = setTimeout(() => {
144
+ this.showCollapsedFlyout = false;
145
+ this.closeFlyoutTimer = null;
146
+ }, NavItemComponent.FLYOUT_CLOSE_DELAY_MS);
147
+ }
148
+ }
149
+ NavItemComponent.FLYOUT_CLOSE_DELAY_MS = 120;
150
+ NavItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavItemComponent, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
151
+ NavItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NavItemComponent, selector: "cqa-nav-item", inputs: { item: "item", isActive: "isActive", isExpanded: "isExpanded", isOpen: "isOpen", activeNavId: "activeNavId" }, outputs: { itemClick: "itemClick" }, viewQueries: [{ propertyName: "navHostRef", first: true, predicate: ["navHost"], descendants: true }], ngImport: i0, template: "<div class=\"cqa-nav-surface\">\n <div\n #navHost\n class=\"cqa-nav-host\"\n [class.cqa-nav-host--collapsed]=\"!isExpanded\"\n (mouseenter)=\"onHostMouseEnter()\"\n (mouseleave)=\"onHostMouseLeave()\"\n (focusin)=\"onHostFocusIn($event)\"\n (focusout)=\"onHostFocusOut($event)\">\n\n <button\n cdkOverlayOrigin\n #flyoutOrigin=\"cdkOverlayOrigin\"\n class=\"cqa-nav-item\"\n [class.cqa-nav-item--active]=\"isActive\"\n [class.cqa-nav-item--has-children]=\"hasChildren\"\n [class.cqa-nav-item--collapsed]=\"!isExpanded\"\n [class.cqa-nav-item--disabled]=\"item?.disabled\"\n [class.cqa-nav-item--has-live]=\"item?.status === 'live'\"\n [matTooltip]=\"collapsedRailTooltip\"\n [matTooltipDisabled]=\"!collapsedRailTooltip\"\n [matTooltipClass]=\"collapsedRailTooltipClass\"\n matTooltipPosition=\"right\"\n (click)=\"onClick()\"\n type=\"button\"\n [attr.aria-label]=\"!isExpanded ? (item?.label || '') : null\"\n [attr.aria-expanded]=\"!isExpanded && hasChildren ? showCollapsedFlyout : null\"\n [attr.aria-haspopup]=\"!isExpanded && hasChildren ? 'menu' : null\">\n\n <!-- Icon -->\n <span class=\"cqa-nav-icon\">\n <i [class]=\"item?.iconClass\"></i>\n </span>\n\n <!-- Label (hidden when sidebar collapsed) -->\n <span class=\"cqa-nav-label\" [class.cqa-nav-label--visible]=\"isExpanded\">\n {{ item?.label }}\n </span>\n\n <!-- Trailing slot: only shown when expanded -->\n <ng-container *ngIf=\"isExpanded\">\n <span *ngIf=\"item?.badge && !hasChildren\" class=\"cqa-nav-badge\">{{ item.badge }}</span>\n\n <span\n *ngIf=\"item?.status === 'live' && !hasChildren\"\n class=\"cqa-nav-status-dot cqa-nav-status-dot--live\">\n </span>\n\n <span\n *ngIf=\"item?.status === 'danger' && !hasChildren\"\n class=\"cqa-nav-status-dot cqa-nav-status-dot--danger\">\n </span>\n\n <span *ngIf=\"hasChildren\" class=\"cqa-nav-chev\" [class.cqa-nav-chev--open]=\"isOpen\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\">\n <polyline points=\"9,6 15,12 9,18\"/>\n </svg>\n </span>\n </ng-container>\n\n <span\n *ngIf=\"!isExpanded && item?.status === 'live'\"\n class=\"cqa-nav-live-corner\">\n </span>\n </button>\n\n <!-- Collapsed parent submenu: CDK overlay (outside aside / scrolling nav) -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"flyoutOrigin\"\n [cdkConnectedOverlayOpen]=\"collapsedFlyoutOpen\"\n [cdkConnectedOverlayPositions]=\"collapsedFlyoutPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"flyoutScrollStrategy\"\n [cdkConnectedOverlayPanelClass]=\"'cqa-nav-flyout-overlay-pane'\"\n (overlayOutsideClick)=\"closeCollapsedFlyout()\"\n (detach)=\"closeCollapsedFlyout()\">\n <div\n class=\"cqa-nav-flyout-overlay cqa-nav-flyout-panel\"\n role=\"menu\"\n [attr.aria-label]=\"item.label\"\n (mouseenter)=\"onFlyoutOverlayPointerEnter()\"\n (mouseleave)=\"onFlyoutOverlayPointerLeave()\"\n (focusout)=\"onFlyoutOverlayFocusOut($event)\">\n <div class=\"cqa-nav-flyout-panel-title\">{{ item.label }}</div>\n <button\n *ngFor=\"let child of item?.children\"\n type=\"button\"\n role=\"menuitem\"\n class=\"cqa-nav-flyout-row\"\n [class.cqa-nav-flyout-row--active]=\"isChildRowActive(child.id)\"\n [disabled]=\"child.disabled\"\n (click)=\"onChildRowClick($event, child)\">\n <span class=\"cqa-nav-flyout-row-icon\">\n <i *ngIf=\"child.iconClass\" [class]=\"child.iconClass\"></i>\n </span>\n <span class=\"cqa-nav-flyout-row-label\">{{ child.label }}</span>\n <span *ngIf=\"child.isNew\" class=\"cqa-nav-flyout-row-new\">New</span>\n </button>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.cqa-nav-surface,.cqa-nav-host{display:block;width:100%}.cqa-nav-host--collapsed{display:flex;flex-direction:column;align-items:center;position:relative;z-index:1}.cqa-nav-host--collapsed:hover,.cqa-nav-host--collapsed:focus-within{z-index:30}.cqa-nav-item{display:flex;align-items:center;gap:12px;padding:9px 10px;margin:1px 8px;border-radius:9px;color:#ffffffd9;font-size:14px;font-weight:600;line-height:1;letter-spacing:0;width:calc(100% - 16px);text-align:left;background:transparent;border:none;cursor:pointer;position:relative;transition:background .12s,color .12s;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-item:not(.cqa-nav-item--collapsed){color:#d8d9fc}.cqa-nav-item:hover:not(.cqa-nav-item--active):not(.cqa-nav-item--disabled){background:rgba(255,255,255,.12);color:#fff}.cqa-nav-item--active:not(.cqa-nav-item--collapsed){background:#8a8cf4;font-weight:600;box-shadow:inset 0 0 0 1px #d8d9fc4d;color:#fff}.cqa-nav-item--active:not(.cqa-nav-item--collapsed).cqa-nav-item--has-children{color:#d8d9fc}.cqa-nav-item--active:not(.cqa-nav-item--collapsed):hover{background:#8a8cf4}.cqa-nav-item--active:not(.cqa-nav-item--collapsed).cqa-nav-item--has-children:hover{color:#d8d9fc}.cqa-nav-item--active:not(.cqa-nav-item--collapsed):not(.cqa-nav-item--has-children):hover{color:#fff}.cqa-nav-item--active.cqa-nav-item--collapsed{background:rgba(177,178,248,.42);color:#fff;font-weight:600;box-shadow:inset 0 0 0 1px #d8d9fc4d}.cqa-nav-item.cqa-nav-item--collapsed:hover:not(.cqa-nav-item--active):not(.cqa-nav-item--disabled){background:#4c50ef;box-shadow:none}.cqa-nav-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.cqa-nav-item.cqa-nav-item--collapsed{justify-content:center;align-items:center;gap:0;padding:9px 0;margin:1px 0;width:40px;max-width:100%;box-sizing:border-box;color:#ffffffe0;overflow:visible;z-index:1}.cqa-nav-item.cqa-nav-item--collapsed .cqa-nav-label{flex:0 0 0;width:0;min-width:0;height:0;margin:0;padding:0;overflow:hidden;opacity:0;border:0;pointer-events:none}.cqa-nav-item.cqa-nav-item--collapsed:hover{z-index:auto}.cqa-nav-icon{width:20px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:inherit}.cqa-nav-item--collapsed .cqa-nav-icon i{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1}.cqa-nav-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transition:opacity .16s 80ms;color:inherit}.cqa-nav-label--visible{opacity:1}.cqa-nav-badge{font-size:11px;font-weight:600;background:rgba(255,255,255,.18);color:#fff;padding:1px 7px;border-radius:999px;flex-shrink:0}.cqa-nav-status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.cqa-nav-status-dot--live{background:#0dbd7d;box-shadow:0 0 6px #0dbd7d;animation:cqa-nav-pulse 2s ease-in-out infinite}.cqa-nav-status-dot--danger{background:#ee3f3f}.cqa-nav-chev{width:14px;height:14px;opacity:.6;flex-shrink:0;transition:transform .2s;display:flex;align-items:center;justify-content:center}.cqa-nav-chev--open{transform:rotate(90deg)}.cqa-nav-live-corner{position:absolute;top:5px;right:5px;width:9px;height:9px;background:#0dbd7d;border-radius:50%;border:2px solid #3f43ee;box-shadow:0 0 6px #0dbd7d}@keyframes cqa-nav-pulse{0%,to{opacity:1}50%{opacity:.4}}.cqa-nav-flyout-panel{min-width:188px;max-width:280px;padding:10px 8px 8px;background:#4c50ef;border-radius:10px;box-shadow:0 12px 32px #00000047;border:1px solid rgba(255,255,255,.12);pointer-events:auto;text-align:left;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-flyout-panel-title{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#ffffff8c;padding:2px 8px 8px;line-height:1.2}.cqa-nav-flyout-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;margin:0 0 2px;border:none;border-radius:8px;background:transparent;color:#fff;font-size:13px;font-weight:500;text-align:left;cursor:pointer;transition:background .12s,color .12s;font-family:inherit}.cqa-nav-flyout-row:last-child{margin-bottom:0}.cqa-nav-flyout-row:hover:not(:disabled){background:rgba(255,255,255,.1);color:#fff}.cqa-nav-flyout-row:disabled{opacity:.45;cursor:not-allowed}.cqa-nav-flyout-row--active{background:#8a8cf4;color:#fbfcff;font-weight:600}.cqa-nav-flyout-row--active:hover:not(:disabled){background:#8a8cf4;color:#fbfcff}.cqa-nav-flyout-row-icon{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:14px;opacity:.95}.cqa-nav-flyout-row-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-nav-flyout-row-new{flex-shrink:0;font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;background:#feecbd;color:#7e6012;border:1px solid #fddf92}\n"], directives: [{ type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.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"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavItemComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'cqa-nav-item', template: "<div class=\"cqa-nav-surface\">\n <div\n #navHost\n class=\"cqa-nav-host\"\n [class.cqa-nav-host--collapsed]=\"!isExpanded\"\n (mouseenter)=\"onHostMouseEnter()\"\n (mouseleave)=\"onHostMouseLeave()\"\n (focusin)=\"onHostFocusIn($event)\"\n (focusout)=\"onHostFocusOut($event)\">\n\n <button\n cdkOverlayOrigin\n #flyoutOrigin=\"cdkOverlayOrigin\"\n class=\"cqa-nav-item\"\n [class.cqa-nav-item--active]=\"isActive\"\n [class.cqa-nav-item--has-children]=\"hasChildren\"\n [class.cqa-nav-item--collapsed]=\"!isExpanded\"\n [class.cqa-nav-item--disabled]=\"item?.disabled\"\n [class.cqa-nav-item--has-live]=\"item?.status === 'live'\"\n [matTooltip]=\"collapsedRailTooltip\"\n [matTooltipDisabled]=\"!collapsedRailTooltip\"\n [matTooltipClass]=\"collapsedRailTooltipClass\"\n matTooltipPosition=\"right\"\n (click)=\"onClick()\"\n type=\"button\"\n [attr.aria-label]=\"!isExpanded ? (item?.label || '') : null\"\n [attr.aria-expanded]=\"!isExpanded && hasChildren ? showCollapsedFlyout : null\"\n [attr.aria-haspopup]=\"!isExpanded && hasChildren ? 'menu' : null\">\n\n <!-- Icon -->\n <span class=\"cqa-nav-icon\">\n <i [class]=\"item?.iconClass\"></i>\n </span>\n\n <!-- Label (hidden when sidebar collapsed) -->\n <span class=\"cqa-nav-label\" [class.cqa-nav-label--visible]=\"isExpanded\">\n {{ item?.label }}\n </span>\n\n <!-- Trailing slot: only shown when expanded -->\n <ng-container *ngIf=\"isExpanded\">\n <span *ngIf=\"item?.badge && !hasChildren\" class=\"cqa-nav-badge\">{{ item.badge }}</span>\n\n <span\n *ngIf=\"item?.status === 'live' && !hasChildren\"\n class=\"cqa-nav-status-dot cqa-nav-status-dot--live\">\n </span>\n\n <span\n *ngIf=\"item?.status === 'danger' && !hasChildren\"\n class=\"cqa-nav-status-dot cqa-nav-status-dot--danger\">\n </span>\n\n <span *ngIf=\"hasChildren\" class=\"cqa-nav-chev\" [class.cqa-nav-chev--open]=\"isOpen\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\">\n <polyline points=\"9,6 15,12 9,18\"/>\n </svg>\n </span>\n </ng-container>\n\n <span\n *ngIf=\"!isExpanded && item?.status === 'live'\"\n class=\"cqa-nav-live-corner\">\n </span>\n </button>\n\n <!-- Collapsed parent submenu: CDK overlay (outside aside / scrolling nav) -->\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"flyoutOrigin\"\n [cdkConnectedOverlayOpen]=\"collapsedFlyoutOpen\"\n [cdkConnectedOverlayPositions]=\"collapsedFlyoutPositions\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"flyoutScrollStrategy\"\n [cdkConnectedOverlayPanelClass]=\"'cqa-nav-flyout-overlay-pane'\"\n (overlayOutsideClick)=\"closeCollapsedFlyout()\"\n (detach)=\"closeCollapsedFlyout()\">\n <div\n class=\"cqa-nav-flyout-overlay cqa-nav-flyout-panel\"\n role=\"menu\"\n [attr.aria-label]=\"item.label\"\n (mouseenter)=\"onFlyoutOverlayPointerEnter()\"\n (mouseleave)=\"onFlyoutOverlayPointerLeave()\"\n (focusout)=\"onFlyoutOverlayFocusOut($event)\">\n <div class=\"cqa-nav-flyout-panel-title\">{{ item.label }}</div>\n <button\n *ngFor=\"let child of item?.children\"\n type=\"button\"\n role=\"menuitem\"\n class=\"cqa-nav-flyout-row\"\n [class.cqa-nav-flyout-row--active]=\"isChildRowActive(child.id)\"\n [disabled]=\"child.disabled\"\n (click)=\"onChildRowClick($event, child)\">\n <span class=\"cqa-nav-flyout-row-icon\">\n <i *ngIf=\"child.iconClass\" [class]=\"child.iconClass\"></i>\n </span>\n <span class=\"cqa-nav-flyout-row-label\">{{ child.label }}</span>\n <span *ngIf=\"child.isNew\" class=\"cqa-nav-flyout-row-new\">New</span>\n </button>\n </div>\n </ng-template>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.cqa-nav-surface,.cqa-nav-host{display:block;width:100%}.cqa-nav-host--collapsed{display:flex;flex-direction:column;align-items:center;position:relative;z-index:1}.cqa-nav-host--collapsed:hover,.cqa-nav-host--collapsed:focus-within{z-index:30}.cqa-nav-item{display:flex;align-items:center;gap:12px;padding:9px 10px;margin:1px 8px;border-radius:9px;color:#ffffffd9;font-size:14px;font-weight:600;line-height:1;letter-spacing:0;width:calc(100% - 16px);text-align:left;background:transparent;border:none;cursor:pointer;position:relative;transition:background .12s,color .12s;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-item:not(.cqa-nav-item--collapsed){color:#d8d9fc}.cqa-nav-item:hover:not(.cqa-nav-item--active):not(.cqa-nav-item--disabled){background:rgba(255,255,255,.12);color:#fff}.cqa-nav-item--active:not(.cqa-nav-item--collapsed){background:#8a8cf4;font-weight:600;box-shadow:inset 0 0 0 1px #d8d9fc4d;color:#fff}.cqa-nav-item--active:not(.cqa-nav-item--collapsed).cqa-nav-item--has-children{color:#d8d9fc}.cqa-nav-item--active:not(.cqa-nav-item--collapsed):hover{background:#8a8cf4}.cqa-nav-item--active:not(.cqa-nav-item--collapsed).cqa-nav-item--has-children:hover{color:#d8d9fc}.cqa-nav-item--active:not(.cqa-nav-item--collapsed):not(.cqa-nav-item--has-children):hover{color:#fff}.cqa-nav-item--active.cqa-nav-item--collapsed{background:rgba(177,178,248,.42);color:#fff;font-weight:600;box-shadow:inset 0 0 0 1px #d8d9fc4d}.cqa-nav-item.cqa-nav-item--collapsed:hover:not(.cqa-nav-item--active):not(.cqa-nav-item--disabled){background:#4c50ef;box-shadow:none}.cqa-nav-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.cqa-nav-item.cqa-nav-item--collapsed{justify-content:center;align-items:center;gap:0;padding:9px 0;margin:1px 0;width:40px;max-width:100%;box-sizing:border-box;color:#ffffffe0;overflow:visible;z-index:1}.cqa-nav-item.cqa-nav-item--collapsed .cqa-nav-label{flex:0 0 0;width:0;min-width:0;height:0;margin:0;padding:0;overflow:hidden;opacity:0;border:0;pointer-events:none}.cqa-nav-item.cqa-nav-item--collapsed:hover{z-index:auto}.cqa-nav-icon{width:20px;height:20px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:inherit}.cqa-nav-item--collapsed .cqa-nav-icon i{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1}.cqa-nav-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:0;transition:opacity .16s 80ms;color:inherit}.cqa-nav-label--visible{opacity:1}.cqa-nav-badge{font-size:11px;font-weight:600;background:rgba(255,255,255,.18);color:#fff;padding:1px 7px;border-radius:999px;flex-shrink:0}.cqa-nav-status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.cqa-nav-status-dot--live{background:#0dbd7d;box-shadow:0 0 6px #0dbd7d;animation:cqa-nav-pulse 2s ease-in-out infinite}.cqa-nav-status-dot--danger{background:#ee3f3f}.cqa-nav-chev{width:14px;height:14px;opacity:.6;flex-shrink:0;transition:transform .2s;display:flex;align-items:center;justify-content:center}.cqa-nav-chev--open{transform:rotate(90deg)}.cqa-nav-live-corner{position:absolute;top:5px;right:5px;width:9px;height:9px;background:#0dbd7d;border-radius:50%;border:2px solid #3f43ee;box-shadow:0 0 6px #0dbd7d}@keyframes cqa-nav-pulse{0%,to{opacity:1}50%{opacity:.4}}.cqa-nav-flyout-panel{min-width:188px;max-width:280px;padding:10px 8px 8px;background:#4c50ef;border-radius:10px;box-shadow:0 12px 32px #00000047;border:1px solid rgba(255,255,255,.12);pointer-events:auto;text-align:left;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-flyout-panel-title{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#ffffff8c;padding:2px 8px 8px;line-height:1.2}.cqa-nav-flyout-row{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;margin:0 0 2px;border:none;border-radius:8px;background:transparent;color:#fff;font-size:13px;font-weight:500;text-align:left;cursor:pointer;transition:background .12s,color .12s;font-family:inherit}.cqa-nav-flyout-row:last-child{margin-bottom:0}.cqa-nav-flyout-row:hover:not(:disabled){background:rgba(255,255,255,.1);color:#fff}.cqa-nav-flyout-row:disabled{opacity:.45;cursor:not-allowed}.cqa-nav-flyout-row--active{background:#8a8cf4;color:#fbfcff;font-weight:600}.cqa-nav-flyout-row--active:hover:not(:disabled){background:#8a8cf4;color:#fbfcff}.cqa-nav-flyout-row-icon{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:14px;opacity:.95}.cqa-nav-flyout-row-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-nav-flyout-row-new{flex-shrink:0;font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;background:#feecbd;color:#7e6012;border:1px solid #fddf92}\n"] }]
155
+ }], ctorParameters: function () { return [{ type: i1.Overlay }]; }, propDecorators: { item: [{
156
+ type: Input
157
+ }], isActive: [{
158
+ type: Input
159
+ }], isExpanded: [{
160
+ type: Input
161
+ }], isOpen: [{
162
+ type: Input
163
+ }], activeNavId: [{
164
+ type: Input
165
+ }], itemClick: [{
166
+ type: Output
167
+ }], navHostRef: [{
168
+ type: ViewChild,
169
+ args: ['navHost']
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zaWRlYmFyL25hdi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9uYXYtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTdkIsTUFBTSxPQUFPLGdCQUFnQjtJQTZDM0IsWUFBNkIsT0FBZ0I7UUFBaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQTNDcEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNuQyxxREFBcUQ7UUFDNUMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUNyQywyQ0FBMkM7UUFDbEMsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUNqQyxpRkFBaUY7UUFDeEUsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFeEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFJakQsaUVBQWlFO1FBQ2pFLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUVwQixxQkFBZ0IsR0FBeUMsSUFBSSxDQUFDO1FBSTdELDZCQUF3QixHQUF3QjtZQUN2RDtnQkFDRSxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsUUFBUTtnQkFDakIsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLE9BQU8sRUFBRSxDQUFDO2FBQ1g7WUFDRDtnQkFDRSxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFP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LENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFTyw0QkFBNEI7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7O0FBbkp1QixzQ0FBcUIsR0FBRyxHQUFJLENBQUE7NkdBbEJ6QyxnQkFBZ0I7aUdBQWhCLGdCQUFnQix3VENqQjdCLDJySUF5R0E7MkZEeEZhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzhGQUtmLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFFZSxVQUFVO3NCQUEvQixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOYXZDaGlsZEl0ZW0sIE5hdkl0ZW0gfSBmcm9tICcuL3NpZGViYXIubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW5hdi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LWl0ZW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaXRlbSE6IE5hdkl0ZW07XG4gIEBJbnB1dCgpIGlzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBXaGV0aGVyIHRoZSBzaWRlYmFyIGlzIGluIGV4cGFuZGVkICh3aWRlKSBtb2RlICovXG4gIEBJbnB1dCgpIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZXRoZXIgdGhpcyBpdGVtJ3Mgc3ViLW1lbnUgaXMgb3BlbiAqL1xuICBASW5wdXQoKSBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEN1cnJlbnQgcm91dGUgLyBzZWxlY3Rpb24gaWQg4oCUIHVzZWQgdG8gaGlnaGxpZ2h0IGNoaWxkIGluIGNvbGxhcHNlZCBmbHlvdXQgKi9cbiAgQElucHV0KCkgYWN0aXZlTmF2SWQ6IHN0cmluZyA9ICcnO1xuXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCduYXZIb3N0JykgbmF2SG9zdFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8qKiBDb2xsYXBzZWQgcGFyZW50OiBkcml2ZXMgQ0RLIGNvbm5lY3RlZCBvdmVybGF5IGZvciBzdWJtZW51ICovXG4gIHNob3dDb2xsYXBzZWRGbHlvdXQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNsb3NlRmx5b3V0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZMWU9VVF9DTE9TRV9ERUxBWV9NUyA9IDEyMDtcblxuICByZWFkb25seSBmbHlvdXRTY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3k7XG4gIHJlYWRvbmx5IGNvbGxhcHNlZEZseW91dFBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ2NlbnRlcicsXG4gICAgICBvZmZzZXRYOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICBvZmZzZXRYOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICBvZmZzZXRYOiA4XG4gICAgfVxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSkge1xuICAgIHRoaXMuZmx5b3V0U2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRmx5b3V0Q2xvc2VUaW1lcigpO1xuICB9XG5cbiAgZ2V0IGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLml0ZW0/LmNoaWxkcmVuPy5sZW5ndGgpO1xuICB9XG5cbiAgZ2V0IGNvbGxhcHNlZEZseW91dE9wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzRXhwYW5kZWQgJiZcbiAgICAgIHRoaXMuc2hvd0NvbGxhcHNlZEZseW91dCAmJlxuICAgICAgdGhpcy5oYXNDaGlsZHJlbiAmJlxuICAgICAgISEodGhpcy5pdGVtPy5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2VkIHJhaWw6IHNob3cgbGFiZWwgKGxlYWYpIG9yIGRpc2FibGVkIGNvcHkgaW4gTWF0VG9vbHRpcCBzbyBpdCByZW5kZXJzIGluIENESyBvdmVybGF5LFxuICAgKiBub3QgYXMgYW4gYWJzb2x1dGUgY2hpbGQgaW5zaWRlIHRoZSBzY3JvbGxpbmcgbmF2LlxuICAgKi9cbiAgZ2V0IGNvbGxhcHNlZFJhaWxUb29sdGlwKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXRlbT8uZGlzYWJsZWQgJiYgdGhpcy5pdGVtPy5kaXNhYmxlZFRvb2x0aXApIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW0uZGlzYWJsZWRUb29sdGlwO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCAmJiAhdGhpcy5oYXNDaGlsZHJlbiAmJiB0aGlzLml0ZW0/LmxhYmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtLmxhYmVsO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXQgY29sbGFwc2VkUmFpbFRvb2x0aXBDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAhdGhpcy5pc0V4cGFuZGVkICYmIHRoaXMuY29sbGFwc2VkUmFpbFRvb2x0aXAgPyAnY3FhLW5hdi1yYWlsLXRvb2x0aXAnIDogJyc7XG4gIH1cblxuICBpc0NoaWxkUm93QWN0aXZlKGNoaWxkSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZU5hdklkID09PSBjaGlsZElkO1xuICB9XG5cbiAgb25Ib3N0TW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRmx5b3V0Q2xvc2VUaW1lcigpO1xuICAgIGlmICghdGhpcy5pc0V4cGFuZGVkICYmICF0aGlzLml0ZW0/LmRpc2FibGVkICYmIHRoaXMuaGFzQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuc2hvd0NvbGxhcHNlZEZseW91dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Ib3N0TW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlQ2xvc2VDb2xsYXBzZWRGbHlvdXQoKTtcbiAgfVxuXG4gIG9uSG9zdEZvY3VzSW4oX2U6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRmx5b3V0Q2xvc2VUaW1lcigpO1xuICAgIGlmICghdGhpcy5pc0V4cGFuZGVkICYmICF0aGlzLml0ZW0/LmRpc2FibGVkICYmIHRoaXMuaGFzQ2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuc2hvd0NvbGxhcHNlZEZseW91dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25Ib3N0Rm9jdXNPdXQoZTogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHJldHVybjtcbiAgICBjb25zdCByZWxhdGVkID0gZS5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAocmVsYXRlZD8uY2xvc2VzdCgnLmNxYS1uYXYtZmx5b3V0LW92ZXJsYXknKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBob3N0ID0gZS5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChyZWxhdGVkICYmIGhvc3QuY29udGFpbnMocmVsYXRlZCkpIHJldHVybjtcbiAgICB0aGlzLmNsb3NlQ29sbGFwc2VkRmx5b3V0KCk7XG4gIH1cblxuICBvbkZseW91dE92ZXJsYXlQb2ludGVyRW50ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckZseW91dENsb3NlVGltZXIoKTtcbiAgfVxuXG4gIG9uRmx5b3V0T3ZlcmxheVBvaW50ZXJMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlQ2xvc2VDb2xsYXBzZWRGbHlvdXQoKTtcbiAgfVxuXG4gIG9uRmx5b3V0T3ZlcmxheUZvY3VzT3V0KGU6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCByZWxhdGVkID0gZS5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBwYW5lbCA9IGUuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAocmVsYXRlZCAmJiBwYW5lbC5jb250YWlucyhyZWxhdGVkKSkgcmV0dXJuO1xuICAgIGNvbnN0IGhvc3RFbCA9IHRoaXMubmF2SG9zdFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAocmVsYXRlZCAmJiBob3N0RWw/LmNvbnRhaW5zKHJlbGF0ZWQpKSByZXR1cm47XG4gICAgdGhpcy5jbG9zZUNvbGxhcHNlZEZseW91dCgpO1xuICB9XG5cbiAgY2xvc2VDb2xsYXBzZWRGbHlvdXQoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckZseW91dENsb3NlVGltZXIoKTtcbiAgICB0aGlzLnNob3dDb2xsYXBzZWRGbHlvdXQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0/LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLml0ZW1DbGljay5lbWl0KHRoaXMuaXRlbS5pZCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGlsZFJvd0NsaWNrKGU6IEV2ZW50LCBjaGlsZDogTmF2Q2hpbGRJdGVtKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY2hpbGQuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KGNoaWxkLmlkKTtcbiAgICB0aGlzLmNsb3NlQ29sbGFwc2VkRmx5b3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRmx5b3V0Q2xvc2VUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbG9zZUZseW91dFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jbG9zZUZseW91dFRpbWVyKTtcbiAgICAgIHRoaXMuY2xvc2VGbHlvdXRUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZUNsb3NlQ29sbGFwc2VkRmx5b3V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJGbHlvdXRDbG9zZVRpbWVyKCk7XG4gICAgdGhpcy5jbG9zZUZseW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dDb2xsYXBzZWRGbHlvdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xvc2VGbHlvdXRUaW1lciA9IG51bGw7XG4gICAgfSwgTmF2SXRlbUNvbXBvbmVudC5GTFlPVVRfQ0xPU0VfREVMQVlfTVMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLW5hdi1zdXJmYWNlXCI+XG4gIDxkaXZcbiAgICAjbmF2SG9zdFxuICAgIGNsYXNzPVwiY3FhLW5hdi1ob3N0XCJcbiAgICBbY2xhc3MuY3FhLW5hdi1ob3N0LS1jb2xsYXBzZWRdPVwiIWlzRXhwYW5kZWRcIlxuICAgIChtb3VzZWVudGVyKT1cIm9uSG9zdE1vdXNlRW50ZXIoKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Ib3N0TW91c2VMZWF2ZSgpXCJcbiAgICAoZm9jdXNpbik9XCJvbkhvc3RGb2N1c0luKCRldmVudClcIlxuICAgIChmb2N1c291dCk9XCJvbkhvc3RGb2N1c091dCgkZXZlbnQpXCI+XG5cbiAgICA8YnV0dG9uXG4gICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAjZmx5b3V0T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICBjbGFzcz1cImNxYS1uYXYtaXRlbVwiXG4gICAgICBbY2xhc3MuY3FhLW5hdi1pdGVtLS1hY3RpdmVdPVwiaXNBY3RpdmVcIlxuICAgICAgW2NsYXNzLmNxYS1uYXYtaXRlbS0taGFzLWNoaWxkcmVuXT1cImhhc0NoaWxkcmVuXCJcbiAgICAgIFtjbGFzcy5jcWEtbmF2LWl0ZW0tLWNvbGxhcHNlZF09XCIhaXNFeHBhbmRlZFwiXG4gICAgICBbY2xhc3MuY3FhLW5hdi1pdGVtLS1kaXNhYmxlZF09XCJpdGVtPy5kaXNhYmxlZFwiXG4gICAgICBbY2xhc3MuY3FhLW5hdi1pdGVtLS1oYXMtbGl2ZV09XCJpdGVtPy5zdGF0dXMgPT09ICdsaXZlJ1wiXG4gICAgICBbbWF0VG9vbHRpcF09XCJjb2xsYXBzZWRSYWlsVG9vbHRpcFwiXG4gICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFjb2xsYXBzZWRSYWlsVG9vbHRpcFwiXG4gICAgICBbbWF0VG9vbHRpcENsYXNzXT1cImNvbGxhcHNlZFJhaWxUb29sdGlwQ2xhc3NcIlxuICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiIWlzRXhwYW5kZWQgPyAoaXRlbT8ubGFiZWwgfHwgJycpIDogbnVsbFwiXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFpc0V4cGFuZGVkICYmIGhhc0NoaWxkcmVuID8gc2hvd0NvbGxhcHNlZEZseW91dCA6IG51bGxcIlxuICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCIhaXNFeHBhbmRlZCAmJiBoYXNDaGlsZHJlbiA/ICdtZW51JyA6IG51bGxcIj5cblxuICAgICAgPCEtLSBJY29uIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbmF2LWljb25cIj5cbiAgICAgICAgPGkgW2NsYXNzXT1cIml0ZW0/Lmljb25DbGFzc1wiPjwvaT5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBMYWJlbCAoaGlkZGVuIHdoZW4gc2lkZWJhciBjb2xsYXBzZWQpIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbmF2LWxhYmVsXCIgW2NsYXNzLmNxYS1uYXYtbGFiZWwtLXZpc2libGVdPVwiaXNFeHBhbmRlZFwiPlxuICAgICAgICB7eyBpdGVtPy5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFRyYWlsaW5nIHNsb3Q6IG9ubHkgc2hvd24gd2hlbiBleHBhbmRlZCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uYmFkZ2UgJiYgIWhhc0NoaWxkcmVuXCIgY2xhc3M9XCJjcWEtbmF2LWJhZGdlXCI+e3sgaXRlbS5iYWRnZSB9fTwvc3Bhbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiaXRlbT8uc3RhdHVzID09PSAnbGl2ZScgJiYgIWhhc0NoaWxkcmVuXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1uYXYtc3RhdHVzLWRvdCBjcWEtbmF2LXN0YXR1cy1kb3QtLWxpdmVcIj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJpdGVtPy5zdGF0dXMgPT09ICdkYW5nZXInICYmICFoYXNDaGlsZHJlblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtbmF2LXN0YXR1cy1kb3QgY3FhLW5hdi1zdGF0dXMtZG90LS1kYW5nZXJcIj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzQ2hpbGRyZW5cIiBjbGFzcz1cImNxYS1uYXYtY2hldlwiIFtjbGFzcy5jcWEtbmF2LWNoZXYtLW9wZW5dPVwiaXNPcGVuXCI+XG4gICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiPlxuICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjksNiAxNSwxMiA5LDE4XCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCIhaXNFeHBhbmRlZCAmJiBpdGVtPy5zdGF0dXMgPT09ICdsaXZlJ1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLW5hdi1saXZlLWNvcm5lclwiPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBDb2xsYXBzZWQgcGFyZW50IHN1Ym1lbnU6IENESyBvdmVybGF5IChvdXRzaWRlIGFzaWRlIC8gc2Nyb2xsaW5nIG5hdikgLS0+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJmbHlvdXRPcmlnaW5cIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImNvbGxhcHNlZEZseW91dE9wZW5cIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiY29sbGFwc2VkRmx5b3V0UG9zaXRpb25zXCJcbiAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BdPVwiZmFsc2VcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQdXNoXT1cInRydWVcIlxuICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneV09XCJmbHlvdXRTY3JvbGxTdHJhdGVneVwiXG4gICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3NdPVwiJ2NxYS1uYXYtZmx5b3V0LW92ZXJsYXktcGFuZSdcIlxuICAgICAgKG92ZXJsYXlPdXRzaWRlQ2xpY2spPVwiY2xvc2VDb2xsYXBzZWRGbHlvdXQoKVwiXG4gICAgICAoZGV0YWNoKT1cImNsb3NlQ29sbGFwc2VkRmx5b3V0KClcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcWEtbmF2LWZseW91dC1vdmVybGF5IGNxYS1uYXYtZmx5b3V0LXBhbmVsXCJcbiAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvbkZseW91dE92ZXJsYXlQb2ludGVyRW50ZXIoKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIm9uRmx5b3V0T3ZlcmxheVBvaW50ZXJMZWF2ZSgpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRmx5b3V0T3ZlcmxheUZvY3VzT3V0KCRldmVudClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1uYXYtZmx5b3V0LXBhbmVsLXRpdGxlXCI+e3sgaXRlbS5sYWJlbCB9fTwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0/LmNoaWxkcmVuXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLW5hdi1mbHlvdXQtcm93XCJcbiAgICAgICAgICBbY2xhc3MuY3FhLW5hdi1mbHlvdXQtcm93LS1hY3RpdmVdPVwiaXNDaGlsZFJvd0FjdGl2ZShjaGlsZC5pZClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJjaGlsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQ2hpbGRSb3dDbGljaygkZXZlbnQsIGNoaWxkKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW5hdi1mbHlvdXQtcm93LWljb25cIj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY2hpbGQuaWNvbkNsYXNzXCIgW2NsYXNzXT1cImNoaWxkLmljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtbmF2LWZseW91dC1yb3ctbGFiZWxcIj57eyBjaGlsZC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNoaWxkLmlzTmV3XCIgY2xhc3M9XCJjcWEtbmF2LWZseW91dC1yb3ctbmV3XCI+TmV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { isNavSection } from './sidebar.models';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./nav-item.component";
5
+ import * as i2 from "./nav-sub-item.component";
6
+ import * as i3 from "@angular/common";
7
+ export class NavMenuComponent {
8
+ constructor() {
9
+ this.items = [];
10
+ this.activeId = '';
11
+ this.isExpanded = false;
12
+ /** IDs of parent nav items whose sub-menus are currently open */
13
+ this.openParents = [];
14
+ this.itemClick = new EventEmitter();
15
+ }
16
+ isSection(item) {
17
+ return isNavSection(item);
18
+ }
19
+ asNavItem(item) {
20
+ return item;
21
+ }
22
+ isItemActive(item) {
23
+ if (item.id === this.activeId)
24
+ return true;
25
+ if (item.children) {
26
+ return item.children.some(c => c.id === this.activeId);
27
+ }
28
+ return false;
29
+ }
30
+ isParentOpen(item) {
31
+ return this.openParents.includes(item.id);
32
+ }
33
+ isChildActive(childId) {
34
+ return childId === this.activeId;
35
+ }
36
+ onItemClick(id) {
37
+ this.itemClick.emit(id);
38
+ }
39
+ }
40
+ NavMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
41
+ NavMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NavMenuComponent, selector: "cqa-nav-menu", inputs: { items: "items", activeId: "activeId", isExpanded: "isExpanded", openParents: "openParents" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<div class=\"cqa-nav-menu-outer\">\n <nav class=\"cqa-nav-menu\" [class.cqa-nav-menu--collapsed]=\"!isExpanded\">\n <ng-container *ngFor=\"let item of items\">\n\n <!-- Section header (expanded only \u2014 collapsed rail shows icons only) -->\n <ng-container *ngIf=\"isSection(item) && isExpanded\">\n <div class=\"cqa-nav-section\">\n <span class=\"cqa-nav-section-label\">{{ item.label }}</span>\n </div>\n </ng-container>\n\n <!-- Nav item -->\n <ng-container *ngIf=\"!isSection(item)\">\n <cqa-nav-item\n [item]=\"asNavItem(item)\"\n [isActive]=\"isItemActive(asNavItem(item))\"\n [isExpanded]=\"isExpanded\"\n [isOpen]=\"isParentOpen(asNavItem(item))\"\n [activeNavId]=\"activeId\"\n (itemClick)=\"onItemClick($event)\">\n </cqa-nav-item>\n\n <!-- Sub-menu (only rendered when sidebar is expanded) -->\n <div\n *ngIf=\"isExpanded && asNavItem(item).children?.length\"\n class=\"cqa-nav-children\"\n [class.cqa-nav-children--open]=\"isParentOpen(asNavItem(item))\">\n <cqa-nav-sub-item\n *ngFor=\"let child of asNavItem(item).children\"\n [item]=\"child\"\n [isActive]=\"isChildActive(child.id)\"\n (itemClick)=\"onItemClick($event)\">\n </cqa-nav-sub-item>\n </div>\n </ng-container>\n\n </ng-container>\n </nav>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;min-height:0;overflow:hidden;width:100%}.cqa-nav-menu-outer{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden;width:100%}.cqa-nav-menu{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;padding:4px 0 8px;min-height:0;overscroll-behavior:contain}.cqa-nav-menu::-webkit-scrollbar{width:4px}.cqa-nav-menu::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:2px}.cqa-nav-menu--collapsed{overflow-x:visible}.cqa-nav-section{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:10px;font-weight:700;letter-spacing:.1em;color:#ffffff8c;padding:14px 18px 6px;text-transform:uppercase;overflow:hidden;transition:opacity .16s 80ms,padding .16s,font-size .16s;opacity:1}.cqa-nav-children{margin:1px 21px;padding:1px 0 1px 15px;border-left:1px solid rgba(255,255,255,.18);overflow:hidden;transition:max-height .25s ease-out,opacity .18s,margin .2s;max-height:0;opacity:0;display:flex;flex-direction:column;gap:1px}.cqa-nav-children--open{max-height:320px;opacity:1}\n"], components: [{ type: i1.NavItemComponent, selector: "cqa-nav-item", inputs: ["item", "isActive", "isExpanded", "isOpen", "activeNavId"], outputs: ["itemClick"] }, { type: i2.NavSubItemComponent, selector: "cqa-nav-sub-item", inputs: ["item", "isActive"], outputs: ["itemClick"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavMenuComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'cqa-nav-menu', template: "<div class=\"cqa-nav-menu-outer\">\n <nav class=\"cqa-nav-menu\" [class.cqa-nav-menu--collapsed]=\"!isExpanded\">\n <ng-container *ngFor=\"let item of items\">\n\n <!-- Section header (expanded only \u2014 collapsed rail shows icons only) -->\n <ng-container *ngIf=\"isSection(item) && isExpanded\">\n <div class=\"cqa-nav-section\">\n <span class=\"cqa-nav-section-label\">{{ item.label }}</span>\n </div>\n </ng-container>\n\n <!-- Nav item -->\n <ng-container *ngIf=\"!isSection(item)\">\n <cqa-nav-item\n [item]=\"asNavItem(item)\"\n [isActive]=\"isItemActive(asNavItem(item))\"\n [isExpanded]=\"isExpanded\"\n [isOpen]=\"isParentOpen(asNavItem(item))\"\n [activeNavId]=\"activeId\"\n (itemClick)=\"onItemClick($event)\">\n </cqa-nav-item>\n\n <!-- Sub-menu (only rendered when sidebar is expanded) -->\n <div\n *ngIf=\"isExpanded && asNavItem(item).children?.length\"\n class=\"cqa-nav-children\"\n [class.cqa-nav-children--open]=\"isParentOpen(asNavItem(item))\">\n <cqa-nav-sub-item\n *ngFor=\"let child of asNavItem(item).children\"\n [item]=\"child\"\n [isActive]=\"isChildActive(child.id)\"\n (itemClick)=\"onItemClick($event)\">\n </cqa-nav-sub-item>\n </div>\n </ng-container>\n\n </ng-container>\n </nav>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex:1 1 0;min-height:0;overflow:hidden;width:100%}.cqa-nav-menu-outer{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;overflow:hidden;width:100%}.cqa-nav-menu{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;padding:4px 0 8px;min-height:0;overscroll-behavior:contain}.cqa-nav-menu::-webkit-scrollbar{width:4px}.cqa-nav-menu::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:2px}.cqa-nav-menu--collapsed{overflow-x:visible}.cqa-nav-section{font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;font-size:10px;font-weight:700;letter-spacing:.1em;color:#ffffff8c;padding:14px 18px 6px;text-transform:uppercase;overflow:hidden;transition:opacity .16s 80ms,padding .16s,font-size .16s;opacity:1}.cqa-nav-children{margin:1px 21px;padding:1px 0 1px 15px;border-left:1px solid rgba(255,255,255,.18);overflow:hidden;transition:max-height .25s ease-out,opacity .18s,margin .2s;max-height:0;opacity:0;display:flex;flex-direction:column;gap:1px}.cqa-nav-children--open{max-height:320px;opacity:1}\n"] }]
45
+ }], propDecorators: { items: [{
46
+ type: Input
47
+ }], activeId: [{
48
+ type: Input
49
+ }], isExpanded: [{
50
+ type: Input
51
+ }], openParents: [{
52
+ type: Input
53
+ }], itemClick: [{
54
+ type: Output
55
+ }] } });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zaWRlYmFyL25hdi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9uYXYtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBb0MsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT2xGLE1BQU0sT0FBTyxnQkFBZ0I7SUFMN0I7UUFNVyxVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDckMsaUVBQWlFO1FBQ3hELGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBNkJsRDtJQTNCQyxTQUFTLENBQUMsSUFBaUI7UUFDekIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFpQjtRQUN6QixPQUFPLElBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFhO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUMzQixPQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDOzs2R0FuQ1UsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaU1DUjdCLDQ3Q0F1Q0E7MkZEL0JhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjOzhCQUtmLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdk1lbnVJdGVtLCBOYXZJdGVtLCBOYXZTZWN0aW9uLCBpc05hdlNlY3Rpb24gfSBmcm9tICcuL3NpZGViYXIubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW5hdi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LW1lbnUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZNZW51Q29tcG9uZW50IHtcbiAgQElucHV0KCkgaXRlbXM6IE5hdk1lbnVJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aXZlSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBJRHMgb2YgcGFyZW50IG5hdiBpdGVtcyB3aG9zZSBzdWItbWVudXMgYXJlIGN1cnJlbnRseSBvcGVuICovXG4gIEBJbnB1dCgpIG9wZW5QYXJlbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBpc1NlY3Rpb24oaXRlbTogTmF2TWVudUl0ZW0pOiBpdGVtIGlzIE5hdlNlY3Rpb24ge1xuICAgIHJldHVybiBpc05hdlNlY3Rpb24oaXRlbSk7XG4gIH1cblxuICBhc05hdkl0ZW0oaXRlbTogTmF2TWVudUl0ZW0pOiBOYXZJdGVtIHtcbiAgICByZXR1cm4gaXRlbSBhcyBOYXZJdGVtO1xuICB9XG5cbiAgaXNJdGVtQWN0aXZlKGl0ZW06IE5hdkl0ZW0pOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbS5pZCA9PT0gdGhpcy5hY3RpdmVJZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBpdGVtLmNoaWxkcmVuLnNvbWUoYyA9PiBjLmlkID09PSB0aGlzLmFjdGl2ZUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNQYXJlbnRPcGVuKGl0ZW06IE5hdkl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuUGFyZW50cy5pbmNsdWRlcyhpdGVtLmlkKTtcbiAgfVxuXG4gIGlzQ2hpbGRBY3RpdmUoY2hpbGRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoaWxkSWQgPT09IHRoaXMuYWN0aXZlSWQ7XG4gIH1cblxuICBvbkl0ZW1DbGljayhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpZCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtbmF2LW1lbnUtb3V0ZXJcIj5cbiAgPG5hdiBjbGFzcz1cImNxYS1uYXYtbWVudVwiIFtjbGFzcy5jcWEtbmF2LW1lbnUtLWNvbGxhcHNlZF09XCIhaXNFeHBhbmRlZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cblxuICAgICAgPCEtLSBTZWN0aW9uIGhlYWRlciAoZXhwYW5kZWQgb25seSDigJQgY29sbGFwc2VkIHJhaWwgc2hvd3MgaWNvbnMgb25seSkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTZWN0aW9uKGl0ZW0pICYmIGlzRXhwYW5kZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1uYXYtc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW5hdi1zZWN0aW9uLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBOYXYgaXRlbSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTZWN0aW9uKGl0ZW0pXCI+XG4gICAgICAgIDxjcWEtbmF2LWl0ZW1cbiAgICAgICAgICBbaXRlbV09XCJhc05hdkl0ZW0oaXRlbSlcIlxuICAgICAgICAgIFtpc0FjdGl2ZV09XCJpc0l0ZW1BY3RpdmUoYXNOYXZJdGVtKGl0ZW0pKVwiXG4gICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXG4gICAgICAgICAgW2lzT3Blbl09XCJpc1BhcmVudE9wZW4oYXNOYXZJdGVtKGl0ZW0pKVwiXG4gICAgICAgICAgW2FjdGl2ZU5hdklkXT1cImFjdGl2ZUlkXCJcbiAgICAgICAgICAoaXRlbUNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtbmF2LWl0ZW0+XG5cbiAgICAgICAgPCEtLSBTdWItbWVudSAob25seSByZW5kZXJlZCB3aGVuIHNpZGViYXIgaXMgZXhwYW5kZWQpIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkICYmIGFzTmF2SXRlbShpdGVtKS5jaGlsZHJlbj8ubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1uYXYtY2hpbGRyZW5cIlxuICAgICAgICAgIFtjbGFzcy5jcWEtbmF2LWNoaWxkcmVuLS1vcGVuXT1cImlzUGFyZW50T3Blbihhc05hdkl0ZW0oaXRlbSkpXCI+XG4gICAgICAgICAgPGNxYS1uYXYtc3ViLWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBhc05hdkl0ZW0oaXRlbSkuY2hpbGRyZW5cIlxuICAgICAgICAgICAgW2l0ZW1dPVwiY2hpbGRcIlxuICAgICAgICAgICAgW2lzQWN0aXZlXT1cImlzQ2hpbGRBY3RpdmUoY2hpbGQuaWQpXCJcbiAgICAgICAgICAgIChpdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgIDwvY3FhLW5hdi1zdWItaXRlbT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25hdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,27 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class NavSubItemComponent {
5
+ constructor() {
6
+ this.isActive = false;
7
+ this.itemClick = new EventEmitter();
8
+ }
9
+ onClick() {
10
+ if (!this.item?.disabled) {
11
+ this.itemClick.emit(this.item.id);
12
+ }
13
+ }
14
+ }
15
+ NavSubItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavSubItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ NavSubItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: NavSubItemComponent, selector: "cqa-nav-sub-item", inputs: { item: "item", isActive: "isActive" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<div class=\"cqa-nav-surface\">\n <button\n class=\"cqa-nav-sub-item\"\n [class.cqa-nav-sub-item--active]=\"isActive\"\n [class.cqa-nav-sub-item--disabled]=\"item?.disabled\"\n (click)=\"onClick()\"\n type=\"button\">\n\n <span class=\"cqa-nav-sub-icon\">\n <i [class]=\"item?.iconClass\"></i>\n </span>\n\n <span class=\"cqa-nav-sub-label\">{{ item?.label }}</span>\n\n <span *ngIf=\"item?.isNew\" class=\"cqa-nav-sub-badge cqa-nav-sub-badge--new\">New</span>\n </button>\n</div>\n", styles: ["@charset \"UTF-8\";.cqa-nav-surface{display:block;width:100%}.cqa-nav-sub-item{display:flex;align-items:center;gap:10px;padding:7px 10px;margin:0;border-radius:7px;color:#d8d9fc;font-size:12px;font-weight:400;line-height:normal;width:100%;text-align:left;background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-sub-item:hover:not(.cqa-nav-sub-item--active){background:rgba(255,255,255,.1);color:#fff}.cqa-nav-sub-item--active{background:#8a8cf4;color:#fbfcff;font-weight:600}.cqa-nav-sub-item--active .cqa-nav-sub-icon{opacity:1;color:#fbfcff}.cqa-nav-sub-item--active .cqa-nav-sub-label{color:#fbfcff;font-weight:600}.cqa-nav-sub-item--active:hover{background:#8a8cf4;color:#fbfcff}.cqa-nav-sub-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.cqa-nav-sub-icon{width:15px;height:15px;flex-shrink:0;display:flex;align-items:center;justify-content:center;opacity:.92;font-size:13px;color:inherit}.cqa-nav-sub-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.cqa-nav-sub-badge{font-size:11px;font-weight:600;padding:1px 7px;border-radius:999px;flex-shrink:0}.cqa-nav-sub-badge--new{background:#feecbd;color:#7e6012;border:1px solid #fddf92}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NavSubItemComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'cqa-nav-sub-item', template: "<div class=\"cqa-nav-surface\">\n <button\n class=\"cqa-nav-sub-item\"\n [class.cqa-nav-sub-item--active]=\"isActive\"\n [class.cqa-nav-sub-item--disabled]=\"item?.disabled\"\n (click)=\"onClick()\"\n type=\"button\">\n\n <span class=\"cqa-nav-sub-icon\">\n <i [class]=\"item?.iconClass\"></i>\n </span>\n\n <span class=\"cqa-nav-sub-label\">{{ item?.label }}</span>\n\n <span *ngIf=\"item?.isNew\" class=\"cqa-nav-sub-badge cqa-nav-sub-badge--new\">New</span>\n </button>\n</div>\n", styles: ["@charset \"UTF-8\";.cqa-nav-surface{display:block;width:100%}.cqa-nav-sub-item{display:flex;align-items:center;gap:10px;padding:7px 10px;margin:0;border-radius:7px;color:#d8d9fc;font-size:12px;font-weight:400;line-height:normal;width:100%;text-align:left;background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif}.cqa-nav-sub-item:hover:not(.cqa-nav-sub-item--active){background:rgba(255,255,255,.1);color:#fff}.cqa-nav-sub-item--active{background:#8a8cf4;color:#fbfcff;font-weight:600}.cqa-nav-sub-item--active .cqa-nav-sub-icon{opacity:1;color:#fbfcff}.cqa-nav-sub-item--active .cqa-nav-sub-label{color:#fbfcff;font-weight:600}.cqa-nav-sub-item--active:hover{background:#8a8cf4;color:#fbfcff}.cqa-nav-sub-item--disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.cqa-nav-sub-icon{width:15px;height:15px;flex-shrink:0;display:flex;align-items:center;justify-content:center;opacity:.92;font-size:13px;color:inherit}.cqa-nav-sub-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:inherit}.cqa-nav-sub-badge{font-size:11px;font-weight:600;padding:1px 7px;border-radius:999px;flex-shrink:0}.cqa-nav-sub-badge--new{background:#feecbd;color:#7e6012;border:1px solid #fddf92}\n"] }]
20
+ }], propDecorators: { item: [{
21
+ type: Input
22
+ }], isActive: [{
23
+ type: Input
24
+ }], itemClick: [{
25
+ type: Output
26
+ }] } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LXN1Yi1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9uYXYtc3ViLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zaWRlYmFyL25hdi1zdWItaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRdkUsTUFBTSxPQUFPLG1CQUFtQjtJQUxoQztRQU9XLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFekIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FPbEQ7SUFMQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDOztnSEFWVSxtQkFBbUI7b0dBQW5CLG1CQUFtQiw2SUNSaEMsc2dCQWlCQTsyRkRUYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usa0JBQWtCOzhCQUtuQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNoaWxkSXRlbSB9IGZyb20gJy4vc2lkZWJhci5tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbmF2LXN1Yi1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1zdWItaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25hdi1zdWItaXRlbS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE5hdlN1Ykl0ZW1Db21wb25lbnQge1xuICBASW5wdXQoKSBpdGVtITogTmF2Q2hpbGRJdGVtO1xuICBASW5wdXQoKSBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtPy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh0aGlzLml0ZW0uaWQpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1uYXYtc3VyZmFjZVwiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJjcWEtbmF2LXN1Yi1pdGVtXCJcbiAgICBbY2xhc3MuY3FhLW5hdi1zdWItaXRlbS0tYWN0aXZlXT1cImlzQWN0aXZlXCJcbiAgICBbY2xhc3MuY3FhLW5hdi1zdWItaXRlbS0tZGlzYWJsZWRdPVwiaXRlbT8uZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJvbkNsaWNrKClcIlxuICAgIHR5cGU9XCJidXR0b25cIj5cblxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLW5hdi1zdWItaWNvblwiPlxuICAgICAgPGkgW2NsYXNzXT1cIml0ZW0/Lmljb25DbGFzc1wiPjwvaT5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS1uYXYtc3ViLWxhYmVsXCI+e3sgaXRlbT8ubGFiZWwgfX08L3NwYW4+XG5cbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LmlzTmV3XCIgY2xhc3M9XCJjcWEtbmF2LXN1Yi1iYWRnZSBjcWEtbmF2LXN1Yi1iYWRnZS0tbmV3XCI+TmV3PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,122 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
2
+ import { TemplatePortal } from '@angular/cdk/portal';
3
+ import { isProfileMenuDivider, } from './profile-menu.models';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "../../pipes/safe-html.pipe";
8
+ export class ProfileMenuComponent {
9
+ constructor(overlay, viewContainerRef) {
10
+ this.overlay = overlay;
11
+ this.viewContainerRef = viewContainerRef;
12
+ this.entries = [];
13
+ this.anchor = null;
14
+ this.itemClick = new EventEmitter();
15
+ this.dismissed = new EventEmitter();
16
+ this.overlayRef = null;
17
+ this.keySub = null;
18
+ this.backdropSub = null;
19
+ this.viewInitialized = false;
20
+ this.isDivider = isProfileMenuDivider;
21
+ this.trackByEntry = (index, _entry) => index;
22
+ }
23
+ ngAfterViewInit() {
24
+ this.viewInitialized = true;
25
+ if (this.anchor) {
26
+ this.openOverlay();
27
+ }
28
+ }
29
+ ngOnChanges(changes) {
30
+ if (!this.viewInitialized || !changes['anchor'])
31
+ return;
32
+ if (this.anchor) {
33
+ this.openOverlay();
34
+ }
35
+ else {
36
+ this.closeOverlay();
37
+ }
38
+ }
39
+ ngOnDestroy() {
40
+ this.closeOverlay();
41
+ }
42
+ /** Narrowing helper for the template — Angular's template type checker can't
43
+ * follow our custom type guard through `*ngIf-else`, so we surface a typed cast
44
+ * via this method instead. */
45
+ asItem(entry) {
46
+ return isProfileMenuDivider(entry) ? null : entry;
47
+ }
48
+ onItemClick(item) {
49
+ if (item.disabled) {
50
+ return;
51
+ }
52
+ this.itemClick.emit(item.id);
53
+ }
54
+ openOverlay() {
55
+ if (!this.anchor) {
56
+ return;
57
+ }
58
+ this.closeOverlay();
59
+ // Popover floats out to the right of the profile card, bottom-aligned with the card.
60
+ // `withPush(false)` is critical — otherwise CDK slides the overlay back over the sidebar
61
+ // when its viewport calculation thinks the popover doesn't fit (e.g. in narrow iframes).
62
+ const positions = [
63
+ { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 0, offsetY: 0 },
64
+ { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetX: 0, offsetY: -4 },
65
+ ];
66
+ const positionStrategy = this.overlay
67
+ .position()
68
+ .flexibleConnectedTo(this.anchor)
69
+ .withPositions(positions)
70
+ .withFlexibleDimensions(false)
71
+ .withViewportMargin(8)
72
+ .withPush(false);
73
+ this.overlayRef = this.overlay.create({
74
+ positionStrategy,
75
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
76
+ hasBackdrop: true,
77
+ backdropClass: 'cdk-overlay-transparent-backdrop',
78
+ panelClass: 'cqa-profile-menu-panel',
79
+ });
80
+ const portal = new TemplatePortal(this.popoverTpl, this.viewContainerRef);
81
+ this.overlayRef.attach(portal);
82
+ this.backdropSub = this.overlayRef.backdropClick().subscribe(() => this.dismissed.emit());
83
+ this.keySub = this.overlayRef.keydownEvents().subscribe((event) => {
84
+ if (event.key === 'Escape') {
85
+ event.preventDefault();
86
+ this.dismissed.emit();
87
+ }
88
+ });
89
+ }
90
+ closeOverlay() {
91
+ this.backdropSub?.unsubscribe();
92
+ this.backdropSub = null;
93
+ this.keySub?.unsubscribe();
94
+ this.keySub = null;
95
+ if (this.overlayRef) {
96
+ this.overlayRef.dispose();
97
+ this.overlayRef = null;
98
+ }
99
+ }
100
+ }
101
+ ProfileMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ProfileMenuComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
102
+ ProfileMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ProfileMenuComponent, selector: "cqa-profile-menu", inputs: { user: "user", entries: "entries", anchor: "anchor", popoverId: "popoverId" }, outputs: { itemClick: "itemClick", dismissed: "dismissed" }, viewQueries: [{ propertyName: "popoverTpl", first: true, predicate: ["popoverTpl"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #popoverTpl>\n <div class=\"cqa-pm\" [attr.id]=\"popoverId\" role=\"menu\" aria-orientation=\"vertical\">\n <!-- ===== Header ===== -->\n <div class=\"cqa-pm-header\">\n <div class=\"cqa-pm-avatar\" [style.background]=\"user?.avatarColor || null\">\n {{ user?.initials }}\n </div>\n <div class=\"cqa-pm-identity\">\n <span class=\"cqa-pm-name\" [title]=\"user?.name\">{{ user?.name }}</span>\n <span *ngIf=\"user?.email\" class=\"cqa-pm-email\" [title]=\"user?.email\">{{ user?.email }}</span>\n <span\n *ngIf=\"user?.badge?.label\"\n class=\"cqa-pm-badge\"\n [class.cqa-pm-badge--admin]=\"(user?.badge?.variant || 'admin') === 'admin'\"\n [class.cqa-pm-badge--default]=\"user?.badge?.variant === 'default'\">\n {{ user?.badge?.label }}\n </span>\n </div>\n </div>\n\n <div class=\"cqa-pm-divider\"></div>\n\n <!-- ===== Entries ===== -->\n <ul class=\"cqa-pm-list\">\n <ng-container *ngFor=\"let entry of entries; trackBy: trackByEntry\">\n <li *ngIf=\"isDivider(entry); else itemTpl\" class=\"cqa-pm-list-divider\" role=\"separator\"></li>\n <ng-template #itemTpl>\n <li *ngIf=\"asItem(entry) as item\">\n <button\n type=\"button\"\n class=\"cqa-pm-item\"\n [class.cqa-pm-item--danger]=\"item.variant === 'danger'\"\n [class.cqa-pm-item--disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(item)\">\n <span\n *ngIf=\"item.iconSvg || item.iconClass\"\n class=\"cqa-pm-item-icon\"\n aria-hidden=\"true\">\n <span\n *ngIf=\"item.iconSvg; else fontIcon\"\n [innerHTML]=\"item.iconSvg | cqaSafeHtml\">\n </span>\n <ng-template #fontIcon>\n <i *ngIf=\"item.iconClass\" [ngClass]=\"item.iconClass\"></i>\n </ng-template>\n </span>\n <span class=\"cqa-pm-item-label\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"cqa-pm-item-shortcut\">{{ item.shortcut }}</span>\n </button>\n </li>\n </ng-template>\n </ng-container>\n </ul>\n </div>\n</ng-template>\n", styles: ["::ng-deep .cqa-profile-menu-panel{z-index:1200}.cqa-pm{width:270px;background:#fbfcff;border-radius:12px;box-shadow:0 0 0 1px #0f12a80a,0 12px 32px #0f12a82e;padding:6px;font-family:inherit;color:#161617;-webkit-user-select:none;user-select:none;animation:cqaPmFadeIn .12s cubic-bezier(.16,1,.3,1)}@keyframes cqaPmFadeIn{0%{opacity:0;transform:translateY(2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.cqa-pm-header{display:flex;align-items:flex-start;gap:10px;padding:10px 10px 12px}.cqa-pm-avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#f472b6,#db2777);color:#fff;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;letter-spacing:.2px}.cqa-pm-identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.cqa-pm-name{font-size:14px;font-weight:600;line-height:1;color:#161617;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-email{font-size:11.5px;font-weight:400;line-height:1;color:#6d6d74;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-badge{display:inline-flex;align-items:center;align-self:flex-start;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1;white-space:nowrap}.cqa-pm-badge--admin{background:rgba(99,102,241,.1);color:#1216cc}.cqa-pm-badge--default{background:#eef0f3;color:#374151}.cqa-pm-divider{height:1px;background:#f0f0f1;margin:0}.cqa-pm-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.cqa-pm-list-divider{height:1px;background:#f0f0f1;margin:6px}.cqa-pm-item{width:100%;display:flex;align-items:center;gap:10px;padding:12px 10px 8px;background:transparent;border:none;border-radius:8px;cursor:pointer;font-family:inherit;font-size:13px;font-weight:400;line-height:1;color:#4c4c51;text-align:left;transition:background .12s,color .12s}.cqa-pm-item:hover:not(:disabled){background:#f4f5f7}.cqa-pm-item:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.cqa-pm-item--danger,.cqa-pm-item--danger .cqa-pm-item-icon{color:#e23a3a}.cqa-pm-item--danger:hover:not(:disabled){background:#fbeaea}.cqa-pm-item--disabled,.cqa-pm-item:disabled{cursor:not-allowed;opacity:.5}.cqa-pm-item-icon{width:16px;height:16px;font-size:16px;color:#161617a6;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.cqa-pm-item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-item-shortcut{background:#eef0f3;color:#6b7280;font-size:11px;font-weight:600;line-height:16px;padding:1px 6px;border-radius:4px;flex-shrink:0}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "cqaSafeHtml": i3.SafeHtmlPipe } });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ProfileMenuComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: 'cqa-profile-menu', template: "<ng-template #popoverTpl>\n <div class=\"cqa-pm\" [attr.id]=\"popoverId\" role=\"menu\" aria-orientation=\"vertical\">\n <!-- ===== Header ===== -->\n <div class=\"cqa-pm-header\">\n <div class=\"cqa-pm-avatar\" [style.background]=\"user?.avatarColor || null\">\n {{ user?.initials }}\n </div>\n <div class=\"cqa-pm-identity\">\n <span class=\"cqa-pm-name\" [title]=\"user?.name\">{{ user?.name }}</span>\n <span *ngIf=\"user?.email\" class=\"cqa-pm-email\" [title]=\"user?.email\">{{ user?.email }}</span>\n <span\n *ngIf=\"user?.badge?.label\"\n class=\"cqa-pm-badge\"\n [class.cqa-pm-badge--admin]=\"(user?.badge?.variant || 'admin') === 'admin'\"\n [class.cqa-pm-badge--default]=\"user?.badge?.variant === 'default'\">\n {{ user?.badge?.label }}\n </span>\n </div>\n </div>\n\n <div class=\"cqa-pm-divider\"></div>\n\n <!-- ===== Entries ===== -->\n <ul class=\"cqa-pm-list\">\n <ng-container *ngFor=\"let entry of entries; trackBy: trackByEntry\">\n <li *ngIf=\"isDivider(entry); else itemTpl\" class=\"cqa-pm-list-divider\" role=\"separator\"></li>\n <ng-template #itemTpl>\n <li *ngIf=\"asItem(entry) as item\">\n <button\n type=\"button\"\n class=\"cqa-pm-item\"\n [class.cqa-pm-item--danger]=\"item.variant === 'danger'\"\n [class.cqa-pm-item--disabled]=\"item.disabled\"\n [disabled]=\"item.disabled\"\n role=\"menuitem\"\n (click)=\"onItemClick(item)\">\n <span\n *ngIf=\"item.iconSvg || item.iconClass\"\n class=\"cqa-pm-item-icon\"\n aria-hidden=\"true\">\n <span\n *ngIf=\"item.iconSvg; else fontIcon\"\n [innerHTML]=\"item.iconSvg | cqaSafeHtml\">\n </span>\n <ng-template #fontIcon>\n <i *ngIf=\"item.iconClass\" [ngClass]=\"item.iconClass\"></i>\n </ng-template>\n </span>\n <span class=\"cqa-pm-item-label\">{{ item.label }}</span>\n <span *ngIf=\"item.shortcut\" class=\"cqa-pm-item-shortcut\">{{ item.shortcut }}</span>\n </button>\n </li>\n </ng-template>\n </ng-container>\n </ul>\n </div>\n</ng-template>\n", styles: ["::ng-deep .cqa-profile-menu-panel{z-index:1200}.cqa-pm{width:270px;background:#fbfcff;border-radius:12px;box-shadow:0 0 0 1px #0f12a80a,0 12px 32px #0f12a82e;padding:6px;font-family:inherit;color:#161617;-webkit-user-select:none;user-select:none;animation:cqaPmFadeIn .12s cubic-bezier(.16,1,.3,1)}@keyframes cqaPmFadeIn{0%{opacity:0;transform:translateY(2px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.cqa-pm-header{display:flex;align-items:flex-start;gap:10px;padding:10px 10px 12px}.cqa-pm-avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#f472b6,#db2777);color:#fff;font-size:14px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;letter-spacing:.2px}.cqa-pm-identity{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.cqa-pm-name{font-size:14px;font-weight:600;line-height:1;color:#161617;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-email{font-size:11.5px;font-weight:400;line-height:1;color:#6d6d74;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-badge{display:inline-flex;align-items:center;align-self:flex-start;padding:2px 7px;border-radius:999px;font-size:10px;font-weight:700;line-height:1;white-space:nowrap}.cqa-pm-badge--admin{background:rgba(99,102,241,.1);color:#1216cc}.cqa-pm-badge--default{background:#eef0f3;color:#374151}.cqa-pm-divider{height:1px;background:#f0f0f1;margin:0}.cqa-pm-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.cqa-pm-list-divider{height:1px;background:#f0f0f1;margin:6px}.cqa-pm-item{width:100%;display:flex;align-items:center;gap:10px;padding:12px 10px 8px;background:transparent;border:none;border-radius:8px;cursor:pointer;font-family:inherit;font-size:13px;font-weight:400;line-height:1;color:#4c4c51;text-align:left;transition:background .12s,color .12s}.cqa-pm-item:hover:not(:disabled){background:#f4f5f7}.cqa-pm-item:focus-visible{outline:2px solid #4f46e5;outline-offset:1px}.cqa-pm-item--danger,.cqa-pm-item--danger .cqa-pm-item-icon{color:#e23a3a}.cqa-pm-item--danger:hover:not(:disabled){background:#fbeaea}.cqa-pm-item--disabled,.cqa-pm-item:disabled{cursor:not-allowed;opacity:.5}.cqa-pm-item-icon{width:16px;height:16px;font-size:16px;color:#161617a6;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.cqa-pm-item-label{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cqa-pm-item-shortcut{background:#eef0f3;color:#6b7280;font-size:11px;font-weight:600;line-height:16px;padding:1px 6px;border-radius:4px;flex-shrink:0}\n"] }]
106
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }]; }, propDecorators: { user: [{
107
+ type: Input
108
+ }], entries: [{
109
+ type: Input
110
+ }], anchor: [{
111
+ type: Input
112
+ }], popoverId: [{
113
+ type: Input
114
+ }], itemClick: [{
115
+ type: Output
116
+ }], dismissed: [{
117
+ type: Output
118
+ }], popoverTpl: [{
119
+ type: ViewChild,
120
+ args: ['popoverTpl', { static: true }]
121
+ }] } });
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9wcm9maWxlLW1lbnUvcHJvZmlsZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9wcm9maWxlLW1lbnUvcHJvZmlsZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBSVosU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBSUwsb0JBQW9CLEdBQ3JCLE1BQU0sdUJBQXVCLENBQUM7Ozs7O0FBTy9CLE1BQU0sT0FBTyxvQkFBb0I7SUFpQi9CLFlBQ1UsT0FBZ0IsRUFDaEIsZ0JBQWtDO1FBRGxDLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWpCbkMsWUFBTyxHQUF1QixFQUFFLENBQUM7UUFDakMsV0FBTSxHQUF1QixJQUFJLENBQUM7UUFJakMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJdkMsZUFBVSxHQUFzQixJQUFJLENBQUM7UUFDckMsV0FBTSxHQUF3QixJQUFJLENBQUM7UUFDbkMsZ0JBQVcsR0FBd0IsSUFBSSxDQUFDO1FBQ3hDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBMkJoQyxjQUFTLEdBQUcsb0JBQW9CLENBQUM7UUFTakMsaUJBQVksR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUF3QixFQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUEvQnZFLENBQUM7SUFFSixlQUFlO1FBQ2IsSUFBSSxDQUFD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LEtBQW9CLEVBQUUsRUFBRTtZQUMvRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztTQUN4QjtJQUNILENBQUM7O2lIQS9HVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwwVkM1QmpDLHczRUF5REE7MkZEN0JhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0I7NkhBS25CLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUVvQyxVQUFVO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFByb2ZpbGVNZW51RW50cnksXG4gIFByb2ZpbGVNZW51SXRlbSxcbiAgUHJvZmlsZU1lbnVVc2VyLFxuICBpc1Byb2ZpbGVNZW51RGl2aWRlcixcbn0gZnJvbSAnLi9wcm9maWxlLW1lbnUubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXByb2ZpbGUtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9maWxlLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9maWxlLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZmlsZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHVzZXIhOiBQcm9maWxlTWVudVVzZXI7XG4gIEBJbnB1dCgpIGVudHJpZXM6IFByb2ZpbGVNZW51RW50cnlbXSA9IFtdO1xuICBASW5wdXQoKSBhbmNob3I6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBPcHRpb25hbCBpZCBvbiB0aGUgcG9wb3ZlciBlbGVtZW50IOKAlCB1c2VmdWwgZm9yIGFyaWEtbGFiZWxsZWRieSB3aXJpbmcuICovXG4gIEBJbnB1dCgpIHBvcG92ZXJJZD86IHN0cmluZztcblxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBkaXNtaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgncG9wb3ZlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pIHBvcG92ZXJUcGwhOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBrZXlTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tkcm9wU3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2aWV3SW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hbmNob3IpIHtcbiAgICAgIHRoaXMub3Blbk92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZXdJbml0aWFsaXplZCB8fCAhY2hhbmdlc1snYW5jaG9yJ10pIHJldHVybjtcbiAgICBpZiAodGhpcy5hbmNob3IpIHtcbiAgICAgIHRoaXMub3Blbk92ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZU92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlT3ZlcmxheSgpO1xuICB9XG5cbiAgaXNEaXZpZGVyID0gaXNQcm9maWxlTWVudURpdmlkZXI7XG5cbiAgLyoqIE5hcnJvd2luZyBoZWxwZXIgZm9yIHRoZSB0ZW1wbGF0ZSDigJQgQW5ndWxhcidzIHRlbXBsYXRlIHR5cGUgY2hlY2tlciBjYW4ndFxuICAgKiBmb2xsb3cgb3VyIGN1c3RvbSB0eXBlIGd1YXJkIHRocm91Z2ggYCpuZ0lmLWVsc2VgLCBzbyB3ZSBzdXJmYWNlIGEgdHlwZWQgY2FzdFxuICAgKiB2aWEgdGhpcyBtZXRob2QgaW5zdGVhZC4gKi9cbiAgYXNJdGVtKGVudHJ5OiBQcm9maWxlTWVudUVudHJ5KTogUHJvZmlsZU1lbnVJdGVtIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzUHJvZmlsZU1lbnVEaXZpZGVyKGVudHJ5KSA/IG51bGwgOiBlbnRyeTtcbiAgfVxuXG4gIHRyYWNrQnlFbnRyeSA9IChpbmRleDogbnVtYmVyLCBfZW50cnk6IFByb2ZpbGVNZW51RW50cnkpOiBudW1iZXIgPT4gaW5kZXg7XG5cbiAgb25JdGVtQ2xpY2soaXRlbTogUHJvZmlsZU1lbnVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpdGVtLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFuY2hvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlT3ZlcmxheSgpO1xuXG4gICAgLy8gUG9wb3ZlciBmbG9hdHMgb3V0IHRvIHRoZSByaWdodCBvZiB0aGUgcHJvZmlsZSBjYXJkLCBib3R0b20tYWxpZ25lZCB3aXRoIHRoZSBjYXJkLlxuICAgIC8vIGB3aXRoUHVzaChmYWxzZSlgIGlzIGNyaXRpY2FsIOKAlCBvdGhlcndpc2UgQ0RLIHNsaWRlcyB0aGUgb3ZlcmxheSBiYWNrIG92ZXIgdGhlIHNpZGViYXJcbiAgICAvLyB3aGVuIGl0cyB2aWV3cG9ydCBjYWxjdWxhdGlvbiB0aGlua3MgdGhlIHBvcG92ZXIgZG9lc24ndCBmaXQgKGUuZy4gaW4gbmFycm93IGlmcmFtZXMpLlxuICAgIGNvbnN0IHBvc2l0aW9uczogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdID0gW1xuICAgICAgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFg6IDAsIG9mZnNldFk6IDAgfSxcbiAgICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICd0b3AnLCAgICBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRYOiAwLCBvZmZzZXRZOiAtNCB9LFxuICAgIF07XG5cbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5hbmNob3IpXG4gICAgICAud2l0aFBvc2l0aW9ucyhwb3NpdGlvbnMpXG4gICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgIC53aXRoVmlld3BvcnRNYXJnaW4oOClcbiAgICAgIC53aXRoUHVzaChmYWxzZSk7XG5cbiAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgcGFuZWxDbGFzczogJ2NxYS1wcm9maWxlLW1lbnUtcGFuZWwnLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMucG9wb3ZlclRwbCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG5cbiAgICB0aGlzLmJhY2tkcm9wU3ViID0gdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kaXNtaXNzZWQuZW1pdCgpKTtcbiAgICB0aGlzLmtleVN1YiA9IHRoaXMub3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzZWQuZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrZHJvcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJhY2tkcm9wU3ViID0gbnVsbDtcbiAgICB0aGlzLmtleVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmtleVN1YiA9IG51bGw7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3BvcG92ZXJUcGw+XG4gIDxkaXYgY2xhc3M9XCJjcWEtcG1cIiBbYXR0ci5pZF09XCJwb3BvdmVySWRcIiByb2xlPVwibWVudVwiIGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPlxuICAgIDwhLS0gPT09PT0gSGVhZGVyID09PT09IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcG0taGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXBtLWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInVzZXI/LmF2YXRhckNvbG9yIHx8IG51bGxcIj5cbiAgICAgICAge3sgdXNlcj8uaW5pdGlhbHMgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wbS1pZGVudGl0eVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1wbS1uYW1lXCIgW3RpdGxlXT1cInVzZXI/Lm5hbWVcIj57eyB1c2VyPy5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXI/LmVtYWlsXCIgY2xhc3M9XCJjcWEtcG0tZW1haWxcIiBbdGl0bGVdPVwidXNlcj8uZW1haWxcIj57eyB1c2VyPy5lbWFpbCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cInVzZXI/LmJhZGdlPy5sYWJlbFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtcG0tYmFkZ2VcIlxuICAgICAgICAgIFtjbGFzcy5jcWEtcG0tYmFkZ2UtLWFkbWluXT1cIih1c2VyPy5iYWRnZT8udmFyaWFudCB8fCAnYWRtaW4nKSA9PT0gJ2FkbWluJ1wiXG4gICAgICAgICAgW2NsYXNzLmNxYS1wbS1iYWRnZS0tZGVmYXVsdF09XCJ1c2VyPy5iYWRnZT8udmFyaWFudCA9PT0gJ2RlZmF1bHQnXCI+XG4gICAgICAgICAge3sgdXNlcj8uYmFkZ2U/LmxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1wbS1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICA8IS0tID09PT09IEVudHJpZXMgPT09PT0gLS0+XG4gICAgPHVsIGNsYXNzPVwiY3FhLXBtLWxpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVudHJ5IG9mIGVudHJpZXM7IHRyYWNrQnk6IHRyYWNrQnlFbnRyeVwiPlxuICAgICAgICA8bGkgKm5nSWY9XCJpc0RpdmlkZXIoZW50cnkpOyBlbHNlIGl0ZW1UcGxcIiBjbGFzcz1cImNxYS1wbS1saXN0LWRpdmlkZXJcIiByb2xlPVwic2VwYXJhdG9yXCI+PC9saT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtVHBsPlxuICAgICAgICAgIDxsaSAqbmdJZj1cImFzSXRlbShlbnRyeSkgYXMgaXRlbVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtcG0taXRlbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jcWEtcG0taXRlbS0tZGFuZ2VyXT1cIml0ZW0udmFyaWFudCA9PT0gJ2RhbmdlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MuY3FhLXBtLWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uU3ZnIHx8IGl0ZW0uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1wbS1pdGVtLWljb25cIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblN2ZzsgZWxzZSBmb250SWNvblwiXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0uaWNvblN2ZyB8IGNxYVNhZmVIdG1sXCI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9udEljb24+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIml0ZW0uaWNvbkNsYXNzXCIgW25nQ2xhc3NdPVwiaXRlbS5pY29uQ2xhc3NcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1wbS1pdGVtLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnNob3J0Y3V0XCIgY2xhc3M9XCJjcWEtcG0taXRlbS1zaG9ydGN1dFwiPnt7IGl0ZW0uc2hvcnRjdXQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,4 @@
1
+ export function isProfileMenuDivider(entry) {
2
+ return entry.type === 'divider';
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1tZW51Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2lkZWJhci9wcm9maWxlLW1lbnUvcHJvZmlsZS1tZW51Lm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQ0EsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQXVCO0lBQzFELE9BQVEsS0FBNEIsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFByb2ZpbGVNZW51VXNlciB7XG4gIC8qKiBUd28tbGV0dGVyIGluaXRpYWxzIHNob3duIGluIHRoZSBhdmF0YXIgY2lyY2xlIChlLmcuIFwiVEJcIikuICovXG4gIGluaXRpYWxzOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IG5hbWUgKGUuZy4gXCJUZXNsaW0gQmVsbG9cIikuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGVtYWlsIHNob3duIHVuZGVyIHRoZSBuYW1lLiAqL1xuICBlbWFpbD86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHJvbGUgcGlsbCByZW5kZXJlZCBiZWxvdyB0aGUgZW1haWwgKGUuZy4gXCJXb3Jrc3BhY2UgQWRtaW5cIikuICovXG4gIGJhZGdlPzoge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgLyoqIFZpc3VhbCB2YXJpYW50OiAnYWRtaW4nIChwdXJwbGUsIGRlZmF1bHQpIG9yICdkZWZhdWx0JyAobmV1dHJhbCkuICovXG4gICAgdmFyaWFudD86ICdhZG1pbicgfCAnZGVmYXVsdCc7XG4gIH07XG4gIC8qKiBPcHRpb25hbCBDU1MgYmFja2dyb3VuZCBvdmVycmlkZSBmb3IgdGhlIGF2YXRhciAoZ3JhZGllbnQgb3Igc29saWQpLiAqL1xuICBhdmF0YXJDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9maWxlTWVudUl0ZW0ge1xuICAvKiogU3RhYmxlIGlkZW50aWZpZXIgZW1pdHRlZCB2aWEgYGl0ZW1DbGlja2Agd2hlbiB0aGUgcm93IGlzIGNsaWNrZWQuICovXG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBJY29uIGZvbnQgY2xhc3Mg4oCUIHNhbWUgY29udmVudGlvbiBhcyBOYXZJdGVtLmljb25DbGFzcyAoZS5nLiBcImZhLXNvbGlkIGZhLXVzZXJcIikuICovXG4gIGljb25DbGFzcz86IHN0cmluZztcbiAgLyoqIFJhdyBpbmxpbmUgU1ZHIG1hcmt1cC4gU2FuaXRpemVkIGludGVybmFsbHkgYmVmb3JlIHJlbmRlci4gVGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBpY29uQ2xhc3NgLiAqL1xuICBpY29uU3ZnPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwga2V5Ym9hcmQgaGludCBjaGlwIHJlbmRlcmVkIG9uIHRoZSByaWdodCAoZS5nLiBcIuKMmE9cIikuICovXG4gIHNob3J0Y3V0Pzogc3RyaW5nO1xuICAvKiogJ2RhbmdlcicgcmVuZGVycyB0aGUgcm93IGluIHJlZCAodXNlZCBmb3IgTG9nb3V0KS4gKi9cbiAgdmFyaWFudD86ICdkZWZhdWx0JyB8ICdkYW5nZXInO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZU1lbnVEaXZpZGVyIHtcbiAgdHlwZTogJ2RpdmlkZXInO1xufVxuXG5leHBvcnQgdHlwZSBQcm9maWxlTWVudUVudHJ5ID0gUHJvZmlsZU1lbnVJdGVtIHwgUHJvZmlsZU1lbnVEaXZpZGVyO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9maWxlTWVudURpdmlkZXIoZW50cnk6IFByb2ZpbGVNZW51RW50cnkpOiBlbnRyeSBpcyBQcm9maWxlTWVudURpdmlkZXIge1xuICByZXR1cm4gKGVudHJ5IGFzIFByb2ZpbGVNZW51RGl2aWRlcikudHlwZSA9PT0gJ2RpdmlkZXInO1xufVxuIl19