@abp/ng.theme.shared 8.1.3 → 8.2.0-rc.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.
@@ -0,0 +1,29 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { AuthService, ConfigStateService } from '@abp/ng.core';
3
+ import { HttpErrorResponse } from '@angular/common/http';
4
+ import { CUSTOM_HTTP_ERROR_HANDLER_PRIORITY } from '../constants/default-errors';
5
+ import * as i0 from "@angular/core";
6
+ export class AbpAuthenticationErrorHandler {
7
+ constructor() {
8
+ this.priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh;
9
+ this.authService = inject(AuthService);
10
+ this.configStateService = inject(ConfigStateService);
11
+ }
12
+ canHandle(error) {
13
+ return error instanceof HttpErrorResponse && error.status === 401;
14
+ }
15
+ execute() {
16
+ this.configStateService.refreshAppState().subscribe(({ currentUser }) => {
17
+ if (!currentUser.isAuthenticated) {
18
+ this.authService.logout({ noRedirectToLogoutUrl: true });
19
+ }
20
+ });
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
23
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, providedIn: 'root' }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, decorators: [{
26
+ type: Injectable,
27
+ args: [{ providedIn: 'root' }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tZXJyb3ItaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvYXV0aGVudGljYXRpb24tZXJyb3ItaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBR2pGLE1BQU0sT0FBTyw2QkFBNkI7SUFEMUM7UUFFVyxhQUFRLEdBQUcsa0NBQWtDLENBQUMsUUFBUSxDQUFDO1FBQzdDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBYXBFO0lBWEMsU0FBUyxDQUFDLEtBQWM7UUFDdEIsT0FBTyxLQUFLLFlBQVksaUJBQWlCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWZVLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRGhCLE1BQU07OzJGQUNuQiw2QkFBNkI7a0JBRHpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ3VzdG9tSHR0cEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uJztcclxuaW1wb3J0IHsgQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWSB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0LWVycm9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQWJwQXV0aGVudGljYXRpb25FcnJvckhhbmRsZXIgaW1wbGVtZW50cyBDdXN0b21IdHRwRXJyb3JIYW5kbGVyU2VydmljZSB7XHJcbiAgcmVhZG9ubHkgcHJpb3JpdHkgPSBDVVNUT01fSFRUUF9FUlJPUl9IQU5ETEVSX1BSSU9SSVRZLnZlcnlIaWdoO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ1N0YXRlU2VydmljZSA9IGluamVjdChDb25maWdTdGF0ZVNlcnZpY2UpO1xyXG5cclxuICBjYW5IYW5kbGUoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVycm9yLnN0YXR1cyA9PT0gNDAxO1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZSgpIHtcclxuICAgIHRoaXMuY29uZmlnU3RhdGVTZXJ2aWNlLnJlZnJlc2hBcHBTdGF0ZSgpLnN1YnNjcmliZSgoeyBjdXJyZW50VXNlciB9KSA9PiB7XHJcbiAgICAgIGlmICghY3VycmVudFVzZXIuaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoeyBub1JlZGlyZWN0VG9Mb2dvdXRVcmw6IHRydWUgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -9,4 +9,5 @@ export * from './tenant-resolve-error-handler.service';
9
9
  export * from './status-code-error-handler.service';
10
10
  export * from './unknown-status-code-error-handler.service';
11
11
  export * from './router-error-handler.service';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpcm1hdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9uYXYtaXRlbXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcGFnZS1hbGVydC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi90b2FzdGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3VzZXItbWVudS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtZXJyb3ItY29tcG9uZW50LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FicC1mb3JtYXQtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi90ZW5hbnQtcmVzb2x2ZS1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cy1jb2RlLWVycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdW5rbm93bi1zdGF0dXMtY29kZS1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlci1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG4iXX0=
12
+ export * from './authentication-error-handler.service';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90aGVtZS1zaGFyZWQvc3JjL2xpYi9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx3Q0FBd0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlybWF0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL25hdi1pdGVtcy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9wYWdlLWFsZXJ0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RvYXN0ZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdXNlci1tZW51LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NyZWF0ZS1lcnJvci1jb21wb25lbnQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWJwLWZvcm1hdC1lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3RlbmFudC1yZXNvbHZlLWVycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi91bmtub3duLXN0YXR1cy1jb2RlLWVycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcm91dGVyLWVycm9yLWhhbmRsZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXV0aGVudGljYXRpb24tZXJyb3ItaGFuZGxlci5zZXJ2aWNlJ1xyXG4iXX0=
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
81
81
  type: Injectable,
82
82
  args: [{ providedIn: 'root' }]
83
83
  }] });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvc3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsMkJBQTJCLEVBQzNCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUcvRSxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRXFCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELGdDQUEyQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWxDLHVCQUFrQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7UUFHN0QsYUFBUSxHQUFHLGtDQUFrQyxDQUFDLE1BQU0sQ0FBQztLQThFL0Q7SUE1RVcsZUFBZTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFUyxnQkFBZ0IsQ0FDeEIsT0FBMEIsRUFDMUIsS0FBd0I7UUFFeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFD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bWF0aW9uLCBDdXN0b21IdHRwRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWSxcclxuICBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMsXHJcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcclxufSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdC1lcnJvcnMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgTG9jYWxpemF0aW9uUGFyYW0gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maXJtYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENyZWF0ZUVycm9yQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4vY3JlYXRlLWVycm9yLWNvbXBvbmVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBTdGF0dXNDb2RlRXJyb3JIYW5kbGVyU2VydmljZSBpbXBsZW1lbnRzIEN1c3RvbUh0dHBFcnJvckhhbmRsZXJTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3JlYXRlRXJyb3JDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KENyZWF0ZUVycm9yQ29tcG9uZW50U2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZWRTdGF0dXNDb2RlcyA9IFs0MDEsIDQwMywgNDA0LCA1MDBdIGFzIGNvbnN0O1xyXG4gIHByb3RlY3RlZCBzdGF0dXM6IHR5cGVvZiB0aGlzLmhhbmRsZWRTdGF0dXNDb2Rlc1tudW1iZXJdO1xyXG5cclxuICByZWFkb25seSBwcmlvcml0eSA9IENVU1RPTV9IVFRQX0VSUk9SX0hBTkRMRVJfUFJJT1JJVFkubm9ybWFsO1xyXG5cclxuICBwcm90ZWN0ZWQgbmF2aWdhdGVUb0xvZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5uYXZpZ2F0ZVRvTG9naW4oKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93Q29uZmlybWF0aW9uKFxyXG4gICAgbWVzc2FnZTogTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgICB0aXRsZTogTG9jYWxpemF0aW9uUGFyYW0sXHJcbiAgKTogT2JzZXJ2YWJsZTxDb25maXJtYXRpb24uU3RhdHVzPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHRpdGxlLCB7XHJcbiAgICAgIGhpZGVDYW5jZWxCdG46IHRydWUsXHJcbiAgICAgIHllc1RleHQ6ICdBYnBBY2NvdW50OjpDbG9zZScsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzaG93UGFnZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IGBkZWZhdWx0RXJyb3Ike3RoaXMuc3RhdHVzfWA7XHJcbiAgICBjb25zdCBzaG91bGRSZW1vdmVEZXRhaWwgPSBbNDAxLCA0MDRdLmluZGV4T2YodGhpcy5zdGF0dXMpID4gLTE7XHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OU1trZXldPy50aXRsZSxcclxuICAgICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVNba2V5XT8udGl0bGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRldGFpbHM6IHtcclxuICAgICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OU1trZXldPy5kZXRhaWxzLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFU1trZXldPy5kZXRhaWxzLFxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc2hvdWxkUmVtb3ZlRGV0YWlsKSB7XHJcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5kZXRhaWxzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnRTZXJ2aWNlLmV4ZWN1dGUoaW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgY2FuSGFuZGxlKGVycm9yKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IGVycm9yPy5zdGF0dXMgfHwgMDtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZWRTdGF0dXNDb2Rlcy5pbmRleE9mKHRoaXMuc3RhdHVzKSA+IC0xO1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleSA9IGBkZWZhdWx0RXJyb3Ike3RoaXMuc3RhdHVzfWA7XHJcbiAgICBjb25zdCB0aXRsZSA9IHtcclxuICAgICAga2V5OiBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlNba2V5XT8udGl0bGUsXHJcbiAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFU1trZXldPy50aXRsZSxcclxuICAgIH07XHJcbiAgICBjb25zdCBtZXNzYWdlID0ge1xyXG4gICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OU1trZXldPy5kZXRhaWxzLFxyXG4gICAgICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVJST1JfTUVTU0FHRVNba2V5XT8uZGV0YWlscyxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2FuQ3JlYXRlQ3VzdG9tRXJyb3IgPSB0aGlzLmNyZWF0ZUVycm9yQ29tcG9uZW50U2VydmljZS5jYW5DcmVhdGVDdXN0b21FcnJvcih0aGlzLnN0YXR1cyk7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwMTpcclxuICAgICAgY2FzZSA0MDQ6XHJcbiAgICAgICAgaWYgKGNhbkNyZWF0ZUN1c3RvbUVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dQYWdlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLm5hdmlnYXRlVG9Mb2dpbigpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNob3dDb25maXJtYXRpb24odGl0bGUsIG1lc3NhZ2UpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSA0MDM6XHJcbiAgICAgIGNhc2UgNTAwOlxyXG4gICAgICAgIHRoaXMuc2hvd1BhZ2UoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGhlbWUtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvc3RhdHVzLWNvZGUtZXJyb3ItaGFuZGxlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbEMsMkJBQTJCLEVBQzNCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0sY0FBYyxDQUFDO0FBRTlELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUcvRSxNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRXFCLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELGdDQUEyQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2xFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWxDLHVCQUFrQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7UUFHN0QsYUFBUSxHQUFHLGtDQUFrQyxDQUFDLE1BQU0sQ0FBQztLQTZFL0Q7SUEzRVcsZUFBZTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFUyxnQkFBZ0IsQ0FDeEIsT0FBMEIsRUFDMUIsS0FBd0I7UUFFeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7WUFD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bWF0aW9uLCBDdXN0b21IdHRwRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWSxcclxuICBERUZBVUxUX0VSUk9SX0xPQ0FMSVpBVElPTlMsXHJcbiAgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyxcclxufSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdC1lcnJvcnMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgTG9jYWxpemF0aW9uUGFyYW0gfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maXJtYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENyZWF0ZUVycm9yQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4vY3JlYXRlLWVycm9yLWNvbXBvbmVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBTdGF0dXNDb2RlRXJyb3JIYW5kbGVyU2VydmljZSBpbXBsZW1lbnRzIEN1c3RvbUh0dHBFcnJvckhhbmRsZXJTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3JlYXRlRXJyb3JDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KENyZWF0ZUVycm9yQ29tcG9uZW50U2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhbmRsZWRTdGF0dXNDb2RlcyA9IFs0MDEsIDQwMywgNDA0LCA1MDBdIGFzIGNvbnN0O1xyXG4gIHByb3RlY3RlZCBzdGF0dXM6ICh0eXBlb2YgdGhpcy5oYW5kbGVkU3RhdHVzQ29kZXMpW251bWJlcl07XHJcblxyXG4gIHJlYWRvbmx5IHByaW9yaXR5ID0gQ1VTVE9NX0hUVFBfRVJST1JfSEFORExFUl9QUklPUklUWS5ub3JtYWw7XHJcblxyXG4gIHByb3RlY3RlZCBuYXZpZ2F0ZVRvTG9naW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm5hdmlnYXRlVG9Mb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNob3dDb25maXJtYXRpb24oXHJcbiAgICBtZXNzYWdlOiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICAgIHRpdGxlOiBMb2NhbGl6YXRpb25QYXJhbSxcclxuICApOiBPYnNlcnZhYmxlPENvbmZpcm1hdGlvbi5TdGF0dXM+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuZXJyb3IobWVzc2FnZSwgdGl0bGUsIHtcclxuICAgICAgaGlkZUNhbmNlbEJ0bjogdHJ1ZSxcclxuICAgICAgeWVzVGV4dDogJ0FicEFjY291bnQ6OkNsb3NlJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNob3dQYWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5ID0gYGRlZmF1bHRFcnJvciR7dGhpcy5zdGF0dXN9YDtcclxuICAgIGNvbnN0IHNob3VsZFJlbW92ZURldGFpbCA9IFs0MDEsIDQwNF0uaW5kZXhPZih0aGlzLnN0YXR1cykgPiAtMTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TW2tleV0/LnRpdGxlLFxyXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFU1trZXldPy50aXRsZSxcclxuICAgICAgfSxcclxuICAgICAgZGV0YWlsczoge1xyXG4gICAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TW2tleV0/LmRldGFpbHMsXHJcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2tleV0/LmRldGFpbHMsXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChzaG91bGRSZW1vdmVEZXRhaWwpIHtcclxuICAgICAgZGVsZXRlIGluc3RhbmNlLmRldGFpbHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jcmVhdGVFcnJvckNvbXBvbmVudFNlcnZpY2UuZXhlY3V0ZShpbnN0YW5jZSk7XHJcbiAgfVxyXG5cclxuICBjYW5IYW5kbGUoZXJyb3IpOiBib29sZWFuIHtcclxuICAgIHRoaXMuc3RhdHVzID0gZXJyb3I/LnN0YXR1cyB8fCAwO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlZFN0YXR1c0NvZGVzLmluZGV4T2YodGhpcy5zdGF0dXMpID4gLTE7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlKCk6IHZvaWQge1xyXG4gICAgY29uc3Qga2V5ID0gYGRlZmF1bHRFcnJvciR7dGhpcy5zdGF0dXN9YDtcclxuICAgIGNvbnN0IHRpdGxlID0ge1xyXG4gICAgICBrZXk6IERFRkFVTFRfRVJST1JfTE9DQUxJWkFUSU9OU1trZXldPy50aXRsZSxcclxuICAgICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0VSUk9SX01FU1NBR0VTW2tleV0/LnRpdGxlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7XHJcbiAgICAgIGtleTogREVGQVVMVF9FUlJPUl9MT0NBTElaQVRJT05TW2tleV0/LmRldGFpbHMsXHJcbiAgICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FUlJPUl9NRVNTQUdFU1trZXldPy5kZXRhaWxzLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjYW5DcmVhdGVDdXN0b21FcnJvciA9IHRoaXMuY3JlYXRlRXJyb3JDb21wb25lbnRTZXJ2aWNlLmNhbkNyZWF0ZUN1c3RvbUVycm9yKHRoaXMuc3RhdHVzKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgNDAxOlxyXG4gICAgICBjYXNlIDQwNDpcclxuICAgICAgICBpZiAoY2FuQ3JlYXRlQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1BhZ2UoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSA0MDEpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubmF2aWdhdGVUb0xvZ2luKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbih0aXRsZSwgbWVzc2FnZSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDAzOlxyXG4gICAgICBjYXNlIDUwMDpcclxuICAgICAgICB0aGlzLnNob3dQYWdlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -8,7 +8,7 @@ import { animation, style, animate, keyframes, trigger, state, transition, useAn
8
8
  import * as i1$1 from '@angular/router';
9
9
  import { Router, ResolveEnd } from '@angular/router';
10
10
  import * as i2 from '@abp/ng.core';
11
- import { getRoutePath, SubscriptionService, PROJECTION_STRATEGY, uuid, AbstractNgModelComponent, InternetConnectionService, LocalizationModule, LocalizationService, getLocaleDirection, DomInsertionService, CONTENT_STRATEGY, SORT_COMPARE_FUNC, InternalStore, RouterEvents, AuthService, SessionStateService, HttpErrorReporterService, RoutesService, TENANT_NOT_FOUND_BY_NAME, CoreModule, noop, ConfigStateService } from '@abp/ng.core';
11
+ import { getRoutePath, SubscriptionService, PROJECTION_STRATEGY, uuid, AbstractNgModelComponent, InternetConnectionService, LocalizationModule, LocalizationService, getLocaleDirection, DomInsertionService, CONTENT_STRATEGY, SORT_COMPARE_FUNC, InternalStore, RouterEvents, AuthService, SessionStateService, ConfigStateService, HttpErrorReporterService, RoutesService, TENANT_NOT_FOUND_BY_NAME, CoreModule, noop } from '@abp/ng.core';
12
12
  import { startWith, map, debounceTime, filter, takeUntil, distinctUntilChanged, take, switchMap } from 'rxjs/operators';
13
13
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
14
14
  import { fromEvent, Subscription, combineLatest, timer, ReplaySubject, Subject, of, from, Observable, EMPTY, BehaviorSubject } from 'rxjs';
@@ -116,10 +116,11 @@ class TimeAdapter extends NgbTimeAdapter {
116
116
  };
117
117
  }
