uni-component-tw 1.0.0 → 1.1.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.
@@ -3,7 +3,8 @@ import { ChangeDetectionStrategy, Component, computed, input, signal, } from '@a
3
3
  import { DxButtonModule } from 'devextreme-angular/ui/button';
4
4
  import { FaIconComponent } from '@fortawesome/angular-fontawesome';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "devextreme-angular/ui/button";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "devextreme-angular/ui/button";
7
8
  export class UniArticleComponent {
8
9
  constructor() {
9
10
  /* Inputs */
@@ -32,13 +33,12 @@ export class UniArticleComponent {
32
33
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniArticleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33
34
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniArticleComponent, isStandalone: true, selector: "uni-article", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, setIsOpen: { classPropertyName: "setIsOpen", publicName: "setIsOpen", isSignal: true, isRequired: false, transformFunction: null }, headerCloseButton: { classPropertyName: "headerCloseButton", publicName: "headerCloseButton", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: `
34
35
  <article
35
- class="uni_article flex flex-col p-4 border-2 rounded"
36
- [style.height]="isOpen() ? '100%' : 'auto'"
36
+ class="uni_article flex h-full flex-col rounded border-2 p-4"
37
37
  [style.backgroundColor]="color() + '26'"
38
38
  [style.borderColor]="color() + '33'">
39
39
  <!-- Title -->
40
40
  @if (isHeader()) {
41
- <div class="uni_article_header flex items-center gap-4 mb-4">
41
+ <div class="uni_article_header flex items-center gap-4" [ngClass]="{ 'mb-4': isOpen() }">
42
42
  <!-- Icona nella testata, se presente -->
43
43
  @if (icon(); as icon) {
44
44
  <fa-icon class="uni-article-header-icon" [icon]="icon"></fa-icon>
@@ -46,7 +46,7 @@ export class UniArticleComponent {
46
46
 
47
47
  <!-- Titolo nella testata, se presente -->
48
48
  @if (title(); as title) {
49
- <h5 class="uni_article_header_title uppercase truncate">{{ title }}</h5>
49
+ <h5 class="uni_article_header_title truncate uppercase">{{ title }}</h5>
50
50
  }
51
51
 
52
52
  <!-- Bottone per aprire/chiudere l'articolo, se presente -->
@@ -65,19 +65,18 @@ export class UniArticleComponent {
65
65
  <ng-content></ng-content>
66
66
  }
67
67
  </article>
68
- `, isInline: true, styles: [":host{height:100%;display:block;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i1.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
68
+ `, isInline: true, styles: [":host{display:block;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i2.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
69
  }
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniArticleComponent, decorators: [{
71
71
  type: Component,
72
72
  args: [{ selector: 'uni-article', standalone: true, imports: [CommonModule, DxButtonModule, FaIconComponent], template: `
73
73
  <article
74
- class="uni_article flex flex-col p-4 border-2 rounded"
75
- [style.height]="isOpen() ? '100%' : 'auto'"
74
+ class="uni_article flex h-full flex-col rounded border-2 p-4"
76
75
  [style.backgroundColor]="color() + '26'"
77
76
  [style.borderColor]="color() + '33'">
78
77
  <!-- Title -->
79
78
  @if (isHeader()) {
80
- <div class="uni_article_header flex items-center gap-4 mb-4">
79
+ <div class="uni_article_header flex items-center gap-4" [ngClass]="{ 'mb-4': isOpen() }">
81
80
  <!-- Icona nella testata, se presente -->
82
81
  @if (icon(); as icon) {
83
82
  <fa-icon class="uni-article-header-icon" [icon]="icon"></fa-icon>
@@ -85,7 +84,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
85
84
 
86
85
  <!-- Titolo nella testata, se presente -->
87
86
  @if (title(); as title) {
88
- <h5 class="uni_article_header_title uppercase truncate">{{ title }}</h5>
87
+ <h5 class="uni_article_header_title truncate uppercase">{{ title }}</h5>
89
88
  }
90
89
 
91
90
  <!-- Bottone per aprire/chiudere l'articolo, se presente -->
@@ -104,6 +103,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
104
103
  <ng-content></ng-content>
105
104
  }
106
105
  </article>
107
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{height:100%;display:block;overflow:hidden}\n"] }]
106
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;overflow:hidden}\n"] }]
108
107
  }] });
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWFydGljbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pLWNvbXBvbmVudC10dy91bmktYXJ0aWNsZS9zcmMvdW5pLWFydGljbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFzRG5FLE1BQU0sT0FBTyxtQkFBbUI7SUFuRGhDO1FBb0RFLFlBQVk7UUFDSCxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDLENBQUMsK0JBQStCO1FBQ2pFLFVBQUssR0FBRyxLQUFLLEVBQVUsQ0FBQyxDQUFDLGlDQUFpQztRQUMxRCxTQUFJLEdBQUcsS0FBSyxFQUFrQixDQUFDLENBQUMscUNBQXFDO1FBQ3JFLGNBQVMsR0FBRyxLQUFLLEVBQXVCLENBQUMsQ0FBQyw2QkFBNkI7UUFDdkUsc0JBQWlCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsNkNBQTZDO1FBRWpHLGVBQWU7UUFDZixXQUFNLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQy9CLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0tBZ0JwRjtJQWRDLHdFQUF3RTtJQUN4RSxXQUFXLENBQUMsT0FBc0I7UUFDaEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM5QixrRUFBa0U7UUFDbEUsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3RELFlBQVk7UUFDcEIsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBekJVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDR1QkEvQ3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCwySEFwQ1MsWUFBWSw4QkFBRSxjQUFjLHMwQkFBRSxlQUFlOzsyRkFnRDVDLG1CQUFtQjtrQkFuRC9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLFlBQzlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DVCxtQkFVZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGlucHV0LFxyXG4gIHNpZ25hbCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhCdXR0b25Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VuaS1hcnRpY2xlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIER4QnV0dG9uTW9kdWxlLCBGYUljb25Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YXJ0aWNsZVxyXG4gICAgICBjbGFzcz1cInVuaV9hcnRpY2xlIGZsZXggZmxleC1jb2wgcC00IGJvcmRlci0yIHJvdW5kZWRcIlxyXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cImlzT3BlbigpID8gJzEwMCUnIDogJ2F1dG8nXCJcclxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjb2xvcigpICsgJzI2J1wiXHJcbiAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCJjb2xvcigpICsgJzMzJ1wiPlxyXG4gICAgICA8IS0tIFRpdGxlIC0tPlxyXG4gICAgICBAaWYgKGlzSGVhZGVyKCkpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidW5pX2FydGljbGVfaGVhZGVyIGZsZXggaXRlbXMtY2VudGVyIGdhcC00IG1iLTRcIj5cclxuICAgICAgICAgIDwhLS0gSWNvbmEgbmVsbGEgdGVzdGF0YSwgc2UgcHJlc2VudGUgLS0+XHJcbiAgICAgICAgICBAaWYgKGljb24oKTsgYXMgaWNvbikge1xyXG4gICAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cInVuaS1hcnRpY2xlLWhlYWRlci1pY29uXCIgW2ljb25dPVwiaWNvblwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICA8IS0tIFRpdG9sbyBuZWxsYSB0ZXN0YXRhLCBzZSBwcmVzZW50ZSAtLT5cclxuICAgICAgICAgIEBpZiAodGl0bGUoKTsgYXMgdGl0bGUpIHtcclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwidW5pX2FydGljbGVfaGVhZGVyX3RpdGxlIHVwcGVyY2FzZSB0cnVuY2F0ZVwiPnt7IHRpdGxlIH19PC9oNT5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICA8IS0tIEJvdHRvbmUgcGVyIGFwcmlyZS9jaGl1ZGVyZSBsJ2FydGljb2xvLCBzZSBwcmVzZW50ZSAtLT5cclxuICAgICAgICAgIEBpZiAoaGVhZGVyQ2xvc2VCdXR0b24oKSkge1xyXG4gICAgICAgICAgICA8ZHgtYnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ1bmlfYXJ0aWNsZV9oZWFkZXJfYnV0dG9uIG1sLWF1dG9cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cImlzT3BlbigpID8gJ2Nsb3NlJyA6ICdleHBhbmRmb3JtJ1wiXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlSXNPcGVuKClcIj5cclxuICAgICAgICAgICAgPC9keC1idXR0b24+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ29udGVudXRvIGRlbGwnYXJ0aWNvbG8sIHZpc2liaWxlIHNvbG8gc2UgYXBlcnRvIC0tPlxyXG4gICAgICBAaWYgKGlzT3BlbigpKSB7XHJcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICB9XHJcbiAgICA8L2FydGljbGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgIGBcclxuICAgICAgOmhvc3Qge1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB9XHJcbiAgICBgLFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmlBcnRpY2xlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICAvKiBJbnB1dHMgKi9cclxuICByZWFkb25seSBjb2xvciA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTsgLy8gQ29sb3JlIGRpIGJhc2UgZGVsbCdhcnRpY29sb1xyXG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPigpOyAvLyBUaXRvbG8gb3B6aW9uYWxlIGRlbGwnYXJ0aWNvbG9cclxuICByZWFkb25seSBpY29uID0gaW5wdXQ8SWNvbkRlZmluaXRpb24+KCk7IC8vIEljb25hIG9wemlvbmFsZSBwZXIgbCdpbnRlc3RhemlvbmVcclxuICByZWFkb25seSBzZXRJc09wZW4gPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpOyAvLyBTdGF0byBpbml6aWFsZSBkaSBhcGVydHVyYVxyXG4gIHJlYWRvbmx5IGhlYWRlckNsb3NlQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpOyAvLyBTZSBtb3N0cmFyZSBpbCBidXR0b24gcGVyIGNoaXVkZXJlIGFydGljbGVcclxuXHJcbiAgLyogVmFyaWFibGVzICovXHJcbiAgaXNPcGVuID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xyXG4gIGlzSGVhZGVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pY29uKCkgfHwgdGhpcy50aXRsZSgpIHx8IHRoaXMuaGVhZGVyQ2xvc2VCdXR0b24oKSk7XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpZmVjeWNsZSBIb29rIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgc2V0SXNPcGVuIH0gPSBjaGFuZ2VzO1xyXG4gICAgLy8gVmVyaWZpY2Egc2UgJ3NldElzT3Blbicgw6ggY2FtYmlhdG8gZSBub24gw6ggaWwgcHJpbW8gY2FtYmlhbWVudG9cclxuICAgIGlmIChzZXRJc09wZW4gJiYgIXNldElzT3Blbi5maXJzdENoYW5nZSAmJiBzZXRJc09wZW4uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc09wZW4uc2V0KHNldElzT3Blbi5jdXJyZW50VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWV0b2RpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByb3RlY3RlZCB0b2dnbGVJc09wZW4oKTogdm9pZCB7XHJcbiAgICAvLyBJbnZlcnRlIGxvIHN0YXRvIGRpIGFwZXJ0dXJhL2NoaXVzdXJhXHJcbiAgICB0aGlzLmlzT3Blbi51cGRhdGUoKHZhbCkgPT4gIXZhbCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWFydGljbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pLWNvbXBvbmVudC10dy91bmktYXJ0aWNsZS9zcmMvdW5pLWFydGljbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBb0RuRSxNQUFNLE9BQU8sbUJBQW1CO0lBakRoQztRQWtERSxZQUFZO1FBQ0gsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQyxDQUFDLCtCQUErQjtRQUNqRSxVQUFLLEdBQUcsS0FBSyxFQUFVLENBQUMsQ0FBQyxpQ0FBaUM7UUFDMUQsU0FBSSxHQUFHLEtBQUssRUFBa0IsQ0FBQyxDQUFDLHFDQUFxQztRQUNyRSxjQUFTLEdBQUcsS0FBSyxFQUF1QixDQUFDLENBQUMsNkJBQTZCO1FBQ3ZFLHNCQUFpQixHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLDZDQUE2QztRQUVqRyxlQUFlO1FBQ2YsV0FBTSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUMvQixhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztLQWdCcEY7SUFkQyx3RUFBd0U7SUFDeEUsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDOUIsa0VBQWtFO1FBQ2xFLElBQUksU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGdFQUFnRTtJQUN0RCxZQUFZO1FBQ3BCLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDOzhHQXpCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0dUJBN0NwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDVCwrR0FuQ1MsWUFBWSw0SEFBRSxjQUFjLHMwQkFBRSxlQUFlOzsyRkE4QzVDLG1CQUFtQjtrQkFqRC9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDLFlBQzlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NULG1CQVNnQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgaW5wdXQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeEJ1dHRvbk1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9idXR0b24nO1xyXG5pbXBvcnQgeyBGYUljb25Db21wb25lbnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7IEljb25EZWZpbml0aW9uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndW5pLWFydGljbGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHhCdXR0b25Nb2R1bGUsIEZhSWNvbkNvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhcnRpY2xlXHJcbiAgICAgIGNsYXNzPVwidW5pX2FydGljbGUgZmxleCBoLWZ1bGwgZmxleC1jb2wgcm91bmRlZCBib3JkZXItMiBwLTRcIlxyXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNvbG9yKCkgKyAnMjYnXCJcclxuICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cImNvbG9yKCkgKyAnMzMnXCI+XHJcbiAgICAgIDwhLS0gVGl0bGUgLS0+XHJcbiAgICAgIEBpZiAoaXNIZWFkZXIoKSkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1bmlfYXJ0aWNsZV9oZWFkZXIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIiBbbmdDbGFzc109XCJ7ICdtYi00JzogaXNPcGVuKCkgfVwiPlxyXG4gICAgICAgICAgPCEtLSBJY29uYSBuZWxsYSB0ZXN0YXRhLCBzZSBwcmVzZW50ZSAtLT5cclxuICAgICAgICAgIEBpZiAoaWNvbigpOyBhcyBpY29uKSB7XHJcbiAgICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwidW5pLWFydGljbGUtaGVhZGVyLWljb25cIiBbaWNvbl09XCJpY29uXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIDwhLS0gVGl0b2xvIG5lbGxhIHRlc3RhdGEsIHNlIHByZXNlbnRlIC0tPlxyXG4gICAgICAgICAgQGlmICh0aXRsZSgpOyBhcyB0aXRsZSkge1xyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJ1bmlfYXJ0aWNsZV9oZWFkZXJfdGl0bGUgdHJ1bmNhdGUgdXBwZXJjYXNlXCI+e3sgdGl0bGUgfX08L2g1PlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIDwhLS0gQm90dG9uZSBwZXIgYXByaXJlL2NoaXVkZXJlIGwnYXJ0aWNvbG8sIHNlIHByZXNlbnRlIC0tPlxyXG4gICAgICAgICAgQGlmIChoZWFkZXJDbG9zZUJ1dHRvbigpKSB7XHJcbiAgICAgICAgICAgIDxkeC1idXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cInVuaV9hcnRpY2xlX2hlYWRlcl9idXR0b24gbWwtYXV0b1wiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiaXNPcGVuKCkgPyAnY2xvc2UnIDogJ2V4cGFuZGZvcm0nXCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVJc09wZW4oKVwiPlxyXG4gICAgICAgICAgICA8L2R4LWJ1dHRvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSBDb250ZW51dG8gZGVsbCdhcnRpY29sbywgdmlzaWJpbGUgc29sbyBzZSBhcGVydG8gLS0+XHJcbiAgICAgIEBpZiAoaXNPcGVuKCkpIHtcclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIH1cclxuICAgIDwvYXJ0aWNsZT5cclxuICBgLFxyXG4gIHN0eWxlczogW1xyXG4gICAgYFxyXG4gICAgICA6aG9zdCB7XHJcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgfVxyXG4gICAgYCxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5pQXJ0aWNsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgLyogSW5wdXRzICovXHJcbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7IC8vIENvbG9yZSBkaSBiYXNlIGRlbGwnYXJ0aWNvbG9cclxuICByZWFkb25seSB0aXRsZSA9IGlucHV0PHN0cmluZz4oKTsgLy8gVGl0b2xvIG9wemlvbmFsZSBkZWxsJ2FydGljb2xvXHJcbiAgcmVhZG9ubHkgaWNvbiA9IGlucHV0PEljb25EZWZpbml0aW9uPigpOyAvLyBJY29uYSBvcHppb25hbGUgcGVyIGwnaW50ZXN0YXppb25lXHJcbiAgcmVhZG9ubHkgc2V0SXNPcGVuID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTsgLy8gU3RhdG8gaW5pemlhbGUgZGkgYXBlcnR1cmFcclxuICByZWFkb25seSBoZWFkZXJDbG9zZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gU2UgbW9zdHJhcmUgaWwgYnV0dG9uIHBlciBjaGl1ZGVyZSBhcnRpY2xlXHJcblxyXG4gIC8qIFZhcmlhYmxlcyAqL1xyXG4gIGlzT3BlbiA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuICBpc0hlYWRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaWNvbigpIHx8IHRoaXMudGl0bGUoKSB8fCB0aGlzLmhlYWRlckNsb3NlQnV0dG9uKCkpO1xyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMaWZlY3ljbGUgSG9vayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCB7IHNldElzT3BlbiB9ID0gY2hhbmdlcztcclxuICAgIC8vIFZlcmlmaWNhIHNlICdzZXRJc09wZW4nIMOoIGNhbWJpYXRvIGUgbm9uIMOoIGlsIHByaW1vIGNhbWJpYW1lbnRvXHJcbiAgICBpZiAoc2V0SXNPcGVuICYmICFzZXRJc09wZW4uZmlyc3RDaGFuZ2UgJiYgc2V0SXNPcGVuLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNPcGVuLnNldChzZXRJc09wZW4uY3VycmVudFZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1ldG9kaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcm90ZWN0ZWQgdG9nZ2xlSXNPcGVuKCk6IHZvaWQge1xyXG4gICAgLy8gSW52ZXJ0ZSBsbyBzdGF0byBkaSBhcGVydHVyYS9jaGl1c3VyYVxyXG4gICAgdGhpcy5pc09wZW4udXBkYXRlKCh2YWwpID0+ICF2YWwpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -23,7 +23,7 @@ export class UniSideMenuComponent {
23
23
  /* Input */
24
24
  this.pathBrandLogo = input.required();
25
25
  this.menuItems = input([]);
26
- this.menuButtons = input([]);
26
+ this.menuInteractions = input([]);
27
27
  this.user = input.required();
28
28
  /* Output */
29
29
  this.evtToggleMenu = output();
@@ -60,13 +60,15 @@ export class UniSideMenuComponent {
60
60
  });
61
61
  }
