uni-app-fe 0.1.15 → 0.1.17

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.
@@ -25,19 +25,19 @@ class UniBannerAlert {
25
25
  constructor() {
26
26
  /* Icons */
27
27
  this.type = input.required(...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
28
- this.lblTitle = input.required(...(ngDevMode ? [{ debugName: "lblTitle" }] : /* istanbul ignore next */ []));
29
- this.lblDescription = input.required(...(ngDevMode ? [{ debugName: "lblDescription" }] : /* istanbul ignore next */ []));
28
+ this.keyTitle = input.required(...(ngDevMode ? [{ debugName: "keyTitle" }] : /* istanbul ignore next */ []));
29
+ this.keyDescription = input.required(...(ngDevMode ? [{ debugName: "keyDescription" }] : /* istanbul ignore next */ []));
30
30
  this.icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
31
31
  /* Icons */
32
32
  this.ICON_WARNING = faTriangleExclamation;
33
33
  }
34
34
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniBannerAlert, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UniBannerAlert, isStandalone: true, selector: "uni-banner-alert", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, lblTitle: { classPropertyName: "lblTitle", publicName: "lblTitle", isSignal: true, isRequired: true, transformFunction: null }, lblDescription: { classPropertyName: "lblDescription", publicName: "lblDescription", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"flex w-full flex-col gap-6 rounded-2xl border-2 p-4 text-center shadow-lg backdrop-blur-md\"\r\n [ngClass]=\"{\r\n 'bg-amber-500/25 border-amber-500 dark:text-amber-100 text-amber-500': type() === 'warning',\r\n 'bg-rose-500/25 border-rose-500 dark:text-rose-200 text-rose-500': type() === 'error'\r\n }\">\r\n <div class=\"flex flex-col items-center gap-4\">\r\n <h1 class=\"text-lg! font-semibold\">{{ lblTitle() | translate }}</h1>\r\n @if(icon(); as icon) {\r\n <fa-icon class=\"text-5xl\" [icon]=\"icon\"></fa-icon>\r\n }\r\n <p class=\"text-sm leading-relaxed text-white!\">{{ lblDescription() | translate }}</p>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "pipe", type: UniTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UniBannerAlert, isStandalone: true, selector: "uni-banner-alert", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, keyTitle: { classPropertyName: "keyTitle", publicName: "keyTitle", isSignal: true, isRequired: true, transformFunction: null }, keyDescription: { classPropertyName: "keyDescription", publicName: "keyDescription", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"relative flex w-full gap-4 overflow-hidden rounded-xl border p-4 text-left shadow-lg backdrop-blur-xl transition-all duration-300\"\r\n [ngClass]=\"{\r\n 'bg-amber-900/25 border-amber-500/30 text-amber-400': type() === 'warning',\r\n 'bg-rose-900/25 border-rose-500/30 text-rose-400': type() === 'error'\r\n }\">\r\n <div\r\n class=\"absolute top-0 bottom-0 left-0 w-1 animate-pulse rounded-l-xl\"\r\n [ngClass]=\"{ 'bg-amber-500': type() === 'warning', 'bg-rose-500': type() === 'error' }\"></div>\r\n\r\n <div class=\"flex min-w-0 flex-col justify-center gap-1.5\">\r\n <h1\r\n class=\"animate-pulse truncate text-base! font-bold tracking-widest uppercase\"\r\n [ngClass]=\"{ 'text-amber-400/90': type() === 'warning', 'text-rose-400/90': type() === 'error' }\">\r\n {{ keyTitle() | translate }}\r\n </h1>\r\n\r\n @if(icon(); as icon) {\r\n <div class=\"mx-auto flex shrink-0 items-start\">\r\n <div\r\n class=\"flex size-12 items-center justify-center rounded-lg border bg-black/20 shadow-inner backdrop-blur-sm\"\r\n [ngClass]=\"{ 'border-amber-500/20': type() === 'warning', 'border-rose-500/20': type() === 'error' }\">\r\n <fa-icon class=\"text-2xl\" [icon]=\"icon\"></fa-icon>\r\n </div>\r\n </div>\r\n }\r\n\r\n <p class=\"text-sm leading-relaxed font-normal wrap-break-word text-slate-300/90 antialiased\">\r\n {{ keyDescription() | translate }}\r\n </p>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }, { kind: "pipe", type: UniTranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
36
  }
37
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniBannerAlert, decorators: [{
38
38
  type: Component,
39
- args: [{ selector: 'uni-banner-alert', imports: [CommonModule, FaIconComponent, UniTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"flex w-full flex-col gap-6 rounded-2xl border-2 p-4 text-center shadow-lg backdrop-blur-md\"\r\n [ngClass]=\"{\r\n 'bg-amber-500/25 border-amber-500 dark:text-amber-100 text-amber-500': type() === 'warning',\r\n 'bg-rose-500/25 border-rose-500 dark:text-rose-200 text-rose-500': type() === 'error'\r\n }\">\r\n <div class=\"flex flex-col items-center gap-4\">\r\n <h1 class=\"text-lg! font-semibold\">{{ lblTitle() | translate }}</h1>\r\n @if(icon(); as icon) {\r\n <fa-icon class=\"text-5xl\" [icon]=\"icon\"></fa-icon>\r\n }\r\n <p class=\"text-sm leading-relaxed text-white!\">{{ lblDescription() | translate }}</p>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}\n"] }]
40
- }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: true }] }], lblTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "lblTitle", required: true }] }], lblDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "lblDescription", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
39
+ args: [{ selector: 'uni-banner-alert', imports: [CommonModule, FaIconComponent, UniTranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"relative flex w-full gap-4 overflow-hidden rounded-xl border p-4 text-left shadow-lg backdrop-blur-xl transition-all duration-300\"\r\n [ngClass]=\"{\r\n 'bg-amber-900/25 border-amber-500/30 text-amber-400': type() === 'warning',\r\n 'bg-rose-900/25 border-rose-500/30 text-rose-400': type() === 'error'\r\n }\">\r\n <div\r\n class=\"absolute top-0 bottom-0 left-0 w-1 animate-pulse rounded-l-xl\"\r\n [ngClass]=\"{ 'bg-amber-500': type() === 'warning', 'bg-rose-500': type() === 'error' }\"></div>\r\n\r\n <div class=\"flex min-w-0 flex-col justify-center gap-1.5\">\r\n <h1\r\n class=\"animate-pulse truncate text-base! font-bold tracking-widest uppercase\"\r\n [ngClass]=\"{ 'text-amber-400/90': type() === 'warning', 'text-rose-400/90': type() === 'error' }\">\r\n {{ keyTitle() | translate }}\r\n </h1>\r\n\r\n @if(icon(); as icon) {\r\n <div class=\"mx-auto flex shrink-0 items-start\">\r\n <div\r\n class=\"flex size-12 items-center justify-center rounded-lg border bg-black/20 shadow-inner backdrop-blur-sm\"\r\n [ngClass]=\"{ 'border-amber-500/20': type() === 'warning', 'border-rose-500/20': type() === 'error' }\">\r\n <fa-icon class=\"text-2xl\" [icon]=\"icon\"></fa-icon>\r\n </div>\r\n </div>\r\n }\r\n\r\n <p class=\"text-sm leading-relaxed font-normal wrap-break-word text-slate-300/90 antialiased\">\r\n {{ keyDescription() | translate }}\r\n </p>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}\n"] }]
40
+ }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: true }] }], keyTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyTitle", required: true }] }], keyDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyDescription", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }] } });
41
41
 
42
42
  class GetBodyAsyncPipe {
43
43
  constructor() {
@@ -360,17 +360,18 @@ class UniHeader {
360
360
  this.version = input.required(...(ngDevMode ? [{ debugName: "version" }] : /* istanbul ignore next */ []));
361
361
  this.pathBrandLogo = input.required(...(ngDevMode ? [{ debugName: "pathBrandLogo" }] : /* istanbul ignore next */ []));
362
362
  this.pathAppLogo = input(...(ngDevMode ? [undefined, { debugName: "pathAppLogo" }] : /* istanbul ignore next */ []));
363
- this.sideMenu = input(false, ...(ngDevMode ? [{ debugName: "sideMenu" }] : /* istanbul ignore next */ []));
363
+ this.hasSideMenu = input(false, ...(ngDevMode ? [{ debugName: "hasSideMenu" }] : /* istanbul ignore next */ []));
364
+ this.centralDescription = input(...(ngDevMode ? [undefined, { debugName: "centralDescription" }] : /* istanbul ignore next */ []));
364
365
  /* Output */
365
366
  this.evtToggleMenu = output();
366
367
  }
367
368
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
368
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UniHeader, 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: "<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-1 flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl font-semibold uppercase leading-tight\">{{ title() }}</p>\r\n <p class=\"text-xs opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"2xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (sideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep .dx-button{height:24px;min-width:24px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:24px;color:#fff}\n"], dependencies: [{ 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: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
369
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.12", type: UniHeader, 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 }, hasSideMenu: { classPropertyName: "hasSideMenu", publicName: "hasSideMenu", isSignal: true, isRequired: false, transformFunction: null }, centralDescription: { classPropertyName: "centralDescription", publicName: "centralDescription", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { evtToggleMenu: "evtToggleMenu" }, ngImport: i0, template: "<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square! h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-auto flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl leading-tight font-semibold tracking-wider uppercase\">\r\n {{ title() }}\r\n </p>\r\n <p class=\"truncate text-xs tracking-wide opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n @if(centralDescription(); as centralDescription) {\r\n <div class=\"hidden flex-100 sm:flex\">\r\n <p\r\n class=\"squircle mx-auto rounded-full border border-white/5 bg-white/2.5 px-4 py-1.5 text-center text-xl font-bold tracking-wider antialiased\">\r\n {{ centralDescription }}\r\n </p>\r\n </div>\r\n }\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (hasSideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep .dx-button{height:24px;min-width:24px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:24px;color:#fff}\n"], dependencies: [{ 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: "directive", type: NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "decoding", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "placeholder", "placeholderConfig", "src", "srcset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
369
370
  }
370
371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImport: i0, type: UniHeader, decorators: [{
371
372
  type: Component,
372
- args: [{ selector: 'uni-header', standalone: true, imports: [DxButtonModule, NgOptimizedImage], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-1 flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl font-semibold uppercase leading-tight\">{{ title() }}</p>\r\n <p class=\"text-xs opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"2xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (sideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep .dx-button{height:24px;min-width:24px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:24px;color:#fff}\n"] }]
373
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], version: [{ type: i0.Input, args: [{ isSignal: true, alias: "version", required: true }] }], pathBrandLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathBrandLogo", required: true }] }], pathAppLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathAppLogo", required: false }] }], sideMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideMenu", required: false }] }], evtToggleMenu: [{ type: i0.Output, args: ["evtToggleMenu"] }] } });
373
+ args: [{ selector: 'uni-header', standalone: true, imports: [DxButtonModule, NgOptimizedImage], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square! h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-auto flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl leading-tight font-semibold tracking-wider uppercase\">\r\n {{ title() }}\r\n </p>\r\n <p class=\"truncate text-xs tracking-wide opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n @if(centralDescription(); as centralDescription) {\r\n <div class=\"hidden flex-100 sm:flex\">\r\n <p\r\n class=\"squircle mx-auto rounded-full border border-white/5 bg-white/2.5 px-4 py-1.5 text-center text-xl font-bold tracking-wider antialiased\">\r\n {{ centralDescription }}\r\n </p>\r\n </div>\r\n }\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (hasSideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep .dx-button{height:24px;min-width:24px;background-color:transparent}:host ::ng-deep .dx-button .dx-icon{font-size:24px;color:#fff}\n"] }]
374
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], version: [{ type: i0.Input, args: [{ isSignal: true, alias: "version", required: true }] }], pathBrandLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathBrandLogo", required: true }] }], pathAppLogo: [{ type: i0.Input, args: [{ isSignal: true, alias: "pathAppLogo", required: false }] }], hasSideMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasSideMenu", required: false }] }], centralDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "centralDescription", required: false }] }], evtToggleMenu: [{ type: i0.Output, args: ["evtToggleMenu"] }] } });
374
375
 
