@bizdoc/core 3.6.8 → 3.7.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.
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Inject, Injectable, Pipe, Directive, Component, Injector, ElementRef, HostListener, TemplateRef, ViewContainerRef, ViewChild, Input, HostBinding, Output, Optional, Self, EventEmitter, NgModule, ViewChildren, inject, Host, SkipSelf, ContentChild, ContentChildren, provideAppInitializer } from '@angular/core';
3
- import { Subject, firstValueFrom, of, forkJoin, BehaviorSubject, merge, takeUntil as takeUntil$1, shareReplay as shareReplay$1, map as map$1, Observable, filter as filter$1, from, interval, switchMap as switchMap$1, isObservable, catchError as catchError$1, startWith as startWith$1, EMPTY, debounceTime as debounceTime$1 } from 'rxjs';
4
- import { map, tap, catchError, shareReplay, filter, startWith, takeUntil, debounceTime, switchMap, first, take, finalize, delay } from 'rxjs/operators';
2
+ import { InjectionToken, Inject, Injectable, Pipe, Directive, Component, Injector, ElementRef, HostListener, TemplateRef, ViewContainerRef, ViewChild, Input, Optional, HostBinding, Output, Self, EventEmitter, NgModule, ViewChildren, inject, Host, SkipSelf, ContentChild, ContentChildren, provideAppInitializer } from '@angular/core';
3
+ import { Subject, firstValueFrom, of, forkJoin, filter, map as map$1, BehaviorSubject, merge, takeUntil as takeUntil$1, shareReplay as shareReplay$1, Observable, from, interval, switchMap as switchMap$1, isObservable, catchError as catchError$1, startWith as startWith$1, EMPTY, debounceTime as debounceTime$1 } from 'rxjs';
4
+ import { map, tap, catchError, shareReplay, filter as filter$1, startWith, takeUntil, debounceTime, switchMap, first, take, finalize, delay } from 'rxjs/operators';
5
5
  import * as i4 from '@angular/material/chips';
6
6
  import { MatChipInput, MatChipsModule, MatChipListbox } from '@angular/material/chips';
7
7
  import { ENTER, COMMA, SEMICOLON } from '@angular/cdk/keycodes';
@@ -3326,6 +3326,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
3326
3326
  args: [{ providedIn: "root" }]
3327
3327
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: HubService }] });
3328
3328
 
