wacom 20.4.3 → 20.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import * as i2 from '@angular/platform-browser';
5
5
  import { DomSanitizer } from '@angular/platform-browser';
6
6
  import * as i1$1 from '@angular/common';
7
7
  import { CommonModule } from '@angular/common';
8
- import { Subject, skip, takeUntil, share, filter, map, Observable, take, merge, combineLatest, timeout, firstValueFrom, ReplaySubject, EMPTY } from 'rxjs';
8
+ import { firstValueFrom, Subject, skip, takeUntil, share, filter, map, Observable, take, merge, combineLatest, timeout, ReplaySubject, EMPTY } from 'rxjs';
9
9
  import { toObservable } from '@angular/core/rxjs-interop';
10
10
  import * as i1$2 from '@angular/common/http';
11
11
  import { HttpHeaders, HttpErrorResponse, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
@@ -213,10 +213,10 @@ class MetaService {
213
213
  console.warn(`To disable these warnings, set metaConfig.warnMissingGuard: false in your MetaConfig passed to MetaModule.forRoot()`);
214
214
  }
215
215
  }
216
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: i1.Router }, { token: i2.Meta }, { token: i2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
217
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaService, providedIn: 'root' }); }
216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: i1.Router }, { token: i2.Meta }, { token: i2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
217
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaService, providedIn: 'root' }); }
218
218
  }