118
118
  toModel(value) {
119
- if (!value)
120
- return '';
119
+ if (!value) {
120
+ return null;
121
+ }
121
122
  const date = new Date(0, 0, 1, value.hour, value.minute, value.second);
122
- const formattedDate = formatDate(date, 'HH:mm', 'en');
123
+ const formattedDate = formatDate(date, 'HH:mm:ss', 'en');
123
124
  return formattedDate;
124
125
  }
125
126
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TimeAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -267,11 +268,11 @@ class BreadcrumbItemsComponent {
267
268
  this.items = [];
268
269
  }
269
270
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: BreadcrumbItemsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
270
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: BreadcrumbItemsComponent, selector: "abp-breadcrumb-items", inputs: { items: "items" }, ngImport: i0, template: "<ol class=\"breadcrumb\" *ngIf=\"items.length\">\r\n <li class=\"breadcrumb-item\">\r\n <a routerLink=\"/\"><i class=\"fa fa-home\" aria-hidden=\"true\"></i> </a>\r\n </li>\r\n <li\r\n *ngFor=\"let item of items; let last = last\"\r\n class=\"breadcrumb-item\"\r\n [class.active]=\"last\"\r\n aria-current=\"page\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"item.path ? linkTemplate : textTemplate; context: { $implicit: item }\"\r\n ></ng-container>\r\n </li>\r\n</ol>\r\n\r\n<ng-template #linkTemplate let-item>\r\n <a [routerLink]=\"item.path\"> {{ item.name | abpLocalization }}</a>\r\n</ng-template>\r\n\r\n<ng-template #textTemplate let-item>\r\n {{ item.name | abpLocalization }}\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
271
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: BreadcrumbItemsComponent, selector: "abp-breadcrumb-items", inputs: { items: "items" }, ngImport: i0, template: "@if (items.length) {\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item\">\r\n <a routerLink=\"/\"><i class=\"fa fa-home\" aria-hidden=\"true\"></i> </a>\r\n </li>\r\n @for (item of items; track $index; let last = $last) {\r\n <li class=\"breadcrumb-item\" [class.active]=\"last\" aria-current=\"page\">\r\n <ng-container\r\n *ngTemplateOutlet=\"item.path ? linkTemplate : textTemplate; context: { $implicit: item }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ol>\r\n}\r\n\r\n<ng-template #linkTemplate let-item>\r\n <a [routerLink]=\"item.path\"> {{ item.name | abpLocalization }}</a>\r\n</ng-template>\r\n\r\n<ng-template #textTemplate let-item>\r\n {{ item.name | abpLocalization }}\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
271
272
  }