3329
+ const QUERY_CHAR = ':', PATH_CHAR = ';', ARG_CHAR = '&', PANE_CHAR = '~';
3330
+ const PANES_DATA = new InjectionToken('panes');
3331
+ class NavigationBase {
3332
+ preventDefault() {
3333
+ this._preventDefault = true;
3334
+ }
3335
+ }
3336
+ class CollapseNavigation extends NavigationBase {
3337
+ }
3338
+ class BackNavigation extends NavigationBase {
3339
+ }
3340
+ class NavigationPaneBase extends NavigationBase {
3341
+ constructor(_pane) {
3342
+ super();
3343
+ this._pane = _pane;
3344
+ }
3345
+ get pane() {
3346
+ return this._pane;
3347
+ }
3348
+ }
3349
+ class NavigationStart extends NavigationPaneBase {
3350
+ }
3351
+ /** pane fucus change */
3352
+ class NavigationFocus extends NavigationPaneBase {
3353
+ }
3354
+ class NavigationEnd extends NavigationPaneBase {
3355
+ }
3356
+ class NavigationMode extends NavigationPaneBase {
3357
+ constructor(mode, pane) {
3358
+ super(pane);
3359
+ this.mode = mode;
3360
+ }
3361
+ }
3362
+ class NavigationExpand extends NavigationPaneBase {
3363
+ constructor(expended, pane) {
3364
+ super(pane);
3365
+ this.expended = expended;
3366
+ }
3367
+ }
3368
+ class NavigationResize extends NavigationPaneBase {
3369
+ constructor(dimentions, pane) {
3370
+ super(pane);
3371
+ this.dimentions = dimentions;
3372
+ }
3373
+ }
3374
+ class NavigationClose extends NavigationPaneBase {
3375
+ }
3376
+ class ParamNavigation extends NavigationPaneBase {
3377
+ constructor(params, pane) {
3378
+ super(pane);
3379
+ this.params = params;
3380
+ }
3381
+ }
3382
+ class QueryParamNavigation extends NavigationPaneBase {
3383
+ constructor(queryParams, pane) {
3384
+ super(pane);
3385
+ this.queryParams = queryParams;
3386
+ }
3387
+ }
3388
+ /** */
3389
+ class PaneRef {
3390
+ get expandable() { return this._expandable; }
3391
+ get injector() { return this._injector; }
3392
+ get expanded() { return this._expanded; }
3393
+ get fullPath() { return (this._path || '') + (this._queryString ? (QUERY_CHAR + this._queryString) : ''); }
3394
+ get instance() { return this._instance; }
3395
+ get data() { return this._data$.value; }
3396
+ get params() { return this._params$.value; }
3397
+ get queryString() { return this._queryString; }
3398
+ get queryParams() { return this._queryParams$.value; }
3399
+ paramsChange() { return this._params$.asObservable(); }
3400
+ queryParamsChange() { return this._queryParams$.asObservable(); }
3401
+ dataChange() { return this._data$.asObservable(); }
3402
+ resized() { return this._events$.pipe(filter(e => e instanceof NavigationResize)); }
3403
+ closeing() { return this._events$.pipe(filter(e => e instanceof NavigationClose)); }
3404
+ closed() { return this._events$.pipe(filter(e => e instanceof NavigationClose), map$1(() => this._value)); }
3405
+ expandedChange() { return this._events$.pipe(filter(e => e instanceof NavigationExpand), map$1(() => this.expanded)); }
3406
+ get path() { return this._path; }
3407
+ ;
3408
+ get mode() { return this._mode; }
3409
+ ;
3410
+ get parent() { return this._options.parent; }
3411
+ ;
3412
+ get stretchable() { return this._stretchable === true; }
3413
+ ;
3414
+ set stretchable(val) { this._stretchable = val; }
3415
+ get dialog() { return this._options.dialog; }
3416
+ ;
3417
+ get dismissable() { return this._options.dismissable; }
3418
+ ;
3419
+ get route() { return this._options.route; }
3420
+ ;
3421
+ constructor(component, injector, id, _options) {
3422
+ this.id = id;
3423
+ this._options = _options;
3424
+ this._command$ = new Subject();
3425
+ /** */
3426
+ this._data$ = new BehaviorSubject({});
3427
+ this._params$ = new BehaviorSubject({});
3428
+ this._queryParams$ = new BehaviorSubject({});
3429
+ this._events$ = new Subject();
3430
+ const { stretchable, mode, data, params, queryParams, path, queryString, title, group, icon, help, guide, animation, expanded, expandable } = _options;
3431
+ this._path = path;
3432
+ this._mode = mode;
3433
+ this._stretchable = stretchable;
3434
+ this._expanded = expanded;
3435
+ this._queryString = queryString;
3436
+ this._expandable = expandable !== false;
3437
+ this._injector = Injector.create({
3438
+ providers: [
3439
+ { provide: PaneRef, useValue: this }
3440
+ ], parent: injector
3441
+ });
3442
+ this._portal = new ComponentPortal(component, null, this._injector);
3443
+ this.title = title;
3444
+ this.group = group;
3445
+ this.guide = guide;
3446
+ this.help = help;
3447
+ this.icon = icon;
3448
+ this.animation = animation;
3449
+ data && this._data$.next(data);
3450
+ params && this._params$.next(params);
3451
+ queryParams && this._queryParams$.next(queryParams);
3452
+ }
3453
+ decendentOf(pane) {
3454
+ return this.parent === pane; //||
3455
+ // (this.path && pane.path && this.path.startsWith(pane.path));
3456
+ }
3457
+ recycle() {
3458
+ this._command$.next('recycle');
3459
+ }
3460
+ focus() {
3461
+ this._command$.next('focus');
3462
+ }
3463
+ close(value) {
3464
+ this._value = value;
3465
+ this._command$.next('close');
3466
+ }
3467
+ expand() {
3468
+ this._command$.next('expand');
3469
+ }
3470
+ _destroy() {
3471
+ this._command$.complete();
3472
+ this._data$.complete();
3473
+ this._params$.complete();
3474
+ this._queryParams$.complete();
3475
+ this._events$.complete();
3476
+ }
3477
+ }
3478
+
3329
3479
  class PopupRef {
3330
3480
  constructor(_data) {
3331
3481
  this._data = _data;
@@ -3511,7 +3661,7 @@ class Popup {
3511
3661
  const portal = new ComponentPortal(PopupComponent, null, popupInjector);
3512
3662
  oRef.attach(portal);
3513
3663
  pRef._closed.subscribe(() => oRef.detach());
3514
- oRef.keydownEvents().pipe(filter(k => k.key === 'Escape')).
3664
+ oRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape')).
3515
3665
  subscribe(e => {
3516
3666
  e.stopPropagation();
3517
3667
  pRef._closed.next(null);
@@ -3633,7 +3783,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
3633
3783
  const OPTION_PANEL = new InjectionToken('options');
3634
3784
  /** options component*/
3635
3785
  class OptionsComponent {
3636
- constructor(_ps, _guide, _hub, _dialog, _fb, _accounts, _sb, _session, _popup, config) {
3786
+ constructor(_ps, _guide, _hub, _dialog, _fb, _accounts, _sb, paneRef, _session, _popup, config) {
3637
3787
  this._ps = _ps;
3638
3788
  this._guide = _guide;
3639
3789
  this._hub = _hub;
@@ -3712,6 +3862,11 @@ class OptionsComponent {
3712
3862
  if (!this._session.isImpersonating) {
3713
3863
  this.guidesCount = this.guides.filter(w => w.mode === 'Eager').length || null;
3714
3864
  }
3865
+ if (paneRef) {
3866
+ const section = paneRef.queryParams['section'];
3867
+ if (section)
3868
+ this.sectionIndex = 2;
3869
+ }
3715
3870
  this.languages = this._session.languages;
3716
3871
  this.currentLanguage = this._session.language;
3717
3872
  this.available = this._session.availabilityState;
@@ -3794,12 +3949,12 @@ class OptionsComponent {
3794
3949
  });
3795
3950
  outOfOffice.controls.from.valueChanges.pipe(takeUntil(this._destroy)).
3796
3951
  subscribe(from => this._toggle(outOfOffice, from !== null, 'to'));
3797
- this.gusers$ = this.grantUserIds.valueChanges.pipe(takeUntil(this._destroy), filter(v => isString(v)), debounceTime(100), switchMap(v => this._accounts.findAll(v)), map(r => {
3952
+ this.gusers$ = this.grantUserIds.valueChanges.pipe(takeUntil(this._destroy), filter$1(v => isString(v)), debounceTime(100), switchMap(v => this._accounts.findAll(v)), map(r => {
3798
3953
  const exclude = grantAccess.value.users?.slice() || [];
3799
3954
  exclude.push(this._session.profile.userId);
3800
3955
  return r.filter(u => exclude.indexOf(u.id) < 0);
3801
3956
  }));
3802
- this.susers$ = this.oooId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls.substitueId.setValue(null)), filter(v => isString(v) && v.length > 0), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
3957
+ this.susers$ = this.oooId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls.substitueId.setValue(null)), filter$1(v => isString(v) && v.length > 0), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
3803
3958
  if (this.options.outOfOffice.substitueId)
3804
3959
  this._accounts.get(this.options.outOfOffice.substitueId).subscribe(u => this.oooId.setValue(u, { emitEvent: false }));
3805
3960
  // auto save
@@ -3888,13 +4043,15 @@ class OptionsComponent {
3888
4043
  this._destroy.next();
3889
4044
  this._destroy.complete();
3890
4045
  }
3891
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: OptionsComponent, deps: [{ token: PromptService }, { token: GuideService }, { token: HubService }, { token: i2$2.MatDialog }, { token: i1$2.FormBuilder }, { token: AccountService }, { token: PromptService }, { token: SessionService }, { token: Popup }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
4046
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: OptionsComponent, deps: [{ token: PromptService }, { token: GuideService }, { token: HubService }, { token: i2$2.MatDialog }, { token: i1$2.FormBuilder }, { token: AccountService }, { token: PromptService }, { token: PaneRef, optional: true }, { token: SessionService }, { token: Popup }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
3892
4047
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: OptionsComponent, isStandalone: false, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, host: { listeners: { "document:keydown.escape": "close()" } }, viewQueries: [{ propertyName: "keyboard", first: true, predicate: ["keyboardTmpl"], descendants: true }, { propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <button mat-button role=\"listitem\" (click)=\"showKeyboard($event)\">\r\n {{'Keyboard' | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n }\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (tag of form.value.tags; track tag.name) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(tag)\">\r\n {{tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!---->\r\n<ng-template #keyboardTmpl>\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n {{u.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"oooDates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"oooDates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #oooDates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i2$4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i2$4.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2$4.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2$4.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2$4.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i7$1.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i2$5.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i2$5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i2$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i3$2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i8.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i3$3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
3893
4048
  }
3894
4049
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: OptionsComponent, decorators: [{
3895
4050
  type: Component,
3896
4051
  args: [{ standalone: false, selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <button mat-button role=\"listitem\" (click)=\"showKeyboard($event)\">\r\n {{'Keyboard' | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n }\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (tag of form.value.tags; track tag.name) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(tag)\">\r\n {{tag.name}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!---->\r\n<ng-template #keyboardTmpl>\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-checkbox>\r\n <div formGroupName=\"extra\" class=\"column\"> \r\n @for(n of profile.notifications; track n.name) {\r\n <mat-checkbox [formControlName]=\"n.name\">{{n.title}}</mat-checkbox>\r\n }\r\n </div>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-checkbox formControlName=\"mail\">{{'Mails' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"chat\">{{'Conversations' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-checkbox>\r\n <mat-checkbox formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-checkbox>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n {{u.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"oooDates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"oooDates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #oooDates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:var(--mat-sys-outline)}form{padding:20px 8px 0;min-width:320px}\n"] }]
3897
- }], ctorParameters: () => [{ type: PromptService }, { type: GuideService }, { type: HubService }, { type: i2$2.MatDialog }, { type: i1$2.FormBuilder }, { type: AccountService }, { type: PromptService }, { type: SessionService }, { type: Popup }, { type: undefined, decorators: [{
4052
+ }], ctorParameters: () => [{ type: PromptService }, { type: GuideService }, { type: HubService }, { type: i2$2.MatDialog }, { type: i1$2.FormBuilder }, { type: AccountService }, { type: PromptService }, { type: PaneRef, decorators: [{
4053
+ type: Optional
4054
+ }] }, { type: SessionService }, { type: Popup }, { type: undefined, decorators: [{
3898
4055
  type: Inject,
3899
4056
  args: [BIZDOC_CONFIG]
3900
4057
  }] }], propDecorators: { keyboard: [{
@@ -4089,7 +4246,7 @@ class ColorPicker {
4089
4246
  hasBackdrop: true,
4090
4247
  backdropClass: 'cdk-overlay-transparent-backdrop'
4091
4248
  });
4092
- merge(ref.backdropClick(), ref.keydownEvents().pipe(filter(k => k.key === 'Escape'))).subscribe(() => this.close());
4249
+ merge(ref.backdropClick(), ref.keydownEvents().pipe(filter$1(k => k.key === 'Escape'))).subscribe(() => this.close());
4093
4250
  return ref;
4094
4251
  }
4095
4252
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: ColorPicker, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i2$3.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i7$2.Directionality }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -5924,7 +6081,7 @@ class TypeAutocomplete {
5924
6081
  if (!this._configuration)
5925
6082
  throw `${this._type} is not a known type.`;
5926
6083
  this._column = this._configuration.columns ? this._configuration.columns.find(c => !c.flags || c.flags.indexOf('Key') < 0) : undefined;
5927
- this._items$ = this._control.valueChanges.pipe(takeUntil(this._destroy), debounceTime(250), filter(v => isString(v) && v.length > this._minimumChars), switchMap(v => this._service.all(this._type, v)));
6084
+ this._items$ = this._control.valueChanges.pipe(takeUntil(this._destroy), debounceTime(250), filter$1(v => isString(v) && v.length > this._minimumChars), switchMap(v => this._service.all(this._type, v)));
5928
6085
  this._control.statusChanges.pipe(takeUntil(this._destroy)).subscribe(() => {
5929
6086
  this.errorState = this._control.errors != null;
5930
6087
  });
@@ -6876,7 +7033,7 @@ class DesignerCubeFilterComponent {
6876
7033
  }
6877
7034
  const ctrl = this._fb.control(null);
6878
7035
  this.form.addControl(a.name, ctrl, { emitEvent: false });
6879
- ctrl.valueChanges.pipe(filter(() => ctrl.valid), debounceTime(200), takeUntil(this._destroy)).subscribe(v => {
7036
+ ctrl.valueChanges.pipe(filter$1(() => ctrl.valid), debounceTime(200), takeUntil(this._destroy)).subscribe(v => {
6880
7037
  if (this._decendents[a.name])
6881
7038
  for (let axis of this._decendents[a.name]) {
6882
7039
  let deps = {};
@@ -7822,156 +7979,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
7822
7979
  }]
7823
7980
  }] });
7824
7981
 
7825
- const QUERY_CHAR = ':', PATH_CHAR = ';', ARG_CHAR = '&', PANE_CHAR = '~';
7826
- const PANES_DATA = new InjectionToken('panes');
7827
- class NavigationBase {
7828
- preventDefault() {
7829
- this._preventDefault = true;
7830
- }
7831
- }
7832
- class CollapseNavigation extends NavigationBase {
7833
- }
7834
- class BackNavigation extends NavigationBase {
7835
- }
7836
- class NavigationPaneBase extends NavigationBase {
7837
- constructor(_pane) {
7838
- super();
7839
- this._pane = _pane;
7840
- }
7841
- get pane() {
7842
- return this._pane;
7843
- }
7844
- }
7845
- class NavigationStart extends NavigationPaneBase {
7846
- }
7847
- /** pane fucus change */
7848
- class NavigationFocus extends NavigationPaneBase {
7849
- }
7850
- class NavigationEnd extends NavigationPaneBase {
7851
- }
7852
- class NavigationMode extends NavigationPaneBase {
7853
- constructor(mode, pane) {
7854
- super(pane);
7855
- this.mode = mode;
7856
- }
7857
- }
7858
- class NavigationExpand extends NavigationPaneBase {
7859
- constructor(expended, pane) {
7860
- super(pane);
7861
- this.expended = expended;
7862
- }
7863
- }
7864
- class NavigationResize extends NavigationPaneBase {
7865
- constructor(dimentions, pane) {
7866
- super(pane);
7867
- this.dimentions = dimentions;
7868
- }
7869
- }
7870
- class NavigationClose extends NavigationPaneBase {
7871
- }
7872
- class ParamNavigation extends NavigationPaneBase {
7873
- constructor(params, pane) {
7874
- super(pane);
7875
- this.params = params;
7876
- }
7877
- }
7878
- class QueryParamNavigation extends NavigationPaneBase {
7879
- constructor(queryParams, pane) {
7880
- super(pane);
7881
- this.queryParams = queryParams;
7882
- }
7883
- }
7884
- /** */
7885
- class PaneRef {
7886
- get expandable() { return this._expandable; }
7887
- get injector() { return this._injector; }
7888
- get expanded() { return this._expanded; }
7889
- get fullPath() { return (this._path || '') + (this._queryString ? (QUERY_CHAR + this._queryString) : ''); }
7890
- get instance() { return this._instance; }
7891
- get data() { return this._data$.value; }
7892
- get params() { return this._params$.value; }
7893
- get queryString() { return this._queryString; }
7894
- get queryParams() { return this._queryParams$.value; }
7895
- paramsChange() { return this._params$.asObservable(); }
7896
- queryParamsChange() { return this._queryParams$.asObservable(); }
7897
- dataChange() { return this._data$.asObservable(); }
7898
- resized() { return this._events$.pipe(filter$1(e => e instanceof NavigationResize)); }
7899
- closeing() { return this._events$.pipe(filter$1(e => e instanceof NavigationClose)); }
7900
- closed() { return this._events$.pipe(filter$1(e => e instanceof NavigationClose), map$1(() => this._value)); }
7901
- expandedChange() { return this._events$.pipe(filter$1(e => e instanceof NavigationExpand), map$1(() => this.expanded)); }
7902
- get path() { return this._path; }
7903
- ;
7904
- get mode() { return this._mode; }
7905
- ;
7906
- get parent() { return this._options.parent; }
7907
- ;
7908
- get stretchable() { return this._stretchable === true; }
7909
- ;
7910
- set stretchable(val) { this._stretchable = val; }
7911
- get dialog() { return this._options.dialog; }
7912
- ;
7913
- get dismissable() { return this._options.dismissable; }
7914
- ;
7915
- get route() { return this._options.route; }
7916
- ;
7917
- constructor(component, injector, id, _options) {
7918
- this.id = id;
7919
- this._options = _options;
7920
- this._command$ = new Subject();
7921
- /** */
7922
- this._data$ = new BehaviorSubject({});
7923
- this._params$ = new BehaviorSubject({});
7924
- this._queryParams$ = new BehaviorSubject({});
7925
- this._events$ = new Subject();
7926
- const { stretchable, mode, data, params, queryParams, path, queryString, title, group, icon, help, guide, animation, expanded, expandable } = _options;
7927
- this._path = path;
7928
- this._mode = mode;
7929
- this._stretchable = stretchable;
7930
- this._expanded = expanded;
7931
- this._queryString = queryString;
7932
- this._expandable = expandable !== false;
7933
- this._injector = Injector.create({
7934
- providers: [
7935
- { provide: PaneRef, useValue: this }
7936
- ], parent: injector
7937
- });
7938
- this._portal = new ComponentPortal(component, null, this._injector);
7939
- this.title = title;
7940
- this.group = group;
7941
- this.guide = guide;
7942
- this.help = help;
7943
- this.icon = icon;
7944
- this.animation = animation;
7945
- data && this._data$.next(data);
7946
- params && this._params$.next(params);
7947
- queryParams && this._queryParams$.next(queryParams);
7948
- }
7949
- decendentOf(pane) {
7950
- return this.parent === pane; //||
7951
- // (this.path && pane.path && this.path.startsWith(pane.path));
7952
- }
7953
- recycle() {
7954
- this._command$.next('recycle');
7955
- }
7956
- focus() {
7957
- this._command$.next('focus');
7958
- }
7959
- close(value) {
7960
- this._value = value;
7961
- this._command$.next('close');
7962
- }
7963
- expand() {
7964
- this._command$.next('expand');
7965
- }
7966
- _destroy() {
7967
- this._command$.complete();
7968
- this._data$.complete();
7969
- this._params$.complete();
7970
- this._queryParams$.complete();
7971
- this._events$.complete();
7972
- }
7973
- }
7974
-
7975
7982
  /** filter component*/
7976
7983
  class CubeFilterComponent {
7977
7984
  ngOnInit() {
@@ -7997,7 +8004,7 @@ class CubeFilterComponent {
7997
8004
  }
7998
8005
  }
7999
8006
  const ctrl = controls[a.name] = this._fb.control(this.axes[a.name]);
8000
- ctrl.valueChanges.pipe(filter(() => ctrl.valid), debounceTime(200), takeUntil(this._destroy)).subscribe(v => {
8007
+ ctrl.valueChanges.pipe(filter$1(() => ctrl.valid), debounceTime(200), takeUntil(this._destroy)).subscribe(v => {
8001
8008
  if (v === null || v === undefined || (isArray(v) && !v.length))
8002
8009
  delete this.axes[a.name];
8003
8010
  else
@@ -8132,7 +8139,7 @@ class BrowseFilterComponent {
8132
8139
  this.filters = { axes, cube };
8133
8140
  }
8134
8141
  this.senders$ = this.sendername.valueChanges.
8135
- pipe(takeUntil(this._destroy), debounceTime(250), filter((v) => isString(v)), switchMap((v) => this._mailbox.listSenders(v)));
8142
+ pipe(takeUntil(this._destroy), debounceTime(250), filter$1((v) => isString(v)), switchMap((v) => this._mailbox.listSenders(v)));
8136
8143
  this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(FILTER_DEBOUNCE)).
8137
8144
  subscribe(v => this.valuesChange.emit(cleanup(v)));
8138
8145
  this.form.patchValue(this.values, { emitEvent: false });
@@ -8220,7 +8227,7 @@ class PanesRouter {
8220
8227
  }
8221
8228
  navigate(commands, options) {
8222
8229
  return new Promise((resolve, reject) => {
8223
- this._events$.pipe(filter(e => e instanceof NavigationStart), first()).subscribe({
8230
+ this._events$.pipe(filter$1(e => e instanceof NavigationStart), first()).subscribe({
8224
8231
  next: e => resolve(e.pane),
8225
8232
  error: reject
8226
8233
  });
@@ -8366,7 +8373,7 @@ class ChatInfo {
8366
8373
  */
8367
8374
  format(person) {
8368
8375
  if (this._config !== false)
8369
- return `<a data-info="${person.id}">${person.name}</a>`;
8376
+ return `<a data-userid="${person.id}">${person.name}</a>`;
8370
8377
  return person.name;
8371
8378
  }
8372
8379
  /**
@@ -8466,7 +8473,7 @@ class IdentityName {
8466
8473
  * @param e
8467
8474
  */
8468
8475
  chat(e) {
8469
- const userId = e.target.getAttribute('data-info');
8476
+ const userId = e.target.getAttribute('data-userid');
8470
8477
  userId &&
8471
8478
  this._chat.open(userId, { mode: this.chating });
8472
8479
  }
@@ -8547,13 +8554,13 @@ class AttachmentPreview {
8547
8554
  }
8548
8555
  close() {
8549
8556
  // Listen for animation 'start' events
8550
- this.animationStateChanged.pipe(filter(event => event.phaseName === 'start'), take(1)).subscribe(() => {
8557
+ this.animationStateChanged.pipe(filter$1(event => event.phaseName === 'start'), take(1)).subscribe(() => {
8551
8558
  this._beforeClose.next();
8552
8559
  this._beforeClose.complete();
8553
8560
  this._overlayRef.detachBackdrop();
8554
8561
  });
8555
8562
  // Listen for animation 'done' events
8556
- this.animationStateChanged.pipe(filter(event => event.phaseName === 'done' && event.toState === 'leave'), take(1)).subscribe(() => {
8563
+ this.animationStateChanged.pipe(filter$1(event => event.phaseName === 'done' && event.toState === 'leave'), take(1)).subscribe(() => {
8557
8564
  this._overlayRef.dispose();
8558
8565
  this._afterClosed.next();
8559
8566
  this._afterClosed.complete();
@@ -8984,7 +8991,7 @@ class ExpandedItemComponent {
8984
8991
  });
8985
8992
  this._mailbox.changed.pipe(takeUntil(this._destroy)).subscribe(e => (e.id === this.model.id) &&
8986
8993
  this._refresh());
8987
- this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).subscribe(() => {
8994
+ this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).subscribe(() => {
8988
8995
  this.typing = true;
8989
8996
  clearTimeout(this._typingTask);
8990
8997
  this._typingTask = setTimeout(() => this.typing = false, TYPING_HINT_TIME);
@@ -9153,7 +9160,7 @@ class ExpandedItemComponent {
9153
9160
  * @param e
9154
9161
  */
9155
9162
  chat(e) {
9156
- const userId = e.target.getAttribute('data-info');
9163
+ const userId = e.target.getAttribute('data-userid');
9157
9164
  userId &&
9158
9165
  this._chat.open(userId);
9159
9166
  }
@@ -9248,7 +9255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
9248
9255
  type: Output
9249
9256
  }] } });
9250
9257
 
9251
- const TAKE = 200, SIZE = 20, HEADER_COLUMN_NAMES = ['number', 'subject', 'value', 'owner', 'sender', 'received', 'receivedAgo', 'replied', 'state', 'issued', 'issuedAgo'];
9258
+ const TAKE = 200, SIZE = 20, HEADER_COLUMN_NAMES = ['number', 'subject', 'value', 'owner', 'sender', 'received', 'receivedAgo', 'replied', 'repliedAgo', 'state', 'issued', 'issuedAgo'];
9252
9259
  /** browse items component*/
9253
9260
  class BrowseItemsComponent {
9254
9261
  /** browse ctor */
@@ -9266,10 +9273,10 @@ class BrowseItemsComponent {
9266
9273
  this.onopen = new EventEmitter();
9267
9274
  this.onInsights = new EventEmitter();
9268
9275
  this.CALENDAR_SPEC = {
9269
- lastDay: this._translate.get('Yesterday'),
9270
- lastWeek: 'dddd',
9271
- sameDay: this._translate.get('Today'),
9272
- sameElse: 'MMM D, yy'
9276
+ lastWeek: 'dddd HH:mm',
9277
+ lastDay: this._translate.get('YesterdayAt', 'HH:mm'),
9278
+ sameDay: this._translate.get('TodayAt', 'HH:mm'),
9279
+ sameElse: 'MMM D, YYYY'
9273
9280
  };
9274
9281
  this.sharedActions = [];
9275
9282
  this.dragDisabled = true;
@@ -9674,7 +9681,7 @@ class BrowseItemsComponent {
9674
9681
  this._destroy.complete();
9675
9682
  }
9676
9683
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: BrowseItemsComponent, deps: [{ token: MailboxService }, { token: AccountService }, { token: CubeService }, { token: SessionService }, { token: PromptService }, { token: TranslateService }, { token: i0.ChangeDetectorRef }, { token: RouterImpl }, { token: HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
9677
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: BrowseItemsComponent, isStandalone: false, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onInsights: "insights" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.received | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.received | amDateFormat: 'lll'\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.replied | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.issued | amCalendar : null : CALENDAR_SPEC }} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.issued | amDateFormat: 'lll'\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar : null : CALENDAR_SPEC}}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.filled]=\"item.flag\">star</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"insights(item, $event)\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\" (sent)=\"onActionTaken($event)\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selected-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selected-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$8.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i2$8.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i6$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i7$4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i7$5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: CheckboxComponent, selector: "bizdoc-checkbox", inputs: ["checked", "color", "icon"] }, { kind: "directive", type: StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { kind: "component", type: IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { kind: "component", type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["model"], outputs: ["sent"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [
9684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: BrowseItemsComponent, isStandalone: false, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onInsights: "insights" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.received | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.received | amDateFormat: 'lll'\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.replied | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"repliedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.replied | amDateFormat: 'lll'\"> {{item.replied | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.issued | amCalendar : null : CALENDAR_SPEC }} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.issued | amDateFormat: 'lll'\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar : null : CALENDAR_SPEC}}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.filled]=\"item.flag\">star</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"insights(item, $event)\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\" (sent)=\"onActionTaken($event)\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selected-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selected-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2$8.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i2$8.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i6$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i7$4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i7$5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i2$5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: CheckboxComponent, selector: "bizdoc-checkbox", inputs: ["checked", "color", "icon"] }, { kind: "directive", type: StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { kind: "component", type: IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { kind: "component", type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "component", type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["model"], outputs: ["sent"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.DecimalPipe, name: "number" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], animations: [
9678
9685
  listAnimation,
9679
9686
  itemAnimation,
9680
9687
  expandListItemAnimation,
@@ -9688,7 +9695,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
9688
9695
  itemAnimation,
9689
9696
  expandListItemAnimation,
9690
9697
  listItemUpdatedAnimation
9691
- ], template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.received | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.received | amDateFormat: 'lll'\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.replied | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.issued | amCalendar : null : CALENDAR_SPEC }} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.issued | amDateFormat: 'lll'\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar : null : CALENDAR_SPEC}}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.filled]=\"item.flag\">star</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"insights(item, $event)\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\" (sent)=\"onActionTaken($event)\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selected-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selected-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
9698
+ ], template: "<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n@if (dataSource?.data.length === 0) {\r\n <bizdoc-none title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n}\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag hide-xs\" aria-disabled=\"true\">\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Number column -->\r\n<ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.number}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- Subject column -->\r\n<ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.subject}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.ownerId) {\r\n <bizdoc-identity-name [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n<ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @if (item.senderId) {\r\n <bizdoc-identity-name [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n }\r\n </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.received | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.received | amDateFormat: 'lll'\">{{item.received | amTimeAgo}}</mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.replied | amCalendar : null : CALENDAR_SPEC}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"repliedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.replied | amDateFormat: 'lll'\"> {{item.replied | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.issued | amCalendar : null : CALENDAR_SPEC }} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" [bizdocTooltip]=\"item.issued | amDateFormat: 'lll'\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n</ng-container>\r\n\r\n<ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n</ng-container>\r\n\r\n@if (customColumns) {\r\n @for (c of customColumns; track c) {\r\n <ng-container [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n @switch (c.type) {\r\n @case ('Date') {\r\n <span>\r\n {{item.model[c.name] | amCalendar : null : CALENDAR_SPEC}}\r\n </span>\r\n }\r\n @case ('Decimal') {\r\n <span>\r\n {{item.model[c.name] | number }}\r\n </span>\r\n }\r\n @case ('Boolean') {\r\n <span>\r\n <bizdoc-checkbox [checked]=\"item.model[c.name]\"></bizdoc-checkbox>\r\n </span>\r\n }\r\n @default {\r\n <span>\r\n {{item.model[c.name]}}z\r\n </span>\r\n }\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n}\r\n\r\n<!-- Value column -->\r\n<ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n</ng-container>\r\n\r\n<!-- options column -->\r\n<ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.filled]=\"item.flag\">star</mat-icon></button>\r\n @if (enableViews) {\r\n <button mat-icon-button (click)=\"insights(item, $event)\" [bizdocTooltip]=\"'Insights' | translate\" [attr.aria-label]=\"'Insight' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n }\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool hide-xs\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n</ng-container>\r\n<!-- Expanded Content Column -->\r\n<ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n @if (item == expandedElement) {\r\n <bizdoc-expanded-item [model]=\"item\" (sent)=\"onActionTaken($event)\"></bizdoc-expanded-item>\r\n }\r\n </div>\r\n </mat-cell>\r\n</ng-container>\r\n<mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n<mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selected-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n</mat-row>\r\n<mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selected-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-mdc-row .tool{opacity:.05}.mat-mdc-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
9692
9699
  }], ctorParameters: () => [{ type: MailboxService }, { type: AccountService }, { type: CubeService }, { type: SessionService }, { type: PromptService }, { type: TranslateService }, { type: i0.ChangeDetectorRef }, { type: RouterImpl }, { type: HubService }, { type: undefined, decorators: [{
9693
9700
  type: Inject,
9694
9701
  args: [BIZDOC_CONFIG]
@@ -10578,7 +10585,7 @@ class BrowsePaneComponent {
10578
10585
  this._pane.title = this._translate.get('Tags');
10579
10586
  this.filters = p;
10580
10587
  });
10581
- this._router.events.pipe(takeUntil(this._destroy), filter(e => (e instanceof ParamNavigation || e instanceof NavigationStart || e instanceof NavigationFocus)
10588
+ this._router.events.pipe(takeUntil(this._destroy), filter$1(e => (e instanceof ParamNavigation || e instanceof NavigationStart || e instanceof NavigationFocus)
10582
10589
  && e.pane._portal.component === ComposePaneComponent)).
10583
10590
  subscribe(e => this.items.select(e.pane.data['item'].id));
10584
10591
  this.contains.valueChanges.pipe(takeUntil(this._destroy), debounceTime(200)).subscribe(v => this.filters = { ...this.filters, contains: v });
@@ -12847,7 +12854,7 @@ class AvatarComponent {
12847
12854
  }
12848
12855
  !this.dense && this._changeMode(this.person.mode);
12849
12856
  }
12850
- this._hub.profileChange$.pipe(takeUntil$1(this._destroy), filter$1(u => u.userId === this.person.id)).subscribe(u => this._changeMode(u.mode));
12857
+ this._hub.profileChange$.pipe(takeUntil$1(this._destroy), filter(u => u.userId === this.person.id)).subscribe(u => this._changeMode(u.mode));
12851
12858
  }
12852
12859
  _changeMode(mode) {
12853
12860
  if (!this._showMode)
@@ -13382,7 +13389,7 @@ class TaggingPipe {
13382
13389
  if (EMOJI_REGEX.test(text))
13383
13390
  text = text.replace(EMOJI_REGEX, (emoji) => `<i class="material-icons">${EMOJI_MAP[emoji]}</i>`);
13384
13391
  if (DOCUMENT_REGEX.test(text)) {
13385
- text = text.replace(DOCUMENT_REGEX, (e, number) => `<a data-id="${resource[number].encodeId()}">${e}</a>`);
13392
+ text = text.replace(DOCUMENT_REGEX, (e, number) => `<a data-id="${resource[number].toString()}">${e}</a>`);
13386
13393
  }
13387
13394
  if (USER_REGEX.test(text)) {
13388
13395
  text = text.replace(USER_REGEX, (_, name) => {
@@ -13405,11 +13412,11 @@ class TaggingPipe {
13405
13412
  if (src.tagName === 'A') {
13406
13413
  const id = src.getAttribute('data-id');
13407
13414
  if (id) {
13408
- this._router.navigate(['mailbox/d', id], {});
13415
+ this._router.navigate(['mailbox/d', parseInt(id).encodeId()], {});
13409
13416
  evt.preventDefault();
13410
13417
  }
13411
13418
  else {
13412
- const userId = src.getAttribute('data-info');
13419
+ const userId = src.getAttribute('data-userid');
13413
13420
  userId && this._chat.open(userId);
13414
13421
  }
13415
13422
  }
@@ -13455,7 +13462,7 @@ class CommentLikesComponent {
13455
13462
  this._mailbox = _mailbox;
13456
13463
  this._messaging = _messaging;
13457
13464
  this._destroy = new Subject();
13458
- this._messaging.vote$.pipe(takeUntil(this._destroy), filter(e => e.id === this._data.documentId)).subscribe(e => {
13465
+ this._messaging.vote$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this._data.documentId)).subscribe(e => {
13459
13466
  });
13460
13467
  }
13461
13468
  ngOnInit() {
@@ -13538,7 +13545,7 @@ class CommentComponent {
13538
13545
  * @param e
13539
13546
  */
13540
13547
  chat(e) {
13541
- const userId = e.target.getAttribute('data-info');
13548
+ const userId = e.target.getAttribute('data-userid');
13542
13549
  userId &&
13543
13550
  this._chat.open(userId);
13544
13551
  }
@@ -13596,7 +13603,7 @@ class CommentComponent {
13596
13603
  positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),
13597
13604
  });
13598
13605
  oRef.attach(new TemplatePortal(this.previewTemplate, this._vc));
13599
- merge(oRef.keydownEvents().pipe(filter(k => k.key === 'Escape')), oRef.backdropClick()).subscribe(() => oRef.detach());
13606
+ merge(oRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape')), oRef.backdropClick()).subscribe(() => oRef.detach());
13600
13607
  }
13601
13608
  votes() {
13602
13609
  this._open(CommentLikesComponent, {
@@ -13654,7 +13661,7 @@ class CommentsComponent {
13654
13661
  this._preserveDraft = _config.comments && _config.comments.preserveDraft;
13655
13662
  }
13656
13663
  ngOnInit() {
13657
- this._messaging.comment$.pipe(takeUntil(this._destroy), filter(e => (e.id === this.model.documentId))).subscribe(e => {
13664
+ this._messaging.comment$.pipe(takeUntil(this._destroy), filter$1(e => (e.id === this.model.documentId))).subscribe(e => {
13658
13665
  if (!this.model.comments.find(c => c.id === e.model.id)) {
13659
13666
  this.model.comments.push(e.model);
13660
13667
  if (this._inFocus)
@@ -13662,7 +13669,7 @@ class CommentsComponent {
13662
13669
  this.change.emit();
13663
13670
  }
13664
13671
  });
13665
- this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).
13672
+ this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).
13666
13673
  subscribe(e => {
13667
13674
  this._accounts.get(e.userId).subscribe(u => {
13668
13675
  this.typing = u.name;
@@ -13670,15 +13677,15 @@ class CommentsComponent {
13670
13677
  this._typingTask = setTimeout(() => this.typing = null, TYPING_MESSAGE_TIME);
13671
13678
  });
13672
13679
  });
13673
- this._messaging.vote$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).subscribe(e => {
13680
+ this._messaging.vote$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).subscribe(e => {
13674
13681
  const comment = this.model.comments.find(c => c.id === e.commentId);
13675
13682
  comment && (comment.votes = e.votes);
13676
13683
  });
13677
- this._messaging.commentUpdate$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).subscribe(e => {
13684
+ this._messaging.commentUpdate$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).subscribe(e => {
13678
13685
  const comment = this.model.comments.find(c => c.id === e.model.id);
13679
13686
  Object.assign(comment, e.model);
13680
13687
  });
13681
- this._messaging.commentDelete$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).subscribe(e => {
13688
+ this._messaging.commentDelete$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).subscribe(e => {
13682
13689
  const comment = this.model.comments.find(c => c.id === e.id);
13683
13690
  comment.deleted = e.deleted;
13684
13691
  this.change.emit();
@@ -13696,7 +13703,7 @@ class CommentsComponent {
13696
13703
  * @param e
13697
13704
  */
13698
13705
  chat(e) {
13699
- const userId = e.target.getAttribute('data-info');
13706
+ const userId = e.target.getAttribute('data-userid');
13700
13707
  userId &&
13701
13708
  this._chat.open(userId);
13702
13709
  }
@@ -14179,7 +14186,7 @@ class ReportRef {
14179
14186
  /** listen to progress events reported by backend code */
14180
14187
  progress() {
14181
14188
  return this._hub.reportProgress$.
14182
- pipe(filter(e => e.name === this._configuration.name), map(e => e.progress));
14189
+ pipe(filter$1(e => e.name === this._configuration.name), map(e => e.progress));
14183
14190
  }
14184
14191
  /**
14185
14192
  *
@@ -14264,7 +14271,7 @@ class ReportViewerComponent {
14264
14271
  this._instance = this.table;
14265
14272
  // listen to progress
14266
14273
  this._hub.reportProgress$.
14267
- pipe(filter(e => e.name === this.report.name), takeUntil(this._destroy), debounceTime(50)).
14274
+ pipe(filter$1(e => e.name === this.report.name), takeUntil(this._destroy), debounceTime(50)).
14268
14275
  subscribe(i => {
14269
14276
  if (this.progress > 0)
14270
14277
  this.progress = i.progress;
@@ -15294,7 +15301,7 @@ class UtilityRef {
15294
15301
  }
15295
15302
  get jobId() { return this._jobId; }
15296
15303
  progress() {
15297
- return this._hub.jobProgress$.pipe(filter(e => e.jobId === this.jobId), map(e => e.event));
15304
+ return this._hub.jobProgress$.pipe(filter$1(e => e.jobId === this.jobId), map(e => e.event));
15298
15305
  }
15299
15306
  execute(args) {
15300
15307
  return this._http.post(`/api/utility/${encodeURIComponent(this._utility.name)}`, args, { observe: 'response' }).
@@ -16562,7 +16569,7 @@ class TraceViewComponent extends TraceBase {
16562
16569
  this._data && this._filter();
16563
16570
  }
16564
16571
  chat(e) {
16565
- const userId = e.target.getAttribute('data-info');
16572
+ const userId = e.target.getAttribute('data-userid');
16566
16573
  userId &&
16567
16574
  this._chat.open(userId);
16568
16575
  }
@@ -17154,7 +17161,7 @@ class CubeMatrixBase {
17154
17161
  this._listen().subscribe(() => this.values[name] = value);
17155
17162
  }
17156
17163
  _listen() {
17157
- return this.table.loadingChange.pipe(filter(ok => !ok), first());
17164
+ return this.table.loadingChange.pipe(filter$1(ok => !ok), first());
17158
17165
  }
17159
17166
  onFilter(axes) {
17160
17167
  this.axes = axes;
@@ -17742,14 +17749,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
17742
17749
  args: [CubeMatrixComponent, { static: true }]
17743
17750
  }] } });
17744
17751
 
17745
- const NOTIFICATION_DATA = new InjectionToken('notification');
17752
+ class NotificationRef {
17753
+ constructor(_message) {
17754
+ this._message = _message;
17755
+ }
17756
+ get message() {
17757
+ return this._message;
17758
+ }
17759
+ }
17760
+
17746
17761
  class NotificationBase {
17747
- constructor(notification, _router, _session, _translate, _chat) {
17748
- this.notification = notification;
17749
- this._router = _router;
17750
- this._session = _session;
17751
- this._translate = _translate;
17752
- this._chat = _chat;
17762
+ constructor() {
17763
+ this._router = inject(RouterImpl);
17764
+ this._session = inject(SessionService);
17765
+ this._translate = inject(TranslateService);
17766
+ this._chat = inject(ChatInfo);
17767
+ this.notification = inject(NotificationRef);
17753
17768
  }
17754
17769
  _formatUserElement(person) {
17755
17770
  if (person.id === this._session.userId)
@@ -17757,57 +17772,64 @@ class NotificationBase {
17757
17772
  return this._chat.format(person);
17758
17773
  }
17759
17774
  open(e) {
17760
- const userId = e.target.getAttribute('data-info');
17775
+ const el = e.target;
17776
+ if (el.tagName !== 'A')
17777
+ return;
17778
+ const userId = el.getAttribute('data-userid');
17761
17779
  if (userId)
17762
17780
  this._chat.open(userId);
17763
- else if (this.notification.recipientId)
17764
- this._router.navigate(['mailbox/i', this.notification.recipientId.encodeId()], {
17765
- policy: OpenPolicy.Tab | OpenPolicy.Expandable
17766
- });
17767
- else if (this.notification.documentId)
17768
- this._router.navigate(['mailbox/d', this.notification.documentId.encodeId()], {
17769
- policy: OpenPolicy.Tab | OpenPolicy.Expandable
17770
- });
17781
+ else {
17782
+ const { documentId, recipientId } = this.notification.message;
17783
+ if (recipientId)
17784
+ this._router.navigate(['mailbox/i', recipientId.encodeId()], {
17785
+ policy: OpenPolicy.Clear
17786
+ });
17787
+ else if (documentId)
17788
+ this._router.navigate(['mailbox/d', documentId.encodeId()], {
17789
+ policy: OpenPolicy.Tab | OpenPolicy.Expandable
17790
+ });
17791
+ }
17771
17792
  }
17772
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NotificationBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
17793
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NotificationBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
17773
17794
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.1.0", type: NotificationBase, isStandalone: true, host: { listeners: { "click": "open($event)" } }, ngImport: i0 }); }
17774
17795
  }
17775
17796
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NotificationBase, decorators: [{
17776
17797
  type: Directive
17777
- }], ctorParameters: () => [{ type: undefined }, { type: RouterImpl }, { type: SessionService }, { type: TranslateService }, { type: ChatInfo }], propDecorators: { open: [{
17798
+ }], propDecorators: { open: [{
17778
17799
  type: HostListener,
17779
17800
  args: ['click', ['$event']]
17780
17801
  }] } });
17781
17802
 
17782
17803
  /** */
17783
17804
  class CommentedNotification extends NotificationBase {
17805
+ constructor() {
17806
+ super(...arguments);
17807
+ this._accounts = inject(AccountService);
17808
+ }
17784
17809
  ngOnInit() {
17785
- if (this.notification.userIds.length === 1)
17786
- this._accounts.get(this.notification.userIds[0]).subscribe(u => {
17787
- this.message = this._translate.get(`CommentedOne${u.gender || ''}Notify`, this._formatUserElement(u), this.notification.text, this.notification.number);
17810
+ const { userIds, number, text } = this.notification.message;
17811
+ this.count = userIds.length;
17812
+ if (userIds.length === 1)
17813
+ this._accounts.get(userIds[0]).subscribe(u => {
17814
+ this.message = this._translate.get(`CommentedOne${u.gender || ''}Notify`, this._formatUserElement(u), text, number);
17788
17815
  });
17789
17816
  else
17790
- this._accounts.getAll(this.notification.userIds).subscribe(us => {
17817
+ this._accounts.getAll(userIds).subscribe(us => {
17791
17818
  if (us.length < 3)
17792
- this.message = this._translate.get('CommentedManyNotify', this._translate.join(us.map(u => this._formatUserElement(u))), this.notification.number);
17819
+ this.message = this._translate.get('CommentedManyNotify', this._translate.join(us.map(u => this._formatUserElement(u))), number);
17793
17820
  else {
17794
17821
  const comma = this._translate.comma;
17795
17822
  this.names = us.map(u => u.name).join(comma);
17796
- this.message = this._translate.get('CommentedManyMoreNotify', us.slice(0, 2).map(u => this._formatUserElement(u)).join(comma), us.length - 2, this.notification.number);
17823
+ this.message = this._translate.get('CommentedManyMoreNotify', us.slice(0, 2).map(u => this._formatUserElement(u)).join(comma), us.length - 2, number);
17797
17824
  }
17798
17825
  });
17799
17826
  }
17800
- constructor(notification, _accounts, translate, router, session, chat) {
17801
- super(notification, router, session, translate, chat);
17802
- this.notification = notification;
17803
- this._accounts = _accounts;
17804
- }
17805
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: CommentedNotification, deps: [{ token: NOTIFICATION_DATA }, { token: AccountService }, { token: TranslateService }, { token: RouterImpl }, { token: SessionService }, { token: ChatInfo }], target: i0.ɵɵFactoryTarget.Component }); }
17827
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: CommentedNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17806
17828
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: CommentedNotification, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `@if (message) {
17807
- @if (notification.userIds.length < 3) {
17829
+ @if (count < 3) {
17808
17830
  <span [innerHTML]='message | sanitizeHtml'></span>
17809
17831
  }
17810
- @if (notification.userIds.length >= 3) {
17832
+ @else {
17811
17833
  <span [bizdocTooltip]='names' [innerHTML]='message | sanitizeHtml'></span>
17812
17834
  }
17813
17835
  }`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
@@ -17817,117 +17839,105 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
17817
17839
  args: [{
17818
17840
  standalone: false,
17819
17841
  template: `@if (message) {
17820
- @if (notification.userIds.length < 3) {
17842
+ @if (count < 3) {
17821
17843
  <span [innerHTML]='message | sanitizeHtml'></span>
17822
17844
  }
17823
- @if (notification.userIds.length >= 3) {
17845
+ @else {
17824
17846
  <span [bizdocTooltip]='names' [innerHTML]='message | sanitizeHtml'></span>
17825
17847
  }
17826
17848
  }`
17827
17849
  }]
17828
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17829
- type: Inject,
17830
- args: [NOTIFICATION_DATA]
17831
- }] }, { type: AccountService }, { type: TranslateService }, { type: RouterImpl }, { type: SessionService }, { type: ChatInfo }] });
17850
+ }] });
17832
17851
 
17833
- class CubeAnomalyNotification {
17852
+ class CubeAnomalyNotification extends NotificationBase {
17853
+ constructor() {
17854
+ super(...arguments);
17855
+ this._ds = inject(DatasourceService);
17856
+ this.axes = '';
17857
+ }
17834
17858
  ngOnInit() {
17835
- this.cube = this._session.profile.cubes.find(c => c.name === this.notification.cube);
17859
+ const { cube, axes } = this.notification.message;
17860
+ this.cube = this._session.profile.cubes.find(c => c.name === cube);
17836
17861
  const observables = [];
17837
17862
  this.cube.axes.forEach((a, i) => {
17838
- if (a.selectionMode !== 'None' && this.notification.axes && this.notification.axes[i]) {
17839
- observables.push(this._ds.get(a.dataType, this.notification.axes[i]));
17863
+ if (a.selectionMode !== 'None' && axes && axes[i]) {
17864
+ observables.push(this._ds.get(a.dataType, axes[i]));
17840
17865
  }
17841
17866
  });
17842
- forkJoin(observables).subscribe(a => this.axes = this._translate.join(a.map((e, i) => e || this.notification.axes[i])));
17867
+ forkJoin(observables).subscribe(a => this.axes = this._translate.join(a.map((e, i) => e || axes[i])));
17843
17868
  }
17844
- open(e) {
17845
- const id = e.target.getAttribute('data-info');
17869
+ open(evt) {
17870
+ const { cube, axes } = this.notification.message;
17871
+ const id = evt.target.getAttribute('data-id');
17846
17872
  if (id) {
17847
17873
  this._router.navigate(['mailbox/i', parseInt(id).encodeId()]);
17848
17874
  }
17849
17875
  else {
17850
17876
  const params = {};
17851
- if (this.notification.axes)
17852
- this.notification.axes.forEach((a, i) => a && (params[this.cube.axes[i].name] = a));
17853
- this._router.navigate(['cube', this.notification.cube, 'v', this.cube.views[0].name], { queryParams: params });
17877
+ axes?.forEach((a, i) => a && (params[this.cube.axes[i].name] = a));
17878
+ this._router.navigate(['cube', cube, 'v', this.cube.views[0].name], { queryParams: params });
17854
17879
  }
17855
17880
  }
17856
- constructor(notification, _ds, _session, _router, _translate) {
17857
- this.notification = notification;
17858
- this._ds = _ds;
17859
- this._session = _session;
17860
- this._router = _router;
17861
- this._translate = _translate;
17862
- this.axes = '';
17863
- }
17864
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: CubeAnomalyNotification, deps: [{ token: NOTIFICATION_DATA }, { token: DatasourceService }, { token: SessionService }, { token: RouterImpl }, { token: TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
17865
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: CubeAnomalyNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [innerHTML]=" 'CubeAnomalyNotify' | translate : (cube.title | lowercase) : (notification.value | currency : cube.currencyCode : 'symbol') : axes | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
17881
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: CubeAnomalyNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17882
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: CubeAnomalyNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, usesInheritance: true, ngImport: i0, template: `<span [innerHTML]="'CubeAnomalyNotify' | translate : (cube.title | lowercase) : (notification.message.value | currency : cube.currencyCode : 'symbol') : axes | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i9.CurrencyPipe, name: "currency" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
17866
17883
  }
17867
17884
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: CubeAnomalyNotification, decorators: [{
17868
17885
  type: Component,
17869
17886
  args: [{
17870
17887
  standalone: false,
17871
- template: `<span [innerHTML]=" 'CubeAnomalyNotify' | translate : (cube.title | lowercase) : (notification.value | currency : cube.currencyCode : 'symbol') : axes | sanitizeHtml"></span>`
17888
+ template: `<span [innerHTML]="'CubeAnomalyNotify' | translate : (cube.title | lowercase) : (notification.message.value | currency : cube.currencyCode : 'symbol') : axes | sanitizeHtml"></span>`
17872
17889
  }]
17873
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17874
- type: Inject,
17875
- args: [NOTIFICATION_DATA]
17876
- }] }, { type: DatasourceService }, { type: SessionService }, { type: RouterImpl }, { type: TranslateService }], propDecorators: { open: [{
17890
+ }], propDecorators: { open: [{
17877
17891
  type: HostListener,
17878
17892
  args: ['click', ['$event']]
17879
17893
  }] } });
17880
17894
 
17881
17895
  class EscalatedNotification extends NotificationBase {
17882
- ngOnInit() {
17883
- this._accounts.get(this.notification.substituteId).subscribe(u => this.name = this._formatUserElement(u));
17896
+ constructor() {
17897
+ super(...arguments);
17898
+ this._accounts = inject(AccountService);
17884
17899
  }
17885
- constructor(router, notification, _accounts, translate, session, chat) {
17886
- super(notification, router, session, translate, chat);
17887
- this.notification = notification;
17888
- this._accounts = _accounts;
17900
+ ngOnInit() {
17901
+ this._accounts.get(this.notification.message.substituteId).subscribe(u => this.name = this._formatUserElement(u));
17889
17902
  }
17890
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: EscalatedNotification, deps: [{ token: RouterImpl }, { token: NOTIFICATION_DATA }, { token: AccountService }, { token: TranslateService }, { token: SessionService }, { token: ChatInfo }], target: i0.ɵɵFactoryTarget.Component }); }
17891
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: EscalatedNotification, isStandalone: false, selector: "bizdoc-notify-escalated", usesInheritance: true, ngImport: i0, template: `@if (name) {<span [innerHTML]="'EscalatedNotify' | translate : notification.number : name | sanitizeHtml"></span>}`, isInline: true, dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
17903
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: EscalatedNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17904
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: EscalatedNotification, isStandalone: false, selector: "bizdoc-notify-escalated", usesInheritance: true, ngImport: i0, template: `@if (name) {<span [innerHTML]="'EscalatedNotify' | translate : notification.message.number : name | sanitizeHtml"></span>}`, isInline: true, dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
17892
17905
  }
17893
17906
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: EscalatedNotification, decorators: [{
17894
17907
  type: Component,
17895
17908
  args: [{
17896
17909
  standalone: false,
17897
17910
  selector: 'bizdoc-notify-escalated',
17898
- template: `@if (name) {<span [innerHTML]="'EscalatedNotify' | translate : notification.number : name | sanitizeHtml"></span>}`
17911
+ template: `@if (name) {<span [innerHTML]="'EscalatedNotify' | translate : notification.message.number : name | sanitizeHtml"></span>}`
17899
17912
  }]
17900
- }], ctorParameters: () => [{ type: RouterImpl }, { type: undefined, decorators: [{
17901
- type: Inject,
17902
- args: [NOTIFICATION_DATA]
17903
- }] }, { type: AccountService }, { type: TranslateService }, { type: SessionService }, { type: ChatInfo }] });
17913
+ }] });
17904
17914
 
17905
17915
  class LikedNotification extends NotificationBase {
17916
+ constructor() {
17917
+ super(...arguments);
17918
+ this._accounts = inject(AccountService);
17919
+ }
17906
17920
  ngOnInit() {
17907
- if (this.notification.userIds.length === 1)
17908
- this._accounts.get(this.notification.userIds[0]).subscribe(u => this.message = this._translate.personalize(this.notification.voted === 1 ? 'LikedOneNotify' : 'DislikedOneNotify', u.gender, this._formatUserElement(u), this.notification.number));
17921
+ const { userIds, voted, number } = this.notification.message;
17922
+ if (userIds.length === 1)
17923
+ this._accounts.get(userIds[0]).subscribe(u => this.message = this._translate.personalize(voted === 1 ? 'LikedOneNotify' : 'DislikedOneNotify', u.gender, this._formatUserElement(u), number));
17909
17924
  else
17910
- this._accounts.getAll(this.notification.userIds).subscribe(us => {
17925
+ this._accounts.getAll(userIds).subscribe(us => {
17911
17926
  if (us.length < 3)
17912
- this.message = this._translate.get(this.notification.voted === 1 ? 'LikedManyNotify' : this.notification.voted === -1 ? 'DislikedManyNotify' : 'MixedLikeManyNotify', this._translate.join(us.map(u => this._formatUserElement(u))), this.notification.number);
17927
+ this.message = this._translate.get(voted === 1 ? 'LikedManyNotify' : voted === -1 ? 'DislikedManyNotify' : 'MixedLikeManyNotify', this._translate.join(us.map(u => this._formatUserElement(u))), number);
17913
17928
  else {
17914
17929
  const comma = this._translate.comma;
17915
17930
  this.names = us.map(u => u.name).join(comma);
17916
- this.message = this._translate.get(this.notification.voted === 1 ? 'LikedManyMoreNotify' : this.notification.voted === -1 ? 'DislikedManyMoreNotify' : 'MixedLikeManyMoreNotify', us.slice(0, 2).map(u => this._formatUserElement(u)).join(comma), us.length - 2, this.notification.number);
17931
+ this.message = this._translate.get(voted === 1 ? 'LikedManyMoreNotify' : voted === -1 ? 'DislikedManyMoreNotify' : 'MixedLikeManyMoreNotify', us.slice(0, 2).map(u => this._formatUserElement(u)).join(comma), us.length - 2, number);
17917
17932
  }
17918
17933
  });
17919
17934
  }
17920
- constructor(notification, _accounts, translate, router, session, chat) {
17921
- super(notification, router, session, translate, chat);
17922
- this.notification = notification;
17923
- this._accounts = _accounts;
17924
- }
17925
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: LikedNotification, deps: [{ token: NOTIFICATION_DATA }, { token: AccountService }, { token: TranslateService }, { token: RouterImpl }, { token: SessionService }, { token: ChatInfo }], target: i0.ɵɵFactoryTarget.Component }); }
17935
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: LikedNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17926
17936
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: LikedNotification, isStandalone: false, selector: "bizdoc-liked-notification", usesInheritance: true, ngImport: i0, template: `@if (message) {
17927
17937
  @if (notification.userIds.length < 3) {
17928
17938
  <span [innerHTML]='message | sanitizeHtml'></span>
17929
17939
  }
17930
- @if (notification.userIds.length >= 3) {
17940
+ @else {
17931
17941
  <span [bizdocTooltip]='names' [innerHTML]='message | sanitizeHtml'></span>
17932
17942
  }
17933
17943
  }`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
@@ -17941,131 +17951,111 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
17941
17951
  @if (notification.userIds.length < 3) {
17942
17952
  <span [innerHTML]='message | sanitizeHtml'></span>
17943
17953
  }
17944
- @if (notification.userIds.length >= 3) {
17954
+ @else {
17945
17955
  <span [bizdocTooltip]='names' [innerHTML]='message | sanitizeHtml'></span>
17946
17956
  }
17947
17957
  }`
17948
17958
  }]
17949
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17950
- type: Inject,
17951
- args: [NOTIFICATION_DATA]
17952
- }] }, { type: AccountService }, { type: TranslateService }, { type: RouterImpl }, { type: SessionService }, { type: ChatInfo }] });
17959
+ }] });
17953
17960
 
17954
17961
  class StateChangedNotification extends NotificationBase {
17955
17962
  ngOnInit() {
17956
- this.form = this._session.profile.forms.find(f => f.name === this.notification.formId);
17957
- }
17958
- constructor(notification, session, router, translate, chat) {
17959
- super(notification, router, session, translate, chat);
17960
- this.notification = notification;
17963
+ this.form = this._session.profile.forms.find(f => f.name === this.notification.message.formId);
17961
17964
  }
17962
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: StateChangedNotification, deps: [{ token: NOTIFICATION_DATA }, { token: SessionService }, { token: RouterImpl }, { token: TranslateService }, { token: ChatInfo }], target: i0.ɵɵFactoryTarget.Component }); }
17963
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: StateChangedNotification, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `<span [innerHTML]="'StateChangedNotify' | translate : form.title : notification.number : (notification.state | state : 'past' | lowercase) | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: StatePipe, name: "state" }] }); }
17965
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: StateChangedNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17966
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: StateChangedNotification, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `<span [innerHTML]="'StateChangedNotify' | translate : form.title : notification.message.number : (notification.message.state | state : 'past' | lowercase) | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "pipe", type: i9.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: StatePipe, name: "state" }] }); }
17964
17967
  }
17965
17968
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: StateChangedNotification, decorators: [{
17966
17969
  type: Component,
17967
17970
  args: [{
17968
17971
  standalone: false,
17969
- template: `<span [innerHTML]="'StateChangedNotify' | translate : form.title : notification.number : (notification.state | state : 'past' | lowercase) | sanitizeHtml"></span>`
17972
+ template: `<span [innerHTML]="'StateChangedNotify' | translate : form.title : notification.message.number : (notification.message.state | state : 'past' | lowercase) | sanitizeHtml"></span>`
17970
17973
  }]
17971
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17972
- type: Inject,
17973
- args: [NOTIFICATION_DATA]
17974
- }] }, { type: SessionService }, { type: RouterImpl }, { type: TranslateService }, { type: ChatInfo }] });
17974
+ }] });
17975
17975
 
17976
17976
  class TextNotification {
17977
17977
  constructor(notification) {
17978
17978
  this.notification = notification;
17979
17979
  }
17980
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: TextNotification, deps: [{ token: NOTIFICATION_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
17981
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: TextNotification, isStandalone: false, selector: "bizdoc-notify-text", ngImport: i0, template: `<span [innerHTML]="notification.text"></span>`, isInline: true }); }
17980
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: TextNotification, deps: [{ token: NotificationRef }], target: i0.ɵɵFactoryTarget.Component }); }
17981
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: TextNotification, isStandalone: false, selector: "bizdoc-notify-text", ngImport: i0, template: `<span [innerHTML]="notification.message.text"></span>`, isInline: true }); }
17982
17982
  }
17983
17983
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: TextNotification, decorators: [{
17984
17984
  type: Component,
17985
17985
  args: [{
17986
17986
  standalone: false,
17987
17987
  selector: 'bizdoc-notify-text',
17988
- template: `<span [innerHTML]="notification.text"></span>`
17988
+ template: `<span [innerHTML]="notification.message.text"></span>`
17989
17989
  }]
17990
- }], ctorParameters: () => [{ type: undefined, decorators: [{
17990
+ }], ctorParameters: () => [{ type: NotificationRef, decorators: [{
17991
17991
  type: Inject,
17992
- args: [NOTIFICATION_DATA]
17992
+ args: [NotificationRef]
17993
17993
  }] }] });
17994
17994
 
17995
17995
  class UpcomingEventNotification {
17996
- ngOnInit() {
17997
- this.duration = dayjs(this.notification.starting);
17996
+ constructor() {
17997
+ this.notification = inject((NotificationRef));
17998
+ this._router = inject(RouterImpl);
17998
17999
  }
17999
- open(e) {
18000
- this._router.navigate(['schedule'], { queryParams: { date: new Date(this.notification.starting).valueOf().encodeId() } });
18000
+ ngOnInit() {
18001
+ this.duration = dayjs(this.notification.message.starting);
18001
18002
  }
18002
- constructor(notification, _router) {
18003
- this.notification = notification;
18004
- this._router = _router;
18003
+ open(_) {
18004
+ this._router.navigate(['schedule'], { queryParams: { date: this.duration.valueOf().encodeId() } });
18005
18005
  }
18006
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: UpcomingEventNotification, deps: [{ token: NOTIFICATION_DATA }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Component }); }
18007
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: UpcomingEventNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [bizdocTooltip]="notification.starting | amCalendar" [innerHTML]="'UpcomingEventNotify' | translate : notification.number : duration.fromNow() | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
18006
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: UpcomingEventNotification, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18007
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: UpcomingEventNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [bizdocTooltip]="notification.message.starting | amCalendar" [innerHTML]="'UpcomingEventNotify' | translate : notification.message.number : duration.fromNow() | sanitizeHtml"></span>`, isInline: true, dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
18008
18008
  }
18009
18009
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: UpcomingEventNotification, decorators: [{
18010
18010
  type: Component,
18011
18011
  args: [{
18012
18012
  standalone: false,
18013
- template: `<span [bizdocTooltip]="notification.starting | amCalendar" [innerHTML]="'UpcomingEventNotify' | translate : notification.number : duration.fromNow() | sanitizeHtml"></span>`
18013
+ template: `<span [bizdocTooltip]="notification.message.starting | amCalendar" [innerHTML]="'UpcomingEventNotify' | translate : notification.message.number : duration.fromNow() | sanitizeHtml"></span>`
18014
18014
  }]
18015
- }], ctorParameters: () => [{ type: undefined, decorators: [{
18016
- type: Inject,
18017
- args: [NOTIFICATION_DATA]
18018
- }] }, { type: RouterImpl }], propDecorators: { open: [{
18015
+ }], propDecorators: { open: [{
18019
18016
  type: HostListener,
18020
18017
  args: ['click', ['$event']]
18021
18018
  }] } });
18022
18019
 
18023
18020
  class NudgeNotification extends NotificationBase {
18024
18021
  ngOnInit() {
18025
- this.expire = dayjs(this.notification.expire);
18022
+ this.expire = dayjs(this.notification.message.expire);
18026
18023
  }
18027
- constructor(router, translate, session, chat, notification) {
18028
- super(notification, router, session, translate, chat);
18029
- this.notification = notification;
18030
- }
18031
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NudgeNotification, deps: [{ token: RouterImpl }, { token: TranslateService }, { token: SessionService }, { token: ChatInfo }, { token: NOTIFICATION_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
18032
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: NudgeNotification, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `<span [innerHTML]='"NudgeNotify" | translate : notification.number : expire.toNow() | sanitizeHtml'></span>`, isInline: true, dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
18024
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NudgeNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
18025
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: NudgeNotification, isStandalone: false, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `<span [innerHTML]='"NudgeNotify" | translate : notification.message.number : expire.toNow() | sanitizeHtml'></span>`, isInline: true, dependencies: [{ kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
18033
18026
  }
18034
18027
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: NudgeNotification, decorators: [{
18035
18028
  type: Component,
18036
18029
  args: [{
18037
18030
  standalone: false,
18038
- template: `<span [innerHTML]='"NudgeNotify" | translate : notification.number : expire.toNow() | sanitizeHtml'></span>`
18031
+ template: `<span [innerHTML]='"NudgeNotify" | translate : notification.message.number : expire.toNow() | sanitizeHtml'></span>`
18039
18032
  }]
18040
- }], ctorParameters: () => [{ type: RouterImpl }, { type: TranslateService }, { type: SessionService }, { type: ChatInfo }, { type: undefined, decorators: [{
18041
- type: Inject,
18042
- args: [NOTIFICATION_DATA]
18043
- }] }] });
18033
+ }] });
18044
18034
 
18045
18035
  class LongRunningTaskNotification {
18046
18036
  ngOnInit() {
18047
- this.report = this._session.profile.reports.find(r => r.name === this.notification.name);
18037
+ this.report = this._session.profile.reports.find(r => r.name === this.notification.message.name);
18048
18038
  }
18049
- open(e) {
18050
- this._router.navigate(['reports', this.notification.name]);
18039
+ open(_) {
18040
+ this._router.navigate(['reports', this.notification.message.name]);
18051
18041
  }
18052
18042
  constructor(notification, _session, _router) {
18053
18043
  this.notification = notification;
18054
18044
  this._session = _session;
18055
18045
  this._router = _router;
18056
18046
  }
18057
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: LongRunningTaskNotification, deps: [{ token: NOTIFICATION_DATA }, { token: SessionService }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Component }); }
18058
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: LongRunningTaskNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span></span>`, isInline: true }); }
18047
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: LongRunningTaskNotification, deps: [{ token: NotificationRef }, { token: SessionService }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Component }); }
18048
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: LongRunningTaskNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [innerHTML]="report.title"></span>`, isInline: true }); }
18059
18049
  }
18060
18050
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: LongRunningTaskNotification, decorators: [{
18061
18051
  type: Component,
18062
18052
  args: [{
18063
18053
  standalone: false,
18064
- template: `<span></span>`
18054
+ template: `<span [innerHTML]="report.title"></span>`
18065
18055
  }]
18066
- }], ctorParameters: () => [{ type: undefined, decorators: [{
18056
+ }], ctorParameters: () => [{ type: NotificationRef, decorators: [{
18067
18057
  type: Inject,
18068
- args: [NOTIFICATION_DATA]
18058
+ args: [NotificationRef]
18069
18059
  }] }, { type: SessionService }, { type: RouterImpl }], propDecorators: { open: [{
18070
18060
  type: HostListener,
18071
18061
  args: ['click', ['$event']]
@@ -18073,21 +18063,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
18073
18063
 
18074
18064
  /** */
18075
18065
  class TaggedNotification extends NotificationBase {
18066
+ constructor() {
18067
+ super(...arguments);
18068
+ this._accounts = inject(AccountService);
18069
+ }
18076
18070
  ngOnInit() {
18077
- const form = this._session.profile.forms.find(f => f.name == this.notification.formId);
18078
- if (this.notification.who === this._session.userId)
18079
- this.message = this._translate.get('TaggedYourselfNotify', form.title, `<a>${this.notification.number}</a>`);
18071
+ const { formId, who, number } = this.notification.message;
18072
+ const form = this._session.profile.forms.find(f => f.name == formId);
18073
+ if (who === this._session.userId)
18074
+ this.message = this._translate.get('TaggedYourselfNotify', form.title, `<a>${number}</a>`);
18080
18075
  else
18081
- this._accounts.get(this.notification.who).subscribe(u => {
18082
- this.message = this._translate.get(`Tagged${u.gender || ''}Notify`, this._formatUserElement(u), form.title, `<a>${this.notification.number}</a>`);
18076
+ this._accounts.get(who).subscribe(u => {
18077
+ this.message = this._translate.get(`Tagged${u.gender || ''}Notify`, this._formatUserElement(u), form.title, `<a>${number}</a>`);
18083
18078
  });
18084
18079
  }
18085
- constructor(notification, _accounts, translate, router, session, chat) {
18086
- super(notification, router, session, translate, chat);
18087
- this.notification = notification;
18088
- this._accounts = _accounts;
18089
- }
18090
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: TaggedNotification, deps: [{ token: NOTIFICATION_DATA }, { token: AccountService }, { token: TranslateService }, { token: RouterImpl }, { token: SessionService }, { token: ChatInfo }], target: i0.ɵɵFactoryTarget.Component }); }
18080
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: TaggedNotification, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
18091
18081
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: TaggedNotification, isStandalone: false, selector: "bizdoc-notify-tagged", usesInheritance: true, ngImport: i0, template: `@if (message) {
18092
18082
  <span [innerHTML]='message | sanitizeHtml'></span>
18093
18083
  }`, isInline: true, dependencies: [{ kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
@@ -18101,10 +18091,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
18101
18091
  <span [innerHTML]='message | sanitizeHtml'></span>
18102
18092
  }`
18103
18093
  }]