219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaService, decorators: [{
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaService, decorators: [{
220
220
  type: Injectable,
221
221
  args: [{
222
222
  providedIn: 'root',
@@ -276,10 +276,10 @@ class MetaGuard {
276
276
  this.metaService.setTag(key, this._meta.defaults[key]);
277
277
  });
278
278
  }
279
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaGuard, deps: [{ token: MetaService }, { token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
280
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaGuard, providedIn: 'root' }); }
279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaGuard, deps: [{ token: MetaService }, { token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
280
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaGuard, providedIn: 'root' }); }
281
281
  }
282
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MetaGuard, decorators: [{
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MetaGuard, decorators: [{
283
283
  type: Injectable,
284
284
  args: [{ providedIn: 'root' }]
285
285
  }], ctorParameters: () => [{ type: MetaService }, { type: undefined, decorators: [{
@@ -345,10 +345,10 @@ class AlertComponent {
345
345
  this.delete_animation = false;
346
346
  }, 350);
347
347
  }
348
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
349
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: AlertComponent, isStandalone: true, selector: "alert", viewQueries: [{ propertyName: "alertRef", first: true, predicate: ["alertRef"], descendants: true }], ngImport: i0, template: "@if (text) {\r\n\t<div\r\n\t\tclass=\"wacom-alert wacom-alert--auto-height\"\r\n\t\t[class.wacom-alert--closing]=\"delete_animation\"\r\n\t\t[ngClass]=\"class\"\r\n\t>\r\n\t\t<div\r\n\t\t\t[ngClass]=\"'wacom-alert__content--color-' + type\"\r\n\t\t\tclass=\"wacom-alert__content wacom-alert__content--bounce-in-up\"\r\n\t\t\t#alertRef\r\n\t\t>\r\n\t\t\t@if (progress) {\r\n\t\t\t\t<div class=\"wacom-alert__progress\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass=\"wacom-alert__progress-bar\"\r\n\t\t\t\t\t\t[ngClass]=\"'wacom-alert__progress-bar--' + type\"\r\n\t\t\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t\t\t}\"\r\n\t\t\t\t\t></span>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div class=\"wacom-alert__body\">\r\n\t\t\t\t<div class=\"wacom-alert__texts\">\r\n\t\t\t\t\t@if (icon) {\r\n\t\t\t\t\t\t<div class=\"{{ icon }}\"></div>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"wacom-alert__message wacom-alert__message--slide-in\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ text }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t@if (type === \"question\") {\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t@for (button of buttons; track button.text) {\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t(click)=\"remove(button.callback)\"\r\n\t\t\t\t\t\t\t\tclass=\"wacom-alert__button\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ button.text }}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t\t@if (closable) {\r\n\t\t\t\t\t<div class=\"wacom-alert__close\" (click)=\"remove()\"></div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n}\r\n", styles: ["@keyframes iziT-bounceInUp{0%{opacity:0;transform:translateY(200px)}50%{opacity:1;transform:translateY(-10px)}70%{transform:translateY(5px)}to{transform:translateY(0)}}@keyframes wacom-alert-progress{0%{width:100%}to{width:0%}}.wacom-alert{font-size:0;height:100px;width:100%;transform:translateZ(0);backface-visibility:hidden;transition:.3s all ease-in-out;opacity:1}.wacom-alert--closing{opacity:0;transition:.3s all ease-in-out}.wacom-alert--auto-height{height:auto!important}.wacom-alert__content{display:inline-block;clear:both;position:relative;font-family:Lato,Tahoma,Arial;font-size:14px;padding:8px 0 9px;background:#eeeeeee6;border-color:#eeeeeee6;width:100%;pointer-events:all;cursor:default;transform:translate(0);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:54px}.wacom-alert__content:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__content--bounce-in-up{-webkit-animation:iziT-bounceInUp .7s ease-in-out both;animation:iziT-bounceInUp .7s ease-in-out both}.wacom-alert__content--theme-dark{background:#565c70;border-color:#565c70}.wacom-alert__content--theme-dark .wacom-alert__message{color:#ffffffb3;font-weight:300}.wacom-alert__content--color-info{background-color:var(--wacom-info)}.wacom-alert__content--color-error{background-color:var(--wacom-error)}.wacom-alert__content--color-success{background-color:var(--wacom-success)}.wacom-alert__content--color-warning{background-color:var(--wacom-warning)}.wacom-alert__content--color-question{background-color:var(--wacom-question)}.wacom-alert__close{width:15px;height:15px;right:17px;top:-5px;opacity:.3;position:relative;order:2}.wacom-alert__close:hover{opacity:1}.wacom-alert__close:before,.wacom-alert__close:after{cursor:pointer;position:absolute;left:15px;content:\" \";height:12px;width:2px;background-color:var(--wacom-secondary)}.wacom-alert__close:before{transform:rotate(45deg)}.wacom-alert__close:after{transform:rotate(-45deg)}.wacom-alert__progress{bottom:0;position:absolute;width:100%;margin-bottom:0;border-radius:50px}.wacom-alert__progress:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-alert-progress;animation-duration:10s;border-radius:50px}.wacom-alert__progress-bar--info{background-color:var(--wacom-info)}.wacom-alert__progress-bar--error{background-color:var(--wacom-error)}.wacom-alert__progress-bar--success{background-color:var(--wacom-success)}.wacom-alert__progress-bar--warning{background-color:var(--wacom-warning)}.wacom-alert__progress-bar--question{background-color:var(--wacom-question)}.wacom-alert__body{position:relative;padding:0 0 0 10px;min-height:36px;margin:0 0 0 15px;text-align:left;display:flex;justify-content:space-between;align-items:center}.wacom-alert__texts{margin:10px 0 0;padding-right:2px;display:flex;justify-content:space-between;align-items:center}.wacom-alert__message{padding:0;font-size:14px;line-height:16px;text-align:left;color:#0009;white-space:normal}.wacom-alert__message--slide-in{-webkit-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;-moz-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
348
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
349
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: AlertComponent, isStandalone: true, selector: "alert", viewQueries: [{ propertyName: "alertRef", first: true, predicate: ["alertRef"], descendants: true }], ngImport: i0, template: "@if (text) {\r\n\t<div\r\n\t\tclass=\"wacom-alert wacom-alert--auto-height\"\r\n\t\t[class.wacom-alert--closing]=\"delete_animation\"\r\n\t\t[ngClass]=\"class\"\r\n\t>\r\n\t\t<div\r\n\t\t\t[ngClass]=\"'wacom-alert__content--color-' + type\"\r\n\t\t\tclass=\"wacom-alert__content wacom-alert__content--bounce-in-up\"\r\n\t\t\t#alertRef\r\n\t\t>\r\n\t\t\t@if (progress) {\r\n\t\t\t\t<div class=\"wacom-alert__progress\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass=\"wacom-alert__progress-bar\"\r\n\t\t\t\t\t\t[ngClass]=\"'wacom-alert__progress-bar--' + type\"\r\n\t\t\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t\t\t}\"\r\n\t\t\t\t\t></span>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div class=\"wacom-alert__body\">\r\n\t\t\t\t<div class=\"wacom-alert__texts\">\r\n\t\t\t\t\t@if (icon) {\r\n\t\t\t\t\t\t<div class=\"{{ icon }}\"></div>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"wacom-alert__message wacom-alert__message--slide-in\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ text }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t@if (type === \"question\") {\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t@for (button of buttons; track button.text) {\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t(click)=\"remove(button.callback)\"\r\n\t\t\t\t\t\t\t\tclass=\"wacom-alert__button\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ button.text }}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t\t@if (closable) {\r\n\t\t\t\t\t<div class=\"wacom-alert__close\" (click)=\"remove()\"></div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n}\r\n", styles: ["@keyframes iziT-bounceInUp{0%{opacity:0;transform:translateY(200px)}50%{opacity:1;transform:translateY(-10px)}70%{transform:translateY(5px)}to{transform:translateY(0)}}@keyframes wacom-alert-progress{0%{width:100%}to{width:0%}}.wacom-alert{font-size:0;height:100px;width:100%;transform:translateZ(0);backface-visibility:hidden;transition:.3s all ease-in-out;opacity:1}.wacom-alert--closing{opacity:0;transition:.3s all ease-in-out}.wacom-alert--auto-height{height:auto!important}.wacom-alert__content{display:inline-block;clear:both;position:relative;font-family:Lato,Tahoma,Arial;font-size:14px;padding:8px 0 9px;background:#eeeeeee6;border-color:#eeeeeee6;width:100%;pointer-events:all;cursor:default;transform:translate(0);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:54px}.wacom-alert__content:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__content--bounce-in-up{-webkit-animation:iziT-bounceInUp .7s ease-in-out both;animation:iziT-bounceInUp .7s ease-in-out both}.wacom-alert__content--theme-dark{background:#565c70;border-color:#565c70}.wacom-alert__content--theme-dark .wacom-alert__message{color:#ffffffb3;font-weight:300}.wacom-alert__content--color-info{background-color:var(--wacom-info)}.wacom-alert__content--color-error{background-color:var(--wacom-error)}.wacom-alert__content--color-success{background-color:var(--wacom-success)}.wacom-alert__content--color-warning{background-color:var(--wacom-warning)}.wacom-alert__content--color-question{background-color:var(--wacom-question)}.wacom-alert__close{width:15px;height:15px;right:17px;top:-5px;opacity:.3;position:relative;order:2}.wacom-alert__close:hover{opacity:1}.wacom-alert__close:before,.wacom-alert__close:after{cursor:pointer;position:absolute;left:15px;content:\" \";height:12px;width:2px;background-color:var(--wacom-secondary)}.wacom-alert__close:before{transform:rotate(45deg)}.wacom-alert__close:after{transform:rotate(-45deg)}.wacom-alert__progress{bottom:0;position:absolute;width:100%;margin-bottom:0;border-radius:50px}.wacom-alert__progress:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-alert-progress;animation-duration:10s;border-radius:50px}.wacom-alert__progress-bar--info{background-color:var(--wacom-info)}.wacom-alert__progress-bar--error{background-color:var(--wacom-error)}.wacom-alert__progress-bar--success{background-color:var(--wacom-success)}.wacom-alert__progress-bar--warning{background-color:var(--wacom-warning)}.wacom-alert__progress-bar--question{background-color:var(--wacom-question)}.wacom-alert__body{position:relative;padding:0 0 0 10px;min-height:36px;margin:0 0 0 15px;text-align:left;display:flex;justify-content:space-between;align-items:center}.wacom-alert__texts{margin:10px 0 0;padding-right:2px;display:flex;justify-content:space-between;align-items:center}.wacom-alert__message{padding:0;font-size:14px;line-height:16px;text-align:left;color:#0009;white-space:normal}.wacom-alert__message--slide-in{-webkit-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;-moz-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
350
350
  }
351
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: AlertComponent, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: AlertComponent, decorators: [{
352
352
  type: Component,
353
353
  args: [{ selector: 'alert', imports: [CommonModule], template: "@if (text) {\r\n\t<div\r\n\t\tclass=\"wacom-alert wacom-alert--auto-height\"\r\n\t\t[class.wacom-alert--closing]=\"delete_animation\"\r\n\t\t[ngClass]=\"class\"\r\n\t>\r\n\t\t<div\r\n\t\t\t[ngClass]=\"'wacom-alert__content--color-' + type\"\r\n\t\t\tclass=\"wacom-alert__content wacom-alert__content--bounce-in-up\"\r\n\t\t\t#alertRef\r\n\t\t>\r\n\t\t\t@if (progress) {\r\n\t\t\t\t<div class=\"wacom-alert__progress\">\r\n\t\t\t\t\t<span\r\n\t\t\t\t\t\tclass=\"wacom-alert__progress-bar\"\r\n\t\t\t\t\t\t[ngClass]=\"'wacom-alert__progress-bar--' + type\"\r\n\t\t\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t\t\t}\"\r\n\t\t\t\t\t></span>\r\n\t\t\t\t</div>\r\n\t\t\t}\r\n\t\t\t<div class=\"wacom-alert__body\">\r\n\t\t\t\t<div class=\"wacom-alert__texts\">\r\n\t\t\t\t\t@if (icon) {\r\n\t\t\t\t\t\t<div class=\"{{ icon }}\"></div>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"wacom-alert__message wacom-alert__message--slide-in\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ text }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t@if (type === \"question\") {\r\n\t\t\t\t\t<div>\r\n\t\t\t\t\t\t@for (button of buttons; track button.text) {\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t(click)=\"remove(button.callback)\"\r\n\t\t\t\t\t\t\t\tclass=\"wacom-alert__button\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{{ button.text }}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t}\r\n\t\t\t\t@if (closable) {\r\n\t\t\t\t\t<div class=\"wacom-alert__close\" (click)=\"remove()\"></div>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n}\r\n", styles: ["@keyframes iziT-bounceInUp{0%{opacity:0;transform:translateY(200px)}50%{opacity:1;transform:translateY(-10px)}70%{transform:translateY(5px)}to{transform:translateY(0)}}@keyframes wacom-alert-progress{0%{width:100%}to{width:0%}}.wacom-alert{font-size:0;height:100px;width:100%;transform:translateZ(0);backface-visibility:hidden;transition:.3s all ease-in-out;opacity:1}.wacom-alert--closing{opacity:0;transition:.3s all ease-in-out}.wacom-alert--auto-height{height:auto!important}.wacom-alert__content{display:inline-block;clear:both;position:relative;font-family:Lato,Tahoma,Arial;font-size:14px;padding:8px 0 9px;background:#eeeeeee6;border-color:#eeeeeee6;width:100%;pointer-events:all;cursor:default;transform:translate(0);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;min-height:54px}.wacom-alert__content:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__content--bounce-in-up{-webkit-animation:iziT-bounceInUp .7s ease-in-out both;animation:iziT-bounceInUp .7s ease-in-out both}.wacom-alert__content--theme-dark{background:#565c70;border-color:#565c70}.wacom-alert__content--theme-dark .wacom-alert__message{color:#ffffffb3;font-weight:300}.wacom-alert__content--color-info{background-color:var(--wacom-info)}.wacom-alert__content--color-error{background-color:var(--wacom-error)}.wacom-alert__content--color-success{background-color:var(--wacom-success)}.wacom-alert__content--color-warning{background-color:var(--wacom-warning)}.wacom-alert__content--color-question{background-color:var(--wacom-question)}.wacom-alert__close{width:15px;height:15px;right:17px;top:-5px;opacity:.3;position:relative;order:2}.wacom-alert__close:hover{opacity:1}.wacom-alert__close:before,.wacom-alert__close:after{cursor:pointer;position:absolute;left:15px;content:\" \";height:12px;width:2px;background-color:var(--wacom-secondary)}.wacom-alert__close:before{transform:rotate(45deg)}.wacom-alert__close:after{transform:rotate(-45deg)}.wacom-alert__progress{bottom:0;position:absolute;width:100%;margin-bottom:0;border-radius:50px}.wacom-alert__progress:hover .wacom-alert__progress-bar{animation-play-state:paused}.wacom-alert__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-alert-progress;animation-duration:10s;border-radius:50px}.wacom-alert__progress-bar--info{background-color:var(--wacom-info)}.wacom-alert__progress-bar--error{background-color:var(--wacom-error)}.wacom-alert__progress-bar--success{background-color:var(--wacom-success)}.wacom-alert__progress-bar--warning{background-color:var(--wacom-warning)}.wacom-alert__progress-bar--question{background-color:var(--wacom-question)}.wacom-alert__body{position:relative;padding:0 0 0 10px;min-height:36px;margin:0 0 0 15px;text-align:left;display:flex;justify-content:space-between;align-items:center}.wacom-alert__texts{margin:10px 0 0;padding-right:2px;display:flex;justify-content:space-between;align-items:center}.wacom-alert__message{padding:0;font-size:14px;line-height:16px;text-align:left;color:#0009;white-space:normal}.wacom-alert__message--slide-in{-webkit-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;-moz-animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both;animation:iziT-slideIn 1s cubic-bezier(.16,.81,.32,1) both}\n"] }]
354
354
  }], propDecorators: { alertRef: [{
@@ -379,10 +379,10 @@ class BaseComponent {
379
379
  * rendered in different screen positions.
380
380
  */
381
381
  class WrapperComponent {
382
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
383
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.4", type: WrapperComponent, isStandalone: true, selector: "lib-wrapper", ngImport: i0, template: "<div class=\"wacom-wrapper\">\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-left\"\r\n\t\tid=\"topLeft\"\r\n\t></div>\r\n\t<div class=\"wacom-wrapper__alert wacom-wrapper__alert--top\" id=\"top\"></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-right\"\r\n\t\tid=\"topRight\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--left\"\r\n\t\tid=\"left\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--center\"\r\n\t\tid=\"center\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--right\"\r\n\t\tid=\"right\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-left\"\r\n\t\tid=\"bottomLeft\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom\"\r\n\t\tid=\"bottom\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-right\"\r\n\t\tid=\"bottomRight\"\r\n\t></div>\r\n</div>\r\n", styles: [".wacom-wrapper__alert{z-index:99999;position:fixed;width:100%;pointer-events:none;display:flex;flex-direction:column}.wacom-wrapper__alert--top-left{top:0;left:0;text-align:left}.wacom-wrapper__alert--top{top:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--top-right{top:0;right:0;text-align:right}.wacom-wrapper__alert--left{top:0;bottom:0;left:0;justify-content:center;text-align:left}.wacom-wrapper__alert--center{inset:0;text-align:center;justify-content:center;flex-flow:column;align-items:center}.wacom-wrapper__alert--right{top:0;bottom:0;right:0;justify-content:center;text-align:right}.wacom-wrapper__alert--bottom-left{bottom:0;left:0;text-align:left}.wacom-wrapper__alert--bottom{bottom:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--bottom-right{bottom:0;right:0;text-align:right}@media only screen and (max-width: 567px){.wacom-wrapper__alert--top-left,.wacom-wrapper__alert--top-right,.wacom-wrapper__alert--left,.wacom-wrapper__alert--right,.wacom-wrapper__alert--bottom-left,.wacom-wrapper__alert--bottom-right,.wacom-wrapper__alert--center{left:0;right:0;text-align:center}.wacom-wrapper__alert--center{align-items:stretch}.wacom-wrapper__alert--left,.wacom-wrapper__alert--right{flex-flow:column;align-items:center}}\n"] }); }
382
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: WrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
383
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.0", type: WrapperComponent, isStandalone: true, selector: "lib-wrapper", ngImport: i0, template: "<div class=\"wacom-wrapper\">\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-left\"\r\n\t\tid=\"topLeft\"\r\n\t></div>\r\n\t<div class=\"wacom-wrapper__alert wacom-wrapper__alert--top\" id=\"top\"></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-right\"\r\n\t\tid=\"topRight\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--left\"\r\n\t\tid=\"left\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--center\"\r\n\t\tid=\"center\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--right\"\r\n\t\tid=\"right\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-left\"\r\n\t\tid=\"bottomLeft\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom\"\r\n\t\tid=\"bottom\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-right\"\r\n\t\tid=\"bottomRight\"\r\n\t></div>\r\n</div>\r\n", styles: [".wacom-wrapper__alert{z-index:99999;position:fixed;width:100%;pointer-events:none;display:flex;flex-direction:column}.wacom-wrapper__alert--top-left{top:0;left:0;text-align:left}.wacom-wrapper__alert--top{top:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--top-right{top:0;right:0;text-align:right}.wacom-wrapper__alert--left{top:0;bottom:0;left:0;justify-content:center;text-align:left}.wacom-wrapper__alert--center{inset:0;text-align:center;justify-content:center;flex-flow:column;align-items:center}.wacom-wrapper__alert--right{top:0;bottom:0;right:0;justify-content:center;text-align:right}.wacom-wrapper__alert--bottom-left{bottom:0;left:0;text-align:left}.wacom-wrapper__alert--bottom{bottom:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--bottom-right{bottom:0;right:0;text-align:right}@media only screen and (max-width: 567px){.wacom-wrapper__alert--top-left,.wacom-wrapper__alert--top-right,.wacom-wrapper__alert--left,.wacom-wrapper__alert--right,.wacom-wrapper__alert--bottom-left,.wacom-wrapper__alert--bottom-right,.wacom-wrapper__alert--center{left:0;right:0;text-align:center}.wacom-wrapper__alert--center{align-items:stretch}.wacom-wrapper__alert--left,.wacom-wrapper__alert--right{flex-flow:column;align-items:center}}\n"] }); }
384
384
  }
385
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: WrapperComponent, decorators: [{
385
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: WrapperComponent, decorators: [{
386
386
  type: Component,
387
387
  args: [{ selector: 'lib-wrapper', imports: [], template: "<div class=\"wacom-wrapper\">\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-left\"\r\n\t\tid=\"topLeft\"\r\n\t></div>\r\n\t<div class=\"wacom-wrapper__alert wacom-wrapper__alert--top\" id=\"top\"></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--top-right\"\r\n\t\tid=\"topRight\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--left\"\r\n\t\tid=\"left\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--center\"\r\n\t\tid=\"center\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--right\"\r\n\t\tid=\"right\"\r\n\t></div>\r\n\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-left\"\r\n\t\tid=\"bottomLeft\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom\"\r\n\t\tid=\"bottom\"\r\n\t></div>\r\n\t<div\r\n\t\tclass=\"wacom-wrapper__alert wacom-wrapper__alert--bottom-right\"\r\n\t\tid=\"bottomRight\"\r\n\t></div>\r\n</div>\r\n", styles: [".wacom-wrapper__alert{z-index:99999;position:fixed;width:100%;pointer-events:none;display:flex;flex-direction:column}.wacom-wrapper__alert--top-left{top:0;left:0;text-align:left}.wacom-wrapper__alert--top{top:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--top-right{top:0;right:0;text-align:right}.wacom-wrapper__alert--left{top:0;bottom:0;left:0;justify-content:center;text-align:left}.wacom-wrapper__alert--center{inset:0;text-align:center;justify-content:center;flex-flow:column;align-items:center}.wacom-wrapper__alert--right{top:0;bottom:0;right:0;justify-content:center;text-align:right}.wacom-wrapper__alert--bottom-left{bottom:0;left:0;text-align:left}.wacom-wrapper__alert--bottom{bottom:0;left:0;right:0;text-align:center}.wacom-wrapper__alert--bottom-right{bottom:0;right:0;text-align:right}@media only screen and (max-width: 567px){.wacom-wrapper__alert--top-left,.wacom-wrapper__alert--top-right,.wacom-wrapper__alert--left,.wacom-wrapper__alert--right,.wacom-wrapper__alert--bottom-left,.wacom-wrapper__alert--bottom-right,.wacom-wrapper__alert--center{left:0;right:0;text-align:center}.wacom-wrapper__alert--center{align-items:stretch}.wacom-wrapper__alert--left,.wacom-wrapper__alert--right{flex-flow:column;align-items:center}}\n"] }]
388
388
  }] });
@@ -505,10 +505,10 @@ class DomService {
505
505
  delete this._providedIn[providedIn];
506
506
  }
507
507
  }
508
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: DomService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
509
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: DomService, providedIn: 'root' }); }
508
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: DomService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
509
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: DomService, providedIn: 'root' }); }
510
510
  }
