New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

@ppwcode/ng-common

Package Overview
Dependencies
Maintainers
4
Versions
131
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ppwcode/ng-common - npm Package Compare versions

Comparing version
21.0.0
to
21.1.0
+19
-19
fesm2022/ppwcode-ng-common.mjs

@@ -6,3 +6,3 @@ import { HttpErrorResponse } from '@angular/common/http';

import { MatDialogModule, MatDialog } from '@angular/material/dialog';
import { notUndefined } from '@ppwcode/js-ts-oddsandends/lib/conditional-assert';
import { notUndefined } from '@ppwcode/ng-utils';
import { Clipboard } from '@angular/cdk/clipboard';

@@ -71,6 +71,6 @@ import * as i3 from '@angular/material/button';

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalErrorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.2", type: GlobalErrorDialogComponent, isStandalone: true, selector: "ppw-global-error-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"ppw-global-error-dialog-title\">{{ messages.title | translate }}</h1>\n<mat-dialog-content class=\"ppw-global-error-dialog-content\">\n @if (showGenericErrorMessage && messages.genericErrorMessage) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n <p>{{ messages.genericErrorMessage | translate }}</p>\n </div>\n </div>\n } @else {\n @for (error of errors; track error; let isLast = $last) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n @if (error.message) {\n <p>{{ error.message }}</p>\n }\n @if (canCopySingleError && messages.copySingleError) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyError(error)\">\n {{ messages.copySingleError | translate }}\n </button>\n }\n </div>\n @if (error.errorInstance && error.errorInstance.stack) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ messages.singleErrorDetails | translate }}</mat-panel-title>\n </mat-expansion-panel-header>\n <pre>{{ error.errorInstance.stack }}</pre>\n </mat-expansion-panel>\n }\n @if (!isLast) {\n <hr />\n }\n </div>\n }\n }\n</mat-dialog-content>\n<mat-dialog-actions class=\"global-error-dialog-actions\" align=\"end\">\n @if (canIgnore && messages.ignore) {\n <button mat-button color=\"accent\" mat-dialog-close>\n {{ messages.ignore | translate }}\n </button>\n }\n @if (canGoHome && messages.goHome) {\n <button mat-stroked-button color=\"accent\" (click)=\"toHome()\">\n {{ messages.goHome | translate }}\n </button>\n }\n @if (canCopyAllErrors && messages.copyAllErrors) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyAllErrors()\">\n {{ messages.copyAllErrors | translate }}\n </button>\n }\n @if (canReload && messages.reload) {\n <button mat-raised-button color=\"primary\" (click)=\"reloadPage()\">\n {{ messages.reload | translate }}\n </button>\n }\n</mat-dialog-actions>\n", styles: [".ppw-global-error-dialog-content .ppw-global-error-dialog-error{margin:4px;display:flex;flex-direction:column;gap:8px}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message{display:flex;flex-direction:row;align-items:flex-start}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message p{flex-grow:1}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;background-color:#6c757d;color:#fff;padding:5px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: GlobalErrorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: GlobalErrorDialogComponent, isStandalone: true, selector: "ppw-global-error-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"ppw-global-error-dialog-title\">{{ messages.title | translate }}</h1>\n<mat-dialog-content class=\"ppw-global-error-dialog-content\">\n @if (showGenericErrorMessage && messages.genericErrorMessage) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n <p>{{ messages.genericErrorMessage | translate }}</p>\n </div>\n </div>\n } @else {\n @for (error of errors; track error; let isLast = $last) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n @if (error.message) {\n <p>{{ error.message }}</p>\n }\n @if (canCopySingleError && messages.copySingleError) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyError(error)\">\n {{ messages.copySingleError | translate }}\n </button>\n }\n </div>\n @if (error.errorInstance && error.errorInstance.stack) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ messages.singleErrorDetails | translate }}</mat-panel-title>\n </mat-expansion-panel-header>\n <pre>{{ error.errorInstance.stack }}</pre>\n </mat-expansion-panel>\n }\n @if (!isLast) {\n <hr />\n }\n </div>\n }\n }\n</mat-dialog-content>\n<mat-dialog-actions class=\"global-error-dialog-actions\" align=\"end\">\n @if (canIgnore && messages.ignore) {\n <button mat-button color=\"accent\" mat-dialog-close>\n {{ messages.ignore | translate }}\n </button>\n }\n @if (canGoHome && messages.goHome) {\n <button mat-stroked-button color=\"accent\" (click)=\"toHome()\">\n {{ messages.goHome | translate }}\n </button>\n }\n @if (canCopyAllErrors && messages.copyAllErrors) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyAllErrors()\">\n {{ messages.copyAllErrors | translate }}\n </button>\n }\n @if (canReload && messages.reload) {\n <button mat-raised-button color=\"primary\" (click)=\"reloadPage()\">\n {{ messages.reload | translate }}\n </button>\n }\n</mat-dialog-actions>\n", styles: [".ppw-global-error-dialog-content .ppw-global-error-dialog-error{margin:4px;display:flex;flex-direction:column;gap:8px}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message{display:flex;flex-direction:row;align-items:flex-start}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message p{flex-grow:1}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;background-color:#6c757d;color:#fff;padding:5px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalErrorDialogComponent, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: GlobalErrorDialogComponent, decorators: [{
type: Component,

@@ -132,6 +132,6 @@ args: [{ selector: 'ppw-global-error-dialog', imports: [MatDialogModule, TranslatePipe, MatExpansionModule, MatButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 mat-dialog-title class=\"ppw-global-error-dialog-title\">{{ messages.title | translate }}</h1>\n<mat-dialog-content class=\"ppw-global-error-dialog-content\">\n @if (showGenericErrorMessage && messages.genericErrorMessage) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n <p>{{ messages.genericErrorMessage | translate }}</p>\n </div>\n </div>\n } @else {\n @for (error of errors; track error; let isLast = $last) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n @if (error.message) {\n <p>{{ error.message }}</p>\n }\n @if (canCopySingleError && messages.copySingleError) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyError(error)\">\n {{ messages.copySingleError | translate }}\n </button>\n }\n </div>\n @if (error.errorInstance && error.errorInstance.stack) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ messages.singleErrorDetails | translate }}</mat-panel-title>\n </mat-expansion-panel-header>\n <pre>{{ error.errorInstance.stack }}</pre>\n </mat-expansion-panel>\n }\n @if (!isLast) {\n <hr />\n }\n </div>\n }\n }\n</mat-dialog-content>\n<mat-dialog-actions class=\"global-error-dialog-actions\" align=\"end\">\n @if (canIgnore && messages.ignore) {\n <button mat-button color=\"accent\" mat-dialog-close>\n {{ messages.ignore | translate }}\n </button>\n }\n @if (canGoHome && messages.goHome) {\n <button mat-stroked-button color=\"accent\" (click)=\"toHome()\">\n {{ messages.goHome | translate }}\n </button>\n }\n @if (canCopyAllErrors && messages.copyAllErrors) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyAllErrors()\">\n {{ messages.copyAllErrors | translate }}\n </button>\n }\n @if (canReload && messages.reload) {\n <button mat-raised-button color=\"primary\" (click)=\"reloadPage()\">\n {{ messages.reload | translate }}\n </button>\n }\n</mat-dialog-actions>\n", styles: [".ppw-global-error-dialog-content .ppw-global-error-dialog-error{margin:4px;display:flex;flex-direction:column;gap:8px}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message{display:flex;flex-direction:row;align-items:flex-start}.ppw-global-error-dialog-content .ppw-global-error-dialog-error .ppw-global-error-dialog-error-message p{flex-grow:1}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;background-color:#6c757d;color:#fff;padding:5px}\n"] }]

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalErrorHandler }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: GlobalErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: GlobalErrorHandler }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: GlobalErrorHandler, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: GlobalErrorHandler, decorators: [{
type: Injectable

@@ -149,6 +149,6 @@ }], ctorParameters: () => [] });

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: MultiErrorHandler, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: MultiErrorHandler }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: MultiErrorHandler, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: MultiErrorHandler }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: MultiErrorHandler, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: MultiErrorHandler, decorators: [{
type: Injectable

@@ -387,6 +387,6 @@ }] });

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PpwApiTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.2", ngImport: i0, type: PpwApiTranslatePipe, isStandalone: true, name: "ppwApiTranslate" }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PpwApiTranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: PpwApiTranslatePipe, isStandalone: true, name: "ppwApiTranslate" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: PpwApiTranslatePipe, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: PpwApiTranslatePipe, decorators: [{
type: Pipe,