18104
- }], ctorParameters: () => [{ type: undefined, decorators: [{
18105
- type: Inject,
18106
- args: [NOTIFICATION_DATA]
18107
- }] }, { type: AccountService }, { type: TranslateService }, { type: RouterImpl }, { type: SessionService }, { type: ChatInfo }] });
18094
+ }] });
18108
18095
 
18109
18096
  class DocumentFactory {
18110
18097
  constructor(_session, _mailbox, _cf, _messaging, _ps, _overlay, _dir, _router) {
@@ -18183,7 +18170,7 @@ class DocumentFactory {
18183
18170
  this._messaging.callback$.pipe(takeUntil$1(formRef._destroy$)).
18184
18171
  subscribe(e => compRef.instance.onMessage && compRef.instance.onMessage(e.message));
18185
18172
  // escape
18186
- merge(overlayRef.backdropClick(), overlayRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape'))).
18173
+ merge(overlayRef.backdropClick(), overlayRef.keydownEvents().pipe(filter(k => k.key === 'Escape'))).
18187
18174
  subscribe(() => {
18188
18175
  observe.complete();
18189
18176
  overlayRef.detach();
@@ -18255,25 +18242,27 @@ class InviteNotification {
18255
18242
  this._router = _router;
18256
18243
  this._factory = _factory;
18257
18244
  this.notification = notification;
18258
- const form = session.profile.forms.find(f => f.name == notification.formId);
18259
- this.message = notification.message ||
18260
- (notification.due ?
18261
- translate.get(notification.recipientId ?
18245
+ const { formId, message, due, recipientId } = notification.message;
18246
+ const form = session.profile.forms.find(f => f.name === formId);
18247
+ this.message = message ||
18248
+ (due ?
18249
+ translate.get(recipientId ?
18262
18250
  'CompleteNotificationTill' :
18263
- 'FillNotificationTill', form.title, dayjs(notification.due).fromNow()) :
18264
- translate.get(notification.recipientId ?
18251
+ 'FillNotificationTill', form.title, dayjs(due).fromNow()) :
18252
+ translate.get(recipientId ?
18265
18253
  'CompleteFillNotification' :
18266
18254
  'FillNotification', form.title));
18267
18255
  }
18268
18256
  open(_) {
18269
- if (this.notification.recipientId)
18270
- this._router.navigate(['mailbox/i', this.notification.recipientId.encodeId()]);
18257
+ const { formId, recipientId } = this.notification.message;
18258
+ if (recipientId)
18259
+ this._router.navigate(['mailbox/i', recipientId.encodeId()]);
18271
18260
  else
18272
- this._factory.create(this.notification.formId).subscribe(m => {
18261
+ this._factory.create(formId).subscribe(m => {
18273
18262
  this._router.navigate(['mailbox/i', m.id.encodeId()]);
18274
18263
  });
18275
18264
  }
18276
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: InviteNotification, deps: [{ token: RouterImpl }, { token: DocumentFactory }, { token: SessionService }, { token: TranslateService }, { token: NOTIFICATION_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
18265
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: InviteNotification, deps: [{ token: RouterImpl }, { token: DocumentFactory }, { token: SessionService }, { token: TranslateService }, { token: NotificationRef }], target: i0.ɵɵFactoryTarget.Component }); }
18277
18266
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: InviteNotification, isStandalone: false, selector: "ng-component", host: { listeners: { "click": "open($event)" } }, ngImport: i0, template: `<span [innerHTML]="message"></span>`, isInline: true }); }
18278
18267
  }
18279
18268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: InviteNotification, decorators: [{
@@ -18282,45 +18271,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
18282
18271
  standalone: false,
18283
18272
  template: `<span [innerHTML]="message"></span>`
18284
18273
  }]
18285
- }], ctorParameters: () => [{ type: RouterImpl }, { type: DocumentFactory }, { type: SessionService }, { type: TranslateService }, { type: undefined, decorators: [{
18274
+ }], ctorParameters: () => [{ type: RouterImpl }, { type: DocumentFactory }, { type: SessionService }, { type: TranslateService }, { type: NotificationRef, decorators: [{
18286
18275
  type: Inject,
18287
- args: [NOTIFICATION_DATA]
18276
+ args: [NotificationRef]
18288
18277
  }] }], propDecorators: { open: [{
18289
18278
  type: HostListener,
18290
18279
  args: ['click', ['$event']]
18291
18280
  }] } });
18292
18281
 
18293
- class ContentNotification {
18294
- ngOnInit() {
18295
- }
18296
- constructor(notification, vc) {
18297
- this.notification = notification;
18282
+ class ContentMessageNotification extends NotificationBase {
18283
+ constructor(vc) {
18284
+ super();
18298
18285
  this._factory = inject(BizDocComponentFactoryResolver);
18299
- this._session = inject(SessionService);
18300
- const configuration = this._session.profile.notifications.find(n => n.contentType === notification.contentType);
18301
- const comp = this._factory.component(configuration.template);
18302
- const compRef = vc.createComponent(comp, {
18303
- // injector: Injector.create([{
18304
- // provide: NotificationRef,
18305
- // value: new NotificationRef()
18306
- // }])
18307
- });
18308
- compRef.instance.onBind(notification.content);
18286
+ // map
18287
+ if (!ContentMessageNotification._tamplateMap) {
18288
+ ContentMessageNotification._tamplateMap = {};
18289
+ this._session.profile.notifications.forEach(n => {
18290
+ ContentMessageNotification._tamplateMap[n.contentType] = n.template;
18291
+ });
18292
+ }
18293
+ const { content, contentType } = this.notification.message;
18294
+ const template = ContentMessageNotification._tamplateMap[contentType];
18295
+ const comp = this._factory.component(template);
18296
+ const compRef = vc.createComponent(comp);
18297
+ compRef.instance.onBind(content);
18309
18298
  }
18310
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: ContentNotification, deps: [{ token: NOTIFICATION_DATA }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
18311
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: ContentNotification, isStandalone: false, selector: "bizdoc-notify-content", ngImport: i0, template: '', isInline: true }); }
18299
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: ContentMessageNotification, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
18300
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.0", type: ContentMessageNotification, isStandalone: false, selector: "bizdoc-notify-content", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
18312
18301
  }
18313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: ContentNotification, decorators: [{
18302
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: ContentMessageNotification, decorators: [{
18314
18303
  type: Component,
18315
18304
  args: [{
18316
18305
  standalone: false,
18317
18306
  selector: 'bizdoc-notify-content',
18318
18307
  template: ''
18319
18308
  }]
18320
- }], ctorParameters: () => [{ type: undefined, decorators: [{
18321
- type: Inject,
18322
- args: [NOTIFICATION_DATA]
18323
- }] }, { type: i0.ViewContainerRef }] });
18309
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
18324
18310
 
18325
18311
  class NotificationsService {
18326
18312
  constructor(_http, messaging, _session) {
@@ -18371,19 +18357,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
18371
18357
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: HubService }, { type: SessionService }] });
18372
18358
 
18373
18359
  class NotificationsComponentBase {
18360
+ constructor() {
18361
+ this._injector = inject(Injector);
18362
+ this._service = inject(NotificationsService);
18363
+ this._session = inject(SessionService);
18364
+ }
18365
+ /**
18366
+ *
18367
+ * @param messages
18368
+ */
18374
18369
  prepare(messages) {
18375
18370
  messages.forEach(m => {
18376
18371
  m.comp = this._getComponent(m.type);
18377
18372
  m.injector = this._getInjector(m);
18378
18373
  });
18379
18374
  }
18380
- constructor() {
18381
- this._uidType = {};
18382
- this._injector = inject(Injector);
18383
- this._service = inject(NotificationsService);
18384
- this._session = inject(SessionService);
18385
- this._session.profile.notifications.forEach(n => this._uidType[n.contentType] = n.template);
18386
- }
18387
18375
  _getComponent(type) {
18388
18376
  switch (type) {
18389
18377
  case 'Commented':
@@ -18401,7 +18389,7 @@ class NotificationsComponentBase {
18401
18389
  case 'TextMessage':
18402
18390
  return TextNotification;
18403
18391
  case 'ContentMessage':
18404
- return ContentNotification;
18392
+ return ContentMessageNotification;
18405
18393
  case 'Invite':
18406
18394
  return InviteNotification;
18407
18395
  case 'UpcomingEvent':
@@ -18417,8 +18405,8 @@ class NotificationsComponentBase {
18417
18405
  _getInjector(item) {
18418
18406
  return Injector.create({
18419
18407
  providers: [{
18420
- provide: NOTIFICATION_DATA,
18421
- useValue: item
18408
+ provide: NotificationRef,
18409
+ useValue: new NotificationRef(item)
18422
18410
  }],
18423
18411
  parent: this._injector
18424
18412
  });
@@ -18474,6 +18462,10 @@ class NotificationsTableComponent extends NotificationsComponentBase {
18474
18462
  mute(item, mute) {
18475
18463
  this._service.mute(item.id, mute);
18476
18464
  }
18465
+ /**
18466
+ *
18467
+ * @param item
18468
+ */
18477
18469
  delete(item) {
18478
18470
  this._service.delete(item.id).subscribe(i => {
18479
18471
  item.deleted = true;
@@ -18493,6 +18485,10 @@ class NotificationsTableComponent extends NotificationsComponentBase {
18493
18485
  this.selection.clear() :
18494
18486
  this.selection.select(...this.dataSource.data);
18495
18487
  }
18488
+ /**
18489
+ *
18490
+ * @param evt
18491
+ */
18496
18492
  openFilter(evt) {
18497
18493
  const popupRef = this._popup.open(NotificationsFilterComponent, evt.target);
18498
18494
  popupRef.opened().
@@ -18695,7 +18691,7 @@ class ContactsComponent {
18695
18691
  ngOnInit() {
18696
18692
  const me = this._session.userId;
18697
18693
  this._prepare();
18698
- this.users$ = this.searchControl.valueChanges.pipe(debounceTime(200), filter(v => isString(v)), takeUntil(this._destroy), switchMap(v => this._service.findAll(v)), map(us => us.filter(u => u.id !== me)));
18694
+ this.users$ = this.searchControl.valueChanges.pipe(debounceTime(200), filter$1(v => isString(v)), takeUntil(this._destroy), switchMap(v => this._service.findAll(v)), map(us => us.filter(u => u.id !== me)));
18699
18695
  }
18700
18696
  optionSelected(ev) {
18701
18697
  const { value: id } = ev.option;
@@ -18886,7 +18882,7 @@ class ConversationComponent {
18886
18882
  positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),
18887
18883
  });
18888
18884
  oRef.attach(new TemplatePortal(this.previewTemplate, this._vc, { item }));
18889
- merge(oRef.keydownEvents().pipe(filter(k => k.key === 'Escape')), oRef.backdropClick()).subscribe(() => oRef.detach());
18885
+ merge(oRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape')), oRef.backdropClick()).subscribe(() => oRef.detach());
18890
18886
  }
18891
18887
  ngOnDestroy() {
18892
18888
  if (this._typingTask)
@@ -19403,18 +19399,18 @@ class OutOfOfficeToast {
19403
19399
  this._accounts.get(data.substituteId).subscribe(u => this.substitute = u);
19404
19400
  }
19405
19401
  options() {
19406
- this._router.navigate(['options', 'out_of_office']);
19402
+ this._router.navigate(['options'], { queryParams: { section: 'ooo' } });
19407
19403
  this.dismiss();
19408
19404
  }
19409
19405
  dismiss() {
19410
19406
  this._ref.dismiss();
19411
19407
  }
19412
19408
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: OutOfOfficeToast, deps: [{ token: RouterImpl }, { token: AccountService }, { token: MAT_SNACK_BAR_DATA }, { token: i3.MatSnackBarRef }], target: i0.ɵɵFactoryTarget.Component }); }
19413
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: OutOfOfficeToast, isStandalone: false, selector: "bizdoc-outofoffice", ngImport: i0, template: "@if (substitute) {\r\n <span matSnackBarLabel [innerHTML]=\"'OutOfOfficeOn'|translate:substitute.name|sanitizeHtml\"></span>\r\n}\r\n<div matSnackBarActions>\r\n <button mat-stroked-button (click)=\"options()\" color=\"warn\">{{'ChangeOptions'|translate}}</button>\r\n <button matSnackBarAction mat-icon-button (click)=\"dismiss()\" [bizdocTooltip]=\"'Dismiss'|translate\"><mat-icon>close</mat-icon></button>\r\n</div>\r\n", styles: ["div{flex-direction:row;box-sizing:border-box;display:flex;align-items:center}div span{flex:1 1 auto}\n"], dependencies: [{ kind: "directive", type: i3.MatSnackBarLabel, selector: "[matSnackBarLabel]" }, { kind: "directive", type: i3.MatSnackBarActions, selector: "[matSnackBarActions]" }, { kind: "directive", type: i3.MatSnackBarAction, selector: "[matSnackBarAction]" }, { kind: "component", type: i8.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
19409
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: OutOfOfficeToast, isStandalone: false, selector: "bizdoc-outofoffice", ngImport: i0, template: "<div matSnackBarLabel>\r\n @if (substitute) {\r\n <span [innerHTML]=\"'OutOfOfficeOn'|translate:substitute.name|sanitizeHtml\"></span>\r\n }\r\n</div>\r\n<div matSnackBarActions>\r\n <button mat-stroked-button matSnackBarAction (click)=\"options()\" color=\"warn\">{{'ChangeOptions'|translate}}</button>\r\n <button matSnackBarAction mat-icon-button (click)=\"dismiss()\" [bizdocTooltip]=\"'Dismiss'|translate\"><mat-icon>close</mat-icon></button>\r\n</div>\r\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "directive", type: i3.MatSnackBarLabel, selector: "[matSnackBarLabel]" }, { kind: "directive", type: i3.MatSnackBarActions, selector: "[matSnackBarActions]" }, { kind: "directive", type: i3.MatSnackBarAction, selector: "[matSnackBarAction]" }, { kind: "component", type: i8.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: SanitizeHtmlPipe, name: "sanitizeHtml" }] }); }
19414
19410
  }
19415
19411
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: OutOfOfficeToast, decorators: [{
19416
19412
  type: Component,
19417
- args: [{ standalone: false, selector: 'bizdoc-outofoffice', template: "@if (substitute) {\r\n <span matSnackBarLabel [innerHTML]=\"'OutOfOfficeOn'|translate:substitute.name|sanitizeHtml\"></span>\r\n}\r\n<div matSnackBarActions>\r\n <button mat-stroked-button (click)=\"options()\" color=\"warn\">{{'ChangeOptions'|translate}}</button>\r\n <button matSnackBarAction mat-icon-button (click)=\"dismiss()\" [bizdocTooltip]=\"'Dismiss'|translate\"><mat-icon>close</mat-icon></button>\r\n</div>\r\n", styles: ["div{flex-direction:row;box-sizing:border-box;display:flex;align-items:center}div span{flex:1 1 auto}\n"] }]
19413
+ args: [{ standalone: false, selector: 'bizdoc-outofoffice', template: "<div matSnackBarLabel>\r\n @if (substitute) {\r\n <span [innerHTML]=\"'OutOfOfficeOn'|translate:substitute.name|sanitizeHtml\"></span>\r\n }\r\n</div>\r\n<div matSnackBarActions>\r\n <button mat-stroked-button matSnackBarAction (click)=\"options()\" color=\"warn\">{{'ChangeOptions'|translate}}</button>\r\n <button matSnackBarAction mat-icon-button (click)=\"dismiss()\" [bizdocTooltip]=\"'Dismiss'|translate\"><mat-icon>close</mat-icon></button>\r\n</div>\r\n", styles: [":host{display:flex}\n"] }]
19418
19414
  }], ctorParameters: () => [{ type: RouterImpl }, { type: AccountService }, { type: undefined, decorators: [{
19419
19415
  type: Inject,
19420
19416
  args: [MAT_SNACK_BAR_DATA]
@@ -19652,11 +19648,11 @@ class QuickNotificationsComponent extends NotificationsComponentBase {
19652
19648
  this._service.mute(item.id, mute);
19653
19649
  }
19654
19650
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: QuickNotificationsComponent, deps: [{ token: PopupRef }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Component }); }
19655
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: QuickNotificationsComponent, isStandalone: false, selector: "bizdoc-notifications", usesInheritance: true, ngImport: i0, template: "<mat-nav-list role=\"list\">\r\n <!--dense-->\r\n @for (n of notifications | sort: 'sent' : 'desc' | slice:0:9; track n; let i = $index) {\r\n <mat-list-item role=\"listitem\" class=\"item\" [class.read]=\"n.read\" (click)=\"open(n, $event)\">\r\n <h3 *ngComponentOutlet=\"n.comp; injector: n.injector\" matListItemTitle></h3>\r\n <span matListItemLine [bizdocTooltip]=\"n.sent | amCalendar\">{{n.sent | amTimeAgo }}</span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [matMenuTriggerData]=\"{muted: false}\"\r\n matListItemMeta class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-template matMenuContent let-muted=\"muted\">\r\n <button mat-menu-item (click)=\"mute(n, true)\">{{ (!(muted | async) ? 'Mute': 'Unmute') | translate}}</button>\r\n </ng-template>\r\n </mat-menu>\r\n </mat-list-item>\r\n }\r\n</mat-nav-list>\r\n<div class=\"tools row\">\r\n <a (click)=\"all()\">{{'ShowAll'|translate}}</a>&nbsp;\r\n <span class=\"divider\"></span>\r\n <a (click)='options()'>{{'Options'|translate}}</a>\r\n</div>\r\n", styles: [".item .tool{opacity:.1}.item:hover .tool{opacity:1}.tools{font-variant-caps:all-small-caps;font-size:medium;padding:8px}\n"], dependencies: [{ kind: "directive", type: i9.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: i2$5.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i2$5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$5.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i2$5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$5.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.SlicePipe, name: "slice" }, { kind: "pipe", type: CalendarPipe, name: "amCalendar" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
19651
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.0", type: QuickNotificationsComponent, isStandalone: false, selector: "bizdoc-notifications", usesInheritance: true, ngImport: i0, template: "<mat-list role=\"list\">\r\n <!--dense-->\r\n @for (n of notifications | sort: 'sent' : 'desc' | slice:0:9; track n.id; let i = $index) {\r\n <mat-list-item role=\"listitem\" class=\"item\" [class.read]=\"n.read\" (click)=\"open(n, $event)\">\r\n <h3 matListItemTitle><ng-container *ngComponentOutlet=\"n.comp; injector: n.injector\" ></ng-container></h3>\r\n <span matListItemLine [bizdocTooltip]=\"n.sent | amDateFormat: 'lll'\">{{n.sent | amTimeAgo }}</span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [matMenuTriggerData]=\"{muted: false}\"\r\n matListItemMeta class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-template matMenuContent let-muted=\"muted\">\r\n <button mat-menu-item (click)=\"mute(n, true)\">{{ (!(muted | async) ? 'Mute': 'Unmute') | translate}}</button>\r\n </ng-template>\r\n </mat-menu>\r\n </mat-list-item>\r\n }\r\n</mat-list>\r\n<div class=\"tools row\">\r\n <a (click)=\"all()\">{{'ShowAll'|translate}}</a>&nbsp;\r\n <span class=\"divider\"></span>\r\n <a (click)='options()'>{{'Options'|translate}}</a>\r\n</div>\r\n", styles: [".item .tool{opacity:.1}.item:hover .tool{opacity:1}.tools{font-variant-caps:all-small-caps;font-size:medium;padding:8px}\n"], dependencies: [{ kind: "directive", type: i9.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: i2$5.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i2$5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i2$5.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i2$5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i2$5.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i10.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.SlicePipe, name: "slice" }, { kind: "pipe", type: DateFormatPipe, name: "amDateFormat" }, { kind: "pipe", type: TimeAgoPipe, name: "amTimeAgo" }, { kind: "pipe", type: ArraySortPipe, name: "sort" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
19656
19652
  }
19657
19653
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: QuickNotificationsComponent, decorators: [{
19658
19654
  type: Component,
19659
- args: [{ standalone: false, selector: 'bizdoc-notifications', template: "<mat-nav-list role=\"list\">\r\n <!--dense-->\r\n @for (n of notifications | sort: 'sent' : 'desc' | slice:0:9; track n; let i = $index) {\r\n <mat-list-item role=\"listitem\" class=\"item\" [class.read]=\"n.read\" (click)=\"open(n, $event)\">\r\n <h3 *ngComponentOutlet=\"n.comp; injector: n.injector\" matListItemTitle></h3>\r\n <span matListItemLine [bizdocTooltip]=\"n.sent | amCalendar\">{{n.sent | amTimeAgo }}</span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [matMenuTriggerData]=\"{muted: false}\"\r\n matListItemMeta class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-template matMenuContent let-muted=\"muted\">\r\n <button mat-menu-item (click)=\"mute(n, true)\">{{ (!(muted | async) ? 'Mute': 'Unmute') | translate}}</button>\r\n </ng-template>\r\n </mat-menu>\r\n </mat-list-item>\r\n }\r\n</mat-nav-list>\r\n<div class=\"tools row\">\r\n <a (click)=\"all()\">{{'ShowAll'|translate}}</a>&nbsp;\r\n <span class=\"divider\"></span>\r\n <a (click)='options()'>{{'Options'|translate}}</a>\r\n</div>\r\n", styles: [".item .tool{opacity:.1}.item:hover .tool{opacity:1}.tools{font-variant-caps:all-small-caps;font-size:medium;padding:8px}\n"] }]
19655
+ args: [{ standalone: false, selector: 'bizdoc-notifications', template: "<mat-list role=\"list\">\r\n <!--dense-->\r\n @for (n of notifications | sort: 'sent' : 'desc' | slice:0:9; track n.id; let i = $index) {\r\n <mat-list-item role=\"listitem\" class=\"item\" [class.read]=\"n.read\" (click)=\"open(n, $event)\">\r\n <h3 matListItemTitle><ng-container *ngComponentOutlet=\"n.comp; injector: n.injector\" ></ng-container></h3>\r\n <span matListItemLine [bizdocTooltip]=\"n.sent | amDateFormat: 'lll'\">{{n.sent | amTimeAgo }}</span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [matMenuTriggerData]=\"{muted: false}\"\r\n matListItemMeta class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-template matMenuContent let-muted=\"muted\">\r\n <button mat-menu-item (click)=\"mute(n, true)\">{{ (!(muted | async) ? 'Mute': 'Unmute') | translate}}</button>\r\n </ng-template>\r\n </mat-menu>\r\n </mat-list-item>\r\n }\r\n</mat-list>\r\n<div class=\"tools row\">\r\n <a (click)=\"all()\">{{'ShowAll'|translate}}</a>&nbsp;\r\n <span class=\"divider\"></span>\r\n <a (click)='options()'>{{'Options'|translate}}</a>\r\n</div>\r\n", styles: [".item .tool{opacity:.1}.item:hover .tool{opacity:1}.tools{font-variant-caps:all-small-caps;font-size:medium;padding:8px}\n"] }]
19660
19656
  }], ctorParameters: () => [{ type: PopupRef }, { type: RouterImpl }] });
19661
19657
 
19662
19658
  let DocumentListingComponent = class DocumentListingComponent {
@@ -21316,7 +21312,7 @@ class HomeComponent extends HomeBase {
21316
21312
  this._collapseToggle = false;
21317
21313
  this.displayWith = (_) => null;
21318
21314
  this.profile = this._session.profile;
21319
- _router.events.pipe(filter(e => e instanceof NavigationStart), filter((e) => e.pane.path !== undefined && e.pane.mode === 'pane')).
21315
+ _router.events.pipe(filter$1(e => e instanceof NavigationStart), filter$1((e) => e.pane.path !== undefined && e.pane.mode === 'pane')).
21320
21316
  subscribe((e) => this._path = e.pane.path.split('/')[0]);
21321
21317
  }
21322
21318
  get submenuMode() {
@@ -21358,7 +21354,7 @@ class HomeComponent extends HomeBase {
21358
21354
  return this.main?.panes[0]?.guide;
21359
21355
  }
21360
21356
  ngOnInit() {
21361
- this.results = this.search.valueChanges.pipe(filter(v => isString(v)), map(v => this._service.search(v)));
21357
+ this.results = this.search.valueChanges.pipe(filter$1(v => isString(v)), map(v => this._service.search(v)));
21362
21358
  super.ngOnInit();
21363
21359
  }
21364
21360
  /** options */
@@ -21546,7 +21542,7 @@ class CopyDialog {
21546
21542
  constructor(_service, dialogRef) {
21547
21543
  this._service = _service;
21548
21544
  this.search = new FormControl();
21549
- dialogRef.keydownEvents().pipe(filter(k => k.key === 'Enter')).
21545
+ dialogRef.keydownEvents().pipe(filter$1(k => k.key === 'Enter')).
21550
21546
  subscribe(() => this.selectedItem && dialogRef.close(this.selectedItem));
21551
21547
  }
21552
21548
  ngOnInit() {
@@ -21858,7 +21854,7 @@ class ImpersonateDialog {
21858
21854
  this._destroy = new Subject();
21859
21855
  this.username = new FormControl(null, Validators.required);
21860
21856
  this.recents$ = this._session.listImpersonate();
21861
- this.users$ = this.username.valueChanges.pipe(debounceTime(250), takeUntil(this._destroy), filter(v => isString(v) && v.length > 0), switchMap(v => this._session.listImpersonate(v)));
21857
+ this.users$ = this.username.valueChanges.pipe(debounceTime(250), takeUntil(this._destroy), filter$1(v => isString(v) && v.length > 0), switchMap(v => this._session.listImpersonate(v)));
21862
21858
  this.logging = false;
21863
21859
  }
21864
21860
  reset() {
@@ -22430,7 +22426,7 @@ class CubeMobileViewComponent extends ViewBase {
22430
22426
  });
22431
22427
  this._route.queryParams.pipe(takeUntil(this._destroy)).subscribe(p => this.originalAxes = p);
22432
22428
  this.drawer.openedChange.
22433
- pipe(filter(() => !this._navigating), takeUntil(this._destroy)).subscribe(() => this.viewPane.resize());
22429
+ pipe(filter$1(() => !this._navigating), takeUntil(this._destroy)).subscribe(() => this.viewPane.resize());
22434
22430
  this._session.loaded.pipe(takeUntil(this._destroy)).
22435
22431
  subscribe(() => this.viewPane.refresh());
22436
22432
  const queryKeys = Object.keys(this._route.snapshot.queryParams);
@@ -23112,7 +23108,7 @@ class MapComponent {
23112
23108
  });
23113
23109
  infowindow.open(map, marker);
23114
23110
  }, MARKER_DELAY);
23115
- this._ref.keydownEvents().pipe(filter(k => k.key === 'Escape')).subscribe(() => this._ref.detach());
23111
+ this._ref.keydownEvents().pipe(filter$1(k => k.key === 'Escape')).subscribe(() => this._ref.detach());
23116
23112
  this._ref.backdropClick().pipe().subscribe(() => this._ref.detach());
23117
23113
  }
23118
23114
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.0", ngImport: i0, type: MapComponent, deps: [{ token: i2$3.OverlayRef }, { token: LOCATION_DATA }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -23189,7 +23185,7 @@ class CubeMatrixPopupComponent extends CubeMatrixBase {
23189
23185
  this.originalAxes = base;
23190
23186
  }
23191
23187
  ngOnInit() {
23192
- this.table.loadingChange.pipe(filter(ok => !ok), first()).subscribe({
23188
+ this.table.loadingChange.pipe(filter$1(ok => !ok), first()).subscribe({
23193
23189
  next: () => this.preloading = false,
23194
23190
  error: (e) => {
23195
23191
  if (e.status === 401)
@@ -24604,7 +24600,7 @@ let ActionsWidget = class ActionsWidget {
24604
24600
  }
24605
24601
  _draw() {
24606
24602
  this.chart?.destroy();
24607
- this._loaded.pipe(takeUntil(this._destroy), delay(200), filter(v => v)).subscribe(() => this.chart = new AccumulationChart({
24603
+ this._loaded.pipe(takeUntil(this._destroy), delay(500), filter$1(v => v)).subscribe(() => this.chart = new AccumulationChart({
24608
24604
  background: 'transparent',
24609
24605
  legendSettings: this.legendSettings, enableAnimation: true,
24610
24606
  tooltip: this.tooltip,
@@ -27925,7 +27921,7 @@ class CombinationPicker {
27925
27921
  minWidth: `${el.nativeElement.getBoundingClientRect().width}px`,
27926
27922
  panelClass: 'home-panel'
27927
27923
  });
27928
- merge(overlayRef.backdropClick(), overlayRef.keydownEvents().pipe(filter(e => e.key === 'Escape'), tap(e => e.stopPropagation()))).
27924
+ merge(overlayRef.backdropClick(), overlayRef.keydownEvents().pipe(filter$1(e => e.key === 'Escape'), tap(e => e.stopPropagation()))).
27929
27925
  subscribe(() => this.close());
27930
27926
  return overlayRef;
27931
27927
  }
@@ -28552,7 +28548,7 @@ class QuickCommentComponent {
28552
28548
  }
28553
28549
  ngOnInit() {
28554
28550
  this._textChange.pipe(debounceTime(TYPING_NOTIFY$1), takeUntil(this._destroy)).subscribe(() => this._mailbox.reportTyping(this.model.documentId).subscribe());
28555
- this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter(e => e.id === this.model.documentId)).
28551
+ this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).
28556
28552
  subscribe(e => {
28557
28553
  this._accounts.get(e.userId).subscribe(u => {
28558
28554
  this.typing = u.name;
@@ -31357,7 +31353,7 @@ class SharedModule {
31357
31353
  PrivilegeHiddenDirective,
31358
31354
  TaggingItemDirective, TaggingDirective, DocumentTaggingComponent, UserTaggingComponent,
31359
31355
  PrivilegeDisabledDirective, CubeDocumentsGridComponent,
31360
- LongRunningTaskNotification, TaggedNotification, CommentedNotification, NudgeNotification, InviteNotification, ContentNotification, TextNotification, CubeAnomalyNotification, EscalatedNotification, LikedNotification, StateChangedNotification, UpcomingEventNotification,
31356
+ LongRunningTaskNotification, TaggedNotification, CommentedNotification, NudgeNotification, InviteNotification, ContentMessageNotification, TextNotification, CubeAnomalyNotification, EscalatedNotification, LikedNotification, StateChangedNotification, UpcomingEventNotification,
31361
31357
  NoneComponent, ScheduleViewComponent,
31362
31358
  OptionsComponent, TraceViewComponent,
31363
31359
  ProgressDirective,
@@ -31550,7 +31546,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
31550
31546
  PrivilegeHiddenDirective,
31551
31547
  TaggingItemDirective, TaggingDirective, DocumentTaggingComponent, UserTaggingComponent,
31552
31548
  PrivilegeDisabledDirective, CubeDocumentsGridComponent,
31553
- LongRunningTaskNotification, TaggedNotification, CommentedNotification, NudgeNotification, InviteNotification, ContentNotification, TextNotification, CubeAnomalyNotification, EscalatedNotification, LikedNotification, StateChangedNotification, UpcomingEventNotification,
31549
+ LongRunningTaskNotification, TaggedNotification, CommentedNotification, NudgeNotification, InviteNotification, ContentMessageNotification, TextNotification, CubeAnomalyNotification, EscalatedNotification, LikedNotification, StateChangedNotification, UpcomingEventNotification,
31554
31550
  NoneComponent, ScheduleViewComponent,
31555
31551
  OptionsComponent, TraceViewComponent,
31556
31552
  ProgressDirective,
@@ -31836,7 +31832,7 @@ class TraceElementComponent {
31836
31832
  });
31837
31833
  }
31838
31834
  chat(e) {
31839
- const userId = e.target.getAttribute('data-info');
31835
+ const userId = e.target.getAttribute('data-userid');
31840
31836
  userId &&
31841
31837
  this._chat.open(userId);
31842
31838
  }
@@ -31859,7 +31855,7 @@ class PositionsPopup {
31859
31855
  this._destroy = new Subject();
31860
31856
  }
31861
31857
  ngOnInit() {
31862
- this.users$ = this.control.valueChanges.pipe(debounceTime(200), takeUntil(this._destroy), filter(v => isString(v)), switchMap(v => this._service.findAll(v, { take: 20 })));
31858
+ this.users$ = this.control.valueChanges.pipe(debounceTime(200), takeUntil(this._destroy), filter$1(v => isString(v)), switchMap(v => this._service.findAll(v, { take: 20 })));
31863
31859
  // this._pRef.backdropClick().subscribe(() => {
31864
31860
  // this._pRef.close(this.dirty ? this.positions : null);
31865
31861
  // });
@@ -31961,7 +31957,7 @@ let ManageCubeIndexUtility = class ManageCubeIndexUtility {
31961
31957
  hasBackdrop: true,
31962
31958
  panelClass: 'home-panel'
31963
31959
  });
31964
- merge(oRef.backdropClick(), oRef.keydownEvents().pipe(filter(k => k.key === 'Escape'))).pipe(takeUntil(this._destroy)).subscribe(() => oRef.detach());
31960
+ merge(oRef.backdropClick(), oRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape'))).pipe(takeUntil(this._destroy)).subscribe(() => oRef.detach());
31965
31961
  }
31966
31962
  _find(axes) {
31967
31963
  const n = this.names.length;
@@ -33577,7 +33573,7 @@ let PositionsComponent = class PositionsComponent {
33577
33573
  _openDialog(tmpl, form, values) {
33578
33574
  form.reset(values);
33579
33575
  const dialogRef = this._dialog.open(tmpl);
33580
- dialogRef.keydownEvents().pipe(filter(k => k.key === 'Enter'), takeUntil(dialogRef.afterClosed())).
33576
+ dialogRef.keydownEvents().pipe(filter$1(k => k.key === 'Enter'), takeUntil(dialogRef.afterClosed())).
33581
33577
  subscribe(() => form.valid && dialogRef.close(form.value));
33582
33578
  return dialogRef.afterClosed().pipe(switchMap(v => v ? of(v) : EMPTY));
33583
33579
  }
@@ -33934,7 +33930,7 @@ class ProfileSettingsDialog {
33934
33930
  this.substitute.disable();
33935
33931
  }
33936
33932
  });
33937
- this.ousers$ = this.substitute.valueChanges.pipe(takeUntil$1(this._dialogRef.afterClosed()), filter$1(v => isString(v)), switchMap$1(v => this._accounts.findAll(v)), map$1(r => r.filter(u => u.id !== this.model.userId)));
33933
+ this.ousers$ = this.substitute.valueChanges.pipe(takeUntil$1(this._dialogRef.afterClosed()), filter(v => isString(v)), switchMap$1(v => this._accounts.findAll(v)), map$1(r => r.filter(u => u.id !== this.model.userId)));
33938
33934
  from.valueChanges.pipe(takeUntil$1(this._dialogRef.afterClosed())).
33939
33935
  subscribe(v => {
33940
33936
  if (v)
@@ -33956,7 +33952,7 @@ class ProfileSettingsDialog {
33956
33952
  this.grants.clearValidators();
33957
33953
  }
33958
33954
  });
33959
- this.gusers$ = this.grants.valueChanges.pipe(takeUntil$1(this._dialogRef.afterClosed()), filter$1(v => isString(v)), switchMap$1(v => this._accounts.findAll(v)), map$1(r => r.filter(u => u.id !== this.model.userId)));
33955
+ this.gusers$ = this.grants.valueChanges.pipe(takeUntil$1(this._dialogRef.afterClosed()), filter(v => isString(v)), switchMap$1(v => this._accounts.findAll(v)), map$1(r => r.filter(u => u.id !== this.model.userId)));
33960
33956
  }
33961
33957
  setId(event) {
33962
33958
  const { id } = event.option.value;
@@ -34078,7 +34074,7 @@ let ProfilerComponent = class ProfilerComponent {
34078
34074
  userId && this._open(userId);
34079
34075
  });
34080
34076
  this._pane.resized().pipe(takeUntil(this._destroy)).subscribe(() => this.chart?.chartResize());
34081
- this.users$ = this.search.valueChanges.pipe(takeUntil(this._destroy), debounceTime(250), filter(v => isString(v)), switchMap(v => this._accounts.findAll(v)));
34077
+ this.users$ = this.search.valueChanges.pipe(takeUntil(this._destroy), debounceTime(250), filter$1(v => isString(v)), switchMap(v => this._accounts.findAll(v)));
34082
34078
  }
34083
34079
  guide(evt) {
34084
34080
  const steps = [];
@@ -34407,7 +34403,7 @@ class IconPickerComponent {
34407
34403
  else
34408
34404
  this._list(IconPickerComponent.icons);
34409
34405
  this.filter.valueChanges.
34410
- pipe(takeUntil$1(this._destroy), filter$1(v => isString(v)), debounceTime$1(200)).
34406
+ pipe(takeUntil$1(this._destroy), filter(v => isString(v)), debounceTime$1(200)).
34411
34407
  subscribe(v => this._list(IconPickerComponent.icons.filter(i => i.tags.findIndex(t => t.indexOf(v) > -1) > -1)));
34412
34408
  }
34413
34409
  _list(e) {
@@ -34440,7 +34436,7 @@ class IconPickerComponent {
34440
34436
  });
34441
34437
  const portal = new TemplatePortal(this.panel, this._vc);
34442
34438
  this._overlayRef.attach(portal);
34443
- merge(this._overlayRef.backdropClick(), this._overlayRef.keydownEvents().pipe(filter$1(k => k.key === 'Escape'))).subscribe(() => this._overlayRef.detach());
34439
+ merge(this._overlayRef.backdropClick(), this._overlayRef.keydownEvents().pipe(filter(k => k.key === 'Escape'))).subscribe(() => this._overlayRef.detach());
34444
34440
  }
34445
34441
  _trackBy(index, el) {
34446
34442
  return el.name;
@@ -38011,5 +38007,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.0", ngImpor
38011
38007
  * Generated bundle index. Do not edit.
38012
38008
  */
38013
38009
 
38014
- export { AccountService, AceInput, ActionDialog, ActionPicker, ActionPipe, ActionRef, ActionsWidget, AddressControlDesigner, AddressInput, AgoPipe, ArraySortPipe, AssignActionComponent, AttachmentInfo, AttachmentPreview, AuthenticationImpl, AutocompleteControlDesigner, AvatarComponent, BIZDOC_CONFIG, BackNavigation, BizDoc, BizDocApp, BizDocComponentFactoryResolver, BizDocModule, BrokenPage, BrowseFilterComponent, BrowseItemsComponent, CalendarPipe, ChatInfo, CheckboxComponent, CheckboxControlDesigner, ChecklistControlDesigner, CollapseNavigation, ColorPicker, CombinationPicker, CombinationPickerBody, CombinationPool, CommentsComponent, CompareContextDirective, CompareGroupDirective, CompareGroupsWidget, CompareNameDirective, ComposeFormComponent, ContactsComponent, ConversationComponent, CubeAccumAnalysisWidget, CubeAccumulationChartComponent, CubeAnalysisWidget, CubeChartAnalysisWidget, CubeChartComponent, CubeDocumentsGridComponent, CubeDocumentsTableComponent, CubeDocumentsWidget, CubeFilterComponent, CubeGridComponent, CubeInfo, CubeItemResolveService, CubeMatrixComponent, CubeParallelComponent, CubePerformanceWidget, CubePivotComponent, CubeService, CubeSpreadsheetComponent, CubeSumComponent, CubeViewComponent, CubeWidgetFilterComponent, DEFAULT_POLICY, DRAFT, DashboardComponent, DatasourceService, DateControlDesigner, DateFormatPipe, DateRangeControlDesigner, DateRangePipe, DesignerCubeFilterComponent, DesignerModule, DesignerRef, DifferencePipe, DocumentFactory, DocumentInfo, DocumentInfoComponent, DocumentResolveService, DocumentViewRef, DocumentViewsComponent, DurationFormatPipe, DurationPipe, EnterExitLeft, EnterExitRight, EnterExitTop, ExploreDocumentComponent, ExploreItemImplComponent, ExploreItemsComponent, ExpressionFieldDesigner, FONT_FAMILY, FadeSlideInOut, FieldKind, FileControlDesigner, FileInput, FilterPipe, FilterTagsComponent, FlowViewComponent, FormPipe, FormRef, GuideRef, GuideService, HelpTipComponent, HtmlFieldDesigner, INBOX, IdentityName, InputFieldDesigner, JoinPipe, JsonPipe, L18nPipe, LayoutComponent, ListingRef, LocalizedStringComponent, LocalizedStringControlDesigner, LocalizedStringPipe, LottieAnimation, MailboxService, MapInfo, MatIconAnimate, MaterialModule, NavigationBase, NavigationClose, NavigationEnd, NavigationExpand, NavigationFocus, NavigationMode, NavigationPaneBase, NavigationResize, NavigationStart, NodeRef, NoneComponent, NotificationsTableComponent, NumberControlDesigner, OpenPolicy, OptionsComponent, POPUP_DATA, PaneRef, PanesRouter, ParamNavigation, PeersPerformanceWidget, PendingResultsWidget, PersonalActivityWidget, PersonalScoreWidget, Popup, PopupRef, PrivilegeDisabledDirective, PrivilegeHiddenDirective, PulseAnimation, QueryParamNavigation, QuickCommentComponent, RadioButtonControlDesigner, RecentsWidget, RecipientResolveService, ReportArgumentsComponent, ReportRef, ReportViewerComponent, ReturnActionComponent, RolePipe, RouterImpl, SanitizeHtmlPipe, SaveChangesDialog, ScheduleViewComponent, SearchInput, SelectControlDesigner, SessionService, ShakeAnimation, SharedModule, SignatureControlDesigner, SlotRouterDirective, SpContainer, StateDirective, StatePipe, StickyToolbar, SubstitutionComponent, SwapAnimation, Tab, TagsComponent, TagsControlDesigner, TasksComponent, TextAreaFieldDesigner, TimeAgoPipe, TimeControlDesigner, TimePicker, TimespanControlDesigner, TimespanInput, ToNowPipe, TooltipDirective, TraceViewComponent, TranslatePipe, TranslateService, TypeAutocomplete, TypeSelect, TypeValuePipe, UsageChartComponent, UsagePivotComponent, UsageReportArgs, UserNamePipe, UtilityRef, VersionCompareComponent, VirtualTabs, WidgetItemComponent, WidgetRef, YesNoControlDesigner, cleanup, getMonthList, isArray, isBoolean, isDate, isFunction, isImage, isMobile, isObject, isPrimitive, isPromise, isString, modelize, playAudio, programName, registerComponents };
38010
+ export { AccountService, AceInput, ActionDialog, ActionPicker, ActionPipe, ActionRef, ActionsWidget, AddressControlDesigner, AddressInput, AgoPipe, ArraySortPipe, AssignActionComponent, AttachmentInfo, AttachmentPreview, AuthenticationImpl, AutocompleteControlDesigner, AvatarComponent, BIZDOC_CONFIG, BackNavigation, BizDoc, BizDocApp, BizDocComponentFactoryResolver, BizDocModule, BrokenPage, BrowseFilterComponent, BrowseItemsComponent, CalendarPipe, ChatInfo, CheckboxComponent, CheckboxControlDesigner, ChecklistControlDesigner, CollapseNavigation, ColorPicker, CombinationPicker, CombinationPickerBody, CombinationPool, CommentsComponent, CompareContextDirective, CompareGroupDirective, CompareGroupsWidget, CompareNameDirective, ComposeFormComponent, ContactsComponent, ConversationComponent, CubeAccumAnalysisWidget, CubeAccumulationChartComponent, CubeAnalysisWidget, CubeChartAnalysisWidget, CubeChartComponent, CubeDocumentsGridComponent, CubeDocumentsTableComponent, CubeDocumentsWidget, CubeFilterComponent, CubeGridComponent, CubeInfo, CubeItemResolveService, CubeMatrixComponent, CubeParallelComponent, CubePerformanceWidget, CubePivotComponent, CubeService, CubeSpreadsheetComponent, CubeSumComponent, CubeViewComponent, CubeWidgetFilterComponent, DEFAULT_POLICY, DRAFT, DashboardComponent, DatasourceService, DateControlDesigner, DateFormatPipe, DateRangeControlDesigner, DateRangePipe, DesignerCubeFilterComponent, DesignerModule, DesignerRef, DifferencePipe, DocumentFactory, DocumentInfo, DocumentInfoComponent, DocumentResolveService, DocumentViewRef, DocumentViewsComponent, DurationFormatPipe, DurationPipe, EnterExitLeft, EnterExitRight, EnterExitTop, ExploreDocumentComponent, ExploreItemImplComponent, ExploreItemsComponent, ExpressionFieldDesigner, FONT_FAMILY, FadeSlideInOut, FieldKind, FileControlDesigner, FileInput, FilterPipe, FilterTagsComponent, FlowViewComponent, FormPipe, FormRef, GuideRef, GuideService, HelpTipComponent, HtmlFieldDesigner, INBOX, IdentityName, InputFieldDesigner, JoinPipe, JsonPipe, L18nPipe, LayoutComponent, ListingRef, LocalizedStringComponent, LocalizedStringControlDesigner, LocalizedStringPipe, LottieAnimation, MailboxService, MapInfo, MatIconAnimate, MaterialModule, NavigationBase, NavigationClose, NavigationEnd, NavigationExpand, NavigationFocus, NavigationMode, NavigationPaneBase, NavigationResize, NavigationStart, NodeRef, NoneComponent, NotificationRef, NotificationsTableComponent, NumberControlDesigner, OpenPolicy, OptionsComponent, POPUP_DATA, PaneRef, PanesRouter, ParamNavigation, PeersPerformanceWidget, PendingResultsWidget, PersonalActivityWidget, PersonalScoreWidget, Popup, PopupRef, PrivilegeDisabledDirective, PrivilegeHiddenDirective, PulseAnimation, QueryParamNavigation, QuickCommentComponent, RadioButtonControlDesigner, RecentsWidget, RecipientResolveService, ReportArgumentsComponent, ReportRef, ReportViewerComponent, ReturnActionComponent, RolePipe, RouterImpl, SanitizeHtmlPipe, SaveChangesDialog, ScheduleViewComponent, SearchInput, SelectControlDesigner, SessionService, ShakeAnimation, SharedModule, SignatureControlDesigner, SlotRouterDirective, SpContainer, StateDirective, StatePipe, StickyToolbar, SubstitutionComponent, SwapAnimation, Tab, TagsComponent, TagsControlDesigner, TasksComponent, TextAreaFieldDesigner, TimeAgoPipe, TimeControlDesigner, TimePicker, TimespanControlDesigner, TimespanInput, ToNowPipe, TooltipDirective, TraceViewComponent, TranslatePipe, TranslateService, TypeAutocomplete, TypeSelect, TypeValuePipe, UsageChartComponent, UsagePivotComponent, UsageReportArgs, UserNamePipe, UtilityRef, VersionCompareComponent, VirtualTabs, WidgetItemComponent, WidgetRef, YesNoControlDesigner, cleanup, getMonthList, isArray, isBoolean, isDate, isFunction, isImage, isMobile, isObject, isPrimitive, isPromise, isString, modelize, playAudio, programName, registerComponents };
38015
38011
  //# sourceMappingURL=bizdoc-core.mjs.map