511
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: DomService, decorators: [{
511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: DomService, decorators: [{
512
512
  type: Injectable,
513
513
  args: [{
514
514
  providedIn: 'root',
@@ -661,10 +661,10 @@ class AlertService {
661
661
  ...opts,
662
662
  };
663
663
  }
664
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: AlertService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
665
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: AlertService, providedIn: 'root' }); }
664
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: AlertService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
665
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: AlertService, providedIn: 'root' }); }
666
666
  }
667
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: AlertService, decorators: [{
667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: AlertService, decorators: [{
668
668
  type: Injectable,
669
669
  args: [{
670
670
  providedIn: 'root',
@@ -676,130 +676,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImpor
676
676
  type: Optional
677
677
  }] }, { type: DomService }] });
678
678
 
679
- class EmitterService {
680
- constructor() {
681
- this._signals = new Map();
682
- this._closers = new Map();
683
- this._streams = new Map();
684
- this._done = new Map();
685
- }
686
- _getSignal(id) {
687
- let s = this._signals.get(id);
688
- if (!s) {
689
- // emit even if same payload repeats
690
- s = signal(undefined, { equal: () => false });
691
- this._signals.set(id, s);
692
- }
693
- return s;
694
- }
695
- _getCloser(id) {
696
- let c = this._closers.get(id);
697
- if (!c) {
698
- c = new Subject();
699
- this._closers.set(id, c);
700
- }
701
- return c;
702
- }
703
- _getStream(id) {
704
- let obs$ = this._streams.get(id);
705
- if (!obs$) {
706
- const sig = this._getSignal(id);
707
- const closed$ = this._getCloser(id);
708
- obs$ = toObservable(sig).pipe(
709
- // Subject-like: don't replay the current value on subscribe
710
- skip(1), takeUntil(closed$), share());
711
- this._streams.set(id, obs$);
712
- }
713
- return obs$;
714
- }
715
- /** Emit an event */
716
- emit(id, data) {
717
- this._getSignal(id).set(data);
718
- }
719
- /** Listen for events (hot, completes when off(id) is called) */
720
- on(id) {
721
- return this._getStream(id);
722
- }
723
- /** Complete and remove a channel */
724
- off(id) {
725
- const closer = this._closers.get(id);
726
- if (closer) {
727
- closer.next();
728
- closer.complete();
729
- this._closers.delete(id);
730
- }
731
- this._signals.delete(id);
732
- this._streams.delete(id);
733
- }
734
- offAll() {
735
- for (const id of Array.from(this._closers.keys()))
736
- this.off(id);
737
- }
738
- has(id) {
739
- return this._signals.has(id);
740
- }
741
- _getDoneSignal(id) {
742
- let s = this._done.get(id);
743
- if (!s) {
744
- s = signal(undefined);
745
- this._done.set(id, s);
746
- }
747
- return s;
748
- }
749
- /** Mark task as completed with a payload (default: true) */
750
- complete(task, value = true) {
751
- this._getDoneSignal(task).set(value);
752
- }
753
- /** Clear completion so it can be awaited again */
754
- clearCompleted(task) {
755
- const s = this._done.get(task) ?? this._getDoneSignal(task);
756
- s.set(undefined);
757
- }
758
- /** Read current completion payload (undefined => not completed) */
759
- completed(task) {
760
- return this._getDoneSignal(task)();
761
- }
762
- isCompleted(task) {
763
- return this._getDoneSignal(task)() !== undefined;
764
- }
765
- onComplete(tasks, opts) {
766
- const list = (Array.isArray(tasks) ? tasks : [tasks]).filter(Boolean);
767
- const streams = list.map((id) => toObservable(this._getDoneSignal(id)).pipe(filter((v) => v !== undefined), map((v) => v)));
768
- let source$;
769
- if (list.length <= 1) {
770
- // single-task await
771
- source$ = streams[0]?.pipe(take(1)) ?? new Observable();
772
- }
773
- else if (opts?.mode === 'any') {
774
- source$ = merge(...streams).pipe(take(1));
775
- }
776
- else {
777
- source$ = combineLatest(streams).pipe(take(1));
778
- }
779
- if (opts?.timeoutMs && Number.isFinite(opts.timeoutMs)) {
780
- source$ = source$.pipe(timeout({ first: opts.timeoutMs }));
781
- }
782
- if (opts?.abort) {
783
- const abort$ = new Observable((sub) => {
784
- const handler = () => {
785
- sub.next();
786
- sub.complete();
787
- };
788
- opts.abort.addEventListener('abort', handler);
789
- return () => opts.abort.removeEventListener('abort', handler);
790
- });
791
- source$ = source$.pipe(takeUntil(abort$));
792
- }
793
- return source$;
794
- }
795
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EmitterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
796
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EmitterService, providedIn: 'root' }); }
797
- }
798
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: EmitterService, decorators: [{
799
- type: Injectable,
800
- args: [{ providedIn: 'root' }]
801
- }] });
802
-
803
679
  // Core utilities and helpers for the Wacom app
