@design-system-rte/angular 0.16.0 → 1.0.0
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.
- package/README.md +1 -1
- package/esm2022/lib/components/badge/badge.component.mjs +3 -3
- package/esm2022/lib/components/banner/banner.component.mjs +14 -6
- package/esm2022/lib/components/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +1 -1
- package/esm2022/lib/components/button/button.component.mjs +11 -4
- package/esm2022/lib/components/card/card.component.mjs +40 -0
- package/esm2022/lib/components/divider/divider.component.mjs +3 -3
- package/esm2022/lib/components/icon-button/icon-button.component.mjs +3 -3
- package/esm2022/lib/components/icon-button-toggle/icon-button-toggle.component.mjs +3 -3
- package/esm2022/lib/components/popover/popover.component.mjs +1 -1
- package/esm2022/lib/components/side-nav/base-side-nav/base-side-nav.component.mjs +63 -0
- package/esm2022/lib/components/side-nav/nav-item/nav-item.component.mjs +58 -0
- package/esm2022/lib/components/side-nav/nav-menu/nav-menu.component.mjs +90 -0
- package/esm2022/lib/components/side-nav/side-nav.component.mjs +96 -0
- package/esm2022/lib/components/toast/toast.component.mjs +57 -0
- package/esm2022/lib/components/toast/toast.service.mjs +114 -0
- package/esm2022/lib/components/tooltip/tooltip.component.mjs +3 -3
- package/esm2022/lib/components/tooltip/tooltip.directive.mjs +11 -8
- package/esm2022/lib/services/overlay.service.mjs +9 -1
- package/esm2022/public-api.mjs +5 -1
- package/fesm2022/design-system-rte-angular.mjs +519 -26
- package/fesm2022/design-system-rte-angular.mjs.map +1 -1
- package/lib/components/badge/badge.directive.d.ts +1 -1
- package/lib/components/banner/banner.component.d.ts +3 -2
- package/lib/components/button/button.component.d.ts +5 -1
- package/lib/components/card/card.component.d.ts +19 -0
- package/lib/components/icon-button/icon-button.component.d.ts +3 -3
- package/lib/components/icon-button-toggle/icon-button-toggle.component.d.ts +2 -2
- package/lib/components/side-nav/base-side-nav/base-side-nav.component.d.ts +26 -0
- package/lib/components/side-nav/nav-item/nav-item.component.d.ts +28 -0
- package/lib/components/side-nav/nav-menu/nav-menu.component.d.ts +42 -0
- package/lib/components/side-nav/side-nav.component.d.ts +33 -0
- package/lib/components/split-button/split-button.component.d.ts +1 -1
- package/lib/components/text-input/text-input.component.d.ts +3 -3
- package/lib/components/toast/toast.component.d.ts +30 -0
- package/lib/components/toast/toast.service.d.ts +34 -0
- package/lib/components/tooltip/tooltip.directive.d.ts +4 -3
- package/lib/services/overlay.service.d.ts +2 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -0
|
@@ -36,7 +36,7 @@ export class PopoverComponent {
|
|
|
36
36
|
this.clickSecondaryButton.emit();
|
|
37
37
|
}
|
|
38
38
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
39
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: PopoverComponent, isStandalone: true, selector: "rte-popover", inputs: { primaryButtonLabel: { classPropertyName: "primaryButtonLabel", publicName: "primaryButtonLabel", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "arrow", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, secondaryButtonLabel: { classPropertyName: "secondaryButtonLabel", publicName: "secondaryButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, coordinates: { classPropertyName: "coordinates", publicName: "coordinates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickPrimaryButton: "clickPrimaryButton", clickSecondaryButton: "clickSecondaryButton" }, ngImport: i0, template: "<div\n #root\n class=\"rte-popover\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.data-arrow]=\"arrow()\"\n [attr.data-position]=\"position()\"\n [attr.data-alignment]=\"alignment()\"\n [attr.data-open]=\"isOpen()\"\n [style]=\"{ top: coordinates().top + 'px', left: coordinates().left + 'px' }\"\n>\n <div class=\"popoverInner\">\n <div class=\"popoverContentContainer\">\n <div *ngIf=\"title\" class=\"popoverTitle\">{{ title() }}</div>\n <div class=\"popoverContent\">{{ content() }}</div>\n </div>\n <div class=\"popoverButtonContainer\">\n <button *ngIf=\"secondaryButtonLabel()\"\n rteButton\n rteButtonVariant=\"secondary\"\n (click)=\"handleClickSecondaryButton()\"\n >{{ secondaryButtonLabel() }}</button>\n <button rteButton\n rteButtonVariant=\"primary\"\n (click)=\"handleClickPrimaryButton()\"\n >{{ primaryButtonLabel() }}</button>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.rte-popoverTrigger{position:relative;width:max-content}.rte-popover{position:absolute;pointer-events:auto;top:0;left:0;padding:0;display:flex;flex-direction:column;gap:0px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.12)) drop-shadow(0 2px 4px rgba(0,0,0,.08));background-color:var(--background-default);transition:opacity .15s ease-out;opacity:0;z-index:1000;min-width:320px;max-width:600px;width:fit-content;height:fit-content}.rte-popover .popoverInner{display:flex;flex-direction:column;align-items:flex-start;padding:24px;gap:24px;border-radius:4px}.rte-popover .popoverInner .popoverContentContainer{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:16px}.rte-popover .popoverInner .popoverContentContainer .popoverTitle{overflow:hidden;text-overflow:ellipsis;color:var(--content-primary);font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:24px;line-height:32px;letter-spacing:-.5px}.rte-popover .popoverInner .popoverContentContainer .popoverContent{color:var(--content-secondary);font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Arial;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0px;width:100%;word-break:break-word}.rte-popover .popoverInner .popoverButtonContainer{display:flex;justify-content:flex-end;align-items:flex-start;padding:0;gap:24px;width:100%}.rte-popover:after{content:\"\";position:absolute;border-width:12px;border-style:solid}.rte-popover[data-position=top]:after{top:100%;left:50%;margin-left:-12px;border-color:var(--background-default) transparent transparent transparent}.rte-popover[data-position=top][data-alignment=start]:after{left:20px}.rte-popover[data-position=top][data-alignment=end]:after{left:auto;right:20px}.rte-popover[data-position=bottom]:after{bottom:100%;left:50%;margin-left:-12px;border-color:transparent transparent var(--background-default) transparent}.rte-popover[data-position=bottom][data-alignment=start]:after{left:20px}.rte-popover[data-position=bottom][data-alignment=end]:after{left:auto;right:20px}.rte-popover[data-position=left]:after{top:50%;left:100%;margin-top:-12px;border-color:transparent transparent transparent var(--background-default)}.rte-popover[data-position=left][data-alignment=start]:after{top:20px}.rte-popover[data-position=left][data-alignment=end]:after{top:auto;bottom:20px}.rte-popover[data-position=right]:after{top:50%;right:100%;margin-top:-12px;border-color:transparent var(--background-default) transparent transparent}.rte-popover[data-position=right][data-alignment=start]:after{top:20px}.rte-popover[data-position=right][data-alignment=end]:after{top:auto;bottom:20px}.rte-popover[data-arrow=false]:after{display:none}.rte-popover[data-open=true]{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[rteButton]", inputs: ["rteButtonVariant", "rteButtonSize"] }] }); }
|
|
39
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: PopoverComponent, isStandalone: true, selector: "rte-popover", inputs: { primaryButtonLabel: { classPropertyName: "primaryButtonLabel", publicName: "primaryButtonLabel", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, arrow: { classPropertyName: "arrow", publicName: "arrow", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, secondaryButtonLabel: { classPropertyName: "secondaryButtonLabel", publicName: "secondaryButtonLabel", isSignal: true, isRequired: false, transformFunction: null }, isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, coordinates: { classPropertyName: "coordinates", publicName: "coordinates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickPrimaryButton: "clickPrimaryButton", clickSecondaryButton: "clickSecondaryButton" }, ngImport: i0, template: "<div\n #root\n class=\"rte-popover\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.data-arrow]=\"arrow()\"\n [attr.data-position]=\"position()\"\n [attr.data-alignment]=\"alignment()\"\n [attr.data-open]=\"isOpen()\"\n [style]=\"{ top: coordinates().top + 'px', left: coordinates().left + 'px' }\"\n>\n <div class=\"popoverInner\">\n <div class=\"popoverContentContainer\">\n <div *ngIf=\"title\" class=\"popoverTitle\">{{ title() }}</div>\n <div class=\"popoverContent\">{{ content() }}</div>\n </div>\n <div class=\"popoverButtonContainer\">\n <button *ngIf=\"secondaryButtonLabel()\"\n rteButton\n rteButtonVariant=\"secondary\"\n (click)=\"handleClickSecondaryButton()\"\n >{{ secondaryButtonLabel() }}</button>\n <button rteButton\n rteButtonVariant=\"primary\"\n (click)=\"handleClickPrimaryButton()\"\n >{{ primaryButtonLabel() }}</button>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.rte-popoverTrigger{position:relative;width:max-content}.rte-popover{position:absolute;pointer-events:auto;top:0;left:0;padding:0;display:flex;flex-direction:column;gap:0px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.12)) drop-shadow(0 2px 4px rgba(0,0,0,.08));background-color:var(--background-default);transition:opacity .15s ease-out;opacity:0;z-index:1000;min-width:320px;max-width:600px;width:fit-content;height:fit-content}.rte-popover .popoverInner{display:flex;flex-direction:column;align-items:flex-start;padding:24px;gap:24px;border-radius:4px}.rte-popover .popoverInner .popoverContentContainer{display:flex;flex-direction:column;align-items:flex-start;padding:0;gap:16px}.rte-popover .popoverInner .popoverContentContainer .popoverTitle{overflow:hidden;text-overflow:ellipsis;color:var(--content-primary);font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:24px;line-height:32px;letter-spacing:-.5px}.rte-popover .popoverInner .popoverContentContainer .popoverContent{color:var(--content-secondary);font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Arial;font-weight:400;font-size:14px;line-height:20px;letter-spacing:0px;width:100%;word-break:break-word}.rte-popover .popoverInner .popoverButtonContainer{display:flex;justify-content:flex-end;align-items:flex-start;padding:0;gap:24px;width:100%}.rte-popover:after{content:\"\";position:absolute;border-width:12px;border-style:solid}.rte-popover[data-position=top]:after{top:100%;left:50%;margin-left:-12px;border-color:var(--background-default) transparent transparent transparent}.rte-popover[data-position=top][data-alignment=start]:after{left:20px}.rte-popover[data-position=top][data-alignment=end]:after{left:auto;right:20px}.rte-popover[data-position=bottom]:after{bottom:100%;left:50%;margin-left:-12px;border-color:transparent transparent var(--background-default) transparent}.rte-popover[data-position=bottom][data-alignment=start]:after{left:20px}.rte-popover[data-position=bottom][data-alignment=end]:after{left:auto;right:20px}.rte-popover[data-position=left]:after{top:50%;left:100%;margin-top:-12px;border-color:transparent transparent transparent var(--background-default)}.rte-popover[data-position=left][data-alignment=start]:after{top:20px}.rte-popover[data-position=left][data-alignment=end]:after{top:auto;bottom:20px}.rte-popover[data-position=right]:after{top:50%;right:100%;margin-top:-12px;border-color:transparent var(--background-default) transparent transparent}.rte-popover[data-position=right][data-alignment=start]:after{top:20px}.rte-popover[data-position=right][data-alignment=end]:after{top:auto;bottom:20px}.rte-popover[data-arrow=false]:after{display:none}.rte-popover[data-open=true]{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "button[rteButton]", inputs: ["rteButtonVariant", "rteButtonSize", "rteBadgeCount", "rteBadgeContent"] }] }); }
|
|
40
40
|
}
|
|
41
41
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopoverComponent, decorators: [{
|
|
42
42
|
type: Component,
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ElementRef, inject, input, viewChild, } from "@angular/core";
|
|
3
|
+
import { sideNavCollapsedSize, sideNavPanelSize } from "@design-system-rte/core/components/side-nav/side-nav.constants";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
export class BaseSideNavComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
9
|
+
this.elementRef = inject((ElementRef));
|
|
10
|
+
this.contentRef = viewChild("contentRef");
|
|
11
|
+
this.collapsedSize = sideNavCollapsedSize;
|
|
12
|
+
this.panelSize = sideNavPanelSize;
|
|
13
|
+
this.size = input("m");
|
|
14
|
+
this.appearance = input("brand");
|
|
15
|
+
this.collapsed = input(false);
|
|
16
|
+
this.showHeader = input(true);
|
|
17
|
+
this.showFooter = input(true);
|
|
18
|
+
this.minWidth = computed(() => {
|
|
19
|
+
return this.collapsed() ? `${this.collapsedSize}px` : `${this.panelSize[this.size()]}px`;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
ngAfterViewInit() {
|
|
23
|
+
this.setupResizeObserver();
|
|
24
|
+
}
|
|
25
|
+
ngOnDestroy() {
|
|
26
|
+
this.cleanupResizeObserver();
|
|
27
|
+
}
|
|
28
|
+
setupResizeObserver() {
|
|
29
|
+
const containerEl = this.elementRef.nativeElement;
|
|
30
|
+
const contentEl = this.contentRef()?.nativeElement;
|
|
31
|
+
if (!containerEl || !contentEl) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const setHeightVar = () => {
|
|
35
|
+
const height = contentEl.offsetHeight;
|
|
36
|
+
containerEl.style.setProperty("--content-height", `${height}px`);
|
|
37
|
+
};
|
|
38
|
+
this.resizeHandler = setHeightVar;
|
|
39
|
+
setHeightVar();
|
|
40
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
41
|
+
setHeightVar();
|
|
42
|
+
});
|
|
43
|
+
this.resizeObserver.observe(contentEl);
|
|
44
|
+
window.addEventListener("resize", setHeightVar);
|
|
45
|
+
}
|
|
46
|
+
cleanupResizeObserver() {
|
|
47
|
+
if (this.resizeObserver) {
|
|
48
|
+
this.resizeObserver.disconnect();
|
|
49
|
+
this.resizeObserver = undefined;
|
|
50
|
+
}
|
|
51
|
+
if (this.resizeHandler) {
|
|
52
|
+
window.removeEventListener("resize", this.resizeHandler);
|
|
53
|
+
this.resizeHandler = undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseSideNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
57
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BaseSideNavComponent, isStandalone: true, selector: "rte-base-side-nav", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "contentRef", first: true, predicate: ["contentRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"side-nav-container\">\n <nav class=\"side-nav\" [ngClass]=\"{'collapsed': collapsed(), 'appearance': appearance()}\" [style.min-width]=\"minWidth()\">\n @if (showHeader()) {\n <div class=\"side-nav-header\">\n <ng-content select=\"[side-nav-header]\"></ng-content>\n </div>\n }\n\n <div class=\"side-nav-body\">\n <ng-content select=\"[side-nav-body]\"></ng-content>\n </div>\n\n @if (showFooter()) {\n <div class=\"side-nav-footer\">\n <ng-content select=\"[side-nav-footer]\"></ng-content>\n </div>\n }\n </nav>\n <div #contentRef class=\"side-nav-content\">\n <ng-content select=\"[side-nav-content]\"></ng-content>\n </div>\n</div>\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.side-nav-container{height:auto;padding:0;position:relative;display:flex;align-items:stretch;flex:1}.side-nav-content{flex:1 1 auto;min-width:0;overflow-y:auto}.side-nav{background-color:var(--background-brand-navigation-default);flex:0 0 auto;align-self:stretch;display:flex;flex-direction:column;gap:0px;box-sizing:border-box;border-radius:0;transition:min-width .3s;color:var(--content-brand-navigation-default);max-height:var(--content-height)}.side-nav.neutral{background-color:var(--background-neutral-navigation-default);color:var(--content-secondary)}.side-nav-header{align-items:center;justify-content:space-between;width:100%;box-sizing:border-box}.side-nav-body{width:100%;box-sizing:border-box;flex:1;overflow-y:auto;min-height:0}.side-nav-footer{align-items:center;justify-content:space-between;box-sizing:border-box;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseSideNavComponent, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{ selector: "rte-base-side-nav", imports: [CommonModule], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"side-nav-container\">\n <nav class=\"side-nav\" [ngClass]=\"{'collapsed': collapsed(), 'appearance': appearance()}\" [style.min-width]=\"minWidth()\">\n @if (showHeader()) {\n <div class=\"side-nav-header\">\n <ng-content select=\"[side-nav-header]\"></ng-content>\n </div>\n }\n\n <div class=\"side-nav-body\">\n <ng-content select=\"[side-nav-body]\"></ng-content>\n </div>\n\n @if (showFooter()) {\n <div class=\"side-nav-footer\">\n <ng-content select=\"[side-nav-footer]\"></ng-content>\n </div>\n }\n </nav>\n <div #contentRef class=\"side-nav-content\">\n <ng-content select=\"[side-nav-content]\"></ng-content>\n </div>\n</div>\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.side-nav-container{height:auto;padding:0;position:relative;display:flex;align-items:stretch;flex:1}.side-nav-content{flex:1 1 auto;min-width:0;overflow-y:auto}.side-nav{background-color:var(--background-brand-navigation-default);flex:0 0 auto;align-self:stretch;display:flex;flex-direction:column;gap:0px;box-sizing:border-box;border-radius:0;transition:min-width .3s;color:var(--content-brand-navigation-default);max-height:var(--content-height)}.side-nav.neutral{background-color:var(--background-neutral-navigation-default);color:var(--content-secondary)}.side-nav-header{align-items:center;justify-content:space-between;width:100%;box-sizing:border-box}.side-nav-body{width:100%;box-sizing:border-box;flex:1;overflow-y:auto;min-height:0}.side-nav-footer{align-items:center;justify-content:space-between;box-sizing:border-box;width:100%}\n"] }]
|
|
62
|
+
}] });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zaWRlLW5hdi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1ydGUtbGliL3NyYy9saWIvY29tcG9uZW50cy9zaWRlLW5hdi9iYXNlLXNpZGUtbmF2L2Jhc2Utc2lkZS1uYXYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXYvYmFzZS1zaWRlLW5hdi9iYXNlLXNpZGUtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7O0FBYXhILE1BQU0sT0FBTyxvQkFBb0I7SUFSakM7UUFTbUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztRQUVyRCxlQUFVLEdBQUcsU0FBUyxDQUE2QixZQUFZLENBQUMsQ0FBQztRQUV6RCxrQkFBYSxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLGNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztRQUVyQyxTQUFJLEdBQUcsS0FBSyxDQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLGVBQVUsR0FBRyxLQUFLLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLGNBQVMsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRWxDLGFBQVEsR0FBRyxRQUFRLENBQVMsR0FBRyxFQUFFO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7S0E4Q0o7SUF6Q0MsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsYUFBYSxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLEdBQVMsRUFBRTtZQUM5QixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQ3RDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxZQUFZLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFO1lBQzVDLFlBQVksRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDOytHQTlEVSxvQkFBb0I7bUdBQXBCLG9CQUFvQixpMkJDMUJqQyw4c0JBdUJBLCtsQ0RIWSxZQUFZOzs0RkFNWCxvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0UsbUJBQW1CLFdBQ3BCLENBQUMsWUFBWSxDQUFDLGNBQ1gsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFbGVtZW50UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHNpZGVOYXZDb2xsYXBzZWRTaXplLCBzaWRlTmF2UGFuZWxTaXplIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbXBvbmVudHMvc2lkZS1uYXYvc2lkZS1uYXYuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTaWRlTmF2QXBwZWFyYW5jZSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3NpZGUtbmF2L3NpZGUtbmF2LmludGVyZmFjZVwiO1xuXG50eXBlIFNpZGVOYXZTaXplID0gXCJzXCIgfCBcIm1cIiB8IFwibFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwicnRlLWJhc2Utc2lkZS1uYXZcIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYmFzZS1zaWRlLW5hdi5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybDogXCIuL2Jhc2Utc2lkZS1uYXYuY29tcG9uZW50LnNjc3NcIixcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJhc2VTaWRlTmF2Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KFwiY29udGVudFJlZlwiKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbGxhcHNlZFNpemUgPSBzaWRlTmF2Q29sbGFwc2VkU2l6ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYW5lbFNpemUgPSBzaWRlTmF2UGFuZWxTaXplO1xuXG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dDxTaWRlTmF2U2l6ZT4oXCJtXCIpO1xuICByZWFkb25seSBhcHBlYXJhbmNlID0gaW5wdXQ8U2lkZU5hdkFwcGVhcmFuY2U+KFwiYnJhbmRcIik7XG4gIHJlYWRvbmx5IGNvbGxhcHNlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0hlYWRlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBzaG93Rm9vdGVyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcmVhZG9ubHkgbWluV2lkdGggPSBjb21wdXRlZDxzdHJpbmc+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsYXBzZWQoKSA/IGAke3RoaXMuY29sbGFwc2VkU2l6ZX1weGAgOiBgJHt0aGlzLnBhbmVsU2l6ZVt0aGlzLnNpemUoKV19cHhgO1xuICB9KTtcblxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG4gIHByaXZhdGUgcmVzaXplSGFuZGxlcj86ICgpID0+IHZvaWQ7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwUmVzaXplT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGNvbnRlbnRFbCA9IHRoaXMuY29udGVudFJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyRWwgfHwgIWNvbnRlbnRFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNldEhlaWdodFZhciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRlbnRFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBjb250YWluZXJFbC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tY29udGVudC1oZWlnaHRcIiwgYCR7aGVpZ2h0fXB4YCk7XG4gICAgfTtcblxuICAgIHRoaXMucmVzaXplSGFuZGxlciA9IHNldEhlaWdodFZhcjtcbiAgICBzZXRIZWlnaHRWYXIoKTtcblxuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgc2V0SGVpZ2h0VmFyKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRlbnRFbCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBzZXRIZWlnaHRWYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwUmVzaXplT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzaXplSGFuZGxlcikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdGhpcy5yZXNpemVIYW5kbGVyKTtcbiAgICAgIHRoaXMucmVzaXplSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzaWRlLW5hdi1jb250YWluZXJcIj5cbiAgPG5hdiBjbGFzcz1cInNpZGUtbmF2XCIgW25nQ2xhc3NdPVwieydjb2xsYXBzZWQnOiBjb2xsYXBzZWQoKSwgJ2FwcGVhcmFuY2UnOiBhcHBlYXJhbmNlKCl9XCIgW3N0eWxlLm1pbi13aWR0aF09XCJtaW5XaWR0aCgpXCI+XG4gICAgQGlmIChzaG93SGVhZGVyKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW5hdi1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NpZGUtbmF2LWhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwic2lkZS1uYXYtYm9keVwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NpZGUtbmF2LWJvZHldXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChzaG93Rm9vdGVyKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW5hdi1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NpZGUtbmF2LWZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvbmF2PlxuICA8ZGl2ICNjb250ZW50UmVmIGNsYXNzPVwic2lkZS1uYXYtY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzaWRlLW5hdi1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input, output, signal } from "@angular/core";
|
|
3
|
+
import { getNavItemLabelIconSize } from "@design-system-rte/core/components/side-nav/nav-item/nav-item.utils";
|
|
4
|
+
import { ENTER_KEY, SPACE_KEY } from "@design-system-rte/core/constants/keyboard/keyboard.constants";
|
|
5
|
+
import { BadgeComponent } from "../../badge/badge.component";
|
|
6
|
+
import { IconComponent } from "../../icon/icon.component";
|
|
7
|
+
import { TooltipDirective } from "../../tooltip/tooltip.directive";
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common";
|
|
10
|
+
function getNavTabIndex(parentMenuOpen) {
|
|
11
|
+
return parentMenuOpen === false ? -1 : 0;
|
|
12
|
+
}
|
|
13
|
+
export class NavItemComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.id = input();
|
|
16
|
+
this.icon = input();
|
|
17
|
+
this.showIcon = input(true);
|
|
18
|
+
this.label = input.required();
|
|
19
|
+
this.collapsed = input(false);
|
|
20
|
+
this.link = input();
|
|
21
|
+
this.appearance = input("brand");
|
|
22
|
+
this.active = input(false);
|
|
23
|
+
this.badge = input();
|
|
24
|
+
this.isNested = input(false);
|
|
25
|
+
this.parentMenuOpen = input();
|
|
26
|
+
this.role = input();
|
|
27
|
+
this.showDivider = input(false);
|
|
28
|
+
this.focused = signal(false);
|
|
29
|
+
this.tabIndex = computed(() => getNavTabIndex(this.parentMenuOpen()));
|
|
30
|
+
this.itemClick = output();
|
|
31
|
+
this.iconSize = computed(() => {
|
|
32
|
+
return getNavItemLabelIconSize(this.isNested(), this.collapsed());
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
handleClick(event) {
|
|
36
|
+
event.stopPropagation();
|
|
37
|
+
this.itemClick.emit(this.id() || this.label());
|
|
38
|
+
}
|
|
39
|
+
handleKeyDown(event) {
|
|
40
|
+
if ([SPACE_KEY, ENTER_KEY].includes(event.key)) {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
this.itemClick.emit(this.id() || this.label());
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
handleFocus() {
|
|
46
|
+
this.focused.set(true);
|
|
47
|
+
}
|
|
48
|
+
handleBlur() {
|
|
49
|
+
this.focused.set(false);
|
|
50
|
+
}
|
|
51
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NavItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
52
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: NavItemComponent, isStandalone: true, selector: "rte-nav-item", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, isNested: { classPropertyName: "isNested", publicName: "isNested", isSignal: true, isRequired: false, transformFunction: null }, parentMenuOpen: { classPropertyName: "parentMenuOpen", publicName: "parentMenuOpen", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, showDivider: { classPropertyName: "showDivider", publicName: "showDivider", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "@if (collapsed() && label()) {\n <div\n class=\"nav-item-container {{appearance()}}\"\n rteTooltip\n rteTooltipPosition=\"right\"\n rteTooltipAlignment=\"center\"\n [id]=\"id()\"\n [ngClass]=\"{ collapsed: collapsed(), nested: isNested(), active: active(), focused: focused() }\"\n [attr.role]=\"role()\"\n [rteTooltip]=\"label()\"\n [rteTooltipArrow]=\"false\"\n [rteTooltipGap]=\"12\"\n [rteTooltipShouldFocusTrigger]=\"false\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" />\n </div>\n} @else {\n <div\n class=\"nav-item-container {{appearance()}}\"\n [id]=\"id()\"\n [ngClass]=\"{ collapsed: collapsed(), nested: isNested(), active: active(), focused: focused() }\"\n [attr.role]=\"role()\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" />\n </div>\n}\n\n<ng-template #contentTemplate>\n @if (link()) {\n <a\n class=\"nav-item\"\n [href]=\"link()!\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\">\n <div class=\"nav-item-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"nav-item-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n </div>\n </a>\n } @else {\n <span\n class=\"nav-item\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\">\n <div class=\"nav-item-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"nav-item-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n </div>\n </span>\n }\n</ng-template>\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.nav-item-container{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:16px;line-height:24px;letter-spacing:-.5px;width:100%;display:flex;justify-content:flex-start;gap:8px;padding:8px 6px;border-radius:4px;cursor:pointer;transition:background-color .3s ease;align-items:center;box-sizing:border-box;border-left:2px solid transparent;color:var(--content-brand-navigation-default)}.nav-item-container.neutral{color:var(--content-secondary)}.nav-item-container.neutral:hover{background:var(--background-neutral-navigation-hover);color:var(--content-primary)}.nav-item-container.neutral.active{box-shadow:inset 0 1px 4px 0 var(--elevation-shadow-key);background:linear-gradient(0deg,var(--elevation-surface-inner-shadow) 0%,var(--elevation-surface-inner-shadow) 100%);color:var(--content-brand-pressed)}.nav-item-container.neutral.nested{border-radius:0 4px 4px 0;border-left:1px solid var(--border-divider)}.nav-item-container.neutral.nested.active{border-left:1px solid var(--border-brand-navigation-active)}.nav-item-container:hover{background:var(--background-brand-navigation-hover);color:var(--content-brand-navigation-hover)}.nav-item-container.active{background:var(--background-brand-navigation-pressed);border-left:2px solid var(--border-brand-navigation-divider);color:var(--content-primary-inverse)}.nav-item-container:active.focused{outline:none}.nav-item-container .nav-item{display:flex;padding:0;align-items:center;gap:8px;flex:1 0 0;-webkit-user-select:none;user-select:none;outline:none;justify-content:space-between}.nav-item-container .nav-item:link,.nav-item-container .nav-item:visited,.nav-item-container .nav-item:link:hover,.nav-item-container .nav-item:visited:hover{text-decoration:none;color:inherit}.nav-item-container .nav-item .nav-item-left{display:flex;align-items:center;gap:8px}.nav-item-container .nav-item .nav-item-right{display:flex;align-items:center;gap:4px}.nav-item-container.focused{outline:1px solid var(--border-brand-focused);outline-offset:0}.nav-item-container.collapsed{padding:8px 12px;justify-content:center;border-left:none}.nav-item-container.collapsed .nav-item{justify-content:center;gap:0}.nav-item-container.nested{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-size:14px;letter-spacing:-.5px;font-weight:600;line-height:20px;border-radius:0 4px 4px 0;border-left:1px solid var(--border-brand-navigation-divider);padding:4px 8px}.nav-item-container.nested.active{box-shadow:inset 0 1px 4px 0 var(--elevation-shadow-key)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "rte-icon", inputs: ["name", "size", "color", "classes", "appearance"] }, { kind: "component", type: BadgeComponent, selector: "rte-badge", inputs: ["badgeType", "badgeSize", "badgeContent", "count", "icon", "simpleBadge"] }, { kind: "directive", type: TooltipDirective, selector: "[rteTooltip]", inputs: ["rteTooltip", "rteTooltipPosition", "rteTooltipAlignment", "rteTooltipArrow", "rteTooltipShouldFocusTrigger", "rteTooltipGap"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NavItemComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: "rte-nav-item", imports: [CommonModule, IconComponent, BadgeComponent, TooltipDirective], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (collapsed() && label()) {\n <div\n class=\"nav-item-container {{appearance()}}\"\n rteTooltip\n rteTooltipPosition=\"right\"\n rteTooltipAlignment=\"center\"\n [id]=\"id()\"\n [ngClass]=\"{ collapsed: collapsed(), nested: isNested(), active: active(), focused: focused() }\"\n [attr.role]=\"role()\"\n [rteTooltip]=\"label()\"\n [rteTooltipArrow]=\"false\"\n [rteTooltipGap]=\"12\"\n [rteTooltipShouldFocusTrigger]=\"false\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" />\n </div>\n} @else {\n <div\n class=\"nav-item-container {{appearance()}}\"\n [id]=\"id()\"\n [ngClass]=\"{ collapsed: collapsed(), nested: isNested(), active: active(), focused: focused() }\"\n [attr.role]=\"role()\">\n <ng-container [ngTemplateOutlet]=\"contentTemplate\" />\n </div>\n}\n\n<ng-template #contentTemplate>\n @if (link()) {\n <a\n class=\"nav-item\"\n [href]=\"link()!\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\">\n <div class=\"nav-item-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"nav-item-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n </div>\n </a>\n } @else {\n <span\n class=\"nav-item\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"handleClick($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (focus)=\"handleFocus()\"\n (blur)=\"handleBlur()\">\n <div class=\"nav-item-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"nav-item-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n </div>\n </span>\n }\n</ng-template>\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";.nav-item-container{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:16px;line-height:24px;letter-spacing:-.5px;width:100%;display:flex;justify-content:flex-start;gap:8px;padding:8px 6px;border-radius:4px;cursor:pointer;transition:background-color .3s ease;align-items:center;box-sizing:border-box;border-left:2px solid transparent;color:var(--content-brand-navigation-default)}.nav-item-container.neutral{color:var(--content-secondary)}.nav-item-container.neutral:hover{background:var(--background-neutral-navigation-hover);color:var(--content-primary)}.nav-item-container.neutral.active{box-shadow:inset 0 1px 4px 0 var(--elevation-shadow-key);background:linear-gradient(0deg,var(--elevation-surface-inner-shadow) 0%,var(--elevation-surface-inner-shadow) 100%);color:var(--content-brand-pressed)}.nav-item-container.neutral.nested{border-radius:0 4px 4px 0;border-left:1px solid var(--border-divider)}.nav-item-container.neutral.nested.active{border-left:1px solid var(--border-brand-navigation-active)}.nav-item-container:hover{background:var(--background-brand-navigation-hover);color:var(--content-brand-navigation-hover)}.nav-item-container.active{background:var(--background-brand-navigation-pressed);border-left:2px solid var(--border-brand-navigation-divider);color:var(--content-primary-inverse)}.nav-item-container:active.focused{outline:none}.nav-item-container .nav-item{display:flex;padding:0;align-items:center;gap:8px;flex:1 0 0;-webkit-user-select:none;user-select:none;outline:none;justify-content:space-between}.nav-item-container .nav-item:link,.nav-item-container .nav-item:visited,.nav-item-container .nav-item:link:hover,.nav-item-container .nav-item:visited:hover{text-decoration:none;color:inherit}.nav-item-container .nav-item .nav-item-left{display:flex;align-items:center;gap:8px}.nav-item-container .nav-item .nav-item-right{display:flex;align-items:center;gap:4px}.nav-item-container.focused{outline:1px solid var(--border-brand-focused);outline-offset:0}.nav-item-container.collapsed{padding:8px 12px;justify-content:center;border-left:none}.nav-item-container.collapsed .nav-item{justify-content:center;gap:0}.nav-item-container.nested{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-size:14px;letter-spacing:-.5px;font-weight:600;line-height:20px;border-radius:0 4px 4px 0;border-left:1px solid var(--border-brand-navigation-divider);padding:4px 8px}.nav-item-container.nested.active{box-shadow:inset 0 1px 4px 0 var(--elevation-shadow-key)}\n"] }]
|
|
57
|
+
}] });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXYvbmF2LWl0ZW0vbmF2LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXYvbmF2LWl0ZW0vbmF2LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBRW5FLFNBQVMsY0FBYyxDQUFDLGNBQXdCO0lBQzlDLE9BQU8sY0FBYyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBVUQsTUFBTSxPQUFPLGdCQUFnQjtJQVI3QjtRQVNXLE9BQUUsR0FBRyxLQUFLLEVBQXNCLENBQUM7UUFDakMsU0FBSSxHQUFHLEtBQUssRUFBc0IsQ0FBQztRQUNuQyxhQUFRLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDakMsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxTQUFJLEdBQUcsS0FBSyxFQUFzQixDQUFDO1FBQ25DLGVBQVUsR0FBRyxLQUFLLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLFdBQU0sR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDL0IsVUFBSyxHQUFHLEtBQUssRUFBMEIsQ0FBQztRQUN4QyxhQUFRLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLG1CQUFjLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBQzlDLFNBQUksR0FBRyxLQUFLLEVBQXNCLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFcEMsWUFBTyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsUUFBUSxDQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXpFLGNBQVMsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUU3QixhQUFRLEdBQUcsUUFBUSxDQUFTLEdBQUcsRUFBRTtZQUN4QyxPQUFPLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztLQXFCSjtJQW5CQyxXQUFXLENBQUMsS0FBWTtRQUN0QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7K0dBMUNVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDJ0REN2QjdCLHV0RkF3RkEsd3lGRHZFWSxZQUFZLG9TQUFFLGFBQWEsaUhBQUUsY0FBYywwSUFBRSxnQkFBZ0I7OzRGQU01RCxnQkFBZ0I7a0JBUjVCLFNBQVM7K0JBQ0UsY0FBYyxXQUNmLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsY0FDNUQsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCYWRnZVByb3BzIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbXBvbmVudHMvYmFkZ2UvYmFkZ2UuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBnZXROYXZJdGVtTGFiZWxJY29uU2l6ZSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3NpZGUtbmF2L25hdi1pdGVtL25hdi1pdGVtLnV0aWxzXCI7XG5pbXBvcnQgeyBTaWRlTmF2QXBwZWFyYW5jZSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3NpZGUtbmF2L3NpZGUtbmF2LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgRU5URVJfS0VZLCBTUEFDRV9LRVkgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29uc3RhbnRzL2tleWJvYXJkL2tleWJvYXJkLmNvbnN0YW50c1wiO1xuXG5pbXBvcnQgeyBCYWRnZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XG5cbmZ1bmN0aW9uIGdldE5hdlRhYkluZGV4KHBhcmVudE1lbnVPcGVuPzogYm9vbGVhbik6IG51bWJlciB7XG4gIHJldHVybiBwYXJlbnRNZW51T3BlbiA9PT0gZmFsc2UgPyAtMSA6IDA7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJydGUtbmF2LWl0ZW1cIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSWNvbkNvbXBvbmVudCwgQmFkZ2VDb21wb25lbnQsIFRvb2x0aXBEaXJlY3RpdmVdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogXCIuL25hdi1pdGVtLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsOiBcIi4vbmF2LWl0ZW0uY29tcG9uZW50LnNjc3NcIixcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5hdkl0ZW1Db21wb25lbnQge1xuICByZWFkb25seSBpZCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaWNvbiA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgc2hvd0ljb24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgbGFiZWwgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGNvbGxhcHNlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbGluayA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgYXBwZWFyYW5jZSA9IGlucHV0PFNpZGVOYXZBcHBlYXJhbmNlPihcImJyYW5kXCIpO1xuICByZWFkb25seSBhY3RpdmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGJhZGdlID0gaW5wdXQ8QmFkZ2VQcm9wcyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgaXNOZXN0ZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHBhcmVudE1lbnVPcGVuID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcm9sZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgc2hvd0RpdmlkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgZm9jdXNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHRhYkluZGV4ID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiBnZXROYXZUYWJJbmRleCh0aGlzLnBhcmVudE1lbnVPcGVuKCkpKTtcblxuICByZWFkb25seSBpdGVtQ2xpY2sgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IGljb25TaXplID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIGdldE5hdkl0ZW1MYWJlbEljb25TaXplKHRoaXMuaXNOZXN0ZWQoKSwgdGhpcy5jb2xsYXBzZWQoKSk7XG4gIH0pO1xuXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodGhpcy5pZCgpIHx8IHRoaXMubGFiZWwoKSk7XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFtTUEFDRV9LRVksIEVOVEVSX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodGhpcy5pZCgpIHx8IHRoaXMubGFiZWwoKSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIGhhbmRsZUJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5mb2N1c2VkLnNldChmYWxzZSk7XG4gIH1cbn1cbiIsIkBpZiAoY29sbGFwc2VkKCkgJiYgbGFiZWwoKSkge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJuYXYtaXRlbS1jb250YWluZXIge3thcHBlYXJhbmNlKCl9fVwiXG4gICAgcnRlVG9vbHRpcFxuICAgIHJ0ZVRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICBydGVUb29sdGlwQWxpZ25tZW50PVwiY2VudGVyXCJcbiAgICBbaWRdPVwiaWQoKVwiXG4gICAgW25nQ2xhc3NdPVwieyBjb2xsYXBzZWQ6IGNvbGxhcHNlZCgpLCBuZXN0ZWQ6IGlzTmVzdGVkKCksIGFjdGl2ZTogYWN0aXZlKCksIGZvY3VzZWQ6IGZvY3VzZWQoKSB9XCJcbiAgICBbYXR0ci5yb2xlXT1cInJvbGUoKVwiXG4gICAgW3J0ZVRvb2x0aXBdPVwibGFiZWwoKVwiXG4gICAgW3J0ZVRvb2x0aXBBcnJvd109XCJmYWxzZVwiXG4gICAgW3J0ZVRvb2x0aXBHYXBdPVwiMTJcIlxuICAgIFtydGVUb29sdGlwU2hvdWxkRm9jdXNUcmlnZ2VyXT1cImZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbn0gQGVsc2Uge1xuICA8ZGl2XG4gICAgY2xhc3M9XCJuYXYtaXRlbS1jb250YWluZXIge3thcHBlYXJhbmNlKCl9fVwiXG4gICAgW2lkXT1cImlkKClcIlxuICAgIFtuZ0NsYXNzXT1cInsgY29sbGFwc2VkOiBjb2xsYXBzZWQoKSwgbmVzdGVkOiBpc05lc3RlZCgpLCBhY3RpdmU6IGFjdGl2ZSgpLCBmb2N1c2VkOiBmb2N1c2VkKCkgfVwiXG4gICAgW2F0dHIucm9sZV09XCJyb2xlKClcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUZW1wbGF0ZVwiIC8+XG4gIDwvZGl2PlxufVxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cbiAgQGlmIChsaW5rKCkpIHtcbiAgICA8YVxuICAgICAgY2xhc3M9XCJuYXYtaXRlbVwiXG4gICAgICBbaHJlZl09XCJsaW5rKCkhXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYkluZGV4KClcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtLWxlZnRcIj5cbiAgICAgICAgQGlmIChzaG93SWNvbigpICYmIGljb24oKSkge1xuICAgICAgICAgIDxydGUtaWNvbiBjbGFzcz1cImljb25cIiBbbmFtZV09XCJpY29uKCkhXCIgW3NpemVdPVwiaWNvblNpemUoKVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghY29sbGFwc2VkKCkpIHtcbiAgICAgICAgICA8c3Bhbj57eyBsYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbS1yaWdodFwiPlxuICAgICAgICBAaWYgKGJhZGdlKCkpIHtcbiAgICAgICAgICA8cnRlLWJhZGdlXG4gICAgICAgICAgICBbYmFkZ2VUeXBlXT1cImJhZGdlKCkhLmJhZGdlVHlwZSB8fCAnYnJhbmQnXCJcbiAgICAgICAgICAgIFtiYWRnZVNpemVdPVwiYmFkZ2UoKSEuc2l6ZSB8fCAnbSdcIlxuICAgICAgICAgICAgW2JhZGdlQ29udGVudF09XCJiYWRnZSgpIS5jb250ZW50IHx8ICdudW1iZXInXCJcbiAgICAgICAgICAgIFtjb3VudF09XCJiYWRnZSgpIS5jb3VudFwiXG4gICAgICAgICAgICBbaWNvbl09XCJiYWRnZSgpIS5pY29uIHx8ICdub3RpZmljYXRpb24nXCJcbiAgICAgICAgICAgIFtzaW1wbGVCYWRnZV09XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIH0gQGVsc2Uge1xuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cIm5hdi1pdGVtXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYkluZGV4KClcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiXG4gICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbS1sZWZ0XCI+XG4gICAgICAgIEBpZiAoc2hvd0ljb24oKSAmJiBpY29uKCkpIHtcbiAgICAgICAgICA8cnRlLWljb24gY2xhc3M9XCJpY29uXCIgW25hbWVdPVwiaWNvbigpIVwiIFtzaXplXT1cImljb25TaXplKClcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWNvbGxhcHNlZCgpKSB7XG4gICAgICAgICAgPHNwYW4+e3sgbGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0tcmlnaHRcIj5cbiAgICAgICAgQGlmIChiYWRnZSgpKSB7XG4gICAgICAgICAgPHJ0ZS1iYWRnZVxuICAgICAgICAgICAgW2JhZGdlVHlwZV09XCJiYWRnZSgpIS5iYWRnZVR5cGUgfHwgJ2JyYW5kJ1wiXG4gICAgICAgICAgICBbYmFkZ2VTaXplXT1cImJhZGdlKCkhLnNpemUgfHwgJ20nXCJcbiAgICAgICAgICAgIFtiYWRnZUNvbnRlbnRdPVwiYmFkZ2UoKSEuY29udGVudCB8fCAnbnVtYmVyJ1wiXG4gICAgICAgICAgICBbY291bnRdPVwiYmFkZ2UoKSEuY291bnRcIlxuICAgICAgICAgICAgW2ljb25dPVwiYmFkZ2UoKSEuaWNvbiB8fCAnbm90aWZpY2F0aW9uJ1wiXG4gICAgICAgICAgICBbc2ltcGxlQmFkZ2VdPVwidHJ1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { CommonModule } from "@angular/common";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, output } from "@angular/core";
|
|
3
|
+
import { getNavItemLabelIconSize } from "@design-system-rte/core/components/side-nav/nav-item/nav-item.utils";
|
|
4
|
+
import { dividerAppearanceBySideNavAppearance } from "@design-system-rte/core/components/side-nav/side-nav.constants";
|
|
5
|
+
import { ENTER_KEY, ESCAPE_KEY, SPACE_KEY } from "@design-system-rte/core/constants/keyboard/keyboard.constants";
|
|
6
|
+
import { BadgeComponent } from "../../badge/badge.component";
|
|
7
|
+
import { DividerComponent } from "../../divider/divider.component";
|
|
8
|
+
import { IconComponent } from "../../icon/icon.component";
|
|
9
|
+
import { TooltipDirective } from "../../tooltip/tooltip.directive";
|
|
10
|
+
import { NavItemComponent } from "../nav-item/nav-item.component";
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
function getNavTabIndex(parentMenuOpen) {
|
|
14
|
+
return parentMenuOpen === false ? -1 : 0;
|
|
15
|
+
}
|
|
16
|
+
export class NavMenuComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.id = input();
|
|
19
|
+
this.icon = input();
|
|
20
|
+
this.showIcon = input(true);
|
|
21
|
+
this.label = input.required();
|
|
22
|
+
this.collapsed = input(false);
|
|
23
|
+
this.link = input();
|
|
24
|
+
this.items = input.required();
|
|
25
|
+
this.open = input(false);
|
|
26
|
+
this.showMenuIcon = input(true);
|
|
27
|
+
this.isNested = input(false);
|
|
28
|
+
this.parentMenuOpen = input();
|
|
29
|
+
this.appearance = input("brand");
|
|
30
|
+
this.badge = input();
|
|
31
|
+
this.showDivider = input(false);
|
|
32
|
+
this.itemClick = output();
|
|
33
|
+
this.openChange = output();
|
|
34
|
+
this.hasNestedItems = computed(() => !!this.items().length);
|
|
35
|
+
this.shouldShowMenu = computed(() => !this.collapsed() && this.hasNestedItems());
|
|
36
|
+
this.tabIndex = computed(() => getNavTabIndex(this.parentMenuOpen()));
|
|
37
|
+
this.dividerAppearance = computed(() => dividerAppearanceBySideNavAppearance[this.appearance()]);
|
|
38
|
+
this.iconSize = computed(() => {
|
|
39
|
+
return getNavItemLabelIconSize(this.isNested(), this.collapsed());
|
|
40
|
+
});
|
|
41
|
+
effect(() => {
|
|
42
|
+
if (this.parentMenuOpen() === false && this.open()) {
|
|
43
|
+
this.closeMenu();
|
|
44
|
+
}
|
|
45
|
+
}, { allowSignalWrites: true });
|
|
46
|
+
}
|
|
47
|
+
toggleMenu() {
|
|
48
|
+
this.openChange.emit({ id: this.id() || this.label(), open: !this.open() });
|
|
49
|
+
}
|
|
50
|
+
handleEscape() {
|
|
51
|
+
if (this.open()) {
|
|
52
|
+
this.closeMenu();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
handleKeyDown(event) {
|
|
56
|
+
if ([SPACE_KEY, ENTER_KEY].includes(event.key)) {
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
this.toggleMenu();
|
|
59
|
+
}
|
|
60
|
+
if (event.key === ESCAPE_KEY) {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
this.handleEscape();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
hasNestedItemsForItem(item) {
|
|
66
|
+
return !!item.items?.length;
|
|
67
|
+
}
|
|
68
|
+
handleMenuOpenChange(event) {
|
|
69
|
+
const targetMenu = this.items().find((item) => item.id === event.id);
|
|
70
|
+
if (targetMenu) {
|
|
71
|
+
targetMenu.open = event.open;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
handleMenuClick(itemId) {
|
|
75
|
+
const item = this.items().find((i) => i.id === itemId || i.label === itemId);
|
|
76
|
+
if (item?.onClick) {
|
|
77
|
+
item.onClick();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
closeMenu() {
|
|
81
|
+
this.openChange.emit({ id: this.id() || this.label(), open: false });
|
|
82
|
+
}
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NavMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: NavMenuComponent, isStandalone: true, selector: "rte-nav-menu", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, showMenuIcon: { classPropertyName: "showMenuIcon", publicName: "showMenuIcon", isSignal: true, isRequired: false, transformFunction: null }, isNested: { classPropertyName: "isNested", publicName: "isNested", isSignal: true, isRequired: false, transformFunction: null }, parentMenuOpen: { classPropertyName: "parentMenuOpen", publicName: "parentMenuOpen", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, showDivider: { classPropertyName: "showDivider", publicName: "showDivider", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", openChange: "openChange" }, ngImport: i0, template: "@if (collapsed() && label()) {\n <li\n class=\"nav-menu-container {{appearance()}}\"\n rteTooltip\n rteTooltipPosition=\"right\"\n rteTooltipAlignment=\"center\"\n [rteTooltipGap]=\"12\"\n [ngClass]=\"{ collapsed: collapsed(), open: open(), nested: isNested() }\"\n [rteTooltip]=\"label()\"\n [rteTooltipArrow]=\"false\"\n [rteTooltipShouldFocusTrigger]=\"false\">\n <ng-container [ngTemplateOutlet]=\"menuContentTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedMenuTemplate\"></ng-container>\n </li>\n} @else {\n <li\n class=\"nav-menu-container {{appearance()}}\"\n [ngClass]=\"{ collapsed: collapsed(), open: open(), nested: isNested() }\">\n <ng-container [ngTemplateOutlet]=\"menuContentTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedMenuTemplate\"></ng-container>\n </li>\n}\n\n<ng-template #menuContentTemplate>\n @if (link()) {\n <a\n class=\"nav-menu\"\n [href]=\"link()!\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"toggleMenu()\">\n <div class=\"menu-content-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"menu-content-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n @if (shouldShowMenu() && showMenuIcon()) {\n <rte-icon name=\"arrow-chevron-right\" class=\"menu-icon\" [ngClass]=\"{ 'menu-icon-open': open() }\" />\n }\n </div>\n </a>\n } @else {\n <span\n class=\"nav-menu\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"toggleMenu()\"\n (keydown)=\"handleKeyDown($event)\">\n <div class=\"menu-content-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"menu-content-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n @if (shouldShowMenu() && showMenuIcon()) {\n <rte-icon name=\"arrow-chevron-right\" class=\"menu-icon\" [ngClass]=\"{ 'menu-icon-open': open() }\" />\n }\n </div>\n </span>\n }\n</ng-template>\n\n<ng-template #nestedMenuTemplate>\n @if (shouldShowMenu()) {\n <ul class=\"nested-menu\" [ngClass]=\"{ 'nested-menu-open': open() }\">\n @if (open()) {\n @for (item of items(); track item.id || item.label) {\n @if (hasNestedItemsForItem(item)) {\n <rte-nav-menu\n [id]=\"item.id\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [showIcon]=\"item.showIcon ?? true\"\n [collapsed]=\"collapsed()\"\n [link]=\"item.link\"\n [items]=\"item.items || []\"\n [showMenuIcon]=\"showMenuIcon()\"\n [isNested]=\"true\"\n [open]=\"item.open\"\n [parentMenuOpen]=\"open()\"\n [appearance]=\"appearance()\"\n [showDivider]=\"item.showDivider!\"\n [badge]=\"item.badge\"\n (itemClick)=\"handleMenuClick($event)\"\n (openChange)=\"handleMenuOpenChange($event)\"\n />\n } @else {\n <li>\n <rte-nav-item\n [id]=\"item.id\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [showIcon]=\"item.showIcon ?? true\"\n [collapsed]=\"collapsed()\"\n [link]=\"item.link\"\n [isNested]=\"true\"\n [parentMenuOpen]=\"open()\"\n [appearance]=\"appearance()\"\n [showDivider]=\"item.showDivider!\"\n [badge]=\"item.badge\"\n (itemClick)=\"itemClick.emit($event)\" />\n </li>\n @if (item.showDivider) {\n <rte-divider [appearance]=\"dividerAppearance()\" />\n }\n }\n }\n }\n </ul>\n }\n</ng-template>\n\n@if (showDivider()) {\n <rte-divider [appearance]=\"dividerAppearance()\" />\n}\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";:host{display:contents}.nav-menu-container{width:100%;display:flex;flex-direction:column;justify-content:flex-start;border-radius:4px;transition:background-color .3s;box-sizing:border-box}.nav-menu-container.neutral .nav-menu{color:var(--content-secondary)}.nav-menu-container.neutral .nav-menu:hover{background:var(--background-neutral-navigation-hover);color:var(--content-primary)}.nav-menu-container.neutral .nav-menu.focused{outline:none}.nav-menu-container.neutral.nested .nav-menu{border-radius:0 4px 4px 0;border-left:1px solid var(--border-divider)}.nav-menu-container .nav-menu{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:16px;line-height:24px;letter-spacing:-.5px;display:flex;padding:8px 6px;align-items:center;gap:8px;flex:1 0 0;-webkit-user-select:none;user-select:none;justify-content:space-between;width:100%;box-sizing:border-box;cursor:pointer;border-left:2px solid transparent;color:var(--content-brand-navigation-default)}.nav-menu-container .nav-menu .menu-content-left{display:flex;align-items:center;gap:8px}.nav-menu-container .nav-menu .menu-content-right{display:flex;align-items:center;gap:4px}.nav-menu-container .nav-menu:hover{border-radius:4px;background:var(--background-brand-navigation-hover);color:var(--content-brand-navigation-hover)}.nav-menu-container .nav-menu:link,.nav-menu-container .nav-menu:link:hover{text-decoration:none;color:inherit}.nav-menu-container .nav-menu:focus-visible{outline:1px solid var(--border-brand-focused);outline-offset:0;border-radius:4px}.nav-menu-container.collapsed .nav-menu{padding:8px 12px;justify-content:center;gap:0;border-left:none}.nav-menu-container.nested .nav-menu{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-size:14px;letter-spacing:-.5px;font-weight:600;line-height:20px;border-radius:0 4px 4px 0;border-left:1px solid var(--border-brand-navigation-divider);padding:4px 8px}.nav-menu-container .menu-icon{flex-shrink:0;transition:transform .2s;margin-left:auto}.nav-menu-container .menu-icon-open{transform:rotate(90deg)}.nav-menu-container .nested-menu{list-style:none;margin:0;max-height:0;overflow:hidden;transition:max-height .3s,padding .3s;padding:0 0 0 16px;gap:0}.nav-menu-container .nested-menu.nested-menu-open{max-height:1000px;padding-top:4px;padding-bottom:4px}.nav-menu-container .icon{flex-shrink:0}\n"], dependencies: [{ kind: "component", type: NavMenuComponent, selector: "rte-nav-menu", inputs: ["id", "icon", "showIcon", "label", "collapsed", "link", "items", "open", "showMenuIcon", "isNested", "parentMenuOpen", "appearance", "badge", "showDivider"], outputs: ["itemClick", "openChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "rte-icon", inputs: ["name", "size", "color", "classes", "appearance"] }, { kind: "component", type: BadgeComponent, selector: "rte-badge", inputs: ["badgeType", "badgeSize", "badgeContent", "count", "icon", "simpleBadge"] }, { kind: "component", type: DividerComponent, selector: "rte-divider", inputs: ["orientation", "thickness", "appearance", "endPoint"] }, { kind: "component", type: NavItemComponent, selector: "rte-nav-item", inputs: ["id", "icon", "showIcon", "label", "collapsed", "link", "appearance", "active", "badge", "isNested", "parentMenuOpen", "role", "showDivider"], outputs: ["itemClick"] }, { kind: "directive", type: TooltipDirective, selector: "[rteTooltip]", inputs: ["rteTooltip", "rteTooltipPosition", "rteTooltipAlignment", "rteTooltipArrow", "rteTooltipShouldFocusTrigger", "rteTooltipGap"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NavMenuComponent, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: "rte-nav-menu", imports: [CommonModule, IconComponent, BadgeComponent, DividerComponent, NavItemComponent, TooltipDirective], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (collapsed() && label()) {\n <li\n class=\"nav-menu-container {{appearance()}}\"\n rteTooltip\n rteTooltipPosition=\"right\"\n rteTooltipAlignment=\"center\"\n [rteTooltipGap]=\"12\"\n [ngClass]=\"{ collapsed: collapsed(), open: open(), nested: isNested() }\"\n [rteTooltip]=\"label()\"\n [rteTooltipArrow]=\"false\"\n [rteTooltipShouldFocusTrigger]=\"false\">\n <ng-container [ngTemplateOutlet]=\"menuContentTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedMenuTemplate\"></ng-container>\n </li>\n} @else {\n <li\n class=\"nav-menu-container {{appearance()}}\"\n [ngClass]=\"{ collapsed: collapsed(), open: open(), nested: isNested() }\">\n <ng-container [ngTemplateOutlet]=\"menuContentTemplate\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedMenuTemplate\"></ng-container>\n </li>\n}\n\n<ng-template #menuContentTemplate>\n @if (link()) {\n <a\n class=\"nav-menu\"\n [href]=\"link()!\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"toggleMenu()\">\n <div class=\"menu-content-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"menu-content-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n @if (shouldShowMenu() && showMenuIcon()) {\n <rte-icon name=\"arrow-chevron-right\" class=\"menu-icon\" [ngClass]=\"{ 'menu-icon-open': open() }\" />\n }\n </div>\n </a>\n } @else {\n <span\n class=\"nav-menu\"\n [attr.tabindex]=\"tabIndex()\"\n [attr.aria-label]=\"label()\"\n (click)=\"toggleMenu()\"\n (keydown)=\"handleKeyDown($event)\">\n <div class=\"menu-content-left\">\n @if (showIcon() && icon()) {\n <rte-icon class=\"icon\" [name]=\"icon()!\" [size]=\"iconSize()\" />\n }\n @if (!collapsed()) {\n <span>{{ label() }}</span>\n }\n </div>\n <div class=\"menu-content-right\">\n @if (badge()) {\n <rte-badge\n [badgeType]=\"badge()!.badgeType || 'brand'\"\n [badgeSize]=\"badge()!.size || 'm'\"\n [badgeContent]=\"badge()!.content || 'number'\"\n [count]=\"badge()!.count\"\n [icon]=\"badge()!.icon || 'notification'\"\n [simpleBadge]=\"true\"\n />\n }\n @if (shouldShowMenu() && showMenuIcon()) {\n <rte-icon name=\"arrow-chevron-right\" class=\"menu-icon\" [ngClass]=\"{ 'menu-icon-open': open() }\" />\n }\n </div>\n </span>\n }\n</ng-template>\n\n<ng-template #nestedMenuTemplate>\n @if (shouldShowMenu()) {\n <ul class=\"nested-menu\" [ngClass]=\"{ 'nested-menu-open': open() }\">\n @if (open()) {\n @for (item of items(); track item.id || item.label) {\n @if (hasNestedItemsForItem(item)) {\n <rte-nav-menu\n [id]=\"item.id\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [showIcon]=\"item.showIcon ?? true\"\n [collapsed]=\"collapsed()\"\n [link]=\"item.link\"\n [items]=\"item.items || []\"\n [showMenuIcon]=\"showMenuIcon()\"\n [isNested]=\"true\"\n [open]=\"item.open\"\n [parentMenuOpen]=\"open()\"\n [appearance]=\"appearance()\"\n [showDivider]=\"item.showDivider!\"\n [badge]=\"item.badge\"\n (itemClick)=\"handleMenuClick($event)\"\n (openChange)=\"handleMenuOpenChange($event)\"\n />\n } @else {\n <li>\n <rte-nav-item\n [id]=\"item.id\"\n [label]=\"item.label\"\n [icon]=\"item.icon\"\n [showIcon]=\"item.showIcon ?? true\"\n [collapsed]=\"collapsed()\"\n [link]=\"item.link\"\n [isNested]=\"true\"\n [parentMenuOpen]=\"open()\"\n [appearance]=\"appearance()\"\n [showDivider]=\"item.showDivider!\"\n [badge]=\"item.badge\"\n (itemClick)=\"itemClick.emit($event)\" />\n </li>\n @if (item.showDivider) {\n <rte-divider [appearance]=\"dividerAppearance()\" />\n }\n }\n }\n }\n </ul>\n }\n</ng-template>\n\n@if (showDivider()) {\n <rte-divider [appearance]=\"dividerAppearance()\" />\n}\n\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:wght,FILL,GRAD@400,0,0&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap\";:host{display:contents}.nav-menu-container{width:100%;display:flex;flex-direction:column;justify-content:flex-start;border-radius:4px;transition:background-color .3s;box-sizing:border-box}.nav-menu-container.neutral .nav-menu{color:var(--content-secondary)}.nav-menu-container.neutral .nav-menu:hover{background:var(--background-neutral-navigation-hover);color:var(--content-primary)}.nav-menu-container.neutral .nav-menu.focused{outline:none}.nav-menu-container.neutral.nested .nav-menu{border-radius:0 4px 4px 0;border-left:1px solid var(--border-divider)}.nav-menu-container .nav-menu{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-weight:600;font-size:16px;line-height:24px;letter-spacing:-.5px;display:flex;padding:8px 6px;align-items:center;gap:8px;flex:1 0 0;-webkit-user-select:none;user-select:none;justify-content:space-between;width:100%;box-sizing:border-box;cursor:pointer;border-left:2px solid transparent;color:var(--content-brand-navigation-default)}.nav-menu-container .nav-menu .menu-content-left{display:flex;align-items:center;gap:8px}.nav-menu-container .nav-menu .menu-content-right{display:flex;align-items:center;gap:4px}.nav-menu-container .nav-menu:hover{border-radius:4px;background:var(--background-brand-navigation-hover);color:var(--content-brand-navigation-hover)}.nav-menu-container .nav-menu:link,.nav-menu-container .nav-menu:link:hover{text-decoration:none;color:inherit}.nav-menu-container .nav-menu:focus-visible{outline:1px solid var(--border-brand-focused);outline-offset:0;border-radius:4px}.nav-menu-container.collapsed .nav-menu{padding:8px 12px;justify-content:center;gap:0;border-left:none}.nav-menu-container.nested .nav-menu{font-feature-settings:\"liga\" off,\"clig\" off;font-style:normal;font-family:Nunito;font-size:14px;letter-spacing:-.5px;font-weight:600;line-height:20px;border-radius:0 4px 4px 0;border-left:1px solid var(--border-brand-navigation-divider);padding:4px 8px}.nav-menu-container .menu-icon{flex-shrink:0;transition:transform .2s;margin-left:auto}.nav-menu-container .menu-icon-open{transform:rotate(90deg)}.nav-menu-container .nested-menu{list-style:none;margin:0;max-height:0;overflow:hidden;transition:max-height .3s,padding .3s;padding:0 0 0 16px;gap:0}.nav-menu-container .nested-menu.nested-menu-open{max-height:1000px;padding-top:4px;padding-bottom:4px}.nav-menu-container .icon{flex-shrink:0}\n"] }]
|
|
89
|
+
}], ctorParameters: () => [] });
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXYvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtcnRlLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2lkZS1uYXYvbmF2LW1lbnUvbmF2LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBRXRILE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBRWpILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVsRSxTQUFTLGNBQWMsQ0FBQyxjQUF3QjtJQUM5QyxPQUFPLGNBQWMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQWVELE1BQU0sT0FBTyxnQkFBZ0I7SUFtQjNCO1FBbEJTLE9BQUUsR0FBRyxLQUFLLEVBQXNCLENBQUM7UUFDakMsU0FBSSxHQUFHLEtBQUssRUFBc0IsQ0FBQztRQUNuQyxhQUFRLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDakMsY0FBUyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNsQyxTQUFJLEdBQUcsS0FBSyxFQUFzQixDQUFDO1FBQ25DLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFrQixDQUFDO1FBQ3pDLFNBQUksR0FBRyxLQUFLLENBQXNCLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLGlCQUFZLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsbUJBQWMsR0FBRyxLQUFLLEVBQXVCLENBQUM7UUFDOUMsZUFBVSxHQUFHLEtBQUssQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFDL0MsVUFBSyxHQUFHLEtBQUssRUFBMEIsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVwQyxjQUFTLEdBQUcsTUFBTSxFQUFVLENBQUM7UUFDN0IsZUFBVSxHQUFHLE1BQU0sRUFBMEIsQ0FBQztRQWE5QyxtQkFBYyxHQUFHLFFBQVEsQ0FBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hFLG1CQUFjLEdBQUcsUUFBUSxDQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLGFBQVEsR0FBRyxRQUFRLENBQVMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFekUsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFNUYsYUFBUSxHQUFHLFFBQVEsQ0FBUyxHQUFHLEVBQUU7WUFDeEMsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFsQkQsTUFBTSxDQUNKLEdBQUcsRUFBRTtZQUNILElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFZRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFrQjtRQUN0QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBNkI7UUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNkLFVBQTJCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsTUFBYztRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLElBQUksSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7K0dBakZVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLDgzRENqQzdCLDgzSkErSUEsa29GRDlHYSxnQkFBZ0IscVFBTmpCLFlBQVksb1NBQUUsYUFBYSxpSEFBRSxjQUFjLDBJQUFFLGdCQUFnQix3SEFBRSxnQkFBZ0IseU9BQUUsZ0JBQWdCOzs0RkFNaEcsZ0JBQWdCO2tCQVI1QixTQUFTOytCQUNFLGNBQWMsV0FDZixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLGNBQ2hHLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBvdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQmFkZ2VQcm9wcyB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL2JhZGdlL2JhZGdlLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTmF2SXRlbVByb3BzIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbXBvbmVudHMvc2lkZS1uYXYvbmF2LWl0ZW0vbmF2LWl0ZW0uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBnZXROYXZJdGVtTGFiZWxJY29uU2l6ZSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3NpZGUtbmF2L25hdi1pdGVtL25hdi1pdGVtLnV0aWxzXCI7XG5pbXBvcnQgeyBOYXZNZW51UHJvcHMgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9zaWRlLW5hdi9uYXYtbWVudS9uYXYtbWVudS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IGRpdmlkZXJBcHBlYXJhbmNlQnlTaWRlTmF2QXBwZWFyYW5jZSB9IGZyb20gXCJAZGVzaWduLXN5c3RlbS1ydGUvY29yZS9jb21wb25lbnRzL3NpZGUtbmF2L3NpZGUtbmF2LmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgU2lkZU5hdkFwcGVhcmFuY2UgfSBmcm9tIFwiQGRlc2lnbi1zeXN0ZW0tcnRlL2NvcmUvY29tcG9uZW50cy9zaWRlLW5hdi9zaWRlLW5hdi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IEVOVEVSX0tFWSwgRVNDQVBFX0tFWSwgU1BBQ0VfS0VZIH0gZnJvbSBcIkBkZXNpZ24tc3lzdGVtLXJ0ZS9jb3JlL2NvbnN0YW50cy9rZXlib2FyZC9rZXlib2FyZC5jb25zdGFudHNcIjtcblxuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vYmFkZ2UvYmFkZ2UuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2RpdmlkZXIvZGl2aWRlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBOYXZJdGVtQ29tcG9uZW50IH0gZnJvbSBcIi4uL25hdi1pdGVtL25hdi1pdGVtLmNvbXBvbmVudFwiO1xuXG5mdW5jdGlvbiBnZXROYXZUYWJJbmRleChwYXJlbnRNZW51T3Blbj86IGJvb2xlYW4pOiBudW1iZXIge1xuICByZXR1cm4gcGFyZW50TWVudU9wZW4gPT09IGZhbHNlID8gLTEgOiAwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdk1lbnVPcGVuQ2hhbmdlRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICBvcGVuOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwicnRlLW5hdi1tZW51XCIsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEljb25Db21wb25lbnQsIEJhZGdlQ29tcG9uZW50LCBEaXZpZGVyQ29tcG9uZW50LCBOYXZJdGVtQ29tcG9uZW50LCBUb29sdGlwRGlyZWN0aXZlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6IFwiLi9uYXYtbWVudS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybDogXCIuL25hdi1tZW51LmNvbXBvbmVudC5zY3NzXCIsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOYXZNZW51Q29tcG9uZW50IHtcbiAgcmVhZG9ubHkgaWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGljb24gPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHNob3dJY29uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGxhYmVsID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjb2xsYXBzZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGxpbmsgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8TmF2SXRlbVByb3BzW10+KCk7XG4gIHJlYWRvbmx5IG9wZW4gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dNZW51SWNvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBpc05lc3RlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcGFyZW50TWVudU9wZW4gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBhcHBlYXJhbmNlID0gaW5wdXQ8U2lkZU5hdkFwcGVhcmFuY2U+KFwiYnJhbmRcIik7XG4gIHJlYWRvbmx5IGJhZGdlID0gaW5wdXQ8QmFkZ2VQcm9wcyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgc2hvd0RpdmlkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgaXRlbUNsaWNrID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3BlbkNoYW5nZSA9IG91dHB1dDxOYXZNZW51T3BlbkNoYW5nZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50TWVudU9wZW4oKSA9PT0gZmFsc2UgJiYgdGhpcy5vcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICByZWFkb25seSBoYXNOZXN0ZWRJdGVtcyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+ICEhdGhpcy5pdGVtcygpLmxlbmd0aCk7XG4gIHJlYWRvbmx5IHNob3VsZFNob3dNZW51ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gIXRoaXMuY29sbGFwc2VkKCkgJiYgdGhpcy5oYXNOZXN0ZWRJdGVtcygpKTtcbiAgcmVhZG9ubHkgdGFiSW5kZXggPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IGdldE5hdlRhYkluZGV4KHRoaXMucGFyZW50TWVudU9wZW4oKSkpO1xuXG4gIHJlYWRvbmx5IGRpdmlkZXJBcHBlYXJhbmNlID0gY29tcHV0ZWQoKCkgPT4gZGl2aWRlckFwcGVhcmFuY2VCeVNpZGVOYXZBcHBlYXJhbmNlW3RoaXMuYXBwZWFyYW5jZSgpXSk7XG5cbiAgcmVhZG9ubHkgaWNvblNpemUgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICByZXR1cm4gZ2V0TmF2SXRlbUxhYmVsSWNvblNpemUodGhpcy5pc05lc3RlZCgpLCB0aGlzLmNvbGxhcHNlZCgpKTtcbiAgfSk7XG5cbiAgdG9nZ2xlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh7IGlkOiB0aGlzLmlkKCkgfHwgdGhpcy5sYWJlbCgpLCBvcGVuOiAhdGhpcy5vcGVuKCkgfSk7XG4gIH1cblxuICBoYW5kbGVFc2NhcGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3BlbigpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoW1NQQUNFX0tFWSwgRU5URVJfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVNZW51KCk7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmhhbmRsZUVzY2FwZSgpO1xuICAgIH1cbiAgfVxuXG4gIGhhc05lc3RlZEl0ZW1zRm9ySXRlbShpdGVtOiBOYXZJdGVtUHJvcHMpOiBpdGVtIGlzIE5hdk1lbnVQcm9wcyB7XG4gICAgcmV0dXJuICEhaXRlbS5pdGVtcz8ubGVuZ3RoO1xuICB9XG5cbiAgaGFuZGxlTWVudU9wZW5DaGFuZ2UoZXZlbnQ6IE5hdk1lbnVPcGVuQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXRNZW51ID0gdGhpcy5pdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGV2ZW50LmlkKTtcbiAgICBpZiAodGFyZ2V0TWVudSkge1xuICAgICAgKHRhcmdldE1lbnUgYXMgTmF2TWVudVByb3BzKS5vcGVuID0gZXZlbnQub3BlbjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNZW51Q2xpY2soaXRlbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcygpLmZpbmQoKGkpID0+IGkuaWQgPT09IGl0ZW1JZCB8fCBpLmxhYmVsID09PSBpdGVtSWQpO1xuICAgIGlmIChpdGVtPy5vbkNsaWNrKSB7XG4gICAgICBpdGVtLm9uQ2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh7IGlkOiB0aGlzLmlkKCkgfHwgdGhpcy5sYWJlbCgpLCBvcGVuOiBmYWxzZSB9KTtcbiAgfVxufVxuIiwiQGlmIChjb2xsYXBzZWQoKSAmJiBsYWJlbCgpKSB7XG4gIDxsaVxuICAgIGNsYXNzPVwibmF2LW1lbnUtY29udGFpbmVyIHt7YXBwZWFyYW5jZSgpfX1cIlxuICAgIHJ0ZVRvb2x0aXBcbiAgICBydGVUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgcnRlVG9vbHRpcEFsaWdubWVudD1cImNlbnRlclwiXG4gICAgW3J0ZVRvb2x0aXBHYXBdPVwiMTJcIlxuICAgIFtuZ0NsYXNzXT1cInsgY29sbGFwc2VkOiBjb2xsYXBzZWQoKSwgb3Blbjogb3BlbigpLCBuZXN0ZWQ6IGlzTmVzdGVkKCkgfVwiXG4gICAgW3J0ZVRvb2x0aXBdPVwibGFiZWwoKVwiXG4gICAgW3J0ZVRvb2x0aXBBcnJvd109XCJmYWxzZVwiXG4gICAgW3J0ZVRvb2x0aXBTaG91bGRGb2N1c1RyaWdnZXJdPVwiZmFsc2VcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1lbnVDb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5lc3RlZE1lbnVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2xpPlxufSBAZWxzZSB7XG4gIDxsaVxuICAgIGNsYXNzPVwibmF2LW1lbnUtY29udGFpbmVyIHt7YXBwZWFyYW5jZSgpfX1cIlxuICAgIFtuZ0NsYXNzXT1cInsgY29sbGFwc2VkOiBjb2xsYXBzZWQoKSwgb3Blbjogb3BlbigpLCBuZXN0ZWQ6IGlzTmVzdGVkKCkgfVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVudUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTWVudVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbGk+XG59XG5cbjxuZy10ZW1wbGF0ZSAjbWVudUNvbnRlbnRUZW1wbGF0ZT5cbiAgQGlmIChsaW5rKCkpIHtcbiAgICA8YVxuICAgICAgY2xhc3M9XCJuYXYtbWVudVwiXG4gICAgICBbaHJlZl09XCJsaW5rKCkhXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYkluZGV4KClcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNvbnRlbnQtbGVmdFwiPlxuICAgICAgICBAaWYgKHNob3dJY29uKCkgJiYgaWNvbigpKSB7XG4gICAgICAgICAgPHJ0ZS1pY29uIGNsYXNzPVwiaWNvblwiIFtuYW1lXT1cImljb24oKSFcIiBbc2l6ZV09XCJpY29uU2l6ZSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFjb2xsYXBzZWQoKSkge1xuICAgICAgICAgIDxzcGFuPnt7IGxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY29udGVudC1yaWdodFwiPlxuICAgICAgICBAaWYgKGJhZGdlKCkpIHtcbiAgICAgICAgICA8cnRlLWJhZGdlXG4gICAgICAgICAgICBbYmFkZ2VUeXBlXT1cImJhZGdlKCkhLmJhZGdlVHlwZSB8fCAnYnJhbmQnXCJcbiAgICAgICAgICAgIFtiYWRnZVNpemVdPVwiYmFkZ2UoKSEuc2l6ZSB8fCAnbSdcIlxuICAgICAgICAgICAgW2JhZGdlQ29udGVudF09XCJiYWRnZSgpIS5jb250ZW50IHx8ICdudW1iZXInXCJcbiAgICAgICAgICAgIFtjb3VudF09XCJiYWRnZSgpIS5jb3VudFwiXG4gICAgICAgICAgICBbaWNvbl09XCJiYWRnZSgpIS5pY29uIHx8ICdub3RpZmljYXRpb24nXCJcbiAgICAgICAgICAgIFtzaW1wbGVCYWRnZV09XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2hvdWxkU2hvd01lbnUoKSAmJiBzaG93TWVudUljb24oKSkge1xuICAgICAgICAgIDxydGUtaWNvbiBuYW1lPVwiYXJyb3ctY2hldnJvbi1yaWdodFwiIGNsYXNzPVwibWVudS1pY29uXCIgW25nQ2xhc3NdPVwieyAnbWVudS1pY29uLW9wZW4nOiBvcGVuKCkgfVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgfSBAZWxzZSB7XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwibmF2LW1lbnVcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXgoKVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsKClcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlEb3duKCRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWNvbnRlbnQtbGVmdFwiPlxuICAgICAgICBAaWYgKHNob3dJY29uKCkgJiYgaWNvbigpKSB7XG4gICAgICAgICAgPHJ0ZS1pY29uIGNsYXNzPVwiaWNvblwiIFtuYW1lXT1cImljb24oKSFcIiBbc2l6ZV09XCJpY29uU2l6ZSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFjb2xsYXBzZWQoKSkge1xuICAgICAgICAgIDxzcGFuPnt7IGxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY29udGVudC1yaWdodFwiPlxuICAgICAgICBAaWYgKGJhZGdlKCkpIHtcbiAgICAgICAgICA8cnRlLWJhZGdlXG4gICAgICAgICAgICBbYmFkZ2VUeXBlXT1cImJhZGdlKCkhLmJhZGdlVHlwZSB8fCAnYnJhbmQnXCJcbiAgICAgICAgICAgIFtiYWRnZVNpemVdPVwiYmFkZ2UoKSEuc2l6ZSB8fCAnbSdcIlxuICAgICAgICAgICAgW2JhZGdlQ29udGVudF09XCJiYWRnZSgpIS5jb250ZW50IHx8ICdudW1iZXInXCJcbiAgICAgICAgICAgIFtjb3VudF09XCJiYWRnZSgpIS5jb3VudFwiXG4gICAgICAgICAgICBbaWNvbl09XCJiYWRnZSgpIS5pY29uIHx8ICdub3RpZmljYXRpb24nXCJcbiAgICAgICAgICAgIFtzaW1wbGVCYWRnZV09XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2hvdWxkU2hvd01lbnUoKSAmJiBzaG93TWVudUljb24oKSkge1xuICAgICAgICAgIDxydGUtaWNvbiBuYW1lPVwiYXJyb3ctY2hldnJvbi1yaWdodFwiIGNsYXNzPVwibWVudS1pY29uXCIgW25nQ2xhc3NdPVwieyAnbWVudS1pY29uLW9wZW4nOiBvcGVuKCkgfVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNuZXN0ZWRNZW51VGVtcGxhdGU+XG4gIEBpZiAoc2hvdWxkU2hvd01lbnUoKSkge1xuICAgIDx1bCBjbGFzcz1cIm5lc3RlZC1tZW51XCIgW25nQ2xhc3NdPVwieyAnbmVzdGVkLW1lbnUtb3Blbic6IG9wZW4oKSB9XCI+XG4gICAgICBAaWYgKG9wZW4oKSkge1xuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0uaWQgfHwgaXRlbS5sYWJlbCkge1xuICAgICAgICAgIEBpZiAoaGFzTmVzdGVkSXRlbXNGb3JJdGVtKGl0ZW0pKSB7XG4gICAgICAgICAgICA8cnRlLW5hdi1tZW51XG4gICAgICAgICAgICAgIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICBbc2hvd0ljb25dPVwiaXRlbS5zaG93SWNvbiA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgW2NvbGxhcHNlZF09XCJjb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAgIFtsaW5rXT1cIml0ZW0ubGlua1wiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtLml0ZW1zIHx8IFtdXCJcbiAgICAgICAgICAgICAgW3Nob3dNZW51SWNvbl09XCJzaG93TWVudUljb24oKVwiXG4gICAgICAgICAgICAgIFtpc05lc3RlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW29wZW5dPVwiaXRlbS5vcGVuXCJcbiAgICAgICAgICAgICAgW3BhcmVudE1lbnVPcGVuXT1cIm9wZW4oKVwiXG4gICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2UoKVwiXG4gICAgICAgICAgICAgIFtzaG93RGl2aWRlcl09XCJpdGVtLnNob3dEaXZpZGVyIVwiXG4gICAgICAgICAgICAgIFtiYWRnZV09XCJpdGVtLmJhZGdlXCJcbiAgICAgICAgICAgICAgKGl0ZW1DbGljayk9XCJoYW5kbGVNZW51Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvcGVuQ2hhbmdlKT1cImhhbmRsZU1lbnVPcGVuQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPHJ0ZS1uYXYtaXRlbVxuICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwiaXRlbS5zaG93SWNvbiA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICBbY29sbGFwc2VkXT1cImNvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgICAgICBbbGlua109XCJpdGVtLmxpbmtcIlxuICAgICAgICAgICAgICAgIFtpc05lc3RlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcGFyZW50TWVudU9wZW5dPVwib3BlbigpXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlKClcIlxuICAgICAgICAgICAgICAgIFtzaG93RGl2aWRlcl09XCJpdGVtLnNob3dEaXZpZGVyIVwiXG4gICAgICAgICAgICAgICAgW2JhZGdlXT1cIml0ZW0uYmFkZ2VcIlxuICAgICAgICAgICAgICAgIChpdGVtQ2xpY2spPVwiaXRlbUNsaWNrLmVtaXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgQGlmIChpdGVtLnNob3dEaXZpZGVyKSB7XG4gICAgICAgICAgICAgIDxydGUtZGl2aWRlciBbYXBwZWFyYW5jZV09XCJkaXZpZGVyQXBwZWFyYW5jZSgpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L3VsPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG5AaWYgKHNob3dEaXZpZGVyKCkpIHtcbiAgPHJ0ZS1kaXZpZGVyIFthcHBlYXJhbmNlXT1cImRpdmlkZXJBcHBlYXJhbmNlKClcIiAvPlxufVxuXG4iXX0=
|