272
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: BreadcrumbItemsComponent, decorators: [{
273
274
  type: Component,
274
- args: [{ selector: 'abp-breadcrumb-items', template: "<ol class=\"breadcrumb\" *ngIf=\"items.length\">\r\n <li class=\"breadcrumb-item\">\r\n <a routerLink=\"/\"><i class=\"fa fa-home\" aria-hidden=\"true\"></i> </a>\r\n </li>\r\n <li\r\n *ngFor=\"let item of items; let last = last\"\r\n class=\"breadcrumb-item\"\r\n [class.active]=\"last\"\r\n aria-current=\"page\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"item.path ? linkTemplate : textTemplate; context: { $implicit: item }\"\r\n ></ng-container>\r\n </li>\r\n</ol>\r\n\r\n<ng-template #linkTemplate let-item>\r\n <a [routerLink]=\"item.path\"> {{ item.name | abpLocalization }}</a>\r\n</ng-template>\r\n\r\n<ng-template #textTemplate let-item>\r\n {{ item.name | abpLocalization }}\r\n</ng-template>\r\n" }]
275
+ args: [{ selector: 'abp-breadcrumb-items', template: "@if (items.length) {\r\n <ol class=\"breadcrumb\">\r\n <li class=\"breadcrumb-item\">\r\n <a routerLink=\"/\"><i class=\"fa fa-home\" aria-hidden=\"true\"></i> </a>\r\n </li>\r\n @for (item of items; track $index; let last = $last) {\r\n <li class=\"breadcrumb-item\" [class.active]=\"last\" aria-current=\"page\">\r\n <ng-container\r\n *ngTemplateOutlet=\"item.path ? linkTemplate : textTemplate; context: { $implicit: item }\"\r\n ></ng-container>\r\n </li>\r\n }\r\n </ol>\r\n}\r\n\r\n<ng-template #linkTemplate let-item>\r\n <a [routerLink]=\"item.path\"> {{ item.name | abpLocalization }}</a>\r\n</ng-template>\r\n\r\n<ng-template #textTemplate let-item>\r\n {{ item.name | abpLocalization }}\r\n</ng-template>\r\n" }]
275
276
  }], propDecorators: { items: [{
276
277
  type: Input
277
278
  }] } });
@@ -458,11 +459,11 @@ class ConfirmationComponent {
458
459
  return !!(options && options.iconTemplate);
459
460
  }
460
461
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ConfirmationComponent, deps: [{ token: CONFIRMATION_ICONS }], target: i0.ɵɵFactoryTarget.Component }); }
461
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ConfirmationComponent, selector: "abp-confirmation", ngImport: i0, template: "<div class=\"confirmation\" *ngIf=\"confirmation$ | async as data\">\r\n <div\r\n class=\"confirmation-backdrop\"\r\n (click)=\"data.options?.dismissible ? close(dismiss) : null\"\r\n ></div>\r\n <div class=\"confirmation-dialog\">\r\n <div class=\"icon-container\" [ngClass]=\"data.severity\" *ngIf=\"data.severity || isCustomIconExists(data)\">\r\n <div [outerHTML]=\"data.options.iconTemplate\" *ngIf=\"isIconTemplateExits(data); else iconHolder\" ></div>\r\n <ng-template #iconHolder>\r\n <i class=\"icon\" [ngClass]=\"getIconClass(data)\"></i>\r\n </ng-template>\r\n </div>\r\n <div class=\"content\">\r\n <h1\r\n class=\"title\"\r\n *ngIf=\"data.title\"\r\n [innerHTML]=\"data.title | abpLocalization: data.options?.titleLocalizationParams\"\r\n ></h1>\r\n <p\r\n class=\"message\"\r\n *ngIf=\"data.message\"\r\n [innerHTML]=\"data.message | abpLocalization: data.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n <div class=\"footer\">\r\n <button\r\n id=\"cancel\"\r\n class=\"btn btn-outline-primary me-2\"\r\n [innerHTML]=\"data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization\"\r\n *ngIf=\"!data?.options?.hideCancelBtn\"\r\n (click)=\"close(reject)\"\r\n ></button>\r\n <button\r\n id=\"confirm\"\r\n class=\"btn btn-primary\"\r\n [innerHTML]=\"data.options?.yesText || 'AbpUi::Yes' | abpLocalization\"\r\n *ngIf=\"!data?.options?.hideYesBtn\"\r\n (click)=\"close(confirm)\"\r\n ></button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".confirmation{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1060}.confirmation .confirmation-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1061!important}.confirmation .confirmation-dialog{display:flex;flex-direction:column;margin:20px auto;padding:0;width:450px;min-height:300px;z-index:1062!important}@media screen and (max-width: 500px){.confirmation .confirmation-dialog{width:90vw}}.confirmation .confirmation-dialog .icon-container{display:flex;align-items:center;justify-content:center;padding:40px 20px 10px}.confirmation .confirmation-dialog .icon-container .icon{width:100px;height:100px;stroke-width:1;font-size:80px;text-align:center}.confirmation .confirmation-dialog .content{flex-grow:1;display:block}.confirmation .confirmation-dialog .content .title{display:block;margin:0;padding:0;font-size:27px;font-weight:600;text-align:center}.confirmation .confirmation-dialog .content .message{display:block;padding:8px 20px 20px;font-size:16px;font-weight:400;text-align:center;margin-bottom:0}.confirmation .confirmation-dialog .footer{display:flex;align-items:center;justify-content:flex-end;padding:20px;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
462
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ConfirmationComponent, selector: "abp-confirmation", ngImport: i0, template: "@if (confirmation$ | async; as data) {\r\n <div class=\"confirmation\">\r\n <div\r\n class=\"confirmation-backdrop\"\r\n (click)=\"data.options?.dismissible ? close(dismiss) : null\"\r\n ></div>\r\n <div class=\"confirmation-dialog\">\r\n @if (data.severity || isCustomIconExists(data)) {\r\n <div class=\"icon-container\" [ngClass]=\"data.severity\">\r\n @if (isIconTemplateExits(data)) {\r\n <div [outerHTML]=\"data.options.iconTemplate\"></div>\r\n } @else {\r\n <i class=\"icon\" [ngClass]=\"getIconClass(data)\"></i>\r\n }\r\n </div>\r\n }\r\n <div class=\"content\">\r\n @if (data.title) {\r\n <h1\r\n class=\"title\"\r\n [innerHTML]=\"data.title | abpLocalization: data.options?.titleLocalizationParams\"\r\n ></h1>\r\n }\r\n @if (data.message) {\r\n <p\r\n class=\"message\"\r\n [innerHTML]=\"data.message | abpLocalization: data.options?.messageLocalizationParams\"\r\n ></p>\r\n }\r\n </div>\r\n <div class=\"footer\">\r\n @if (!data?.options?.hideCancelBtn) {\r\n <button\r\n id=\"cancel\"\r\n class=\"btn btn-outline-primary me-2\"\r\n [innerHTML]=\"data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization\"\r\n (click)=\"close(reject)\"\r\n ></button>\r\n }\r\n @if (!data?.options?.hideYesBtn) {\r\n <button\r\n id=\"confirm\"\r\n class=\"btn btn-primary\"\r\n [innerHTML]=\"data.options?.yesText || 'AbpUi::Yes' | abpLocalization\"\r\n (click)=\"close(confirm)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".confirmation{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1060}.confirmation .confirmation-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1061!important}.confirmation .confirmation-dialog{display:flex;flex-direction:column;margin:20px auto;padding:0;width:450px;min-height:300px;z-index:1062!important}@media screen and (max-width: 500px){.confirmation .confirmation-dialog{width:90vw}}.confirmation .confirmation-dialog .icon-container{display:flex;align-items:center;justify-content:center;padding:40px 20px 10px}.confirmation .confirmation-dialog .icon-container .icon{width:100px;height:100px;stroke-width:1;font-size:80px;text-align:center}.confirmation .confirmation-dialog .content{flex-grow:1;display:block}.confirmation .confirmation-dialog .content .title{display:block;margin:0;padding:0;font-size:27px;font-weight:600;text-align:center}.confirmation .confirmation-dialog .content .message{display:block;padding:8px 20px 20px;font-size:16px;font-weight:400;text-align:center;margin-bottom:0}.confirmation .confirmation-dialog .footer{display:flex;align-items:center;justify-content:flex-end;padding:20px;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
462
463
  }