804
680
  // Add capitalize method to String prototype if it doesn't already exist
805
681
  if (!String.prototype.capitalize) {
@@ -827,7 +703,6 @@ class CoreService {
827
703
  // Locking management
828
704
  this._locked = {};
829
705
  this._unlockResolvers = {};
830
- this._emitterService = inject(EmitterService);
831
706
  localStorage.setItem('deviceID', this.deviceID);
832
707
  this.detectDevice();
833
708
  }
@@ -1109,7 +984,7 @@ class CoreService {
1109
984
  * to extract the initial value for that field. These fields will be wrapped
1110
985
  * as separate signals and embedded in the returned object.
1111
986
  *
1112
- * @returns {Signal<Document>} A signal-wrapped object, possibly containing
987
+ * @returns {WritableSignal<Document>} A signal-wrapped object, possibly containing
1113
988
  * nested field signals for more granular control.
1114
989
  *
1115
990
  * @example
@@ -1140,7 +1015,7 @@ class CoreService {
1140
1015
  * Optional map where keys are field names and values are functions that extract the initial value
1141
1016
  * from the object. These fields will be turned into separate signals.
1142
1017
  *
1143
- * @returns {Signal<Document>[]} An array where each item is a signal-wrapped object,
1018
+ * @returns {WritableSignal<Document>[]} An array where each item is a signal-wrapped object,
1144
1019
  * optionally with individual fields also wrapped in signals.
1145
1020
  *
1146
1021
  * @example
@@ -1157,7 +1032,7 @@ class CoreService {
1157
1032
  * Optionally wraps specific fields of the object as individual signals before wrapping the whole object.
1158
1033
  *
1159
1034
  * @template Document - The type of the object being added.
1160
- * @param {Signal<Document>[]} signals - The signals array to append to.
1035
+ * @param {WritableSignal<Document>[]} signals - The signals array to append to.
1161
1036
  * @param {Document} item - The object to wrap and push as a signal.
1162
1037
  * @param {Record<string, (doc: Document) => unknown>} [signalFields={}] -
1163
1038
  * Optional map of fields to be wrapped as signals within the object.
@@ -1214,10 +1089,10 @@ class CoreService {
1214
1089
  if (sig)
1215
1090
  sig.update(updater);
1216
1091
  }
1217
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1218
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CoreService, providedIn: 'root' }); }
1092
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1093
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: CoreService, providedIn: 'root' }); }
1219
1094
  }