375
376
  class UniItemFieldWithHightContrast {
376
377
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"uni-app-fe-component.mjs","sources":["../../../projects/uni-app-fe/component/uni-banner-alert/uni-banner-alert.ts","../../../projects/uni-app-fe/component/uni-banner-alert/uni-banner-alert.html","../../../projects/uni-app-fe/component/uni-dialog-error/get-body-async.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/get-data.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/get-timestamp-formatted.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error-article/uni-dialog-error-article.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error-article/uni-dialog-error-article.html","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error.html","../../../projects/uni-app-fe/component/uni-header/uni-header.ts","../../../projects/uni-app-fe/component/uni-header/uni-header.html","../../../projects/uni-app-fe/component/uni-item-field-with-hight-contrast/uni-item-field-with-hight-contrast.ts","../../../projects/uni-app-fe/component/uni-item-field-with-hight-contrast/uni-item-field-with-hight-contrast.html","../../../projects/uni-app-fe/component/uni-item-field/uni-item-field.ts","../../../projects/uni-app-fe/component/uni-item-field/uni-item-field.html","../../../projects/uni-app-fe/component/uni-item-field-with-lens-tooltip/uni-uni-item-field-with-lens-tooltip.ts","../../../projects/uni-app-fe/component/uni-item-field-with-lens-tooltip/uni-item-field-with-lens-tooltip.html","../../../projects/uni-app-fe/component/uni-led/model.ts","../../../projects/uni-app-fe/component/uni-led/uni-led.ts","../../../projects/uni-app-fe/component/uni-led/uni-led.html","../../../projects/uni-app-fe/component/uni-side-menu/uni-side-menu.ts","../../../projects/uni-app-fe/component/uni-side-menu/uni-side-menu.html","../../../projects/uni-app-fe/component/uni-app-fe-component.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { faTriangleExclamation, IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\n\r\n@Component({\r\n selector: 'uni-banner-alert',\r\n imports: [CommonModule, FaIconComponent, UniTranslatePipe],\r\n templateUrl: './uni-banner-alert.html',\r\n styleUrls: ['./uni-banner-alert.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniBannerAlert {\r\n /* Icons */\r\n type = input.required<'warning' | 'error'>();\r\n lblTitle = input.required<string>();\r\n lblDescription = input.required<string>();\r\n icon = input<IconDefinition>();\r\n\r\n /* Icons */\r\n readonly ICON_WARNING = faTriangleExclamation;\r\n}\r\n","<div\r\n class=\"flex w-full flex-col gap-6 rounded-2xl border-2 p-4 text-center shadow-lg backdrop-blur-md\"\r\n [ngClass]=\"{\r\n 'bg-amber-500/25 border-amber-500 dark:text-amber-100 text-amber-500': type() === 'warning',\r\n 'bg-rose-500/25 border-rose-500 dark:text-rose-200 text-rose-500': type() === 'error'\r\n }\">\r\n <div class=\"flex flex-col items-center gap-4\">\r\n <h1 class=\"text-lg! font-semibold\">{{ lblTitle() | translate }}</h1>\r\n @if(icon(); as icon) {\r\n <fa-icon class=\"text-5xl\" [icon]=\"icon\"></fa-icon>\r\n }\r\n <p class=\"text-sm leading-relaxed text-white!\">{{ lblDescription() | translate }}</p>\r\n </div>\r\n</div>\r\n","import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'get_body_async',\n standalone: true,\n})\nexport class GetBodyAsyncPipe implements PipeTransform {\n /**\n * Mappa per la memorizzazione (cache) del testo già estratto.\n * Evita il consumo ripetuto dello stream associato alla stessa Request.\n */\n private cache = new Map<Request, string>();\n\n async transform(request: Request | null | undefined): Promise<string> {\n // Gestione del caso in cui la richiesta o il relativo corpo siano assenti\n if (!request || !request.body) {\n return '';\n }\n\n // Restituzione immediata del valore se il testo è già presente in cache\n if (this.cache.has(request)) {\n return this.cache.get(request)!;\n }\n\n // Controllo dello stato del body: se è già bloccato (locked), la lettura fallirebbe\n if (request.body.locked) {\n console.warn('Request stream is currently locked.');\n return '[Body Locked]';\n }\n\n try {\n // Clonazione della richiesta originale per isolare lo stream del body\n const clonedRequest: Request = request.clone();\n\n // Estrazione dello stream grezzo (ReadableStream) per ottenere il body della richiesta\n const bodyStream: ReadableStream<Uint8Array> | null = clonedRequest.body;\n\n // Creazione di una risposta fittizia per consumare lo stream in modo standard\n const temporaryResponse: Response = new Response(bodyStream);\n\n // Avvio della lettura asincrona del testo dallo stream consumato\n const extractedText: string = await temporaryResponse.text();\n\n // Archiviazione del testo nella cache per le consultazioni successive\n this.cache.set(request, extractedText);\n\n return extractedText;\n } catch (error) {\n console.error('Error during stream reading:', error);\n return 'Error reading request body';\n }\n }\n}\n\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/angular-fontawesome';\nimport { faComputer, faDesktop, faServer, faWifi } from '@fortawesome/free-solid-svg-icons';\nimport type { ErrorStore } from 'uni-model-type/type';\n\ninterface ErrorDataByType {\n title: string;\n message: string;\n icon: IconDefinition;\n httpStatus: string;\n functionName: string;\n}\n\n@Pipe({\n name: 'get_data',\n})\nexport class GetDataPipe implements PipeTransform {\n transform(value: { id: string } & ErrorStore): ErrorDataByType {\n const error = value.uniError;\n\n switch (error.type) {\n case 'fe': {\n return {\n title: `${error.exception.functionName}()`,\n message: error.exception.message,\n icon: faDesktop,\n httpStatus: '-', // non presente\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'network': {\n return {\n title: value.id,\n message: error.exception.message,\n icon: faWifi,\n httpStatus: '-', // 0\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'server': {\n let displayMessage = error.exception.message;\n\n // Verifica se il message è un json\n if (\n displayMessage &&\n (displayMessage.codePointAt(0) === 123 || displayMessage.codePointAt(0) === 91)\n ) {\n try {\n displayMessage = JSON.stringify(JSON.parse(displayMessage), null, 2);\n } catch {\n // Fallback silenzioso: se il parsing fallisce viene tenuta la stringa originale\n }\n }\n\n return {\n title: value.id,\n message: displayMessage,\n icon: faComputer,\n httpStatus: (error.httpStatus > 0 ? error.httpStatus : '-').toString(),\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'be': {\n return {\n title: value.id,\n message: error.exception.message,\n icon: faServer,\n httpStatus: (error.httpStatus > 0 ? error.httpStatus : '-').toString(),\n functionName: error.exception.functionName,\n };\n }\n }\n }\n}\n\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { UniLocaleManager } from 'uni-manager/locale';\nimport { ErrorStore } from 'uni-model-type/type';\n\n@Pipe({\n name: 'get_timestamp_formatted',\n})\nexport class GetTimestampFormattedPipe implements PipeTransform {\n transform(value: ErrorStore['historyItems']) {\n return value.map((x) => ({\n message: x.message,\n date: UniLocaleManager.toDate(new Date(x.timestamp)),\n }));\n }\n}\n\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faCircleInfo, faCopy } from '@fortawesome/free-solid-svg-icons';\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\n\n@Component({\n selector: 'uni-dialog-error-article',\n imports: [CommonModule, FaIconComponent, UniTranslatePipe],\n templateUrl: './uni-dialog-error-article.html',\n styleUrl: './uni-dialog-error-article.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UniDialogErrorArticle {\n /* Input */\n lblTitle = input.required<string>();\n property = input.required<\n | { value: string; type: 'string' }\n | { value: string; type: 'pre' }\n | { value: Record<string, any>; type: 'json' }\n | { value: [string, any][]; type: 'array' }\n >();\n\n /* Output */\n onCopyEvt = output<any>();\n\n /* Variables */\n toast = signal<{ timeoutId: number; label: string } | null>(null);\n\n /* Icons */\n readonly ICON_INFO = faCircleInfo;\n readonly ICON_COPY = faCopy;\n}\n\n","@if(property(); as p) {\r\n<article\r\n class=\"flex h-full flex-col gap-1 border-l-[1.5px] border-rose-400/50 px-4 py-2 transition-colors duration-300 group-hover:border-rose-400\">\r\n <!-- Titolo -->\r\n <h3\r\n class=\"group/title text-2xs! mr-auto flex max-w-full items-center gap-1 font-bold tracking-wide text-rose-400/50 uppercase transition-colors duration-300 group-hover:text-rose-400\">\r\n <span class=\"truncate\">{{ lblTitle() | translate }}</span>\r\n <div class=\"invisible flex items-center gap-1 text-[9px] group-hover/title:visible\">\r\n <fa-icon\r\n class=\"cursor-help hover:text-rose-300\"\r\n [icon]=\"ICON_INFO\"\r\n [title]=\"`Tooltip${lblTitle()}` | translate\" />\r\n <button\r\n class=\"transition-transform duration-150 enabled:cursor-pointer enabled:hover:scale-120 enabled:active:scale-95 enabled:active:opacity-50 disabled:opacity-25\"\r\n (click)=\"onCopyEvt.emit(p.value)\">\r\n <fa-icon\r\n class=\"hover:text-rose-300\"\r\n [icon]=\"ICON_COPY\"\r\n [title]=\"'Copy' | translate : { prefix: 'btn' }\" />\r\n </button>\r\n </div>\r\n </h3>\r\n\r\n <div\r\n class=\"my-auto text-sm text-rose-200 transition-colors duration-300 group-hover:text-rose-100\">\r\n <!-- string / pre -->\r\n @if(p.type === 'string' || p.type === 'pre') {\r\n <!-- #2 -->\r\n @if(p.value; as value) {\r\n <!-- #2.1 - 3 -->\r\n @switch (p.type) {\r\n <!-- #3.1 -->\r\n @case ('string') {\r\n <p class=\"overflow-hidden text-ellipsis whitespace-pre-wrap\">{{ value }}</p>\r\n }\r\n <!-- #3.2 -->\r\n @case ('pre') {\r\n <pre class=\"overflow-x-auto\">{{ value }}</pre>\r\n } } }\r\n <!-- #2.2 -->\r\n @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n\r\n <!-- json -->\r\n @if(p.type === 'json') {\r\n <!-- #2 -->\r\n @if((p.value | json) !== '{}') {\r\n <pre class=\"overflow-x-auto font-sans\">{{ p.value | json }}</pre>\r\n } @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n\r\n <!-- array -->\r\n @if(p.type === 'array') {\r\n <!-- #2 -->\r\n @if(p.value.length > 0) {\r\n <ul class=\"@container/list flex flex-col gap-2\">\r\n @for (item of p.value; track $index) {\r\n <li\r\n class=\"flex max-w-full flex-col gap-x-4 gap-y-0.5 border-b border-dashed border-white/5 p-1 hover:bg-white/0.5 @lg/list:flex-row @lg/list:items-center\">\r\n <p class=\"flex min-w-0 flex-1 items-center gap-4\">\r\n <span class=\"font-mono text-xs font-bold text-rose-100\">\r\n #{{ ($index + 1).toString().padStart(2, '0') }}\r\n </span>\r\n <span class=\"cursor-help truncate\" [title]=\"item[0]\"> {{ item[0] }} </span>\r\n </p>\r\n <span\r\n class=\"shrink-0 truncate rounded bg-white/5 px-4 py-px text-center font-mono text-nowrap text-rose-300 transition-colors duration-300 group-hover:text-rose-400 @lg/list:ml-auto @lg/list:basis-48\">\r\n {{ item[1] }}\r\n </span>\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n </div>\r\n</article>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, linkedSignal, signal } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n faCircleInfo,\r\n faClock,\r\n faCopy,\r\n faDesktop,\r\n faInbox,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniParsePipe, UniTranslatePipe, UniUrlPipe } from 'uni-app-fe/pipe';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\nimport { UniHttpManager } from 'uni-manager/http';\r\nimport type { ErrorStore, FeLog } from 'uni-model-type/type';\r\n\r\nimport { GetBodyAsyncPipe } from './get-body-async.pipe';\r\nimport { GetDataPipe } from './get-data.pipe';\r\nimport { GetTimestampFormattedPipe } from './get-timestamp-formatted.pipe';\r\nimport { UniDialogErrorArticle } from './uni-dialog-error-article/uni-dialog-error-article';\r\n\r\n@Component({\r\n selector: 'uni-dialog-error',\r\n imports: [\r\n CommonModule,\r\n DxButtonModule,\r\n DxTooltipModule,\r\n FaIconComponent,\r\n UniDialogErrorArticle,\r\n DatePipe,\r\n UniTranslatePipe,\r\n GetDataPipe,\r\n GetBodyAsyncPipe,\r\n GetTimestampFormattedPipe,\r\n UniParsePipe,\r\n UniUrlPipe,\r\n ],\r\n templateUrl: './uni-dialog-error.html',\r\n styleUrl: './uni-dialog-error.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniDialogError {\r\n /* Input */\r\n storeItems = input.required<({ id: string } & ErrorStore)[]>();\r\n\r\n /* Variables */\r\n storeItemsVisibile = linkedSignal<\r\n ({ id: string } & ErrorStore)[],\r\n ({ id: string } & ErrorStore)[]\r\n >({\r\n source: () => this.storeItems(),\r\n computation: (newItems, prev) => {\r\n const visibleItems = newItems.filter((item) => item.isVisible);\r\n const previousList = prev?.value;\r\n if (!previousList) return visibleItems;\r\n\r\n return visibleItems.map((item) => {\r\n // Ricerca del record corrispondente nello stato precedente\r\n const existing = previousList.find((old) => old.id === item.id);\r\n if (!existing) return item;\r\n\r\n // Una variazione nella lunghezza della cronologia indica la ripetizione dell'errore.\r\n // In questo scenario si ignorano i vecchi flag e si applicano i valori azzerati dallo store.\r\n if (existing.historyItems.length !== item.historyItems.length) {\r\n return item;\r\n }\r\n\r\n // Se l'errore non ha subito variazioni strutturali, viene preservato lo stato locale della UI\r\n return {\r\n ...item,\r\n isOpen: existing.isOpen,\r\n isCopied: existing.isCopied,\r\n isSaved: existing.isSaved,\r\n };\r\n });\r\n },\r\n });\r\n\r\n /* Variables */\r\n toast = signal<{ timeoutId: number; label: string } | null>(null);\r\n\r\n /* Icons */\r\n readonly ICON_FE = faDesktop;\r\n readonly ICON_TIMER = faClock;\r\n readonly ICON_COUNT = faInbox;\r\n readonly ICON_INFO = faCircleInfo;\r\n readonly ICON_COPY = faCopy;\r\n\r\n /* ------------------ Methods ------------------ */\r\n onCloseDialog(): void {\r\n UniErrorManager.removeAll();\r\n }\r\n\r\n onToggleIsOpen(id: string): void {\r\n this.storeItemsVisibile.update((x) =>\r\n x.map((y) => {\r\n if (y.id === id) y.isOpen = !y.isOpen;\r\n return y;\r\n }),\r\n );\r\n }\r\n\r\n async onCopy(value: any): Promise<void> {\r\n await this.copy(value, 'ValueCopied');\r\n }\r\n\r\n async onCopyAll(id: string): Promise<void> {\r\n /* Recupero errore */\r\n const currentError = this.storeItemsVisibile().find((e) => e.id === id);\r\n if (!currentError) return;\r\n\r\n /* Azione */\r\n await this.copy(JSON.stringify(currentError, null, 2), 'ErrorCopied');\r\n\r\n /* Aggiornamento datasource */\r\n this.storeItemsVisibile.update((list) =>\r\n list.map((err) => ({ ...err, isCopied: err.id === id })),\r\n );\r\n }\r\n\r\n onSave(id: string): void {\r\n /* Recupero errore */\r\n const currentError = this.storeItemsVisibile().find((e) => e.id === id);\r\n if (!currentError) return;\r\n\r\n /* Azione */\r\n const log: FeLog = {\r\n id: -1,\r\n severity: 'error',\r\n module: currentError.uniError.type,\r\n timestamp: currentError.historyItems.at(-1)!.timestamp,\r\n ref: currentError.id,\r\n exceptionFunctionName: currentError.uniError.exception.functionName,\r\n exceptionType: currentError.uniError.exception.type,\r\n exceptionMessage: currentError.uniError.exception.message,\r\n exceptionStackTrace: currentError.uniError.exception.stackTrace,\r\n exceptionStackTraceFrames: currentError.uniError.exception.stackTraceFrames,\r\n };\r\n\r\n /* Api */\r\n UniHttpManager.create$({ ref: 'Log', path: '/Log/AddFeLog', hasToast: false }, log).subscribe(\r\n () => {\r\n this.storeItemsVisibile.update((list) =>\r\n list.map((err) => {\r\n if (err.id === id) {\r\n err.isSaved = true;\r\n }\r\n return err;\r\n }),\r\n );\r\n\r\n /* Toast */\r\n this.showToast('ErrorSaved');\r\n },\r\n );\r\n }\r\n\r\n onDelete(id: string): void {\r\n /* Azione */\r\n UniErrorManager.hide(id);\r\n\r\n /* Toast */\r\n this.showToast('ErrorRemoved');\r\n }\r\n\r\n /* ------------------ Methods: utils ------------------ */\r\n private showToast = (label: string) => {\r\n /* Reset vecchio timeout (se ancora in corso) */\r\n if (this.toast()?.timeoutId) {\r\n clearTimeout(this.toast()!.timeoutId);\r\n }\r\n\r\n /* Reset vecchio toast (se ancora in corso) */\r\n this.toast.set(null);\r\n\r\n /* Piccolo timeout cosi da evidenziare un nuovo toast (se presente ancora un toast in corso) */\r\n setTimeout(() => {\r\n /* Nascosto toast dopo x tempo */\r\n const timeoutId = setTimeout(() => this.toast.set(null), 2000);\r\n\r\n /* Mostrato toast */\r\n this.toast.set({ timeoutId, label });\r\n }, 100);\r\n };\r\n\r\n private copy = async (value: any, lblToast: string) => {\r\n let valueFormatted = '';\r\n try {\r\n // Se è una stringa si prova a convertirla in oggetto JSON\r\n if (typeof valueFormatted === 'string') {\r\n try {\r\n valueFormatted = JSON.parse(value);\r\n } catch {\r\n valueFormatted = value;\r\n }\r\n }\r\n\r\n const formattedText =\r\n typeof valueFormatted === 'object' && valueFormatted !== null\r\n ? JSON.stringify(valueFormatted, null, 2)\r\n : String(valueFormatted)\r\n .replaceAll(String.raw`\\r\\n`, '\\n')\r\n .replaceAll(String.raw`\\n`, '\\n');\r\n\r\n await navigator.clipboard.writeText(formattedText);\r\n\r\n this.showToast(lblToast);\r\n } catch {\r\n this.showToast('OperationNotAvailable');\r\n }\r\n };\r\n}\r\n","<div\r\n class=\"relative flex h-full w-full flex-col gap-6 overflow-hidden rounded-4xl border border-rose-800/25 bg-linear-to-tr from-rose-500/10 via-rose-900/20 to-rose-500/5 p-6 text-left shadow-[0_50px_100px_-20px_rgba(0,0,0,0.7),inset_0_1px_0_rgba(255,255,255,0.15)] backdrop-blur-3xl\">\r\n <div\r\n class=\"pointer-events-none absolute -top-40 -left-40 size-96 animate-pulse rounded-full bg-rose-500/10 blur-[120px]\"></div>\r\n <div\r\n class=\"pointer-events-none absolute -right-40 -bottom-40 size-96 rounded-full bg-rose-500/10 blur-[120px]\"></div>\r\n\r\n <!-- Titolo -->\r\n <header class=\"flex items-center justify-between gap-4 border-b border-rose-400/25 pb-5\">\r\n <!-- Titolo: led -->\r\n <span class=\"relative flex size-3\">\r\n <span\r\n class=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-rose-400 opacity-40\"></span>\r\n <span\r\n class=\"relative inline-flex size-3 rounded-full bg-linear-to-tr from-rose-500 to-rose-300 shadow-[0_0_20px_rgba(244,63,94,0.8)]\"></span>\r\n </span>\r\n\r\n <!-- Titolo: scritta -->\r\n <h1 class=\"mr-auto truncate text-2xl font-black tracking-tight text-white antialiased\">\r\n {{ 'Errors' | translate }}\r\n </h1>\r\n\r\n <!-- Titolo: totale -->\r\n <span\r\n class=\"xs:block hidden rounded-xl border border-white/7.5 bg-white/5 px-3 py-1.5 font-mono text-xs font-semibold tracking-wider text-neutral-200\">\r\n {{ 'Total' | translate }}: {{ storeItemsVisibile().length }}\r\n </span>\r\n\r\n <!-- Titolo: bottone chiusura -->\r\n <dx-button\r\n class=\"w-8 transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"'close'\"\r\n (onClick)=\"onCloseDialog()\"></dx-button>\r\n </header>\r\n\r\n <!-- Lista Errori -->\r\n <main\r\n class=\"scrollbar-none overflow-y-auto [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\">\r\n <ul class=\"flex flex-col gap-6 overflow-x-auto p-2\">\r\n @for (storeItem of storeItemsVisibile(); track $index) {\r\n <!-- Data -->\r\n @let uniError = storeItem.uniError; @let storeItemData = storeItem | get_data;\r\n <li\r\n class=\"group squircle @container/item relative flex w-full min-w-32 flex-col rounded-3xl border-[1.5px] border-white/7.5 bg-white/2.5 text-left shadow-[0_4px_12px_-4px_rgba(0,0,0,0.5)] transition duration-300 hover:scale-[1.01] hover:border-white/33 hover:bg-white/5\"\r\n [ngClass]=\"{ 'bg-white/7.5! shadow-[0_30px_40px_-18px_rgba(0,0,0,0.75),inset_0_1px_1px_rgba(255,255,255,0.15)]! hover:border-rose-400!': storeItem.isOpen }\">\r\n <!-- Badges -->\r\n <div class=\"absolute -top-2 -right-1 flex gap-2 text-white\">\r\n @if(storeItem.isCopied) {\r\n <span class=\"squircle rounded-full bg-amber-500 px-3 py-px\">\r\n {{ 'Copied' | translate }}\r\n </span>\r\n } @if(storeItem.isSaved) {\r\n <span class=\"squircle rounded-full bg-emerald-500 px-3 py-px\">\r\n {{ 'Saved' | translate }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- Header -->\r\n <div class=\"@container/header flex items-center justify-between gap-4 p-4\">\r\n <!-- Header: titolo -->\r\n <div class=\"flex min-w-0 items-center gap-3.5\">\r\n <button\r\n class=\"flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-lg border border-white/10 bg-white/5 text-neutral-400 transition duration-300 group-hover:border-white/30 group-hover:bg-white/10 group-hover:text-white hover:bg-rose-400\"\r\n [ngClass]=\"{ 'rotate-90': storeItem.isOpen }\"\r\n [title]=\"(storeItem.isOpen ? 'Close' : 'Open') | translate: { prefix: 'btn' }\"\r\n (click)=\"onToggleIsOpen(storeItem.id)\">\r\n <span class=\"font-mono text-xs font-bold\">&gt;</span>\r\n </button>\r\n <span\r\n class=\"truncate font-sans text-base font-bold tracking-tight text-neutral-200 transition-colors duration-300 group-hover:text-white\">\r\n {{ storeItemData.title }}\r\n </span>\r\n </div>\r\n\r\n <!-- Header: type -->\r\n <div\r\n class=\"hidden items-center gap-2 rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-rose-400 transition-colors duration-300 group-hover:border-white/30 group-hover:bg-white/10 group-hover:text-white @xs/header:flex\">\r\n @if(uniError.type === 'network' || uniError.type === 'server') {\r\n <fa-icon [icon]=\"ICON_FE\" />\r\n <span class=\"font-mono text-xs opacity-30\">/</span>\r\n }\r\n <fa-icon [icon]=\"storeItemData.icon\" [title]=\"uniError.type\" />\r\n <span class=\"font-mono text-xs tracking-wider uppercase\"> {{ uniError.type }} </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Main -->\r\n <div class=\"flex flex-col gap-8 p-4\">\r\n <!-- Messaggio -->\r\n <div\r\n class=\"flex flex-col gap-4 [&_article]:border-0 [&_article]:p-0 [&_article_h3]:text-neutral-400 [&_article_h3]:group-hover:text-neutral-200 [&_article_h3_div_*]:hover:text-white [&_article_p]:text-white\">\r\n <!-- Messaggio default -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Message'\"\r\n [property]=\"{ value: uniError.exception.message, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Messaggio intero -->\r\n @if(uniError.type === 'be' && uniError.innerException) {\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'InnerMessage'\"\r\n [property]=\"{ value: uniError.innerException.message, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n }\r\n </div>\r\n\r\n <!-- Dettagli -->\r\n @if(storeItem.isOpen) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Details' | translate }}\r\n </h1>\r\n <div class=\"flex flex-col gap-12\">\r\n @if(uniError.type === 'be' || uniError.type === 'server') {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: request -->\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Request' | translate }}\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex flex-col gap-x-16 gap-y-4 @md/item:flex-row\">\r\n <!-- Dettagli: request metodo http -->\r\n <uni-dialog-error-article\r\n class=\"shrink-0 @md/item:basis-24\"\r\n [lblTitle]=\"'Method'\"\r\n [property]=\"{ value: uniError.request.method, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n <!-- Dettagli: request url -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Url'\"\r\n [property]=\"{ value: uniError.request.url, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n\r\n <!-- Dettagli: request query params -->\r\n @let queryParams = [...(uniError.request.url | url).searchParams];\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'QueryParams'\"\r\n [property]=\"{ value: queryParams, type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request headers -->\r\n @let headers = [...uniError.request.headers.entries()];\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Headers'\"\r\n [property]=\"{ value: headers, type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request body -->\r\n @let body = uniError.request | get_body_async | async;\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Body'\"\r\n [property]=\"{ value: body | parse, type: 'json'}\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info -->\r\n <div class=\"flex flex-col gap-4 @md/item:flex-row\">\r\n <!-- Dettagli: request info mode -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Mode'\"\r\n [property]=\"{ value: uniError.request.mode, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info credentials -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Credentials'\"\r\n [property]=\"{ value: uniError.request.credentials, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info cache -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'CacheMode'\"\r\n [property]=\"{ value: uniError.request.cache, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dettagli: info -->\r\n <div class=\"flex flex-col gap-4\">\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Diagnostic' | translate }}\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: info durata -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Duration'\"\r\n [property]=\"{ value: `${uniError.durationMs / 1000}s`, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: info user agent -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'UserAgent'\"\r\n [property]=\"{ value: uniError.userAgent, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dettagli: eccezione -->\r\n <div class=\"flex flex-col gap-4\">\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Exception' | translate }} ({{ uniError.type }})\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: eccezione nome funzione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Function'\"\r\n [property]=\"{ value: uniError.exception.functionName, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione tipo eccezione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Type'\"\r\n [property]=\"{ value: uniError.exception.type, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione stack trace -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'StackTrace'\"\r\n [property]=\"{ value: uniError.exception.stackTrace, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione frames -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Frames'\"\r\n [property]=\"{ value: uniError.exception.stackTraceFrames.map(x => ([x.file, `LINE ${x.line}`])), type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Interno -->\r\n @if(storeItem.isOpen) { @if((uniError.type === 'be' || uniError.type === 'server') &&\r\n uniError.innerException) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Inner' | translate }}\r\n </h1>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Interno: nome funzione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Function'\"\r\n [property]=\"{ value: uniError.innerException.functionName, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Interno: tipo -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Type'\"\r\n [property]=\"{ value: uniError.innerException.type, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Interno: stack trace -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'StackTrace'\"\r\n [property]=\"{ value: uniError.innerException.stackTrace, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n } }\r\n\r\n <!-- Storico -->\r\n @if(storeItem.isOpen){ @if(storeItem.historyItems.length > 0) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'History' | translate }}\r\n </h1>\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Timestamp'\"\r\n [property]=\"{ value: (storeItem.historyItems | get_timestamp_formatted).map(x => ([x.message, x.date])), type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n } }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"@container/footer flex flex-col justify-between gap-4 border-t border-white/5 bg-white/1 p-5 pt-4 @lg/item:flex-row @lg/item:items-center\">\r\n <!-- Footer: metadata -->\r\n <div\r\n class=\"flex min-w-0 flex-col items-center justify-between gap-x-4 gap-y-2 overflow-hidden text-xs @2xs/footer:flex-row\">\r\n <!-- Footer: metadata http -->\r\n <p\r\n class=\"squircle flex h-6 max-w-full min-w-22 items-center justify-center gap-2 overflow-hidden rounded-xl border border-white/7.5 bg-white/2.5 px-2.5 py-1 font-mono\">\r\n <span\r\n class=\"font-mono font-bold text-rose-400 transition-colors duration-300 group-hover:text-white\">\r\n HTTP\r\n </span>\r\n <span class=\"font-mono text-neutral-300\"> {{ storeItemData.httpStatus }} </span>\r\n </p>\r\n\r\n <!-- Footer: metadata timestamp -->\r\n <p class=\"flex h-6 max-w-full min-w-22 items-center gap-2 overflow-hidden font-mono\">\r\n <fa-icon\r\n [icon]=\"ICON_TIMER\"\r\n class=\"text-rose-400 transition-colors duration-300 group-hover:text-white\" />\r\n <span class=\"flex-1 truncate overflow-hidden font-mono text-neutral-300\">\r\n {{ storeItem.historyItems.at(-1)?.timestamp| date:'HH:mm:ss' }}\r\n </span>\r\n </p>\r\n\r\n <!-- Footer: metadata count -->\r\n <p class=\"flex h-6 max-w-full min-w-22 items-center gap-2 overflow-hidden font-mono\">\r\n <fa-icon\r\n [icon]=\"ICON_COUNT\"\r\n class=\"text-rose-400 transition-colors duration-300 group-hover:text-white\" />\r\n <span class=\"truncate font-mono text-nowrap text-neutral-300 lowercase\">\r\n {{ storeItem.historyItems.length }} {{ ('Times' | translate) }}\r\n </span>\r\n </p>\r\n </div>\r\n\r\n <!-- Footer: bottoni -->\r\n <div\r\n class=\"touch:opacity-100 flex flex-col items-center justify-center gap-2 transition duration-300 group-hover:opacity-100 @[110px]/footer:flex-row @sm/footer:opacity-10\">\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"storeItem.isCopied ? 'check' : 'copy'\"\r\n [hint]=\"'Copy' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"storeItem.isCopied\"\r\n (click)=\"onCopyAll(storeItem.id)\">\r\n </dx-button>\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"storeItem.isSaved ? 'check' : 'save'\"\r\n [hint]=\"'Save' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"storeItem.isSaved\"\r\n (click)=\"onSave(storeItem.id)\">\r\n </dx-button>\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"'trash'\"\r\n [hint]=\"'Delete' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"false\"\r\n (click)=\"onDelete(storeItem.id)\"></dx-button>\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </main>\r\n\r\n @if (toast(); as toast) {\r\n <div\r\n class=\"pointer-events-none absolute bottom-6 left-1/2 flex -translate-x-1/2 rounded-lg border border-emerald-500/20 bg-emerald-950/90 px-4 py-2.5 shadow-[0_4px_12px_rgba(0,0,0,0.5),0_2px_4px_rgba(16,185,129,0.1)] backdrop-blur-md transition duration-300\">\r\n <span\r\n class=\"flex items-center gap-2 font-sans text-xs font-medium tracking-wide text-emerald-200\">\r\n <span class=\"font-mono text-sm font-bold text-emerald-400\">✓</span>\r\n {{ toast.label | translate : { prefix: 'toast' } }}\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n","import { NgOptimizedImage } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\n\r\n@Component({\r\n selector: 'uni-header',\r\n standalone: true,\r\n imports: [DxButtonModule, NgOptimizedImage],\r\n templateUrl: './uni-header.html',\r\n styleUrls: ['./uni-header.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniHeader {\r\n /* Input */\r\n title = input.required<string>();\r\n version = input.required<string>();\r\n pathBrandLogo = input.required<string>();\r\n pathAppLogo = input<string>();\r\n sideMenu = input<boolean>(false);\r\n\r\n /* Output */\r\n evtToggleMenu = output<true>();\r\n}\r\n","<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-1 flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl font-semibold uppercase leading-tight\">{{ title() }}</p>\r\n <p class=\"text-xs opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"2xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (sideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\n\r\n@Component({\r\n selector: 'uni-item-field-with-hight-contrast',\r\n imports: [DxTooltipModule, UniTranslatePipe],\r\n templateUrl: './uni-item-field-with-hight-contrast.html',\r\n styleUrl: './uni-item-field-with-hight-contrast.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemFieldWithHightContrast {\r\n /* Input */\r\n label = input.required<string>();\r\n value = input.required<string | number | null | undefined>();\r\n}\r\n","<div class=\"flex flex-col items-start\">\r\n <span class=\"max-w-full min-w-0 truncate text-lg text-nowrap text-gray-500 dark:text-gray-300\">\r\n {{ label() | translate }}\r\n </span>\r\n <span #tooltipTarget class=\"max-w-full min-w-0 cursor-help truncate text-3xl font-semibold\">\r\n {{ value() || '-' }}\r\n </span>\r\n</div>\r\n\r\n<dx-tooltip\r\n [target]=\"tooltipTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">{{ value() || '-' }}</div>\r\n</dx-tooltip>\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\nimport { UniToastManager } from 'uni-manager/toast';\r\n\r\n@Component({\r\n selector: 'uni-item-field',\r\n imports: [CommonModule, DxTooltipModule, UniTranslatePipe],\r\n providers: [DatePipe],\r\n templateUrl: './uni-item-field.html',\r\n styleUrl: './uni-item-field.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemField {\r\n /* Pipe */\r\n readonly datePipe = inject(DatePipe);\r\n\r\n /* Input */\r\n label = input.required<string>();\r\n value = input.required<string | number | Date | null | undefined>();\r\n udm = input<string>();\r\n dateFormat = input<'short' | 'medium' | 'shortDate' | 'mediumDate' | 'longDate' | 'fullDate'>(\r\n 'longDate',\r\n );\r\n\r\n /* Variable */\r\n valueFormatted = computed(() => {\r\n const value = this.value();\r\n if (!value) return '';\r\n\r\n if (\r\n (value instanceof Date && !Number.isNaN(value.getTime())) ||\r\n (typeof value === 'string' && this.isValidDateString(value))\r\n ) {\r\n return this.datePipe.transform(new Date(value), this.dateFormat());\r\n }\r\n return `${value}${this.udm() ?? ''}`;\r\n });\r\n\r\n /* ---------------- Methods: event ---------------- */\r\n async onCopyValue(): Promise<void> {\r\n const value = this.valueFormatted();\r\n if (!value) return;\r\n\r\n // Controllo se l'API è disponibile e il contesto è sicuro (HTTPS/Localhost)\r\n if (navigator.clipboard && globalThis.isSecureContext) {\r\n await navigator.clipboard.writeText(value);\r\n UniToastManager.show({ label: 'ValueCopied' });\r\n }\r\n }\r\n\r\n /* ---------------- Methods: utils ---------------- */\r\n private isValidDateString(value: unknown): value is string {\r\n if (typeof value !== 'string') return false;\r\n\r\n // ISO 8601 (con o senza timezone)\r\n const isoRegex =\r\n /^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?$/;\r\n\r\n if (!isoRegex.test(value)) return false;\r\n\r\n const date = new Date(value);\r\n return !Number.isNaN(date.getTime());\r\n }\r\n}\r\n","<li class=\"flex items-center gap-2 text-sm!\">\r\n <span class=\"text-nowrap text-gray-500 dark:text-gray-300\"> {{ label() | translate }}: </span>\r\n <span\r\n #tooltipTarget\r\n [ngClass]=\"{'text-gray-500/50 dark:text-gray-300/50': !valueFormatted() }\"\r\n class=\"max-w-full min-w-0 cursor-help truncate font-semibold transition duration-100 ease-in-out hover:opacity-75 active:scale-95\"\r\n (click)=\"onCopyValue()\">\r\n {{ valueFormatted() || '-' }}\r\n </span>\r\n</li>\r\n\r\n<dx-tooltip\r\n [target]=\"tooltipTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">{{ valueFormatted() || '-' }}</div>\r\n</dx-tooltip>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { faCircleInfo } from '@fortawesome/free-solid-svg-icons';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\n\r\nimport { UniItemField } from '../uni-item-field/uni-item-field';\r\n\r\n@Component({\r\n selector: 'uni-item-field-with-lens-tooltip',\r\n imports: [DxTooltipModule, FaIconComponent, UniItemField],\r\n templateUrl: './uni-item-field-with-lens-tooltip.html',\r\n styleUrl: './uni-item-field-with-lens-tooltip.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemFieldWithLensTooltip {\r\n /* Input */\r\n id = input.required<string>();\r\n label = input.required<string>();\r\n value = input.required<string | number | Date | null | undefined>();\r\n\r\n /* Icon */\r\n readonly ICON_INFO = faCircleInfo;\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n <uni-item-field [label]=\"label()\" [value]=\"value()\" />\r\n\r\n <div #tooltipInfoTarget>\r\n <fa-icon\r\n class=\"text-theme-200 cursor-help rounded px-1 text-xs! transition duration-150 ease-in-out hover:opacity-75\"\r\n [icon]=\"ICON_INFO\">\r\n </fa-icon>\r\n </div>\r\n\r\n <dx-tooltip\r\n [target]=\"tooltipInfoTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">\r\n <ng-content></ng-content>\r\n </div>\r\n </dx-tooltip>\r\n</div>\r\n","export enum LedStatus {\r\n OK,\r\n WARNING,\r\n ERROR,\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\nimport { LedStatus } from './model';\r\n\r\n@Component({\r\n selector: 'uni-led',\r\n imports: [CommonModule],\r\n templateUrl: './uni-led.html',\r\n styleUrls: ['./uni-led.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniLed {\r\n /* Inputs */\r\n public description = input.required<string>();\r\n public status = input.required<LedStatus | boolean | null | undefined>();\r\n\r\n /* Enum */\r\n protected readonly LED_STATUS = LedStatus;\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n <div\r\n class=\"led\"\r\n [ngClass]=\"{\r\n ok: status() === true || status() === LED_STATUS.OK,\r\n warning: status() === LED_STATUS.WARNING,\r\n error: status() === false || status() === LED_STATUS.ERROR,\r\n }\"></div>\r\n <p class=\"truncate text-sm\">{{ description() }}</p>\r\n <ng-content></ng-content>\r\n</div>\r\n","import { CommonModule, NgOptimizedImage } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n faArrowRightFromBracket,\r\n faArrowRightToBracket,\r\n faBell,\r\n faLanguage,\r\n faMoon,\r\n faSun,\r\n faUser,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\nimport { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';\r\nimport { DxSwitchModule } from 'devextreme-angular/ui/switch';\r\nimport { ValueChangedEvent as SelectBoxValueChangedEvent } from 'devextreme/ui/select_box_types';\r\nimport { ValueChangedEvent as SwitchValueChangedEvent } from 'devextreme/ui/switch_types';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\nimport { UniLoaderService } from 'uni-app-fe/service';\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\n\r\nimport { MenuInteraction, MenuItem } from './model';\r\n\r\n@Component({\r\n selector: 'uni-side-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterLink,\r\n RouterLinkActive,\r\n DxButtonModule,\r\n DxSelectBoxModule,\r\n DxSwitchModule,\r\n UniTranslatePipe,\r\n FaIconComponent,\r\n NgOptimizedImage,\r\n ],\r\n templateUrl: './uni-side-menu.html',\r\n styleUrls: ['./uni-side-menu.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniSideMenu {\r\n /* Service */\r\n readonly elementRef = inject(ElementRef);\r\n readonly uniLoader = inject(UniLoaderService);\r\n\r\n /* Input */\r\n readonly pathUnitecLogo = input.required<string>();\r\n readonly menuItems = input<MenuItem[]>([]);\r\n readonly menuInteractions = input<MenuInteraction[]>([]);\r\n\r\n /* Output */\r\n evtToggleMenu = output<false>();\r\n\r\n /* Variables */\r\n locale = UniLocaleManager.locale;\r\n localesSupported = UniLocaleManager.localesSupported;\r\n darkMode = signal<boolean>(\r\n !localStorage.getItem('uni-theme') || localStorage.getItem('uni-theme') === 'dark',\r\n );\r\n\r\n /* Icons */\r\n readonly ICON = {\r\n USER: faUser,\r\n LOGIN: faArrowRightToBracket,\r\n LOGOUT: faArrowRightFromBracket,\r\n LIGHT_MODE: faSun,\r\n DARK_MODE: faMoon,\r\n LANGUAGE: faLanguage,\r\n NOTIFICATION: faBell,\r\n };\r\n\r\n /* ---------------------- Host listener ---------------------- */\r\n @HostListener('document:click', ['$event'])\r\n protected onClickOutside(event: Event): void {\r\n const target = event.target as HTMLElement;\r\n\r\n // Controlla se il click è avvenuto dentro il menu principale\r\n const clickedInsideMenu = this.elementRef.nativeElement.contains(target);\r\n\r\n // Controlla se il click è avvenuto dentro un popup/dropdown aperto\r\n const clickedInsideOverlay = !!target.closest(\r\n '.dx-overlay-wrapper, .dx-dropdowneditor-overlay',\r\n );\r\n\r\n // Se il click è fuori da entrambi, allora chiude il menu\r\n if (!clickedInsideMenu && !clickedInsideOverlay) {\r\n this.evtToggleMenu.emit(false);\r\n }\r\n }\r\n\r\n /* ---------------------- Methods ---------------------- */\r\n updateTheme(e: SwitchValueChangedEvent): void {\r\n this.uniLoader.show();\r\n localStorage.setItem('uni-theme', e.value ? 'dark' : 'light');\r\n globalThis.location.reload();\r\n }\r\n\r\n updateLocale(e: SelectBoxValueChangedEvent): void {\r\n this.uniLoader.show();\r\n localStorage.setItem('uni-locale', e.value);\r\n globalThis.location.reload();\r\n }\r\n}\r\n","<aside\r\n class=\"dark:bg-theme-dark-800 dark:border-theme-dark-900 flex h-screen w-[80vw] max-w-75 flex-col gap-6 overflow-hidden rounded-l border-b-2 border-l-2 border-blue-400/33 bg-blue-300 p-4 shadow-2xl\">\r\n <!-- Header: User/Close -->\r\n <div class=\"flex h-8 w-full shrink-0 items-center\">\r\n <dx-button class=\"ml-auto rounded-full!\" [icon]=\"'close'\" (onClick)=\"evtToggleMenu.emit(false)\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"custom-scrollbar flex flex-1 flex-col overflow-x-hidden overflow-y-auto pr-1\">\r\n <!-- Sezione Menu Principale -->\r\n @if (menuItems().length) {\r\n <ul class=\"flex flex-col gap-1.5\">\r\n @for (item of menuItems(); track item.id) { @if (item.visible !== false) {\r\n <li>\r\n <a\r\n class=\"group flex h-12 items-center gap-3 rounded-lg px-3 text-white! transition-colors dark:text-gray-300!\"\r\n [ngClass]=\"{\r\n 'dark:hover:bg-theme-dark-700 hover:bg-blue-400': !item.badge && !item.disabled,\r\n 'hover:bg-red-500/50': item.badge && !item.disabled,\r\n 'pointer-events-none opacity-30 grayscale': item.disabled,\r\n }\"\r\n [routerLink]=\"item.disabled ? null : item.path\"\r\n [routerLinkActive]=\"item.badge ?\r\n 'bg-red-500/60 *:text-white! *:font-semibold!' :\r\n 'bg-blue-400/75 dark:bg-theme-dark-700 *:text-white! *:font-semibold!'\r\n \"\r\n (click)=\"evtToggleMenu.emit(false)\">\r\n <fa-icon [icon]=\"item.icon\" class=\"w-6 text-center text-lg\"></fa-icon>\r\n <span class=\"flex-1 truncate font-medium\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <div\r\n class=\"flex size-6 animate-pulse items-center justify-center rounded bg-red-500 shadow-lg\">\r\n <fa-icon class=\"text-xs\" [icon]=\"ICON.NOTIFICATION\"></fa-icon>\r\n </div>\r\n }\r\n </a>\r\n </li>\r\n } }\r\n </ul>\r\n }\r\n\r\n <!-- Sezione Interazioni Dinamiche -->\r\n @if (menuInteractions().length) {\r\n <hr class=\"dark:border-theme-dark-900 my-6 border-blue-400/30\" />\r\n <ul class=\"flex flex-col gap-2 text-white\">\r\n @for (item of menuInteractions(); track item.id) { @if (item.data.type === 'button') {\r\n <li>\r\n <button\r\n type=\"button\"\r\n class=\"flex h-12 w-full items-center gap-3 rounded-lg px-3 transition-all active:scale-95\"\r\n [class]=\"item.class\"\r\n (click)=\"item.data.onClick()\">\r\n <fa-icon class=\"w-6\" [icon]=\"item.data.icon\"></fa-icon>\r\n <span class=\"flex-1 truncate text-left font-medium\">{{ item.label }}</span>\r\n </button>\r\n </li>\r\n } @else if (item.data.type === 'select') {\r\n <li\r\n class=\"dark:bg-theme-dark-700 flex flex-col gap-1 rounded-lg bg-blue-400/75 p-3 shadow-sm\">\r\n <span class=\"text-xs font-bold uppercase opacity-60\">{{ item.label }}</span>\r\n <dx-select-box\r\n class=\"w-full\"\r\n valueExpr=\"id\"\r\n displayExpr=\"description\"\r\n [items]=\"item.data.combos\"\r\n [value]=\"item.data.value\"\r\n stylingMode=\"underlined\"\r\n (onValueChanged)=\"item.data.onValueChanged($event)\">\r\n </dx-select-box>\r\n </li>\r\n } }\r\n </ul>\r\n }\r\n\r\n <!-- Settings Statici -->\r\n <hr class=\"dark:border-theme-dark-900 my-6 border-blue-400/30\" />\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"dark:bg-theme-dark-700 flex h-14 items-center justify-between rounded-lg bg-blue-400/75 px-4 text-white shadow-sm\">\r\n <div class=\"flex items-center gap-3\">\r\n <fa-icon [icon]=\"darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE\"></fa-icon>\r\n <span class=\"truncate\">{{ 'DarkMode' | translate }}</span>\r\n </div>\r\n <dx-switch [value]=\"darkMode()\" (onValueChanged)=\"updateTheme($event)\"></dx-switch>\r\n </div>\r\n\r\n <div\r\n class=\"dark:bg-theme-dark-700 flex h-14 items-center justify-between rounded-lg bg-blue-400/75 px-4 text-white shadow-sm\">\r\n <div class=\"flex items-center gap-3\">\r\n <fa-icon [icon]=\"ICON.LANGUAGE\"></fa-icon>\r\n <span class=\"truncate\">{{ 'Language' | translate }}</span>\r\n </div>\r\n <dx-select-box\r\n class=\"w-24\"\r\n [items]=\"localesSupported\"\r\n [value]=\"locale\"\r\n stylingMode=\"underlined\"\r\n (onValueChanged)=\"updateLocale($event)\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer Logo -->\r\n <div class=\"mt-auto border-t border-white/20 pt-4\">\r\n <img\r\n class=\"ml-auto opacity-90 transition-opacity hover:opacity-100\"\r\n [ngSrc]=\"pathUnitecLogo()\"\r\n priority\r\n alt=\"Brand logo\"\r\n height=\"32\"\r\n width=\"88\" />\r\n </div>\r\n</aside>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1"],"mappings":"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"}
1
+ {"version":3,"file":"uni-app-fe-component.mjs","sources":["../../../projects/uni-app-fe/component/uni-banner-alert/uni-banner-alert.ts","../../../projects/uni-app-fe/component/uni-banner-alert/uni-banner-alert.html","../../../projects/uni-app-fe/component/uni-dialog-error/get-body-async.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/get-data.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/get-timestamp-formatted.pipe.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error-article/uni-dialog-error-article.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error-article/uni-dialog-error-article.html","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error.ts","../../../projects/uni-app-fe/component/uni-dialog-error/uni-dialog-error.html","../../../projects/uni-app-fe/component/uni-header/uni-header.ts","../../../projects/uni-app-fe/component/uni-header/uni-header.html","../../../projects/uni-app-fe/component/uni-item-field-with-hight-contrast/uni-item-field-with-hight-contrast.ts","../../../projects/uni-app-fe/component/uni-item-field-with-hight-contrast/uni-item-field-with-hight-contrast.html","../../../projects/uni-app-fe/component/uni-item-field/uni-item-field.ts","../../../projects/uni-app-fe/component/uni-item-field/uni-item-field.html","../../../projects/uni-app-fe/component/uni-item-field-with-lens-tooltip/uni-uni-item-field-with-lens-tooltip.ts","../../../projects/uni-app-fe/component/uni-item-field-with-lens-tooltip/uni-item-field-with-lens-tooltip.html","../../../projects/uni-app-fe/component/uni-led/model.ts","../../../projects/uni-app-fe/component/uni-led/uni-led.ts","../../../projects/uni-app-fe/component/uni-led/uni-led.html","../../../projects/uni-app-fe/component/uni-side-menu/uni-side-menu.ts","../../../projects/uni-app-fe/component/uni-side-menu/uni-side-menu.html","../../../projects/uni-app-fe/component/uni-app-fe-component.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { faTriangleExclamation, IconDefinition } from '@fortawesome/free-solid-svg-icons';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\n\r\n@Component({\r\n selector: 'uni-banner-alert',\r\n imports: [CommonModule, FaIconComponent, UniTranslatePipe],\r\n templateUrl: './uni-banner-alert.html',\r\n styleUrls: ['./uni-banner-alert.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniBannerAlert {\r\n /* Icons */\r\n type = input.required<'warning' | 'error'>();\r\n keyTitle = input.required<string>();\r\n keyDescription = input.required<string>();\r\n icon = input<IconDefinition>();\r\n\r\n /* Icons */\r\n readonly ICON_WARNING = faTriangleExclamation;\r\n}\r\n","<div\r\n class=\"relative flex w-full gap-4 overflow-hidden rounded-xl border p-4 text-left shadow-lg backdrop-blur-xl transition-all duration-300\"\r\n [ngClass]=\"{\r\n 'bg-amber-900/25 border-amber-500/30 text-amber-400': type() === 'warning',\r\n 'bg-rose-900/25 border-rose-500/30 text-rose-400': type() === 'error'\r\n }\">\r\n <div\r\n class=\"absolute top-0 bottom-0 left-0 w-1 animate-pulse rounded-l-xl\"\r\n [ngClass]=\"{ 'bg-amber-500': type() === 'warning', 'bg-rose-500': type() === 'error' }\"></div>\r\n\r\n <div class=\"flex min-w-0 flex-col justify-center gap-1.5\">\r\n <h1\r\n class=\"animate-pulse truncate text-base! font-bold tracking-widest uppercase\"\r\n [ngClass]=\"{ 'text-amber-400/90': type() === 'warning', 'text-rose-400/90': type() === 'error' }\">\r\n {{ keyTitle() | translate }}\r\n </h1>\r\n\r\n @if(icon(); as icon) {\r\n <div class=\"mx-auto flex shrink-0 items-start\">\r\n <div\r\n class=\"flex size-12 items-center justify-center rounded-lg border bg-black/20 shadow-inner backdrop-blur-sm\"\r\n [ngClass]=\"{ 'border-amber-500/20': type() === 'warning', 'border-rose-500/20': type() === 'error' }\">\r\n <fa-icon class=\"text-2xl\" [icon]=\"icon\"></fa-icon>\r\n </div>\r\n </div>\r\n }\r\n\r\n <p class=\"text-sm leading-relaxed font-normal wrap-break-word text-slate-300/90 antialiased\">\r\n {{ keyDescription() | translate }}\r\n </p>\r\n </div>\r\n</div>\r\n","import { Pipe, type PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'get_body_async',\n standalone: true,\n})\nexport class GetBodyAsyncPipe implements PipeTransform {\n /**\n * Mappa per la memorizzazione (cache) del testo già estratto.\n * Evita il consumo ripetuto dello stream associato alla stessa Request.\n */\n private cache = new Map<Request, string>();\n\n async transform(request: Request | null | undefined): Promise<string> {\n // Gestione del caso in cui la richiesta o il relativo corpo siano assenti\n if (!request || !request.body) {\n return '';\n }\n\n // Restituzione immediata del valore se il testo è già presente in cache\n if (this.cache.has(request)) {\n return this.cache.get(request)!;\n }\n\n // Controllo dello stato del body: se è già bloccato (locked), la lettura fallirebbe\n if (request.body.locked) {\n console.warn('Request stream is currently locked.');\n return '[Body Locked]';\n }\n\n try {\n // Clonazione della richiesta originale per isolare lo stream del body\n const clonedRequest: Request = request.clone();\n\n // Estrazione dello stream grezzo (ReadableStream) per ottenere il body della richiesta\n const bodyStream: ReadableStream<Uint8Array> | null = clonedRequest.body;\n\n // Creazione di una risposta fittizia per consumare lo stream in modo standard\n const temporaryResponse: Response = new Response(bodyStream);\n\n // Avvio della lettura asincrona del testo dallo stream consumato\n const extractedText: string = await temporaryResponse.text();\n\n // Archiviazione del testo nella cache per le consultazioni successive\n this.cache.set(request, extractedText);\n\n return extractedText;\n } catch (error) {\n console.error('Error during stream reading:', error);\n return 'Error reading request body';\n }\n }\n}\n\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { IconDefinition } from '@fortawesome/angular-fontawesome';\nimport { faComputer, faDesktop, faServer, faWifi } from '@fortawesome/free-solid-svg-icons';\nimport type { ErrorStore } from 'uni-model-type/type';\n\ninterface ErrorDataByType {\n title: string;\n message: string;\n icon: IconDefinition;\n httpStatus: string;\n functionName: string;\n}\n\n@Pipe({\n name: 'get_data',\n})\nexport class GetDataPipe implements PipeTransform {\n transform(value: { id: string } & ErrorStore): ErrorDataByType {\n const error = value.uniError;\n\n switch (error.type) {\n case 'fe': {\n return {\n title: `${error.exception.functionName}()`,\n message: error.exception.message,\n icon: faDesktop,\n httpStatus: '-', // non presente\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'network': {\n return {\n title: value.id,\n message: error.exception.message,\n icon: faWifi,\n httpStatus: '-', // 0\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'server': {\n let displayMessage = error.exception.message;\n\n // Verifica se il message è un json\n if (\n displayMessage &&\n (displayMessage.codePointAt(0) === 123 || displayMessage.codePointAt(0) === 91)\n ) {\n try {\n displayMessage = JSON.stringify(JSON.parse(displayMessage), null, 2);\n } catch {\n // Fallback silenzioso: se il parsing fallisce viene tenuta la stringa originale\n }\n }\n\n return {\n title: value.id,\n message: displayMessage,\n icon: faComputer,\n httpStatus: (error.httpStatus > 0 ? error.httpStatus : '-').toString(),\n functionName: `${error.exception.functionName}()`,\n };\n }\n case 'be': {\n return {\n title: value.id,\n message: error.exception.message,\n icon: faServer,\n httpStatus: (error.httpStatus > 0 ? error.httpStatus : '-').toString(),\n functionName: error.exception.functionName,\n };\n }\n }\n }\n}\n\n","import { Pipe, type PipeTransform } from '@angular/core';\nimport { UniLocaleManager } from 'uni-manager/locale';\nimport { ErrorStore } from 'uni-model-type/type';\n\n@Pipe({\n name: 'get_timestamp_formatted',\n})\nexport class GetTimestampFormattedPipe implements PipeTransform {\n transform(value: ErrorStore['historyItems']) {\n return value.map((x) => ({\n message: x.message,\n date: UniLocaleManager.toDate(new Date(x.timestamp)),\n }));\n }\n}\n\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faCircleInfo, faCopy } from '@fortawesome/free-solid-svg-icons';\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\n\n@Component({\n selector: 'uni-dialog-error-article',\n imports: [CommonModule, FaIconComponent, UniTranslatePipe],\n templateUrl: './uni-dialog-error-article.html',\n styleUrl: './uni-dialog-error-article.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class UniDialogErrorArticle {\n /* Input */\n lblTitle = input.required<string>();\n property = input.required<\n | { value: string; type: 'string' }\n | { value: string; type: 'pre' }\n | { value: Record<string, any>; type: 'json' }\n | { value: [string, any][]; type: 'array' }\n >();\n\n /* Output */\n onCopyEvt = output<any>();\n\n /* Variables */\n toast = signal<{ timeoutId: number; label: string } | null>(null);\n\n /* Icons */\n readonly ICON_INFO = faCircleInfo;\n readonly ICON_COPY = faCopy;\n}\n\n","@if(property(); as p) {\r\n<article\r\n class=\"flex h-full flex-col gap-1 border-l-[1.5px] border-rose-400/50 px-4 py-2 transition-colors duration-300 group-hover:border-rose-400\">\r\n <!-- Titolo -->\r\n <h3\r\n class=\"group/title text-2xs! mr-auto flex max-w-full items-center gap-1 font-bold tracking-wide text-rose-400/50 uppercase transition-colors duration-300 group-hover:text-rose-400\">\r\n <span class=\"truncate\">{{ lblTitle() | translate }}</span>\r\n <div class=\"invisible flex items-center gap-1 text-[9px] group-hover/title:visible\">\r\n <fa-icon\r\n class=\"cursor-help hover:text-rose-300\"\r\n [icon]=\"ICON_INFO\"\r\n [title]=\"`Tooltip${lblTitle()}` | translate\" />\r\n <button\r\n class=\"transition-transform duration-150 enabled:cursor-pointer enabled:hover:scale-120 enabled:active:scale-95 enabled:active:opacity-50 disabled:opacity-25\"\r\n (click)=\"onCopyEvt.emit(p.value)\">\r\n <fa-icon\r\n class=\"hover:text-rose-300\"\r\n [icon]=\"ICON_COPY\"\r\n [title]=\"'Copy' | translate : { prefix: 'btn' }\" />\r\n </button>\r\n </div>\r\n </h3>\r\n\r\n <div\r\n class=\"my-auto text-sm text-rose-200 transition-colors duration-300 group-hover:text-rose-100\">\r\n <!-- string / pre -->\r\n @if(p.type === 'string' || p.type === 'pre') {\r\n <!-- #2 -->\r\n @if(p.value; as value) {\r\n <!-- #2.1 - 3 -->\r\n @switch (p.type) {\r\n <!-- #3.1 -->\r\n @case ('string') {\r\n <p class=\"overflow-hidden text-ellipsis whitespace-pre-wrap\">{{ value }}</p>\r\n }\r\n <!-- #3.2 -->\r\n @case ('pre') {\r\n <pre class=\"overflow-x-auto\">{{ value }}</pre>\r\n } } }\r\n <!-- #2.2 -->\r\n @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n\r\n <!-- json -->\r\n @if(p.type === 'json') {\r\n <!-- #2 -->\r\n @if((p.value | json) !== '{}') {\r\n <pre class=\"overflow-x-auto font-sans\">{{ p.value | json }}</pre>\r\n } @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n\r\n <!-- array -->\r\n @if(p.type === 'array') {\r\n <!-- #2 -->\r\n @if(p.value.length > 0) {\r\n <ul class=\"@container/list flex flex-col gap-2\">\r\n @for (item of p.value; track $index) {\r\n <li\r\n class=\"flex max-w-full flex-col gap-x-4 gap-y-0.5 border-b border-dashed border-white/5 p-1 hover:bg-white/0.5 @lg/list:flex-row @lg/list:items-center\">\r\n <p class=\"flex min-w-0 flex-1 items-center gap-4\">\r\n <span class=\"font-mono text-xs font-bold text-rose-100\">\r\n #{{ ($index + 1).toString().padStart(2, '0') }}\r\n </span>\r\n <span class=\"cursor-help truncate\" [title]=\"item[0]\"> {{ item[0] }} </span>\r\n </p>\r\n <span\r\n class=\"shrink-0 truncate rounded bg-white/5 px-4 py-px text-center font-mono text-nowrap text-rose-300 transition-colors duration-300 group-hover:text-rose-400 @lg/list:ml-auto @lg/list:basis-48\">\r\n {{ item[1] }}\r\n </span>\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <p class=\"my-auto\">-</p>\r\n } }\r\n </div>\r\n</article>\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, linkedSignal, signal } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n faCircleInfo,\r\n faClock,\r\n faCopy,\r\n faDesktop,\r\n faInbox,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniParsePipe, UniTranslatePipe, UniUrlPipe } from 'uni-app-fe/pipe';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\nimport { UniHttpManager } from 'uni-manager/http';\r\nimport type { ErrorStore, FeLog } from 'uni-model-type/type';\r\n\r\nimport { GetBodyAsyncPipe } from './get-body-async.pipe';\r\nimport { GetDataPipe } from './get-data.pipe';\r\nimport { GetTimestampFormattedPipe } from './get-timestamp-formatted.pipe';\r\nimport { UniDialogErrorArticle } from './uni-dialog-error-article/uni-dialog-error-article';\r\n\r\n@Component({\r\n selector: 'uni-dialog-error',\r\n imports: [\r\n CommonModule,\r\n DxButtonModule,\r\n DxTooltipModule,\r\n FaIconComponent,\r\n UniDialogErrorArticle,\r\n DatePipe,\r\n UniTranslatePipe,\r\n GetDataPipe,\r\n GetBodyAsyncPipe,\r\n GetTimestampFormattedPipe,\r\n UniParsePipe,\r\n UniUrlPipe,\r\n ],\r\n templateUrl: './uni-dialog-error.html',\r\n styleUrl: './uni-dialog-error.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniDialogError {\r\n /* Input */\r\n storeItems = input.required<({ id: string } & ErrorStore)[]>();\r\n\r\n /* Variables */\r\n storeItemsVisibile = linkedSignal<\r\n ({ id: string } & ErrorStore)[],\r\n ({ id: string } & ErrorStore)[]\r\n >({\r\n source: () => this.storeItems(),\r\n computation: (newItems, prev) => {\r\n const visibleItems = newItems.filter((item) => item.isVisible);\r\n const previousList = prev?.value;\r\n if (!previousList) return visibleItems;\r\n\r\n return visibleItems.map((item) => {\r\n // Ricerca del record corrispondente nello stato precedente\r\n const existing = previousList.find((old) => old.id === item.id);\r\n if (!existing) return item;\r\n\r\n // Una variazione nella lunghezza della cronologia indica la ripetizione dell'errore.\r\n // In questo scenario si ignorano i vecchi flag e si applicano i valori azzerati dallo store.\r\n if (existing.historyItems.length !== item.historyItems.length) {\r\n return item;\r\n }\r\n\r\n // Se l'errore non ha subito variazioni strutturali, viene preservato lo stato locale della UI\r\n return {\r\n ...item,\r\n isOpen: existing.isOpen,\r\n isCopied: existing.isCopied,\r\n isSaved: existing.isSaved,\r\n };\r\n });\r\n },\r\n });\r\n\r\n /* Variables */\r\n toast = signal<{ timeoutId: number; label: string } | null>(null);\r\n\r\n /* Icons */\r\n readonly ICON_FE = faDesktop;\r\n readonly ICON_TIMER = faClock;\r\n readonly ICON_COUNT = faInbox;\r\n readonly ICON_INFO = faCircleInfo;\r\n readonly ICON_COPY = faCopy;\r\n\r\n /* ------------------ Methods ------------------ */\r\n onCloseDialog(): void {\r\n UniErrorManager.removeAll();\r\n }\r\n\r\n onToggleIsOpen(id: string): void {\r\n this.storeItemsVisibile.update((x) =>\r\n x.map((y) => {\r\n if (y.id === id) y.isOpen = !y.isOpen;\r\n return y;\r\n }),\r\n );\r\n }\r\n\r\n async onCopy(value: any): Promise<void> {\r\n await this.copy(value, 'ValueCopied');\r\n }\r\n\r\n async onCopyAll(id: string): Promise<void> {\r\n /* Recupero errore */\r\n const currentError = this.storeItemsVisibile().find((e) => e.id === id);\r\n if (!currentError) return;\r\n\r\n /* Azione */\r\n await this.copy(JSON.stringify(currentError, null, 2), 'ErrorCopied');\r\n\r\n /* Aggiornamento datasource */\r\n this.storeItemsVisibile.update((list) =>\r\n list.map((err) => ({ ...err, isCopied: err.id === id })),\r\n );\r\n }\r\n\r\n onSave(id: string): void {\r\n /* Recupero errore */\r\n const currentError = this.storeItemsVisibile().find((e) => e.id === id);\r\n if (!currentError) return;\r\n\r\n /* Azione */\r\n const log: FeLog = {\r\n id: -1,\r\n severity: 'error',\r\n module: currentError.uniError.type,\r\n timestamp: currentError.historyItems.at(-1)!.timestamp,\r\n ref: currentError.id,\r\n exceptionFunctionName: currentError.uniError.exception.functionName,\r\n exceptionType: currentError.uniError.exception.type,\r\n exceptionMessage: currentError.uniError.exception.message,\r\n exceptionStackTrace: currentError.uniError.exception.stackTrace,\r\n exceptionStackTraceFrames: currentError.uniError.exception.stackTraceFrames,\r\n };\r\n\r\n /* Api */\r\n UniHttpManager.create$({ ref: 'Log', path: '/Log/AddFeLog', hasToast: false }, log).subscribe(\r\n () => {\r\n this.storeItemsVisibile.update((list) =>\r\n list.map((err) => {\r\n if (err.id === id) {\r\n err.isSaved = true;\r\n }\r\n return err;\r\n }),\r\n );\r\n\r\n /* Toast */\r\n this.showToast('ErrorSaved');\r\n },\r\n );\r\n }\r\n\r\n onDelete(id: string): void {\r\n /* Azione */\r\n UniErrorManager.hide(id);\r\n\r\n /* Toast */\r\n this.showToast('ErrorRemoved');\r\n }\r\n\r\n /* ------------------ Methods: utils ------------------ */\r\n private showToast = (label: string) => {\r\n /* Reset vecchio timeout (se ancora in corso) */\r\n if (this.toast()?.timeoutId) {\r\n clearTimeout(this.toast()!.timeoutId);\r\n }\r\n\r\n /* Reset vecchio toast (se ancora in corso) */\r\n this.toast.set(null);\r\n\r\n /* Piccolo timeout cosi da evidenziare un nuovo toast (se presente ancora un toast in corso) */\r\n setTimeout(() => {\r\n /* Nascosto toast dopo x tempo */\r\n const timeoutId = setTimeout(() => this.toast.set(null), 2000);\r\n\r\n /* Mostrato toast */\r\n this.toast.set({ timeoutId, label });\r\n }, 100);\r\n };\r\n\r\n private copy = async (value: any, lblToast: string) => {\r\n let valueFormatted = '';\r\n try {\r\n // Se è una stringa si prova a convertirla in oggetto JSON\r\n if (typeof valueFormatted === 'string') {\r\n try {\r\n valueFormatted = JSON.parse(value);\r\n } catch {\r\n valueFormatted = value;\r\n }\r\n }\r\n\r\n const formattedText =\r\n typeof valueFormatted === 'object' && valueFormatted !== null\r\n ? JSON.stringify(valueFormatted, null, 2)\r\n : String(valueFormatted)\r\n .replaceAll(String.raw`\\r\\n`, '\\n')\r\n .replaceAll(String.raw`\\n`, '\\n');\r\n\r\n await navigator.clipboard.writeText(formattedText);\r\n\r\n this.showToast(lblToast);\r\n } catch {\r\n this.showToast('OperationNotAvailable');\r\n }\r\n };\r\n}\r\n","<div\r\n class=\"relative flex h-full w-full flex-col gap-6 overflow-hidden rounded-4xl border border-rose-800/25 bg-linear-to-tr from-rose-500/10 via-rose-900/20 to-rose-500/5 p-6 text-left shadow-[0_50px_100px_-20px_rgba(0,0,0,0.7),inset_0_1px_0_rgba(255,255,255,0.15)] backdrop-blur-3xl\">\r\n <div\r\n class=\"pointer-events-none absolute -top-40 -left-40 size-96 animate-pulse rounded-full bg-rose-500/10 blur-[120px]\"></div>\r\n <div\r\n class=\"pointer-events-none absolute -right-40 -bottom-40 size-96 rounded-full bg-rose-500/10 blur-[120px]\"></div>\r\n\r\n <!-- Titolo -->\r\n <header class=\"flex items-center justify-between gap-4 border-b border-rose-400/25 pb-5\">\r\n <!-- Titolo: led -->\r\n <span class=\"relative flex size-3\">\r\n <span\r\n class=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-rose-400 opacity-40\"></span>\r\n <span\r\n class=\"relative inline-flex size-3 rounded-full bg-linear-to-tr from-rose-500 to-rose-300 shadow-[0_0_20px_rgba(244,63,94,0.8)]\"></span>\r\n </span>\r\n\r\n <!-- Titolo: scritta -->\r\n <h1 class=\"mr-auto truncate text-2xl font-black tracking-tight text-white antialiased\">\r\n {{ 'Errors' | translate }}\r\n </h1>\r\n\r\n <!-- Titolo: totale -->\r\n <span\r\n class=\"xs:block hidden rounded-xl border border-white/7.5 bg-white/5 px-3 py-1.5 font-mono text-xs font-semibold tracking-wider text-neutral-200\">\r\n {{ 'Total' | translate }}: {{ storeItemsVisibile().length }}\r\n </span>\r\n\r\n <!-- Titolo: bottone chiusura -->\r\n <dx-button\r\n class=\"w-8 transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"'close'\"\r\n (onClick)=\"onCloseDialog()\"></dx-button>\r\n </header>\r\n\r\n <!-- Lista Errori -->\r\n <main\r\n class=\"scrollbar-none overflow-y-auto [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\">\r\n <ul class=\"flex flex-col gap-6 overflow-x-auto p-2\">\r\n @for (storeItem of storeItemsVisibile(); track $index) {\r\n <!-- Data -->\r\n @let uniError = storeItem.uniError; @let storeItemData = storeItem | get_data;\r\n <li\r\n class=\"group squircle @container/item relative flex w-full min-w-32 flex-col rounded-3xl border-[1.5px] border-white/7.5 bg-white/2.5 text-left shadow-[0_4px_12px_-4px_rgba(0,0,0,0.5)] transition duration-300 hover:scale-[1.01] hover:border-white/33 hover:bg-white/5\"\r\n [ngClass]=\"{ 'bg-white/7.5! shadow-[0_30px_40px_-18px_rgba(0,0,0,0.75),inset_0_1px_1px_rgba(255,255,255,0.15)]! hover:border-rose-400!': storeItem.isOpen }\">\r\n <!-- Badges -->\r\n <div class=\"absolute -top-2 -right-1 flex gap-2 text-white\">\r\n @if(storeItem.isCopied) {\r\n <span class=\"squircle rounded-full bg-amber-500 px-3 py-px\">\r\n {{ 'Copied' | translate }}\r\n </span>\r\n } @if(storeItem.isSaved) {\r\n <span class=\"squircle rounded-full bg-emerald-500 px-3 py-px\">\r\n {{ 'Saved' | translate }}\r\n </span>\r\n }\r\n </div>\r\n\r\n <!-- Header -->\r\n <div class=\"@container/header flex items-center justify-between gap-4 p-4\">\r\n <!-- Header: titolo -->\r\n <div class=\"flex min-w-0 items-center gap-3.5\">\r\n <button\r\n class=\"flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-lg border border-white/10 bg-white/5 text-neutral-400 transition duration-300 group-hover:border-white/30 group-hover:bg-white/10 group-hover:text-white hover:bg-rose-400\"\r\n [ngClass]=\"{ 'rotate-90': storeItem.isOpen }\"\r\n [title]=\"(storeItem.isOpen ? 'Close' : 'Open') | translate: { prefix: 'btn' }\"\r\n (click)=\"onToggleIsOpen(storeItem.id)\">\r\n <span class=\"font-mono text-xs font-bold\">&gt;</span>\r\n </button>\r\n <span\r\n class=\"truncate font-sans text-base font-bold tracking-tight text-neutral-200 transition-colors duration-300 group-hover:text-white\">\r\n {{ storeItemData.title }}\r\n </span>\r\n </div>\r\n\r\n <!-- Header: type -->\r\n <div\r\n class=\"hidden items-center gap-2 rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-rose-400 transition-colors duration-300 group-hover:border-white/30 group-hover:bg-white/10 group-hover:text-white @xs/header:flex\">\r\n @if(uniError.type === 'network' || uniError.type === 'server') {\r\n <fa-icon [icon]=\"ICON_FE\" />\r\n <span class=\"font-mono text-xs opacity-30\">/</span>\r\n }\r\n <fa-icon [icon]=\"storeItemData.icon\" [title]=\"uniError.type\" />\r\n <span class=\"font-mono text-xs tracking-wider uppercase\"> {{ uniError.type }} </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Main -->\r\n <div class=\"flex flex-col gap-8 p-4\">\r\n <!-- Messaggio -->\r\n <div\r\n class=\"flex flex-col gap-4 [&_article]:border-0 [&_article]:p-0 [&_article_h3]:text-neutral-400 [&_article_h3]:group-hover:text-neutral-200 [&_article_h3_div_*]:hover:text-white [&_article_p]:text-white\">\r\n <!-- Messaggio default -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Message'\"\r\n [property]=\"{ value: uniError.exception.message, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Messaggio intero -->\r\n @if(uniError.type === 'be' && uniError.innerException) {\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'InnerMessage'\"\r\n [property]=\"{ value: uniError.innerException.message, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n }\r\n </div>\r\n\r\n <!-- Dettagli -->\r\n @if(storeItem.isOpen) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Details' | translate }}\r\n </h1>\r\n <div class=\"flex flex-col gap-12\">\r\n @if(uniError.type === 'be' || uniError.type === 'server') {\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: request -->\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Request' | translate }}\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex flex-col gap-x-16 gap-y-4 @md/item:flex-row\">\r\n <!-- Dettagli: request metodo http -->\r\n <uni-dialog-error-article\r\n class=\"shrink-0 @md/item:basis-24\"\r\n [lblTitle]=\"'Method'\"\r\n [property]=\"{ value: uniError.request.method, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n <!-- Dettagli: request url -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Url'\"\r\n [property]=\"{ value: uniError.request.url, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n\r\n <!-- Dettagli: request query params -->\r\n @let queryParams = [...(uniError.request.url | url).searchParams];\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'QueryParams'\"\r\n [property]=\"{ value: queryParams, type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request headers -->\r\n @let headers = [...uniError.request.headers.entries()];\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Headers'\"\r\n [property]=\"{ value: headers, type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request body -->\r\n @let body = uniError.request | get_body_async | async;\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Body'\"\r\n [property]=\"{ value: body | parse, type: 'json'}\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info -->\r\n <div class=\"flex flex-col gap-4 @md/item:flex-row\">\r\n <!-- Dettagli: request info mode -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Mode'\"\r\n [property]=\"{ value: uniError.request.mode, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info credentials -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'Credentials'\"\r\n [property]=\"{ value: uniError.request.credentials, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: request info cache -->\r\n <uni-dialog-error-article\r\n class=\"flex-1\"\r\n [lblTitle]=\"'CacheMode'\"\r\n [property]=\"{ value: uniError.request.cache, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dettagli: info -->\r\n <div class=\"flex flex-col gap-4\">\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Diagnostic' | translate }}\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: info durata -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Duration'\"\r\n [property]=\"{ value: `${uniError.durationMs / 1000}s`, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: info user agent -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'UserAgent'\"\r\n [property]=\"{ value: uniError.userAgent, type: 'string' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dettagli: eccezione -->\r\n <div class=\"flex flex-col gap-4\">\r\n <h2\r\n class=\"text-lg! font-semibold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Exception' | translate }} ({{ uniError.type }})\r\n </h2>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Dettagli: eccezione nome funzione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Function'\"\r\n [property]=\"{ value: uniError.exception.functionName, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione tipo eccezione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Type'\"\r\n [property]=\"{ value: uniError.exception.type, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione stack trace -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'StackTrace'\"\r\n [property]=\"{ value: uniError.exception.stackTrace, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Dettagli: eccezione frames -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Frames'\"\r\n [property]=\"{ value: uniError.exception.stackTraceFrames.map(x => ([x.file, `LINE ${x.line}`])), type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Interno -->\r\n @if(storeItem.isOpen) { @if((uniError.type === 'be' || uniError.type === 'server') &&\r\n uniError.innerException) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'Inner' | translate }}\r\n </h1>\r\n <div class=\"flex flex-col gap-4\">\r\n <!-- Interno: nome funzione -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Function'\"\r\n [property]=\"{ value: uniError.innerException.functionName, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Interno: tipo -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Type'\"\r\n [property]=\"{ value: uniError.innerException.type, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n\r\n <!-- Interno: stack trace -->\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'StackTrace'\"\r\n [property]=\"{ value: uniError.innerException.stackTrace, type: 'pre' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n </div>\r\n } }\r\n\r\n <!-- Storico -->\r\n @if(storeItem.isOpen){ @if(storeItem.historyItems.length > 0) {\r\n <div class=\"flex flex-col gap-6 border-t border-t-white/12.5 pt-4\">\r\n <h1\r\n class=\"text-3xl! font-bold text-rose-400/50 transition-colors duration-300 group-hover:text-rose-400\">\r\n {{ 'History' | translate }}\r\n </h1>\r\n <uni-dialog-error-article\r\n [lblTitle]=\"'Timestamp'\"\r\n [property]=\"{ value: (storeItem.historyItems | get_timestamp_formatted).map(x => ([x.message, x.date])), type: 'array' }\"\r\n (onCopyEvt)=\"onCopy($event)\" />\r\n </div>\r\n } }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"@container/footer flex flex-col justify-between gap-4 border-t border-white/5 bg-white/1 p-5 pt-4 @lg/item:flex-row @lg/item:items-center\">\r\n <!-- Footer: metadata -->\r\n <div\r\n class=\"flex min-w-0 flex-col items-center justify-between gap-x-4 gap-y-2 overflow-hidden text-xs @2xs/footer:flex-row\">\r\n <!-- Footer: metadata http -->\r\n <p\r\n class=\"squircle flex h-6 max-w-full min-w-22 items-center justify-center gap-2 overflow-hidden rounded-xl border border-white/7.5 bg-white/2.5 px-2.5 py-1 font-mono\">\r\n <span\r\n class=\"font-mono font-bold text-rose-400 transition-colors duration-300 group-hover:text-white\">\r\n HTTP\r\n </span>\r\n <span class=\"font-mono text-neutral-300\"> {{ storeItemData.httpStatus }} </span>\r\n </p>\r\n\r\n <!-- Footer: metadata timestamp -->\r\n <p class=\"flex h-6 max-w-full min-w-22 items-center gap-2 overflow-hidden font-mono\">\r\n <fa-icon\r\n [icon]=\"ICON_TIMER\"\r\n class=\"text-rose-400 transition-colors duration-300 group-hover:text-white\" />\r\n <span class=\"flex-1 truncate overflow-hidden font-mono text-neutral-300\">\r\n {{ storeItem.historyItems.at(-1)?.timestamp| date:'HH:mm:ss' }}\r\n </span>\r\n </p>\r\n\r\n <!-- Footer: metadata count -->\r\n <p class=\"flex h-6 max-w-full min-w-22 items-center gap-2 overflow-hidden font-mono\">\r\n <fa-icon\r\n [icon]=\"ICON_COUNT\"\r\n class=\"text-rose-400 transition-colors duration-300 group-hover:text-white\" />\r\n <span class=\"truncate font-mono text-nowrap text-neutral-300 lowercase\">\r\n {{ storeItem.historyItems.length }} {{ ('Times' | translate) }}\r\n </span>\r\n </p>\r\n </div>\r\n\r\n <!-- Footer: bottoni -->\r\n <div\r\n class=\"touch:opacity-100 flex flex-col items-center justify-center gap-2 transition duration-300 group-hover:opacity-100 @[110px]/footer:flex-row @sm/footer:opacity-10\">\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"storeItem.isCopied ? 'check' : 'copy'\"\r\n [hint]=\"'Copy' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"storeItem.isCopied\"\r\n (click)=\"onCopyAll(storeItem.id)\">\r\n </dx-button>\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"storeItem.isSaved ? 'check' : 'save'\"\r\n [hint]=\"'Save' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"storeItem.isSaved\"\r\n (click)=\"onSave(storeItem.id)\">\r\n </dx-button>\r\n <dx-button\r\n class=\"h-6! min-w-8! transition-colors duration-200 hover:bg-rose-400! focus:bg-transparent! active:bg-rose-500!\"\r\n [stylingMode]=\"'text'\"\r\n [icon]=\"'trash'\"\r\n [hint]=\"'Delete' | translate : { prefix: 'btn' }\"\r\n [disabled]=\"false\"\r\n (click)=\"onDelete(storeItem.id)\"></dx-button>\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </main>\r\n\r\n @if (toast(); as toast) {\r\n <div\r\n class=\"pointer-events-none absolute bottom-6 left-1/2 flex -translate-x-1/2 rounded-lg border border-emerald-500/20 bg-emerald-950/90 px-4 py-2.5 shadow-[0_4px_12px_rgba(0,0,0,0.5),0_2px_4px_rgba(16,185,129,0.1)] backdrop-blur-md transition duration-300\">\r\n <span\r\n class=\"flex items-center gap-2 font-sans text-xs font-medium tracking-wide text-emerald-200\">\r\n <span class=\"font-mono text-sm font-bold text-emerald-400\">✓</span>\r\n {{ toast.label | translate : { prefix: 'toast' } }}\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n","import { NgOptimizedImage } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\n\r\n@Component({\r\n selector: 'uni-header',\r\n standalone: true,\r\n imports: [DxButtonModule, NgOptimizedImage],\r\n templateUrl: './uni-header.html',\r\n styleUrls: ['./uni-header.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniHeader {\r\n /* Input */\r\n title = input.required<string>();\r\n version = input.required<string>();\r\n pathBrandLogo = input.required<string>();\r\n pathAppLogo = input<string>();\r\n hasSideMenu = input<boolean>(false);\r\n centralDescription = input<string>();\r\n\r\n /* Output */\r\n evtToggleMenu = output<true>();\r\n}\r\n","<div\r\n class=\"dark:bg-theme-dark-800 flex h-16 items-center gap-4 overflow-hidden rounded-xl bg-blue-300 px-4 py-3 text-white\">\r\n <!-- App logo -->\r\n @if (pathAppLogo(); as pathAppLogo) {\r\n <img\r\n [ngSrc]=\"pathAppLogo\"\r\n width=\"40\"\r\n height=\"40\"\r\n priority\r\n class=\"aspect-square! h-full w-auto\"\r\n alt=\"App logo\" />\r\n }\r\n\r\n <!-- Info -->\r\n <div class=\"flex flex-auto flex-col overflow-hidden\">\r\n <p class=\"truncate text-xl leading-tight font-semibold tracking-wider uppercase\">\r\n {{ title() }}\r\n </p>\r\n <p class=\"truncate text-xs tracking-wide opacity-75\">{{ version() }}</p>\r\n </div>\r\n\r\n @if(centralDescription(); as centralDescription) {\r\n <div class=\"hidden flex-100 sm:flex\">\r\n <p\r\n class=\"squircle mx-auto rounded-full border border-white/5 bg-white/2.5 px-4 py-1.5 text-center text-xl font-bold tracking-wider antialiased\">\r\n {{ centralDescription }}\r\n </p>\r\n </div>\r\n }\r\n <div class=\"flex h-full items-center gap-2\">\r\n <!-- Brand Logo -->\r\n <div class=\"xs:block relative hidden h-full w-24\">\r\n <img\r\n [ngSrc]=\"pathBrandLogo()\"\r\n fill\r\n priority\r\n class=\"object-contain object-right\"\r\n alt=\"Brand logo\" />\r\n </div>\r\n\r\n <!-- Button menu -->\r\n @if (hasSideMenu()) {\r\n <dx-button class=\"shadow-none!\" [icon]=\"'menu'\" (onClick)=\"evtToggleMenu.emit(true)\">\r\n </dx-button>\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\n\r\n@Component({\r\n selector: 'uni-item-field-with-hight-contrast',\r\n imports: [DxTooltipModule, UniTranslatePipe],\r\n templateUrl: './uni-item-field-with-hight-contrast.html',\r\n styleUrl: './uni-item-field-with-hight-contrast.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemFieldWithHightContrast {\r\n /* Input */\r\n label = input.required<string>();\r\n value = input.required<string | number | null | undefined>();\r\n}\r\n","<div class=\"flex flex-col items-start\">\r\n <span class=\"max-w-full min-w-0 truncate text-lg text-nowrap text-gray-500 dark:text-gray-300\">\r\n {{ label() | translate }}\r\n </span>\r\n <span #tooltipTarget class=\"max-w-full min-w-0 cursor-help truncate text-3xl font-semibold\">\r\n {{ value() || '-' }}\r\n </span>\r\n</div>\r\n\r\n<dx-tooltip\r\n [target]=\"tooltipTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">{{ value() || '-' }}</div>\r\n</dx-tooltip>\r\n","import { CommonModule, DatePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\nimport { UniToastManager } from 'uni-manager/toast';\r\n\r\n@Component({\r\n selector: 'uni-item-field',\r\n imports: [CommonModule, DxTooltipModule, UniTranslatePipe],\r\n providers: [DatePipe],\r\n templateUrl: './uni-item-field.html',\r\n styleUrl: './uni-item-field.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemField {\r\n /* Pipe */\r\n readonly datePipe = inject(DatePipe);\r\n\r\n /* Input */\r\n label = input.required<string>();\r\n value = input.required<string | number | Date | null | undefined>();\r\n udm = input<string>();\r\n dateFormat = input<'short' | 'medium' | 'shortDate' | 'mediumDate' | 'longDate' | 'fullDate'>(\r\n 'longDate',\r\n );\r\n\r\n /* Variable */\r\n valueFormatted = computed(() => {\r\n const value = this.value();\r\n if (!value) return '';\r\n\r\n if (\r\n (value instanceof Date && !Number.isNaN(value.getTime())) ||\r\n (typeof value === 'string' && this.isValidDateString(value))\r\n ) {\r\n return this.datePipe.transform(new Date(value), this.dateFormat());\r\n }\r\n return `${value}${this.udm() ?? ''}`;\r\n });\r\n\r\n /* ---------------- Methods: event ---------------- */\r\n async onCopyValue(): Promise<void> {\r\n const value = this.valueFormatted();\r\n if (!value) return;\r\n\r\n // Controllo se l'API è disponibile e il contesto è sicuro (HTTPS/Localhost)\r\n if (navigator.clipboard && globalThis.isSecureContext) {\r\n await navigator.clipboard.writeText(value);\r\n UniToastManager.show({ label: 'ValueCopied' });\r\n }\r\n }\r\n\r\n /* ---------------- Methods: utils ---------------- */\r\n private isValidDateString(value: unknown): value is string {\r\n if (typeof value !== 'string') return false;\r\n\r\n // ISO 8601 (con o senza timezone)\r\n const isoRegex =\r\n /^\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?$/;\r\n\r\n if (!isoRegex.test(value)) return false;\r\n\r\n const date = new Date(value);\r\n return !Number.isNaN(date.getTime());\r\n }\r\n}\r\n","<li class=\"flex items-center gap-2 text-sm!\">\r\n <span class=\"text-nowrap text-gray-500 dark:text-gray-300\"> {{ label() | translate }}: </span>\r\n <span\r\n #tooltipTarget\r\n [ngClass]=\"{'text-gray-500/50 dark:text-gray-300/50': !valueFormatted() }\"\r\n class=\"max-w-full min-w-0 cursor-help truncate font-semibold transition duration-100 ease-in-out hover:opacity-75 active:scale-95\"\r\n (click)=\"onCopyValue()\">\r\n {{ valueFormatted() || '-' }}\r\n </span>\r\n</li>\r\n\r\n<dx-tooltip\r\n [target]=\"tooltipTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">{{ valueFormatted() || '-' }}</div>\r\n</dx-tooltip>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport { faCircleInfo } from '@fortawesome/free-solid-svg-icons';\r\nimport { DxTooltipModule } from 'devextreme-angular/ui/tooltip';\r\n\r\nimport { UniItemField } from '../uni-item-field/uni-item-field';\r\n\r\n@Component({\r\n selector: 'uni-item-field-with-lens-tooltip',\r\n imports: [DxTooltipModule, FaIconComponent, UniItemField],\r\n templateUrl: './uni-item-field-with-lens-tooltip.html',\r\n styleUrl: './uni-item-field-with-lens-tooltip.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniItemFieldWithLensTooltip {\r\n /* Input */\r\n id = input.required<string>();\r\n label = input.required<string>();\r\n value = input.required<string | number | Date | null | undefined>();\r\n\r\n /* Icon */\r\n readonly ICON_INFO = faCircleInfo;\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n <uni-item-field [label]=\"label()\" [value]=\"value()\" />\r\n\r\n <div #tooltipInfoTarget>\r\n <fa-icon\r\n class=\"text-theme-200 cursor-help rounded px-1 text-xs! transition duration-150 ease-in-out hover:opacity-75\"\r\n [icon]=\"ICON_INFO\">\r\n </fa-icon>\r\n </div>\r\n\r\n <dx-tooltip\r\n [target]=\"tooltipInfoTarget\"\r\n showEvent=\"mouseenter\"\r\n hideEvent=\"mouseleave\"\r\n [hideOnOutsideClick]=\"false\">\r\n <div *dxTemplate=\"let data = data; of: 'content'\">\r\n <ng-content></ng-content>\r\n </div>\r\n </dx-tooltip>\r\n</div>\r\n","export enum LedStatus {\r\n OK,\r\n WARNING,\r\n ERROR,\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n\r\nimport { LedStatus } from './model';\r\n\r\n@Component({\r\n selector: 'uni-led',\r\n imports: [CommonModule],\r\n templateUrl: './uni-led.html',\r\n styleUrls: ['./uni-led.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniLed {\r\n /* Inputs */\r\n public description = input.required<string>();\r\n public status = input.required<LedStatus | boolean | null | undefined>();\r\n\r\n /* Enum */\r\n protected readonly LED_STATUS = LedStatus;\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n <div\r\n class=\"led\"\r\n [ngClass]=\"{\r\n ok: status() === true || status() === LED_STATUS.OK,\r\n warning: status() === LED_STATUS.WARNING,\r\n error: status() === false || status() === LED_STATUS.ERROR,\r\n }\"></div>\r\n <p class=\"truncate text-sm\">{{ description() }}</p>\r\n <ng-content></ng-content>\r\n</div>\r\n","import { CommonModule, NgOptimizedImage } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\r\nimport {\r\n faArrowRightFromBracket,\r\n faArrowRightToBracket,\r\n faBell,\r\n faLanguage,\r\n faMoon,\r\n faSun,\r\n faUser,\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { DxButtonModule } from 'devextreme-angular/ui/button';\r\nimport { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';\r\nimport { DxSwitchModule } from 'devextreme-angular/ui/switch';\r\nimport { ValueChangedEvent as SelectBoxValueChangedEvent } from 'devextreme/ui/select_box_types';\r\nimport { ValueChangedEvent as SwitchValueChangedEvent } from 'devextreme/ui/switch_types';\r\nimport { UniTranslatePipe } from 'uni-app-fe/pipe';\r\nimport { UniLoaderService } from 'uni-app-fe/service';\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\n\r\nimport { MenuInteraction, MenuItem } from './model';\r\n\r\n@Component({\r\n selector: 'uni-side-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RouterLink,\r\n RouterLinkActive,\r\n DxButtonModule,\r\n DxSelectBoxModule,\r\n DxSwitchModule,\r\n UniTranslatePipe,\r\n FaIconComponent,\r\n NgOptimizedImage,\r\n ],\r\n templateUrl: './uni-side-menu.html',\r\n styleUrls: ['./uni-side-menu.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class UniSideMenu {\r\n /* Service */\r\n readonly elementRef = inject(ElementRef);\r\n readonly uniLoader = inject(UniLoaderService);\r\n\r\n /* Input */\r\n readonly pathUnitecLogo = input.required<string>();\r\n readonly menuItems = input<MenuItem[]>([]);\r\n readonly menuInteractions = input<MenuInteraction[]>([]);\r\n\r\n /* Output */\r\n evtToggleMenu = output<false>();\r\n\r\n /* Variables */\r\n locale = UniLocaleManager.locale;\r\n localesSupported = UniLocaleManager.localesSupported;\r\n darkMode = signal<boolean>(\r\n !localStorage.getItem('uni-theme') || localStorage.getItem('uni-theme') === 'dark',\r\n );\r\n\r\n /* Icons */\r\n readonly ICON = {\r\n USER: faUser,\r\n LOGIN: faArrowRightToBracket,\r\n LOGOUT: faArrowRightFromBracket,\r\n LIGHT_MODE: faSun,\r\n DARK_MODE: faMoon,\r\n LANGUAGE: faLanguage,\r\n NOTIFICATION: faBell,\r\n };\r\n\r\n /* ---------------------- Host listener ---------------------- */\r\n @HostListener('document:click', ['$event'])\r\n protected onClickOutside(event: Event): void {\r\n const target = event.target as HTMLElement;\r\n\r\n // Controlla se il click è avvenuto dentro il menu principale\r\n const clickedInsideMenu = this.elementRef.nativeElement.contains(target);\r\n\r\n // Controlla se il click è avvenuto dentro un popup/dropdown aperto\r\n const clickedInsideOverlay = !!target.closest(\r\n '.dx-overlay-wrapper, .dx-dropdowneditor-overlay',\r\n );\r\n\r\n // Se il click è fuori da entrambi, allora chiude il menu\r\n if (!clickedInsideMenu && !clickedInsideOverlay) {\r\n this.evtToggleMenu.emit(false);\r\n }\r\n }\r\n\r\n /* ---------------------- Methods ---------------------- */\r\n updateTheme(e: SwitchValueChangedEvent): void {\r\n this.uniLoader.show();\r\n localStorage.setItem('uni-theme', e.value ? 'dark' : 'light');\r\n globalThis.location.reload();\r\n }\r\n\r\n updateLocale(e: SelectBoxValueChangedEvent): void {\r\n this.uniLoader.show();\r\n localStorage.setItem('uni-locale', e.value);\r\n globalThis.location.reload();\r\n }\r\n}\r\n","<aside\r\n class=\"dark:bg-theme-dark-800 dark:border-theme-dark-900 flex h-screen w-[80vw] max-w-75 flex-col gap-6 overflow-hidden rounded-l border-b-2 border-l-2 border-blue-400/33 bg-blue-300 p-4 shadow-2xl\">\r\n <!-- Header: User/Close -->\r\n <div class=\"flex h-8 w-full shrink-0 items-center\">\r\n <dx-button class=\"ml-auto rounded-full!\" [icon]=\"'close'\" (onClick)=\"evtToggleMenu.emit(false)\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"custom-scrollbar flex flex-1 flex-col overflow-x-hidden overflow-y-auto pr-1\">\r\n <!-- Sezione Menu Principale -->\r\n @if (menuItems().length) {\r\n <ul class=\"flex flex-col gap-1.5\">\r\n @for (item of menuItems(); track item.id) { @if (item.visible !== false) {\r\n <li>\r\n <a\r\n class=\"group flex h-12 items-center gap-3 rounded-lg px-3 text-white! transition-colors dark:text-gray-300!\"\r\n [ngClass]=\"{\r\n 'dark:hover:bg-theme-dark-700 hover:bg-blue-400': !item.badge && !item.disabled,\r\n 'hover:bg-red-500/50': item.badge && !item.disabled,\r\n 'pointer-events-none opacity-30 grayscale': item.disabled,\r\n }\"\r\n [routerLink]=\"item.disabled ? null : item.path\"\r\n [routerLinkActive]=\"item.badge ?\r\n 'bg-red-500/60 *:text-white! *:font-semibold!' :\r\n 'bg-blue-400/75 dark:bg-theme-dark-700 *:text-white! *:font-semibold!'\r\n \"\r\n (click)=\"evtToggleMenu.emit(false)\">\r\n <fa-icon [icon]=\"item.icon\" class=\"w-6 text-center text-lg\"></fa-icon>\r\n <span class=\"flex-1 truncate font-medium\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <div\r\n class=\"flex size-6 animate-pulse items-center justify-center rounded bg-red-500 shadow-lg\">\r\n <fa-icon class=\"text-xs\" [icon]=\"ICON.NOTIFICATION\"></fa-icon>\r\n </div>\r\n }\r\n </a>\r\n </li>\r\n } }\r\n </ul>\r\n }\r\n\r\n <!-- Sezione Interazioni Dinamiche -->\r\n @if (menuInteractions().length) {\r\n <hr class=\"dark:border-theme-dark-900 my-6 border-blue-400/30\" />\r\n <ul class=\"flex flex-col gap-2 text-white\">\r\n @for (item of menuInteractions(); track item.id) { @if (item.data.type === 'button') {\r\n <li>\r\n <button\r\n type=\"button\"\r\n class=\"flex h-12 w-full items-center gap-3 rounded-lg px-3 transition-all active:scale-95\"\r\n [class]=\"item.class\"\r\n (click)=\"item.data.onClick()\">\r\n <fa-icon class=\"w-6\" [icon]=\"item.data.icon\"></fa-icon>\r\n <span class=\"flex-1 truncate text-left font-medium\">{{ item.label }}</span>\r\n </button>\r\n </li>\r\n } @else if (item.data.type === 'select') {\r\n <li\r\n class=\"dark:bg-theme-dark-700 flex flex-col gap-1 rounded-lg bg-blue-400/75 p-3 shadow-sm\">\r\n <span class=\"text-xs font-bold uppercase opacity-60\">{{ item.label }}</span>\r\n <dx-select-box\r\n class=\"w-full\"\r\n valueExpr=\"id\"\r\n displayExpr=\"description\"\r\n [items]=\"item.data.combos\"\r\n [value]=\"item.data.value\"\r\n stylingMode=\"underlined\"\r\n (onValueChanged)=\"item.data.onValueChanged($event)\">\r\n </dx-select-box>\r\n </li>\r\n } }\r\n </ul>\r\n }\r\n\r\n <!-- Settings Statici -->\r\n <hr class=\"dark:border-theme-dark-900 my-6 border-blue-400/30\" />\r\n <div class=\"flex flex-col gap-3\">\r\n <div\r\n class=\"dark:bg-theme-dark-700 flex h-14 items-center justify-between rounded-lg bg-blue-400/75 px-4 text-white shadow-sm\">\r\n <div class=\"flex items-center gap-3\">\r\n <fa-icon [icon]=\"darkMode() ? ICON.DARK_MODE : ICON.LIGHT_MODE\"></fa-icon>\r\n <span class=\"truncate\">{{ 'DarkMode' | translate }}</span>\r\n </div>\r\n <dx-switch [value]=\"darkMode()\" (onValueChanged)=\"updateTheme($event)\"></dx-switch>\r\n </div>\r\n\r\n <div\r\n class=\"dark:bg-theme-dark-700 flex h-14 items-center justify-between rounded-lg bg-blue-400/75 px-4 text-white shadow-sm\">\r\n <div class=\"flex items-center gap-3\">\r\n <fa-icon [icon]=\"ICON.LANGUAGE\"></fa-icon>\r\n <span class=\"truncate\">{{ 'Language' | translate }}</span>\r\n </div>\r\n <dx-select-box\r\n class=\"w-24\"\r\n [items]=\"localesSupported\"\r\n [value]=\"locale\"\r\n stylingMode=\"underlined\"\r\n (onValueChanged)=\"updateLocale($event)\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer Logo -->\r\n <div class=\"mt-auto border-t border-white/20 pt-4\">\r\n <img\r\n class=\"ml-auto opacity-90 transition-opacity hover:opacity-100\"\r\n [ngSrc]=\"pathUnitecLogo()\"\r\n priority\r\n alt=\"Brand logo\"\r\n height=\"32\"\r\n width=\"88\" />\r\n </div>\r\n</aside>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "uni-app-fe",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=21.2.0",
6
6
  "@angular/core": ">=21.2.0",
7
7
  "devextreme": ">=25.2.0",
8
8
  "devextreme-angular": ">=25.2.0",
9
- "uni-model-type": ">=0.1.7",
10
- "uni-error": ">=0.1.19",
9
+ "uni-model-type": ">=0.1.8",
10
+ "uni-error": ">=0.1.22",
11
11
  "uni-manager": ">=0.1.25"
12
12
  },
13
13
  "dependencies": {
@@ -11,12 +11,12 @@ import { UniLoaderService } from 'uni-app-fe/service';
11
11
 
12
12
  declare class UniBannerAlert {
13
13
  type: _angular_core.InputSignal<"warning" | "error">;
14
- lblTitle: _angular_core.InputSignal<string>;
15
- lblDescription: _angular_core.InputSignal<string>;
14
+ keyTitle: _angular_core.InputSignal<string>;
15
+ keyDescription: _angular_core.InputSignal<string>;
16
16
  icon: _angular_core.InputSignal<IconDefinition | undefined>;
17
17
  readonly ICON_WARNING: IconDefinition;
18
18
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniBannerAlert, never>;
19
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBannerAlert, "uni-banner-alert", never, { "type": { "alias": "type"; "required": true; "isSignal": true; }; "lblTitle": { "alias": "lblTitle"; "required": true; "isSignal": true; }; "lblDescription": { "alias": "lblDescription"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
19
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniBannerAlert, "uni-banner-alert", never, { "type": { "alias": "type"; "required": true; "isSignal": true; }; "keyTitle": { "alias": "keyTitle"; "required": true; "isSignal": true; }; "keyDescription": { "alias": "keyDescription"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
20
20
  }
21
21
 
22
22
  declare class UniDialogError {
@@ -52,10 +52,11 @@ declare class UniHeader {
52
52
  version: _angular_core.InputSignal<string>;
53
53
  pathBrandLogo: _angular_core.InputSignal<string>;
54
54
  pathAppLogo: _angular_core.InputSignal<string | undefined>;
55
- sideMenu: _angular_core.InputSignal<boolean>;
55
+ hasSideMenu: _angular_core.InputSignal<boolean>;
56
+ centralDescription: _angular_core.InputSignal<string | undefined>;
56
57
  evtToggleMenu: _angular_core.OutputEmitterRef<true>;
57
58
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UniHeader, never>;
58
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniHeader, "uni-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "version": { "alias": "version"; "required": true; "isSignal": true; }; "pathBrandLogo": { "alias": "pathBrandLogo"; "required": true; "isSignal": true; }; "pathAppLogo": { "alias": "pathAppLogo"; "required": false; "isSignal": true; }; "sideMenu": { "alias": "sideMenu"; "required": false; "isSignal": true; }; }, { "evtToggleMenu": "evtToggleMenu"; }, never, never, true, never>;
59
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UniHeader, "uni-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "version": { "alias": "version"; "required": true; "isSignal": true; }; "pathBrandLogo": { "alias": "pathBrandLogo"; "required": true; "isSignal": true; }; "pathAppLogo": { "alias": "pathAppLogo"; "required": false; "isSignal": true; }; "hasSideMenu": { "alias": "hasSideMenu"; "required": false; "isSignal": true; }; "centralDescription": { "alias": "centralDescription"; "required": false; "isSignal": true; }; }, { "evtToggleMenu": "evtToggleMenu"; }, never, never, true, never>;
59
60
  }
60
61
 
61
62
  declare class UniItemFieldWithHightContrast {