463
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ConfirmationComponent, decorators: [{
464
465
  type: Component,
465
- args: [{ selector: 'abp-confirmation', template: "<div class=\"confirmation\" *ngIf=\"confirmation$ | async as data\">\r\n <div\r\n class=\"confirmation-backdrop\"\r\n (click)=\"data.options?.dismissible ? close(dismiss) : null\"\r\n ></div>\r\n <div class=\"confirmation-dialog\">\r\n <div class=\"icon-container\" [ngClass]=\"data.severity\" *ngIf=\"data.severity || isCustomIconExists(data)\">\r\n <div [outerHTML]=\"data.options.iconTemplate\" *ngIf=\"isIconTemplateExits(data); else iconHolder\" ></div>\r\n <ng-template #iconHolder>\r\n <i class=\"icon\" [ngClass]=\"getIconClass(data)\"></i>\r\n </ng-template>\r\n </div>\r\n <div class=\"content\">\r\n <h1\r\n class=\"title\"\r\n *ngIf=\"data.title\"\r\n [innerHTML]=\"data.title | abpLocalization: data.options?.titleLocalizationParams\"\r\n ></h1>\r\n <p\r\n class=\"message\"\r\n *ngIf=\"data.message\"\r\n [innerHTML]=\"data.message | abpLocalization: data.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n <div class=\"footer\">\r\n <button\r\n id=\"cancel\"\r\n class=\"btn btn-outline-primary me-2\"\r\n [innerHTML]=\"data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization\"\r\n *ngIf=\"!data?.options?.hideCancelBtn\"\r\n (click)=\"close(reject)\"\r\n ></button>\r\n <button\r\n id=\"confirm\"\r\n class=\"btn btn-primary\"\r\n [innerHTML]=\"data.options?.yesText || 'AbpUi::Yes' | abpLocalization\"\r\n *ngIf=\"!data?.options?.hideYesBtn\"\r\n (click)=\"close(confirm)\"\r\n ></button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".confirmation{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1060}.confirmation .confirmation-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1061!important}.confirmation .confirmation-dialog{display:flex;flex-direction:column;margin:20px auto;padding:0;width:450px;min-height:300px;z-index:1062!important}@media screen and (max-width: 500px){.confirmation .confirmation-dialog{width:90vw}}.confirmation .confirmation-dialog .icon-container{display:flex;align-items:center;justify-content:center;padding:40px 20px 10px}.confirmation .confirmation-dialog .icon-container .icon{width:100px;height:100px;stroke-width:1;font-size:80px;text-align:center}.confirmation .confirmation-dialog .content{flex-grow:1;display:block}.confirmation .confirmation-dialog .content .title{display:block;margin:0;padding:0;font-size:27px;font-weight:600;text-align:center}.confirmation .confirmation-dialog .content .message{display:block;padding:8px 20px 20px;font-size:16px;font-weight:400;text-align:center;margin-bottom:0}.confirmation .confirmation-dialog .footer{display:flex;align-items:center;justify-content:flex-end;padding:20px;width:100%}\n"] }]
466
+ args: [{ selector: 'abp-confirmation', template: "@if (confirmation$ | async; as data) {\r\n <div class=\"confirmation\">\r\n <div\r\n class=\"confirmation-backdrop\"\r\n (click)=\"data.options?.dismissible ? close(dismiss) : null\"\r\n ></div>\r\n <div class=\"confirmation-dialog\">\r\n @if (data.severity || isCustomIconExists(data)) {\r\n <div class=\"icon-container\" [ngClass]=\"data.severity\">\r\n @if (isIconTemplateExits(data)) {\r\n <div [outerHTML]=\"data.options.iconTemplate\"></div>\r\n } @else {\r\n <i class=\"icon\" [ngClass]=\"getIconClass(data)\"></i>\r\n }\r\n </div>\r\n }\r\n <div class=\"content\">\r\n @if (data.title) {\r\n <h1\r\n class=\"title\"\r\n [innerHTML]=\"data.title | abpLocalization: data.options?.titleLocalizationParams\"\r\n ></h1>\r\n }\r\n @if (data.message) {\r\n <p\r\n class=\"message\"\r\n [innerHTML]=\"data.message | abpLocalization: data.options?.messageLocalizationParams\"\r\n ></p>\r\n }\r\n </div>\r\n <div class=\"footer\">\r\n @if (!data?.options?.hideCancelBtn) {\r\n <button\r\n id=\"cancel\"\r\n class=\"btn btn-outline-primary me-2\"\r\n [innerHTML]=\"data.options?.cancelText || 'AbpUi::Cancel' | abpLocalization\"\r\n (click)=\"close(reject)\"\r\n ></button>\r\n }\r\n @if (!data?.options?.hideYesBtn) {\r\n <button\r\n id=\"confirm\"\r\n class=\"btn btn-primary\"\r\n [innerHTML]=\"data.options?.yesText || 'AbpUi::Yes' | abpLocalization\"\r\n (click)=\"close(confirm)\"\r\n ></button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n", styles: [".confirmation{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:1060}.confirmation .confirmation-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1061!important}.confirmation .confirmation-dialog{display:flex;flex-direction:column;margin:20px auto;padding:0;width:450px;min-height:300px;z-index:1062!important}@media screen and (max-width: 500px){.confirmation .confirmation-dialog{width:90vw}}.confirmation .confirmation-dialog .icon-container{display:flex;align-items:center;justify-content:center;padding:40px 20px 10px}.confirmation .confirmation-dialog .icon-container .icon{width:100px;height:100px;stroke-width:1;font-size:80px;text-align:center}.confirmation .confirmation-dialog .content{flex-grow:1;display:block}.confirmation .confirmation-dialog .content .title{display:block;margin:0;padding:0;font-size:27px;font-weight:600;text-align:center}.confirmation .confirmation-dialog .content .message{display:block;padding:8px 20px 20px;font-size:16px;font-weight:400;text-align:center;margin-bottom:0}.confirmation .confirmation-dialog .footer{display:flex;align-items:center;justify-content:flex-end;padding:20px;width:100%}\n"] }]
466
467
  }], ctorParameters: () => [{ type: undefined, decorators: [{
467
468
  type: Inject,
468
469
  args: [CONFIRMATION_ICONS]
@@ -882,11 +883,11 @@ class ModalComponent {
882
883
  this.init.emit();
883
884
  }
884
885
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ModalComponent, deps: [{ token: ConfirmationService }, { token: i2.SubscriptionService }, { token: SUPPRESS_UNSAVED_CHANGES_WARNING, optional: true }, { token: i3.NgbModal }, { token: ModalRefService }], target: i0.ɵɵFactoryTarget.Component }); }
885
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ModalComponent, selector: "abp-modal", inputs: { visible: "visible", busy: "busy", options: "options", suppressUnsavedChangesWarning: "suppressUnsavedChangesWarning" }, outputs: { visibleChange: "visibleChange", init: "init", appear: "appear", disappear: "disappear" }, providers: [SubscriptionService], queries: [{ propertyName: "abpHeader", first: true, predicate: ["abpHeader"], descendants: true }, { propertyName: "abpBody", first: true, predicate: ["abpBody"], descendants: true }, { propertyName: "abpFooter", first: true, predicate: ["abpFooter"], descendants: true }, { propertyName: "abpSubmit", first: true, predicate: ButtonComponent, descendants: true, read: ButtonComponent }], viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true }], ngImport: i0, template: "<ng-content></ng-content>\r\n\r\n<ng-template #modalContent let-modal>\r\n <div *ngIf=\"abpHeader\" id=\"abp-modal-header\" class=\"modal-header abp-modal-header\">\r\n <ng-container *ngTemplateOutlet=\"abpHeader\"></ng-container>\r\n \u200B\r\n <button\r\n id=\"abp-modal-close-button\"\r\n type=\"button\"\r\n class=\"btn-sm btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"modal.dismiss()\"\r\n ></button>\r\n </div>\r\n <div *ngIf=\"abpBody\" id=\"abp-modal-body\" class=\"modal-body\">\r\n <ng-container *ngTemplateOutlet=\"abpBody\"></ng-container>\r\n </div>\r\n <div *ngIf=\"abpFooter\" id=\"abp-modal-footer\" class=\"modal-footer\">\r\n <ng-container *ngTemplateOutlet=\"abpFooter\"></ng-container>\r\n </div>\r\n</ng-template>\r\n", styles: [".modal.show{display:block!important}.modal-backdrop{opacity:.8}.modal::-webkit-scrollbar{width:7px}.modal::-webkit-scrollbar-track{background:#ddd}.modal::-webkit-scrollbar-thumb{background:#8a8686}.modal-dialog{z-index:1050}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
886
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ModalComponent, selector: "abp-modal", inputs: { visible: "visible", busy: "busy", options: "options", suppressUnsavedChangesWarning: "suppressUnsavedChangesWarning" }, outputs: { visibleChange: "visibleChange", init: "init", appear: "appear", disappear: "disappear" }, providers: [SubscriptionService], queries: [{ propertyName: "abpHeader", first: true, predicate: ["abpHeader"], descendants: true }, { propertyName: "abpBody", first: true, predicate: ["abpBody"], descendants: true }, { propertyName: "abpFooter", first: true, predicate: ["abpFooter"], descendants: true }, { propertyName: "abpSubmit", first: true, predicate: ButtonComponent, descendants: true, read: ButtonComponent }], viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true }], ngImport: i0, template: "<ng-content></ng-content>\r\n\r\n<ng-template #modalContent let-modal>\r\n @if (abpHeader) {\r\n <div id=\"abp-modal-header\" class=\"modal-header abp-modal-header\">\r\n <ng-container *ngTemplateOutlet=\"abpHeader\"></ng-container>\r\n \u200B\r\n <button\r\n id=\"abp-modal-close-button\"\r\n type=\"button\"\r\n class=\"btn-sm btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"modal.dismiss()\"\r\n ></button>\r\n </div>\r\n }\r\n @if (abpBody) {\r\n <div id=\"abp-modal-body\" class=\"modal-body\">\r\n <ng-container *ngTemplateOutlet=\"abpBody\"></ng-container>\r\n </div>\r\n }\r\n @if (abpFooter) {\r\n <div id=\"abp-modal-footer\" class=\"modal-footer\">\r\n <ng-container *ngTemplateOutlet=\"abpFooter\"></ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [".modal.show{display:block!important}.modal-backdrop{opacity:.8}.modal::-webkit-scrollbar{width:7px}.modal::-webkit-scrollbar-track{background:#ddd}.modal::-webkit-scrollbar-thumb{background:#8a8686}.modal-dialog{z-index:1050}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
886
887
  }