1220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: CoreService, decorators: [{
1095
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: CoreService, decorators: [{
1221
1096
  type: Injectable,
1222
1097
  args: [{
1223
1098
  providedIn: 'root',
@@ -1453,42 +1328,40 @@ class CrudComponent {
1453
1328
  this.delete(doc);
1454
1329
  }
1455
1330
  : null,
1456
- buttons: [
1457
- this.allowUrl() && this._module
1458
- ? {
1459
- icon: 'cloud_download',
1460
- click: (doc) => {
1461
- this.mutateUrl(doc);
1462
- },
1463
- }
1464
- : null,
1465
- this.allowSort()
1466
- ? {
1467
- icon: 'arrow_upward',
1468
- click: (doc) => {
1469
- this.moveUp(doc);
1470
- },
1471
- }
1472
- : null,
1473
- ],
1474
- headerButtons: [
1475
- this.allowCreate()
1476
- ? {
1477
- icon: 'playlist_add',
1478
- click: this.bulkManagement(),
1479
- class: 'playlist',
1480
- }
1481
- : null,
1482
- this.allowMutate()
1483
- ? {
1484
- icon: 'edit_note',
1485
- click: this.bulkManagement(false),
1486
- class: 'edit',
1487
- }
1488
- : null,
1489
- ],
1331
+ buttons: [],
1332
+ headerButtons: [],
1490
1333
  allDocs: true,
1491
1334
  };
1335
+ if (this.allowUrl()) {
1336
+ config.buttons.push({
1337
+ icon: 'cloud_download',
1338
+ click: (doc) => {
1339
+ this.mutateUrl(doc);
1340
+ },
1341
+ });
1342
+ }
1343
+ if (this.allowSort()) {
1344
+ config.buttons.push({
1345
+ icon: 'arrow_upward',
1346
+ click: (doc) => {
1347
+ this.moveUp(doc);
1348
+ },
1349
+ });
1350
+ }
1351
+ if (this.allowCreate()) {
1352
+ config.headerButtons.push({
1353
+ icon: 'playlist_add',
1354
+ click: this.bulkManagement(),
1355
+ class: 'playlist',
1356
+ });
1357
+ }
1358
+ if (this.allowMutate()) {
1359
+ config.headerButtons.push({
1360
+ icon: 'edit_note',
1361
+ click: this.bulkManagement(false),
1362
+ class: 'edit',
1363
+ });
1364
+ }
1492
1365
  return this.configType === 'server'
1493
1366
  ? {
1494
1367
  ...config,
@@ -1509,10 +1382,10 @@ class LoaderComponent {
1509
1382
  }, this.timeout);
1510
1383
  }
1511
1384
  }
1512
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1513
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: LoaderComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"wacom-loader\" [ngClass]=\"class\">\r\n\t@if (progressPercentage) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[style.width.%]=\"progressPercentage()\"\r\n\t\t\t\tstyle=\"animation: none\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t} @else if (progress) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t}\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t}\r\n\t@if (closable) {\r\n\t\t<span class=\"wacom-loader__close\" (click)=\"close()\">&times;</span>\r\n\t}\r\n\t@if (text) {\r\n\t\t<span class=\"wacom-loader__text\">\r\n\t\t\t{{ text }}\r\n\t\t</span>\r\n\t}\r\n</div>\r\n", styles: [".wacom-loader{position:fixed;width:100%;height:100%;left:0;top:0;background-color:var(--wacom-secondary);display:flex;justify-content:center;align-items:center;z-index:999999}.wacom-loader__close{color:#aaa;position:absolute;right:20px;top:20px;font-size:32px;line-height:1}.wacom-loader__close:hover,.wacom-loader__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}.wacom-loader__text{font-size:30px;color:var(--wacom-primary)}.wacom-loader__progress{position:absolute;bottom:0;left:0;width:100%}.wacom-loader__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-loader-progress;animation-duration:10s;transition:width .2s ease}@keyframes wacom-loader-progress{0%{width:100%}to{width:0%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1385
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1386
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: LoaderComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<div class=\"wacom-loader\" [ngClass]=\"class\">\r\n\t@if (progressPercentage) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[style.width.%]=\"progressPercentage()\"\r\n\t\t\t\tstyle=\"animation: none\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t} @else if (progress) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t}\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t}\r\n\t@if (closable) {\r\n\t\t<span class=\"wacom-loader__close\" (click)=\"close()\">&times;</span>\r\n\t}\r\n\t@if (text) {\r\n\t\t<span class=\"wacom-loader__text\">\r\n\t\t\t{{ text }}\r\n\t\t</span>\r\n\t}\r\n</div>\r\n", styles: [".wacom-loader{position:fixed;width:100%;height:100%;left:0;top:0;background-color:var(--wacom-secondary);display:flex;justify-content:center;align-items:center;z-index:999999}.wacom-loader__close{color:#aaa;position:absolute;right:20px;top:20px;font-size:32px;line-height:1}.wacom-loader__close:hover,.wacom-loader__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}.wacom-loader__text{font-size:30px;color:var(--wacom-primary)}.wacom-loader__progress{position:absolute;bottom:0;left:0;width:100%}.wacom-loader__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-loader-progress;animation-duration:10s;transition:width .2s ease}@keyframes wacom-loader-progress{0%{width:100%}to{width:0%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
1514
1387
  }
1515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: LoaderComponent, decorators: [{
1388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: LoaderComponent, decorators: [{
1516
1389
  type: Component,
1517
1390
  args: [{ imports: [CommonModule], template: "<div class=\"wacom-loader\" [ngClass]=\"class\">\r\n\t@if (progressPercentage) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[style.width.%]=\"progressPercentage()\"\r\n\t\t\t\tstyle=\"animation: none\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t} @else if (progress) {\r\n\t\t<div class=\"wacom-loader__progress\">\r\n\t\t\t<span\r\n\t\t\t\tclass=\"wacom-loader__progress-bar\"\r\n\t\t\t\t[ngStyle]=\"{\r\n\t\t\t\t\t'animation-duration': (timeout + 350) / 1000 + 's',\r\n\t\t\t\t}\"\r\n\t\t\t></span>\r\n\t\t</div>\r\n\t}\r\n\t@if (closable) {\r\n\t\t<span class=\"wacom-loader__close\" (click)=\"close()\">&times;</span>\r\n\t}\r\n\t@if (text) {\r\n\t\t<span class=\"wacom-loader__text\">\r\n\t\t\t{{ text }}\r\n\t\t</span>\r\n\t}\r\n</div>\r\n", styles: [".wacom-loader{position:fixed;width:100%;height:100%;left:0;top:0;background-color:var(--wacom-secondary);display:flex;justify-content:center;align-items:center;z-index:999999}.wacom-loader__close{color:#aaa;position:absolute;right:20px;top:20px;font-size:32px;line-height:1}.wacom-loader__close:hover,.wacom-loader__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}.wacom-loader__text{font-size:30px;color:var(--wacom-primary)}.wacom-loader__progress{position:absolute;bottom:0;left:0;width:100%}.wacom-loader__progress-bar{display:block;width:100%;height:2px;background-color:#a5a5a5ed;animation-name:wacom-loader-progress;animation-duration:10s;transition:width .2s ease}@keyframes wacom-loader-progress{0%{width:100%}to{width:0%}}\n"] }]
1518
1391
  }] });
@@ -1542,10 +1415,10 @@ class ModalComponent {
1542
1415
  popStateListener(e) {
1543
1416
  this.close();
1544
1417
  }
1545
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1546
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.4", type: ModalComponent, isStandalone: true, selector: "lib-modal", ngImport: i0, template: "<div class=\"wacom-modal\" (click)=\"onClickOutside()\">\r\n\t<div class=\"wacom-modal__content\" (click)=\"$event.stopPropagation()\">\r\n\t\t<div><!-- Content Will Drop Here --></div>\r\n\t\t<span class=\"wacom-modal__close\" (click)=\"close()\" *ngIf=\"closable\"\r\n\t\t\t>&times;</span\r\n\t\t>\r\n\t</div>\r\n</div>\r\n", styles: [".wacom-modal{position:fixed;z-index:9999;left:0;top:0;width:100%;height:100%;overflow-y:auto;background-color:#000;background-color:#00000080}.wacom-modal__content{position:relative;background-color:var(--wacom-primary);margin:15% auto;padding:20px;border:1px solid #888;min-width:20%;max-width:80%}.wacom-modal__close{color:#aaa;position:absolute;right:10px;top:3px;font-size:32px;line-height:1}.wacom-modal__close:hover,.wacom-modal__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1418
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.0", type: ModalComponent, isStandalone: true, selector: "lib-modal", ngImport: i0, template: "<div class=\"wacom-modal\" (click)=\"onClickOutside()\">\r\n\t<div class=\"wacom-modal__content\" (click)=\"$event.stopPropagation()\">\r\n\t\t<div><!-- Content Will Drop Here --></div>\r\n\t\t<span class=\"wacom-modal__close\" (click)=\"close()\" *ngIf=\"closable\"\r\n\t\t\t>&times;</span\r\n\t\t>\r\n\t</div>\r\n</div>\r\n", styles: [".wacom-modal{position:fixed;z-index:9999;left:0;top:0;width:100%;height:100%;overflow-y:auto;background-color:#000;background-color:#00000080}.wacom-modal__content{position:relative;background-color:var(--wacom-primary);margin:15% auto;padding:20px;border:1px solid #888;min-width:20%;max-width:80%}.wacom-modal__close{color:#aaa;position:absolute;right:10px;top:3px;font-size:32px;line-height:1}.wacom-modal__close:hover,.wacom-modal__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
1547
1420
  }
1548
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ModalComponent, decorators: [{
1421
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ModalComponent, decorators: [{
1549
1422
  type: Component,
1550
1423
  args: [{ selector: 'lib-modal', standalone: true, imports: [CommonModule], template: "<div class=\"wacom-modal\" (click)=\"onClickOutside()\">\r\n\t<div class=\"wacom-modal__content\" (click)=\"$event.stopPropagation()\">\r\n\t\t<div><!-- Content Will Drop Here --></div>\r\n\t\t<span class=\"wacom-modal__close\" (click)=\"close()\" *ngIf=\"closable\"\r\n\t\t\t>&times;</span\r\n\t\t>\r\n\t</div>\r\n</div>\r\n", styles: [".wacom-modal{position:fixed;z-index:9999;left:0;top:0;width:100%;height:100%;overflow-y:auto;background-color:#000;background-color:#00000080}.wacom-modal__content{position:relative;background-color:var(--wacom-primary);margin:15% auto;padding:20px;border:1px solid #888;min-width:20%;max-width:80%}.wacom-modal__close{color:#aaa;position:absolute;right:10px;top:3px;font-size:32px;line-height:1}.wacom-modal__close:hover,.wacom-modal__close:focus{color:var(--wacom-secondary);text-decoration:none;cursor:pointer}\n"] }]
1551
1424
  }] });
@@ -1572,10 +1445,10 @@ class ClickOutsideDirective {
1572
1445
  // cleanup
1573
1446
  this._dref.onDestroy(() => document.removeEventListener('pointerdown', this.handler, true));
1574
1447
  }
1575
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1576
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.4", type: ClickOutsideDirective, isStandalone: true, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, ngImport: i0 }); }
1448
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ClickOutsideDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1449
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.0", type: ClickOutsideDirective, isStandalone: true, selector: "[clickOutside]", outputs: { clickOutside: "clickOutside" }, ngImport: i0 }); }
1577
1450
  }
1578
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ClickOutsideDirective, decorators: [{
1451
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ClickOutsideDirective, decorators: [{
1579
1452
  type: Directive,
1580
1453
  args: [{
1581
1454
  selector: '[clickOutside]',
@@ -1614,10 +1487,10 @@ class ArrPipe {
1614
1487
  }
1615
1488
  return arr;
1616
1489
  }
1617
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ArrPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1618
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: ArrPipe, isStandalone: true, name: "arr" }); }
1490
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ArrPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1491
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: ArrPipe, isStandalone: true, name: "arr" }); }
1619
1492
  }
1620
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ArrPipe, decorators: [{
1493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ArrPipe, decorators: [{
1621
1494
  type: Pipe,
1622
1495
  args: [{
1623
1496
  name: 'arr',
@@ -1631,10 +1504,10 @@ class MongodatePipe {
1631
1504
  let timestamp = _id.toString().substring(0, 8);
1632
1505
  return new Date(parseInt(timestamp, 16) * 1000);
1633
1506
  }
1634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MongodatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1635
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: MongodatePipe, isStandalone: true, name: "mongodate" }); }
1507
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MongodatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1508
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: MongodatePipe, isStandalone: true, name: "mongodate" }); }
1636
1509
  }
1637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: MongodatePipe, decorators: [{
1510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: MongodatePipe, decorators: [{
1638
1511
  type: Pipe,
1639
1512
  args: [{
1640
1513
  name: 'mongodate',
@@ -1646,10 +1519,10 @@ class NumberPipe {
1646
1519
  const result = Number(value); // Convert value to a number
1647
1520
  return isNaN(result) ? 0 : result; // Return 0 if conversion fails
1648
1521
  }
1649
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: NumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1650
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: NumberPipe, isStandalone: true, name: "number" }); }
1522
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: NumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1523
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: NumberPipe, isStandalone: true, name: "number" }); }
1651
1524
  }
1652
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: NumberPipe, decorators: [{
1525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: NumberPipe, decorators: [{
1653
1526
  type: Pipe,
1654
1527
  args: [{
1655
1528
  name: 'number',
@@ -1677,10 +1550,10 @@ class PaginationPipe {
1677
1550
  }
1678
1551
  return arr.slice((config.page - 1) * config.perPage, config.page * config.perPage);
1679
1552
  }
1680
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: PaginationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1681
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: PaginationPipe, isStandalone: true, name: "page", pure: false }); }
1553
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: PaginationPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1554
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: PaginationPipe, isStandalone: true, name: "page", pure: false }); }
1682
1555
  }