@@ -431,6 +431,6 @@ args: [{

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LocalStorageMock, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LocalStorageMock }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: LocalStorageMock, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: LocalStorageMock }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: LocalStorageMock, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: LocalStorageMock, decorators: [{
type: Injectable

@@ -471,6 +471,6 @@ }] });

}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SessionStorageMock, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SessionStorageMock }); }
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: SessionStorageMock, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: SessionStorageMock }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.2", ngImport: i0, type: SessionStorageMock, decorators: [{
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: SessionStorageMock, decorators: [{
type: Injectable

@@ -477,0 +477,0 @@ }] });

@@ -1,1 +0,1 @@

{"version":3,"file":"ppwcode-ng-common.mjs","sources":["../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog-options.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog.component.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog.component.html","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-handler.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/multi-error-handler.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/provider.ts","../../../../projects/ppwcode/ng-common/src/lib/logging/logger.ts","../../../../projects/ppwcode/ng-common/src/lib/logging/in-memory-logger.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/handle-subscriptions.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/responsive-observers.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/track-pending.ts","../../../../projects/ppwcode/ng-common/src/lib/pipes/api-translate.pipe.ts","../../../../projects/ppwcode/ng-common/src/lib/rxjs-operators/truthy-first.ts","../../../../projects/ppwcode/ng-common/src/lib/rxjs-operators/truthy-filter.ts","../../../../projects/ppwcode/ng-common/src/lib/storage/local-storage.ts","../../../../projects/ppwcode/ng-common/src/lib/storage/session-storage.ts","../../../../projects/ppwcode/ng-common/src/lib/utilities/value-reducers.ts","../../../../projects/ppwcode/ng-common/src/public-api.ts","../../../../projects/ppwcode/ng-common/src/ppwcode-ng-common.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const GLOBAL_ERROR_DIALOG_OPTIONS = new InjectionToken<GlobalErrorDialogOptions>('GLOBAL_ERROR_DIALOG_OPTIONS')\n\nexport interface GlobalErrorDialogOptions {\n /**\n * Whether the dialog should be shown. Defaults to false.\n */\n allowIgnore?: boolean\n messages: {\n /**\n * The translation key to use for the title of the dialog.\n */\n title: string\n /**\n * The translation key to use for the title of the expansion panel.\n */\n singleErrorDetails: string\n /**\n * The translation key to use for the button to copy a single error to the clipboard.\n * Optional. Must be provided if `copy.singleError` is true or unset.\n */\n copySingleError?: string\n /**\n * The translation key to use for the button to copy all errors to the clipboard.\n * Optional. Must be provided if `copy.allErrors` is true or unset.\n */\n copyAllErrors?: string\n /**\n * The translation key to use for the button to go to the home page.\n * Optional. Must be provided if `navigation.home` is true or unset.\n */\n goHome?: string\n /**\n * The translation key to use for the button to reload the page.\n * Optional. Must be provided if `navigation.reload` is true or unset.\n */\n reload?: string\n /**\n * The translation key to use for the button to ignore the error.\n * Optional. Must be provided if `allowIgnore` is true.\n */\n ignore?: string\n /**\n * Message to show instead of the actual error messages. When this is set, the actual error messages are not shown.\n */\n genericErrorMessage?: string\n }\n copy?: {\n /**\n * Whether copying a single error is supported. Defaults to true.\n */\n singleError?: boolean\n /**\n * Whether copying all errors is supported. Defaults to true.\n */\n allErrors?: boolean\n }\n navigation?: {\n /**\n * Whether the \"go home\" button is supported. Defaults to true.\n */\n home?: boolean\n /**\n * Whether the \"reload\" button is supported. Defaults to true.\n */\n reload?: boolean\n }\n}\n","import { Clipboard } from '@angular/cdk/clipboard'\nimport { ChangeDetectionStrategy, Component, DOCUMENT, inject } from '@angular/core'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatExpansionModule } from '@angular/material/expansion'\nimport { TranslatePipe } from '@ngx-translate/core'\nimport { GLOBAL_ERROR_DIALOG_OPTIONS, GlobalErrorDialogOptions } from './global-error-dialog-options'\n\n@Component({\n selector: 'ppw-global-error-dialog',\n templateUrl: './global-error-dialog.component.html',\n styleUrl: './global-error-dialog.component.scss',\n imports: [MatDialogModule, TranslatePipe, MatExpansionModule, MatButtonModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GlobalErrorDialogComponent {\n #options: GlobalErrorDialogOptions = inject(GLOBAL_ERROR_DIALOG_OPTIONS)\n #window: Document = inject(DOCUMENT)\n #clipboard: Clipboard = inject(Clipboard)\n\n public readonly errors: Array<GlobalError> = []\n\n public get messages(): GlobalErrorDialogOptions['messages'] {\n return this.#options.messages\n }\n\n public get canIgnore(): boolean {\n return this.#options.allowIgnore ?? false\n }\n\n public get canGoHome(): boolean {\n return this.#options.navigation?.home ?? true\n }\n\n public get canCopyAllErrors(): boolean {\n return this.#options.copy?.allErrors ?? true\n }\n\n public get canCopySingleError(): boolean {\n return this.#options.copy?.singleError ?? true\n }\n\n public get canReload(): boolean {\n return this.#options.navigation?.reload ?? true\n }\n\n public get showGenericErrorMessage(): boolean {\n return !!this.#options.messages.genericErrorMessage\n }\n\n public reloadPage(): void {\n this.#window.location.reload()\n }\n\n public toHome(): void {\n this.#window.location.href = '/'\n }\n\n public copyError(error: GlobalError): void {\n this.copyErrorsToClipboard([error])\n }\n\n public copyAllErrors(): void {\n this.copyErrorsToClipboard(this.errors)\n }\n\n private copyErrorsToClipboard(errors: Array<GlobalError>): void {\n const mappedErrors = errors.map((error) => ({\n message: error.message,\n stackTrace: error.errorInstance?.stack\n }))\n\n this.#clipboard.copy(JSON.stringify(mappedErrors))\n }\n}\n\nexport interface GlobalError {\n message?: string\n errorInstance?: Error | null\n}\n","<h1 mat-dialog-title class=\"ppw-global-error-dialog-title\">{{ messages.title | translate }}</h1>\n<mat-dialog-content class=\"ppw-global-error-dialog-content\">\n @if (showGenericErrorMessage && messages.genericErrorMessage) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n <p>{{ messages.genericErrorMessage | translate }}</p>\n </div>\n </div>\n } @else {\n @for (error of errors; track error; let isLast = $last) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n @if (error.message) {\n <p>{{ error.message }}</p>\n }\n @if (canCopySingleError && messages.copySingleError) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyError(error)\">\n {{ messages.copySingleError | translate }}\n </button>\n }\n </div>\n @if (error.errorInstance && error.errorInstance.stack) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ messages.singleErrorDetails | translate }}</mat-panel-title>\n </mat-expansion-panel-header>\n <pre>{{ error.errorInstance.stack }}</pre>\n </mat-expansion-panel>\n }\n @if (!isLast) {\n <hr />\n }\n </div>\n }\n }\n</mat-dialog-content>\n<mat-dialog-actions class=\"global-error-dialog-actions\" align=\"end\">\n @if (canIgnore && messages.ignore) {\n <button mat-button color=\"accent\" mat-dialog-close>\n {{ messages.ignore | translate }}\n </button>\n }\n @if (canGoHome && messages.goHome) {\n <button mat-stroked-button color=\"accent\" (click)=\"toHome()\">\n {{ messages.goHome | translate }}\n </button>\n }\n @if (canCopyAllErrors && messages.copyAllErrors) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyAllErrors()\">\n {{ messages.copyAllErrors | translate }}\n </button>\n }\n @if (canReload && messages.reload) {\n <button mat-raised-button color=\"primary\" (click)=\"reloadPage()\">\n {{ messages.reload | translate }}\n </button>\n }\n</mat-dialog-actions>\n","import { HttpErrorResponse } from '@angular/common/http'\nimport { ErrorHandler, inject, Injectable, Injector, NgZone } from '@angular/core'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog'\nimport { notUndefined } from '@ppwcode/js-ts-oddsandends/lib/conditional-assert'\nimport { GlobalErrorDialogComponent } from './global-error-dialog.component'\n\n/**\n * Handle any errors thrown by Angular application.\n */\n@Injectable()\nexport class GlobalErrorHandler extends ErrorHandler {\n #injector: Injector = inject(Injector)\n\n dialogRef?: MatDialogRef<GlobalErrorDialogComponent>\n\n // This flag is only here to ensure a clean testing output.\n // NEVER set this to true, only in the spec file of this class.\n preventConsoleErrorLogging = false\n pageIsBeingUnloaded = false\n\n constructor() {\n super()\n\n window.addEventListener('beforeunload', this.onPageUnloading.bind(this))\n }\n\n public override handleError(error: Error | HttpErrorResponse | string): void {\n if (this.pageIsBeingUnloaded) {\n return\n }\n\n if (!this.preventConsoleErrorLogging) {\n super.handleError(error)\n }\n\n this.zone.runTask(() => {\n if (this.dialogRef === undefined) {\n this.openDialog()\n }\n\n notUndefined(this.dialogRef).componentInstance.errors.push({\n errorInstance: this.extractErrorInstance(error),\n message: this.extractErrorMessage(error)\n })\n })\n }\n\n public onPageUnloading(): void {\n this.pageIsBeingUnloaded = true\n }\n\n public extractErrorInstance(error: Error | HttpErrorResponse | string): Error | null {\n return error instanceof Error ? error : error instanceof HttpErrorResponse ? error.error : null\n }\n\n public extractErrorMessage(error: Error | HttpErrorResponse | string): string {\n return error instanceof Error || error instanceof HttpErrorResponse ? error.message : error\n }\n\n private get dialog(): MatDialog {\n return this.#injector.get(MatDialog)\n }\n\n private get zone(): NgZone {\n return this.#injector.get(NgZone)\n }\n\n private openDialog(): void {\n this.dialogRef = this.dialog.open(GlobalErrorDialogComponent, { closeOnNavigation: false, disableClose: true })\n\n this.dialogRef.afterClosed().subscribe(() => {\n this.dialogRef = undefined\n })\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http'\nimport { ErrorHandler, inject, Injectable, InjectionToken, Injector } from '@angular/core'\n\nexport const ERROR_HANDLERS = new InjectionToken<ErrorHandler[]>('ERROR_HANDLERS')\n\n/**\n * Pass errors to all error handers.\n */\n@Injectable()\nexport class MultiErrorHandler extends ErrorHandler {\n #injector: Injector = inject(Injector)\n\n public override handleError(error: Error | HttpErrorResponse | string): void {\n this.#injector.get(ERROR_HANDLERS).forEach((handle) => handle.handleError(error))\n }\n}\n","import { ErrorHandler, Provider } from '@angular/core'\nimport { GLOBAL_ERROR_DIALOG_OPTIONS, GlobalErrorDialogOptions } from './global-error-dialog-options'\nimport { GlobalErrorHandler } from './global-error-handler'\nimport { ERROR_HANDLERS, MultiErrorHandler } from './multi-error-handler'\n\nexport const provideGlobalErrorHandler = ({\n errorDialogOptions,\n errorHandlers = []\n}: {\n errorDialogOptions: GlobalErrorDialogOptions\n errorHandlers?: Array<typeof ErrorHandler>\n}): Array<Provider> => {\n const { messages, copy, navigation } = errorDialogOptions\n\n // Validations to check whether the necessary messages are set based on optional functionality support.\n assertMessageNecessity(\n copy?.singleError ?? true,\n messages.copySingleError,\n 'copying a single error to the clipboard'\n )\n assertMessageNecessity(copy?.allErrors ?? true, messages.copyAllErrors, 'copying all errors to the clipboard')\n assertMessageNecessity(navigation?.home ?? true, messages.goHome, 'going to the home page')\n assertMessageNecessity(navigation?.reload ?? true, messages.reload, 'reloading the page')\n assertMessageNecessity(errorDialogOptions.allowIgnore, messages.ignore, 'ignoring the error')\n\n const errorHandlerProviders: Array<Provider> = errorHandlers.map((handler) => ({\n provide: ERROR_HANDLERS,\n useClass: handler,\n multi: true\n }))\n\n return [\n {\n provide: ERROR_HANDLERS,\n useClass: GlobalErrorHandler,\n multi: true\n },\n ...errorHandlerProviders,\n {\n provide: ErrorHandler,\n useClass: MultiErrorHandler\n },\n {\n provide: GLOBAL_ERROR_DIALOG_OPTIONS,\n useValue: errorDialogOptions\n }\n ]\n}\n\nconst assertMessageNecessity = (\n messageShouldBeSet: boolean | undefined,\n message: string | undefined,\n info: string\n): void => {\n if (messageShouldBeSet && !message) {\n throw new Error(`The translation key for ${info} is missing.`)\n } else if (!messageShouldBeSet && message) {\n console.warn(`The translation key for ${info} in the global error handler is set but this has no effect.`)\n }\n}\n","// Any is allowed in this file because the type definition of the console only supports any.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FactoryProvider, InjectionToken } from '@angular/core'\nimport { PpwLoggerOptions } from './logger-options'\n\nexport const PPW_LOGGER = new InjectionToken<PpwLogger>('PpwLogger')\n\nexport interface PpwLogger {\n readonly debugMode: boolean\n readonly prefix: string\n\n debug(message?: any, ...optionalParams: any[]): void\n\n info(message?: any, ...optionalParams: any[]): void\n\n log(message?: any, ...optionalParams: any[]): void\n\n warn(message?: any, ...optionalParams: any[]): void\n\n error(message?: any, ...optionalParams: any[]): void\n}\n\nexport class Logger implements PpwLogger {\n constructor(\n public readonly prefix: string,\n public readonly debugMode: boolean\n ) {}\n\n public debug(message?: any, ...optionalParams: any[]): void {\n if (this.debugMode) {\n console.debug(this.prefixMessage(message), ...optionalParams)\n }\n }\n\n public info(message?: any, ...optionalParams: any[]): void {\n console.info(this.prefixMessage(message), ...optionalParams)\n }\n\n public log(message?: any, ...optionalParams: any[]): void {\n console.log(this.prefixMessage(message), ...optionalParams)\n }\n\n public warn(message?: any, ...optionalParams: any[]): void {\n console.warn(this.prefixMessage(message), ...optionalParams)\n }\n\n public error(message?: any, ...optionalParams: any[]): void {\n console.error(this.prefixMessage(message), ...optionalParams)\n }\n\n private prefixMessage(message?: any): string {\n return this.prefix ? `${this.prefix} ${message}` : message\n }\n}\n\nexport const provideLogger = (options?: PpwLoggerOptions): FactoryProvider => ({\n provide: PPW_LOGGER,\n useFactory: () => new Logger(options?.prefix ?? '', options?.debug ?? false)\n})\n","// Any is allowed in this file because the type definition of the console only supports any.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FactoryProvider } from '@angular/core'\nimport { PPW_LOGGER, PpwLogger } from './logger'\nimport { PpwLoggerOptions } from './logger-options'\n\nexport interface InMemoryLogLine {\n type: 'debug' | 'info' | 'log' | 'warn' | 'error'\n message: string\n optionalParams: any[]\n}\n\nexport class InMemoryLogger implements PpwLogger {\n public readonly logLines: Array<InMemoryLogLine> = []\n\n constructor(\n public readonly prefix: string,\n public readonly debugMode: boolean\n ) {}\n\n public debug(message?: any, ...optionalParams: any[]): void {\n if (this.debugMode) {\n this.logLines.push({ type: 'debug', message: this.prefixMessage(message), optionalParams })\n }\n }\n\n public info(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'info', message: this.prefixMessage(message), optionalParams })\n }\n\n public log(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'log', message: this.prefixMessage(message), optionalParams })\n }\n\n public warn(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'warn', message: this.prefixMessage(message), optionalParams })\n }\n\n public error(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'error', message: this.prefixMessage(message), optionalParams })\n }\n\n public clear(): void {\n this.logLines.splice(0, this.logLines.length)\n }\n\n private prefixMessage(message?: any): string {\n return this.prefix ? `${this.prefix} ${message}` : message\n }\n}\n\nexport const provideInMemoryLogger = (options?: PpwLoggerOptions): FactoryProvider => ({\n provide: PPW_LOGGER,\n useFactory: () => new InMemoryLogger(options?.prefix ?? '', options?.debug ?? false)\n})\n","import { DestroyRef, inject } from '@angular/core'\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\r\nimport { Observable } from 'rxjs'\r\nimport { Constructor } from './constructor'\r\n\r\n/**\r\n * Defines that subscriptions can be handled.\r\n */\r\nexport interface CanHandleSubscriptions {\r\n /** Function to be used to wrap a stream with subscription handling. */\r\n stopOnDestroy<T>(stream$: Observable<T>): Observable<T>\r\n}\r\n\r\n/** Constructable type that can handle subscriptions. */\r\nexport type CanHandleSubscriptionsCtor = Constructor<CanHandleSubscriptions>\r\n\r\n/**\r\n * Mixin to extend the given constructable with functionality to manage subscriptions.\r\n * Provides the following:\r\n * - A function to wrap a stream with the PPW way of subscription handling.\r\n * - An ngOnDestroy implementation to automatically unsubscribe to all known subscriptions.\r\n */\r\nexport const mixinHandleSubscriptions = <T extends Constructor<object>>(base?: T): CanHandleSubscriptionsCtor & T => {\r\n const baseClass: T = base ?? (class {} as T)\r\n\r\n return class extends baseClass implements CanHandleSubscriptions {\r\n #destroyRef: DestroyRef = inject(DestroyRef)\r\n\r\n public stopOnDestroy<TStreamResult>(stream$: Observable<TStreamResult>): Observable<TStreamResult> {\r\n return stream$.pipe(takeUntilDestroyed(this.#destroyRef))\r\n }\r\n }\r\n}\r\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout'\nimport { inject, Signal } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { map, Observable, shareReplay } from 'rxjs'\nimport { Constructor } from './constructor'\n\n/**\n * Defines helper functions to make responsive designed screen layouts.\n * For screensizes see here: https://material.angular.dev/cdk/layout/overview#predefined-breakpoints\n */\nexport interface CanResponsiveObservers {\n /** Observable to see if screen size is at least Small.\n * @deprecated It is advised to start using the isAtLeastSmall signal instead.\n */\n isSmallScreen$: Observable<boolean>\n /** Observable to see if screen size is at least XSmall.\n * @deprecated It is advised to start using the isAtLeastXSmall signal instead.\n */\n isXSmallScreen$: Observable<boolean>\n /** Observable to see if screen size is at least Medium.\n * @deprecated It is advised to start using the isAtLeastMedium signal instead.\n */\n isMediumScreen$: Observable<boolean>\n /** Observable to see if screen size is at least Large.\n * @deprecated It is advised to start using the isAtLeastLarge signal instead.\n */\n isLargeScreen$: Observable<boolean>\n /** Observable to see if screen size is at least XLarge.\n * @deprecated It is advised to start using the isAtLeastXLarge signal instead.\n */\n isXLargeScreen$: Observable<boolean>\n /** Signal to see if screen size is at least XSmall. */\n isAtLeastXSmall: Signal<boolean>\n /** Signal to see if screen size is at least Small. */\n isAtLeastSmall: Signal<boolean>\n /** Signal to see if screen size is at least Medium. */\n isAtLeastMedium: Signal<boolean>\n /** Signal to see if screen size is at least Large. */\n isAtLeastLarge: Signal<boolean>\n /** Signal to see if screen size is at least XLarge. */\n isAtLeastXLarge: Signal<boolean>\n /** Signal to see if screen size is XSmall. */\n isXSmall: Signal<boolean>\n /** Signal to see if screen size is Small. */\n isSmall: Signal<boolean>\n /** Signal to see if screen size is Medium. */\n isMedium: Signal<boolean>\n /** Signal to see if screen size is Large. */\n isLarge: Signal<boolean>\n /** Signal to see if screen size is XLarge. */\n isXLarge: Signal<boolean>\n}\n\n/** Constructable type that offers responsive observers helper functions. */\nexport type CanResponsiveObserversCtor = Constructor<CanResponsiveObservers>\n\n/**\n * Mixin to extend the given constructable with functionality to implement responsive design.\n * Provides the following:\n * - functions to know the current screensize.\n */\nexport const mixinResponsiveObservers = <T extends Constructor<object>>(base?: T): CanResponsiveObserversCtor & T => {\n const baseClass: T = base ?? (class {} as T)\n\n return class extends baseClass implements CanResponsiveObservers {\n private breakpointObserver: BreakpointObserver = inject(BreakpointObserver)\n\n private observeBreakpoint = (breakpoints: Array<string> | string) => {\n return toSignal(\n this.breakpointObserver.observe(breakpoints).pipe(\n map((state) => state.matches),\n shareReplay()\n ),\n { requireSync: true }\n )\n }\n\n public isXSmallScreen$: Observable<boolean> = this.breakpointObserver.observe([Breakpoints.XSmall]).pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isSmallScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isMediumScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isLargeScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isXLargeScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isAtLeastXSmall: Signal<boolean> = this.observeBreakpoint([Breakpoints.XSmall])\n public isAtLeastSmall: Signal<boolean> = this.observeBreakpoint([Breakpoints.XSmall, Breakpoints.Small])\n public isAtLeastMedium: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium\n ])\n public isAtLeastLarge: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large\n ])\n public isAtLeastXLarge: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ])\n public isXSmall: Signal<boolean> = this.observeBreakpoint(Breakpoints.XSmall)\n public isSmall: Signal<boolean> = this.observeBreakpoint(Breakpoints.Small)\n public isMedium: Signal<boolean> = this.observeBreakpoint(Breakpoints.Medium)\n public isLarge: Signal<boolean> = this.observeBreakpoint(Breakpoints.Large)\n public isXLarge: Signal<boolean> = this.observeBreakpoint(Breakpoints.XLarge)\n }\n}\n","import { BehaviorSubject, map, MonoTypeOperatorFunction, Observable, of, switchMap, tap } from 'rxjs'\r\nimport { Constructor } from './constructor'\r\n\r\n/**\r\n * Interface describing something that supports \"pending\" tracking.\r\n */\r\nexport interface CanTrackPending {\r\n /** Tracks the pending state. */\r\n pending$: Observable<boolean>\r\n\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n startPending: (trackingName?: string) => MonoTypeOperatorFunction<any>\r\n stopPending: (trackingName?: string) => MonoTypeOperatorFunction<any>\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n /** Wraps the given observable with the startPending and stopPending tracking functions. */\r\n trackPending<T>(stream$: Observable<T>, trackingName?: string): Observable<T>\r\n\r\n /** Gets an observable emitting the pending state of the tracker. */\r\n isPending: (trackingName?: string, isInitiallyPending?: boolean) => Observable<boolean>\r\n}\r\n\r\n/** A constructable type that implements the CanPage interface. */\r\nexport type CanTrackPendingCtor = Constructor<CanTrackPending>\r\n\r\n/**\r\n * Enhances the given base class with functionality for tracking a \"pending\" state.\r\n * The initial state of the pending situation is \"true\".\r\n * @param isInitiallyPending Whether the pending state is true on initial creation of the class.\r\n * @param base An optional base class.\r\n */\r\nexport const mixinTrackPending = <T extends Constructor<object>>(\r\n isInitiallyPending = true,\r\n base?: T\r\n): T & CanTrackPendingCtor => {\r\n base ??= class {} as T\r\n return class extends base implements CanTrackPending {\r\n #pendingTrackers$: BehaviorSubject<{ [key: string]: boolean }> = new BehaviorSubject<{\r\n [key: string]: boolean\r\n }>({\r\n pending: isInitiallyPending\r\n })\r\n\r\n public pending$: Observable<boolean> = this.isPending()\r\n\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n public startPending = (trackingName = 'pending'): MonoTypeOperatorFunction<any> =>\r\n tap(() => this.#updateTracker(trackingName, true))\r\n public stopPending = (trackingName = 'pending'): MonoTypeOperatorFunction<any> =>\r\n tap(() => this.#updateTracker(trackingName, false))\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n public trackPending<T>(stream$: Observable<T>, trackingName = 'pending'): Observable<T> {\r\n return of(null).pipe(\r\n this.startPending(trackingName),\r\n switchMap(() => stream$),\r\n this.stopPending(trackingName)\r\n )\r\n }\r\n\r\n public isPending(trackingName = 'pending', isInitiallyPending: boolean = false): Observable<boolean> {\r\n return this.#pendingTrackers$.pipe(map((trackers) => trackers[trackingName] ?? isInitiallyPending))\r\n }\r\n\r\n #updateTracker(trackingName: string, isPending: boolean): void {\r\n this.#pendingTrackers$.next({\r\n ...this.#pendingTrackers$.value,\r\n [trackingName]: isPending\r\n })\r\n }\r\n }\r\n}\r\n","import { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'\nimport { PpwTranslationMap } from '../models/ppw-translation-map.model'\n\n@Pipe({\n name: 'ppwApiTranslate',\n standalone: true\n})\nexport class PpwApiTranslatePipe implements PipeTransform {\n private locale = inject(LOCALE_ID)\n\n transform(value?: PpwTranslationMap): string {\n if (value !== null && value !== undefined) {\n const lang = this.locale.substring(0, 2)\n return value[lang ?? 'en'] ?? value\n }\n return ''\n }\n}\n","import { Observable, OperatorFunction } from 'rxjs'\nimport { first, map } from 'rxjs/operators'\n\nexport function truthyFirst<T>(): OperatorFunction<T | null | undefined, T> {\n return (source$: Observable<T | null | undefined>): Observable<T> =>\n source$.pipe(\n first<T | null | undefined>(Boolean),\n map((res: T | null | undefined) => res as T)\n )\n}\n","import { Observable, OperatorFunction } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\n\nexport function truthyFilter<T>(): OperatorFunction<T | null | undefined, T> {\n return (source$: Observable<T | null | undefined>): Observable<T> =>\n source$.pipe(\n filter<T | null | undefined>(Boolean),\n map((res: T | null | undefined) => res as T)\n )\n}\n","import { Injectable, InjectionToken, Provider } from '@angular/core'\n\nexport const LOCAL_STORAGE_TOKEN = new InjectionToken<Storage>('localStorage')\n\n@Injectable()\nexport class LocalStorageMock implements Storage {\n private data: Record<string, string> = {}\n\n public get length(): number {\n return Object.keys(this.data).length\n }\n\n clear(): void {\n this.data = {}\n }\n\n getItem(key: string): string | null {\n return this.data[key] || null\n }\n\n key(index: number): string | null {\n const keys = Object.keys(this.data)\n return keys[index] || null\n }\n\n removeItem(key: string): void {\n delete this.data[key]\n }\n\n setItem(key: string, value: string): void {\n this.data[key] = value\n }\n}\n\nexport const provideLocalStorage = (): Provider => ({\n provide: LOCAL_STORAGE_TOKEN,\n useFactory: () => localStorage\n})\n\nexport const provideLocalStorageMock = (): Provider => ({\n provide: LOCAL_STORAGE_TOKEN,\n useClass: LocalStorageMock\n})\n","import { Injectable, InjectionToken, Provider } from '@angular/core'\n\nexport const SESSION_STORAGE_TOKEN = new InjectionToken<Storage>('sessionStorage')\n\n@Injectable()\nexport class SessionStorageMock implements Storage {\n private data: Record<string, string> = {}\n\n public get length(): number {\n return Object.keys(this.data).length\n }\n\n clear(): void {\n this.data = {}\n }\n\n getItem(key: string): string | null {\n return this.data[key] || null\n }\n\n key(index: number): string | null {\n const keys = Object.keys(this.data)\n return keys[index] || null\n }\n\n removeItem(key: string): void {\n delete this.data[key]\n }\n\n setItem(key: string, value: string): void {\n this.data[key] = value\n }\n}\n\nexport const provideSessionStorage = (): Provider => ({\n provide: SESSION_STORAGE_TOKEN,\n useFactory: () => sessionStorage\n})\n\nexport const provideSessionStorageMock = (): Provider => ({\n provide: SESSION_STORAGE_TOKEN,\n useClass: SessionStorageMock\n})\n","import { isSignal, Signal } from '@angular/core'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { combineLatest, isObservable, map, Observable, of, startWith } from 'rxjs'\n\nexport type ObservableConvertableValue<T> = T | Signal<T> | Observable<T>\n\nexport const invert = (observable$: ObservableConvertableValue<boolean>) =>\n ensureObservable(observable$).pipe(map((value) => !value))\n\nexport const oneTrue = (...observables$: ObservableConvertableValue<boolean>[]) =>\n combineLatest(ensureObservables(observables$)).pipe(map((values) => values.some((value) => value)))\n\nconst ensureObservable = <T>(value: ObservableConvertableValue<T>): Observable<T> =>\n isObservable(value) ? value : isSignal(value) ? toObservable(value).pipe(startWith(value())) : of(value)\n\nconst ensureObservables = <T>(\n values: ObservableConvertableValue<T> | Array<ObservableConvertableValue<T>>\n): Observable<T>[] => (Array.isArray(values) ? values.map(ensureObservable) : [ensureObservable(values)])\n","/*\n * Public API Surface of ng-common\n */\n\nexport * from './lib/global-error-handler/global-error-handler'\nexport * from './lib/global-error-handler/global-error-dialog.component'\nexport * from './lib/global-error-handler/global-error-dialog-options'\nexport * from './lib/global-error-handler/provider'\nexport * from './lib/logging/in-memory-logger'\nexport * from './lib/logging/logger'\nexport * from './lib/logging/logger-options'\nexport * from './lib/mixins/constructor'\nexport * from './lib/mixins/handle-subscriptions'\nexport * from './lib/mixins/responsive-observers'\nexport * from './lib/mixins/track-pending'\nexport * from './lib/pipes/api-translate.pipe'\nexport * from './lib/rxjs-operators/truthy-first'\nexport * from './lib/rxjs-operators/truthy-filter'\nexport * from './lib/storage/local-storage'\nexport * from './lib/storage/session-storage'\nexport * from './lib/utilities/value-reducers'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}
{"version":3,"file":"ppwcode-ng-common.mjs","sources":["../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog-options.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog.component.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-dialog.component.html","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/global-error-handler.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/multi-error-handler.ts","../../../../projects/ppwcode/ng-common/src/lib/global-error-handler/provider.ts","../../../../projects/ppwcode/ng-common/src/lib/logging/logger.ts","../../../../projects/ppwcode/ng-common/src/lib/logging/in-memory-logger.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/handle-subscriptions.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/responsive-observers.ts","../../../../projects/ppwcode/ng-common/src/lib/mixins/track-pending.ts","../../../../projects/ppwcode/ng-common/src/lib/pipes/api-translate.pipe.ts","../../../../projects/ppwcode/ng-common/src/lib/rxjs-operators/truthy-first.ts","../../../../projects/ppwcode/ng-common/src/lib/rxjs-operators/truthy-filter.ts","../../../../projects/ppwcode/ng-common/src/lib/storage/local-storage.ts","../../../../projects/ppwcode/ng-common/src/lib/storage/session-storage.ts","../../../../projects/ppwcode/ng-common/src/lib/utilities/value-reducers.ts","../../../../projects/ppwcode/ng-common/src/public-api.ts","../../../../projects/ppwcode/ng-common/src/ppwcode-ng-common.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const GLOBAL_ERROR_DIALOG_OPTIONS = new InjectionToken<GlobalErrorDialogOptions>('GLOBAL_ERROR_DIALOG_OPTIONS')\n\nexport interface GlobalErrorDialogOptions {\n /**\n * Whether the dialog should be shown. Defaults to false.\n */\n allowIgnore?: boolean\n messages: {\n /**\n * The translation key to use for the title of the dialog.\n */\n title: string\n /**\n * The translation key to use for the title of the expansion panel.\n */\n singleErrorDetails: string\n /**\n * The translation key to use for the button to copy a single error to the clipboard.\n * Optional. Must be provided if `copy.singleError` is true or unset.\n */\n copySingleError?: string\n /**\n * The translation key to use for the button to copy all errors to the clipboard.\n * Optional. Must be provided if `copy.allErrors` is true or unset.\n */\n copyAllErrors?: string\n /**\n * The translation key to use for the button to go to the home page.\n * Optional. Must be provided if `navigation.home` is true or unset.\n */\n goHome?: string\n /**\n * The translation key to use for the button to reload the page.\n * Optional. Must be provided if `navigation.reload` is true or unset.\n */\n reload?: string\n /**\n * The translation key to use for the button to ignore the error.\n * Optional. Must be provided if `allowIgnore` is true.\n */\n ignore?: string\n /**\n * Message to show instead of the actual error messages. When this is set, the actual error messages are not shown.\n */\n genericErrorMessage?: string\n }\n copy?: {\n /**\n * Whether copying a single error is supported. Defaults to true.\n */\n singleError?: boolean\n /**\n * Whether copying all errors is supported. Defaults to true.\n */\n allErrors?: boolean\n }\n navigation?: {\n /**\n * Whether the \"go home\" button is supported. Defaults to true.\n */\n home?: boolean\n /**\n * Whether the \"reload\" button is supported. Defaults to true.\n */\n reload?: boolean\n }\n}\n","import { Clipboard } from '@angular/cdk/clipboard'\nimport { ChangeDetectionStrategy, Component, DOCUMENT, inject } from '@angular/core'\nimport { MatButtonModule } from '@angular/material/button'\nimport { MatDialogModule } from '@angular/material/dialog'\nimport { MatExpansionModule } from '@angular/material/expansion'\nimport { TranslatePipe } from '@ngx-translate/core'\nimport { GLOBAL_ERROR_DIALOG_OPTIONS, GlobalErrorDialogOptions } from './global-error-dialog-options'\n\n@Component({\n selector: 'ppw-global-error-dialog',\n templateUrl: './global-error-dialog.component.html',\n styleUrl: './global-error-dialog.component.scss',\n imports: [MatDialogModule, TranslatePipe, MatExpansionModule, MatButtonModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GlobalErrorDialogComponent {\n #options: GlobalErrorDialogOptions = inject(GLOBAL_ERROR_DIALOG_OPTIONS)\n #window: Document = inject(DOCUMENT)\n #clipboard: Clipboard = inject(Clipboard)\n\n public readonly errors: Array<GlobalError> = []\n\n public get messages(): GlobalErrorDialogOptions['messages'] {\n return this.#options.messages\n }\n\n public get canIgnore(): boolean {\n return this.#options.allowIgnore ?? false\n }\n\n public get canGoHome(): boolean {\n return this.#options.navigation?.home ?? true\n }\n\n public get canCopyAllErrors(): boolean {\n return this.#options.copy?.allErrors ?? true\n }\n\n public get canCopySingleError(): boolean {\n return this.#options.copy?.singleError ?? true\n }\n\n public get canReload(): boolean {\n return this.#options.navigation?.reload ?? true\n }\n\n public get showGenericErrorMessage(): boolean {\n return !!this.#options.messages.genericErrorMessage\n }\n\n public reloadPage(): void {\n this.#window.location.reload()\n }\n\n public toHome(): void {\n this.#window.location.href = '/'\n }\n\n public copyError(error: GlobalError): void {\n this.copyErrorsToClipboard([error])\n }\n\n public copyAllErrors(): void {\n this.copyErrorsToClipboard(this.errors)\n }\n\n private copyErrorsToClipboard(errors: Array<GlobalError>): void {\n const mappedErrors = errors.map((error) => ({\n message: error.message,\n stackTrace: error.errorInstance?.stack\n }))\n\n this.#clipboard.copy(JSON.stringify(mappedErrors))\n }\n}\n\nexport interface GlobalError {\n message?: string\n errorInstance?: Error | null\n}\n","<h1 mat-dialog-title class=\"ppw-global-error-dialog-title\">{{ messages.title | translate }}</h1>\n<mat-dialog-content class=\"ppw-global-error-dialog-content\">\n @if (showGenericErrorMessage && messages.genericErrorMessage) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n <p>{{ messages.genericErrorMessage | translate }}</p>\n </div>\n </div>\n } @else {\n @for (error of errors; track error; let isLast = $last) {\n <div class=\"ppw-global-error-dialog-error\">\n <div class=\"ppw-global-error-dialog-error-message\">\n @if (error.message) {\n <p>{{ error.message }}</p>\n }\n @if (canCopySingleError && messages.copySingleError) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyError(error)\">\n {{ messages.copySingleError | translate }}\n </button>\n }\n </div>\n @if (error.errorInstance && error.errorInstance.stack) {\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ messages.singleErrorDetails | translate }}</mat-panel-title>\n </mat-expansion-panel-header>\n <pre>{{ error.errorInstance.stack }}</pre>\n </mat-expansion-panel>\n }\n @if (!isLast) {\n <hr />\n }\n </div>\n }\n }\n</mat-dialog-content>\n<mat-dialog-actions class=\"global-error-dialog-actions\" align=\"end\">\n @if (canIgnore && messages.ignore) {\n <button mat-button color=\"accent\" mat-dialog-close>\n {{ messages.ignore | translate }}\n </button>\n }\n @if (canGoHome && messages.goHome) {\n <button mat-stroked-button color=\"accent\" (click)=\"toHome()\">\n {{ messages.goHome | translate }}\n </button>\n }\n @if (canCopyAllErrors && messages.copyAllErrors) {\n <button mat-stroked-button color=\"warn\" (click)=\"copyAllErrors()\">\n {{ messages.copyAllErrors | translate }}\n </button>\n }\n @if (canReload && messages.reload) {\n <button mat-raised-button color=\"primary\" (click)=\"reloadPage()\">\n {{ messages.reload | translate }}\n </button>\n }\n</mat-dialog-actions>\n","import { HttpErrorResponse } from '@angular/common/http'\nimport { ErrorHandler, inject, Injectable, Injector, NgZone } from '@angular/core'\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog'\nimport { notUndefined } from '@ppwcode/ng-utils'\nimport { GlobalErrorDialogComponent } from './global-error-dialog.component'\n\n/**\n * Handle any errors thrown by Angular application.\n */\n@Injectable()\nexport class GlobalErrorHandler extends ErrorHandler {\n #injector: Injector = inject(Injector)\n\n dialogRef?: MatDialogRef<GlobalErrorDialogComponent>\n\n // This flag is only here to ensure a clean testing output.\n // NEVER set this to true, only in the spec file of this class.\n preventConsoleErrorLogging = false\n pageIsBeingUnloaded = false\n\n constructor() {\n super()\n\n window.addEventListener('beforeunload', this.onPageUnloading.bind(this))\n }\n\n public override handleError(error: Error | HttpErrorResponse | string): void {\n if (this.pageIsBeingUnloaded) {\n return\n }\n\n if (!this.preventConsoleErrorLogging) {\n super.handleError(error)\n }\n\n this.zone.runTask(() => {\n if (this.dialogRef === undefined) {\n this.openDialog()\n }\n\n notUndefined(this.dialogRef).componentInstance.errors.push({\n errorInstance: this.extractErrorInstance(error),\n message: this.extractErrorMessage(error)\n })\n })\n }\n\n public onPageUnloading(): void {\n this.pageIsBeingUnloaded = true\n }\n\n public extractErrorInstance(error: Error | HttpErrorResponse | string): Error | null {\n return error instanceof Error ? error : error instanceof HttpErrorResponse ? error.error : null\n }\n\n public extractErrorMessage(error: Error | HttpErrorResponse | string): string {\n return error instanceof Error || error instanceof HttpErrorResponse ? error.message : error\n }\n\n private get dialog(): MatDialog {\n return this.#injector.get(MatDialog)\n }\n\n private get zone(): NgZone {\n return this.#injector.get(NgZone)\n }\n\n private openDialog(): void {\n this.dialogRef = this.dialog.open(GlobalErrorDialogComponent, { closeOnNavigation: false, disableClose: true })\n\n this.dialogRef.afterClosed().subscribe(() => {\n this.dialogRef = undefined\n })\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http'\nimport { ErrorHandler, inject, Injectable, InjectionToken, Injector } from '@angular/core'\n\nexport const ERROR_HANDLERS = new InjectionToken<ErrorHandler[]>('ERROR_HANDLERS')\n\n/**\n * Pass errors to all error handers.\n */\n@Injectable()\nexport class MultiErrorHandler extends ErrorHandler {\n #injector: Injector = inject(Injector)\n\n public override handleError(error: Error | HttpErrorResponse | string): void {\n this.#injector.get(ERROR_HANDLERS).forEach((handle) => handle.handleError(error))\n }\n}\n","import { ErrorHandler, Provider } from '@angular/core'\nimport { GLOBAL_ERROR_DIALOG_OPTIONS, GlobalErrorDialogOptions } from './global-error-dialog-options'\nimport { GlobalErrorHandler } from './global-error-handler'\nimport { ERROR_HANDLERS, MultiErrorHandler } from './multi-error-handler'\n\nexport const provideGlobalErrorHandler = ({\n errorDialogOptions,\n errorHandlers = []\n}: {\n errorDialogOptions: GlobalErrorDialogOptions\n errorHandlers?: Array<typeof ErrorHandler>\n}): Array<Provider> => {\n const { messages, copy, navigation } = errorDialogOptions\n\n // Validations to check whether the necessary messages are set based on optional functionality support.\n assertMessageNecessity(\n copy?.singleError ?? true,\n messages.copySingleError,\n 'copying a single error to the clipboard'\n )\n assertMessageNecessity(copy?.allErrors ?? true, messages.copyAllErrors, 'copying all errors to the clipboard')\n assertMessageNecessity(navigation?.home ?? true, messages.goHome, 'going to the home page')\n assertMessageNecessity(navigation?.reload ?? true, messages.reload, 'reloading the page')\n assertMessageNecessity(errorDialogOptions.allowIgnore, messages.ignore, 'ignoring the error')\n\n const errorHandlerProviders: Array<Provider> = errorHandlers.map((handler) => ({\n provide: ERROR_HANDLERS,\n useClass: handler,\n multi: true\n }))\n\n return [\n {\n provide: ERROR_HANDLERS,\n useClass: GlobalErrorHandler,\n multi: true\n },\n ...errorHandlerProviders,\n {\n provide: ErrorHandler,\n useClass: MultiErrorHandler\n },\n {\n provide: GLOBAL_ERROR_DIALOG_OPTIONS,\n useValue: errorDialogOptions\n }\n ]\n}\n\nconst assertMessageNecessity = (\n messageShouldBeSet: boolean | undefined,\n message: string | undefined,\n info: string\n): void => {\n if (messageShouldBeSet && !message) {\n throw new Error(`The translation key for ${info} is missing.`)\n } else if (!messageShouldBeSet && message) {\n console.warn(`The translation key for ${info} in the global error handler is set but this has no effect.`)\n }\n}\n","// Any is allowed in this file because the type definition of the console only supports any.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FactoryProvider, InjectionToken } from '@angular/core'\nimport { PpwLoggerOptions } from './logger-options'\n\nexport const PPW_LOGGER = new InjectionToken<PpwLogger>('PpwLogger')\n\nexport interface PpwLogger {\n readonly debugMode: boolean\n readonly prefix: string\n\n debug(message?: any, ...optionalParams: any[]): void\n\n info(message?: any, ...optionalParams: any[]): void\n\n log(message?: any, ...optionalParams: any[]): void\n\n warn(message?: any, ...optionalParams: any[]): void\n\n error(message?: any, ...optionalParams: any[]): void\n}\n\nexport class Logger implements PpwLogger {\n constructor(\n public readonly prefix: string,\n public readonly debugMode: boolean\n ) {}\n\n public debug(message?: any, ...optionalParams: any[]): void {\n if (this.debugMode) {\n console.debug(this.prefixMessage(message), ...optionalParams)\n }\n }\n\n public info(message?: any, ...optionalParams: any[]): void {\n console.info(this.prefixMessage(message), ...optionalParams)\n }\n\n public log(message?: any, ...optionalParams: any[]): void {\n console.log(this.prefixMessage(message), ...optionalParams)\n }\n\n public warn(message?: any, ...optionalParams: any[]): void {\n console.warn(this.prefixMessage(message), ...optionalParams)\n }\n\n public error(message?: any, ...optionalParams: any[]): void {\n console.error(this.prefixMessage(message), ...optionalParams)\n }\n\n private prefixMessage(message?: any): string {\n return this.prefix ? `${this.prefix} ${message}` : message\n }\n}\n\nexport const provideLogger = (options?: PpwLoggerOptions): FactoryProvider => ({\n provide: PPW_LOGGER,\n useFactory: () => new Logger(options?.prefix ?? '', options?.debug ?? false)\n})\n","// Any is allowed in this file because the type definition of the console only supports any.\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FactoryProvider } from '@angular/core'\nimport { PPW_LOGGER, PpwLogger } from './logger'\nimport { PpwLoggerOptions } from './logger-options'\n\nexport interface InMemoryLogLine {\n type: 'debug' | 'info' | 'log' | 'warn' | 'error'\n message: string\n optionalParams: any[]\n}\n\nexport class InMemoryLogger implements PpwLogger {\n public readonly logLines: Array<InMemoryLogLine> = []\n\n constructor(\n public readonly prefix: string,\n public readonly debugMode: boolean\n ) {}\n\n public debug(message?: any, ...optionalParams: any[]): void {\n if (this.debugMode) {\n this.logLines.push({ type: 'debug', message: this.prefixMessage(message), optionalParams })\n }\n }\n\n public info(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'info', message: this.prefixMessage(message), optionalParams })\n }\n\n public log(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'log', message: this.prefixMessage(message), optionalParams })\n }\n\n public warn(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'warn', message: this.prefixMessage(message), optionalParams })\n }\n\n public error(message?: any, ...optionalParams: any[]): void {\n this.logLines.push({ type: 'error', message: this.prefixMessage(message), optionalParams })\n }\n\n public clear(): void {\n this.logLines.splice(0, this.logLines.length)\n }\n\n private prefixMessage(message?: any): string {\n return this.prefix ? `${this.prefix} ${message}` : message\n }\n}\n\nexport const provideInMemoryLogger = (options?: PpwLoggerOptions): FactoryProvider => ({\n provide: PPW_LOGGER,\n useFactory: () => new InMemoryLogger(options?.prefix ?? '', options?.debug ?? false)\n})\n","import { DestroyRef, inject } from '@angular/core'\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\r\nimport { Observable } from 'rxjs'\r\nimport { Constructor } from './constructor'\r\n\r\n/**\r\n * Defines that subscriptions can be handled.\r\n */\r\nexport interface CanHandleSubscriptions {\r\n /** Function to be used to wrap a stream with subscription handling. */\r\n stopOnDestroy<T>(stream$: Observable<T>): Observable<T>\r\n}\r\n\r\n/** Constructable type that can handle subscriptions. */\r\nexport type CanHandleSubscriptionsCtor = Constructor<CanHandleSubscriptions>\r\n\r\n/**\r\n * Mixin to extend the given constructable with functionality to manage subscriptions.\r\n * Provides the following:\r\n * - A function to wrap a stream with the PPW way of subscription handling.\r\n * - An ngOnDestroy implementation to automatically unsubscribe to all known subscriptions.\r\n */\r\nexport const mixinHandleSubscriptions = <T extends Constructor<object>>(base?: T): CanHandleSubscriptionsCtor & T => {\r\n const baseClass: T = base ?? (class {} as T)\r\n\r\n return class extends baseClass implements CanHandleSubscriptions {\r\n #destroyRef: DestroyRef = inject(DestroyRef)\r\n\r\n public stopOnDestroy<TStreamResult>(stream$: Observable<TStreamResult>): Observable<TStreamResult> {\r\n return stream$.pipe(takeUntilDestroyed(this.#destroyRef))\r\n }\r\n }\r\n}\r\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout'\nimport { inject, Signal } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { map, Observable, shareReplay } from 'rxjs'\nimport { Constructor } from './constructor'\n\n/**\n * Defines helper functions to make responsive designed screen layouts.\n * For screensizes see here: https://material.angular.dev/cdk/layout/overview#predefined-breakpoints\n */\nexport interface CanResponsiveObservers {\n /** Observable to see if screen size is at least Small.\n * @deprecated It is advised to start using the isAtLeastSmall signal instead.\n */\n isSmallScreen$: Observable<boolean>\n /** Observable to see if screen size is at least XSmall.\n * @deprecated It is advised to start using the isAtLeastXSmall signal instead.\n */\n isXSmallScreen$: Observable<boolean>\n /** Observable to see if screen size is at least Medium.\n * @deprecated It is advised to start using the isAtLeastMedium signal instead.\n */\n isMediumScreen$: Observable<boolean>\n /** Observable to see if screen size is at least Large.\n * @deprecated It is advised to start using the isAtLeastLarge signal instead.\n */\n isLargeScreen$: Observable<boolean>\n /** Observable to see if screen size is at least XLarge.\n * @deprecated It is advised to start using the isAtLeastXLarge signal instead.\n */\n isXLargeScreen$: Observable<boolean>\n /** Signal to see if screen size is at least XSmall. */\n isAtLeastXSmall: Signal<boolean>\n /** Signal to see if screen size is at least Small. */\n isAtLeastSmall: Signal<boolean>\n /** Signal to see if screen size is at least Medium. */\n isAtLeastMedium: Signal<boolean>\n /** Signal to see if screen size is at least Large. */\n isAtLeastLarge: Signal<boolean>\n /** Signal to see if screen size is at least XLarge. */\n isAtLeastXLarge: Signal<boolean>\n /** Signal to see if screen size is XSmall. */\n isXSmall: Signal<boolean>\n /** Signal to see if screen size is Small. */\n isSmall: Signal<boolean>\n /** Signal to see if screen size is Medium. */\n isMedium: Signal<boolean>\n /** Signal to see if screen size is Large. */\n isLarge: Signal<boolean>\n /** Signal to see if screen size is XLarge. */\n isXLarge: Signal<boolean>\n}\n\n/** Constructable type that offers responsive observers helper functions. */\nexport type CanResponsiveObserversCtor = Constructor<CanResponsiveObservers>\n\n/**\n * Mixin to extend the given constructable with functionality to implement responsive design.\n * Provides the following:\n * - functions to know the current screensize.\n */\nexport const mixinResponsiveObservers = <T extends Constructor<object>>(base?: T): CanResponsiveObserversCtor & T => {\n const baseClass: T = base ?? (class {} as T)\n\n return class extends baseClass implements CanResponsiveObservers {\n private breakpointObserver: BreakpointObserver = inject(BreakpointObserver)\n\n private observeBreakpoint = (breakpoints: Array<string> | string) => {\n return toSignal(\n this.breakpointObserver.observe(breakpoints).pipe(\n map((state) => state.matches),\n shareReplay()\n ),\n { requireSync: true }\n )\n }\n\n public isXSmallScreen$: Observable<boolean> = this.breakpointObserver.observe([Breakpoints.XSmall]).pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isSmallScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isMediumScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isLargeScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isXLargeScreen$: Observable<boolean> = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .pipe(\n map((state) => state.matches),\n shareReplay()\n )\n public isAtLeastXSmall: Signal<boolean> = this.observeBreakpoint([Breakpoints.XSmall])\n public isAtLeastSmall: Signal<boolean> = this.observeBreakpoint([Breakpoints.XSmall, Breakpoints.Small])\n public isAtLeastMedium: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium\n ])\n public isAtLeastLarge: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large\n ])\n public isAtLeastXLarge: Signal<boolean> = this.observeBreakpoint([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ])\n public isXSmall: Signal<boolean> = this.observeBreakpoint(Breakpoints.XSmall)\n public isSmall: Signal<boolean> = this.observeBreakpoint(Breakpoints.Small)\n public isMedium: Signal<boolean> = this.observeBreakpoint(Breakpoints.Medium)\n public isLarge: Signal<boolean> = this.observeBreakpoint(Breakpoints.Large)\n public isXLarge: Signal<boolean> = this.observeBreakpoint(Breakpoints.XLarge)\n }\n}\n","import { BehaviorSubject, map, MonoTypeOperatorFunction, Observable, of, switchMap, tap } from 'rxjs'\r\nimport { Constructor } from './constructor'\r\n\r\n/**\r\n * Interface describing something that supports \"pending\" tracking.\r\n */\r\nexport interface CanTrackPending {\r\n /** Tracks the pending state. */\r\n pending$: Observable<boolean>\r\n\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n startPending: (trackingName?: string) => MonoTypeOperatorFunction<any>\r\n stopPending: (trackingName?: string) => MonoTypeOperatorFunction<any>\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n /** Wraps the given observable with the startPending and stopPending tracking functions. */\r\n trackPending<T>(stream$: Observable<T>, trackingName?: string): Observable<T>\r\n\r\n /** Gets an observable emitting the pending state of the tracker. */\r\n isPending: (trackingName?: string, isInitiallyPending?: boolean) => Observable<boolean>\r\n}\r\n\r\n/** A constructable type that implements the CanPage interface. */\r\nexport type CanTrackPendingCtor = Constructor<CanTrackPending>\r\n\r\n/**\r\n * Enhances the given base class with functionality for tracking a \"pending\" state.\r\n * The initial state of the pending situation is \"true\".\r\n * @param isInitiallyPending Whether the pending state is true on initial creation of the class.\r\n * @param base An optional base class.\r\n */\r\nexport const mixinTrackPending = <T extends Constructor<object>>(\r\n isInitiallyPending = true,\r\n base?: T\r\n): T & CanTrackPendingCtor => {\r\n base ??= class {} as T\r\n return class extends base implements CanTrackPending {\r\n #pendingTrackers$: BehaviorSubject<{ [key: string]: boolean }> = new BehaviorSubject<{\r\n [key: string]: boolean\r\n }>({\r\n pending: isInitiallyPending\r\n })\r\n\r\n public pending$: Observable<boolean> = this.isPending()\r\n\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n public startPending = (trackingName = 'pending'): MonoTypeOperatorFunction<any> =>\r\n tap(() => this.#updateTracker(trackingName, true))\r\n public stopPending = (trackingName = 'pending'): MonoTypeOperatorFunction<any> =>\r\n tap(() => this.#updateTracker(trackingName, false))\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\n public trackPending<T>(stream$: Observable<T>, trackingName = 'pending'): Observable<T> {\r\n return of(null).pipe(\r\n this.startPending(trackingName),\r\n switchMap(() => stream$),\r\n this.stopPending(trackingName)\r\n )\r\n }\r\n\r\n public isPending(trackingName = 'pending', isInitiallyPending: boolean = false): Observable<boolean> {\r\n return this.#pendingTrackers$.pipe(map((trackers) => trackers[trackingName] ?? isInitiallyPending))\r\n }\r\n\r\n #updateTracker(trackingName: string, isPending: boolean): void {\r\n this.#pendingTrackers$.next({\r\n ...this.#pendingTrackers$.value,\r\n [trackingName]: isPending\r\n })\r\n }\r\n }\r\n}\r\n","import { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'\nimport { PpwTranslationMap } from '../models/ppw-translation-map.model'\n\n@Pipe({\n name: 'ppwApiTranslate',\n standalone: true\n})\nexport class PpwApiTranslatePipe implements PipeTransform {\n private locale = inject(LOCALE_ID)\n\n transform(value?: PpwTranslationMap): string {\n if (value !== null && value !== undefined) {\n const lang = this.locale.substring(0, 2)\n return value[lang ?? 'en'] ?? value\n }\n return ''\n }\n}\n","import { Observable, OperatorFunction } from 'rxjs'\nimport { first, map } from 'rxjs/operators'\n\nexport function truthyFirst<T>(): OperatorFunction<T | null | undefined, T> {\n return (source$: Observable<T | null | undefined>): Observable<T> =>\n source$.pipe(\n first<T | null | undefined>(Boolean),\n map((res: T | null | undefined) => res as T)\n )\n}\n","import { Observable, OperatorFunction } from 'rxjs'\nimport { filter, map } from 'rxjs/operators'\n\nexport function truthyFilter<T>(): OperatorFunction<T | null | undefined, T> {\n return (source$: Observable<T | null | undefined>): Observable<T> =>\n source$.pipe(\n filter<T | null | undefined>(Boolean),\n map((res: T | null | undefined) => res as T)\n )\n}\n","import { Injectable, InjectionToken, Provider } from '@angular/core'\n\nexport const LOCAL_STORAGE_TOKEN = new InjectionToken<Storage>('localStorage')\n\n@Injectable()\nexport class LocalStorageMock implements Storage {\n private data: Record<string, string> = {}\n\n public get length(): number {\n return Object.keys(this.data).length\n }\n\n clear(): void {\n this.data = {}\n }\n\n getItem(key: string): string | null {\n return this.data[key] || null\n }\n\n key(index: number): string | null {\n const keys = Object.keys(this.data)\n return keys[index] || null\n }\n\n removeItem(key: string): void {\n delete this.data[key]\n }\n\n setItem(key: string, value: string): void {\n this.data[key] = value\n }\n}\n\nexport const provideLocalStorage = (): Provider => ({\n provide: LOCAL_STORAGE_TOKEN,\n useFactory: () => localStorage\n})\n\nexport const provideLocalStorageMock = (): Provider => ({\n provide: LOCAL_STORAGE_TOKEN,\n useClass: LocalStorageMock\n})\n","import { Injectable, InjectionToken, Provider } from '@angular/core'\n\nexport const SESSION_STORAGE_TOKEN = new InjectionToken<Storage>('sessionStorage')\n\n@Injectable()\nexport class SessionStorageMock implements Storage {\n private data: Record<string, string> = {}\n\n public get length(): number {\n return Object.keys(this.data).length\n }\n\n clear(): void {\n this.data = {}\n }\n\n getItem(key: string): string | null {\n return this.data[key] || null\n }\n\n key(index: number): string | null {\n const keys = Object.keys(this.data)\n return keys[index] || null\n }\n\n removeItem(key: string): void {\n delete this.data[key]\n }\n\n setItem(key: string, value: string): void {\n this.data[key] = value\n }\n}\n\nexport const provideSessionStorage = (): Provider => ({\n provide: SESSION_STORAGE_TOKEN,\n useFactory: () => sessionStorage\n})\n\nexport const provideSessionStorageMock = (): Provider => ({\n provide: SESSION_STORAGE_TOKEN,\n useClass: SessionStorageMock\n})\n","import { isSignal, Signal } from '@angular/core'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { combineLatest, isObservable, map, Observable, of, startWith } from 'rxjs'\n\nexport type ObservableConvertableValue<T> = T | Signal<T> | Observable<T>\n\nexport const invert = (observable$: ObservableConvertableValue<boolean>) =>\n ensureObservable(observable$).pipe(map((value) => !value))\n\nexport const oneTrue = (...observables$: ObservableConvertableValue<boolean>[]) =>\n combineLatest(ensureObservables(observables$)).pipe(map((values) => values.some((value) => value)))\n\nconst ensureObservable = <T>(value: ObservableConvertableValue<T>): Observable<T> =>\n isObservable(value) ? value : isSignal(value) ? toObservable(value).pipe(startWith(value())) : of(value)\n\nconst ensureObservables = <T>(\n values: ObservableConvertableValue<T> | Array<ObservableConvertableValue<T>>\n): Observable<T>[] => (Array.isArray(values) ? values.map(ensureObservable) : [ensureObservable(values)])\n","/*\n * Public API Surface of ng-common\n */\n\nexport * from './lib/global-error-handler/global-error-handler'\nexport * from './lib/global-error-handler/global-error-dialog.component'\nexport * from './lib/global-error-handler/global-error-dialog-options'\nexport * from './lib/global-error-handler/provider'\nexport * from './lib/logging/in-memory-logger'\nexport * from './lib/logging/logger'\nexport * from './lib/logging/logger-options'\nexport * from './lib/mixins/constructor'\nexport * from './lib/mixins/handle-subscriptions'\nexport * from './lib/mixins/responsive-observers'\nexport * from './lib/mixins/track-pending'\nexport * from './lib/pipes/api-translate.pipe'\nexport * from './lib/rxjs-operators/truthy-first'\nexport * from './lib/rxjs-operators/truthy-filter'\nexport * from './lib/storage/local-storage'\nexport * from './lib/storage/session-storage'\nexport * from './lib/utilities/value-reducers'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}
{
"name": "@ppwcode/ng-common",
"version": "21.0.0",
"version": "21.1.0",
"repository": {

@@ -9,3 +9,4 @@ "url": "https://github.com/peopleware/angular-sdk"

"@angular/common": "^21.0.2",
"@angular/core": "^21.0.2"
"@angular/core": "^21.0.2",
"@ppwcode/ng-utils": "^21.1.0"
},

@@ -12,0 +13,0 @@ "dependencies": {