887
888
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ModalComponent, decorators: [{
888
889
  type: Component,
889
- args: [{ selector: 'abp-modal', providers: [SubscriptionService], template: "<ng-content></ng-content>\r\n\r\n<ng-template #modalContent let-modal>\r\n <div *ngIf=\"abpHeader\" id=\"abp-modal-header\" class=\"modal-header abp-modal-header\">\r\n <ng-container *ngTemplateOutlet=\"abpHeader\"></ng-container>\r\n \u200B\r\n <button\r\n id=\"abp-modal-close-button\"\r\n type=\"button\"\r\n class=\"btn-sm btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"modal.dismiss()\"\r\n ></button>\r\n </div>\r\n <div *ngIf=\"abpBody\" id=\"abp-modal-body\" class=\"modal-body\">\r\n <ng-container *ngTemplateOutlet=\"abpBody\"></ng-container>\r\n </div>\r\n <div *ngIf=\"abpFooter\" id=\"abp-modal-footer\" class=\"modal-footer\">\r\n <ng-container *ngTemplateOutlet=\"abpFooter\"></ng-container>\r\n </div>\r\n</ng-template>\r\n", styles: [".modal.show{display:block!important}.modal-backdrop{opacity:.8}.modal::-webkit-scrollbar{width:7px}.modal::-webkit-scrollbar-track{background:#ddd}.modal::-webkit-scrollbar-thumb{background:#8a8686}.modal-dialog{z-index:1050}\n"] }]
890
+ args: [{ selector: 'abp-modal', providers: [SubscriptionService], template: "<ng-content></ng-content>\r\n\r\n<ng-template #modalContent let-modal>\r\n @if (abpHeader) {\r\n <div id=\"abp-modal-header\" class=\"modal-header abp-modal-header\">\r\n <ng-container *ngTemplateOutlet=\"abpHeader\"></ng-container>\r\n \u200B\r\n <button\r\n id=\"abp-modal-close-button\"\r\n type=\"button\"\r\n class=\"btn-sm btn-close\"\r\n aria-label=\"Close\"\r\n (click)=\"modal.dismiss()\"\r\n ></button>\r\n </div>\r\n }\r\n @if (abpBody) {\r\n <div id=\"abp-modal-body\" class=\"modal-body\">\r\n <ng-container *ngTemplateOutlet=\"abpBody\"></ng-container>\r\n </div>\r\n }\r\n @if (abpFooter) {\r\n <div id=\"abp-modal-footer\" class=\"modal-footer\">\r\n <ng-container *ngTemplateOutlet=\"abpFooter\"></ng-container>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [".modal.show{display:block!important}.modal-backdrop{opacity:.8}.modal::-webkit-scrollbar{width:7px}.modal::-webkit-scrollbar-track{background:#ddd}.modal::-webkit-scrollbar-thumb{background:#8a8686}.modal-dialog{z-index:1050}\n"] }]
890
891
  }], ctorParameters: () => [{ type: ConfirmationService }, { type: i2.SubscriptionService }, { type: undefined, decorators: [{
891
892
  type: Optional
892
893
  }, {
@@ -992,11 +993,11 @@ class ToastComponent {
992
993
  this.close();
993
994
  }
994
995
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
995
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ToastComponent, selector: "abp-toast", inputs: { toast: "toast" }, outputs: { remove: "remove" }, ngImport: i0, template: "<div class=\"abp-toast\" [ngClass]=\"severityClass\" (click)=\"tap()\">\r\n <div class=\"abp-toast-icon\">\r\n <i class=\"fa icon\" [ngClass]=\"iconClass\" aria-hidden=\"true\"></i>\r\n </div>\r\n <div class=\"abp-toast-content\">\r\n <button class=\"abp-toast-close-button\" (click)=\"close()\" *ngIf=\"toast.options?.closable\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n <div class=\"abp-toast-title\">\r\n {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}\r\n </div>\r\n <p\r\n class=\"abp-toast-message\"\r\n [innerHTML]=\"toast.message | abpLocalization: toast.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n</div>\r\n", styles: [".abp-toast{display:grid;grid-template-columns:50px 1fr;gap:10px;margin:5px 0;padding:10px;border-radius:0;width:350px;-webkit-user-select:none;user-select:none;z-index:9999;border:2px solid #f0f0f0;background-color:#f0f0f0;color:#000;box-shadow:0 0 10px -5px #0006;opacity:1}.abp-toast:hover{border:2px solid #e3e3e3;background-color:#e3e3e3;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-success{border:2px solid #51a351;background-color:#51a351;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-success:hover{border:2px solid #499249;background-color:#499249;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-info{border:2px solid #2f96b4;background-color:#2f96b4;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-info:hover{border:2px solid #2a85a0;background-color:#2a85a0;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-warning{border:2px solid #f89406;background-color:#f89406;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-warning:hover{border:2px solid #df8505;background-color:#df8505;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-error{border:2px solid #bd362f;background-color:#bd362f;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-error:hover{border:2px solid #a9302a;background-color:#a9302a;box-shadow:0 0 15px -5px #0006}.abp-toast .abp-toast-icon{display:flex;align-items:center;justify-content:center}.abp-toast .abp-toast-icon .icon{font-size:36px}.abp-toast .abp-toast-content{position:relative;display:flex;align-self:center;flex-direction:column;word-break:break-word}.abp-toast .abp-toast-content .abp-toast-close-button{position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;margin:0;padding:0 5px 0 0;width:25px;height:25px;border:none;border-radius:50%;background:transparent;color:inherit}.abp-toast .abp-toast-content .abp-toast-close-button:focus{outline:none}.abp-toast .abp-toast-content .abp-toast-title{margin:0;padding:0;font-size:1rem;font-weight:600}.abp-toast .abp-toast-content .abp-toast-message{margin:0;padding:0;max-width:240px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
996
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ToastComponent, selector: "abp-toast", inputs: { toast: "toast" }, outputs: { remove: "remove" }, ngImport: i0, template: "<div class=\"abp-toast\" [ngClass]=\"severityClass\" (click)=\"tap()\">\r\n <div class=\"abp-toast-icon\">\r\n <i class=\"fa icon\" [ngClass]=\"iconClass\" aria-hidden=\"true\"></i>\r\n </div>\r\n <div class=\"abp-toast-content\">\r\n @if (toast.options?.closable) {\r\n <button class=\"abp-toast-close-button\" (click)=\"close()\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <div class=\"abp-toast-title\">\r\n {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}\r\n </div>\r\n <p\r\n class=\"abp-toast-message\"\r\n [innerHTML]=\"toast.message | abpLocalization: toast.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n</div>\r\n", styles: [".abp-toast{display:grid;grid-template-columns:50px 1fr;gap:10px;margin:5px 0;padding:10px;border-radius:0;width:350px;-webkit-user-select:none;user-select:none;z-index:9999;border:2px solid #f0f0f0;background-color:#f0f0f0;color:#000;box-shadow:0 0 10px -5px #0006;opacity:1}.abp-toast:hover{border:2px solid #e3e3e3;background-color:#e3e3e3;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-success{border:2px solid #51a351;background-color:#51a351;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-success:hover{border:2px solid #499249;background-color:#499249;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-info{border:2px solid #2f96b4;background-color:#2f96b4;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-info:hover{border:2px solid #2a85a0;background-color:#2a85a0;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-warning{border:2px solid #f89406;background-color:#f89406;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-warning:hover{border:2px solid #df8505;background-color:#df8505;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-error{border:2px solid #bd362f;background-color:#bd362f;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-error:hover{border:2px solid #a9302a;background-color:#a9302a;box-shadow:0 0 15px -5px #0006}.abp-toast .abp-toast-icon{display:flex;align-items:center;justify-content:center}.abp-toast .abp-toast-icon .icon{font-size:36px}.abp-toast .abp-toast-content{position:relative;display:flex;align-self:center;flex-direction:column;word-break:break-word}.abp-toast .abp-toast-content .abp-toast-close-button{position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;margin:0;padding:0 5px 0 0;width:25px;height:25px;border:none;border-radius:50%;background:transparent;color:inherit}.abp-toast .abp-toast-content .abp-toast-close-button:focus{outline:none}.abp-toast .abp-toast-content .abp-toast-title{margin:0;padding:0;font-size:1rem;font-weight:600}.abp-toast .abp-toast-content .abp-toast-message{margin:0;padding:0;max-width:240px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
996
997
  }
997
998
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToastComponent, decorators: [{
998
999
  type: Component,
999
- args: [{ selector: 'abp-toast', template: "<div class=\"abp-toast\" [ngClass]=\"severityClass\" (click)=\"tap()\">\r\n <div class=\"abp-toast-icon\">\r\n <i class=\"fa icon\" [ngClass]=\"iconClass\" aria-hidden=\"true\"></i>\r\n </div>\r\n <div class=\"abp-toast-content\">\r\n <button class=\"abp-toast-close-button\" (click)=\"close()\" *ngIf=\"toast.options?.closable\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n <div class=\"abp-toast-title\">\r\n {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}\r\n </div>\r\n <p\r\n class=\"abp-toast-message\"\r\n [innerHTML]=\"toast.message | abpLocalization: toast.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n</div>\r\n", styles: [".abp-toast{display:grid;grid-template-columns:50px 1fr;gap:10px;margin:5px 0;padding:10px;border-radius:0;width:350px;-webkit-user-select:none;user-select:none;z-index:9999;border:2px solid #f0f0f0;background-color:#f0f0f0;color:#000;box-shadow:0 0 10px -5px #0006;opacity:1}.abp-toast:hover{border:2px solid #e3e3e3;background-color:#e3e3e3;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-success{border:2px solid #51a351;background-color:#51a351;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-success:hover{border:2px solid #499249;background-color:#499249;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-info{border:2px solid #2f96b4;background-color:#2f96b4;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-info:hover{border:2px solid #2a85a0;background-color:#2a85a0;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-warning{border:2px solid #f89406;background-color:#f89406;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-warning:hover{border:2px solid #df8505;background-color:#df8505;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-error{border:2px solid #bd362f;background-color:#bd362f;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-error:hover{border:2px solid #a9302a;background-color:#a9302a;box-shadow:0 0 15px -5px #0006}.abp-toast .abp-toast-icon{display:flex;align-items:center;justify-content:center}.abp-toast .abp-toast-icon .icon{font-size:36px}.abp-toast .abp-toast-content{position:relative;display:flex;align-self:center;flex-direction:column;word-break:break-word}.abp-toast .abp-toast-content .abp-toast-close-button{position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;margin:0;padding:0 5px 0 0;width:25px;height:25px;border:none;border-radius:50%;background:transparent;color:inherit}.abp-toast .abp-toast-content .abp-toast-close-button:focus{outline:none}.abp-toast .abp-toast-content .abp-toast-title{margin:0;padding:0;font-size:1rem;font-weight:600}.abp-toast .abp-toast-content .abp-toast-message{margin:0;padding:0;max-width:240px}\n"] }]
1000
+ args: [{ selector: 'abp-toast', template: "<div class=\"abp-toast\" [ngClass]=\"severityClass\" (click)=\"tap()\">\r\n <div class=\"abp-toast-icon\">\r\n <i class=\"fa icon\" [ngClass]=\"iconClass\" aria-hidden=\"true\"></i>\r\n </div>\r\n <div class=\"abp-toast-content\">\r\n @if (toast.options?.closable) {\r\n <button class=\"abp-toast-close-button\" (click)=\"close()\">\r\n <i class=\"fa fa-times\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <div class=\"abp-toast-title\">\r\n {{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}\r\n </div>\r\n <p\r\n class=\"abp-toast-message\"\r\n [innerHTML]=\"toast.message | abpLocalization: toast.options?.messageLocalizationParams\"\r\n ></p>\r\n </div>\r\n</div>\r\n", styles: [".abp-toast{display:grid;grid-template-columns:50px 1fr;gap:10px;margin:5px 0;padding:10px;border-radius:0;width:350px;-webkit-user-select:none;user-select:none;z-index:9999;border:2px solid #f0f0f0;background-color:#f0f0f0;color:#000;box-shadow:0 0 10px -5px #0006;opacity:1}.abp-toast:hover{border:2px solid #e3e3e3;background-color:#e3e3e3;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-success{border:2px solid #51a351;background-color:#51a351;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-success:hover{border:2px solid #499249;background-color:#499249;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-info{border:2px solid #2f96b4;background-color:#2f96b4;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-info:hover{border:2px solid #2a85a0;background-color:#2a85a0;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-warning{border:2px solid #f89406;background-color:#f89406;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-warning:hover{border:2px solid #df8505;background-color:#df8505;box-shadow:0 0 15px -5px #0006}.abp-toast.abp-toast-error{border:2px solid #bd362f;background-color:#bd362f;color:#fff;box-shadow:0 0 10px -5px #0006}.abp-toast.abp-toast-error:hover{border:2px solid #a9302a;background-color:#a9302a;box-shadow:0 0 15px -5px #0006}.abp-toast .abp-toast-icon{display:flex;align-items:center;justify-content:center}.abp-toast .abp-toast-icon .icon{font-size:36px}.abp-toast .abp-toast-content{position:relative;display:flex;align-self:center;flex-direction:column;word-break:break-word}.abp-toast .abp-toast-content .abp-toast-close-button{position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;margin:0;padding:0 5px 0 0;width:25px;height:25px;border:none;border-radius:50%;background:transparent;color:inherit}.abp-toast .abp-toast-content .abp-toast-close-button:focus{outline:none}.abp-toast .abp-toast-content .abp-toast-title{margin:0;padding:0;font-size:1rem;font-weight:600}.abp-toast .abp-toast-content .abp-toast-message{margin:0;padding:0;max-width:240px}\n"] }]
1000
1001
  }], propDecorators: { toast: [{
1001
1002
  type: Input
1002
1003
  }], remove: [{
@@ -1036,11 +1037,11 @@ class ToastContainerComponent {
1036
1037
  return toast.options?.id;
1037
1038
  }
1038
1039
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1039
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ToastContainerComponent, selector: "abp-toast-container", inputs: { top: "top", right: "right", bottom: "bottom", left: "left", toastKey: "toastKey" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, ngImport: i0, template: "<div\r\n class=\"abp-toast-container\"\r\n [style.top]=\"top || 'auto'\"\r\n [style.right]=\"right || 'auto'\"\r\n [style.bottom]=\"bottom || 'auto'\"\r\n [style.left]=\"left || 'auto'\"\r\n [style.display]=\"toasts.length ? 'flex' : 'none'\"\r\n [@toastInOut]=\"toasts.length\"\r\n>\r\n <abp-toast\r\n [toast]=\"toast\"\r\n *ngFor=\"let toast of toasts; trackBy: trackByFunc\"\r\n (remove)=\"remove($event)\"\r\n ></abp-toast>\r\n</div>\r\n", styles: [".abp-toast-container{position:fixed;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:350px;min-height:80px;z-index:1900}.abp-toast-container.new-on-top{flex-direction:column-reverse}@media only screen and (max-width: 768px){.abp-toast-container{min-width:100%}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ToastComponent, selector: "abp-toast", inputs: ["toast"], outputs: ["remove"] }], animations: [toastInOut] }); }
1040
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: ToastContainerComponent, selector: "abp-toast-container", inputs: { top: "top", right: "right", bottom: "bottom", left: "left", toastKey: "toastKey" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, ngImport: i0, template: "<div\r\n class=\"abp-toast-container\"\r\n [style.top]=\"top || 'auto'\"\r\n [style.right]=\"right || 'auto'\"\r\n [style.bottom]=\"bottom || 'auto'\"\r\n [style.left]=\"left || 'auto'\"\r\n [style.display]=\"toasts.length ? 'flex' : 'none'\"\r\n [@toastInOut]=\"toasts.length\"\r\n>\r\n @for (toast of toasts; track toast.options?.id) {\r\n <abp-toast\r\n [toast]=\"toast\"\r\n (remove)=\"remove($event)\"\r\n ></abp-toast>\r\n }\r\n</div>\r\n", styles: [".abp-toast-container{position:fixed;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:350px;min-height:80px;z-index:1900}.abp-toast-container.new-on-top{flex-direction:column-reverse}@media only screen and (max-width: 768px){.abp-toast-container{min-width:100%}}\n"], dependencies: [{ kind: "component", type: ToastComponent, selector: "abp-toast", inputs: ["toast"], outputs: ["remove"] }], animations: [toastInOut] }); }
1040
1041
  }
1041
1042
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ToastContainerComponent, decorators: [{
1042
1043
  type: Component,
1043
- args: [{ selector: 'abp-toast-container', animations: [toastInOut], template: "<div\r\n class=\"abp-toast-container\"\r\n [style.top]=\"top || 'auto'\"\r\n [style.right]=\"right || 'auto'\"\r\n [style.bottom]=\"bottom || 'auto'\"\r\n [style.left]=\"left || 'auto'\"\r\n [style.display]=\"toasts.length ? 'flex' : 'none'\"\r\n [@toastInOut]=\"toasts.length\"\r\n>\r\n <abp-toast\r\n [toast]=\"toast\"\r\n *ngFor=\"let toast of toasts; trackBy: trackByFunc\"\r\n (remove)=\"remove($event)\"\r\n ></abp-toast>\r\n</div>\r\n", styles: [".abp-toast-container{position:fixed;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:350px;min-height:80px;z-index:1900}.abp-toast-container.new-on-top{flex-direction:column-reverse}@media only screen and (max-width: 768px){.abp-toast-container{min-width:100%}}\n"] }]
1044
+ args: [{ selector: 'abp-toast-container', animations: [toastInOut], template: "<div\r\n class=\"abp-toast-container\"\r\n [style.top]=\"top || 'auto'\"\r\n [style.right]=\"right || 'auto'\"\r\n [style.bottom]=\"bottom || 'auto'\"\r\n [style.left]=\"left || 'auto'\"\r\n [style.display]=\"toasts.length ? 'flex' : 'none'\"\r\n [@toastInOut]=\"toasts.length\"\r\n>\r\n @for (toast of toasts; track toast.options?.id) {\r\n <abp-toast\r\n [toast]=\"toast\"\r\n (remove)=\"remove($event)\"\r\n ></abp-toast>\r\n }\r\n</div>\r\n", styles: [".abp-toast-container{position:fixed;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-width:350px;min-height:80px;z-index:1900}.abp-toast-container.new-on-top{flex-direction:column-reverse}@media only screen and (max-width: 768px){.abp-toast-container{min-width:100%}}\n"] }]
1044
1045
  }], propDecorators: { top: [{
1045
1046
  type: Input
1046
1047
  }], right: [{
@@ -1304,7 +1305,7 @@ class FormCheckboxComponent extends AbstractNgModelComponent {
1304
1305
  this.checkboxFocus = new EventEmitter();
1305
1306
  }
1306
1307
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FormCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: FormCheckboxComponent, selector: "abp-checkbox", inputs: { label: "label", labelClass: "labelClass", checkboxId: "checkboxId", checkboxStyle: "checkboxStyle", checkboxClass: "checkboxClass", checkboxReadonly: "checkboxReadonly" }, outputs: { checkboxBlur: "checkboxBlur", checkboxFocus: "checkboxFocus" }, providers: [
1308
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: FormCheckboxComponent, selector: "abp-checkbox", inputs: { label: "label", labelClass: "labelClass", checkboxId: "checkboxId", checkboxStyle: "checkboxStyle", checkboxClass: "checkboxClass", checkboxReadonly: "checkboxReadonly" }, outputs: { checkboxBlur: "checkboxBlur", checkboxFocus: "checkboxFocus" }, providers: [
1308
1309
  {
1309
1310
  provide: NG_VALUE_ACCESSOR,
1310
1311
  useExisting: forwardRef(() => FormCheckboxComponent),
@@ -1322,11 +1323,13 @@ class FormCheckboxComponent extends AbstractNgModelComponent {
1322
1323
  (blur)="checkboxBlur.next()"
1323
1324
  (focus)="checkboxFocus.next()"
1324
1325
  />
1325
- <label *ngIf="label" [ngClass]="labelClass" [for]="checkboxId">
1326
- {{ label | abpLocalization }}
1327
- </label>
1326
+ @if (label) {
1327
+ <label [ngClass]="labelClass" [for]="checkboxId">
1328
+ {{ label | abpLocalization }}
1329
+ </label>
1330
+ }
1328
1331
  </div>
1329
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
1332
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
1330
1333
  }
1331
1334
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FormCheckboxComponent, decorators: [{
1332
1335
  type: Component,
@@ -1344,9 +1347,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1344
1347
  (blur)="checkboxBlur.next()"
1345
1348
  (focus)="checkboxFocus.next()"
1346
1349
  />
1347
- <label *ngIf="label" [ngClass]="labelClass" [for]="checkboxId">
1348
- {{ label | abpLocalization }}
1349
- </label>
1350
+ @if (label) {
1351
+ <label [ngClass]="labelClass" [for]="checkboxId">
1352
+ {{ label | abpLocalization }}
1353
+ </label>
1354
+ }
1350
1355
  </div>
1351
1356
  `,
1352
1357
  providers: [
@@ -1387,7 +1392,7 @@ class FormInputComponent extends AbstractNgModelComponent {
1387
1392
  this.formFocus = new EventEmitter();
1388
1393
  }
1389
1394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FormInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1390
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: FormInputComponent, selector: "abp-form-input", inputs: { inputId: "inputId", inputReadonly: "inputReadonly", label: "label", labelClass: "labelClass", inputPlaceholder: "inputPlaceholder", inputStyle: "inputStyle", inputClass: "inputClass" }, outputs: { formBlur: "formBlur", formFocus: "formFocus" }, providers: [
1395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: FormInputComponent, selector: "abp-form-input", inputs: { inputId: "inputId", inputReadonly: "inputReadonly", label: "label", labelClass: "labelClass", inputPlaceholder: "inputPlaceholder", inputStyle: "inputStyle", inputClass: "inputClass" }, outputs: { formBlur: "formBlur", formFocus: "formFocus" }, providers: [
1391
1396
  {
1392
1397
  provide: NG_VALUE_ACCESSOR,
1393
1398
  useExisting: forwardRef(() => FormInputComponent),
@@ -1395,9 +1400,11 @@ class FormInputComponent extends AbstractNgModelComponent {
1395
1400
  },
1396
1401
  ], usesInheritance: true, ngImport: i0, template: `
1397
1402
  <div class="mb-3">
1398
- <label *ngIf="label" [ngClass]="labelClass" [for]="inputId">
1399
- {{ label | abpLocalization }}
1400
- </label>
1403
+ @if (label) {
1404
+ <label [ngClass]="labelClass" [for]="inputId">
1405
+ {{ label | abpLocalization }}
1406
+ </label>
1407
+ }
1401
1408
  <input
1402
1409
  type="text"
1403
1410
  [id]="inputId"
@@ -1410,7 +1417,7 @@ class FormInputComponent extends AbstractNgModelComponent {
1410
1417
  [(ngModel)]="value"
1411
1418
  />
1412
1419
  </div>
1413
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
1420
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i2.LocalizationPipe, name: "abpLocalization" }] }); }
1414
1421
  }
1415
1422
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: FormInputComponent, decorators: [{
1416
1423
  type: Component,
@@ -1418,9 +1425,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
1418
1425
  selector: 'abp-form-input',
1419
1426
  template: `
1420
1427
  <div class="mb-3">
1421
- <label *ngIf="label" [ngClass]="labelClass" [for]="inputId">
1422
- {{ label | abpLocalization }}
1423
- </label>
1428
+ @if (label) {
1429
+ <label [ngClass]="labelClass" [for]="inputId">
1430
+ {{ label | abpLocalization }}
1431
+ </label>
1432
+ }
1424
1433
  <input
1425
1434
  type="text"
1426
1435
  [id]="inputId"
@@ -2658,6 +2667,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
2658
2667
  args: [{ providedIn: 'root' }]
2659
2668
  }] });
2660
2669
 
2670
+ class AbpAuthenticationErrorHandler {
2671
+ constructor() {
2672
+ this.priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh;
2673
+ this.authService = inject(AuthService);
2674
+ this.configStateService = inject(ConfigStateService);
2675
+ }
2676
+ canHandle(error) {
2677
+ return error instanceof HttpErrorResponse && error.status === 401;
2678
+ }
2679
+ execute() {
2680
+ this.configStateService.refreshAppState().subscribe(({ currentUser }) => {
2681
+ if (!currentUser.isAuthenticated) {
2682
+ this.authService.logout({ noRedirectToLogoutUrl: true });
2683
+ }
2684
+ });
2685
+ }
2686
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2687
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, providedIn: 'root' }); }
2688
+ }
2689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: AbpAuthenticationErrorHandler, decorators: [{
2690
+ type: Injectable,
2691
+ args: [{ providedIn: 'root' }]
2692
+ }] });
2693
+
2661
2694
  class RouterErrorHandlerService {
2662
2695
  constructor() {
2663
2696
  this.routerEvents = inject(RouterEvents);
@@ -2834,6 +2867,11 @@ const DEFAULT_HANDLERS_PROVIDERS = [
2834
2867
  multi: true,
2835
2868
  useExisting: UnknownStatusCodeErrorHandlerService,
2836
2869
  },
2870
+ {
2871
+ provide: CUSTOM_ERROR_HANDLERS,
2872
+ multi: true,
2873
+ useExisting: AbpAuthenticationErrorHandler,
2874
+ },
2837
2875
  ];
2838
2876
 
2839
2877
  const DEFAULT_VALIDATION_BLUEPRINTS = {
@@ -3144,5 +3182,5 @@ var scripts = '';
3144
3182
  * Generated bundle index. Do not edit.
3145
3183
  */
3146
3184
 
3147
- export { AbpFormatErrorHandlerService, AbpVisibleDirective, BaseThemeSharedModule, BreadcrumbComponent, BreadcrumbItemsComponent, ButtonComponent, CUSTOM_ERROR_HANDLERS, CUSTOM_HTTP_ERROR_HANDLER_PRIORITY, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CardHeaderDirective, CardImgTopDirective, CardModule, CardSubtitleDirective, CardTitleDirective, Confirmation, ConfirmationComponent, ConfirmationService, CreateErrorComponentService, DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES, DEFAULT_HANDLERS_PROVIDERS, DEFAULT_VALIDATION_BLUEPRINTS, DateAdapter, DateParserFormatter, DateTimeAdapter, DisabledDirective, DocumentDirHandlerService, EllipsisDirective, ErrorHandler, FormCheckboxComponent, FormInputComponent, HTTP_ERROR_CONFIG, HTTP_ERROR_DETAIL, HTTP_ERROR_HANDLER, HTTP_ERROR_STATUS, HttpErrorWrapperComponent, InternetConnectionStatusComponent, LoaderBarComponent, LoadingComponent, LoadingDirective, ModalCloseDirective, ModalComponent, ModalRefService, NGX_DATATABLE_MESSAGES, NG_BOOTSTRAP_CONFIG_PROVIDERS, NavItem, NavItemsService, NgxDatatableDefaultDirective, NgxDatatableListDirective, PageAlertService, PasswordComponent, RouterErrorHandlerService, SUPPRESS_UNSAVED_CHANGES_WARNING, StatusCodeErrorHandlerService, THEME_SHARED_APPEND_CONTENT, THEME_SHARED_ROUTE_PROVIDERS, TenantResolveErrorHandlerService, ThemeSharedModule, TimeAdapter, ToastComponent, ToastContainerComponent, ToasterService, UnknownStatusCodeErrorHandlerService, UserMenu, UserMenuService, bounceIn, collapse, collapseLinearWithMargin, collapseWithMargin, collapseX, collapseY, collapseYWithMargin, configureNgBootstrap, configureRoutes, defaultNgxDatatableMessages, dialogAnimation, eFormComponets, expandX, expandY, expandYWithMargin, fadeAnimation, fadeIn, fadeInDown, fadeInLeft, fadeInRight, fadeInUp, fadeOut, fadeOutDown, fadeOutLeft, fadeOutRight, fadeOutUp, getErrorFromRequestBody, getPasswordValidators, slideFromBottom, tenantNotFoundProvider, toastInOut, validatePassword };
3185
+ export { AbpAuthenticationErrorHandler, AbpFormatErrorHandlerService, AbpVisibleDirective, BaseThemeSharedModule, BreadcrumbComponent, BreadcrumbItemsComponent, ButtonComponent, CUSTOM_ERROR_HANDLERS, CUSTOM_HTTP_ERROR_HANDLER_PRIORITY, CardBodyComponent, CardComponent, CardFooterComponent, CardHeaderComponent, CardHeaderDirective, CardImgTopDirective, CardModule, CardSubtitleDirective, CardTitleDirective, Confirmation, ConfirmationComponent, ConfirmationService, CreateErrorComponentService, DEFAULT_ERROR_LOCALIZATIONS, DEFAULT_ERROR_MESSAGES, DEFAULT_HANDLERS_PROVIDERS, DEFAULT_VALIDATION_BLUEPRINTS, DateAdapter, DateParserFormatter, DateTimeAdapter, DisabledDirective, DocumentDirHandlerService, EllipsisDirective, ErrorHandler, FormCheckboxComponent, FormInputComponent, HTTP_ERROR_CONFIG, HTTP_ERROR_DETAIL, HTTP_ERROR_HANDLER, HTTP_ERROR_STATUS, HttpErrorWrapperComponent, InternetConnectionStatusComponent, LoaderBarComponent, LoadingComponent, LoadingDirective, ModalCloseDirective, ModalComponent, ModalRefService, NGX_DATATABLE_MESSAGES, NG_BOOTSTRAP_CONFIG_PROVIDERS, NavItem, NavItemsService, NgxDatatableDefaultDirective, NgxDatatableListDirective, PageAlertService, PasswordComponent, RouterErrorHandlerService, SUPPRESS_UNSAVED_CHANGES_WARNING, StatusCodeErrorHandlerService, THEME_SHARED_APPEND_CONTENT, THEME_SHARED_ROUTE_PROVIDERS, TenantResolveErrorHandlerService, ThemeSharedModule, TimeAdapter, ToastComponent, ToastContainerComponent, ToasterService, UnknownStatusCodeErrorHandlerService, UserMenu, UserMenuService, bounceIn, collapse, collapseLinearWithMargin, collapseWithMargin, collapseX, collapseY, collapseYWithMargin, configureNgBootstrap, configureRoutes, defaultNgxDatatableMessages, dialogAnimation, eFormComponets, expandX, expandY, expandYWithMargin, fadeAnimation, fadeIn, fadeInDown, fadeInLeft, fadeInRight, fadeInUp, fadeOut, fadeOutDown, fadeOutLeft, fadeOutRight, fadeOutUp, getErrorFromRequestBody, getPasswordValidators, slideFromBottom, tenantNotFoundProvider, toastInOut, validatePassword };
3148
3186
  //# sourceMappingURL=abp-ng.theme.shared.mjs.map