1683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: PaginationPipe, decorators: [{
1556
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: PaginationPipe, decorators: [{
1684
1557
  type: Pipe,
1685
1558
  args: [{
1686
1559
  name: 'page',
@@ -1695,10 +1568,10 @@ class SafePipe {
1695
1568
  transform(html) {
1696
1569
  return this._sanitizer.bypassSecurityTrustResourceUrl(html);
1697
1570
  }
1698
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SafePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1699
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: SafePipe, isStandalone: true, name: "safe" }); }
1571
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SafePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1572
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: SafePipe, isStandalone: true, name: "safe" }); }
1700
1573
  }
1701
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SafePipe, decorators: [{
1574
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SafePipe, decorators: [{
1702
1575
  type: Pipe,
1703
1576
  args: [{
1704
1577
  name: 'safe',
@@ -1765,10 +1638,10 @@ class SearchPipe {
1765
1638
  : Object.entries(items).forEach(([k, v]) => check(v, k));
1766
1639
  return limit ? out.slice(0, limit) : out;
1767
1640
  }
1768
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SearchPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1769
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: SearchPipe, isStandalone: true, name: "search" }); }
1641
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SearchPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1642
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: SearchPipe, isStandalone: true, name: "search" }); }
1770
1643
  }
1771
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SearchPipe, decorators: [{
1644
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SearchPipe, decorators: [{
1772
1645
  type: Pipe,
1773
1646
  args: [{ name: 'search', pure: true }]
1774
1647
  }] });
@@ -1828,10 +1701,10 @@ class SplicePipe {
1828
1701
  }
1829
1702
  return arr;
1830
1703
  }
1831
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SplicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1832
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: SplicePipe, isStandalone: true, name: "splice" }); }
1704
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SplicePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1705
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: SplicePipe, isStandalone: true, name: "splice" }); }
1833
1706
  }
1834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SplicePipe, decorators: [{
1707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SplicePipe, decorators: [{
1835
1708
  type: Pipe,
1836
1709
  args: [{
1837
1710
  name: 'splice',
@@ -1843,10 +1716,10 @@ class SplitPipe {
1843
1716
  const arr = value.split(devider);
1844
1717
  return arr.length > index ? arr[index] : '';
1845
1718
  }
1846
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SplitPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1847
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: SplitPipe, isStandalone: true, name: "split" }); }
1719
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SplitPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1720
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: SplitPipe, isStandalone: true, name: "split" }); }
1848
1721
  }
1849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SplitPipe, decorators: [{
1722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SplitPipe, decorators: [{
1850
1723
  type: Pipe,
1851
1724
  args: [{
1852
1725
  name: 'split',
@@ -1860,16 +1733,140 @@ class BaseService {
1860
1733
  refreshNow() {
1861
1734
  this.now = new Date().getTime();
1862
1735
  }
1863
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: BaseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1864
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: BaseService, providedIn: 'root' }); }
1736
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: BaseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1737
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: BaseService, providedIn: 'root' }); }
1865
1738
  }
1866
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: BaseService, decorators: [{
1739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: BaseService, decorators: [{
1867
1740
  type: Injectable,
1868
1741
  args: [{
1869
1742
  providedIn: 'root',
1870
1743
  }]
1871
1744
  }] });
1872
1745
 