62
62
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniSideMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniSideMenuComponent, isStandalone: true, selector: "uni-side-menu", inputs: { pathBrandLogo: { classPropertyName: "pathBrandLogo", publicName: "pathBrandLogo", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, menuButtons: { classPropertyName: "menuButtons", publicName: "menuButtons", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { evtToggleMenu: "evtToggleMenu" }, ngImport: i0, template: `
64
- <aside id="side-menu">
63
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniSideMenuComponent, isStandalone: true, selector: "uni-side-menu", inputs: { pathBrandLogo: { classPropertyName: "pathBrandLogo", publicName: "pathBrandLogo", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: false, transformFunction: null }, menuInteractions: { classPropertyName: "menuInteractions", publicName: "menuInteractions", isSignal: true, isRequired: false, transformFunction: null }, user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { evtToggleMenu: "evtToggleMenu" }, ngImport: i0, template: `
64
+ <aside
65
+ class="flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl">
65
66
  <!-- user -->
66
- <div id="side-menu-user">
67
- <div class="side-menu-user-info">
67
+ <div class="flex w-full items-center gap-4">
68
+ <div class="flex flex-1 gap-2">
68
69
  @if (user(); as user) {
69
- <fa-icon [icon]="ICON.USER"></fa-icon> {{ user.username }}
70
+ <fa-icon [icon]="ICON.USER"></fa-icon>
71
+ <span class="flex-1 truncate">{{ user.username }}</span>
70
72
  }
71
73
  </div>
72
74
  <dx-button [icon]="'close'" (onClick)="evtToggleMenu.emit(false)"></dx-button>
@@ -74,18 +76,22 @@ export class UniSideMenuComponent {
74
76
 
75
77
  <!-- menu -->
76
78
  @if (menuItems().length) {
77
- <nav id="side-menu-menu" role="full-horizontal">
78
- <ul>
79
+ <nav class="mt-8">
80
+ <ul class="flex flex-col gap-2">
79
81
  @for (item of menuItems(); track item.id) {
80
82
  @if (item.visible) {
81
83
  <li>
82
84
  <a
85
+ class="flex gap-2 rounded p-2 !text-white transition duration-100 ease-in"
86
+ [ngClass]="{
87
+ 'hover:bg-zinc-600/60': !item.disabled,
88
+ 'cursor-auto !opacity-25': item.disabled,
89
+ }"
83
90
  [routerLink]="item.disabled ? null : item.path"
84
- routerLinkActive="item-active"
85
- [ngClass]="{ 'item-disabled': item.disabled }"
91
+ routerLinkActive="bg-zinc-600/60"
86
92
  (click)="evtToggleMenu.emit(false)">
87
- <fa-icon [icon]="item.icon"></fa-icon>
88
- <span>{{ item.label }}</span>
93
+ <fa-icon class="basis-6" [icon]="item.icon"></fa-icon>
94
+ <span class="flex-1 truncate">{{ item.label }}</span>
89
95
  </a>
90
96
  </li>
91
97
  }
@@ -94,50 +100,78 @@ export class UniSideMenuComponent {
94
100
  </nav>
95
101
  }
96
102
 
103
+ @if (menuInteractions().length) {
104
+ <hr class="my-4 h-px border-0 bg-gray-600" />
105
+
106
+ <ul class="flex flex-col gap-2">
107
+ @for (item of menuInteractions(); track item.id) {
108
+ @if (item.data.type === 'button') {
109
+ <li class="item-setting-button">
110
+ <button
111
+ type="button"
112
+ class="dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4"
113
+ [class]="item.class"
114
+ (click)="item.fun()">
115
+ <fa-icon class="basis-6" [icon]="item.data.icon"></fa-icon>
116
+ <span class="flex-1 truncate">{{ item.label }}</span>
117
+ </button>
118
+ </li>
119
+ } @else if (item.data.type === 'select') {
120
+ <li class="flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow">
121
+ <span class="truncate">{{ item.label }}</span>
122
+ <dx-select-box
123
+ class="flex-1 basis-24"
124
+ valueExpr="id"
125
+ displayExpr="description"
126
+ [items]="item.data.combos"
127
+ [value]="item.data.value"
128
+ stylingMode="underlined"
129
+ placeholder=""
130
+ (onValueChanged)="item.fun($event)"></dx-select-box>
131
+ </li>
132
+ }
133
+ }
134
+ </ul>
135
+ }
136
+
97
137
  <!-- setting -->
98
- <ul id="side-menu-setting">
99
- @for (button of menuButtons(); track $index) {
100
- <li class="item-setting-button">
101
- <button
102
- type="button"
103
- class="dx-theme-material-typography"
104
- [style]="button.style"
105
- (click)="button.fun()">
106
- <fa-icon [icon]="button.icon"></fa-icon>
107
- <span>{{ button.label }}</span>
108
- </button>
109
- </li>
110
- }
111
- <li class="item-setting">
112
- <fa-icon [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
113
- <span>{{ 'lblDarkMode' | translate }}</span>
138
+ <hr class="my-4 h-px border-0 bg-gray-600" />
139
+
140
+ <ul class="flex flex-col gap-2">
141
+ <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
142
+ <fa-icon class="basis-6" [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
143
+ <span class="flex-1 truncate">{{ 'lblDarkMode' | translate }}</span>
114
144
  <dx-switch [value]="darkMode()" (onValueChanged)="updateTheme($event)"></dx-switch>
115
145
  </li>
116
- <li class="item-setting">
117
- <fa-icon [icon]="ICON.LANGUAGE"></fa-icon>
118
- <span>{{ 'lblLanguage' | translate }}</span>
146
+ <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
147
+ <fa-icon class="basis-6" [icon]="ICON.LANGUAGE"></fa-icon>
148
+ <span class="flex-1 truncate">{{ 'lblLanguage' | translate }}</span>
119
149
  <dx-select-box
150
+ class="basis-12"
120
151
  [items]="translateService.translateInfo().languagesSupported"
121
152
  [value]="translateService.translateInfo().language"
122
153
  stylingMode="underlined"
123
- placeholder=""
124
154
  (onValueChanged)="updateLanguage($event)"></dx-select-box>
125
155
  </li>
126
156
  <!-- User | null | undefined -->
127
157
  @if (user() !== undefined) {
128
- <li class="item-logout">
129
- <button (click)="user() ? logout() : goToLogin()">
158
+ <li>
159
+ <button
160
+ class="flex w-full items-center gap-2 rounded border border-white p-4 text-white shadow transition duration-300 ease-in-out hover:bg-white hover:text-gray-800"
161
+ (click)="user() ? logout() : goToLogin()">
130
162
  <fa-icon [icon]="user() ? ICON.LOGOUT : ICON.LOGIN"></fa-icon>
131
- {{ (user() ? 'lblLogout' : 'lblLogin') | translate }}
163
+ <span class="flex-1 truncate">{{
164
+ (user() ? 'lblLogout' : 'lblLogin') | translate
165
+ }}</span>
132
166
  </button>
133
167
  </li>
134
168
  }
135
169
  </ul>
136
170
 
137
171
  <!-- logo -->
138
- <div id="side-menu-logo">
172
+ <div class="mt-auto flex content-end border-b border-white">
139
173
  <img
140
- id="img-brand"
174
+ class="ml-auto h-12"
141
175
  [ngSrc]="pathBrandLogo()"
142
176
  alt="Brand logo"
143
177
  [height]="30"
@@ -145,7 +179,7 @@ export class UniSideMenuComponent {
145
179
  priority />
146
180
  </div>
147
181
  </aside>
148
- `, isInline: true, styles: [":host{position:fixed;top:0;right:0;z-index:999}#side-menu{height:100vh;width:250px;display:grid;grid-template-rows:min-content min-content min-content 1fr 35px;grid-template-columns:1fr;grid-template-areas:\"user\" \"menu\" \"setting\" \".\" \"logo\";gap:2rem;padding:1rem;background-color:#27272a99;-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);border:solid 1.5px #27272a;border-radius:.25rem;box-shadow:#00000059 0 5px 5px;overflow:hidden}#side-menu-user{width:100%;grid-area:user;display:grid;grid-template-rows:1fr;grid-template-columns:1fr min-content;align-items:center;gap:1rem}#side-menu-user .side-menu-user-info{display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;gap:.5rem}#side-menu-menu ul,#side-menu-setting{display:grid;grid-auto-rows:42px;grid-template-columns:1fr;gap:.5rem;overflow:hidden}#side-menu-menu ul a,#side-menu-setting a{display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr;gap:.75rem;padding:.75rem;color:#fff;border-radius:.25rem}#side-menu-menu{width:100%;grid-area:menu;overflow:hidden}#side-menu-menu a.item-active,#side-menu-menu a:not(.item-disabled):hover{cursor:pointer;background-color:#52525b99}#side-menu-setting{grid-area:setting;padding-top:2rem;border-top:solid 2px #52525b}#side-menu-logo{grid-area:logo;display:flex;justify-content:end;border-bottom:solid 1px #fff}img{width:auto}li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-active{background-color:#52525b99}.item-disabled{pointer-events:none;cursor:default;opacity:.25}.item-logout button{width:100%;display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;align-items:center;gap:.75rem;padding:.75rem;border-radius:.25rem;color:#fff;cursor:pointer}.item-setting{display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr 60px;align-items:center;gap:.75rem;padding:.75rem;border-radius:.25rem;color:#fff;background-color:#52525b99}.item-setting>*:last-child{margin-left:auto}.item-setting-button{border-radius:.25rem;overflow:hidden;cursor:pointer;transition:.1s ease-in-out}.item-setting-button:active{transform:scale(.9)}.item-setting-button button{height:100%;width:100%;display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr;align-items:center;gap:.75rem;padding:.75rem;box-shadow:inset 0 3px 6px #000c,inset 0 -3px 6px #00000080,inset 0 1px 3px #fff3;transition:box-shadow .2s ease-in-out}::ng-deep .theme-light #side-menu,::ng-deep .theme-light #side-menu a.item-active,::ng-deep .theme-light #side-menu a:not(.item-disabled):hover,::ng-deep .theme-light #side-menu .item-setting{background-color:#0284c799!important;border-color:#0284c7a6!important;color:#fff!important}::ng-deep .theme-light #side-menu #side-menu,::ng-deep .theme-light #side-menu #side-menu-setting{border-color:#0284c7}::ng-deep .theme-light #side-menu .dx-texteditor .dx-texteditor-input,::ng-deep .theme-light #side-menu .dx-texteditor .dx-dropdowneditor-icon,::ng-deep .theme-light #side-menu .dx-texteditor:after{color:#fff!important;border-color:#fff}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i2.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "ngmodule", type: DxSwitchModule }, { kind: "component", type: i3.DxSwitchComponent, selector: "dx-switch", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isDirty", "isValid", "name", "readOnly", "rtlEnabled", "switchedOffText", "switchedOnText", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isDirtyChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "switchedOffTextChange", "switchedOnTextChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "ngmodule", type: DxSelectBoxModule }, { kind: "component", type: i4.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: UNITranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
182
+ `, isInline: true, styles: [":host{position:fixed;top:0;right:0;z-index:999}.item-setting-button button{box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d,0 3px 6px #0006;transition:all .1s ease}.item-setting-button button:active{transform:translateY(1px);box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i2.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "ngmodule", type: DxSwitchModule }, { kind: "component", type: i3.DxSwitchComponent, selector: "dx-switch", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "isDirty", "isValid", "name", "readOnly", "rtlEnabled", "switchedOffText", "switchedOnText", "tabIndex", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "isDirtyChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "switchedOffTextChange", "switchedOnTextChange", "tabIndexChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "ngmodule", type: DxSelectBoxModule }, { kind: "component", type: i4.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "pipe", type: UNITranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
149
183
  }
150
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniSideMenuComponent, decorators: [{
151
185
  type: Component,
@@ -160,12 +194,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
160
194
  FaIconComponent,
161
195
  UNITranslatePipe,
162
196
  ], template: `
163
- <aside id="side-menu">
197
+ <aside
198
+ class="flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl">
164
199
  <!-- user -->
165
- <div id="side-menu-user">
166
- <div class="side-menu-user-info">
200
+ <div class="flex w-full items-center gap-4">
201
+ <div class="flex flex-1 gap-2">
167
202
  @if (user(); as user) {
168
- <fa-icon [icon]="ICON.USER"></fa-icon> {{ user.username }}
203
+ <fa-icon [icon]="ICON.USER"></fa-icon>
204
+ <span class="flex-1 truncate">{{ user.username }}</span>
169
205
  }
170
206
  </div>
171
207
  <dx-button [icon]="'close'" (onClick)="evtToggleMenu.emit(false)"></dx-button>
@@ -173,18 +209,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
173
209
 
174
210
  <!-- menu -->
175
211
  @if (menuItems().length) {
176
- <nav id="side-menu-menu" role="full-horizontal">
177
- <ul>
212
+ <nav class="mt-8">
213
+ <ul class="flex flex-col gap-2">
178
214
  @for (item of menuItems(); track item.id) {
179
215
  @if (item.visible) {
180
216
  <li>
181
217
  <a
218
+ class="flex gap-2 rounded p-2 !text-white transition duration-100 ease-in"
219
+ [ngClass]="{
220
+ 'hover:bg-zinc-600/60': !item.disabled,
221
+ 'cursor-auto !opacity-25': item.disabled,
222
+ }"
182
223
  [routerLink]="item.disabled ? null : item.path"
183
- routerLinkActive="item-active"
184
- [ngClass]="{ 'item-disabled': item.disabled }"
224
+ routerLinkActive="bg-zinc-600/60"
185
225
  (click)="evtToggleMenu.emit(false)">
186
- <fa-icon [icon]="item.icon"></fa-icon>
187
- <span>{{ item.label }}</span>
226
+ <fa-icon class="basis-6" [icon]="item.icon"></fa-icon>
227
+ <span class="flex-1 truncate">{{ item.label }}</span>
188
228
  </a>
189
229
  </li>
190
230
  }
@@ -193,50 +233,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
193
233
  </nav>
194
234
  }
195
235
 
236
+ @if (menuInteractions().length) {
237
+ <hr class="my-4 h-px border-0 bg-gray-600" />
238
+
239
+ <ul class="flex flex-col gap-2">
240
+ @for (item of menuInteractions(); track item.id) {
241
+ @if (item.data.type === 'button') {
242
+ <li class="item-setting-button">
243
+ <button
244
+ type="button"
245
+ class="dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4"
246
+ [class]="item.class"
247
+ (click)="item.fun()">
248
+ <fa-icon class="basis-6" [icon]="item.data.icon"></fa-icon>
249
+ <span class="flex-1 truncate">{{ item.label }}</span>
250
+ </button>
251
+ </li>
252
+ } @else if (item.data.type === 'select') {
253
+ <li class="flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow">
254
+ <span class="truncate">{{ item.label }}</span>
255
+ <dx-select-box
256
+ class="flex-1 basis-24"
257
+ valueExpr="id"
258
+ displayExpr="description"
259
+ [items]="item.data.combos"
260
+ [value]="item.data.value"
261
+ stylingMode="underlined"
262
+ placeholder=""
263
+ (onValueChanged)="item.fun($event)"></dx-select-box>
264
+ </li>
265
+ }
266
+ }
267
+ </ul>
268
+ }
269
+
196
270
  <!-- setting -->
197
- <ul id="side-menu-setting">
198
- @for (button of menuButtons(); track $index) {
199
- <li class="item-setting-button">
200
- <button
201
- type="button"
202
- class="dx-theme-material-typography"
203
- [style]="button.style"
204
- (click)="button.fun()">
205
- <fa-icon [icon]="button.icon"></fa-icon>
206
- <span>{{ button.label }}</span>
207
- </button>
208
- </li>
209
- }
210
- <li class="item-setting">
211
- <fa-icon [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
212
- <span>{{ 'lblDarkMode' | translate }}</span>
271
+ <hr class="my-4 h-px border-0 bg-gray-600" />
272
+
273
+ <ul class="flex flex-col gap-2">
274
+ <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
275
+ <fa-icon class="basis-6" [icon]="darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE"></fa-icon>
276
+ <span class="flex-1 truncate">{{ 'lblDarkMode' | translate }}</span>
213
277
  <dx-switch [value]="darkMode()" (onValueChanged)="updateTheme($event)"></dx-switch>
214
278
  </li>
215
- <li class="item-setting">
216
- <fa-icon [icon]="ICON.LANGUAGE"></fa-icon>
217
- <span>{{ 'lblLanguage' | translate }}</span>
279
+ <li class="flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow">
280
+ <fa-icon class="basis-6" [icon]="ICON.LANGUAGE"></fa-icon>
281
+ <span class="flex-1 truncate">{{ 'lblLanguage' | translate }}</span>
218
282
  <dx-select-box
283
+ class="basis-12"
219
284
  [items]="translateService.translateInfo().languagesSupported"
220
285
  [value]="translateService.translateInfo().language"
221
286
  stylingMode="underlined"
222
- placeholder=""
223
287
  (onValueChanged)="updateLanguage($event)"></dx-select-box>
224
288
  </li>
225
289
  <!-- User | null | undefined -->
226
290
  @if (user() !== undefined) {
227
- <li class="item-logout">
228
- <button (click)="user() ? logout() : goToLogin()">
291
+ <li>
292
+ <button
293
+ class="flex w-full items-center gap-2 rounded border border-white p-4 text-white shadow transition duration-300 ease-in-out hover:bg-white hover:text-gray-800"
294
+ (click)="user() ? logout() : goToLogin()">
229
295
  <fa-icon [icon]="user() ? ICON.LOGOUT : ICON.LOGIN"></fa-icon>
230
- {{ (user() ? 'lblLogout' : 'lblLogin') | translate }}
296
+ <span class="flex-1 truncate">{{
297
+ (user() ? 'lblLogout' : 'lblLogin') | translate
298
+ }}</span>
231
299
  </button>
232
300
  </li>
233
301
  }
234
302
  </ul>
235
303
 
236
304
  <!-- logo -->
237
- <div id="side-menu-logo">
305
+ <div class="mt-auto flex content-end border-b border-white">
238
306
  <img
239
- id="img-brand"
307
+ class="ml-auto h-12"
240
308
  [ngSrc]="pathBrandLogo()"
241
309
  alt="Brand logo"
242
310
  [height]="30"
@@ -244,6 +312,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
244
312
  priority />
245
313
  </div>
246
314
  </aside>
247
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:fixed;top:0;right:0;z-index:999}#side-menu{height:100vh;width:250px;display:grid;grid-template-rows:min-content min-content min-content 1fr 35px;grid-template-columns:1fr;grid-template-areas:\"user\" \"menu\" \"setting\" \".\" \"logo\";gap:2rem;padding:1rem;background-color:#27272a99;-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);border:solid 1.5px #27272a;border-radius:.25rem;box-shadow:#00000059 0 5px 5px;overflow:hidden}#side-menu-user{width:100%;grid-area:user;display:grid;grid-template-rows:1fr;grid-template-columns:1fr min-content;align-items:center;gap:1rem}#side-menu-user .side-menu-user-info{display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;gap:.5rem}#side-menu-menu ul,#side-menu-setting{display:grid;grid-auto-rows:42px;grid-template-columns:1fr;gap:.5rem;overflow:hidden}#side-menu-menu ul a,#side-menu-setting a{display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr;gap:.75rem;padding:.75rem;color:#fff;border-radius:.25rem}#side-menu-menu{width:100%;grid-area:menu;overflow:hidden}#side-menu-menu a.item-active,#side-menu-menu a:not(.item-disabled):hover{cursor:pointer;background-color:#52525b99}#side-menu-setting{grid-area:setting;padding-top:2rem;border-top:solid 2px #52525b}#side-menu-logo{grid-area:logo;display:flex;justify-content:end;border-bottom:solid 1px #fff}img{width:auto}li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.item-active{background-color:#52525b99}.item-disabled{pointer-events:none;cursor:default;opacity:.25}.item-logout button{width:100%;display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;align-items:center;gap:.75rem;padding:.75rem;border-radius:.25rem;color:#fff;cursor:pointer}.item-setting{display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr 60px;align-items:center;gap:.75rem;padding:.75rem;border-radius:.25rem;color:#fff;background-color:#52525b99}.item-setting>*:last-child{margin-left:auto}.item-setting-button{border-radius:.25rem;overflow:hidden;cursor:pointer;transition:.1s ease-in-out}.item-setting-button:active{transform:scale(.9)}.item-setting-button button{height:100%;width:100%;display:grid;grid-template-rows:1fr;grid-template-columns:20px 1fr;align-items:center;gap:.75rem;padding:.75rem;box-shadow:inset 0 3px 6px #000c,inset 0 -3px 6px #00000080,inset 0 1px 3px #fff3;transition:box-shadow .2s ease-in-out}::ng-deep .theme-light #side-menu,::ng-deep .theme-light #side-menu a.item-active,::ng-deep .theme-light #side-menu a:not(.item-disabled):hover,::ng-deep .theme-light #side-menu .item-setting{background-color:#0284c799!important;border-color:#0284c7a6!important;color:#fff!important}::ng-deep .theme-light #side-menu #side-menu,::ng-deep .theme-light #side-menu #side-menu-setting{border-color:#0284c7}::ng-deep .theme-light #side-menu .dx-texteditor .dx-texteditor-input,::ng-deep .theme-light #side-menu .dx-texteditor .dx-dropdowneditor-icon,::ng-deep .theme-light #side-menu .dx-texteditor:after{color:#fff!important;border-color:#fff}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"] }]
315
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:fixed;top:0;right:0;z-index:999}.item-setting-button button{box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d,0 3px 6px #0006;transition:all .1s ease}.item-setting-button button:active{transform:translateY(1px);box-shadow:inset 0 3px 6px #0009,inset 0 -3px 6px #0000004d}:host ::ng-deep .dx-texteditor.dx-editor-underlined .dx-texteditor-input{padding:0}\n"] }]
248
316
  }] });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLXNpZGUtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmktY29tcG9uZW50LXR3L3VuaS1zaWRlLW1lbnUvc3JjL3VuaS1zaWRlLW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQTRIeEQsTUFBTSxPQUFPLG9CQUFvQjtJQXZHakM7UUF3R0UsYUFBYTtRQUNKLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxNQUFNLENBQUMs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFGVCxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHhCdXR0b25Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRHhTd2l0Y2hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvc3dpdGNoJztcclxuaW1wb3J0IHsgRHhTZWxlY3RCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvc2VsZWN0LWJveCc7XHJcbmltcG9ydCB7IFZhbHVlQ2hhbmdlZEV2ZW50IGFzIFN3aXRjaFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9zd2l0Y2hfdHlwZXMnO1xyXG5pbXBvcnQgeyBWYWx1ZUNoYW5nZWRFdmVudCBhcyBTZWxlY3RCb3hWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ2RldmV4dHJlbWUvdWkvc2VsZWN0X2JveF90eXBlcyc7XHJcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtcclxuICBJY29uRGVmaW5pdGlvbixcclxuICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCxcclxuICBmYUFycm93UmlnaHRUb0JyYWNrZXQsXHJcbiAgZmFMYW5ndWFnZSxcclxuICBmYU1vb24sXHJcbiAgZmFTdW4sXHJcbiAgZmFVc2VyLFxyXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7IFVOSVRyYW5zbGF0ZVBpcGUsIFVOSVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICd1bmktc2VydmljZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBVTklBdXRoU2VydmljZSwgVXNlciB9IGZyb20gJ3VuaS1zZXJ2aWNlL2F1dGgnO1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudUl0ZW0gPSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBpY29uOiBJY29uRGVmaW5pdGlvbjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHBhdGg6IHN0cmluZztcclxuICB2aXNpYmxlOiBib29sZWFuO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudUJ1dHRvbiA9IHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGljb246IEljb25EZWZpbml0aW9uO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgc3R5bGU6IHN0cmluZztcclxuICBmdW46ICguLi5wYXJhbXM6IGFueSkgPT4gdm9pZDtcclxuICB2aXNpYmxlOiBib29sZWFuO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1bmktc2lkZS1tZW51JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJvdXRlckxpbmssXHJcbiAgICBSb3V0ZXJMaW5rQWN0aXZlLFxyXG4gICAgTmdPcHRpbWl6ZWRJbWFnZSxcclxuICAgIER4QnV0dG9uTW9kdWxlLFxyXG4gICAgRHhTd2l0Y2hNb2R1bGUsXHJcbiAgICBEeFNlbGVjdEJveE1vZHVsZSxcclxuICAgIEZhSWNvbkNvbXBvbmVudCxcclxuICAgIFVOSVRyYW5zbGF0ZVBpcGUsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFzaWRlIGlkPVwic2lkZS1tZW51XCI+XHJcbiAgICAgIDwhLS0gdXNlciAgLS0+XHJcbiAgICAgIDxkaXYgaWQ9XCJzaWRlLW1lbnUtdXNlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnUtdXNlci1pbmZvXCI+XHJcbiAgICAgICAgICBAaWYgKHVzZXIoKTsgYXMgdXNlcikge1xyXG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJJQ09OLlVTRVJcIj48L2ZhLWljb24+IHt7IHVzZXIudXNlcm5hbWUgfX1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZHgtYnV0dG9uIFtpY29uXT1cIidjbG9zZSdcIiAob25DbGljayk9XCJldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpXCI+PC9keC1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBtZW51ICAtLT5cclxuICAgICAgQGlmIChtZW51SXRlbXMoKS5sZW5ndGgpIHtcclxuICAgICAgICA8bmF2IGlkPVwic2lkZS1tZW51LW1lbnVcIiByb2xlPVwiZnVsbC1ob3Jpem9udGFsXCI+XHJcbiAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbWVudUl0ZW1zKCk7IHRyYWNrIGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICBAaWYgKGl0ZW0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0uZGlzYWJsZWQgPyBudWxsIDogaXRlbS5wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2l0ZW0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiaXRlbS5pY29uXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIHNldHRpbmcgIC0tPlxyXG4gICAgICA8dWwgaWQ9XCJzaWRlLW1lbnUtc2V0dGluZ1wiPlxyXG4gICAgICAgIEBmb3IgKGJ1dHRvbiBvZiBtZW51QnV0dG9ucygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tc2V0dGluZy1idXR0b25cIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHgtdGhlbWUtbWF0ZXJpYWwtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cImJ1dHRvbi5zdHlsZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJ1dHRvbi5mdW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGJ1dHRvbi5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXNldHRpbmdcIj5cclxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImRhcmtNb2RlKCkgPyBJQ09OLkRBUktfTU9ERSA6IElDT04uTElHSFRfTU9ERVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPnt7ICdsYmxEYXJrTW9kZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8ZHgtc3dpdGNoIFt2YWx1ZV09XCJkYXJrTW9kZSgpXCIgKG9uVmFsdWVDaGFuZ2VkKT1cInVwZGF0ZVRoZW1lKCRldmVudClcIj48L2R4LXN3aXRjaD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tc2V0dGluZ1wiPlxyXG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiSUNPTi5MQU5HVUFHRVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPnt7ICdsYmxMYW5ndWFnZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8ZHgtc2VsZWN0LWJveFxyXG4gICAgICAgICAgICBbaXRlbXNdPVwidHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVJbmZvKCkubGFuZ3VhZ2VzU3VwcG9ydGVkXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlSW5mbygpLmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgc3R5bGluZ01vZGU9XCJ1bmRlcmxpbmVkXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidXBkYXRlTGFuZ3VhZ2UoJGV2ZW50KVwiPjwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwhLS0gVXNlciB8IG51bGwgfCB1bmRlZmluZWQgLS0+XHJcbiAgICAgICAgQGlmICh1c2VyKCkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1sb2dvdXRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXNlcigpID8gbG9nb3V0KCkgOiBnb1RvTG9naW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cInVzZXIoKSA/IElDT04uTE9HT1VUIDogSUNPTi5MT0dJTlwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICB7eyAodXNlcigpID8gJ2xibExvZ291dCcgOiAnbGJsTG9naW4nKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3VsPlxyXG5cclxuICAgICAgPCEtLSBsb2dvICAtLT5cclxuICAgICAgPGRpdiBpZD1cInNpZGUtbWVudS1sb2dvXCI+XHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgaWQ9XCJpbWctYnJhbmRcIlxyXG4gICAgICAgICAgW25nU3JjXT1cInBhdGhCcmFuZExvZ28oKVwiXHJcbiAgICAgICAgICBhbHQ9XCJCcmFuZCBsb2dvXCJcclxuICAgICAgICAgIFtoZWlnaHRdPVwiMzBcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyNVwiXHJcbiAgICAgICAgICBwcmlvcml0eSAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYXNpZGU+XHJcbiAgYCxcclxuICBzdHlsZVVybDogJy4vdW5pLXNpZGUtbWVudS5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmlTaWRlTWVudUNvbXBvbmVudCB7XHJcbiAgLyogU2VydmljZSAqL1xyXG4gIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KFVOSUF1dGhTZXJ2aWNlKTtcclxuICByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFVOSVRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAvKiBJbnB1dCAqL1xyXG4gIHBhdGhCcmFuZExvZ28gPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgbWVudUl0ZW1zID0gaW5wdXQ8TWVudUl0ZW1bXT4oW10pO1xyXG4gIG1lbnVCdXR0b25zID0gaW5wdXQ8TWVudUJ1dHRvbltdPihbXSk7XHJcbiAgdXNlciA9IGlucHV0LnJlcXVpcmVkPFVzZXIgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICAvKiBPdXRwdXQgKi9cclxuICBldnRUb2dnbGVNZW51ID0gb3V0cHV0PGZhbHNlPigpO1xyXG5cclxuICAvKiBWYXJpYWJsZXMgKi9cclxuICBkYXJrTW9kZSA9IHNpZ25hbDxib29sZWFuPihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndW5pLXRoZW1lJykgPT09ICdkYXJrJyk7XHJcblxyXG4gIC8qIEljb25zICovXHJcbiAgcmVhZG9ubHkgSUNPTiA9IHtcclxuICAgIFVTRVI6IGZhVXNlcixcclxuICAgIExPR0lOOiBmYUFycm93UmlnaHRUb0JyYWNrZXQsXHJcbiAgICBMT0dPVVQ6IGZhQXJyb3dSaWdodEZyb21CcmFja2V0LFxyXG4gICAgTElHSFRfTU9ERTogZmFTdW4sXHJcbiAgICBEQVJLX01PREU6IGZhTW9vbixcclxuICAgIExBTkdVQUdFOiBmYUxhbmd1YWdlLFxyXG4gIH07XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVRoZW1lKGU6IFN3aXRjaFZhbHVlQ2hhbmdlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndW5pLXRoZW1lJywgZS52YWx1ZSA/ICdkYXJrJyA6ICdsaWdodCcpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZUxhbmd1YWdlKGU6IFNlbGVjdEJveFZhbHVlQ2hhbmdlZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0TGFuZ3VhZ2UoZS52YWx1ZSk7XHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ29Ub0xvZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydsb2dpbiddKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLm1lbnVJdGVtcygpLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSAmJiAhaXRlbS5kaXNhYmxlZCk7XHJcbiAgICAgIHRoaXMuZXZ0VG9nZ2xlTWVudS5lbWl0KGZhbHNlKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZpcnN0SXRlbT8ucGF0aCA/PyAnbG9naW4nXSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLXNpZGUtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmktY29tcG9uZW50LXR3L3VuaS1zaWRlLW1lbnUvc3JjL3VuaS1zaWRlLW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQXNLeEQsTUFBTSxPQUFPLG9CQUFvQjtJQXpJakM7UUEwSUUsYUFBYTtRQUNKLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxNQUFNLENBQUMs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QUNqQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVIVCxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHhCdXR0b25Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRHhTd2l0Y2hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvc3dpdGNoJztcclxuaW1wb3J0IHsgRHhTZWxlY3RCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvc2VsZWN0LWJveCc7XHJcbmltcG9ydCB7IFZhbHVlQ2hhbmdlZEV2ZW50IGFzIFN3aXRjaFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9zd2l0Y2hfdHlwZXMnO1xyXG5pbXBvcnQgeyBWYWx1ZUNoYW5nZWRFdmVudCBhcyBTZWxlY3RCb3hWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ2RldmV4dHJlbWUvdWkvc2VsZWN0X2JveF90eXBlcyc7XHJcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtcclxuICBJY29uRGVmaW5pdGlvbixcclxuICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCxcclxuICBmYUFycm93UmlnaHRUb0JyYWNrZXQsXHJcbiAgZmFMYW5ndWFnZSxcclxuICBmYU1vb24sXHJcbiAgZmFTdW4sXHJcbiAgZmFVc2VyLFxyXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7IFVOSVRyYW5zbGF0ZVBpcGUsIFVOSVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICd1bmktc2VydmljZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBVTklBdXRoU2VydmljZSwgVXNlciB9IGZyb20gJ3VuaS1zZXJ2aWNlL2F1dGgnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ29tYm8gPSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIE1lbnVJdGVtID0ge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgaWNvbjogSWNvbkRlZmluaXRpb247XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgdmlzaWJsZTogYm9vbGVhbjtcclxuICBkaXNhYmxlZDogYm9vbGVhbjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIE1lbnVJbnRlcmFjdGlvbiA9IHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGRhdGE6XHJcbiAgICB8IHsgdHlwZTogJ2J1dHRvbic7IGljb246IEljb25EZWZpbml0aW9uIH1cclxuICAgIHwgeyB0eXBlOiAnc2VsZWN0JzsgY29tYm9zOiBDb21ib1tdOyB2YWx1ZTogbnVtYmVyIHwgbnVsbCB9O1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgY2xhc3M6IHN0cmluZztcclxuICBmdW46ICguLi5hcmdzOiBhbnkpID0+IHZvaWQ7XHJcbiAgdmlzaWJsZTogYm9vbGVhbjtcclxuICBkaXNhYmxlZDogYm9vbGVhbjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndW5pLXNpZGUtbWVudScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSb3V0ZXJMaW5rLFxyXG4gICAgUm91dGVyTGlua0FjdGl2ZSxcclxuICAgIE5nT3B0aW1pemVkSW1hZ2UsXHJcbiAgICBEeEJ1dHRvbk1vZHVsZSxcclxuICAgIER4U3dpdGNoTW9kdWxlLFxyXG4gICAgRHhTZWxlY3RCb3hNb2R1bGUsXHJcbiAgICBGYUljb25Db21wb25lbnQsXHJcbiAgICBVTklUcmFuc2xhdGVQaXBlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxhc2lkZVxyXG4gICAgICBjbGFzcz1cImZsZXggaC1zY3JlZW4gdy1bMjUwcHhdIGZsZXgtY29sIGdhcC00IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJnLXppbmMtODAwLzYwIHAtNCBzaGFkb3cgYmFja2Ryb3AtYmx1ci14bFwiPlxyXG4gICAgICA8IS0tIHVzZXIgIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGdhcC0yXCI+XHJcbiAgICAgICAgICBAaWYgKHVzZXIoKTsgYXMgdXNlcikge1xyXG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJJQ09OLlVTRVJcIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgdXNlci51c2VybmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZHgtYnV0dG9uIFtpY29uXT1cIidjbG9zZSdcIiAob25DbGljayk9XCJldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpXCI+PC9keC1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBtZW51ICAtLT5cclxuICAgICAgQGlmIChtZW51SXRlbXMoKS5sZW5ndGgpIHtcclxuICAgICAgICA8bmF2IGNsYXNzPVwibXQtOFwiPlxyXG4gICAgICAgICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxyXG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIG1lbnVJdGVtcygpOyB0cmFjayBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgQGlmIChpdGVtLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTIgcm91bmRlZCBwLTIgIXRleHQtd2hpdGUgdHJhbnNpdGlvbiBkdXJhdGlvbi0xMDAgZWFzZS1pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLXppbmMtNjAwLzYwJzogIWl0ZW0uZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLWF1dG8gIW9wYWNpdHktMjUnOiBpdGVtLmRpc2FibGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0uZGlzYWJsZWQgPyBudWxsIDogaXRlbS5wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYmctemluYy02MDAvNjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJiYXNpcy02XCIgW2ljb25dPVwiaXRlbS5pY29uXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEBpZiAobWVudUludGVyYWN0aW9ucygpLmxlbmd0aCkge1xyXG4gICAgICAgIDxociBjbGFzcz1cIm15LTQgaC1weCBib3JkZXItMCBiZy1ncmF5LTYwMFwiIC8+XHJcblxyXG4gICAgICAgIDx1bCBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbWVudUludGVyYWN0aW9ucygpOyB0cmFjayBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgIEBpZiAoaXRlbS5kYXRhLnR5cGUgPT09ICdidXR0b24nKSB7XHJcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1zZXR0aW5nLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkeC10aGVtZS1tYXRlcmlhbC10eXBvZ3JhcGh5IGZsZXggaC0xMiB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQgcC00XCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXRlbS5mdW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cImJhc2lzLTZcIiBbaWNvbl09XCJpdGVtLmRhdGEuaWNvblwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LTEgdHJ1bmNhdGVcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5kYXRhLnR5cGUgPT09ICdzZWxlY3QnKSB7XHJcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZmxleCBoLTEyIGl0ZW1zLWNlbnRlciBnYXAtNCByb3VuZGVkIGJnLXppbmMtNjAwLzYwIHAtMyBzaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LTEgYmFzaXMtMjRcIlxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZUV4cHI9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbS5kYXRhLmNvbWJvc1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLmRhdGEudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsaW5nTW9kZT1cInVuZGVybGluZWRcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJpdGVtLmZ1bigkZXZlbnQpXCI+PC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3VsPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIHNldHRpbmcgIC0tPlxyXG4gICAgICA8aHIgY2xhc3M9XCJteS00IGgtcHggYm9yZGVyLTAgYmctZ3JheS02MDBcIiAvPlxyXG5cclxuICAgICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cImZsZXggaC0xMiBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZCBiZy16aW5jLTYwMC82MCBwLTQgdGV4dC13aGl0ZSBzaGFkb3dcIj5cclxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiYmFzaXMtNlwiIFtpY29uXT1cImRhcmtNb2RlKCkgPyBJQ09OLkRBUktfTU9ERSA6IElDT04uTElHSFRfTU9ERVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgJ2xibERhcmtNb2RlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxkeC1zd2l0Y2ggW3ZhbHVlXT1cImRhcmtNb2RlKClcIiAob25WYWx1ZUNoYW5nZWQpPVwidXBkYXRlVGhlbWUoJGV2ZW50KVwiPjwvZHgtc3dpdGNoPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwiZmxleCBoLTEyIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkIGJnLXppbmMtNjAwLzYwIHAtNCB0ZXh0LXdoaXRlIHNoYWRvd1wiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJiYXNpcy02XCIgW2ljb25dPVwiSUNPTi5MQU5HVUFHRVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgJ2xibExhbmd1YWdlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxkeC1zZWxlY3QtYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFzaXMtMTJcIlxyXG4gICAgICAgICAgICBbaXRlbXNdPVwidHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVJbmZvKCkubGFuZ3VhZ2VzU3VwcG9ydGVkXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlSW5mbygpLmxhbmd1YWdlXCJcclxuICAgICAgICAgICAgc3R5bGluZ01vZGU9XCJ1bmRlcmxpbmVkXCJcclxuICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInVwZGF0ZUxhbmd1YWdlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8IS0tIFVzZXIgfCBudWxsIHwgdW5kZWZpbmVkIC0tPlxyXG4gICAgICAgIEBpZiAodXNlcigpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQgYm9yZGVyIGJvcmRlci13aGl0ZSBwLTQgdGV4dC13aGl0ZSBzaGFkb3cgdHJhbnNpdGlvbiBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQgaG92ZXI6Ymctd2hpdGUgaG92ZXI6dGV4dC1ncmF5LTgwMFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXIoKSA/IGxvZ291dCgpIDogZ29Ub0xvZ2luKClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJ1c2VyKCkgPyBJQ09OLkxPR09VVCA6IElDT04uTE9HSU5cIj48L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LTEgdHJ1bmNhdGVcIj57e1xyXG4gICAgICAgICAgICAgICAgKHVzZXIoKSA/ICdsYmxMb2dvdXQnIDogJ2xibExvZ2luJykgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIH1cclxuICAgICAgPC91bD5cclxuXHJcbiAgICAgIDwhLS0gbG9nbyAgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC1hdXRvIGZsZXggY29udGVudC1lbmQgYm9yZGVyLWIgYm9yZGVyLXdoaXRlXCI+XHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIGgtMTJcIlxyXG4gICAgICAgICAgW25nU3JjXT1cInBhdGhCcmFuZExvZ28oKVwiXHJcbiAgICAgICAgICBhbHQ9XCJCcmFuZCBsb2dvXCJcclxuICAgICAgICAgIFtoZWlnaHRdPVwiMzBcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyNVwiXHJcbiAgICAgICAgICBwcmlvcml0eSAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYXNpZGU+XHJcbiAgYCxcclxuICBzdHlsZVVybDogJy4vdW5pLXNpZGUtbWVudS5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmlTaWRlTWVudUNvbXBvbmVudCB7XHJcbiAgLyogU2VydmljZSAqL1xyXG4gIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KFVOSUF1dGhTZXJ2aWNlKTtcclxuICByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFVOSVRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAvKiBJbnB1dCAqL1xyXG4gIHBhdGhCcmFuZExvZ28gPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgbWVudUl0ZW1zID0gaW5wdXQ8TWVudUl0ZW1bXT4oW10pO1xyXG4gIG1lbnVJbnRlcmFjdGlvbnMgPSBpbnB1dDxNZW51SW50ZXJhY3Rpb25bXT4oW10pO1xyXG4gIHVzZXIgPSBpbnB1dC5yZXF1aXJlZDxVc2VyIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgLyogT3V0cHV0ICovXHJcbiAgZXZ0VG9nZ2xlTWVudSA9IG91dHB1dDxmYWxzZT4oKTtcclxuXHJcbiAgLyogVmFyaWFibGVzICovXHJcbiAgZGFya01vZGUgPSBzaWduYWw8Ym9vbGVhbj4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VuaS10aGVtZScpID09PSAnZGFyaycpO1xyXG5cclxuICAvKiBJY29ucyAqL1xyXG4gIHJlYWRvbmx5IElDT04gPSB7XHJcbiAgICBVU0VSOiBmYVVzZXIsXHJcbiAgICBMT0dJTjogZmFBcnJvd1JpZ2h0VG9CcmFja2V0LFxyXG4gICAgTE9HT1VUOiBmYUFycm93UmlnaHRGcm9tQnJhY2tldCxcclxuICAgIExJR0hUX01PREU6IGZhU3VuLFxyXG4gICAgREFSS19NT0RFOiBmYU1vb24sXHJcbiAgICBMQU5HVUFHRTogZmFMYW5ndWFnZSxcclxuICB9O1xyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIHByb3RlY3RlZCB1cGRhdGVUaGVtZShlOiBTd2l0Y2hWYWx1ZUNoYW5nZWRFdmVudCk6IHZvaWQge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VuaS10aGVtZScsIGUudmFsdWUgPyAnZGFyaycgOiAnbGlnaHQnKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVMYW5ndWFnZShlOiBTZWxlY3RCb3hWYWx1ZUNoYW5nZWRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldExhbmd1YWdlKGUudmFsdWUpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdvVG9Mb2dpbigpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZ0VG9nZ2xlTWVudS5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnbG9naW4nXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbG9nb3V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgY29uc3QgZmlyc3RJdGVtID0gdGhpcy5tZW51SXRlbXMoKS5maW5kKChpdGVtKSA9PiBpdGVtLnZpc2libGUgJiYgIWl0ZW0uZGlzYWJsZWQpO1xyXG4gICAgICB0aGlzLmV2dFRvZ2dsZU1lbnUuZW1pdChmYWxzZSk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtmaXJzdEl0ZW0/LnBhdGggPz8gJ2xvZ2luJ10pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==