uni-component-tw 1.1.0 → 2.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/uni-article/uni-article.component.mjs +40 -0
- package/esm2022/lib/uni-header/uni-header.component.mjs +24 -0
- package/esm2022/lib/uni-login-modal/uni-login-modal.component.mjs +53 -0
- package/esm2022/lib/uni-pie-chart/uni-pie-chart.component.mjs +61 -0
- package/esm2022/lib/uni-side-menu/uni-side-menu.component.mjs +79 -0
- package/esm2022/public-api.mjs +9 -0
- package/esm2022/uni-component-tw.mjs +2 -2
- package/fesm2022/uni-component-tw.mjs +237 -3
- package/fesm2022/uni-component-tw.mjs.map +1 -1
- package/index.d.ts +5 -1
- package/{uni-login-modal/src → lib/uni-login-modal}/uni-login-modal.component.d.ts +4 -4
- package/{uni-pie-chart/src → lib/uni-pie-chart}/uni-pie-chart.component.d.ts +3 -3
- package/{uni-side-menu/src → lib/uni-side-menu}/uni-side-menu.component.d.ts +6 -6
- package/package.json +2 -40
- package/public-api.d.ts +5 -0
- package/esm2022/index.mjs +0 -5
- package/esm2022/uni-article/index.mjs +0 -2
- package/esm2022/uni-article/src/uni-article.component.mjs +0 -108
- package/esm2022/uni-article/uni-component-tw-uni-article.mjs +0 -5
- package/esm2022/uni-header/index.mjs +0 -2
- package/esm2022/uni-header/src/uni-header.component.mjs +0 -66
- package/esm2022/uni-header/uni-component-tw-uni-header.mjs +0 -5
- package/esm2022/uni-login-modal/index.mjs +0 -2
- package/esm2022/uni-login-modal/src/uni-login-modal.component.mjs +0 -146
- package/esm2022/uni-login-modal/uni-component-tw-uni-login-modal.mjs +0 -5
- package/esm2022/uni-pie-chart/index.mjs +0 -2
- package/esm2022/uni-pie-chart/src/uni-pie-chart.component.mjs +0 -159
- package/esm2022/uni-pie-chart/uni-component-tw-uni-pie-chart.mjs +0 -5
- package/esm2022/uni-side-menu/index.mjs +0 -2
- package/esm2022/uni-side-menu/src/uni-side-menu.component.mjs +0 -317
- package/esm2022/uni-side-menu/uni-component-tw-uni-side-menu.mjs +0 -5
- package/esm2022/uni-wrapper-chart/index.mjs +0 -2
- package/esm2022/uni-wrapper-chart/src/uni-wrapper-chart.component.mjs +0 -36
- package/esm2022/uni-wrapper-chart/uni-component-tw-uni-wrapper-chart.mjs +0 -5
- package/fesm2022/uni-component-tw-uni-article.mjs +0 -115
- package/fesm2022/uni-component-tw-uni-article.mjs.map +0 -1
- package/fesm2022/uni-component-tw-uni-header.mjs +0 -73
- package/fesm2022/uni-component-tw-uni-header.mjs.map +0 -1
- package/fesm2022/uni-component-tw-uni-login-modal.mjs +0 -152
- package/fesm2022/uni-component-tw-uni-login-modal.mjs.map +0 -1
- package/fesm2022/uni-component-tw-uni-pie-chart.mjs +0 -166
- package/fesm2022/uni-component-tw-uni-pie-chart.mjs.map +0 -1
- package/fesm2022/uni-component-tw-uni-side-menu.mjs +0 -324
- package/fesm2022/uni-component-tw-uni-side-menu.mjs.map +0 -1
- package/fesm2022/uni-component-tw-uni-wrapper-chart.mjs +0 -43
- package/fesm2022/uni-component-tw-uni-wrapper-chart.mjs.map +0 -1
- package/uni-article/index.d.ts +0 -1
- package/uni-header/index.d.ts +0 -1
- package/uni-login-modal/index.d.ts +0 -1
- package/uni-pie-chart/index.d.ts +0 -1
- package/uni-side-menu/index.d.ts +0 -1
- package/uni-wrapper-chart/index.d.ts +0 -1
- package/uni-wrapper-chart/src/uni-wrapper-chart.component.d.ts +0 -13
- /package/{uni-article/src → lib/uni-article}/uni-article.component.d.ts +0 -0
- /package/{uni-header/src → lib/uni-header}/uni-header.component.d.ts +0 -0
package/README.md
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input, signal, } from '@angular/core';
|
|
3
|
+
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
|
4
|
+
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "devextreme-angular/ui/button";
|
|
8
|
+
export class UniArticleComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
/* Inputs */
|
|
11
|
+
this.color = input.required(); // Colore di base dell'articolo
|
|
12
|
+
this.title = input(); // Titolo opzionale dell'articolo
|
|
13
|
+
this.icon = input(); // Icona opzionale per l'intestazione
|
|
14
|
+
this.setIsOpen = input(); // Stato iniziale di apertura
|
|
15
|
+
this.headerCloseButton = input(false); // Se mostrare il button per chiudere article
|
|
16
|
+
/* Variables */
|
|
17
|
+
this.isOpen = signal(true);
|
|
18
|
+
this.isHeader = computed(() => this.icon() || this.title() || this.headerCloseButton());
|
|
19
|
+
}
|
|
20
|
+
/* ----------------------- Lifecycle Hook --------------------------- */
|
|
21
|
+
ngOnChanges(changes) {
|
|
22
|
+
const { setIsOpen } = changes;
|
|
23
|
+
// Verifica se 'setIsOpen' è cambiato e non è il primo cambiamento
|
|
24
|
+
if (setIsOpen && !setIsOpen.firstChange && setIsOpen.currentValue !== undefined) {
|
|
25
|
+
this.isOpen.set(setIsOpen.currentValue);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/* ----------------------- Metodi --------------------------- */
|
|
29
|
+
toggleIsOpen() {
|
|
30
|
+
// Inverte lo stato di apertura/chiusura
|
|
31
|
+
this.isOpen.update((val) => !val);
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniArticleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
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: "<article\n class=\"uni_article flex h-full flex-col rounded border-2 p-4\"\n [style.backgroundColor]=\"color() + '26'\"\n [style.borderColor]=\"color() + '33'\">\n <!-- Title -->\n @if (isHeader()) {\n <div class=\"uni_article_header flex items-center gap-4\" [ngClass]=\"{ 'mb-4': isOpen() }\">\n <!-- Icona nella testata, se presente -->\n @if (icon(); as icon) {\n <fa-icon class=\"uni-article-header-icon\" [icon]=\"icon\"></fa-icon>\n }\n\n <!-- Titolo nella testata, se presente -->\n @if (title(); as title) {\n <h5 class=\"uni_article_header_title truncate uppercase\">{{ title }}</h5>\n }\n\n <!-- Bottone per aprire/chiudere l'articolo, se presente -->\n @if (headerCloseButton()) {\n <dx-button\n class=\"uni_article_header_button ml-auto\"\n [icon]=\"isOpen() ? 'close' : 'expandform'\"\n (onClick)=\"toggleIsOpen()\">\n </dx-button>\n }\n </div>\n }\n\n <!-- Contenuto dell'articolo, visibile solo se aperto -->\n @if (isOpen()) {\n <ng-content></ng-content>\n }\n</article>\n\n", styles: [":host{display:block}\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 }); }
|
|
35
|
+
}
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniArticleComponent, decorators: [{
|
|
37
|
+
type: Component,
|
|
38
|
+
args: [{ selector: 'uni-article', standalone: true, imports: [CommonModule, DxButtonModule, FaIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<article\n class=\"uni_article flex h-full flex-col rounded border-2 p-4\"\n [style.backgroundColor]=\"color() + '26'\"\n [style.borderColor]=\"color() + '33'\">\n <!-- Title -->\n @if (isHeader()) {\n <div class=\"uni_article_header flex items-center gap-4\" [ngClass]=\"{ 'mb-4': isOpen() }\">\n <!-- Icona nella testata, se presente -->\n @if (icon(); as icon) {\n <fa-icon class=\"uni-article-header-icon\" [icon]=\"icon\"></fa-icon>\n }\n\n <!-- Titolo nella testata, se presente -->\n @if (title(); as title) {\n <h5 class=\"uni_article_header_title truncate uppercase\">{{ title }}</h5>\n }\n\n <!-- Bottone per aprire/chiudere l'articolo, se presente -->\n @if (headerCloseButton()) {\n <dx-button\n class=\"uni_article_header_button ml-auto\"\n [icon]=\"isOpen() ? 'close' : 'expandform'\"\n (onClick)=\"toggleIsOpen()\">\n </dx-button>\n }\n </div>\n }\n\n <!-- Contenuto dell'articolo, visibile solo se aperto -->\n @if (isOpen()) {\n <ng-content></ng-content>\n }\n</article>\n\n", styles: [":host{display:block}\n"] }]
|
|
39
|
+
}] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWFydGljbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5pLWNvbXBvbmVudC10dy9zcmMvbGliL3VuaS1hcnRpY2xlL3VuaS1hcnRpY2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktYXJ0aWNsZS91bmktYXJ0aWNsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQVduRSxNQUFNLE9BQU8sbUJBQW1CO0lBUmhDO1FBU0UsWUFBWTtRQUNILFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUMsQ0FBQywrQkFBK0I7UUFDakUsVUFBSyxHQUFHLEtBQUssRUFBVSxDQUFDLENBQUMsaUNBQWlDO1FBQzFELFNBQUksR0FBRyxLQUFLLEVBQWtCLENBQUMsQ0FBQyxxQ0FBcUM7UUFDckUsY0FBUyxHQUFHLEtBQUssRUFBdUIsQ0FBQyxDQUFDLDZCQUE2QjtRQUN2RSxzQkFBaUIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7UUFFakcsZUFBZTtRQUNmLFdBQU0sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDL0IsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7S0FnQnBGO0lBZEMsd0VBQXdFO0lBQ3hFLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzlCLGtFQUFrRTtRQUNsRSxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDdEQsWUFBWTtRQUNwQix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0F6QlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsNHVCQ3RCaEMsdWxDQWtDQSwrRURqQlksWUFBWSw0SEFBRSxjQUFjLHMwQkFBRSxlQUFlOzsyRkFLNUMsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLGFBQWEsY0FDWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxtQkFHdkMsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIGNvbXB1dGVkLFxyXG4gIGlucHV0LFxyXG4gIHNpZ25hbCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uQ2hhbmdlcyxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhCdXR0b25Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRmFJY29uQ29tcG9uZW50IH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VuaS1hcnRpY2xlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIER4QnV0dG9uTW9kdWxlLCBGYUljb25Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmktYXJ0aWNsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdW5pLWFydGljbGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuaUFydGljbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8qIElucHV0cyAqL1xyXG4gIHJlYWRvbmx5IGNvbG9yID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpOyAvLyBDb2xvcmUgZGkgYmFzZSBkZWxsJ2FydGljb2xvXHJcbiAgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7IC8vIFRpdG9sbyBvcHppb25hbGUgZGVsbCdhcnRpY29sb1xyXG4gIHJlYWRvbmx5IGljb24gPSBpbnB1dDxJY29uRGVmaW5pdGlvbj4oKTsgLy8gSWNvbmEgb3B6aW9uYWxlIHBlciBsJ2ludGVzdGF6aW9uZVxyXG4gIHJlYWRvbmx5IHNldElzT3BlbiA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KCk7IC8vIFN0YXRvIGluaXppYWxlIGRpIGFwZXJ0dXJhXHJcbiAgcmVhZG9ubHkgaGVhZGVyQ2xvc2VCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vIFNlIG1vc3RyYXJlIGlsIGJ1dHRvbiBwZXIgY2hpdWRlcmUgYXJ0aWNsZVxyXG5cclxuICAvKiBWYXJpYWJsZXMgKi9cclxuICBpc09wZW4gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNIZWFkZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmljb24oKSB8fCB0aGlzLnRpdGxlKCkgfHwgdGhpcy5oZWFkZXJDbG9zZUJ1dHRvbigpKTtcclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGlmZWN5Y2xlIEhvb2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzZXRJc09wZW4gfSA9IGNoYW5nZXM7XHJcbiAgICAvLyBWZXJpZmljYSBzZSAnc2V0SXNPcGVuJyDDqCBjYW1iaWF0byBlIG5vbiDDqCBpbCBwcmltbyBjYW1iaWFtZW50b1xyXG4gICAgaWYgKHNldElzT3BlbiAmJiAhc2V0SXNPcGVuLmZpcnN0Q2hhbmdlICYmIHNldElzT3Blbi5jdXJyZW50VmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzT3Blbi5zZXQoc2V0SXNPcGVuLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNZXRvZGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUlzT3BlbigpOiB2b2lkIHtcclxuICAgIC8vIEludmVydGUgbG8gc3RhdG8gZGkgYXBlcnR1cmEvY2hpdXN1cmFcclxuICAgIHRoaXMuaXNPcGVuLnVwZGF0ZSgodmFsKSA9PiAhdmFsKTtcclxuICB9XHJcbn1cclxuIiwiPGFydGljbGVcbiAgY2xhc3M9XCJ1bmlfYXJ0aWNsZSBmbGV4IGgtZnVsbCBmbGV4LWNvbCByb3VuZGVkIGJvcmRlci0yIHAtNFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29sb3IoKSArICcyNidcIlxuICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiY29sb3IoKSArICczMydcIj5cbiAgPCEtLSBUaXRsZSAtLT5cbiAgQGlmIChpc0hlYWRlcigpKSB7XG4gICAgPGRpdiBjbGFzcz1cInVuaV9hcnRpY2xlX2hlYWRlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiIFtuZ0NsYXNzXT1cInsgJ21iLTQnOiBpc09wZW4oKSB9XCI+XG4gICAgICA8IS0tIEljb25hIG5lbGxhIHRlc3RhdGEsIHNlIHByZXNlbnRlIC0tPlxuICAgICAgQGlmIChpY29uKCk7IGFzIGljb24pIHtcbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJ1bmktYXJ0aWNsZS1oZWFkZXItaWNvblwiIFtpY29uXT1cImljb25cIj48L2ZhLWljb24+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gVGl0b2xvIG5lbGxhIHRlc3RhdGEsIHNlIHByZXNlbnRlIC0tPlxuICAgICAgQGlmICh0aXRsZSgpOyBhcyB0aXRsZSkge1xuICAgICAgICA8aDUgY2xhc3M9XCJ1bmlfYXJ0aWNsZV9oZWFkZXJfdGl0bGUgdHJ1bmNhdGUgdXBwZXJjYXNlXCI+e3sgdGl0bGUgfX08L2g1PlxuICAgICAgfVxuXG4gICAgICA8IS0tIEJvdHRvbmUgcGVyIGFwcmlyZS9jaGl1ZGVyZSBsJ2FydGljb2xvLCBzZSBwcmVzZW50ZSAtLT5cbiAgICAgIEBpZiAoaGVhZGVyQ2xvc2VCdXR0b24oKSkge1xuICAgICAgICA8ZHgtYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ1bmlfYXJ0aWNsZV9oZWFkZXJfYnV0dG9uIG1sLWF1dG9cIlxuICAgICAgICAgIFtpY29uXT1cImlzT3BlbigpID8gJ2Nsb3NlJyA6ICdleHBhbmRmb3JtJ1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlSXNPcGVuKClcIj5cbiAgICAgICAgPC9keC1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cblxuICA8IS0tIENvbnRlbnV0byBkZWxsJ2FydGljb2xvLCB2aXNpYmlsZSBzb2xvIHNlIGFwZXJ0byAtLT5cbiAgQGlmIChpc09wZW4oKSkge1xuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgfVxuPC9hcnRpY2xlPlxuXG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
3
|
+
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "devextreme-angular/ui/button";
|
|
6
|
+
export class UniHeaderComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
/* Input */
|
|
9
|
+
this.title = input.required();
|
|
10
|
+
this.version = input.required();
|
|
11
|
+
this.pathBrandLogo = input.required();
|
|
12
|
+
this.pathAppLogo = input(undefined);
|
|
13
|
+
this.sideMenu = input(false);
|
|
14
|
+
/* Output */
|
|
15
|
+
this.evtToggleMenu = output();
|
|
16
|
+
}
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniHeaderComponent, isStandalone: true, selector: "uni-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, version: { classPropertyName: "version", publicName: "version", isSignal: true, isRequired: true, transformFunction: null }, pathBrandLogo: { classPropertyName: "pathBrandLogo", publicName: "pathBrandLogo", isSignal: true, isRequired: true, transformFunction: null }, pathAppLogo: { classPropertyName: "pathAppLogo", publicName: "pathAppLogo", isSignal: true, isRequired: false, transformFunction: null }, sideMenu: { classPropertyName: "sideMenu", publicName: "sideMenu", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { evtToggleMenu: "evtToggleMenu" }, ngImport: i0, template: "<header id=\"uni-header\">\n <div>\n <!-- app logo -->\n @if (pathAppLogo(); as pathAppLogo) {\n <img id=\"header-img-app\" [src]=\"pathAppLogo\" alt=\"App logo\" />\n }\n\n <!-- info -->\n <div id=\"header-info\">\n <p>{{ title() }}</p>\n <p>{{ version() }}</p>\n </div>\n\n <!-- brand logo -->\n <img id=\"header-img-brand\" [src]=\"pathBrandLogo()\" alt=\"Brand logo\" />\n\n <!-- button menu -->\n @if (sideMenu()) {\n <dx-button [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\"></dx-button>\n }\n </div>\n</header>\n\n", styles: [":host{display:block}#uni-header{position:fixed;top:0;left:0;height:calc(60px + var(--padding-m));width:100%;padding:var(--padding-m);background-color:#36363f;overflow:hidden;z-index:999}#uni-header>div{display:grid;grid-template-rows:1fr;grid-template-columns:40px 1fr auto min-content;align-items:center;gap:1rem;padding:calc(var(--padding-m) / 2);background-color:#52525b99;border-radius:.25rem;box-shadow:#00000059 0 5px 5px}#uni-header>div #header-info{display:flex;flex-direction:column;justify-content:center;text-wrap:nowrap}#uni-header>div #header-info p:first-child{font-size:20px;line-height:28px;font-weight:500;text-transform:uppercase}#uni-header>div #header-info p:last-child{font-size:12px;line-height:12px;opacity:.65}#uni-header>div #header-img-app,#uni-header>div #header-img-brand{height:40px;object-fit:contain}@media (max-resolution: 1dppx){#uni-header>div{grid-template-columns:30px 1fr auto min-content}#uni-header>div #header-img-app,#uni-header>div #header-img-brand{height:31px}#uni-header>div #header-info p:first-child{font-size:16px;line-height:21px}#uni-header>div #header-info p:last-child{font-size:10px;line-height:10px}}::ng-deep .theme-light #uni-header{background-color:#0284c70d}::ng-deep .theme-light #uni-header>div{background-color:#0284c799!important;box-shadow:#0284c759 0 5px 5px!important}::ng-deep .theme-light #uni-header>div,::ng-deep .theme-light #uni-header>div i:before{color:#fff}:host ::ng-deep .dx-button{height:23px;min-width:23px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:23px}\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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniHeaderComponent, decorators: [{
|
|
21
|
+
type: Component,
|
|
22
|
+
args: [{ selector: 'uni-header', standalone: true, imports: [CommonModule, DxButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<header id=\"uni-header\">\n <div>\n <!-- app logo -->\n @if (pathAppLogo(); as pathAppLogo) {\n <img id=\"header-img-app\" [src]=\"pathAppLogo\" alt=\"App logo\" />\n }\n\n <!-- info -->\n <div id=\"header-info\">\n <p>{{ title() }}</p>\n <p>{{ version() }}</p>\n </div>\n\n <!-- brand logo -->\n <img id=\"header-img-brand\" [src]=\"pathBrandLogo()\" alt=\"Brand logo\" />\n\n <!-- button menu -->\n @if (sideMenu()) {\n <dx-button [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\"></dx-button>\n }\n </div>\n</header>\n\n", styles: [":host{display:block}#uni-header{position:fixed;top:0;left:0;height:calc(60px + var(--padding-m));width:100%;padding:var(--padding-m);background-color:#36363f;overflow:hidden;z-index:999}#uni-header>div{display:grid;grid-template-rows:1fr;grid-template-columns:40px 1fr auto min-content;align-items:center;gap:1rem;padding:calc(var(--padding-m) / 2);background-color:#52525b99;border-radius:.25rem;box-shadow:#00000059 0 5px 5px}#uni-header>div #header-info{display:flex;flex-direction:column;justify-content:center;text-wrap:nowrap}#uni-header>div #header-info p:first-child{font-size:20px;line-height:28px;font-weight:500;text-transform:uppercase}#uni-header>div #header-info p:last-child{font-size:12px;line-height:12px;opacity:.65}#uni-header>div #header-img-app,#uni-header>div #header-img-brand{height:40px;object-fit:contain}@media (max-resolution: 1dppx){#uni-header>div{grid-template-columns:30px 1fr auto min-content}#uni-header>div #header-img-app,#uni-header>div #header-img-brand{height:31px}#uni-header>div #header-info p:first-child{font-size:16px;line-height:21px}#uni-header>div #header-info p:last-child{font-size:10px;line-height:10px}}::ng-deep .theme-light #uni-header{background-color:#0284c70d}::ng-deep .theme-light #uni-header>div{background-color:#0284c799!important;box-shadow:#0284c759 0 5px 5px!important}::ng-deep .theme-light #uni-header>div,::ng-deep .theme-light #uni-header>div i:before{color:#fff}:host ::ng-deep .dx-button{height:23px;min-width:23px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:23px}\n"] }]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmktY29tcG9uZW50LXR3L3NyYy9saWIvdW5pLWhlYWRlci91bmktaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktaGVhZGVyL3VuaS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVU5RCxNQUFNLE9BQU8sa0JBQWtCO0lBUi9CO1FBU0UsV0FBVztRQUNYLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDakMsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUN6QyxnQkFBVyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVqQyxZQUFZO1FBQ1osa0JBQWEsR0FBRyxNQUFNLEVBQVEsQ0FBQztLQUNoQzs4R0FWWSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw2d0JDWi9CLGdsQkF1QkEsd2xERGhCWSxZQUFZLDhCQUFFLGNBQWM7OzJGQUszQixrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbnB1dCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER4QnV0dG9uTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2J1dHRvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VuaS1oZWFkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHhCdXR0b25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmktaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91bmktaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVbmlIZWFkZXJDb21wb25lbnQge1xyXG4gIC8qIElucHV0ICovXHJcbiAgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgdmVyc2lvbiA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICBwYXRoQnJhbmRMb2dvID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xyXG4gIHBhdGhBcHBMb2dvID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHNpZGVNZW51ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKiBPdXRwdXQgKi9cclxuICBldnRUb2dnbGVNZW51ID0gb3V0cHV0PHRydWU+KCk7XHJcbn1cclxuIiwiPGhlYWRlciBpZD1cInVuaS1oZWFkZXJcIj5cbiAgPGRpdj5cbiAgICA8IS0tIGFwcCBsb2dvICAtLT5cbiAgICBAaWYgKHBhdGhBcHBMb2dvKCk7IGFzIHBhdGhBcHBMb2dvKSB7XG4gICAgICA8aW1nIGlkPVwiaGVhZGVyLWltZy1hcHBcIiBbc3JjXT1cInBhdGhBcHBMb2dvXCIgYWx0PVwiQXBwIGxvZ29cIiAvPlxuICAgIH1cblxuICAgIDwhLS0gaW5mbyAgLS0+XG4gICAgPGRpdiBpZD1cImhlYWRlci1pbmZvXCI+XG4gICAgICA8cD57eyB0aXRsZSgpIH19PC9wPlxuICAgICAgPHA+e3sgdmVyc2lvbigpIH19PC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBicmFuZCBsb2dvICAtLT5cbiAgICA8aW1nIGlkPVwiaGVhZGVyLWltZy1icmFuZFwiIFtzcmNdPVwicGF0aEJyYW5kTG9nbygpXCIgYWx0PVwiQnJhbmQgbG9nb1wiIC8+XG5cbiAgICA8IS0tIGJ1dHRvbiBtZW51ICAtLT5cbiAgICBAaWYgKHNpZGVNZW51KCkpIHtcbiAgICAgIDxkeC1idXR0b24gW2ljb25dPVwiJ21lbnUnXCIgKG9uQ2xpY2spPVwiZXZ0VG9nZ2xlTWVudS5lbWl0KHRydWUpXCI+PC9keC1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbjwvaGVhZGVyPlxuXG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
|
|
3
|
+
import { Location } from '@angular/common';
|
|
4
|
+
import { Router } from '@angular/router';
|
|
5
|
+
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
6
|
+
import { DxButtonModule, DxPopupModule, DxTextBoxModule } from 'devextreme-angular';
|
|
7
|
+
import { UNIAuthService } from 'uni-service/auth';
|
|
8
|
+
import { UNIToastService } from 'uni-service/toast';
|
|
9
|
+
import { UNITranslateService } from 'uni-service/translate';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "devextreme-angular";
|
|
12
|
+
import * as i2 from "@angular/forms";
|
|
13
|
+
import * as i3 from "devextreme-angular/ui/button";
|
|
14
|
+
export class UniLoginModalComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
/* Service */
|
|
17
|
+
this.router = inject(Router);
|
|
18
|
+
this.location = inject(Location);
|
|
19
|
+
this.authService = inject(UNIAuthService);
|
|
20
|
+
this.toastService = inject(UNIToastService);
|
|
21
|
+
this.translateService = inject(UNITranslateService);
|
|
22
|
+
/* Input & output */
|
|
23
|
+
this.visibile = input(true);
|
|
24
|
+
this.routeHome = input();
|
|
25
|
+
this.enableGoBack = input.required();
|
|
26
|
+
/* Form */
|
|
27
|
+
this.loginForm = new FormGroup({
|
|
28
|
+
username: new FormControl('', { nonNullable: true, validators: Validators.required }),
|
|
29
|
+
password: new FormControl('', { nonNullable: true, validators: Validators.required }),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/* ------------------------ Methods ------------------------ */
|
|
33
|
+
login() {
|
|
34
|
+
this.authService.login$(this.loginForm.getRawValue()).subscribe(() => {
|
|
35
|
+
if (this.routeHome())
|
|
36
|
+
this.router.navigate([this.routeHome]);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
logout() {
|
|
40
|
+
this.authService.logout$().subscribe();
|
|
41
|
+
}
|
|
42
|
+
onHiding() {
|
|
43
|
+
if (this.enableGoBack())
|
|
44
|
+
this.location.back();
|
|
45
|
+
}
|
|
46
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniLoginModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UniLoginModalComponent, isStandalone: true, selector: "uni-login-modal", inputs: { visibile: { classPropertyName: "visibile", publicName: "visibile", isSignal: true, isRequired: false, transformFunction: null }, routeHome: { classPropertyName: "routeHome", publicName: "routeHome", isSignal: true, isRequired: false, transformFunction: null }, enableGoBack: { classPropertyName: "enableGoBack", publicName: "enableGoBack", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<dx-popup\n[wrapperAttr]=\"{ id: 'loginPopup' }\"\n[width]=\"'40%'\"\n[minWidth]=\"400\"\n[maxWidth]=\"700\"\n[height]=\"500\"\n[visible]=\"visibile()\"\n[showTitle]=\"true\"\n[title]=\"'Login'\"\n[dragEnabled]=\"false\"\n[showCloseButton]=\"true\"\n[hideOnOutsideClick]=\"false\"\n(onHiding)=\"onHiding()\">\n<section>\n <img src=\"../../../assets/images/logo/logo_trasparente.png\" alt=\"Logo\" />\n <p>UNITEC</p>\n @if (authService.user(); as user) {\n <div>Utente: {{ user.username }}</div>\n <dx-button\n id=\"logoutButton\"\n stylingMode=\"contained\"\n [text]=\"'Logout'\"\n (onClick)=\"logout()\"></dx-button>\n } @else {\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"login()\">\n <dx-text-box\n [placeholder]=\"'User'\"\n stylingMode=\"outlined\"\n formControlName=\"username\"\n [inputAttr]=\"{ 'aria-label': 'User' }\"></dx-text-box>\n <dx-text-box\n [placeholder]=\"'Password'\"\n mode=\"password\"\n stylingMode=\"outlined\"\n formControlName=\"password\"\n [inputAttr]=\"{ 'aria-label': 'Password' }\"></dx-text-box>\n <dx-button\n id=\"loginSubmitButton\"\n stylingMode=\"contained\"\n [text]=\"'Login'\"\n [useSubmitBehavior]=\"true\"\n [disabled]=\"loginForm.invalid\"></dx-button>\n </form>\n }\n</section>\n</dx-popup>\n", styles: [":host{display:block}::ng-deep #loginPopup .dx-popup-content{display:flex;justify-content:center;align-items:center}section{width:60%;display:flex;align-items:center;flex-direction:column;gap:1.5rem}img{height:8rem}form{width:100%;display:flex;flex-direction:column;gap:1rem}form dx-button{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxPopupModule }, { kind: "component", type: i1.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "enableBodyScroll", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "enableBodyScrollChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DxTextBoxModule }, { kind: "component", type: i1.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isDirty", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isDirtyChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "ngmodule", type: DxButtonModule }, { kind: "component", type: i3.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UniLoginModalComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{ selector: 'uni-login-modal', standalone: true, imports: [CommonModule, DxPopupModule, ReactiveFormsModule, DxTextBoxModule, DxButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dx-popup\n[wrapperAttr]=\"{ id: 'loginPopup' }\"\n[width]=\"'40%'\"\n[minWidth]=\"400\"\n[maxWidth]=\"700\"\n[height]=\"500\"\n[visible]=\"visibile()\"\n[showTitle]=\"true\"\n[title]=\"'Login'\"\n[dragEnabled]=\"false\"\n[showCloseButton]=\"true\"\n[hideOnOutsideClick]=\"false\"\n(onHiding)=\"onHiding()\">\n<section>\n <img src=\"../../../assets/images/logo/logo_trasparente.png\" alt=\"Logo\" />\n <p>UNITEC</p>\n @if (authService.user(); as user) {\n <div>Utente: {{ user.username }}</div>\n <dx-button\n id=\"logoutButton\"\n stylingMode=\"contained\"\n [text]=\"'Logout'\"\n (onClick)=\"logout()\"></dx-button>\n } @else {\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"login()\">\n <dx-text-box\n [placeholder]=\"'User'\"\n stylingMode=\"outlined\"\n formControlName=\"username\"\n [inputAttr]=\"{ 'aria-label': 'User' }\"></dx-text-box>\n <dx-text-box\n [placeholder]=\"'Password'\"\n mode=\"password\"\n stylingMode=\"outlined\"\n formControlName=\"password\"\n [inputAttr]=\"{ 'aria-label': 'Password' }\"></dx-text-box>\n <dx-button\n id=\"loginSubmitButton\"\n stylingMode=\"contained\"\n [text]=\"'Login'\"\n [useSubmitBehavior]=\"true\"\n [disabled]=\"loginForm.invalid\"></dx-button>\n </form>\n }\n</section>\n</dx-popup>\n", styles: [":host{display:block}::ng-deep #loginPopup .dx-popup-content{display:flex;justify-content:center;align-items:center}section{width:60%;display:flex;align-items:center;flex-direction:column;gap:1.5rem}img{height:8rem}form{width:100%;display:flex;flex-direction:column;gap:1rem}form dx-button{width:100%}\n"] }]
|
|
52
|
+
}] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWxvZ2luLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktbG9naW4tbW9kYWwvdW5pLWxvZ2luLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktbG9naW4tbW9kYWwvdW5pLWxvZ2luLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQWU1RCxNQUFNLE9BQU8sc0JBQXNCO0lBUm5DO1FBU0UsYUFBYTtRQUNKLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RCxvQkFBb0I7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNoQyxjQUFTLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDNUIsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7UUFFekMsVUFBVTtRQUNNLGNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBd0Q7WUFDL0YsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3RGLENBQUMsQ0FBQztLQWdCSjtJQWRDLCtEQUErRDtJQUN4RCxLQUFLO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hELENBQUM7OEdBaENVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdlQ3ZCbkMsZzNDQThDQSx1V0Q1QlksWUFBWSw4QkFBRSxhQUFhLDZuREFBRSxtQkFBbUIsNHJCQUFFLGVBQWUsNnNEQUFFLGNBQWM7OzJGQUtoRixzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLG1CQUczRSx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER4QnV0dG9uTW9kdWxlLCBEeFBvcHVwTW9kdWxlLCBEeFRleHRCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBVTklBdXRoU2VydmljZSB9IGZyb20gJ3VuaS1zZXJ2aWNlL2F1dGgnO1xyXG5pbXBvcnQgeyBVTklUb2FzdFNlcnZpY2UgfSBmcm9tICd1bmktc2VydmljZS90b2FzdCc7XHJcbmltcG9ydCB7IFVOSVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICd1bmktc2VydmljZS90cmFuc2xhdGUnO1xyXG5cclxuZXhwb3J0IHR5cGUgTG9naW5Gb3JtID0ge1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmQ6IHN0cmluZztcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndW5pLWxvZ2luLW1vZGFsJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIER4UG9wdXBNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIER4VGV4dEJveE1vZHVsZSwgRHhCdXR0b25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91bmktbG9naW4tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VuaS1sb2dpbi1tb2RhbC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5pTG9naW5Nb2RhbENvbXBvbmVudCB7XHJcbiAgLyogU2VydmljZSAqL1xyXG4gIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChVTklBdXRoU2VydmljZSk7XHJcbiAgcmVhZG9ubHkgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KFVOSVRvYXN0U2VydmljZSk7XHJcbiAgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChVTklUcmFuc2xhdGVTZXJ2aWNlKTtcclxuXHJcbiAgLyogSW5wdXQgJiBvdXRwdXQgKi9cclxuICB2aXNpYmlsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJvdXRlSG9tZSA9IGlucHV0PHN0cmluZz4oKTtcclxuICBlbmFibGVHb0JhY2sgPSBpbnB1dC5yZXF1aXJlZDxib29sZWFuPigpO1xyXG5cclxuICAvKiBGb3JtICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2luRm9ybSA9IG5ldyBGb3JtR3JvdXA8eyBbSyBpbiBrZXlvZiBMb2dpbkZvcm1dOiBGb3JtQ29udHJvbDxMb2dpbkZvcm1bS10+IH0+KHtcclxuICAgIHVzZXJuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUsIHZhbGlkYXRvcnM6IFZhbGlkYXRvcnMucmVxdWlyZWQgfSksXHJcbiAgICBwYXNzd29yZDogbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlLCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JzLnJlcXVpcmVkIH0pLFxyXG4gIH0pO1xyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwdWJsaWMgbG9naW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luJCh0aGlzLmxvZ2luRm9ybS5nZXRSYXdWYWx1ZSgpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5yb3V0ZUhvbWUoKSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucm91dGVIb21lXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCQoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkhpZGluZygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVuYWJsZUdvQmFjaygpKSB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICB9XHJcbn1cclxuIiwiPGR4LXBvcHVwXG5bd3JhcHBlckF0dHJdPVwieyBpZDogJ2xvZ2luUG9wdXAnIH1cIlxuW3dpZHRoXT1cIic0MCUnXCJcblttaW5XaWR0aF09XCI0MDBcIlxuW21heFdpZHRoXT1cIjcwMFwiXG5baGVpZ2h0XT1cIjUwMFwiXG5bdmlzaWJsZV09XCJ2aXNpYmlsZSgpXCJcbltzaG93VGl0bGVdPVwidHJ1ZVwiXG5bdGl0bGVdPVwiJ0xvZ2luJ1wiXG5bZHJhZ0VuYWJsZWRdPVwiZmFsc2VcIlxuW3Nob3dDbG9zZUJ1dHRvbl09XCJ0cnVlXCJcbltoaWRlT25PdXRzaWRlQ2xpY2tdPVwiZmFsc2VcIlxuKG9uSGlkaW5nKT1cIm9uSGlkaW5nKClcIj5cbjxzZWN0aW9uPlxuICA8aW1nIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvbG9nby9sb2dvX3RyYXNwYXJlbnRlLnBuZ1wiIGFsdD1cIkxvZ29cIiAvPlxuICA8cD5VTklURUM8L3A+XG4gIEBpZiAoYXV0aFNlcnZpY2UudXNlcigpOyBhcyB1c2VyKSB7XG4gICAgPGRpdj5VdGVudGU6IHt7IHVzZXIudXNlcm5hbWUgfX08L2Rpdj5cbiAgICA8ZHgtYnV0dG9uXG4gICAgICBpZD1cImxvZ291dEJ1dHRvblwiXG4gICAgICBzdHlsaW5nTW9kZT1cImNvbnRhaW5lZFwiXG4gICAgICBbdGV4dF09XCInTG9nb3V0J1wiXG4gICAgICAob25DbGljayk9XCJsb2dvdXQoKVwiPjwvZHgtYnV0dG9uPlxuICB9IEBlbHNlIHtcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImxvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJsb2dpbigpXCI+XG4gICAgICA8ZHgtdGV4dC1ib3hcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidVc2VyJ1wiXG4gICAgICAgIHN0eWxpbmdNb2RlPVwib3V0bGluZWRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1c2VybmFtZVwiXG4gICAgICAgIFtpbnB1dEF0dHJdPVwieyAnYXJpYS1sYWJlbCc6ICdVc2VyJyB9XCI+PC9keC10ZXh0LWJveD5cbiAgICAgIDxkeC10ZXh0LWJveFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1Bhc3N3b3JkJ1wiXG4gICAgICAgIG1vZGU9XCJwYXNzd29yZFwiXG4gICAgICAgIHN0eWxpbmdNb2RlPVwib3V0bGluZWRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZFwiXG4gICAgICAgIFtpbnB1dEF0dHJdPVwieyAnYXJpYS1sYWJlbCc6ICdQYXNzd29yZCcgfVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICA8ZHgtYnV0dG9uXG4gICAgICAgIGlkPVwibG9naW5TdWJtaXRCdXR0b25cIlxuICAgICAgICBzdHlsaW5nTW9kZT1cImNvbnRhaW5lZFwiXG4gICAgICAgIFt0ZXh0XT1cIidMb2dpbidcIlxuICAgICAgICBbdXNlU3VibWl0QmVoYXZpb3JdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2dpbkZvcm0uaW52YWxpZFwiPjwvZHgtYnV0dG9uPlxuICAgIDwvZm9ybT5cbiAgfVxuPC9zZWN0aW9uPlxuPC9keC1wb3B1cD5cbiJdfQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
|
|
3
|
+
import { DxPieChartModule } from 'devextreme-angular/ui/pie-chart';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "devextreme-angular/ui/pie-chart";
|
|
6
|
+
import * as i2 from "devextreme-angular/core";
|
|
7
|
+
export class UNIPieChartComponent {
|
|
8
|
+
/* ----------------------- Constructor & lifecycle --------------------------- */
|
|
9
|
+
constructor() {
|
|
10
|
+
/* Input & output */
|
|
11
|
+
this.chartDataSource = input.required();
|
|
12
|
+
this.chartPercentage = input(undefined);
|
|
13
|
+
this.chartType = input('pie');
|
|
14
|
+
this.chartDiameter = input(1);
|
|
15
|
+
this.chartInnerRadius = input(0.7);
|
|
16
|
+
this.tooltipIsEnabled = input(true);
|
|
17
|
+
this.legendPosition = input('none');
|
|
18
|
+
this.legendWithValue = input(false);
|
|
19
|
+
this.legendGap = input('12px');
|
|
20
|
+
this.uom = input('');
|
|
21
|
+
/* Variables */
|
|
22
|
+
this.paletteColor = computed(() => this.chartDataSource().map((data) => data.color));
|
|
23
|
+
this.gridColumn = computed(() => {
|
|
24
|
+
switch (this.legendPosition()) {
|
|
25
|
+
case 'right':
|
|
26
|
+
return '1fr min-content';
|
|
27
|
+
case 'left':
|
|
28
|
+
return 'min-content 1fr';
|
|
29
|
+
default:
|
|
30
|
+
return '1fr';
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
this.gridRow = computed(() => {
|
|
34
|
+
switch (this.legendPosition()) {
|
|
35
|
+
case 'top':
|
|
36
|
+
return 'min-content 1fr';
|
|
37
|
+
case 'bottom':
|
|
38
|
+
return '1fr min-content';
|
|
39
|
+
default:
|
|
40
|
+
return '1fr';
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
this.customizeTooltip = this.customizeTooltip.bind(this);
|
|
44
|
+
}
|
|
45
|
+
/* -----------------------Methods--------------------------- */
|
|
46
|
+
/* Funzione usata per personalizzare i tooltips del grafico */
|
|
47
|
+
customizeTooltip(pointInfo) {
|
|
48
|
+
const { argumentText, valueText } = pointInfo;
|
|
49
|
+
return {
|
|
50
|
+
text: `${argumentText}<br/>${valueText} ${this.uom()}`,
|
|
51
|
+
color: 'rgba(149, 157, 165, 0.5)',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UNIPieChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: UNIPieChartComponent, isStandalone: true, selector: "uni-pie-chart", inputs: { chartDataSource: { classPropertyName: "chartDataSource", publicName: "chartDataSource", isSignal: true, isRequired: true, transformFunction: null }, chartPercentage: { classPropertyName: "chartPercentage", publicName: "chartPercentage", isSignal: true, isRequired: false, transformFunction: null }, chartType: { classPropertyName: "chartType", publicName: "chartType", isSignal: true, isRequired: false, transformFunction: null }, chartDiameter: { classPropertyName: "chartDiameter", publicName: "chartDiameter", isSignal: true, isRequired: false, transformFunction: null }, chartInnerRadius: { classPropertyName: "chartInnerRadius", publicName: "chartInnerRadius", isSignal: true, isRequired: false, transformFunction: null }, tooltipIsEnabled: { classPropertyName: "tooltipIsEnabled", publicName: "tooltipIsEnabled", isSignal: true, isRequired: false, transformFunction: null }, legendPosition: { classPropertyName: "legendPosition", publicName: "legendPosition", isSignal: true, isRequired: false, transformFunction: null }, legendWithValue: { classPropertyName: "legendWithValue", publicName: "legendWithValue", isSignal: true, isRequired: false, transformFunction: null }, legendGap: { classPropertyName: "legendGap", publicName: "legendGap", isSignal: true, isRequired: false, transformFunction: null }, uom: { classPropertyName: "uom", publicName: "uom", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"container-pie-chart\"\n [style.display]=\"legendPosition() === 'none' ? 'block' : 'grid'\"\n [style.gridTemplateRows]=\"gridRow()\"\n [style.gridTemplateColumns]=\"gridColumn()\">\n <dx-pie-chart\n [style.order]=\"legendPosition() === 'top' || legendPosition() === 'left' ? 1 : 0\"\n style=\"height: 100%; width: 100%; overflow: hidden\"\n [type]=\"chartType()\"\n [dataSource]=\"chartDataSource()\"\n resolveLabelOverlapping=\"shift\"\n [palette]=\"paletteColor()\"\n [diameter]=\"chartDiameter()\"\n [innerRadius]=\"chartInnerRadius()\"\n [redrawOnResize]=\"true\"\n [centerTemplate]=\"chartPercentage() !== undefined ? 'centerTemplate' : undefined\"\n [series]=\"{\n argumentField: 'name',\n format: 'fixedPoint',\n valueField: 'value',\n hoverStyle: 'none',\n label: { visible: false },\n }\"\n [legend]=\"{ visible: false }\"\n [tooltip]=\"{ enabled: tooltipIsEnabled(), customizeTooltip: customizeTooltip }\">\n <svg *dxTemplate=\"let pieChart of 'centerTemplate'\">\n <text text-anchor=\"middle\" style=\"font-size: 28px\" x=\"100\" y=\"120\" fill=\"#fff\">\n {{ chartPercentage() }}%\n </text>\n </svg>\n </dx-pie-chart>\n\n @if (legendPosition() !== 'none') {\n <ul\n class=\"container-legend\"\n [style.flexDirection]=\"\n legendPosition() === 'top' || legendPosition() === 'bottom' ? 'row' : 'column'\n \"\n [style.gap]=\"legendGap()\">\n @for (item of chartDataSource(); track $index) {\n <li>\n <span class=\"square\" [style.backgroundColor]=\"item.color\"></span>\n {{ legendWithValue() ? item.name + ' ' + item.value + ' ' + uom() : item.name }}\n </li>\n }\n </ul>\n }\n</div>\n\n", styles: [".container-pie-chart{height:100%;width:100%;gap:16px}.container-legend{display:flex;align-items:flex-start;justify-content:center;flex-wrap:wrap}.container-legend li{display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;align-items:center;gap:6px;text-wrap:nowrap}.square{display:block;height:12px;width:12px;border-radius:2.5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DxPieChartModule }, { kind: "component", type: i1.DxPieChartComponent, selector: "dx-pie-chart", inputs: ["adaptiveLayout", "animation", "annotations", "centerTemplate", "commonAnnotationSettings", "commonSeriesSettings", "customizeAnnotation", "customizeLabel", "customizePoint", "dataSource", "diameter", "disabled", "elementAttr", "export", "innerRadius", "legend", "loadingIndicator", "margin", "minDiameter", "palette", "paletteExtensionMode", "pathModified", "pointSelectionMode", "redrawOnResize", "resolveLabelOverlapping", "rtlEnabled", "segmentsDirection", "series", "seriesTemplate", "size", "sizeGroup", "startAngle", "theme", "title", "tooltip", "type"], outputs: ["onDisposing", "onDone", "onDrawn", "onExported", "onExporting", "onFileSaving", "onIncidentOccurred", "onInitialized", "onLegendClick", "onOptionChanged", "onPointClick", "onPointHoverChanged", "onPointSelectionChanged", "onTooltipHidden", "onTooltipShown", "adaptiveLayoutChange", "animationChange", "annotationsChange", "centerTemplateChange", "commonAnnotationSettingsChange", "commonSeriesSettingsChange", "customizeAnnotationChange", "customizeLabelChange", "customizePointChange", "dataSourceChange", "diameterChange", "disabledChange", "elementAttrChange", "exportChange", "innerRadiusChange", "legendChange", "loadingIndicatorChange", "marginChange", "minDiameterChange", "paletteChange", "paletteExtensionModeChange", "pathModifiedChange", "pointSelectionModeChange", "redrawOnResizeChange", "resolveLabelOverlappingChange", "rtlEnabledChange", "segmentsDirectionChange", "seriesChange", "seriesTemplateChange", "sizeChange", "sizeGroupChange", "startAngleChange", "themeChange", "titleChange", "tooltipChange", "typeChange"] }, { kind: "directive", type: i2.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
56
|
+
}
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UNIPieChartComponent, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{ selector: 'uni-pie-chart', standalone: true, imports: [CommonModule, DxPieChartModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"container-pie-chart\"\n [style.display]=\"legendPosition() === 'none' ? 'block' : 'grid'\"\n [style.gridTemplateRows]=\"gridRow()\"\n [style.gridTemplateColumns]=\"gridColumn()\">\n <dx-pie-chart\n [style.order]=\"legendPosition() === 'top' || legendPosition() === 'left' ? 1 : 0\"\n style=\"height: 100%; width: 100%; overflow: hidden\"\n [type]=\"chartType()\"\n [dataSource]=\"chartDataSource()\"\n resolveLabelOverlapping=\"shift\"\n [palette]=\"paletteColor()\"\n [diameter]=\"chartDiameter()\"\n [innerRadius]=\"chartInnerRadius()\"\n [redrawOnResize]=\"true\"\n [centerTemplate]=\"chartPercentage() !== undefined ? 'centerTemplate' : undefined\"\n [series]=\"{\n argumentField: 'name',\n format: 'fixedPoint',\n valueField: 'value',\n hoverStyle: 'none',\n label: { visible: false },\n }\"\n [legend]=\"{ visible: false }\"\n [tooltip]=\"{ enabled: tooltipIsEnabled(), customizeTooltip: customizeTooltip }\">\n <svg *dxTemplate=\"let pieChart of 'centerTemplate'\">\n <text text-anchor=\"middle\" style=\"font-size: 28px\" x=\"100\" y=\"120\" fill=\"#fff\">\n {{ chartPercentage() }}%\n </text>\n </svg>\n </dx-pie-chart>\n\n @if (legendPosition() !== 'none') {\n <ul\n class=\"container-legend\"\n [style.flexDirection]=\"\n legendPosition() === 'top' || legendPosition() === 'bottom' ? 'row' : 'column'\n \"\n [style.gap]=\"legendGap()\">\n @for (item of chartDataSource(); track $index) {\n <li>\n <span class=\"square\" [style.backgroundColor]=\"item.color\"></span>\n {{ legendWithValue() ? item.name + ' ' + item.value + ' ' + uom() : item.name }}\n </li>\n }\n </ul>\n }\n</div>\n\n", styles: [".container-pie-chart{height:100%;width:100%;gap:16px}.container-legend{display:flex;align-items:flex-start;justify-content:center;flex-wrap:wrap}.container-legend li{display:grid;grid-template-rows:1fr;grid-template-columns:min-content 1fr;align-items:center;gap:6px;text-wrap:nowrap}.square{display:block;height:12px;width:12px;border-radius:2.5px}\n"] }]
|
|
60
|
+
}], ctorParameters: () => [] });
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLXBpZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmktY29tcG9uZW50LXR3L3NyYy9saWIvdW5pLXBpZS1jaGFydC91bmktcGllLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktcGllLWNoYXJ0L3VuaS1waWUtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQWlCbkUsTUFBTSxPQUFPLG9CQUFvQjtJQW9DL0IsaUZBQWlGO0lBQ2pGO1FBcENBLG9CQUFvQjtRQUNwQixvQkFBZSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDdEQsb0JBQWUsR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELGNBQVMsR0FBRyxLQUFLLENBQWUsS0FBSyxDQUFDLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMscUJBQWdCLEdBQUcsS0FBSyxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLHFCQUFnQixHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLEtBQUssQ0FBK0MsTUFBTSxDQUFDLENBQUM7UUFDN0Usb0JBQWUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDeEMsY0FBUyxHQUFHLEtBQUssQ0FBUyxNQUFNLENBQUMsQ0FBQztRQUNsQyxRQUFHLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLGVBQWU7UUFDZixpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QixRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUM5QixLQUFLLE9BQU87b0JBQ1YsT0FBTyxpQkFBaUIsQ0FBQztnQkFDM0IsS0FBSyxNQUFNO29CQUNULE9BQU8saUJBQWlCLENBQUM7Z0JBQzNCO29CQUNFLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RCLFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQzlCLEtBQUssS0FBSztvQkFDUixPQUFPLGlCQUFpQixDQUFDO2dCQUMzQixLQUFLLFFBQVE7b0JBQ1gsT0FBTyxpQkFBaUIsQ0FBQztnQkFDM0I7b0JBQ0UsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBSUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELCtEQUErRDtJQUMvRCw4REFBOEQ7SUFDdkQsZ0JBQWdCLENBQUMsU0FBc0Q7UUFDNUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDOUMsT0FBTztZQUNMLElBQUksRUFBRSxHQUFHLFlBQVksUUFBUSxTQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RELEtBQUssRUFBRSwwQkFBMEI7U0FDbEMsQ0FBQztJQUNKLENBQUM7OEdBakRVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHErQ0NuQmpDLDB2REFpREEsd1pEbkNZLFlBQVksOEJBQUUsZ0JBQWdCOzsyRkFLN0Isb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsbUJBR3hCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhQaWVDaGFydE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9waWUtY2hhcnQnO1xyXG5pbXBvcnQgeyBQaWVDaGFydFR5cGUgfSBmcm9tICdkZXZleHRyZW1lL3Zpei9waWVfY2hhcnRfdHlwZXMnO1xyXG5cclxuZXhwb3J0IHR5cGUgQ2hhcnREYXRhU291cmNlID0ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VuaS1waWUtY2hhcnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHhQaWVDaGFydE1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuaS1waWUtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VuaS1waWUtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVOSVBpZUNoYXJ0Q29tcG9uZW50IHtcclxuICAvKiBJbnB1dCAmIG91dHB1dCAqL1xyXG4gIGNoYXJ0RGF0YVNvdXJjZSA9IGlucHV0LnJlcXVpcmVkPENoYXJ0RGF0YVNvdXJjZVtdPigpO1xyXG4gIGNoYXJ0UGVyY2VudGFnZSA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBjaGFydFR5cGUgPSBpbnB1dDxQaWVDaGFydFR5cGU+KCdwaWUnKTtcclxuICBjaGFydERpYW1ldGVyID0gaW5wdXQ8bnVtYmVyPigxKTtcclxuICBjaGFydElubmVyUmFkaXVzID0gaW5wdXQ8bnVtYmVyPigwLjcpO1xyXG4gIHRvb2x0aXBJc0VuYWJsZWQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBsZWdlbmRQb3NpdGlvbiA9IGlucHV0PCdyaWdodCcgfCAnbGVmdCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ25vbmUnPignbm9uZScpO1xyXG4gIGxlZ2VuZFdpdGhWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBsZWdlbmRHYXAgPSBpbnB1dDxzdHJpbmc+KCcxMnB4Jyk7XHJcbiAgdW9tID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblxyXG4gIC8qIFZhcmlhYmxlcyAqL1xyXG4gIHBhbGV0dGVDb2xvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY2hhcnREYXRhU291cmNlKCkubWFwKChkYXRhKSA9PiBkYXRhLmNvbG9yKSk7XHJcbiAgZ3JpZENvbHVtbiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHN3aXRjaCAodGhpcy5sZWdlbmRQb3NpdGlvbigpKSB7XHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcclxuICAgICAgICByZXR1cm4gJzFmciBtaW4tY29udGVudCc7XHJcbiAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgIHJldHVybiAnbWluLWNvbnRlbnQgMWZyJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJzFmcic7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgZ3JpZFJvdyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHN3aXRjaCAodGhpcy5sZWdlbmRQb3NpdGlvbigpKSB7XHJcbiAgICAgIGNhc2UgJ3RvcCc6XHJcbiAgICAgICAgcmV0dXJuICdtaW4tY29udGVudCAxZnInO1xyXG4gICAgICBjYXNlICdib3R0b20nOlxyXG4gICAgICAgIHJldHVybiAnMWZyIG1pbi1jb250ZW50JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJzFmcic7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0cnVjdG9yICYgbGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5jdXN0b21pemVUb29sdGlwID0gdGhpcy5jdXN0b21pemVUb29sdGlwLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU1ldGhvZHMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICAvKiBGdW56aW9uZSB1c2F0YSBwZXIgcGVyc29uYWxpenphcmUgaSB0b29sdGlwcyBkZWwgZ3JhZmljbyAqL1xyXG4gIHB1YmxpYyBjdXN0b21pemVUb29sdGlwKHBvaW50SW5mbzogeyBhcmd1bWVudFRleHQ6IHN0cmluZzsgdmFsdWVUZXh0OiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3QgeyBhcmd1bWVudFRleHQsIHZhbHVlVGV4dCB9ID0gcG9pbnRJbmZvO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGV4dDogYCR7YXJndW1lbnRUZXh0fTxici8+JHt2YWx1ZVRleHR9ICR7dGhpcy51b20oKX1gLFxyXG4gICAgICBjb2xvcjogJ3JnYmEoMTQ5LCAxNTcsIDE2NSwgMC41KScsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XG4gIGNsYXNzPVwiY29udGFpbmVyLXBpZS1jaGFydFwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImxlZ2VuZFBvc2l0aW9uKCkgPT09ICdub25lJyA/ICdibG9jaycgOiAnZ3JpZCdcIlxuICBbc3R5bGUuZ3JpZFRlbXBsYXRlUm93c109XCJncmlkUm93KClcIlxuICBbc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1uc109XCJncmlkQ29sdW1uKClcIj5cbiAgPGR4LXBpZS1jaGFydFxuICAgIFtzdHlsZS5vcmRlcl09XCJsZWdlbmRQb3NpdGlvbigpID09PSAndG9wJyB8fCBsZWdlbmRQb3NpdGlvbigpID09PSAnbGVmdCcgPyAxIDogMFwiXG4gICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICBbdHlwZV09XCJjaGFydFR5cGUoKVwiXG4gICAgW2RhdGFTb3VyY2VdPVwiY2hhcnREYXRhU291cmNlKClcIlxuICAgIHJlc29sdmVMYWJlbE92ZXJsYXBwaW5nPVwic2hpZnRcIlxuICAgIFtwYWxldHRlXT1cInBhbGV0dGVDb2xvcigpXCJcbiAgICBbZGlhbWV0ZXJdPVwiY2hhcnREaWFtZXRlcigpXCJcbiAgICBbaW5uZXJSYWRpdXNdPVwiY2hhcnRJbm5lclJhZGl1cygpXCJcbiAgICBbcmVkcmF3T25SZXNpemVdPVwidHJ1ZVwiXG4gICAgW2NlbnRlclRlbXBsYXRlXT1cImNoYXJ0UGVyY2VudGFnZSgpICE9PSB1bmRlZmluZWQgPyAnY2VudGVyVGVtcGxhdGUnIDogdW5kZWZpbmVkXCJcbiAgICBbc2VyaWVzXT1cIntcbiAgICAgIGFyZ3VtZW50RmllbGQ6ICduYW1lJyxcbiAgICAgIGZvcm1hdDogJ2ZpeGVkUG9pbnQnLFxuICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcbiAgICAgIGhvdmVyU3R5bGU6ICdub25lJyxcbiAgICAgIGxhYmVsOiB7IHZpc2libGU6IGZhbHNlIH0sXG4gICAgfVwiXG4gICAgW2xlZ2VuZF09XCJ7IHZpc2libGU6IGZhbHNlIH1cIlxuICAgIFt0b29sdGlwXT1cInsgZW5hYmxlZDogdG9vbHRpcElzRW5hYmxlZCgpLCBjdXN0b21pemVUb29sdGlwOiBjdXN0b21pemVUb29sdGlwIH1cIj5cbiAgICA8c3ZnICpkeFRlbXBsYXRlPVwibGV0IHBpZUNoYXJ0IG9mICdjZW50ZXJUZW1wbGF0ZSdcIj5cbiAgICAgIDx0ZXh0IHRleHQtYW5jaG9yPVwibWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6IDI4cHhcIiB4PVwiMTAwXCIgeT1cIjEyMFwiIGZpbGw9XCIjZmZmXCI+XG4gICAgICAgIHt7IGNoYXJ0UGVyY2VudGFnZSgpIH19JVxuICAgICAgPC90ZXh0PlxuICAgIDwvc3ZnPlxuICA8L2R4LXBpZS1jaGFydD5cblxuICBAaWYgKGxlZ2VuZFBvc2l0aW9uKCkgIT09ICdub25lJykge1xuICAgIDx1bFxuICAgICAgY2xhc3M9XCJjb250YWluZXItbGVnZW5kXCJcbiAgICAgIFtzdHlsZS5mbGV4RGlyZWN0aW9uXT1cIlxuICAgICAgICBsZWdlbmRQb3NpdGlvbigpID09PSAndG9wJyB8fCBsZWdlbmRQb3NpdGlvbigpID09PSAnYm90dG9tJyA/ICdyb3cnIDogJ2NvbHVtbidcbiAgICAgIFwiXG4gICAgICBbc3R5bGUuZ2FwXT1cImxlZ2VuZEdhcCgpXCI+XG4gICAgICBAZm9yIChpdGVtIG9mIGNoYXJ0RGF0YVNvdXJjZSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGxpPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3F1YXJlXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJpdGVtLmNvbG9yXCI+PC9zcGFuPlxuICAgICAgICAgIHt7IGxlZ2VuZFdpdGhWYWx1ZSgpID8gaXRlbS5uYW1lICsgJyAnICsgaXRlbS52YWx1ZSArICcgJyArIHVvbSgpIDogaXRlbS5uYW1lIH19XG4gICAgICAgIDwvbGk+XG4gICAgICB9XG4gICAgPC91bD5cbiAgfVxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { CommonModule, NgOptimizedImage } from '@angular/common';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, inject, input, output, signal } from '@angular/core';
|
|
4
|
+
import { Router, RouterLink, RouterLinkActive } from '@angular/router';
|
|
5
|
+
import { DxButtonModule } from 'devextreme-angular/ui/button';
|
|
6
|
+
import { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';
|
|
7
|
+
import { DxSwitchModule } from 'devextreme-angular/ui/switch';
|
|
8
|
+
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
9
|
+
import { faArrowRightFromBracket, faArrowRightToBracket, faLanguage, faMoon, faSun, faUser, } from '@fortawesome/free-solid-svg-icons';
|
|
10
|
+
import { UNIAuthService } from 'uni-service/auth';
|
|
11
|
+
import { UNITranslatePipe, UNITranslateService } from 'uni-service/translate';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/common";
|
|
14
|
+
import * as i2 from "devextreme-angular/ui/button";
|
|
15
|
+
import * as i3 from "devextreme-angular/ui/select-box";
|
|
16
|
+
import * as i4 from "devextreme-angular/ui/switch";
|
|
17
|
+
export class UNISideMenuComponent {
|
|
18
|
+
constructor() {
|
|
19
|
+
/* Service */
|
|
20
|
+
this.router = inject(Router);
|
|
21
|
+
this.authService = inject(UNIAuthService);
|
|
22
|
+
this.translateService = inject(UNITranslateService);
|
|
23
|
+
/* Input */
|
|
24
|
+
this.pathBrandLogo = input.required();
|
|
25
|
+
this.menuItems = input([]);
|
|
26
|
+
this.menuInteractions = input([]);
|
|
27
|
+
this.user = input.required();
|
|
28
|
+
/* Output */
|
|
29
|
+
this.evtToggleMenu = output();
|
|
30
|
+
/* Variables */
|
|
31
|
+
this.darkMode = signal(localStorage.getItem('uni-theme') === 'dark');
|
|
32
|
+
/* Icons */
|
|
33
|
+
this.ICON = {
|
|
34
|
+
USER: faUser,
|
|
35
|
+
LOGIN: faArrowRightToBracket,
|
|
36
|
+
LOGOUT: faArrowRightFromBracket,
|
|
37
|
+
LIGHT_MODE: faSun,
|
|
38
|
+
DARK_MODE: faMoon,
|
|
39
|
+
LANGUAGE: faLanguage,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/* ---------------------- Methods ---------------------- */
|
|
43
|
+
updateTheme(e) {
|
|
44
|
+
localStorage.setItem('uni-theme', e.value ? 'dark' : 'light');
|
|
45
|
+
window.location.reload();
|
|
46
|
+
}
|
|
47
|
+
updateLanguage(e) {
|
|
48
|
+
this.translateService.setLanguage(e.value);
|
|
49
|
+
window.location.reload();
|
|
50
|
+
}
|
|
51
|
+
goToLogin() {
|
|
52
|
+
this.evtToggleMenu.emit(false);
|
|
53
|
+
this.router.navigate(['login']);
|
|
54
|
+
}
|
|
55
|
+
logout() {
|
|
56
|
+
this.authService.logout$().subscribe(() => {
|
|
57
|
+
const firstItem = this.menuItems().find((item) => item.visible && !item.disabled);
|
|
58
|
+
this.evtToggleMenu.emit(false);
|
|
59
|
+
this.router.navigate([firstItem?.path ?? 'login']);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
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 }, 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: "<aside\n class=\"flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl\">\n <!-- user -->\n <div class=\"flex w-full items-center gap-4\">\n <div class=\"flex flex-1 gap-2\">\n @if (user(); as user) {\n <fa-icon [icon]=\"ICON.USER\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ user.username }}</span>\n }\n </div>\n <dx-button [icon]=\"'close'\" (onClick)=\"evtToggleMenu.emit(false)\"></dx-button>\n </div>\n\n <!-- menu -->\n @if (menuItems().length) {\n <nav class=\"mt-8\">\n <ul class=\"flex flex-col gap-2\">\n @for (item of menuItems(); track item.id) {\n @if (item.visible) {\n <li>\n <a\n class=\"flex gap-2 rounded p-2 !text-white\"\n [ngClass]=\"{\n 'hover:bg-zinc-600/60': !item.disabled,\n 'cursor-auto !opacity-25': item.disabled,\n }\"\n [routerLink]=\"item.disabled ? null : item.path\"\n routerLinkActive=\"bg-zinc-600/60\"\n (click)=\"evtToggleMenu.emit(false)\">\n <fa-icon class=\"basis-6\" [icon]=\"item.icon\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\n </a>\n </li>\n }\n }\n </ul>\n </nav>\n }\n\n @if (menuInteractions().length) {\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\n\n <ul class=\"flex flex-col gap-2\">\n @for (item of menuInteractions(); track item.id) {\n @if (item.data.type === 'button') {\n <li class=\"item-setting-button\">\n <button\n type=\"button\"\n class=\"dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4\"\n [class]=\"item.class\"\n (click)=\"item.fun()\">\n <fa-icon class=\"basis-6\" [icon]=\"item.data.icon\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\n </button>\n </li>\n } @else if (item.data.type === 'select') {\n <li class=\"flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow\">\n <span class=\"truncate\">{{ item.label }}</span>\n <dx-select-box\n class=\"flex-1 basis-24\"\n valueExpr=\"id\"\n displayExpr=\"description\"\n [items]=\"item.data.combos\"\n [value]=\"item.data.value\"\n stylingMode=\"underlined\"\n placeholder=\"\"\n (onValueChanged)=\"item.fun($event)\"></dx-select-box>\n </li>\n }\n }\n </ul>\n }\n\n <!-- setting -->\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\n\n <ul class=\"flex flex-col gap-2\">\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\n <fa-icon class=\"basis-6\" [icon]=\"darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ 'lblDarkMode' | translate }}</span>\n <dx-switch [value]=\"darkMode()\" (onValueChanged)=\"updateTheme($event)\"></dx-switch>\n </li>\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\n <fa-icon class=\"basis-6\" [icon]=\"ICON.LANGUAGE\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ 'lblLanguage' | translate }}</span>\n <dx-select-box\n class=\"basis-12\"\n [items]=\"translateService.translateInfo().languagesSupported\"\n [value]=\"translateService.translateInfo().language\"\n stylingMode=\"underlined\"\n (onValueChanged)=\"updateLanguage($event)\"></dx-select-box>\n </li>\n <!-- User | null | undefined -->\n @if (user() !== undefined) {\n <li>\n <button\n 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\"\n (click)=\"user() ? logout() : goToLogin()\">\n <fa-icon [icon]=\"user() ? ICON.LOGOUT : ICON.LOGIN\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ (user() ? 'lblLogout' : 'lblLogin') | translate }}</span>\n </button>\n </li>\n }\n </ul>\n\n <!-- logo -->\n <div class=\"mt-auto flex content-end border-b border-white\">\n <img\n class=\"ml-auto h-12\"\n [ngSrc]=\"pathBrandLogo()\"\n alt=\"Brand logo\"\n [height]=\"30\"\n [width]=\"125\"\n priority />\n </div>\n</aside>\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:host{position:fixed;top:0;right:0;z-index:999}\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: "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: DxSelectBoxModule }, { kind: "component", type: i3.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: "ngmodule", type: DxSwitchModule }, { kind: "component", type: i4.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: "pipe", type: UNITranslatePipe, name: "translate" }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: UNISideMenuComponent, decorators: [{
|
|
66
|
+
type: Component,
|
|
67
|
+
args: [{ selector: 'uni-side-menu', standalone: true, imports: [
|
|
68
|
+
CommonModule,
|
|
69
|
+
RouterLink,
|
|
70
|
+
RouterLinkActive,
|
|
71
|
+
DxButtonModule,
|
|
72
|
+
DxSelectBoxModule,
|
|
73
|
+
DxSwitchModule,
|
|
74
|
+
UNITranslatePipe,
|
|
75
|
+
FaIconComponent,
|
|
76
|
+
NgOptimizedImage,
|
|
77
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<aside\n class=\"flex h-screen w-[250px] flex-col gap-4 overflow-hidden rounded bg-zinc-800/60 p-4 shadow backdrop-blur-xl\">\n <!-- user -->\n <div class=\"flex w-full items-center gap-4\">\n <div class=\"flex flex-1 gap-2\">\n @if (user(); as user) {\n <fa-icon [icon]=\"ICON.USER\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ user.username }}</span>\n }\n </div>\n <dx-button [icon]=\"'close'\" (onClick)=\"evtToggleMenu.emit(false)\"></dx-button>\n </div>\n\n <!-- menu -->\n @if (menuItems().length) {\n <nav class=\"mt-8\">\n <ul class=\"flex flex-col gap-2\">\n @for (item of menuItems(); track item.id) {\n @if (item.visible) {\n <li>\n <a\n class=\"flex gap-2 rounded p-2 !text-white\"\n [ngClass]=\"{\n 'hover:bg-zinc-600/60': !item.disabled,\n 'cursor-auto !opacity-25': item.disabled,\n }\"\n [routerLink]=\"item.disabled ? null : item.path\"\n routerLinkActive=\"bg-zinc-600/60\"\n (click)=\"evtToggleMenu.emit(false)\">\n <fa-icon class=\"basis-6\" [icon]=\"item.icon\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\n </a>\n </li>\n }\n }\n </ul>\n </nav>\n }\n\n @if (menuInteractions().length) {\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\n\n <ul class=\"flex flex-col gap-2\">\n @for (item of menuInteractions(); track item.id) {\n @if (item.data.type === 'button') {\n <li class=\"item-setting-button\">\n <button\n type=\"button\"\n class=\"dx-theme-material-typography flex h-12 w-full items-center gap-2 rounded p-4\"\n [class]=\"item.class\"\n (click)=\"item.fun()\">\n <fa-icon class=\"basis-6\" [icon]=\"item.data.icon\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ item.label }}</span>\n </button>\n </li>\n } @else if (item.data.type === 'select') {\n <li class=\"flex h-12 items-center gap-4 rounded bg-zinc-600/60 p-3 shadow\">\n <span class=\"truncate\">{{ item.label }}</span>\n <dx-select-box\n class=\"flex-1 basis-24\"\n valueExpr=\"id\"\n displayExpr=\"description\"\n [items]=\"item.data.combos\"\n [value]=\"item.data.value\"\n stylingMode=\"underlined\"\n placeholder=\"\"\n (onValueChanged)=\"item.fun($event)\"></dx-select-box>\n </li>\n }\n }\n </ul>\n }\n\n <!-- setting -->\n <hr class=\"my-4 h-px border-0 bg-gray-600\" />\n\n <ul class=\"flex flex-col gap-2\">\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\n <fa-icon class=\"basis-6\" [icon]=\"darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ 'lblDarkMode' | translate }}</span>\n <dx-switch [value]=\"darkMode()\" (onValueChanged)=\"updateTheme($event)\"></dx-switch>\n </li>\n <li class=\"flex h-12 items-center gap-2 rounded bg-zinc-600/60 p-4 text-white shadow\">\n <fa-icon class=\"basis-6\" [icon]=\"ICON.LANGUAGE\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ 'lblLanguage' | translate }}</span>\n <dx-select-box\n class=\"basis-12\"\n [items]=\"translateService.translateInfo().languagesSupported\"\n [value]=\"translateService.translateInfo().language\"\n stylingMode=\"underlined\"\n (onValueChanged)=\"updateLanguage($event)\"></dx-select-box>\n </li>\n <!-- User | null | undefined -->\n @if (user() !== undefined) {\n <li>\n <button\n 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\"\n (click)=\"user() ? logout() : goToLogin()\">\n <fa-icon [icon]=\"user() ? ICON.LOGOUT : ICON.LOGIN\"></fa-icon>\n <span class=\"flex-1 truncate\">{{ (user() ? 'lblLogout' : 'lblLogin') | translate }}</span>\n </button>\n </li>\n }\n </ul>\n\n <!-- logo -->\n <div class=\"mt-auto flex content-end border-b border-white\">\n <img\n class=\"ml-auto h-12\"\n [ngSrc]=\"pathBrandLogo()\"\n alt=\"Brand logo\"\n [height]=\"30\"\n [width]=\"125\"\n priority />\n </div>\n</aside>\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:host{position:fixed;top:0;right:0;z-index:999}\n"] }]
|
|
78
|
+
}] });
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLXNpZGUtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmktY29tcG9uZW50LXR3L3NyYy9saWIvdW5pLXNpZGUtbWVudS91bmktc2lkZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL2xpYi91bmktc2lkZS1tZW51L3VuaS1zaWRlLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBK0M5RSxNQUFNLE9BQU8sb0JBQW9CO0lBbEJqQztRQW1CRSxhQUFhO1FBQ0osV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RCxXQUFXO1FBQ1gsa0JBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDekMsY0FBUyxHQUFHLEtBQUssQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxLQUFLLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEyQixDQUFDO1FBRWpELFlBQVk7UUFDWixrQkFBYSxHQUFHLE1BQU0sRUFBUyxDQUFDO1FBRWhDLGVBQWU7UUFDZixhQUFRLEdBQUcsTUFBTSxDQUFVLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7UUFFekUsV0FBVztRQUNGLFNBQUksR0FBRztZQUNkLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLHFCQUFxQjtZQUM1QixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1NBQ3JCLENBQUM7S0F5Qkg7SUF2QkMsMkRBQTJEO0lBQ2pELFdBQVcsQ0FBQyxDQUEwQjtRQUM5QyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVTLGNBQWMsQ0FBQyxDQUE2QjtRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsTUFBTTtRQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsRFUsb0JBQW9CO2tHQUFwQixvQkFBb0Isa3FCQ25FakMsMC9JQXFIQSwybUpEaEVJLFlBQVksNkhBQ1osVUFBVSxvT0FDVixnQkFBZ0IsNk1BQ2hCLGNBQWMscTBCQUNkLGlCQUFpQixnckZBQ2pCLGNBQWMsNGtDQUNkLGdCQUFnQixrREFDaEIsZUFBZSw0TUFDZixnQkFBZ0I7OzJGQU1QLG9CQUFvQjtrQkFsQmhDLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFVBQVU7d0JBQ1YsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQixtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ09wdGltaXplZEltYWdlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRHhCdXR0b25Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgRHhTZWxlY3RCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvc2VsZWN0LWJveCc7XHJcbmltcG9ydCB7IER4U3dpdGNoTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3N3aXRjaCc7XHJcbmltcG9ydCB7IFZhbHVlQ2hhbmdlZEV2ZW50IGFzIFNlbGVjdEJveFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9zZWxlY3RfYm94X3R5cGVzJztcclxuaW1wb3J0IHsgVmFsdWVDaGFuZ2VkRXZlbnQgYXMgU3dpdGNoVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdkZXZleHRyZW1lL3VpL3N3aXRjaF90eXBlcyc7XHJcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHsgSWNvbkRlZmluaXRpb24gfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge1xyXG4gIGZhQXJyb3dSaWdodEZyb21CcmFja2V0LFxyXG4gIGZhQXJyb3dSaWdodFRvQnJhY2tldCxcclxuICBmYUxhbmd1YWdlLFxyXG4gIGZhTW9vbixcclxuICBmYVN1bixcclxuICBmYVVzZXIsXHJcbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHsgVU5JQXV0aFNlcnZpY2UsIFVzZXIgfSBmcm9tICd1bmktc2VydmljZS9hdXRoJztcclxuaW1wb3J0IHsgVU5JVHJhbnNsYXRlUGlwZSwgVU5JVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ3VuaS1zZXJ2aWNlL3RyYW5zbGF0ZSc7XHJcblxyXG5leHBvcnQgdHlwZSBDb21ibyA9IHtcclxuICBpZDogbnVtYmVyO1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudUl0ZW0gPSB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBpY29uOiBJY29uRGVmaW5pdGlvbjtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIHBhdGg6IHN0cmluZztcclxuICB2aXNpYmxlOiBib29sZWFuO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTWVudUludGVyYWN0aW9uID0ge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgZGF0YTpcclxuICAgIHwgeyB0eXBlOiAnYnV0dG9uJzsgaWNvbjogSWNvbkRlZmluaXRpb24gfVxyXG4gICAgfCB7IHR5cGU6ICdzZWxlY3QnOyBjb21ib3M6IENvbWJvW107IHZhbHVlOiBudW1iZXIgfCBudWxsIH07XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBjbGFzczogc3RyaW5nO1xyXG4gIGZ1bjogKC4uLmFyZ3M6IGFueSkgPT4gdm9pZDtcclxuICB2aXNpYmxlOiBib29sZWFuO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1bmktc2lkZS1tZW51JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJvdXRlckxpbmssXHJcbiAgICBSb3V0ZXJMaW5rQWN0aXZlLFxyXG4gICAgRHhCdXR0b25Nb2R1bGUsXHJcbiAgICBEeFNlbGVjdEJveE1vZHVsZSxcclxuICAgIER4U3dpdGNoTW9kdWxlLFxyXG4gICAgVU5JVHJhbnNsYXRlUGlwZSxcclxuICAgIEZhSWNvbkNvbXBvbmVudCxcclxuICAgIE5nT3B0aW1pemVkSW1hZ2UsXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5pLXNpZGUtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdW5pLXNpZGUtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVU5JU2lkZU1lbnVDb21wb25lbnQge1xyXG4gIC8qIFNlcnZpY2UgKi9cclxuICByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChVTklBdXRoU2VydmljZSk7XHJcbiAgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChVTklUcmFuc2xhdGVTZXJ2aWNlKTtcclxuXHJcbiAgLyogSW5wdXQgKi9cclxuICBwYXRoQnJhbmRMb2dvID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xyXG4gIG1lbnVJdGVtcyA9IGlucHV0PE1lbnVJdGVtW10+KFtdKTtcclxuICBtZW51SW50ZXJhY3Rpb25zID0gaW5wdXQ8TWVudUludGVyYWN0aW9uW10+KFtdKTtcclxuICB1c2VyID0gaW5wdXQucmVxdWlyZWQ8VXNlciB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XHJcblxyXG4gIC8qIE91dHB1dCAqL1xyXG4gIGV2dFRvZ2dsZU1lbnUgPSBvdXRwdXQ8ZmFsc2U+KCk7XHJcblxyXG4gIC8qIFZhcmlhYmxlcyAqL1xyXG4gIGRhcmtNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1bmktdGhlbWUnKSA9PT0gJ2RhcmsnKTtcclxuXHJcbiAgLyogSWNvbnMgKi9cclxuICByZWFkb25seSBJQ09OID0ge1xyXG4gICAgVVNFUjogZmFVc2VyLFxyXG4gICAgTE9HSU46IGZhQXJyb3dSaWdodFRvQnJhY2tldCxcclxuICAgIExPR09VVDogZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQsXHJcbiAgICBMSUdIVF9NT0RFOiBmYVN1bixcclxuICAgIERBUktfTU9ERTogZmFNb29uLFxyXG4gICAgTEFOR1VBR0U6IGZhTGFuZ3VhZ2UsXHJcbiAgfTtcclxuXHJcbiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuICBwcm90ZWN0ZWQgdXBkYXRlVGhlbWUoZTogU3dpdGNoVmFsdWVDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1bmktdGhlbWUnLCBlLnZhbHVlID8gJ2RhcmsnIDogJ2xpZ2h0Jyk7XHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgdXBkYXRlTGFuZ3VhZ2UoZTogU2VsZWN0Qm94VmFsdWVDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRMYW5ndWFnZShlLnZhbHVlKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnb1RvTG9naW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2dFRvZ2dsZU1lbnUuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2xvZ2luJ10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGxvZ291dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb3V0JCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IHRoaXMubWVudUl0ZW1zKCkuZmluZCgoaXRlbSkgPT4gaXRlbS52aXNpYmxlICYmICFpdGVtLmRpc2FibGVkKTtcclxuICAgICAgdGhpcy5ldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbZmlyc3RJdGVtPy5wYXRoID8/ICdsb2dpbiddKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8YXNpZGVcbiAgY2xhc3M9XCJmbGV4IGgtc2NyZWVuIHctWzI1MHB4XSBmbGV4LWNvbCBnYXAtNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZCBiZy16aW5jLTgwMC82MCBwLTQgc2hhZG93IGJhY2tkcm9wLWJsdXIteGxcIj5cbiAgPCEtLSB1c2VyICAtLT5cbiAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBnYXAtMlwiPlxuICAgICAgQGlmICh1c2VyKCk7IGFzIHVzZXIpIHtcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiSUNPTi5VU0VSXCI+PC9mYS1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZVwiPnt7IHVzZXIudXNlcm5hbWUgfX08L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGR4LWJ1dHRvbiBbaWNvbl09XCInY2xvc2UnXCIgKG9uQ2xpY2spPVwiZXZ0VG9nZ2xlTWVudS5lbWl0KGZhbHNlKVwiPjwvZHgtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIG1lbnUgIC0tPlxuICBAaWYgKG1lbnVJdGVtcygpLmxlbmd0aCkge1xuICAgIDxuYXYgY2xhc3M9XCJtdC04XCI+XG4gICAgICA8dWwgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgbWVudUl0ZW1zKCk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgICBAaWYgKGl0ZW0udmlzaWJsZSkge1xuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMiByb3VuZGVkIHAtMiAhdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLXppbmMtNjAwLzYwJzogIWl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAnY3Vyc29yLWF1dG8gIW9wYWNpdHktMjUnOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0uZGlzYWJsZWQgPyBudWxsIDogaXRlbS5wYXRoXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYmctemluYy02MDAvNjBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJldnRUb2dnbGVNZW51LmVtaXQoZmFsc2UpXCI+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJiYXNpcy02XCIgW2ljb25dPVwiaXRlbS5pY29uXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvdWw+XG4gICAgPC9uYXY+XG4gIH1cblxuICBAaWYgKG1lbnVJbnRlcmFjdGlvbnMoKS5sZW5ndGgpIHtcbiAgICA8aHIgY2xhc3M9XCJteS00IGgtcHggYm9yZGVyLTAgYmctZ3JheS02MDBcIiAvPlxuXG4gICAgPHVsIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgQGZvciAoaXRlbSBvZiBtZW51SW50ZXJhY3Rpb25zKCk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgQGlmIChpdGVtLmRhdGEudHlwZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXNldHRpbmctYnV0dG9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImR4LXRoZW1lLW1hdGVyaWFsLXR5cG9ncmFwaHkgZmxleCBoLTEyIHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZCBwLTRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5jbGFzc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpdGVtLmZ1bigpXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiYmFzaXMtNlwiIFtpY29uXT1cIml0ZW0uZGF0YS5pY29uXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZVwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICB9IEBlbHNlIGlmIChpdGVtLmRhdGEudHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgICA8bGkgY2xhc3M9XCJmbGV4IGgtMTIgaXRlbXMtY2VudGVyIGdhcC00IHJvdW5kZWQgYmctemluYy02MDAvNjAgcC0zIHNoYWRvd1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZHgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtMSBiYXNpcy0yNFwiXG4gICAgICAgICAgICAgIHZhbHVlRXhwcj1cImlkXCJcbiAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtLmRhdGEuY29tYm9zXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uZGF0YS52YWx1ZVwiXG4gICAgICAgICAgICAgIHN0eWxpbmdNb2RlPVwidW5kZXJsaW5lZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cIml0ZW0uZnVuKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvdWw+XG4gIH1cblxuICA8IS0tIHNldHRpbmcgIC0tPlxuICA8aHIgY2xhc3M9XCJteS00IGgtcHggYm9yZGVyLTAgYmctZ3JheS02MDBcIiAvPlxuXG4gIDx1bCBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICA8bGkgY2xhc3M9XCJmbGV4IGgtMTIgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQgYmctemluYy02MDAvNjAgcC00IHRleHQtd2hpdGUgc2hhZG93XCI+XG4gICAgICA8ZmEtaWNvbiBjbGFzcz1cImJhc2lzLTZcIiBbaWNvbl09XCJkYXJrTW9kZSgpID8gSUNPTi5EQVJLX01PREUgOiBJQ09OLkxJR0hUX01PREVcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZVwiPnt7ICdsYmxEYXJrTW9kZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8ZHgtc3dpdGNoIFt2YWx1ZV09XCJkYXJrTW9kZSgpXCIgKG9uVmFsdWVDaGFuZ2VkKT1cInVwZGF0ZVRoZW1lKCRldmVudClcIj48L2R4LXN3aXRjaD5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cImZsZXggaC0xMiBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZCBiZy16aW5jLTYwMC82MCBwLTQgdGV4dC13aGl0ZSBzaGFkb3dcIj5cbiAgICAgIDxmYS1pY29uIGNsYXNzPVwiYmFzaXMtNlwiIFtpY29uXT1cIklDT04uTEFOR1VBR0VcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXgtMSB0cnVuY2F0ZVwiPnt7ICdsYmxMYW5ndWFnZScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICA8ZHgtc2VsZWN0LWJveFxuICAgICAgICBjbGFzcz1cImJhc2lzLTEyXCJcbiAgICAgICAgW2l0ZW1zXT1cInRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlSW5mbygpLmxhbmd1YWdlc1N1cHBvcnRlZFwiXG4gICAgICAgIFt2YWx1ZV09XCJ0cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUluZm8oKS5sYW5ndWFnZVwiXG4gICAgICAgIHN0eWxpbmdNb2RlPVwidW5kZXJsaW5lZFwiXG4gICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJ1cGRhdGVMYW5ndWFnZSgkZXZlbnQpXCI+PC9keC1zZWxlY3QtYm94PlxuICAgIDwvbGk+XG4gICAgPCEtLSBVc2VyIHwgbnVsbCB8IHVuZGVmaW5lZCAtLT5cbiAgICBAaWYgKHVzZXIoKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICA8bGk+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkIGJvcmRlciBib3JkZXItd2hpdGUgcC00IHRleHQtd2hpdGUgc2hhZG93IHRyYW5zaXRpb24gZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0IGhvdmVyOmJnLXdoaXRlIGhvdmVyOnRleHQtZ3JheS04MDBcIlxuICAgICAgICAgIChjbGljayk9XCJ1c2VyKCkgPyBsb2dvdXQoKSA6IGdvVG9Mb2dpbigpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwidXNlcigpID8gSUNPTi5MT0dPVVQgOiBJQ09OLkxPR0lOXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC0xIHRydW5jYXRlXCI+e3sgKHVzZXIoKSA/ICdsYmxMb2dvdXQnIDogJ2xibExvZ2luJykgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICB9XG4gIDwvdWw+XG5cbiAgPCEtLSBsb2dvICAtLT5cbiAgPGRpdiBjbGFzcz1cIm10LWF1dG8gZmxleCBjb250ZW50LWVuZCBib3JkZXItYiBib3JkZXItd2hpdGVcIj5cbiAgICA8aW1nXG4gICAgICBjbGFzcz1cIm1sLWF1dG8gaC0xMlwiXG4gICAgICBbbmdTcmNdPVwicGF0aEJyYW5kTG9nbygpXCJcbiAgICAgIGFsdD1cIkJyYW5kIGxvZ29cIlxuICAgICAgW2hlaWdodF09XCIzMFwiXG4gICAgICBbd2lkdGhdPVwiMTI1XCJcbiAgICAgIHByaW9yaXR5IC8+XG4gIDwvZGl2PlxuPC9hc2lkZT5cblxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of uni-component-tw
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/uni-article/uni-article.component';
|
|
5
|
+
export * from './lib/uni-header/uni-header.component';
|
|
6
|
+
export * from './lib/uni-login-modal/uni-login-modal.component';
|
|
7
|
+
export * from './lib/uni-pie-chart/uni-pie-chart.component';
|
|
8
|
+
export * from './lib/uni-side-menu/uni-side-menu.component';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNkNBQTZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdW5pLWNvbXBvbmVudC10d1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VuaS1hcnRpY2xlL3VuaS1hcnRpY2xlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VuaS1oZWFkZXIvdW5pLWhlYWRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91bmktbG9naW4tbW9kYWwvdW5pLWxvZ2luLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VuaS1waWUtY2hhcnQvdW5pLXBpZS1jaGFydC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91bmktc2lkZS1tZW51L3VuaS1zaWRlLW1lbnUuY29tcG9uZW50JztcclxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generated bundle index. Do not edit.
|
|
3
3
|
*/
|
|
4
|
-
export * from './
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pLWNvbXBvbmVudC10dy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3VuaS1jb21wb25lbnQtdHcvc3JjL3VuaS1jb21wb25lbnQtdHcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|