1746
+ class EmitterService {
1747
+ constructor() {
1748
+ this._signals = new Map();
1749
+ this._closers = new Map();
1750
+ this._streams = new Map();
1751
+ this._done = new Map();
1752
+ }
1753
+ _getSignal(id) {
1754
+ let s = this._signals.get(id);
1755
+ if (!s) {
1756
+ // emit even if same payload repeats
1757
+ s = signal(undefined, { equal: () => false });
1758
+ this._signals.set(id, s);
1759
+ }
1760
+ return s;
1761
+ }
1762
+ _getCloser(id) {
1763
+ let c = this._closers.get(id);
1764
+ if (!c) {
1765
+ c = new Subject();
1766
+ this._closers.set(id, c);
1767
+ }
1768
+ return c;
1769
+ }
1770
+ _getStream(id) {
1771
+ let obs$ = this._streams.get(id);
1772
+ if (!obs$) {
1773
+ const sig = this._getSignal(id);
1774
+ const closed$ = this._getCloser(id);
1775
+ obs$ = toObservable(sig).pipe(
1776
+ // Subject-like: don't replay the current value on subscribe
1777
+ skip(1), takeUntil(closed$), share());
1778
+ this._streams.set(id, obs$);
1779
+ }
1780
+ return obs$;
1781
+ }
1782
+ /** Emit an event */
1783
+ emit(id, data) {
1784
+ this._getSignal(id).set(data);
1785
+ }
1786
+ /** Listen for events (hot, completes when off(id) is called) */
1787
+ on(id) {
1788
+ return this._getStream(id);
1789
+ }
1790
+ /** Complete and remove a channel */
1791
+ off(id) {
1792
+ const closer = this._closers.get(id);
1793
+ if (closer) {
1794
+ closer.next();
1795
+ closer.complete();
1796
+ this._closers.delete(id);
1797
+ }
1798
+ this._signals.delete(id);
1799
+ this._streams.delete(id);
1800
+ }
1801
+ offAll() {
1802
+ for (const id of Array.from(this._closers.keys()))
1803
+ this.off(id);
1804
+ }
1805
+ has(id) {
1806
+ return this._signals.has(id);
1807
+ }
1808
+ _getDoneSignal(id) {
1809
+ let s = this._done.get(id);
1810
+ if (!s) {
1811
+ s = signal(undefined);
1812
+ this._done.set(id, s);
1813
+ }
1814
+ return s;
1815
+ }
1816
+ /** Mark task as completed with a payload (default: true) */
1817
+ complete(task, value = true) {
1818
+ this._getDoneSignal(task).set(value);
1819
+ }
1820
+ /** Clear completion so it can be awaited again */
1821
+ clearCompleted(task) {
1822
+ const s = this._done.get(task) ?? this._getDoneSignal(task);
1823
+ s.set(undefined);
1824
+ }
1825
+ /** Read current completion payload (undefined => not completed) */
1826
+ completed(task) {
1827
+ return this._getDoneSignal(task)();
1828
+ }
1829
+ isCompleted(task) {
1830
+ return this._getDoneSignal(task)() !== undefined;
1831
+ }
1832
+ onComplete(tasks, opts) {
1833
+ const list = (Array.isArray(tasks) ? tasks : [tasks]).filter(Boolean);
1834
+ const streams = list.map((id) => toObservable(this._getDoneSignal(id)).pipe(filter((v) => v !== undefined), map((v) => v)));
1835
+ let source$;
1836
+ if (list.length <= 1) {
1837
+ // single-task await
1838
+ source$ = streams[0]?.pipe(take(1)) ?? new Observable();
1839
+ }
1840
+ else if (opts?.mode === 'any') {
1841
+ source$ = merge(...streams).pipe(take(1));
1842
+ }
1843
+ else {
1844
+ source$ = combineLatest(streams).pipe(take(1));
1845
+ }
1846
+ if (opts?.timeoutMs && Number.isFinite(opts.timeoutMs)) {
1847
+ source$ = source$.pipe(timeout({ first: opts.timeoutMs }));
1848
+ }
1849
+ if (opts?.abort) {
1850
+ const abort$ = new Observable((sub) => {
1851
+ const handler = () => {
1852
+ sub.next();
1853
+ sub.complete();
1854
+ };
1855
+ opts.abort.addEventListener('abort', handler);
1856
+ return () => opts.abort.removeEventListener('abort', handler);
1857
+ });
1858
+ source$ = source$.pipe(takeUntil(abort$));
1859
+ }
1860
+ return source$;
1861
+ }
1862
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: EmitterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1863
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: EmitterService, providedIn: 'root' }); }
1864
+ }
1865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: EmitterService, decorators: [{
1866
+ type: Injectable,
1867
+ args: [{ providedIn: 'root' }]
1868
+ }] });
1869
+
1873
1870
  const DEFAULT_HTTP_CONFIG = {
1874
1871
  headers: {},
1875
1872
  url: '',
@@ -2196,10 +2193,10 @@ class HttpService {
2196
2193
  }
2197
2194
  return newDoc;
2198
2195
  }
2199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: HttpService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
2200
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: HttpService, providedIn: 'root' }); }
2196
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: HttpService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
2197
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: HttpService, providedIn: 'root' }); }
2201
2198
  }
2202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: HttpService, decorators: [{
2199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: HttpService, decorators: [{
2203
2200
  type: Injectable,
2204
2201
  args: [{
2205
2202
  providedIn: 'root',
@@ -2360,10 +2357,10 @@ class NetworkService {
2360
2357
  return { ok: false, latency: null };
2361
2358
  }
2362
2359
  }
2363
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: NetworkService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2364
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: NetworkService, providedIn: 'root' }); }
2360
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: NetworkService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2361
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: NetworkService, providedIn: 'root' }); }
2365
2362
  }
2366
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: NetworkService, decorators: [{
2363
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: NetworkService, decorators: [{
2367
2364
  type: Injectable,
2368
2365
  args: [{ providedIn: 'root' }]
2369
2366
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -2535,10 +2532,10 @@ class StoreService {
2535
2532
  }
2536
2533
  return key;
2537
2534
  }
2538
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: StoreService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2539
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: StoreService, providedIn: 'root' }); }
2535
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: StoreService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
2536
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: StoreService, providedIn: 'root' }); }
2540
2537
  }
