@dbg-riskit/angular-error 18.1.0 → 20.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/dbg-riskit-angular-error.mjs +75 -107
- package/fesm2022/dbg-riskit-angular-error.mjs.map +1 -1
- package/index.d.ts +81 -3
- package/package.json +9 -12
- package/esm2022/dbg-riskit-angular-error.mjs +0 -5
- package/esm2022/lib/error.collector.mjs +0 -65
- package/esm2022/lib/error.menu.component.mjs +0 -205
- package/esm2022/lib/error.message.component.mjs +0 -119
- package/esm2022/lib/error.message.wrapper.mjs +0 -32
- package/esm2022/lib/error.module.mjs +0 -45
- package/esm2022/lib/rxjs.utils.mjs +0 -10
- package/esm2022/public_api.mjs +0 -5
- package/lib/error.collector.d.ts +0 -16
- package/lib/error.menu.component.d.ts +0 -34
- package/lib/error.message.component.d.ts +0 -16
- package/lib/error.message.wrapper.d.ts +0 -15
- package/lib/error.module.d.ts +0 -10
- package/lib/rxjs.utils.d.ts +0 -8
- package/public_api.d.ts +0 -4
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { ErrorHandler,
|
|
2
|
+
import { ErrorHandler, inject, Injectable, ChangeDetectorRef, Input, ChangeDetectionStrategy, Component, EventEmitter, ViewChildren } from '@angular/core';
|
|
3
3
|
import { AUTH_PROVIDER, DATE_FORMAT } from '@dbg-riskit/angular-common';
|
|
4
4
|
import { toString, ErrorType } from '@dbg-riskit/common';
|
|
5
5
|
import { ReplaySubject, EMPTY, Subject, merge, timer } from 'rxjs';
|
|
6
|
-
import { trigger, state,
|
|
7
|
-
import {
|
|
6
|
+
import { trigger, state, transition, style, animate, keyframes } from '@angular/animations';
|
|
7
|
+
import { MatIconButton } from '@angular/material/button';
|
|
8
|
+
import { MatIcon } from '@angular/material/icon';
|
|
9
|
+
import { MatMenuTrigger, MatMenu } from '@angular/material/menu';
|
|
10
|
+
import { BaseComponent } from '@dbg-riskit/angular-view';
|
|
8
11
|
import { filter, takeUntil, map, catchError, defaultIfEmpty } from 'rxjs/operators';
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import * as i2 from '@angular/material/card';
|
|
12
|
-
import * as i3 from '@angular/material/icon';
|
|
13
|
-
import * as i3$1 from '@angular/material/button';
|
|
14
|
-
import * as i5 from '@angular/material/menu';
|
|
12
|
+
import { DatePipe } from '@angular/common';
|
|
13
|
+
import { MatCard, MatCardHeader, MatCardAvatar, MatCardTitle, MatCardSubtitle, MatCardContent } from '@angular/material/card';
|
|
15
14
|
|
|
16
15
|
function toErrorMessage(err) {
|
|
17
16
|
let errorMessage;
|
|
@@ -34,9 +33,10 @@ function toErrorMessage(err) {
|
|
|
34
33
|
return errorMessage;
|
|
35
34
|
}
|
|
36
35
|
class ErrorCollectorService extends ErrorHandler {
|
|
37
|
-
constructor(
|
|
36
|
+
constructor() {
|
|
38
37
|
super();
|
|
39
38
|
this._errorObservable = new ReplaySubject(10);
|
|
39
|
+
const authProvider = inject(AUTH_PROVIDER, { optional: true });
|
|
40
40
|
if (authProvider) {
|
|
41
41
|
authProvider.loggedInStream.subscribe((auth) => {
|
|
42
42
|
this._errorObservable = new ReplaySubject(10);
|
|
@@ -61,22 +61,18 @@ class ErrorCollectorService extends ErrorHandler {
|
|
|
61
61
|
this.handleError(err);
|
|
62
62
|
return EMPTY;
|
|
63
63
|
}
|
|
64
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
65
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
64
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorCollectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
65
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorCollectorService, providedIn: 'root' }); }
|
|
66
66
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
68
|
-
type: Injectable
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}, {
|
|
72
|
-
type: Inject,
|
|
73
|
-
args: [AUTH_PROVIDER]
|
|
74
|
-
}] }] });
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorCollectorService, decorators: [{
|
|
68
|
+
type: Injectable,
|
|
69
|
+
args: [{ providedIn: 'root' }]
|
|
70
|
+
}], ctorParameters: () => [] });
|
|
75
71
|
|
|
76
72
|
class ErrorMessageComponent {
|
|
77
|
-
constructor(
|
|
78
|
-
this.dateFormat =
|
|
79
|
-
this.changeDetectorRef =
|
|
73
|
+
constructor() {
|
|
74
|
+
this.dateFormat = inject(DATE_FORMAT);
|
|
75
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
80
76
|
this.readState = null;
|
|
81
77
|
this.isLast = false;
|
|
82
78
|
}
|
|
@@ -94,8 +90,8 @@ class ErrorMessageComponent {
|
|
|
94
90
|
this.changeDetectorRef.markForCheck();
|
|
95
91
|
}
|
|
96
92
|
}
|
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: ErrorMessageComponent, isStandalone: true, selector: "risk-error-message", inputs: { error: "error", isLast: "isLast" }, host: { properties: { "class.risk-error-message": "true" } }, ngImport: i0, template: "<mat-card (@readState.done)=\"markRead($event)\" [@readState]=\"readState\" [class.risk-error-message-last]=\"isLast\">\n <mat-card-header>\n <mat-icon color=\"warn\" mat-card-avatar>error_outline</mat-icon>\n @if (error?.type.isNetworkError()) {\n <mat-card-title>Network error</mat-card-title>\n }\n @if (error?.type.isRequestError()) {\n <mat-card-title>API error</mat-card-title>\n }\n @if (error?.type.isAuthError()) {\n <mat-card-title>Authorization error</mat-card-title>\n }\n @if (!error?.type.isNetworkError() && !error?.type.isRequestError() && !error?.type.isAuthError()) {\n <mat-card-title\n >\n General error\n </mat-card-title>\n }\n <mat-card-subtitle>{{ error?.date | date:dateFormat }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n @if (error?.statusCode) {\n <p class=\"risk-error-message-code\">Error code: {{ error?.statusCode }}</p>\n }\n <p>\n {{ error?.message }}\n </p>\n </mat-card-content>\n</mat-card>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host .mat-mdc-card{margin:0 10px 7px}:host .mat-mdc-card.risk-error-message-last{margin-bottom:0}:host .mat-mdc-card .mat-mdc-card-subtitle{margin-bottom:5px}:host .mat-mdc-card p{margin:0}:host .mat-mdc-card p.risk-error-message-code{position:absolute;bottom:10px;right:10px}:host .mat-mdc-card p.risk-error-message-code+p:last-child{margin-bottom:15px}\n"], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "pipe", type: DatePipe, name: "date" }], animations: [
|
|
99
95
|
trigger('readState', [
|
|
100
96
|
state('read', style({ background: 'transparent' })),
|
|
101
97
|
transition(':enter', [
|
|
@@ -134,7 +130,7 @@ class ErrorMessageComponent {
|
|
|
134
130
|
])
|
|
135
131
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
136
132
|
}
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorMessageComponent, decorators: [{
|
|
138
134
|
type: Component,
|
|
139
135
|
args: [{ selector: 'risk-error-message', animations: [
|
|
140
136
|
trigger('readState', [
|
|
@@ -175,11 +171,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
175
171
|
])
|
|
176
172
|
], host: {
|
|
177
173
|
'[class.risk-error-message]': 'true'
|
|
178
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
174
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, imports: [
|
|
175
|
+
MatCard,
|
|
176
|
+
MatCardHeader,
|
|
177
|
+
MatIcon,
|
|
178
|
+
MatCardAvatar,
|
|
179
|
+
MatCardTitle,
|
|
180
|
+
MatCardSubtitle,
|
|
181
|
+
MatCardContent,
|
|
182
|
+
DatePipe
|
|
183
|
+
], template: "<mat-card (@readState.done)=\"markRead($event)\" [@readState]=\"readState\" [class.risk-error-message-last]=\"isLast\">\n <mat-card-header>\n <mat-icon color=\"warn\" mat-card-avatar>error_outline</mat-icon>\n @if (error?.type.isNetworkError()) {\n <mat-card-title>Network error</mat-card-title>\n }\n @if (error?.type.isRequestError()) {\n <mat-card-title>API error</mat-card-title>\n }\n @if (error?.type.isAuthError()) {\n <mat-card-title>Authorization error</mat-card-title>\n }\n @if (!error?.type.isNetworkError() && !error?.type.isRequestError() && !error?.type.isAuthError()) {\n <mat-card-title\n >\n General error\n </mat-card-title>\n }\n <mat-card-subtitle>{{ error?.date | date:dateFormat }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n @if (error?.statusCode) {\n <p class=\"risk-error-message-code\">Error code: {{ error?.statusCode }}</p>\n }\n <p>\n {{ error?.message }}\n </p>\n </mat-card-content>\n</mat-card>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host .mat-mdc-card{margin:0 10px 7px}:host .mat-mdc-card.risk-error-message-last{margin-bottom:0}:host .mat-mdc-card .mat-mdc-card-subtitle{margin-bottom:5px}:host .mat-mdc-card p{margin:0}:host .mat-mdc-card p.risk-error-message-code{position:absolute;bottom:10px;right:10px}:host .mat-mdc-card p.risk-error-message-code+p:last-child{margin-bottom:15px}\n"] }]
|
|
184
|
+
}], propDecorators: { error: [{
|
|
183
185
|
type: Input
|
|
184
186
|
}], isLast: [{
|
|
185
187
|
type: Input
|
|
@@ -255,15 +257,24 @@ const JIGGLE_ANIMATION = animate('1s ease-in', keyframes([
|
|
|
255
257
|
})
|
|
256
258
|
]));
|
|
257
259
|
class ErrorComponent extends BaseComponent {
|
|
258
|
-
constructor(
|
|
259
|
-
super();
|
|
260
|
-
this.errorCollector =
|
|
261
|
-
this.authProvider =
|
|
262
|
-
this.changeDetectorRef =
|
|
260
|
+
constructor() {
|
|
261
|
+
super(...arguments);
|
|
262
|
+
this.errorCollector = inject(ErrorCollectorService);
|
|
263
|
+
this.authProvider = inject(AUTH_PROVIDER, { optional: true });
|
|
264
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
263
265
|
this.state = null;
|
|
264
266
|
this._errors = [];
|
|
265
267
|
this._menuState = new Subject();
|
|
266
268
|
}
|
|
269
|
+
get color() {
|
|
270
|
+
if (this.errors.some((error) => !error.read)) {
|
|
271
|
+
return 'warn';
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
get errors() {
|
|
276
|
+
return this._errors;
|
|
277
|
+
}
|
|
267
278
|
ngOnInit() {
|
|
268
279
|
// Init Jiggle animation loop
|
|
269
280
|
this.initAnimation();
|
|
@@ -276,6 +287,21 @@ class ErrorComponent extends BaseComponent {
|
|
|
276
287
|
this.authProvider.loggedInStream.pipe(takeUntil(this.destroyed)).subscribe((auth) => this.loggedInChanged(auth));
|
|
277
288
|
}
|
|
278
289
|
}
|
|
290
|
+
menuOpened() {
|
|
291
|
+
this._menuState.next(true);
|
|
292
|
+
}
|
|
293
|
+
menuClosed() {
|
|
294
|
+
this._menuState.next(false);
|
|
295
|
+
}
|
|
296
|
+
// <editor-fold desc="Animation control" defaultstate="collapsed">
|
|
297
|
+
animationDone(event) {
|
|
298
|
+
if (event.toState === 'newError') {
|
|
299
|
+
// Reset after annimation
|
|
300
|
+
this.state = 'active';
|
|
301
|
+
// Called from animation controller we need to re-check
|
|
302
|
+
this.changeDetectorRef.markForCheck();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
279
305
|
animateOnMenuOpened() {
|
|
280
306
|
const animateMessages = () => this.errorMessages.forEach((message) => message.animate());
|
|
281
307
|
animateMessages();
|
|
@@ -311,30 +337,6 @@ class ErrorComponent extends BaseComponent {
|
|
|
311
337
|
}
|
|
312
338
|
this.changeDetectorRef.markForCheck();
|
|
313
339
|
}
|
|
314
|
-
get color() {
|
|
315
|
-
if (this.errors.some((error) => !error.read)) {
|
|
316
|
-
return 'warn';
|
|
317
|
-
}
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
menuOpened() {
|
|
321
|
-
this._menuState.next(true);
|
|
322
|
-
}
|
|
323
|
-
menuClosed() {
|
|
324
|
-
this._menuState.next(false);
|
|
325
|
-
}
|
|
326
|
-
get errors() {
|
|
327
|
-
return this._errors;
|
|
328
|
-
}
|
|
329
|
-
// <editor-fold desc="Animation control" defaultstate="collapsed">
|
|
330
|
-
animationDone(event) {
|
|
331
|
-
if (event.toState === 'newError') {
|
|
332
|
-
// Reset after annimation
|
|
333
|
-
this.state = 'active';
|
|
334
|
-
// Called from animation controller we need to re-check
|
|
335
|
-
this.changeDetectorRef.markForCheck();
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
340
|
initAnimation() {
|
|
339
341
|
timer(100, 2000).pipe(
|
|
340
342
|
// Run animation everytime we have non-read errors
|
|
@@ -350,8 +352,8 @@ class ErrorComponent extends BaseComponent {
|
|
|
350
352
|
this.changeDetectorRef.markForCheck();
|
|
351
353
|
});
|
|
352
354
|
}
|
|
353
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
354
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
355
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
356
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: ErrorComponent, isStandalone: true, selector: "risk-error-menu", inputs: { keepVisibleOnClick: "keepVisibleOnClick" }, host: { properties: { "class.risk-error-menu": "true" } }, viewQueries: [{ propertyName: "errorMessages", predicate: ErrorMessageComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (state != null) {\n <button\n #errorMenuTrigger=\"matMenuTrigger\"\n (@buttonState.done)=\"animationDone($event)\"\n (menuClosed)=\"menuClosed()\"\n (menuOpened)=\"menuOpened()\"\n [@buttonState]=\"state\"\n [class.risk-menu-open]=\"errorMenuTrigger.menuOpen\"\n [color]=\"color\"\n [matMenuTriggerFor]=\"errorMenu\"\n mat-icon-button\n type=\"button\">\n <mat-icon>error_outline</mat-icon>\n </button>\n}\n\n<mat-menu #errorMenu=\"matMenu\"\n [overlapTrigger]=\"false\"\n class=\"risk-error-menu-mat-menu\">\n @for (error of errors; track error; let isLast = $last) {\n <risk-error-message\n (click)=\"keepVisibleOnClick ? $event.stopPropagation() : null\"\n [error]=\"error\"\n [isLast]=\"isLast\"/>\n }\n</mat-menu>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", "::ng-deep .risk-error-menu-mat-menu{max-width:600px!important}\n"], dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: ErrorMessageComponent, selector: "risk-error-message", inputs: ["error", "isLast"] }], animations: [
|
|
355
357
|
trigger('buttonState', [
|
|
356
358
|
state('inactive', style({ transform: 'translateX(0) scale(0)' })),
|
|
357
359
|
state('active', style({ transform: 'translateX(0) scale(1)' })),
|
|
@@ -371,7 +373,7 @@ class ErrorComponent extends BaseComponent {
|
|
|
371
373
|
])
|
|
372
374
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
373
375
|
}
|
|
374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: ErrorComponent, decorators: [{
|
|
375
377
|
type: Component,
|
|
376
378
|
args: [{ selector: 'risk-error-menu', animations: [
|
|
377
379
|
trigger('buttonState', [
|
|
@@ -393,56 +395,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
393
395
|
])
|
|
394
396
|
], host: {
|
|
395
397
|
'[class.risk-error-menu]': 'true'
|
|
396
|
-
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "
|
|
397
|
-
}],
|
|
398
|
-
type: Optional
|
|
399
|
-
}, {
|
|
400
|
-
type: Inject,
|
|
401
|
-
args: [AUTH_PROVIDER]
|
|
402
|
-
}] }, { type: i0.ChangeDetectorRef }], propDecorators: { keepVisibleOnClick: [{
|
|
398
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, imports: [MatIconButton, MatMenuTrigger, MatIcon, MatMenu, ErrorMessageComponent], template: "@if (state != null) {\n <button\n #errorMenuTrigger=\"matMenuTrigger\"\n (@buttonState.done)=\"animationDone($event)\"\n (menuClosed)=\"menuClosed()\"\n (menuOpened)=\"menuOpened()\"\n [@buttonState]=\"state\"\n [class.risk-menu-open]=\"errorMenuTrigger.menuOpen\"\n [color]=\"color\"\n [matMenuTriggerFor]=\"errorMenu\"\n mat-icon-button\n type=\"button\">\n <mat-icon>error_outline</mat-icon>\n </button>\n}\n\n<mat-menu #errorMenu=\"matMenu\"\n [overlapTrigger]=\"false\"\n class=\"risk-error-menu-mat-menu\">\n @for (error of errors; track error; let isLast = $last) {\n <risk-error-message\n (click)=\"keepVisibleOnClick ? $event.stopPropagation() : null\"\n [error]=\"error\"\n [isLast]=\"isLast\"/>\n }\n</mat-menu>\n", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", "::ng-deep .risk-error-menu-mat-menu{max-width:600px!important}\n"] }]
|
|
399
|
+
}], propDecorators: { keepVisibleOnClick: [{
|
|
403
400
|
type: Input
|
|
404
401
|
}], errorMessages: [{
|
|
405
402
|
type: ViewChildren,
|
|
406
403
|
args: [ErrorMessageComponent]
|
|
407
404
|
}] } });
|
|
408
405
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
{
|
|
417
|
-
provide: ErrorHandler,
|
|
418
|
-
useExisting: ErrorCollectorService
|
|
419
|
-
}
|
|
420
|
-
], imports: [CommonModule,
|
|
421
|
-
CommonViewModule] }); }
|
|
406
|
+
function provideErrorHandler() {
|
|
407
|
+
return [
|
|
408
|
+
{
|
|
409
|
+
provide: ErrorHandler,
|
|
410
|
+
useExisting: ErrorCollectorService
|
|
411
|
+
}
|
|
412
|
+
];
|
|
422
413
|
}
|
|
423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ErrorModule, decorators: [{
|
|
424
|
-
type: NgModule,
|
|
425
|
-
args: [{
|
|
426
|
-
imports: [
|
|
427
|
-
CommonModule,
|
|
428
|
-
CommonViewModule
|
|
429
|
-
],
|
|
430
|
-
exports: [
|
|
431
|
-
ErrorComponent
|
|
432
|
-
],
|
|
433
|
-
declarations: [
|
|
434
|
-
ErrorComponent,
|
|
435
|
-
ErrorMessageComponent
|
|
436
|
-
],
|
|
437
|
-
providers: [
|
|
438
|
-
ErrorCollectorService,
|
|
439
|
-
{
|
|
440
|
-
provide: ErrorHandler,
|
|
441
|
-
useExisting: ErrorCollectorService
|
|
442
|
-
}
|
|
443
|
-
]
|
|
444
|
-
}]
|
|
445
|
-
}] });
|
|
446
414
|
|
|
447
415
|
/**
|
|
448
416
|
* Collects all error using error collector and returns the "otherwise" error instead.
|
|
@@ -457,5 +425,5 @@ function collectErrors(errorCollector, otherwise) {
|
|
|
457
425
|
* Generated bundle index. Do not edit.
|
|
458
426
|
*/
|
|
459
427
|
|
|
460
|
-
export { ErrorCollectorService, ErrorComponent,
|
|
428
|
+
export { ErrorCollectorService, ErrorComponent, JIGGLE_ANIMATION, collectErrors, provideErrorHandler, toErrorMessage };
|
|
461
429
|
//# sourceMappingURL=dbg-riskit-angular-error.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbg-riskit-angular-error.mjs","sources":["../../../../pkg/dbg-riskit/angular-error/src/lib/error.collector.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.component.html","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.wrapper.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.menu.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.menu.component.html","../../../../pkg/dbg-riskit/angular-error/src/lib/error.module.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/rxjs.utils.ts","../../../../pkg/dbg-riskit/angular-error/src/dbg-riskit-angular-error.ts"],"sourcesContent":["import {ErrorHandler, Inject, Injectable, Optional} from '@angular/core';\nimport {AUTH_PROVIDER} from '@dbg-riskit/angular-common';\nimport {AuthProvider, ErrorMessage, ErrorType, toString} from '@dbg-riskit/common';\nimport {EMPTY, Observable, ReplaySubject} from 'rxjs';\n\nexport type ErrorTypes = ErrorMessage | Error | object | string;\n\nexport function toErrorMessage(err: ErrorTypes): ErrorMessage {\n let errorMessage: ErrorMessage;\n if ('errorType' in (err as ErrorMessage)) {\n errorMessage = err as ErrorMessage;\n } else {\n if ('message' in (err as Error)) {\n err = (err as Error).message || toString(err);\n } else {\n err = toString(err);\n }\n errorMessage = {\n message : err,\n status : 0,\n errorType: ErrorType.ERROR\n };\n }\n return errorMessage;\n}\n\n@Injectable()\nexport class ErrorCollectorService extends ErrorHandler {\n\n private _errorObservable: ReplaySubject<ErrorMessage> = new ReplaySubject(10);\n\n public constructor(@Optional() @Inject(AUTH_PROVIDER) authProvider: AuthProvider) {\n super();\n if (authProvider) {\n authProvider.loggedInStream.subscribe((auth: boolean) => {\n this._errorObservable = new ReplaySubject(10);\n });\n }\n }\n\n public error(err: ErrorMessage) {\n this._errorObservable.next(err);\n }\n\n public get errorStream(): Observable<ErrorMessage> {\n return this._errorObservable.asObservable();\n }\n\n public handleError(err: ErrorTypes): void {\n try {\n super.handleError(err);\n } finally {\n this.error(toErrorMessage(err));\n }\n }\n\n public handleStreamError<T>(err: ErrorTypes): Observable<T> {\n this.handleError(err);\n return EMPTY;\n }\n}\n","import {animate, AnimationEvent, keyframes, state, style, transition, trigger} from '@angular/animations';\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input} from '@angular/core';\nimport {DATE_FORMAT} from '@dbg-riskit/angular-common';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\n@Component({\n selector : 'risk-error-message',\n templateUrl: 'error.message.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.message.component.scss'\n ],\n animations : [\n trigger('readState', [\n state('read', style({background: 'transparent'})),\n transition(':enter', [\n style({\n height : 0,\n transform: 'scale(0)'\n }),\n animate('200ms ease-in', style({\n height : '*',\n transform: 'scale(1)'\n }))\n ]),\n transition('* => read', [\n style({\n background: 'transparent'\n }),\n animate('1500ms', keyframes([\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.25\n }),\n style({\n background: 'transparent',\n offset : 0.5\n }),\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.75\n }),\n style({\n background: 'transparent',\n offset : 1\n })\n ]))\n ])\n ])\n ],\n host : {\n '[class.risk-error-message]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class ErrorMessageComponent {\n\n public readState: 'read' | null = null;\n\n @Input()\n public error?: ErrorMessageWrapper;\n\n @Input()\n public isLast = false;\n\n public constructor(@Inject(DATE_FORMAT) public readonly dateFormat: string,\n private readonly changeDetectorRef: ChangeDetectorRef) {\n }\n\n public animate(): void {\n if (this.error != null && !this.error.read && this.readState !== 'read') {\n setTimeout(() => {\n this.readState = 'read';\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n public markRead(event: AnimationEvent): void {\n if (this.error != null && event.toState === 'read') {\n this.error.markRead();\n this.changeDetectorRef.markForCheck();\n }\n }\n}\n","<mat-card [class.risk-error-message-last]=\"isLast\" [@readState]=\"readState\" (@readState.done)=\"markRead($event)\">\n <mat-card-header>\n <mat-icon color=\"warn\" mat-card-avatar>error_outline</mat-icon>\n <mat-card-title *ngIf=\"error?.type.isNetworkError()\">Network error</mat-card-title>\n <mat-card-title *ngIf=\"error?.type.isRequestError()\">API error</mat-card-title>\n <mat-card-title *ngIf=\"error?.type.isAuthError()\">Authorization error</mat-card-title>\n <mat-card-title\n *ngIf=\"!error?.type.isNetworkError() && !error?.type.isRequestError() && !error?.type.isAuthError()\">\n General error\n </mat-card-title>\n <mat-card-subtitle>{{error?.date | date:dateFormat}}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <p *ngIf=\"error?.statusCode\" class=\"risk-error-message-code\">Error code: {{error?.statusCode}}</p>\n <p>\n {{error?.message}}\n </p>\n </mat-card-content>\n</mat-card>\n","import {EventEmitter} from '@angular/core';\n\nimport {ErrorMessage, ErrorType} from '@dbg-riskit/common';\n\nexport class ErrorMessageWrapper {\n private readonly _error: ErrorMessage;\n private readonly _date: Date = new Date();\n private _read = false;\n\n public readonly readStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n public constructor(error: ErrorMessage) {\n this._error = error;\n }\n\n public get message(): string {\n return this._error.message;\n }\n\n public get type(): ErrorType {\n return this._error.errorType;\n }\n\n public get statusCode(): number {\n return this._error.status;\n }\n\n public get date(): Date {\n return this._date;\n }\n\n public get read(): boolean {\n return this._read;\n }\n\n public markRead(): void {\n if (!this._read) {\n this._read = true;\n this.readStateChanged.emit(this._read);\n this.readStateChanged.complete();\n }\n }\n}\n","import {\n animate,\n AnimationAnimateMetadata,\n AnimationEvent,\n keyframes,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n Optional,\n QueryList,\n ViewChildren,\n Input\n} from '@angular/core';\nimport {AUTH_PROVIDER, MatColorTheme} from '@dbg-riskit/angular-common';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {AuthProvider, ErrorMessage} from '@dbg-riskit/common';\nimport {merge, Observable, Subject, timer} from 'rxjs';\nimport {filter, map, takeUntil} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\nimport {ErrorMessageComponent} from './error.message.component';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\nexport const JIGGLE_ANIMATION: AnimationAnimateMetadata = animate('1s ease-in', keyframes([\n style({\n transform: 'scale(0.8) translateX(-1px) rotate(0)',\n offset : 0.1\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.2\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.3\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.4\n }),\n style({\n transform: 'scale(1.5) translateX(-4px) rotate(-8deg)',\n offset : 0.5\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.6\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.7\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.8\n }),\n style({\n transform: 'scale(1) translateX(-1px) rotate(0)',\n offset : 0.9\n })\n]));\n\n@Component({\n selector : 'risk-error-menu',\n templateUrl : 'error.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.menu.component.scss'\n ],\n animations : [\n trigger('buttonState', [\n state('inactive', style({transform: 'translateX(0) scale(0)'})),\n state('active', style({transform: 'translateX(0) scale(1)'})),\n state('newError', style({transform: 'translateX(0) scale(1)'})),\n transition('void => active', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('void => newError', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('active => newError', [\n style({transform: 'scale(1) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ])\n ])\n ],\n host : {\n '[class.risk-error-menu]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false\n})\nexport class ErrorComponent extends BaseComponent implements OnInit {\n\n public state: 'active' | 'newError' | null = null;\n\n @Input() public keepVisibleOnClick?: boolean;\n\n private readonly _errors: ErrorMessageWrapper[] = [];\n\n private readonly _menuState: Subject<boolean> = new Subject();\n\n @ViewChildren(ErrorMessageComponent)\n public errorMessages?: QueryList<ErrorMessageComponent>;\n\n public constructor(private readonly errorCollector: ErrorCollectorService,\n @Optional() @Inject(AUTH_PROVIDER) private readonly authProvider: AuthProvider,\n private readonly changeDetectorRef: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n // Init Jiggle animation loop\n this.initAnimation();\n\n // Subscribe to error stream\n this.subscribeToErrors();\n\n // Once opened animate messages and set as read after animation\n this._menuState.pipe(\n filter((opened: boolean) => opened),\n takeUntil(this.destroyed)\n ).subscribe(() => this.animateOnMenuOpened());\n\n // Refresh on \"logged-in\" state changes\n if (this.authProvider) {\n this.authProvider.loggedInStream.pipe(\n takeUntil(this.destroyed)\n ).subscribe((auth: boolean) => this.loggedInChanged(auth));\n }\n }\n\n private animateOnMenuOpened() {\n const animateMessages = () => this.errorMessages!.forEach(\n (message: ErrorMessageComponent) => message.animate());\n animateMessages();\n this.errorMessages!.changes.pipe(\n takeUntil(merge(this.destroyed, this._menuState))\n ).subscribe(() => animateMessages());\n }\n\n private loggedInChanged(auth: boolean) {\n // Subscribe to errors once logged in again\n if (auth) {\n this.subscribeToErrors();\n } else {\n while (this._errors.length > 0) {\n this._errors.pop();\n }\n }\n this.changeDetectorRef.markForCheck();\n }\n\n private subscribeToErrors() {\n let until: Observable<void> = this.destroyed;\n // Stop receiving errors once user was logged out\n if (this.authProvider) {\n until = merge(\n until,\n this.authProvider.loggedInStream.pipe(\n filter((auth: boolean) => !auth),\n map(() => undefined)\n )\n );\n }\n this.errorCollector.errorStream.pipe(\n takeUntil(until)\n ).subscribe((error: ErrorMessage) => this.errorReceived(error, until));\n }\n\n private errorReceived(error: ErrorMessage, until: Observable<unknown>) {\n const errorMessageWrapper = new ErrorMessageWrapper(error);\n\n // Subscribe for state changes\n errorMessageWrapper.readStateChanged.pipe(\n takeUntil(until)\n ).subscribe(() => this.changeDetectorRef.detectChanges());\n\n this._errors.unshift(errorMessageWrapper);\n while (this._errors.length > 10) {\n this._errors.pop();\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n public get color(): MatColorTheme {\n if (this.errors.some((error: ErrorMessageWrapper) => !error.read)) {\n return 'warn';\n }\n return null;\n }\n\n public menuOpened(): void {\n this._menuState.next(true);\n }\n\n public menuClosed(): void {\n this._menuState.next(false);\n }\n\n public get errors(): ErrorMessageWrapper[] {\n return this._errors;\n }\n\n // <editor-fold desc=\"Animation control\" defaultstate=\"collapsed\">\n public animationDone(event: AnimationEvent): void {\n if (event.toState === 'newError') {\n // Reset after annimation\n this.state = 'active';\n\n // Called from animation controller we need to re-check\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private initAnimation(): void {\n timer(100, 2000).pipe(\n // Run animation everytime we have non-read errors\n filter(() => this.errors.some((error: ErrorMessageWrapper) => !error.read)),\n takeUntil(this.destroyed)\n ).subscribe(() => {\n switch (this.state) {\n case null:\n this.state = 'active';\n break;\n case 'active':\n this.state = 'newError';\n break;\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n // </editor-fold>\n}\n","<button *ngIf=\"state != null\"\n mat-icon-button\n [color]=\"color\"\n type=\"button\"\n [@buttonState]=\"state\"\n (@buttonState.done)=\"animationDone($event)\"\n [matMenuTriggerFor]=\"errorMenu\"\n #errorMenuTrigger=\"matMenuTrigger\"\n (menuOpened)=\"menuOpened()\"\n (menuClosed)=\"menuClosed()\"\n [class.risk-menu-open]=\"errorMenuTrigger.menuOpen\">\n <mat-icon>error_outline</mat-icon>\n</button>\n\n<mat-menu #errorMenu=\"matMenu\"\n class=\"risk-error-menu-mat-menu\"\n [overlapTrigger]=\"false\">\n <risk-error-message *ngFor=\"let error of errors; last as isLast\"\n [error]=\"error\"\n (click)=\"keepVisibleOnClick ? $event.stopPropagation() : null\"\n [isLast]=\"isLast\"></risk-error-message>\n</mat-menu>\n","import {CommonModule} from '@angular/common';\nimport {ErrorHandler, NgModule} from '@angular/core';\nimport {CommonViewModule} from '@dbg-riskit/angular-view';\nimport {ErrorCollectorService} from './error.collector';\nimport {ErrorComponent} from './error.menu.component';\nimport {ErrorMessageComponent} from './error.message.component';\n\n@NgModule({\n imports : [\n CommonModule,\n CommonViewModule\n ],\n exports : [\n ErrorComponent\n ],\n declarations: [\n ErrorComponent,\n ErrorMessageComponent\n ],\n providers : [\n ErrorCollectorService,\n {\n provide : ErrorHandler,\n useExisting: ErrorCollectorService\n }\n ]\n})\nexport class ErrorModule {\n}\n","import {MonoTypeOperatorFunction, Observable} from 'rxjs';\nimport {catchError, defaultIfEmpty} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\n\n/**\n * Collects all error using error collector and returns the \"otherwise\" error instead.\n * @param errorCollector Error collector service.\n * @param otherwise Value to be returned in case of error.\n */\nexport function collectErrors<T>(errorCollector: ErrorCollectorService, otherwise: T): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => source.pipe(\n catchError((err) => errorCollector.handleStreamError<T>(err)),\n defaultIfEmpty(otherwise)\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i4","i6.ErrorMessageComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dbg-riskit-angular-error.mjs","sources":["../../../../pkg/dbg-riskit/angular-error/src/lib/error.collector.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.component.html","../../../../pkg/dbg-riskit/angular-error/src/lib/error.message.wrapper.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.menu.component.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/error.menu.component.html","../../../../pkg/dbg-riskit/angular-error/src/lib/error.handler.provider.ts","../../../../pkg/dbg-riskit/angular-error/src/lib/rxjs.utils.ts","../../../../pkg/dbg-riskit/angular-error/src/dbg-riskit-angular-error.ts"],"sourcesContent":["import {ErrorHandler, inject, Injectable} from '@angular/core';\nimport {AUTH_PROVIDER} from '@dbg-riskit/angular-common';\nimport {AuthProvider, ErrorMessage, ErrorType, toString} from '@dbg-riskit/common';\nimport {EMPTY, Observable, ReplaySubject} from 'rxjs';\n\nexport type ErrorTypes = ErrorMessage | Error | object | string;\n\nexport function toErrorMessage(err: ErrorTypes): ErrorMessage {\n let errorMessage: ErrorMessage;\n if ('errorType' in (err as ErrorMessage)) {\n errorMessage = err as ErrorMessage;\n } else {\n if ('message' in (err as Error)) {\n err = (err as Error).message || toString(err);\n } else {\n err = toString(err);\n }\n errorMessage = {\n message : err,\n status : 0,\n errorType: ErrorType.ERROR\n };\n }\n return errorMessage;\n}\n\n@Injectable({providedIn: 'root'})\nexport class ErrorCollectorService extends ErrorHandler {\n\n private _errorObservable: ReplaySubject<ErrorMessage> = new ReplaySubject(10);\n\n public constructor() {\n super();\n\n const authProvider = inject<AuthProvider>(AUTH_PROVIDER, {optional: true});\n if (authProvider) {\n authProvider.loggedInStream.subscribe((auth: boolean) => {\n this._errorObservable = new ReplaySubject(10);\n });\n }\n }\n\n public error(err: ErrorMessage) {\n this._errorObservable.next(err);\n }\n\n public get errorStream(): Observable<ErrorMessage> {\n return this._errorObservable.asObservable();\n }\n\n public handleError(err: ErrorTypes): void {\n try {\n super.handleError(err);\n } finally {\n this.error(toErrorMessage(err));\n }\n }\n\n public handleStreamError<T>(err: ErrorTypes): Observable<T> {\n this.handleError(err);\n return EMPTY;\n }\n}\n","import {animate, AnimationEvent, keyframes, state, style, transition, trigger} from '@angular/animations';\nimport {DatePipe} from '@angular/common';\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input} from '@angular/core';\nimport {\n MatCard,\n MatCardAvatar,\n MatCardContent,\n MatCardHeader,\n MatCardSubtitle,\n MatCardTitle\n} from '@angular/material/card';\nimport {MatIcon} from '@angular/material/icon';\nimport {DATE_FORMAT} from '@dbg-riskit/angular-common';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\n@Component({\n selector : 'risk-error-message',\n templateUrl : 'error.message.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.message.component.scss'\n ],\n animations : [\n trigger('readState', [\n state('read', style({background: 'transparent'})),\n transition(':enter', [\n style({\n height : 0,\n transform: 'scale(0)'\n }),\n animate('200ms ease-in', style({\n height : '*',\n transform: 'scale(1)'\n }))\n ]),\n transition('* => read', [\n style({\n background: 'transparent'\n }),\n animate('1500ms', keyframes([\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.25\n }),\n style({\n background: 'transparent',\n offset : 0.5\n }),\n style({\n background: 'rgba(204, 51, 51, .5)',\n offset : 0.75\n }),\n style({\n background: 'transparent',\n offset : 1\n })\n ]))\n ])\n ])\n ],\n host : {\n '[class.risk-error-message]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [\n MatCard,\n MatCardHeader,\n MatIcon,\n MatCardAvatar,\n MatCardTitle,\n MatCardSubtitle,\n MatCardContent,\n DatePipe\n ]\n})\nexport class ErrorMessageComponent {\n readonly dateFormat = inject(DATE_FORMAT);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n public readState: 'read' | null = null;\n\n @Input()\n public error?: ErrorMessageWrapper;\n\n @Input()\n public isLast = false;\n\n public animate(): void {\n if (this.error != null && !this.error.read && this.readState !== 'read') {\n setTimeout(() => {\n this.readState = 'read';\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n\n public markRead(event: AnimationEvent): void {\n if (this.error != null && event.toState === 'read') {\n this.error.markRead();\n this.changeDetectorRef.markForCheck();\n }\n }\n}\n","<mat-card (@readState.done)=\"markRead($event)\" [@readState]=\"readState\" [class.risk-error-message-last]=\"isLast\">\n <mat-card-header>\n <mat-icon color=\"warn\" mat-card-avatar>error_outline</mat-icon>\n @if (error?.type.isNetworkError()) {\n <mat-card-title>Network error</mat-card-title>\n }\n @if (error?.type.isRequestError()) {\n <mat-card-title>API error</mat-card-title>\n }\n @if (error?.type.isAuthError()) {\n <mat-card-title>Authorization error</mat-card-title>\n }\n @if (!error?.type.isNetworkError() && !error?.type.isRequestError() && !error?.type.isAuthError()) {\n <mat-card-title\n >\n General error\n </mat-card-title>\n }\n <mat-card-subtitle>{{ error?.date | date:dateFormat }}</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n @if (error?.statusCode) {\n <p class=\"risk-error-message-code\">Error code: {{ error?.statusCode }}</p>\n }\n <p>\n {{ error?.message }}\n </p>\n </mat-card-content>\n</mat-card>\n","import {EventEmitter} from '@angular/core';\n\nimport {ErrorMessage, ErrorType} from '@dbg-riskit/common';\n\nexport class ErrorMessageWrapper {\n private readonly _error: ErrorMessage;\n private readonly _date: Date = new Date();\n private _read = false;\n\n public readonly readStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n public constructor(error: ErrorMessage) {\n this._error = error;\n }\n\n public get message(): string {\n return this._error.message;\n }\n\n public get type(): ErrorType {\n return this._error.errorType;\n }\n\n public get statusCode(): number {\n return this._error.status;\n }\n\n public get date(): Date {\n return this._date;\n }\n\n public get read(): boolean {\n return this._read;\n }\n\n public markRead(): void {\n if (!this._read) {\n this._read = true;\n this.readStateChanged.emit(this._read);\n this.readStateChanged.complete();\n }\n }\n}\n","import {\n animate,\n AnimationAnimateMetadata,\n AnimationEvent,\n keyframes,\n state,\n style,\n transition,\n trigger\n} from '@angular/animations';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n Input,\n OnInit,\n QueryList,\n ViewChildren\n} from '@angular/core';\nimport {MatIconButton} from '@angular/material/button';\nimport {MatIcon} from '@angular/material/icon';\nimport {MatMenu, MatMenuTrigger} from '@angular/material/menu';\nimport {AUTH_PROVIDER, MatColorTheme} from '@dbg-riskit/angular-common';\nimport {BaseComponent} from '@dbg-riskit/angular-view';\nimport {AuthProvider, ErrorMessage} from '@dbg-riskit/common';\nimport {merge, Observable, Subject, timer} from 'rxjs';\nimport {filter, map, takeUntil} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\nimport {ErrorMessageComponent} from './error.message.component';\nimport {ErrorMessageWrapper} from './error.message.wrapper';\n\nexport const JIGGLE_ANIMATION: AnimationAnimateMetadata = animate('1s ease-in', keyframes([\n style({\n transform: 'scale(0.8) translateX(-1px) rotate(0)',\n offset : 0.1\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.2\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.3\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.4\n }),\n style({\n transform: 'scale(1.5) translateX(-4px) rotate(-8deg)',\n offset : 0.5\n }),\n style({\n transform: 'scale(1.5) translateX(4px) rotate(0)',\n offset : 0.6\n }),\n style({\n transform: 'scale(1.2) translateX(-4px) rotate(0)',\n offset : 0.7\n }),\n style({\n transform: 'scale(1) translateX(2px) rotate(4deg)',\n offset : 0.8\n }),\n style({\n transform: 'scale(1) translateX(-1px) rotate(0)',\n offset : 0.9\n })\n]));\n\n@Component({\n selector : 'risk-error-menu',\n templateUrl : 'error.menu.component.html',\n styleUrls : [\n '../../../component.scss',\n 'error.menu.component.scss'\n ],\n animations : [\n trigger('buttonState', [\n state('inactive', style({transform: 'translateX(0) scale(0)'})),\n state('active', style({transform: 'translateX(0) scale(1)'})),\n state('newError', style({transform: 'translateX(0) scale(1)'})),\n transition('void => active', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('void => newError', [\n style({transform: 'scale(0) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ]),\n transition('active => newError', [\n style({transform: 'scale(1) translateX(0) rotate(0)'}),\n JIGGLE_ANIMATION\n ])\n ])\n ],\n host : {\n '[class.risk-error-menu]': 'true'\n },\n changeDetection : ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n imports : [MatIconButton, MatMenuTrigger, MatIcon, MatMenu, ErrorMessageComponent]\n})\nexport class ErrorComponent extends BaseComponent implements OnInit {\n private readonly errorCollector = inject(ErrorCollectorService);\n private readonly authProvider = inject<AuthProvider>(AUTH_PROVIDER, {optional: true});\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n public state: 'active' | 'newError' | null = null;\n\n @Input() public keepVisibleOnClick?: boolean;\n @ViewChildren(ErrorMessageComponent)\n public errorMessages?: QueryList<ErrorMessageComponent>;\n private readonly _errors: ErrorMessageWrapper[] = [];\n private readonly _menuState: Subject<boolean> = new Subject();\n\n public get color(): MatColorTheme {\n if (this.errors.some((error: ErrorMessageWrapper) => !error.read)) {\n return 'warn';\n }\n return null;\n }\n\n public get errors(): ErrorMessageWrapper[] {\n return this._errors;\n }\n\n public ngOnInit(): void {\n // Init Jiggle animation loop\n this.initAnimation();\n\n // Subscribe to error stream\n this.subscribeToErrors();\n\n // Once opened animate messages and set as read after animation\n this._menuState.pipe(\n filter((opened: boolean) => opened),\n takeUntil(this.destroyed)\n ).subscribe(() => this.animateOnMenuOpened());\n\n // Refresh on \"logged-in\" state changes\n if (this.authProvider) {\n this.authProvider.loggedInStream.pipe(\n takeUntil(this.destroyed)\n ).subscribe((auth: boolean) => this.loggedInChanged(auth));\n }\n }\n\n public menuOpened(): void {\n this._menuState.next(true);\n }\n\n public menuClosed(): void {\n this._menuState.next(false);\n }\n\n // <editor-fold desc=\"Animation control\" defaultstate=\"collapsed\">\n public animationDone(event: AnimationEvent): void {\n if (event.toState === 'newError') {\n // Reset after annimation\n this.state = 'active';\n\n // Called from animation controller we need to re-check\n this.changeDetectorRef.markForCheck();\n }\n }\n\n private animateOnMenuOpened() {\n const animateMessages = () => this.errorMessages!.forEach(\n (message: ErrorMessageComponent) => message.animate());\n animateMessages();\n this.errorMessages!.changes.pipe(\n takeUntil(merge(this.destroyed, this._menuState))\n ).subscribe(() => animateMessages());\n }\n\n private loggedInChanged(auth: boolean) {\n // Subscribe to errors once logged in again\n if (auth) {\n this.subscribeToErrors();\n } else {\n while (this._errors.length > 0) {\n this._errors.pop();\n }\n }\n this.changeDetectorRef.markForCheck();\n }\n\n private subscribeToErrors() {\n let until: Observable<void> = this.destroyed;\n // Stop receiving errors once user was logged out\n if (this.authProvider) {\n until = merge(\n until,\n this.authProvider.loggedInStream.pipe(\n filter((auth: boolean) => !auth),\n map(() => undefined)\n )\n );\n }\n this.errorCollector.errorStream.pipe(\n takeUntil(until)\n ).subscribe((error: ErrorMessage) => this.errorReceived(error, until));\n }\n\n private errorReceived(error: ErrorMessage, until: Observable<unknown>) {\n const errorMessageWrapper = new ErrorMessageWrapper(error);\n\n // Subscribe for state changes\n errorMessageWrapper.readStateChanged.pipe(\n takeUntil(until)\n ).subscribe(() => this.changeDetectorRef.detectChanges());\n\n this._errors.unshift(errorMessageWrapper);\n while (this._errors.length > 10) {\n this._errors.pop();\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n private initAnimation(): void {\n timer(100, 2000).pipe(\n // Run animation everytime we have non-read errors\n filter(() => this.errors.some((error: ErrorMessageWrapper) => !error.read)),\n takeUntil(this.destroyed)\n ).subscribe(() => {\n switch (this.state) {\n case null:\n this.state = 'active';\n break;\n case 'active':\n this.state = 'newError';\n break;\n }\n this.changeDetectorRef.markForCheck();\n });\n }\n\n // </editor-fold>\n}\n","@if (state != null) {\n <button\n #errorMenuTrigger=\"matMenuTrigger\"\n (@buttonState.done)=\"animationDone($event)\"\n (menuClosed)=\"menuClosed()\"\n (menuOpened)=\"menuOpened()\"\n [@buttonState]=\"state\"\n [class.risk-menu-open]=\"errorMenuTrigger.menuOpen\"\n [color]=\"color\"\n [matMenuTriggerFor]=\"errorMenu\"\n mat-icon-button\n type=\"button\">\n <mat-icon>error_outline</mat-icon>\n </button>\n}\n\n<mat-menu #errorMenu=\"matMenu\"\n [overlapTrigger]=\"false\"\n class=\"risk-error-menu-mat-menu\">\n @for (error of errors; track error; let isLast = $last) {\n <risk-error-message\n (click)=\"keepVisibleOnClick ? $event.stopPropagation() : null\"\n [error]=\"error\"\n [isLast]=\"isLast\"/>\n }\n</mat-menu>\n","import {ErrorHandler, Provider} from '@angular/core';\nimport {ErrorCollectorService} from './error.collector';\n\nexport function provideErrorHandler(): Provider[] {\n return [\n {\n provide : ErrorHandler,\n useExisting: ErrorCollectorService\n }\n ];\n}\n","import {MonoTypeOperatorFunction, Observable} from 'rxjs';\nimport {catchError, defaultIfEmpty} from 'rxjs/operators';\nimport {ErrorCollectorService} from './error.collector';\n\n/**\n * Collects all error using error collector and returns the \"otherwise\" error instead.\n * @param errorCollector Error collector service.\n * @param otherwise Value to be returned in case of error.\n */\nexport function collectErrors<T>(errorCollector: ErrorCollectorService, otherwise: T): MonoTypeOperatorFunction<T> {\n return (source: Observable<T>) => source.pipe(\n catchError((err) => errorCollector.handleStreamError<T>(err)),\n defaultIfEmpty(otherwise)\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAOM,SAAU,cAAc,CAAC,GAAe,EAAA;AAC1C,IAAA,IAAI,YAA0B;AAC9B,IAAA,IAAI,WAAW,IAAK,GAAoB,EAAE;QACtC,YAAY,GAAG,GAAmB;IACtC;SAAO;AACH,QAAA,IAAI,SAAS,IAAK,GAAa,EAAE;YAC7B,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC;QACjD;aAAO;AACH,YAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QACvB;AACA,QAAA,YAAY,GAAG;AACX,YAAA,OAAO,EAAI,GAAG;AACd,YAAA,MAAM,EAAK,CAAC;YACZ,SAAS,EAAE,SAAS,CAAC;SACxB;IACL;AACA,IAAA,OAAO,YAAY;AACvB;AAGM,MAAO,qBAAsB,SAAQ,YAAY,CAAA;AAInD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAHH,QAAA,IAAA,CAAA,gBAAgB,GAAgC,IAAI,aAAa,CAAC,EAAE,CAAC;AAKzE,QAAA,MAAM,YAAY,GAAG,MAAM,CAAe,aAAa,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;QAC1E,IAAI,YAAY,EAAE;YACd,YAAY,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAa,KAAI;gBACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC;AACjD,YAAA,CAAC,CAAC;QACN;IACJ;AAEO,IAAA,KAAK,CAAC,GAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;IACnC;AAEA,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC/C;AAEO,IAAA,WAAW,CAAC,GAAe,EAAA;AAC9B,QAAA,IAAI;AACA,YAAA,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;QAC1B;gBAAU;YACN,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC;IACJ;AAEO,IAAA,iBAAiB,CAAI,GAAe,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrB,QAAA,OAAO,KAAK;IAChB;+GAlCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADT,MAAM,EAAA,CAAA,CAAA;;4FAClB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCkDnB,qBAAqB,CAAA;AA7DlC,IAAA,WAAA,GAAA;AA8Da,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEvD,IAAA,CAAA,SAAS,GAAkB,IAAI;QAM/B,IAAA,CAAA,MAAM,GAAG,KAAK;AAiBxB,IAAA;IAfU,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE;YACrE,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,SAAS,GAAG,MAAM;AACvB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzC,YAAA,CAAC,CAAC;QACN;IACJ;AAEO,IAAA,QAAQ,CAAC,KAAqB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE;AAChD,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;IACJ;+GA1BS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,0LC5ElC,6oCA6BA,EAAA,MAAA,EAAA,CAAA,yEAAA,EAAA,uWAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDqCQ,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,4DACb,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,aAAa,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,YAAY,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,sGACf,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACd,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,UAAA,EAnDS;YACjB,OAAO,CAAC,WAAW,EAAE;gBACjB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,UAAU,EAAE,aAAa,EAAC,CAAC,CAAC;gBACjD,UAAU,CAAC,QAAQ,EAAE;AACjB,oBAAA,KAAK,CAAC;AACF,wBAAA,MAAM,EAAK,CAAC;AACZ,wBAAA,SAAS,EAAE;qBACd,CAAC;AACF,oBAAA,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;AAC3B,wBAAA,MAAM,EAAK,GAAG;AACd,wBAAA,SAAS,EAAE;AACd,qBAAA,CAAC;iBACL,CAAC;gBACF,UAAU,CAAC,WAAW,EAAE;AACpB,oBAAA,KAAK,CAAC;AACF,wBAAA,UAAU,EAAE;qBACf,CAAC;AACF,oBAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;AACxB,wBAAA,KAAK,CAAC;AACF,4BAAA,UAAU,EAAE,uBAAuB;AACnC,4BAAA,MAAM,EAAM;yBACf,CAAC;AACF,wBAAA,KAAK,CAAC;AACF,4BAAA,UAAU,EAAE,aAAa;AACzB,4BAAA,MAAM,EAAM;yBACf,CAAC;AACF,wBAAA,KAAK,CAAC;AACF,4BAAA,UAAU,EAAE,uBAAuB;AACnC,4BAAA,MAAM,EAAM;yBACf,CAAC;AACF,wBAAA,KAAK,CAAC;AACF,4BAAA,UAAU,EAAE,aAAa;AACzB,4BAAA,MAAM,EAAM;yBACf;AACJ,qBAAA,CAAC;iBACL;aACJ;AACJ,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAiBQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA7DjC,SAAS;AACe,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EAMpB;wBACjB,OAAO,CAAC,WAAW,EAAE;4BACjB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,UAAU,EAAE,aAAa,EAAC,CAAC,CAAC;4BACjD,UAAU,CAAC,QAAQ,EAAE;AACjB,gCAAA,KAAK,CAAC;AACF,oCAAA,MAAM,EAAK,CAAC;AACZ,oCAAA,SAAS,EAAE;iCACd,CAAC;AACF,gCAAA,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;AAC3B,oCAAA,MAAM,EAAK,GAAG;AACd,oCAAA,SAAS,EAAE;AACd,iCAAA,CAAC;6BACL,CAAC;4BACF,UAAU,CAAC,WAAW,EAAE;AACpB,gCAAA,KAAK,CAAC;AACF,oCAAA,UAAU,EAAE;iCACf,CAAC;AACF,gCAAA,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC;AACxB,oCAAA,KAAK,CAAC;AACF,wCAAA,UAAU,EAAE,uBAAuB;AACnC,wCAAA,MAAM,EAAM;qCACf,CAAC;AACF,oCAAA,KAAK,CAAC;AACF,wCAAA,UAAU,EAAE,aAAa;AACzB,wCAAA,MAAM,EAAM;qCACf,CAAC;AACF,oCAAA,KAAK,CAAC;AACF,wCAAA,UAAU,EAAE,uBAAuB;AACnC,wCAAA,MAAM,EAAM;qCACf,CAAC;AACF,oCAAA,KAAK,CAAC;AACF,wCAAA,UAAU,EAAE,aAAa;AACzB,wCAAA,MAAM,EAAM;qCACf;AACJ,iCAAA,CAAC;6BACL;yBACJ;qBACJ,EAAA,IAAA,EACoB;AACjB,wBAAA,4BAA4B,EAAE;AACjC,qBAAA,EAAA,eAAA,EACoB,uBAAuB,CAAC,MAAM,EAAA,mBAAA,EAC9B,KAAK,EAAA,OAAA,EACL;wBACjB,OAAO;wBACP,aAAa;wBACb,OAAO;wBACP,aAAa;wBACb,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd;AACH,qBAAA,EAAA,QAAA,EAAA,6oCAAA,EAAA,MAAA,EAAA,CAAA,yEAAA,EAAA,uWAAA,CAAA,EAAA;;sBAQA;;sBAGA;;;MEjFQ,mBAAmB,CAAA;AAO5B,IAAA,WAAA,CAAmB,KAAmB,EAAA;AALrB,QAAA,IAAA,CAAA,KAAK,GAAS,IAAI,IAAI,EAAE;QACjC,IAAA,CAAA,KAAK,GAAG,KAAK;AAEL,QAAA,IAAA,CAAA,gBAAgB,GAA0B,IAAI,YAAY,EAAW;AAGjF,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACvB;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO;IAC9B;AAEA,IAAA,IAAW,IAAI,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;IAChC;AAEA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;IAC7B;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;AAEA,IAAA,IAAW,IAAI,GAAA;QACX,OAAO,IAAI,CAAC,KAAK;IACrB;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QACpC;IACJ;AACH;;MCVY,gBAAgB,GAA6B,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC;AACtF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,sCAAsC;AACjD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,2CAA2C;AACtD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,sCAAsC;AACjD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,uCAAuC;AAClD,QAAA,MAAM,EAAK;KACd,CAAC;AACF,IAAA,KAAK,CAAC;AACF,QAAA,SAAS,EAAE,qCAAqC;AAChD,QAAA,MAAM,EAAK;KACd;AACJ,CAAA,CAAC;AAmCI,MAAO,cAAe,SAAQ,aAAa,CAAA;AAjCjD,IAAA,WAAA,GAAA;;AAkCqB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;QAC9C,IAAA,CAAA,YAAY,GAAG,MAAM,CAAe,aAAa,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AACpE,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEvD,IAAA,CAAA,KAAK,GAAiC,IAAI;QAKhC,IAAA,CAAA,OAAO,GAA0B,EAAE;AACnC,QAAA,IAAA,CAAA,UAAU,GAAqB,IAAI,OAAO,EAAE;AA8HhE,IAAA;AA5HG,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAA0B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC/D,YAAA,OAAO,MAAM;QACjB;AACA,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO;IACvB;IAEO,QAAQ,GAAA;;QAEX,IAAI,CAAC,aAAa,EAAE;;QAGpB,IAAI,CAAC,iBAAiB,EAAE;;AAGxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAChB,MAAM,CAAC,CAAC,MAAe,KAAK,MAAM,CAAC,EACnC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;;AAG7C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CACjC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B,CAAC,SAAS,CAAC,CAAC,IAAa,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9D;IACJ;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;;AAGO,IAAA,aAAa,CAAC,KAAqB,EAAA;AACtC,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;;AAE9B,YAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;;AAGrB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;QACzC;IACJ;IAEQ,mBAAmB,GAAA;QACvB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAc,CAAC,OAAO,CACrD,CAAC,OAA8B,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;AAC1D,QAAA,eAAe,EAAE;AACjB,QAAA,IAAI,CAAC,aAAc,CAAC,OAAO,CAAC,IAAI,CAC5B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CACpD,CAAC,SAAS,CAAC,MAAM,eAAe,EAAE,CAAC;IACxC;AAEQ,IAAA,eAAe,CAAC,IAAa,EAAA;;QAEjC,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,iBAAiB,EAAE;QAC5B;aAAO;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACtB;QACJ;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IACzC;IAEQ,iBAAiB,GAAA;AACrB,QAAA,IAAI,KAAK,GAAqB,IAAI,CAAC,SAAS;;AAE5C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,KAAK,GAAG,KAAK,CACT,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CACjC,MAAM,CAAC,CAAC,IAAa,KAAK,CAAC,IAAI,CAAC,EAChC,GAAG,CAAC,MAAM,SAAS,CAAC,CACvB,CACJ;QACL;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAChC,SAAS,CAAC,KAAK,CAAC,CACnB,CAAC,SAAS,CAAC,CAAC,KAAmB,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1E;IAEQ,aAAa,CAAC,KAAmB,EAAE,KAA0B,EAAA;AACjE,QAAA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC;;QAG1D,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,CACrC,SAAS,CAAC,KAAK,CAAC,CACnB,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AAEzD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QACtB;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IACzC;IAEQ,aAAa,GAAA;AACjB,QAAA,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI;;AAEjB,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAA0B,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAC3E,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B,CAAC,SAAS,CAAC,MAAK;AACb,YAAA,QAAQ,IAAI,CAAC,KAAK;AACd,gBAAA,KAAK,IAAI;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;oBACrB;AACJ,gBAAA,KAAK,QAAQ;AACT,oBAAA,IAAI,CAAC,KAAK,GAAG,UAAU;oBACvB;;AAER,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;AACzC,QAAA,CAAC,CAAC;IACN;+GAtIS,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAQT,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChHvC,y2BA0BA,qMD4E0B,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAxBvE;YACjB,OAAO,CAAC,aAAa,EAAE;gBACnB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;gBAC/D,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;gBAC7D,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;gBAC/D,UAAU,CAAC,gBAAgB,EAAE;AACzB,oBAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;oBACtD;iBACH,CAAC;gBACF,UAAU,CAAC,kBAAkB,EAAE;AAC3B,oBAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;oBACtD;iBACH,CAAC;gBACF,UAAU,CAAC,oBAAoB,EAAE;AAC7B,oBAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;oBACtD;iBACH;aACJ;AACJ,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAQQ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjC1B,SAAS;AACe,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EAMjB;wBACjB,OAAO,CAAC,aAAa,EAAE;4BACnB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;4BAC/D,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;4BAC7D,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,wBAAwB,EAAC,CAAC,CAAC;4BAC/D,UAAU,CAAC,gBAAgB,EAAE;AACzB,gCAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;gCACtD;6BACH,CAAC;4BACF,UAAU,CAAC,kBAAkB,EAAE;AAC3B,gCAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;gCACtD;6BACH,CAAC;4BACF,UAAU,CAAC,oBAAoB,EAAE;AAC7B,gCAAA,KAAK,CAAC,EAAC,SAAS,EAAE,kCAAkC,EAAC,CAAC;gCACtD;6BACH;yBACJ;qBACJ,EAAA,IAAA,EACoB;AACjB,wBAAA,yBAAyB,EAAE;AAC9B,qBAAA,EAAA,eAAA,EACoB,uBAAuB,CAAC,MAAM,EAAA,mBAAA,EAC9B,KAAK,WACL,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,y2BAAA,EAAA,MAAA,EAAA,CAAA,yEAAA,EAAA,kEAAA,CAAA,EAAA;;sBAS5F;;sBACA,YAAY;uBAAC,qBAAqB;;;SE7GvB,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAM,YAAY;AACzB,YAAA,WAAW,EAAE;AAChB;KACJ;AACL;;ACNA;;;;AAIG;AACG,SAAU,aAAa,CAAI,cAAqC,EAAE,SAAY,EAAA;AAChF,IAAA,OAAO,CAAC,MAAqB,KAAK,MAAM,CAAC,IAAI,CACzC,UAAU,CAAC,CAAC,GAAG,KAAK,cAAc,CAAC,iBAAiB,CAAI,GAAG,CAAC,CAAC,EAC7D,cAAc,CAAC,SAAS,CAAC,CAC5B;AACL;;ACdA;;AAEG;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,83 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ErrorHandler, EventEmitter, OnInit, QueryList, Provider } from '@angular/core';
|
|
3
|
+
import { ErrorMessage, ErrorType } from '@dbg-riskit/common';
|
|
4
|
+
import { Observable, MonoTypeOperatorFunction } from 'rxjs';
|
|
5
|
+
import { AnimationEvent, AnimationAnimateMetadata } from '@angular/animations';
|
|
6
|
+
import { MatColorTheme } from '@dbg-riskit/angular-common';
|
|
7
|
+
import { BaseComponent } from '@dbg-riskit/angular-view';
|
|
8
|
+
|
|
9
|
+
type ErrorTypes = ErrorMessage | Error | object | string;
|
|
10
|
+
declare function toErrorMessage(err: ErrorTypes): ErrorMessage;
|
|
11
|
+
declare class ErrorCollectorService extends ErrorHandler {
|
|
12
|
+
private _errorObservable;
|
|
13
|
+
constructor();
|
|
14
|
+
error(err: ErrorMessage): void;
|
|
15
|
+
get errorStream(): Observable<ErrorMessage>;
|
|
16
|
+
handleError(err: ErrorTypes): void;
|
|
17
|
+
handleStreamError<T>(err: ErrorTypes): Observable<T>;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorCollectorService, never>;
|
|
19
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ErrorCollectorService>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare class ErrorMessageWrapper {
|
|
23
|
+
private readonly _error;
|
|
24
|
+
private readonly _date;
|
|
25
|
+
private _read;
|
|
26
|
+
readonly readStateChanged: EventEmitter<boolean>;
|
|
27
|
+
constructor(error: ErrorMessage);
|
|
28
|
+
get message(): string;
|
|
29
|
+
get type(): ErrorType;
|
|
30
|
+
get statusCode(): number;
|
|
31
|
+
get date(): Date;
|
|
32
|
+
get read(): boolean;
|
|
33
|
+
markRead(): void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare class ErrorMessageComponent {
|
|
37
|
+
readonly dateFormat: string;
|
|
38
|
+
private readonly changeDetectorRef;
|
|
39
|
+
readState: 'read' | null;
|
|
40
|
+
error?: ErrorMessageWrapper;
|
|
41
|
+
isLast: boolean;
|
|
42
|
+
animate(): void;
|
|
43
|
+
markRead(event: AnimationEvent): void;
|
|
44
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMessageComponent, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMessageComponent, "risk-error-message", never, { "error": { "alias": "error"; "required": false; }; "isLast": { "alias": "isLast"; "required": false; }; }, {}, never, never, true, never>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
declare const JIGGLE_ANIMATION: AnimationAnimateMetadata;
|
|
49
|
+
declare class ErrorComponent extends BaseComponent implements OnInit {
|
|
50
|
+
private readonly errorCollector;
|
|
51
|
+
private readonly authProvider;
|
|
52
|
+
private readonly changeDetectorRef;
|
|
53
|
+
state: 'active' | 'newError' | null;
|
|
54
|
+
keepVisibleOnClick?: boolean;
|
|
55
|
+
errorMessages?: QueryList<ErrorMessageComponent>;
|
|
56
|
+
private readonly _errors;
|
|
57
|
+
private readonly _menuState;
|
|
58
|
+
get color(): MatColorTheme;
|
|
59
|
+
get errors(): ErrorMessageWrapper[];
|
|
60
|
+
ngOnInit(): void;
|
|
61
|
+
menuOpened(): void;
|
|
62
|
+
menuClosed(): void;
|
|
63
|
+
animationDone(event: AnimationEvent): void;
|
|
64
|
+
private animateOnMenuOpened;
|
|
65
|
+
private loggedInChanged;
|
|
66
|
+
private subscribeToErrors;
|
|
67
|
+
private errorReceived;
|
|
68
|
+
private initAnimation;
|
|
69
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorComponent, never>;
|
|
70
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorComponent, "risk-error-menu", never, { "keepVisibleOnClick": { "alias": "keepVisibleOnClick"; "required": false; }; }, {}, never, never, true, never>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
declare function provideErrorHandler(): Provider[];
|
|
74
|
+
|
|
1
75
|
/**
|
|
2
|
-
*
|
|
76
|
+
* Collects all error using error collector and returns the "otherwise" error instead.
|
|
77
|
+
* @param errorCollector Error collector service.
|
|
78
|
+
* @param otherwise Value to be returned in case of error.
|
|
3
79
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
80
|
+
declare function collectErrors<T>(errorCollector: ErrorCollectorService, otherwise: T): MonoTypeOperatorFunction<T>;
|
|
81
|
+
|
|
82
|
+
export { ErrorCollectorService, ErrorComponent, JIGGLE_ANIMATION, collectErrors, provideErrorHandler, toErrorMessage };
|
|
83
|
+
export type { ErrorTypes };
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbg-riskit/angular-error",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.1",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@angular/common": "^
|
|
7
|
-
"@angular/animations": "^
|
|
8
|
-
"@angular/core": "^
|
|
9
|
-
"@dbg-riskit/common": "~
|
|
10
|
-
"@dbg-riskit/angular-common": "~
|
|
11
|
-
"@dbg-riskit/angular-view": "~
|
|
6
|
+
"@angular/common": "^20.3.12",
|
|
7
|
+
"@angular/animations": "^20.3.12",
|
|
8
|
+
"@angular/core": "^20.3.12",
|
|
9
|
+
"@dbg-riskit/common": "~20.0.1",
|
|
10
|
+
"@dbg-riskit/angular-common": "~20.0.1",
|
|
11
|
+
"@dbg-riskit/angular-view": "~20.0.1",
|
|
12
12
|
"rxjs": "~7.8.2"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"tslib": "^2.
|
|
15
|
+
"tslib": "^2.8.1"
|
|
16
16
|
},
|
|
17
17
|
"module": "fesm2022/dbg-riskit-angular-error.mjs",
|
|
18
18
|
"typings": "index.d.ts",
|
|
@@ -22,10 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
".": {
|
|
24
24
|
"types": "./index.d.ts",
|
|
25
|
-
"esm2022": "./esm2022/dbg-riskit-angular-error.mjs",
|
|
26
|
-
"esm": "./esm2022/dbg-riskit-angular-error.mjs",
|
|
27
25
|
"default": "./fesm2022/dbg-riskit-angular-error.mjs"
|
|
28
26
|
}
|
|
29
|
-
}
|
|
30
|
-
"sideEffects": false
|
|
27
|
+
}
|
|
31
28
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public_api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJnLXJpc2tpdC1hbmd1bGFyLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci1lcnJvci9zcmMvZGJnLXJpc2tpdC1hbmd1bGFyLWVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
|