2541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: StoreService, decorators: [{
2538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: StoreService, decorators: [{
2542
2539
  type: Injectable,
2543
2540
  args: [{
2544
2541
  providedIn: 'root',
@@ -2594,12 +2591,18 @@ class CrudService extends BaseService {
2594
2591
  this.__coreService = inject(CoreService);
2595
2592
  this.__emitterService = inject(EmitterService);
2596
2593
  this.__networkService = inject(NetworkService);
2594
+ /**
2595
+ * Cache of per-document signals indexed by document _id.
2596
+ * Prevents creating multiple signals for the same document.
2597
+ */
2598
+ this._signals = {};
2597
2599
  this._fetchingId = {};
2598
2600
  this._onOnline = [];
2599
2601
  this._randomCount = 0;
2600
2602
  this._config.signalFields = this._config.signalFields || {};
2601
2603
  this._url += this._config.name;
2602
2604
  this.loaded = this.__emitterService.onComplete(this._config.name + '_loaded');
2605
+ this.getted = this.__emitterService.onComplete(this._config.name + '_getted');
2603
2606
  if (this._config.unauthorized) {
2604
2607
  this.restoreDocs();
2605
2608
  }
@@ -2621,6 +2624,29 @@ class CrudService extends BaseService {
2621
2624
  this._onOnline.length = 0;
2622
2625
  });
2623
2626
  }
2627
+ /**
2628
+ * Returns a WritableSignal for a document by _id, creating it if absent.
2629
+ * Caches the signal to avoid redundant instances and initializes it
2630
+ * with the current snapshot of the document.
2631
+ * Work very carefully with this and localId, better avoid such flows
2632
+ * @param _id - Document identifier.
2633
+ */
2634
+ getSignal(_id) {
2635
+ this._signals[_id] ||= this.__coreService.toSignal(this.doc(_id) || { _id }, this._config.signalFields);
2636
+ return this._signals[_id];
2637
+ }
2638
+ /**
2639
+ * Clears cached document signals except those explicitly preserved.
2640
+ * Useful when changing routes or contexts to reduce memory.
2641
+ * @param exceptIds - List of ids whose signals should be kept.
2642
+ */
2643
+ removeSignals(exceptIds = []) {
2644
+ for (const _id in this._signals) {
2645
+ if (!exceptIds.includes(_id)) {
2646
+ delete this._signals[_id];
2647
+ }
2648
+ }
2649
+ }
2624
2650
  async restoreDocs() {
2625
2651
  const docs = await this.__storeService.getJson('docs_' + this._config.name);
2626
2652
  if (docs?.length) {
@@ -2645,6 +2671,7 @@ class CrudService extends BaseService {
2645
2671
  }
2646
2672
  }
2647
2673
  }
2674
+ this.__emitterService.complete(this._config.name + '_loaded', this._docs);
2648
2675
  }
2649
2676
  }
2650
2677
  /**
@@ -2726,7 +2753,8 @@ class CrudService extends BaseService {
2726
2753
  * @returns The found document or a new document if not found.
2727
2754
  */
2728
2755
  doc(_id) {
2729
- const doc = this._docs.find((d) => this._id(d) === _id) ||
2756
+ const doc = this._docs.find((d) => this._id(d) === _id ||
2757
+ (d._localId && d._localId === Number(_id))) ||
2730
2758
  this.new({
2731
2759
  _id,
2732
2760
  });
@@ -2790,7 +2818,7 @@ class CrudService extends BaseService {
2790
2818
  }
2791
2819
  if (typeof config.page !== 'number') {
2792
2820
  this._filterDocuments();
2793
- this.__emitterService.complete(this._config.name + '_loaded', this._docs);
2821
+ this.__emitterService.complete(this._config.name + '_getted', this._docs);
2794
2822
  }
2795
2823
  this.__emitterService.emit(`${this._config.name}_get`, this._docs);
2796
2824
  },
@@ -3207,10 +3235,10 @@ class CrudService extends BaseService {
3207
3235
  }
3208
3236
 
3209
3237
  class FilesComponent {
3210
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: FilesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3211
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.4", type: FilesComponent, isStandalone: true, selector: "lib-files", ngImport: i0, template: "@for (file of fs.files; track $index) {\r\n\t<input\r\n\t\t[id]=\"file.id\"\r\n\t\ttype=\"file\"\r\n\t\tname=\"file\"\r\n\t\t(change)=\"fs.change($event, file); input.value = ''\"\r\n\t\t#input\r\n\t\t[hidden]=\"true\"\r\n\t\t[accept]=\"file.accept || (file.part && 'image/*') || ''\"\r\n\t\t[multiple]=\"(file.multiple && true) || ''\"\r\n\t/>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
3238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FilesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.0", type: FilesComponent, isStandalone: true, selector: "lib-files", ngImport: i0, template: "@for (file of fs.files; track $index) {\r\n\t<input\r\n\t\t[id]=\"file.id\"\r\n\t\ttype=\"file\"\r\n\t\tname=\"file\"\r\n\t\t(change)=\"fs.change($event, file); input.value = ''\"\r\n\t\t#input\r\n\t\t[hidden]=\"true\"\r\n\t\t[accept]=\"file.accept || (file.part && 'image/*') || ''\"\r\n\t\t[multiple]=\"(file.multiple && true) || ''\"\r\n\t/>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
3212
3240
  }
3213
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: FilesComponent, decorators: [{
3241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FilesComponent, decorators: [{
3214
3242
  type: Component,
3215
3243
  args: [{ selector: 'lib-files', imports: [CommonModule], template: "@for (file of fs.files; track $index) {\r\n\t<input\r\n\t\t[id]=\"file.id\"\r\n\t\ttype=\"file\"\r\n\t\tname=\"file\"\r\n\t\t(change)=\"fs.change($event, file); input.value = ''\"\r\n\t\t#input\r\n\t\t[hidden]=\"true\"\r\n\t\t[accept]=\"file.accept || (file.part && 'image/*') || ''\"\r\n\t\t[multiple]=\"(file.multiple && true) || ''\"\r\n\t/>\r\n}\r\n" }]
3216
3244
  }] });
@@ -3454,10 +3482,10 @@ class FileService {
3454
3482
  destroy() {
3455
3483
  this._component.remove();
3456
3484
  }
3457
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: FileService, deps: [{ token: DomService }, { token: HttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3458
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: FileService, providedIn: 'root' }); }
3485
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FileService, deps: [{ token: DomService }, { token: HttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3486
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FileService, providedIn: 'root' }); }
3459
3487
  }
3460
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: FileService, decorators: [{
3488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: FileService, decorators: [{
3461
3489
  type: Injectable,
3462
3490
  args: [{
3463
3491
  providedIn: 'root',
@@ -3523,10 +3551,10 @@ class LoaderService {
3523
3551
  this._loaders[i].close?.();
3524
3552
  }
3525
3553
  }
3526
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: LoaderService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3527
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
3554
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: LoaderService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3555
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: LoaderService, providedIn: 'root' }); }
3528
3556
  }
3529
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: LoaderService, decorators: [{
3557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: LoaderService, decorators: [{
3530
3558
  type: Injectable,
3531
3559
  args: [{
3532
3560
  providedIn: 'root',
@@ -3615,10 +3643,10 @@ class ModalService {
3615
3643
  component: opts.component,
3616
3644
  };
3617
3645
  }
3618
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ModalService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3619
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ModalService, providedIn: 'root' }); }
3646
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ModalService, deps: [{ token: CONFIG_TOKEN, optional: true }, { token: DomService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3647
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ModalService, providedIn: 'root' }); }
3620
3648
  }
3621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: ModalService, decorators: [{
3649
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: ModalService, decorators: [{
3622
3650
  type: Injectable,
3623
3651
  args: [{
3624
3652
  providedIn: 'root',
@@ -3741,10 +3769,10 @@ class RtcService {
3741
3769
  this.localStream?.getTracks().forEach((track) => track.stop());
3742
3770
  this.localStream = null;
3743
3771
  }
3744
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: RtcService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3745
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: RtcService, providedIn: 'root' }); }
3772
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: RtcService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3773
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: RtcService, providedIn: 'root' }); }
3746
3774
  }
3747
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: RtcService, decorators: [{
3775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: RtcService, decorators: [{
3748
3776
  type: Injectable,
3749
3777
  args: [{ providedIn: 'root' }]
3750
3778
  }] });
@@ -3865,10 +3893,10 @@ class SocketService {
3865
3893
  }
3866
3894
  this._io.emit(to, message, room);
3867
3895
  }
3868
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SocketService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
3869
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SocketService, providedIn: 'root' }); }
3896
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SocketService, deps: [{ token: CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
3897
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SocketService, providedIn: 'root' }); }
3870
3898
  }
3871
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: SocketService, decorators: [{
3899
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: SocketService, decorators: [{
3872
3900
  type: Injectable,
3873
3901
  args: [{
3874
3902
  providedIn: 'root',
@@ -4310,10 +4338,10 @@ class TimeService {
4310
4338
  }
4311
4339
  return lastWeek - firstWeek + 1;
4312
4340
  }
4313
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TimeService, deps: [{ token: i1$1.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
4314
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TimeService, providedIn: 'root' }); }
4341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: TimeService, deps: [{ token: i1$1.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
4342
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: TimeService, providedIn: 'root' }); }
4315
4343
  }
4316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: TimeService, decorators: [{
4344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: TimeService, decorators: [{
4317
4345
  type: Injectable,
4318
4346
  args: [{
4319
4347
  providedIn: 'root',
@@ -4555,10 +4583,10 @@ class UtilService {
4555
4583
  }
4556
4584
  catch { }
4557
4585
  }
4558
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: UtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4559
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: UtilService, providedIn: 'root' }); }
4586
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: UtilService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
4587
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: UtilService, providedIn: 'root' }); }
4560
4588
  }
4561
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: UtilService, decorators: [{
4589
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: UtilService, decorators: [{
4562
4590
  type: Injectable,
4563
4591
  args: [{ providedIn: 'root' }]
4564
4592
  }], ctorParameters: () => [] });
@@ -4613,8 +4641,8 @@ class WacomModule {
4613
4641
  ],
4614
4642
  };
4615
4643
  }
4616
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: WacomModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4617
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.4", ngImport: i0, type: WacomModule, imports: [CommonModule,
4644
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: WacomModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
4645
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.0", ngImport: i0, type: WacomModule, imports: [CommonModule,
4618
4646
  FormsModule, WrapperComponent, FilesComponent, ArrPipe,
4619
4647
  SafePipe,
4620
4648
  SplicePipe,
@@ -4626,13 +4654,13 @@ class WacomModule {
4626
4654
  SearchPipe,
4627
4655
  MongodatePipe,
4628
4656
  PaginationPipe, LoaderComponent, ModalComponent, AlertComponent, ClickOutsideDirective] }); }
4629
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: WacomModule, providers: [
4657
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: WacomModule, providers: [
4630
4658
  { provide: CONFIG_TOKEN, useValue: DEFAULT_CONFIG },
4631
4659
  provideHttpClient(withInterceptorsFromDi()),
4632
4660
  ], imports: [CommonModule,
4633
4661
  FormsModule, FilesComponent, COMPONENTS] }); }
4634
4662
  }
4635
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.4", ngImport: i0, type: WacomModule, decorators: [{
4663
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.0", ngImport: i0, type: WacomModule, decorators: [{
4636
4664
  type: NgModule,
4637
4665
  args: [{
4638
4666
  imports: [